@agoric/wallet 0.19.0-u17.1 → 0.19.0-u18.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- export default {"moduleFormat":"endoZipBase64","endoZipBase64":"UEsDBAoAAAAAAAAAAAAaqbb/++cBAPvnAQAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxNy4xIiwKICAgICJtb2R1bGUiOiAiLi9zcmMvd2FsbGV0LmpzIgogIH0sCiAgImNvbXBhcnRtZW50cyI6IHsKICAgICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvYmFzZS16b25lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTcuMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvdG9vbHMvKiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLyoiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvem9uZS1oZWxwZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vem9uZS1oZWxwZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pZGVudC1jaGVja2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGlzdC1kaWZmZXJlbmNlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1hc3NpZ24uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtYXNzaWduLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi90aHJvdy1sYWJlbGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rocm93LWxhYmVsZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vaGVhcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJoZWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDg5Zjg3MGM4MGJiY2MwYzBmMzc3MDk0YTI2NGQ1YjIwNmM1OTkxZWRjYzM0MmQzNmQwOTYyYTRlZTEyNWE0MzAyNzRhNGRhYzljMzlhZTczZTBiZjc3MWYwYWRiZmRiOThhMmQ2YmQxYmNlMmFlODg0NjYyMmMxMjJjZDk3MjAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhwb3J0cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhwb3J0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3NjdiOWRlODMwYTZlZDFiZGJhMjRlMTc3YTFjZTUwZjA4M2JjZDc2Y2QzMzcwMzIzNmEyNDQ4YzQxNzgyYzE0MDdjNWZkODVmOTA1ZWY4ZGVjNzljMTJlZGQwMjk1MjE4N2MyMTYxNjZmYTM0YzVmYWEwYjE1NTNkMjA4YTdhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2hlYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2hlYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5ZGUzYjE2NWYzNTc0MGJlMzE4NzQyZGE5YTc1YzkyOTEwNmYyYTc4NDQwYTBjMTY5MTc5OGZlZWMzZDhhMzFlOGEwZDNlZjVjMDlkZmEzNjIxZjgwYzQ4NmQxZDk1OTk3YWUzYjc1YjdiYjRiZDZmMDZkNDZhYzJjMWFhMDY5MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMWJiN2Y1YTdjNjIyY2E1Y2UzZDIyMmZiMWU2NjY0ZmY4NDg3YjA0NjU2YjViOWQ4ZmU3MGM1OGJhNWM2ZWViNDMyMzEzYzliN2IxYTEwNjdhYjAxZDcxMWFjZDEyNGUwNmUxZWUzNmYyNzk3MjQ2NjU1ZDVkMzY5Njg0MTM3ZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pcy1wYXNzYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXMtcGFzc2FibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1YTAwM2QwZTdkMDkzZGQ2MWUyMGFlMWJmMGVlYzY4OTE5NjBlYmE5ZWVkMTNkM2FjMDEzODlmYWFiMjQwMmY4NTllMmJjYTcwOTcwZjg1NDdjMDliNWY5YjQ2M2ZlNDhiYjdjZGQzMDZiZjhmMzNlYjQ0NDFjMmJmYzc4Y2NmMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjBmZDI2YTk3YTA1YjY0NGY4YTk5N2Y1MDQ2ZGFiZjlhMmUzZTE0ZWMwZDU5YmMyYjA3YjMwZDI3NGM5MDAyMWRiMjU1YTYzNjFmNmFkZDYxMDMwODUxNzg0OGEwOTYzNDk4OTgzMjM4NDYyM2E0MjZhNTZkYzBlNGM0ZTU0YzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZS1vbmNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlLW9uY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhYzYzODJhYmM2NDlhM2ZlMGQ2ZTMwYTAzOWExYjhjMzg3MjA2OWZlZjE2NjQ0ZjMzYjNhNTRlZGI1MGJjYzQ4MTliODZkMThmY2RmY2RkMTAyMDNmZTRlMDRlOTM3ZDY1YjY4ZWMxYTZmNDM2MzVkZmI4MmIwOTVkNzBhY2ViNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy93YXRjaC1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy93YXRjaC1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZGNkZWExMDc0ZmE2NGRhMjRjZDk5NmI3ODM0MDM5Y2FlNDlmODFhZDE4M2JlNmJlYjUzOTU5MzQ5MGJkZjM2YmRhYzZjZGY1NGQ3NWRiMTc0ZGUzMDhmYTFmYzk2Y2IyMzQ3NjMyNjJiZDUzZGNmNmI5OTY5NGJhYTRmODE1ZDYiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvY2FjaGUtdjAuMy4zLXUxNy4xIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2NhY2hlIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvY2FjaGUtdjAuMy4zLXUxNy4xIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvY2FjaGUtdjAuMy4zLXUxNy4xIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvY2FjaGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jYWNoZS12MC4zLjMtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3N1YnNjcmliZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NhY2hlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jYWNoZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjllOWY3NDU1YTJlYWJjODYyNjI2ZWVmMjNmNGJhN2ZiOGU4Yjk4YWQzOGEyOWYzZTAzNjRjMDQ5NmJkZTg5ZDg0YjBjOTlkMjJjOWU1NGYxNzIyYTIyZTBlODZjYmQzNDNhNTQxZGY3MTE5MDYzZTRhYWU5YjgwYjUzYWZhNDNlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmODk2MTc0N2U0MWNhM2M2ZGJlYWYzMDViZjFkZTk3MmEyNWMzZDM0MzlmM2FjNGQ2MjUyYzEyMjI5N2E5ZGQ3NjliMmQ3MTY5NWQ0NzZmYWRlNjY2MmIyNWI5NDcwNzBkOWU0YWUzNTczMGI0N2I2YzU0NWQ3MGFhYzZkYWI2NSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdGF0ZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RhdGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkYzQ4MDdmNDRiNGQwODQ1ZWJiNWYyMzY4ZWIxMmEwZjk5MDZmZGIxMTQxNmIzMmVkMWE2MTcxNDE0ZDM5YjdkZjBiZDUxNjVhZjVlODczZWI4YWVlNWM0YWRmZGY3MmQwMjJjZTVhY2VjN2E1YjgzYTcyZTExYzdjMWE5ZTA5NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlNmYyODQyYjQ1ZDE5N2FiZmMwOTk1NGRhMWQxYjg4MjlkMGJiMWMyNmYzNTdiODA2YWJmM2JhMDg3NGQ0ZDczN2YxNjFiYTk0ODY3ODUyNDJmNmY1NDlmYWFkOWQ2MWRhNGU2YWNlNWJjMzEzNDI2NTZjNmIzNmY1NDgxNDY3NSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmNzY3YjlkZTgzMGE2ZWQxYmRiYTI0ZTE3N2ExY2U1MGYwODNiY2Q3NmNkMzM3MDMyMzZhMjQ0OGM0MTc4MmMxNDA3YzVmZDg1ZjkwNWVmOGRlYzc5YzEyZWRkMDI5NTIxODdjMjE2MTY2ZmEzNGM1ZmFhMGIxNTUzZDIwOGE3YSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE3LjEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvZXJ0cCIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL2VydHAtdjAuMTYuMy11MTcuMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2VydHAtdjAuMTYuMy11MTcuMSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2VydHAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3N1YnNjcmliZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4zLjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kdXJhYmxlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9oZWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4zLjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL3ZpcnR1YWwuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjMuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdmlydHVhbC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hbW91bnRNYXRoLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9hbW91bnRNYXRoLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmQ1ZTljYmY0ZWQ4NDVkZGM5NGJlY2JjMzc3ZTIxZWFlM2Y4MDA3ZDI5NDI3YmMxNWMzZTViY2RhY2VkNWNhNzRkYWIyODQzNTk4NGJhNThlNzZkMTdkMGFkNzAxYmQ4NDAzNGJlNzJjNWIxMDA4ZmMwZWM1MDJjZDUwZmM5YzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYW1vdW50U3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Ftb3VudFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDFhMWU2MzQzOTg0MTg5YTc4MGFjNDYyY2YyYTBhYzhkYzljNDA1MDViYTExODBmODJiZDZiY2YxNGE4ZDBkN2Y2OThhNGM2YTQ4NzdhZTY2MWRhNzhjYTVmZmEyZWQ3NTM5M2MwNWMwM2MyZTk5Njk1ZjAyMjA3MjAzZDNiNDgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGlzcGxheUluZm8uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Rpc3BsYXlJbmZvLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDgyZjI4NjMxOTljN2YzNWM2OTI3ODhkYjMxN2U5MDQ4YWNkNmYxMWU1Y2IzZDQ0MWNiODE1MTViZTFkY2E4NmY0MjA0ZjBhMmE1OWU2Yzk5NzA5OGQ0NDlhMDhjMTJiOTFjZWEyYTcwZWM4NzI4N2Y2YzUzODI3YWQ4MDk5OGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZGRmNDAwZmRjMGU3YmJkZWJkMTk2YmU0OTUxYWRhZjE2ZmM4ODk3OTMzMjk3OWQ3ODZlYTUzYTAwZTZlMGFjZDUwODYzYWQ1ZDQxZTA2NjZmMDQ5N2M0NTc0MTYyZjA0MGVkNzZiZmY5OTY0Y2M1OTdmZGQ1M2RjNTE5YmRiZTIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXNzdWVyS2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pc3N1ZXJLaXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3MTc0NmUzNTM4ODk4NjI4OGU1NjA4ZjZkNDY3MmM0NmNlNTQyMTMyOTRiMGZmMGUxYWM3NzhkY2Q3NmJlMDMwZjM0NTBmMDZjMjJkOGU2ZDIzMWRlODYyMzlkODE4NmE2MmZkYTZlNjc4YzkzN2I0OGI2ZjJlZmZjYWM4ZDUyMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUzZDU5ODA0NzYyNzg1NmExZDMyMWJiMGFhNThlNzM5OTlkZWNjN2YzYWFhNzE4NzBhYmIwYmIwZDc0YmJhNDYxOGQ1MDU0NDJjZDU3OGJmZTljNDcxYmZmOTVmMjAwMGFlM2I3NGIxZDFjMmNlYzc4ZmFmMzM5ZjVjODE3NTBmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjM3YzAxODA2NTM4M2M0MmQyNWMyNzY1MTRjNDYyMDJlYWU3ZDFmMWVhMzk3NTU5NjVmMGJhOTljNmRlYWRlM2JjM2MyYmQ2NjU5NjlmOWZkOTBkOWE0NGI3MmM4NjI4Y2JkZjkxMDJlMzJjZDQ5ZDI5NTEyM2RlZTAxN2I1ZDAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGYxYjdlYTljYzA1NmNiNTZjYTM0YmNjNWYzYThlNTdiNTcwMzYwZTNlYzRkZmJjYjIwY2E3YTI4NDZmZDIxNGFjYzNiYWU5MmI4NzBjOWIzY2VjMDE5MjI5NTAyNmM5NTA1ZGFmZTA5NjM5MDMwZjhiZmUwM2I4MzJhNGFjMzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGQ2MTYzYzU0MzQ5MDdmNzQ5N2E4ZDVhOGFjYTRmZmQ3OGMxNGY4MjZiOTA4NzViMTUzMjY2MzgyNzE3OTVlYjU0ZmJhYTIxOTdmYmYxNDA0NTMwNDVmZmFjYmEwYTFiNzYzYjMxNDlkYTRkZWY1NDRiNTUzZTIxMjc0NTlmYWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF5bWVudC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGF5bWVudC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA5OGQxMzQ4YmQ2ODJiYTI0YTlkZTc3NzgzMmRmMzM3YzRmYWI5MWU4OTY0ODZlNzcyNTgxNjc3OTk5MTM0OWJkZmZhYWRkYTkyYzQwZDM0Yzc3YTM3MmI4NjM3ZTNhN2U0NTU5MWExZjliMDczNGNmMGFkYjQ4YWNkZGQ1NTVhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BheW1lbnRMZWRnZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BheW1lbnRMZWRnZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1ODZhM2M5M2FhZjkzYTM2NTMwMGExNjIzOTBlZTA1ODhlMDg1N2NhMjU3NGYwNTAwN2EwNTg5YmFlZTIzYTM4MjdjMDdmYTYyNjE0NjhlZGQ0MDVlZjkzZWVlYTEzZmMzOWViOTFkZmNiODY5YTA2OGZhYTk3NmRkMDkzN2MwYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdXJzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHVyc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3NTY2ZThlNjMwN2ZhZGI1NzQxYTJlMWYyNDZlNTdjODRmMGU3MTk1NWQ4OTc2ZmZjNzEzMzZkZTJkNWM4MzQ5NDJhYTkzNGJlNDE1NDA5ZWIzN2Y2OGNjOWMyMGM3OWFhMTk2MWJjMmE4MDVlN2U1NTVkZjVlZDc3Njg5NDRmZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90cmFuc2llbnROb3RpZmllci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHJhbnNpZW50Tm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhODI0ZDU2ZmEwNWYzZTRhYWYwOGQ1MjQ1NTM5NzY2Y2FkNjVlNjU0YzM2YTU1ZWIyOTYyN2Y4ODU4YzQ3YjgxZTU3NmU0ZDk4OTQxMzFkYTQ3OGI0ZmI4ODAwNGYwOTk1OWYwNzdhZGYyMTQ1YWI1NjA5YmVjMGExOTQ3OGUzNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjM3N2U4MDA1NDJkYjI4ZWYzNzk3NGJiMGFjNmI1NTljODA1Yjk0MmJkZDM0ZDk5NDljOGQ5NWE5ZjBmMTIxZTVmYWQwOGFhZTEyOGJmMDRlM2MxMTU5MjVhNTQ5OTVmOTYwMmU0YTY1MzZiOWE5MjY5NjlkYWViNmIyOGQ3MmIiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2ludGVybmFsIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3Rvb2xzLyoiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy8qIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3pvbmUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3pvbmUtaGVscGVycy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtYXNzaWduLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLWFzc2lnbi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90aHJvdy1sYWJlbGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvZGVidWcuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2RlYnVnLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvbGVnYWN5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sZWdhY3kuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW5pdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbml0L3ByZS1idW5kbGUtc291cmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wcmUtYnVuZGxlLXNvdXJjZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbml0L3ByZS1yZW1vdGluZy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbml0LXYxLjEuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcHJlLXJlbW90aW5nLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvcHJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wcmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW5pdC91bnNhZmUtZmFzdC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbml0LXYxLjEuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdW5zYWZlLWZhc3QuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3N0cmVhbSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9zdHJlYW0tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9zdHJlYW0vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3N0cmVhbS12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJhbnlsb2dnZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiYW55bG9nZ2VyLXYwLjIxLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FueWxvZ2dlci5qcyIKICAgICAgICB9LAogICAgICAgICJqZXNzaWUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL21haW4uanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY2FsbGJhY2suanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NhbGxiYWNrLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODFmZDUyOGUyNDdhMmZiMmY4MjdjMjgxZGU0NDM5YjYxNmRjNmUwNzhiMmI3MzQyZjZmNjY3NDc3NjY5OTJhMmI1MDMwZDcxMzU3YjZlYTIyMGIzYWRiY2VmM2Y1NzE1YmJlZmZlZDNhNDI5NDMyMGI1ZDlhZTU2MDQwMzljNzEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29uZmlnLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb25maWcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiZmE2OTdiOGMyNzEyZmFjYzQ3ZmUyOWY2NmQyYTE5YTFlMjAwNGVkZDY3MmFiY2M3ZDBiYjgxZmY4ZGNhYWIyNDk4YzFmNGFiZDgzZTM1ZTU4YjQ4MTcyNThlZmNlZTM5ZDJiNjFmOWU3ZTQzNjdkMmYzZDQ5MThjMTFjZjAxZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kZWJ1Zy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZGVidWcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4OTI5ODZmMzA4YzIxYWI0MzZjZTdiNmMxZjFjYTIyM2JmMGI2NjE0YzBjZjU4MTA0ZGY5MWRmODhhOGJlY2JhZGY1YmE3ZDg2ZDRjZjU1MTM1Yzg3NWYzNWI3ODZjMWU3Mjk4Y2YxNDg3YjFiM2RiYTA0OTU4YTllMzk0MTM5YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lcnJvcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vycm9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjRjOWVmMGEwNTI0MGI5ZWUxYzJjNDdhMGFlMzQxYzg3NjY1Y2JlMWU5NDhlNmQxNjJmMGJlNDQxNzUxMjg3OGRlZjQ4ZGIzY2U0MWNhN2U4Njg1ODYxMWVhYTdjYzE3NmQwMGRhYzgxMDFlNGMyNDNiNzUyOWM5MTdhNDI2NGFiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjg1YWM0NTUyZWJiY2Q5NWNkODA2MjM1ZjkwNmI2ZTNmNTU5ZTQ4MjFlYzg2N2MyOGQ0MzA1MDgyOThmZDZlY2ZhNGY2OWM5NGQ5NzZmZTE2YjZjNGUwNzBhZDZjODU4MmVhYWYzNzUwZjliZmUzY2ZjMmZlOGNjZjFmYzM5MTRkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjMGIwZTBlMmU5MjJlMTY3OGU2YzY1ZWI3Y2QzZGVmNjMxMjczZWJiM2IwNzVkZmNhODI4NzI0MDM0ODM2ZTllMmQ3MzVkMTY5NWI1NDAyNDg0NGQyYjZhNDdkNGI4ZTFlNDNmNThmM2Y5N2ZhOGNlODM3Y2M4ZTkzZTE1YTAyYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDViMWI3ZTlmMmQzMWQ2NmZlNTQ4ZDk2MTMzZjkyOTNlNjAzMzk2NTFiNWIxZTgyYjJjNTM5YThlMmQ5OGQzOWYxYWM1NDFlODQwNTJjYWI0YjI4MzBiZDYwYmYwODVlOGI4Mjg2Yzg5YzQ4MDk4MzZmZWQyN2Q0ZjdjMmJiNTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWV0aG9kLXRvb2xzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZXRob2QtdG9vbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YjljZWM4ODNiNWZkYmI4YmNlZTJlYTJiNWI3MmNiMjliYzU4NDlhYzZmNDRmMDYzMDE4NjMxMGQ2M2Q3MGZhZjU0YzU2YTdmMmRhYzZlMjYzZjhhMjliY2U1OTE0N2VkMmNmYTUwODA1ZTYzZGQwYmFmZDI2M2M5NzhkMmMyYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImRkOGU5OWY0OTBkNjEzMzliMGM1NmNmY2Y3ZWM1ZmI1MjM2MTUyODEwOGYwMWY2ZGFjMjhlN2U5MzM5ZDYwYmQ4M2IzZGM0YmUxYjIyM2Q0ZGZiMDk5MGU2NWRhMjkwYzA2OTQ4OTRmOWQ5MjVhYTQxZmQxMzNmMDg1NDc1MTEzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Rlc3RpbmctdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Rlc3RpbmctdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2YjY2ZjBhYTdlYmE0YzQ0M2MwMTUyOTRjODExYmMyYWZlNmU0MmQ3MWRmODMxNDQ3NzA0YjAyZDk2MjJjOTQwNmMzOGFiYTQwMjhlZWRiZDExZDg1YjI3M2Y5MTgzMDhjNmIxNjRlNDRiMDM3ZGMxNTY3NmIyNGYxNGVmMDhjMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlQ2hlY2suanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVDaGVjay5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhjZTMyNGRiZWQxYjBkOTE2NzE3ZWQxMjYxNDE2ZjdlZmY4OTc2MzQ5MzA3MTdiMGM2NmVkNTczZTg4MzUyOTNmMmM1MTBjM2YwZTk2ZGI2MjU2MzM1YWY2ODc2N2Y0NzVmMTdhNTM1YWMzZGM2NjVlMTM1ZjA1MzEyMmMwNzc2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5YjQ2MTQ3MGE2ZjVkNDMzMGM4ZGVlZDUxNzc5N2EzMTVjZjI0MzYzNTdhMmM0ZDc2YTY1YmFhOGZjZWE0ODU0YWJjYTdlNjZkODIxOTk5MzA2ZmFjMmY1N2JjNzRjYWZkNWU5Yjg0ZGQzN2U4M2U3NDE5OTZjMjJhMzFkMWJkNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmNzY3YjlkZTgzMGE2ZWQxYmRiYTI0ZTE3N2ExY2U1MGYwODNiY2Q3NmNkMzM3MDMyMzZhMjQ0OGM0MTc4MmMxNDA3YzVmZDg1ZjkwNWVmOGRlYzc5YzEyZWRkMDI5NTIxODdjMjE2MTY2ZmEzNGM1ZmFhMGIxNTUzZDIwOGE3YSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy91cGdyYWRlLWFwaS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdXBncmFkZS1hcGkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjZTFiYWJhYjM0ZmY2OGJhODQ2MjI3NTk1NzBkN2M3N2U3MTcxNjc1YjQ1Njg2YjcwYzUyMDgyMDA4MGE4NjE0ZmRmZGFlYjBhODIzYTRlMzdmOThiYmJlNjBjNzNiNDlmOTEwZTg2MjI3NmIzZGI0N2IwZGVmOTRlZDhjNThhOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy91dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwMDE3OTk2MzVhYzY1ZjEwNDc2ODZmNDlmOTdlYWFlOWY4MTNjYjY1YTk3MTdiNThhNmM4NDE1MThhYjYxZTM0NmZmY2RkNzEyZjMzZGE2MGFjZmRkOWNmNDNkOTJjYjQ3ZTkwYzQ2ZjgxMjUxM2FkYjM2YWYyOWVkMTlkMjc5ZSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvbm90aWZpZXIiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3Rlc3RpbmctdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy90ZXN0aW5nLXV0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3VwZ3JhZGUtYXBpLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvdXBncmFkZS1hcGkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvZXhwb3J0ZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2V4cG9ydGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvc3Vic2NyaWJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zdWJzY3JpYmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci90b29scy90ZXN0U3VwcG9ydHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YWI1YjRkYjRmN2IyMWQ0ZDQxM2ZjNjIzNzRjNjkzZGU3ZWFlZmE2NTg5MGY5NWU2ZTQ4ZGMwZWNkZDM0YzA3OGRjZDRiOWMyNTQ3NmQwODRiZDZjMGYyZWU4ZGE0OWEzN2RjOTU1MmFkYzA5N2UyYTQyMjMzMmI3YTJkOWU0MSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmNmQ1MGNjMGE1N2I4NGFhMDY2ZGEyOWNkMjIwZGE4MGZkNDk2Mzc5NmI2MTYzZjEyMDFjOGFhZDk2MGIzNjM2YTJhMDQ2Njg2ZjE2MWZkYzEzODJlZTM0NWQ4ODcwNTgyYThmNjhlNTkxZjAzMmVkYTcyZjkxOWJlYzFmMGIzYyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9ub3RpZmllci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyNGE5NGUzN2Q1MzI5NmYwOGZjOWVkOTU5ZjRhY2FjOTNmMzA4ZWY1YjBkMzVmZWQ3YmJjOTc1MDdiYzc0OWNmZTgyYzkwZWQ5NmU1NGFjMDUxZjEwNWIzY2NmNWFmMTk1MjhkZDFmMDA1MDZiNmI5ODJmYzc5MzdkNjk3ZTljZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdWJsaXNoLWtpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHVibGlzaC1raXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2NjAyYTlkMmQzZGY1YTFlMTg3OWViYzNkODkwZmMwODY2YzdhNTc1M2E5N2RmZGVlODQzMTQ3MTQ0ZWUzMzViYmZiMmIzMmE5NGQ4ZjJhMTcyNGQwN2UyMjI1YTExOTFlNjdhMTg4ZTcyZmQ5Yzg2NGZhYjQzYmI0YzQzNTVmNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZWQtbm90aWZpZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3JlZC1ub3RpZmllci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA0NTg2Y2Q4NjdhY2M4NmFmMTQ5MjRiYmUyZDM1MzJhY2IyNDUyZDVkZDRmZDMzNzM0MTgzYWFmMGIxYWJjNmU4NDZlMjU0YWFlYTkyNjZlMjA5YWYxMDAxMGZmMTg0MGVjNDkxY2VkZWZjNDZjZTQ2YjhjYTM2MDQ4OTViN2UzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlc3ViLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXN1Yi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUzMzNlY2Q1NjU4NGQyNzY4YjgxZTc2NjJhOWZhZTRlOWQwOGIyMWE3NjMyOWE5Y2MzNGUxNTc0ZGIxZjA1ZTMzYTZlZWIxOTU4YWFjMDkxNDJkNjE2ZjA3N2YyZTc0YzRlYzU3MzkyNDdiMjZkMDE4NDY0NGM2M2RmMjJiNDMxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N1YnNjcmliZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3Vic2NyaWJlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmJmNjM3NDQ1Nzg5NjZhYmY5OWJkMDQ5MzUyOGI4Y2Q5Zjc3MjIyYTAwMjJkYWM4MDM4ZGM5Njc1OWJhMjAyMGVmN2FmZGU5ZDQ3MTY3MTBjMjMzNGEzODgzZTlmMzM4OGE4NDYxMDQ5ZTQyYjkwZTYwZGQwYWIxMWEyMTliZmIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3Vic2NyaWJlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3Vic2NyaWJlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImVmNzk1ZmNkMmVlNzg4MDY4MDAzODkxNzdlMTE3ZGYwM2ZkODY4ZTIxMTIyMjk4ZGE2MDQyOTQzZjczMzg1OGQwNDA5OTFmYjI3NDk5MGEyMjBkNzAxN2NjMzg1ODBlOTNlMjA2MjlmNjJjNjRmYzdjOGY5NTNmMTJlZWQ4MTMxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RvcGljLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90b3BpYy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3MGVlNDNkMTI3ZjQzNTAwZmE4N2FmMDFiMTY4MGQ5OThiZTExYWU5NzExNDBiYmZmNmExNTgzMjI1NDMwODA0MTA1NGNlMjgwNTQ0OWUzMjc0ZTI1MjcxNTBkYzdlNGJlODM1YmQ1ZDZhZjFiMzZhMWQ0ZGRlM2M3YzAxZGIxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3NjdiOWRlODMwYTZlZDFiZGJhMjRlMTc3YTFjZTUwZjA4M2JjZDc2Y2QzMzcwMzIzNmEyNDQ4YzQxNzgyYzE0MDdjNWZkODVmOTA1ZWY4ZGVjNzljMTJlZGQwMjk1MjE4N2MyMTYxNjZmYTM0YzVmYWEwYjE1NTNkMjA4YTdhIgogICAgICAgIH0sCiAgICAgICAgIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInRvb2xzL3Rlc3RTdXBwb3J0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA0ZDkxYzA4MmVmMTkxOTk4OWM1MDlhYWQwNmM4MmZiMmQwZjA2YjI1MjFiODIwMTM1NTM2NjBiNDJlYjdkZjc3YjdlODc5MzE0MjMwZDg0OWYyYTg2ZWJkNjQ0YjUzNDg0ODZmMmY5ZTU0OWZhMzM5NDQ1NmVmN2Q5MGM5ZWZhIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3NtYXJ0LXdhbGxldC12MC41LjQtdTE3LjEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvc21hcnQtd2FsbGV0IiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuNC11MTcuMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3NtYXJ0LXdhbGxldC12MC41LjQtdTE3LjEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9jYXN0aW5nIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY2FzdGluZy12MC40LjMtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvZXJ0cCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2VydHAtdjAuMTYuMy11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3N1YnNjcmliZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc21hcnQtd2FsbGV0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuNC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMy11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjMtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdHMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXRzLXYwLjE2LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0cy9zcmMvbGliLWJvYXJkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0cy12MC4xNi4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbGliLWJvYXJkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdm93IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdm93LXYwLjIuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9lLXYwLjI2LjMtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy96b2VTZXJ2aWNlL3pvZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjMuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4zLjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjMuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvdmlydHVhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi92aXJ0dWFsLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEwIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwtY29udGV4dHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwtY29udGV4dHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyNmJmOWQyNzUxNWViNWU5YTE5N2Y2YWMxZWQ4NzBmNzUwMWQ0ZWI0ZmVlNGFmMjU2NTJhMGExMGE0YTk3YzAyYjA1MWM2NmMzOTFmNTRhNDQxNTM4NjUzYjU1M2MzYzYyMGI5MTVjNjRiYTRjN2M0ZWE2NDFmNDllNzUyN2U2YiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvc3RvcmUiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMy11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9lbmRvdy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5kb3cuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiMjkwNjg3OGI0NGJmODE2OWY1ZWU0YjZhYmRiMjVkYzRiZDg5ZmVhY2FkMTBjMThiZTcxNGM1ZGViZGEyMzgzNDU3OTE0NzUxZWJhZDI2MDMxMDZmMzNlNDQ4NTA1NTY5YTdlY2JmODA2ZjBlYjIxNWFiYjAyMmZlNmRiZGI5ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9sZWdhY3kvbGVnYWN5TWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9sZWdhY3kvbGVnYWN5TWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmIxOWZjYjgyZGJkMGNjMGNjNTgwZTI5NGFhZDA0MDBiMzQxNWIxZTczN2RkY2VhZDEzNTI2YzM5NGQ3MDFhYTA0ZjAzOTY5OThmN2U0NDczYjAyMTI2YjA3MThiYmVjMzk1Y2QyMjQ1ZTY5OWVmMmYxYTM2ZDBjYjU3NGVhNGIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTU1ZDczZjg0MmRmZTQ0MTYyMzBmNjBkMWUyMjQ4M2FlM2ZkMjkzMjM0M2RmZmU4MTYxZTUxZDkxYTYwMzljZGM5MmFkNDU2Yjc4YWQ4NzM3MzBhZDg1YjZlZThlZGQ4ZTUwMzNhNzcwN2E0ZDBhMTk0ZjgyNjAxZTM0MTMwYTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiNThlMWI2YTBiOWNhZWNlZTM4NjQxNTQ5NWMwOWViMWUzM2RjMzZlMzgzYmFiMzcwZjY0MTAwMmQ2NzBiMTA1Y2NmY2FjMWQ1NWJmZWFkMTE4Yzk0OWJhOGIwNDM2MWM0ODFkMTVkMDU5MDE2ZWFlNmY4ODVjMDc4MDhlNGNiOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjRhNmZmMzdiNzVjMDU4MDBiYTUzNGYzNzJmMDQzMWRiNWUyODRjNTM2N2NiMDBmN2Y0ZDExNmNjZmQwYWM5Zjk5ZjMyYzBiOGE3MzdiMThiMWNjMzk4ZDJiNGViODJhYjIyZTNmZDRmNzNlNzc5OTZmMTg0MjZlOGY5ODM3NDA1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5YTJiNGM4ZjJhOGIzN2VhZjIyODkwYmZhM2IzNmRiODk3YjhhMzU1NTRjZTA2YTE4YjgwOTkwMGJiYTY2YmYyNjlhNjBjNzRkZWRmNTcyNGZjYTc1YmI3NGQ4YjE0NmE4MDQ2NmUyMjI3ZjRmNzVjNTMzNWYzMGFhZjhhMGUwZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjc0NGU0MTY2ZDQ2Y2I0ZDBjYTJmYTNlNjVhNDY4NmMyMDE3MjJjZDIzMzE3YjllN2RmNTIzNWU1ZWJhMmVhYjI1MDBlNzE3Y2RmYTU4YzA0MmI1MmZmYzFmMTUyMDk1MDExN2U5MjljZWY5OGJjOTY3YTViMTY4N2NjNzRmNjciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmYzhjMjQ4ZGZlMzg2MDc4Y2RiYTg5YzhiZTkyNDNhMTU3NTA5ODM0MTk2NDc0YTI3ZDhiOGFkMTYzZWRlM2Y5ZTFkNTZiNWJhNTExMGQxZjZlYzZmYWU5OGNkNTA4MWI5OWFhMmUyMWE3YjZkN2Q1OTE2YmIwMzFiZDJhZjVlNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmNzY3YjlkZTgzMGE2ZWQxYmRiYTI0ZTE3N2ExY2U1MGYwODNiY2Q3NmNkMzM3MDMyMzZhMjQ0OGM0MTc4MmMxNDA3YzVmZDg1ZjkwNWVmOGRlYzc5YzEyZWRkMDI5NTIxODdjMjE2MTY2ZmEzNGM1ZmFhMGIxNTUzZDIwOGE3YSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy92YXQtZGF0YS12MC41LjMtdTE3LjEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvdmF0LWRhdGEiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjMtdTE3LjEiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjMtdTE3LjEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvdG9vbHMvKiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLyoiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvem9uZS1oZWxwZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vem9uZS1oZWxwZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N3aW5nc2V0LWxpdmVzbG90cyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N3aW5nc2V0LWxpdmVzbG90cy12MC4xMC4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4by11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhvLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODNkYzIxOWYyOGZiOGUyOTg4NWY1NTQzYTA2MWYzZGIwY2VlYTBiZWY5OWVhYjk3ZDcxNjQzOWMwYzRiZDQ1NDBkMzg0NTQyMGVjYWVjNGE2ZThlNzNmZWE2NjBmYTY1ZDFkNDgxNTNjNzkyYTY3MTY1MWFlZDU0OTkxYzRiNGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNzdlZjBmNGIwNmRlNzM1M2ViODVkOTI2ODE0OGMwODc1ZWE3ZmY2YjU3MmYyMzRiMWZkYmU4MDgzZjNlZWMxZWU0N2RmYWRiNDJjYjc3YTNhYmI5ZTgwYzdmNTg3OWI5NDk1YmViMmFhYTBkZWQ2MDY4NDA0YWNlZDMyNTQzNzYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdmF0LWRhdGEtYmluZGluZ3MuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNzc0MmU0MDgzYjI2NzcyY2VhYTEwN2NmNDNmYTE5MWYyYzY0YmNhMjZiZGFlZmM4ZTA2NTMwNTQwZDY3YjlkYWQ0YmM0NjExNWMzMzRhYjMwMTVjYTE3YzE5ZTk5M2VjYzdhYWNhYTg0YTBlNzU4NDMxMzRhM2M0YTdkYjViOTAiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvdmF0cy12MC4xNi4wLXUxNy4xIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3ZhdHMiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy92YXRzLXYwLjE2LjAtdTE3LjEiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy92YXRzLXYwLjE2LjAtdTE3LjEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNS4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Fnb3JpYy8qLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjUuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Fnb3JpYy8qLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy8qLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjUuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy8qLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy9iYW5rL3YxYmV0YTEvcXVlcnkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNS4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL2JhbmsvdjFiZXRhMS9xdWVyeS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3MvYmFuay92MWJldGExL3R4LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjUuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy9iYW5rL3YxYmV0YTEvdHguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL2Rpc3RyaWJ1dGlvbi92MWJldGExL3R4LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjUuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy9kaXN0cmlidXRpb24vdjFiZXRhMS90eC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3Mvc3Rha2luZy92MWJldGExL3R4LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjUuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy9zdGFraW5nL3YxYmV0YTEvdHguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL3R4L3YxYmV0YTEvdHguanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNS4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vY29zbW9zL3R4L3YxYmV0YTEvdHguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vZ29vZ2xlLyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNS4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vZ29vZ2xlLyouanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vZ29vZ2xlL3Byb3RvYnVmL2FueS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC41LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9nb29nbGUvcHJvdG9idWYvYW55LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2liYy8qLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjUuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2liYy8qLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2liYy9hcHBsaWNhdGlvbnMvaW50ZXJjaGFpbl9hY2NvdW50cy92MS9wYWNrZXQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNS4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWJjL2FwcGxpY2F0aW9ucy9pbnRlcmNoYWluX2FjY291bnRzL3YxL3BhY2tldC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pYmMvYXBwbGljYXRpb25zL3RyYW5zZmVyL3YxL3R4LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjUuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2liYy9hcHBsaWNhdGlvbnMvdHJhbnNmZXIvdjEvdHguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWJjL2NvcmUvY2hhbm5lbC92MS9jaGFubmVsLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjUuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2liYy9jb3JlL2NoYW5uZWwvdjEvY2hhbm5lbC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pYmMvY29yZS9jb25uZWN0aW9uL3YxL2Nvbm5lY3Rpb24uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNS4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWJjL2NvcmUvY29ubmVjdGlvbi92MS9jb25uZWN0aW9uLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2ljcS8qLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjUuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2ljcS92MS8qLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2ljcS92MS9wYWNrZXQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNS4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vaWNxL3YxL3BhY2tldC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNS4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vc3dpbmdzZXQvbXNncy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC41LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9hZ29yaWMvc3dpbmdzZXQvbXNncy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9zd2luZ3NldC9xdWVyeS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC41LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9hZ29yaWMvc3dpbmdzZXQvcXVlcnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vc3dpbmdzZXQvc3dpbmdzZXQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNS4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vYWdvcmljL3N3aW5nc2V0L3N3aW5nc2V0LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3RlbmRlcm1pbnQvKi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC41LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi90ZW5kZXJtaW50LyouanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vdGVuZGVybWludC9hYmNpL3R5cGVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjUuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL3RlbmRlcm1pbnQvYWJjaS90eXBlcy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by92c3RvcmFnZS9xdWVyeS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC41LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9hZ29yaWMvdnN0b3JhZ2UvcXVlcnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9lcnRwIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9nb3Zlcm5hbmNlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZ292ZXJuYW5jZS12MC4xMC40LXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbmV0d29yayI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25ldHdvcmstdjAuMi4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvZXhwb3J0ZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2V4cG9ydGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvc3Vic2NyaWJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zdWJzY3JpYmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci90b29scy90ZXN0U3VwcG9ydHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zd2luZ3NldC12YXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zd2luZ3NldC12YXQtdjAuMzMuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdGltZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3RpbWUtdjAuMy4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXRzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0cy12MC4xNi4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZvdyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3Zvdy12MC4yLjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvZS12MC4yNi4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvem9lU2VydmljZS96b2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b2Uvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvZS12MC4yNi4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2R1cmFibGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjMuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZHVyYWJsZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS92aXJ0dWFsLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4zLjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3ZpcnR1YWwuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS9zb3VyY2UtbWFwLW5vZGUtcG93ZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zb3VyY2UtbWFwLW5vZGUtcG93ZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUvc291cmNlLW1hcC1ub2RlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zb3VyY2UtbWFwLW5vZGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEwIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9lbmRvdy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5kb3cuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJpbXBvcnQtbWV0YS1yZXNvbHZlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogImltcG9ydC1tZXRhLXJlc29sdmUtdjIuMi4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJqZXNzaWUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL21haW4uanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY3JjLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jcmMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzODA4MmM3NDA4ZTI4MzJjY2E0NzQ0NzgxMDhhZDMyM2I5MGI4ZmI2MGVjMzQyYWJkZTY2ZGM0MTAzYmRiYWMzZmI3YTcwYmRhMDFkN2U3YTRmMmUxMWQwNTE5MmE3NTBkMzEyZTA5NWJhMzkwMjY2NGFiM2JkMDQ2ODRjMzg2OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9saWItYm9hcmQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xpYi1ib2FyZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNkYWUxNDc4MWJlOWZjNzAzMzk3YTVjZTA0NzFiYjI4ZTYyOTY0YWVlZjFhNDE5MmVlM2IwYTZkN2E2Zjk0MDk5MzUzNzdkZmE4ZDNhZWRiNjZmZTk0ZDEzMTA0MTk2M2NjNzMwNmQzOWE2NDY4YmRiZjNhYjIxOGVmMTliZmFiIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE3LjEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvd2FsbGV0LWJhY2tlbmQiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxNy4xIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTcuMSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2NhY2hlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY2FjaGUtdjAuMy4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbWFpbi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2VydHAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbC9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL2V4cG9ydGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9leHBvcnRlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3N1YnNjcmliZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3Vic2NyaWJlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy90ZXN0U3VwcG9ydHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zbWFydC13YWxsZXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zbWFydC13YWxsZXQtdjAuNS40LXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3NtYXJ0LXdhbGxldC9zcmMvbWFyc2hhbC1jb250ZXh0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3NtYXJ0LXdhbGxldC12MC41LjQtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3RpbWUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy90aW1lLXYwLjMuMy11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvd2FsbGV0LWJhY2tlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvZS12MC4yNi4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvem9lU2VydmljZS96b2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4zLjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kdXJhYmxlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9oZWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4zLjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL3ZpcnR1YWwuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjMuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdmlydHVhbC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEwIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiaW1wb3J0LW1ldGEtcmVzb2x2ZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJpbXBvcnQtbWV0YS1yZXNvbHZlLXYyLjIuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYWN0aW9ucy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYWN0aW9ucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjAyMGZmNjMxY2I0YmFlYjgxYzNmMjcxOGJkN2NkNDEwZGU5Y2E4ZWYyMjMxMjI0MzQ2YzkwOGYzMWQ4NDQ3OWUzNjAyZmZhNTI1MTM3MWFhMWNkZmJmZDg2OWJjYWQzZmUzNDhmOTc3NjMyM2UzZjNmYWUxMDJjMGRjZTMyMWM1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2JpZ2ludFN0cmluZ2lmeS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYmlnaW50U3RyaW5naWZ5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNmFjZmNkMTFhOWFjZGJlMmZjNjNhNGQ5ODczNzlkZGMwYmEwZDM2NzU2NTA0ZDE3NjNlNDhiOWU2NTNhYjI2MWM5MDIzNzZhYWJlNmU3Yzc1Yjc4YzNlZTA4MGM2MDlkNmJjY2QxM2QyY2UzYmQyYTYxNjhmOThhNGZkM2E3ZTMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGF0ZS1ub3cuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2RhdGUtbm93LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTIyZTYwODAxMGJlYzg0N2E2ZjQ1MWZhZjViMzI0NjE3NjI5MjU2N2ZjYjYxMGEwMDQ4YTUyZTQ5ODU5OGNhNTAwNzAyMGE5MjBmYmQwMmU2YmJmNjVmMmUwODU4NmQ1NzIwMDY1MzJlNjU4Y2NiZTNkYWZkYzhhZTZlMDlhMWEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZmluZE9yTWFrZUludml0YXRpb24uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ZpbmRPck1ha2VJbnZpdGF0aW9uLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGRmYjI2Y2U0ZTI2MzAxZjM4YmZiMjg1OTEyYTczNDQ2MzRkMTQ1MGFiMTc1NDMyYzA3N2E1M2Q5MTcyMjkyZTM3ZTEwNWUxZDU1ZDIxNmE2ODZiYzNjNWQ1MmI2NjhlNmU0ZWQ5YTVjOWU0OTEwMDM1YzU1Zjc5NzdlNTgwNTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW50ZXJuYWwtdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ludGVybmFsLXR5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmM5NTM3Y2RiYjJlMjVjNDAxNTcxNGEzZjlhZDE1NmJlNGZiNjY2OWY1OTA5NTE4YWE5OTUxMGViZjgwMGUzYTMzZTRmYzBiZTZmOWJlYjU3ODMxYjEzYjYxMjQ0Mjg1YmMwMjVmYThjMzQ3ODlmZWQ0MDcxNGJkNDdlZjM3NTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXNzdWVyVGFibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzc3VlclRhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDY3YjkzNzJkNzY2MTU1YWIxMWUzM2MzNGRjZmQ4NWFiMjEyOWE5ZjA4ZmEzODc5ZWE4YjU0ZGYwZjViYzU3MjliZDRmZmY1ZTkyZWUzZTU4ZmMyYmY4NWVmOTViMTkxNmZiNzE1YzFiMTMwY2JhMDQ4NGMzMmY2ODZmYThkNWIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGliLWRlaHlkcmF0ZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGliLWRlaHlkcmF0ZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBiNDY3NTY5M2E5YjYzYzkxMTYwYTY5NGZlZjAyZTg3NmJiODExYjE2ZDlmMmMxMmUxZGZmZGQzMTU2OTI3NmRlMTYwNjFkYzIwNGE3NDgyMWE3MzViNmViMDVjNGE0ZWRjMThkMzQ5NTUxOGI0YWEwYmU0Y2EyZDI3ZDJkMmU5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xpYi13YWxsZXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xpYi13YWxsZXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkMjc4ZTQyYjRkOTc3MzczMzNlMzhmY2MyOGU2Zjg3ZTA0ZTkxNzYzMGYyNjAwODExYWVhZGNkM2NiNmVmODcxMTI5NTM5YjRjN2ViYmExNzdjZTA0NDYzMWZiYzQ5OTgxYjJjYWQ0MGZjNzE0MmYyOTNjNDY1Y2E2YjZjNjBiOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdWJzdWIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3B1YnN1Yi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjVjNjczMjUxMWNjZDk3NmU5ODgxMTVlMmE4NmYyNmM5M2Y4ODgxM2U5ZjhiN2EwNjllNTRiNWNlNDIzYjZhN2E3NmFmYWZmZWExM2IxNTk5MmY4MTYxMmNiMzUxMDUyZmZhNTRlOWRhNGViNWIzZDc2NTJhZjhhYTBhODVkNjQyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3dhbGxldC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvd2FsbGV0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODE3MGM0YjE5MjdjMzBmZDU0NjhhOGVhYTUwZDE2ZGEzYWI4MTIyNmU1MDIxOWEwYzJmM2YwZjE5ODEyYzU0NDU0YWJkZThkZjc0YjEwMGY0M2RlZTA2ZTQ1ZDQ1NGIwNWRjNTY3ZmIxN2I4MDg5OWEzMmNjNjM1OWNlYmJhOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvem9lLXYwLjI2LjMtdTE3LjEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvem9lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvem9lLXYwLjI2LjMtdTE3LjEiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy96b2UtdjAuMjYuMy11MTcuMSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZS9oZWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZS90b29scy8qIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvKiIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZS96b25lLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi96b25lLWhlbHBlcnMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9lcnRwIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL2V4cG9ydGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9leHBvcnRlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3N1YnNjcmliZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3Vic2NyaWJlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy90ZXN0U3VwcG9ydHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMy11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3dpbmdzZXQtbGl2ZXNsb3RzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3dpbmdzZXQtbGl2ZXNsb3RzLXYwLjEwLjMtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N3aW5nc2V0LXZhdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N3aW5nc2V0LXZhdC12MC4zMy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy90aW1lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdGltZS12MC4zLjMtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjMtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZvdyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3Zvdy12MC4yLjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvZS12MC4yNi4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvem9lU2VydmljZS96b2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4zLjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kdXJhYmxlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9oZWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4zLjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL3ZpcnR1YWwuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjMuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdmlydHVhbC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9idW5kbGUtc291cmNlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2J1bmRsZS1zb3VyY2UtdjMuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYnVuZGxlLXNvdXJjZS9jYWNoZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9idW5kbGUtc291cmNlLXYzLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY2FjaGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYnVuZGxlLXNvdXJjZS9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9idW5kbGUtc291cmNlLXYzLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vYnVuZGxlLXNvdXJjZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYnVuZGxlLXNvdXJjZS12My40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jYXB0cCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jYXB0cC12NC4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jYXB0cC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY2FwdHAtdjQuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtYXNzaWduLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLWFzc2lnbi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90aHJvdy1sYWJlbGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS9zb3VyY2UtbWFwLW5vZGUtcG93ZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zb3VyY2UtbWFwLW5vZGUtcG93ZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUvc291cmNlLW1hcC1ub2RlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zb3VyY2UtbWFwLW5vZGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEwIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9lbmRvdy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5kb3cuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJ5YXJncy1wYXJzZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAieWFyZ3MtcGFyc2VyLXYyMS4xLjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2J1aWxkL2xpYi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJ5YXJncy1wYXJzZXIvYnJvd3NlciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJ5YXJncy1wYXJzZXItdjIxLjEuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYnJvd3Nlci5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM0ZjE1NDM1ZWRkNTliOTZkYjZlMGJiZWIxNDg3Y2RkZTIwMzcxMmE0NTZhZTgyNjM4NjAwY2Y5Mjk5OTUzODFhYTM3ODg3NDRhODM2ZGVkMWYyMTI1MjYxYjdhZDNhZjcwYTA2ZGNiZDFjYWFmOTRkYTk2YTVhODFmY2I2YzUzIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3pvbmUtdjAuMy4wLXUxNy4xIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3pvbmUiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy96b25lLXYwLjMuMC11MTcuMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3pvbmUtdjAuMy4wLXUxNy4xIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3Rvb2xzLyoiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy8qIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3pvbmUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3pvbmUtaGVscGVycy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4zLjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMy4wLXUxNy4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kdXJhYmxlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9oZWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4zLjAtdTE3LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL3ZpcnR1YWwuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjMuMC11MTcuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdmlydHVhbC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJkdXJhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTc4ZjE2MTdkZWRmYjUzNzVjZDIwYjdjNjBmODdmMDYwMmM5NzQzYmJjNDRjMzk4YjliMDE3M2ZjNjQ4MDUwYzYyNzhhMzZiNmNiNTM2ZDc3OTRlZTAyYTYxZDhkMTNlMGU3MTU4MjdkZGU0NTk5MjJlOWI0OGRkZWJmNGU1N2QiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZHVyYWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA5MjRkMWZmZDhmM2Q2OTU2Y2E4ZThjYTZlZWQxM2VkOWJjZWY2OGVjOTgxMmFlNzZmNzBlYzI0MWExNGRmNDdiZmU0Y2M4MTEyMGJmZGE3NzJlOTkxMTFlN2UzZDZhOWFiZTkyNmJmZGRiYjU1ZGFiZWM1Mzc0NmYwMjg1MjQ5IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9jb21tb24tdjEuMi41IjogewogICAgICAibmFtZSI6ICJAZW5kby9jb21tb24iLAogICAgICAibGFiZWwiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2lkZW50LWNoZWNrZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLWFzc2lnbi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1hc3NpZ24uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3Rocm93LWxhYmVsZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdGhyb3ctbGFiZWxlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJhcHBseS1sYWJlbGluZy1lcnJvci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjEwOGNmMjgwYjAwOWU5MDg5NzllNzMzY2Y3NGY2MTA1MDdiYTFlOWE0YTkyZDFhZGZiNGZiMDRkN2NhODYxOTIyODA3ZDMyYjdhNjA1MmY2ZTAyODJkNGFlY2Y3ZGUyNTlmNzhmZDUzNWNiOGIyOGY3MmRjMjAxNDI3OWNlMjJhIgogICAgICAgIH0sCiAgICAgICAgIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJmcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDJkYTdjNjUwODQ1NjAxYTg3NDg2MDI4ZTA2ZTk1NWE5ZDI0ODYwMjRiNTY4NWYzNzNlMGExYzBhMjlkYTIwMjRmYzhlYjc2OTY0ZDEzZjNmZmEwMmJjZmRkYWEzZjhjYjQ4YWM0MzQ0NDc4M2I4YWYyNzQ1ODllNjU5MGFjNzIiCiAgICAgICAgfSwKICAgICAgICAiLi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImlkZW50LWNoZWNrZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzYjUzZjE0NGQwYmIxMzllNjgwNTcxNzhmNjlkZGFkNDc0YjIzMWM5N2E1MTIxNTQ4NDFkZjU2OGM0MWQxNmM4NzkzNzdiYzliNGJkMDk4YmViMjc2OTA4ZTZlOWYwZDc1NGQ1ODY3ODk0MDlhNjZiYWYyYThjZDFhZGJkZmE4ZiIKICAgICAgICB9LAogICAgICAgICIuL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJsaXN0LWRpZmZlcmVuY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2ZWZjYzUwMDY5MDE5MDRjN2NkZDNhMDQwMTkyZTIxNDU1OGU2MDM5NjU5ZDllMGY3ZjIyYmU2ZWRhOGY0Yzk0OWFlNDAyMTYwZDA2M2E1M2Y2OWY3OGU1ZmJkZDZlMjQ5N2M1NTYyNjE1NDRmNzYyMWVkNGNjZWZjNTI4MGFhZiIKICAgICAgICB9LAogICAgICAgICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAibWFrZS1hcnJheS1pdGVyYXRvci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImI2ZjkyMzc0ZThkNzdiODZlYzIwMzVjMjFiZTllM2E0MDc2ZjBkMWVmNWU4ZTlmNzg1OTcwYjIzMzRhNzA3Mjg0NjAwZDEyMjVjZDhmNGFmNjliMzczMjZlMWI5ZjUyY2E1ZmYxYTcyYzIzY2M5ZTZiMzY2YjYxMDk3ZDdhNDg3IgogICAgICAgIH0sCiAgICAgICAgIi4vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJtYWtlLWl0ZXJhdG9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNmVlMjZkMGE2ZWIwMDNmNzc2ZjgzYWJkNzQzNjI3Zjk2YmUxZTA1NDcxZDNjYzI2NmJlYmM1ODk0OWZiMDUxMDM0NzYwNzIwYTlkMzIzNDBmMzJlNmRhOTYxNjRmYzFhMzc4ODJhOGQ0MTJhZjg5Y2ViNGI4Y2I5MTgyZmZiMjMiCiAgICAgICAgfSwKICAgICAgICAiLi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm9iamVjdC1tYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxMDdiZDg4N2FhODM0YjMxNTExNWI4MThhMGE2ZTBjMjFjZTEzOGZiNDc4ZGMzNzQ0MTA2M2YzMTc3ZDJkNjc1NzRjZGE0NThiZGYwOTgwMmQ4NzM0YzU1YzI4ZDgzNTZjYTRkMmRlMGUwNWU4MzAzYmU0ODQ5OTU2ODEzY2ZjYSIKICAgICAgICB9LAogICAgICAgICIuL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJvYmplY3QtbWV0YS1tYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YTVhNjE2MDZkZmZjZDk5ZDJiNjYyZmQ0MzQ3ZWM5MjIxY2UyMmJlMDliODNhM2RmYTA0NTVmODkyNWZlZTdiMmQ2NDVlZGQ0ZjgwNTFmNzM2ODExZTU5NzI5NDI1ZTBmYmRlOGI3YzMwZTgxNDYyMzhhZTBmZTc4ZTg4ODFiMSIKICAgICAgICB9LAogICAgICAgICIuL3Rocm93LWxhYmVsZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAidGhyb3ctbGFiZWxlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNmMTVhMmUxN2Q4M2Q2ZDhjN2E1NmI2M2ExNDk2NGI2MjI1Yzc4YWJjNDUxZmVmZDg2NjU1Mzk0MTQwY2Y0ZGJkODRmZTQzNjBmMWZlNGQ5ZTJmYTBkZDM3YTYyZjlmZjZkNDdmODRhOGZiNTEzMWQ5N2IzNzBhYjU2M2UwZjc2IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2Vudi1vcHRpb25zIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNiIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY5MzMwZWNjMmQ1NTQ5Y2JiNzhhNDM3NGU5NmZkY2UwZDAyMzRlNTcxZTQ4M2EzYWZiOGJjYjQ3OTE2MDAzODEzOGU4YjAwMjk4N2M2ZWI4ZTM2ZWQ0NmU4NjhjMjhhZGRjY2MyOGExYjFjODYyYjgwZmJiOGMyNjVjMTY3MmRkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Vudi1vcHRpb25zLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbnYtb3B0aW9ucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImViNTA5Yjk4YWNhNDQ4MWY3OTVkMGNhOThjNjhlODJiZTMxMDcyOWE1ZGQ0YmQ1OTU5YWNhZDQzMzg0OGI3ZDFiNzc5ZTZlZTEwMzM0ODA1MTc4N2Y4MDNlMzYyNmM4NGM4ZDcwZmI5MDdhMWM5NmIyNmFmZDllODIyZjYzNTIzIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9lcnJvcnMtdjEuMi41IjogewogICAgICAibmFtZSI6ICJAZW5kby9lcnJvcnMiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJzZXMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2Fzc2VydC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Fzc2VydC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb21wYXJ0bWVudC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2NvbXBhcnRtZW50LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93bi1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xvY2tkb3duLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAic2VzL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwYWMwOTE0MTEyZGU5NGNiYWIyZTU2ZGU3YjA4NGIwOTY0NGE3MmI1ODBlYTI4MWI3N2E2M2I1NzBmYTU4ZTVkOGRkZWQxYTRhZDk3MTY0YTUwNDA0NzRmMzFiYjZjNWVmYmIxYjAzNzVkZTBhMzdkMGJhYTI0ZDJmMzE3MjcyNSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2V2ZW50dWFsLXNlbmQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvRS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvRS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM5MjNiYmU3MTNjOGQ3ZmY0NzJhNjY3ODkzOTFlZjQwZWU5M2NiOTdjNjliNjM4NzUzNDRhZTQ3ZjBiM2UwYTlmODEyZjU0ZWU5Mzk4ZjVlZGQ1OGJmMzg1OTZiOWNiNTI3NTM4ZWQ0NDM1ZWJhYTg0ODIxMGRmN2E5Zjg3MWFiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4cG9ydHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4cG9ydHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmNzY3YjlkZTgzMGE2ZWQxYmRiYTI0ZTE3N2ExY2U1MGYwODNiY2Q3NmNkMzM3MDMyMzZhMjQ0OGM0MTc4MmMxNDA3YzVmZDg1ZjkwNWVmOGRlYzc5YzEyZWRkMDI5NTIxODdjMjE2MTY2ZmEzNGM1ZmFhMGIxNTUzZDIwOGE3YSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9sb2NhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbG9jYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2ODQ1ZWE4ZWFlYjNlYmU3OGZlYzY4NzRhY2NlZDRmZDk4ZGE3MjIxMTBhMTU2Njg1YTM1ZmQ5MTVlYjJmOTA4NmQwNGRlNDdlMzM4MWU5NjA4ZTU3OWQ0NmM3NzM0NTRkYzBjMjc5MzVlOWZkMjI4MmRhNTI5MjFhNzk1MzI4YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjJmMDdmNTY3Y2NjZTY3MDJlMDhjMDZhNzA0OWJkNDEzYjQyMDMwMTg2OGIwMDEzZmYxYjNmM2NiMDU4ZjkyY2NmOTYzMDZhOGI3ZDFjYjIxZWUyYWFkNDk0ZDlkM2E1MzQ3YmQyYjJkMDQ3MzcyZmMxMTljYmU3OTI4MGI3M2QiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbm8tc2hpbS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbm8tc2hpbS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjMzMTMyNGYxZTFlYTM3MDBkOTkyZDBjZTc1ZTNmMGRmNGI0ZDQ5NGIwZTE2YWNmZDM4OGUxNTI2MzhjODU4NGEyZmM2ZGQyY2JlMzAzYTYyNjBkOGQ2NzkwY2RiMGJhMDJjMWIyNWUzZmU4OWY0MTdjYzk4NTBiMGNmMTk0ZDg3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RyYWNrLXR1cm5zLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90cmFjay10dXJucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU3NWRjNmZhMWUyNzlhOWNlNzA2YTI0N2UxOWE0YzZkOGYzNDU0MzE2NDAyZjA4ZTg2YmJmYTYzNGYzNjMwNWNlYmUxODllN2EyYzFhMmY0OGY1NzllYjBiZmFmOWU0MmMyMWIzODkzMWVjMzBlY2ZiYTM4YTY1NDRjMjVmYTdiIgogICAgICAgIH0sCiAgICAgICAgIi4vdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAidXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1MTE4M2Q4YjMzZWJiYmVhMDdmYWUzNWNmZGZiOTNiOTM5Y2NkYTM4NGQzYjRjMzg3NWIzNjE3ZjQ2N2QyZTUyODZlYjgwNWIwOGU2NzMzYmVkMzY0OWIzM2M1OGM0MTE1ZGZlODJlZDlhMzkyMjA1YWVjZmIyZDMxOTFkZTFkZCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZXhvLXYxLjUuMyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXhvIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pZGVudC1jaGVja2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGlzdC1kaWZmZXJlbmNlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1hc3NpZ24uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtYXNzaWduLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi90aHJvdy1sYWJlbGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rocm93LWxhYmVsZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4ZmU0YzFiZTZjZThjMWM1YmU3NWUwODM2NmZmYTA0Yzk1OWFkNTgyMzAxMGU0YjYxMDYyODZlMTNhOGI4ZWJmODhmM2VmOGQ3MWZmOGNlNDk4ZmYwNWRmMWY3MTllMmRhZTQwZWQ1MzAxYjc0ZTBjNjkzMzVkMmEwMjkxZTlmOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leG8tbWFrZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9leG8tbWFrZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTliNTBmMTUzYTVmZDA2ZThiZGZkMDBjMGRmYjlhNzE1ZDk0MDA2MTRjNzlkNDRkYmJjNDAwMjNhYjE0ZjlhZGEwNjQyOTY0ZTk2ZjlkNjY0NWU4MDZjMjkyNWQyMDRiODZhMmJjMmVhY2U1Y2RhNmU2ODM5NzczMWY5ZGYyMzIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhvLXRvb2xzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9leG8tdG9vbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjZDRmODBiNTA3ZjRhY2UzZDJlMDNhZDM0YmUyNWM2NmM4N2MwODRmMzRlN2FmOTRiZDlhY2I3MDFlNjRhZjI3YjczNDhkNzZmOTVmMWJjMDUwODgwMzMwM2UwZjRiYjIxZTkyN2JlZTJjZDYyZDYxYzdlZTkxNjI4Y2M0ZmQ2OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9nZXQtaW50ZXJmYWNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9nZXQtaW50ZXJmYWNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMTdhNzdlMDM4YjlkNWQ1ZTEzNjJmODdjZjNjNGEwOWM3MDYxNGIyOGRlNTQ5YzRkNjI2NmQ4NTBiYWYzODU4OWQwMTlmYTRiY2FlNWExZjcxYTU0NDM0YmVlZTlhZjI5OTc3NWNiMDg0YTQzYjVhNjYzNzdlNGU2YjA1ZWYwZTIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjc2N2I5ZGU4MzBhNmVkMWJkYmEyNGUxNzdhMWNlNTBmMDgzYmNkNzZjZDMzNzAzMjM2YTI0NDhjNDE3ODJjMTQwN2M1ZmQ4NWY5MDVlZjhkZWM3OWMxMmVkZDAyOTUyMTg3YzIxNjE2NmZhMzRjNWZhYTBiMTU1M2QyMDhhN2EiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Zhci12MS4xLjUiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2ZhciIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9lbmRvdy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5kb3cuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkMDZmNDM1M2Y1YzY4ODE3YTJkZWU3YzgxZGExNTYzYWVmZjVmMmVjODgzYmZlZGI5MTU3NTFmMzc1Y2E4NTUwNTFkYzQ1M2FiZjY1NjljMThiMmQ5YzMwMTJhODBhNDVmNjdmMTlhZTU4MjY1MTU3OWI2N2MyNmRmZTE1OTY3MSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vbWFyc2hhbC12MS41LjMiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL21hcnNoYWwiLAogICAgICAibGFiZWwiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtYXNzaWduLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLWFzc2lnbi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90aHJvdy1sYWJlbGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwYzMzNzAwMTA4NTM5NjQ2Y2YwZmQzNzJlNzczOThhNzg0NjgyZGRhMWFlZmY0MmJjYjY2M2I2Y2JiZjcwOWVmNDc5YWI0ZjJmNWFjZmFjY2QxNzExZTAzMmEwMTNhYWFmYWZmMjJkZjI5YzhlYmNlMjJhZTliNTE4YmQ5MmFkYiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGVQYXNzYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW5jb2RlUGFzc2FibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmNDJmNzkzMmZhOTc1MjViZTk4ZTI3ZTUxOGFiODNmYzIxMGVkMDRmYzZhNjg3OGU2NDU1YTkwZDIwNzQwOTVmMDc3MDkwYzM0ZWQxYzRlZDA4YjIyNjljNjJiYTE5NjI3N2M0MzNjZTc4MzA0MmEwZDAyOGYxOTFlN2NjYzRiNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZVRvQ2FwRGF0YS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImIzODRlZWM0YzcxOTg1MDc0ZjZkNTQ3YjFjZDEwMWM4ZTViNWUzZDBhMjgwOTNmYmQ4M2QyZDU0M2IyMTZjNDZkOTM0NDRmNTJhYzJmYWJhMzc4MzE5OTE2MDY5ZTI4NzI3YzVmMWE5NzM1ZWVhM2ZmMWVhNDJkMGQ0NDkyNzc4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU2NmRjNmYwYmJhOGNiNGU1NWJiOTUwZjIwMTM2NGZjZjRhMDFmNjc2MDJlYzNkMTU5NzI0NDZhZDFmYTM2YWMwNDk1NThhYmFjNzVlN2YxZTQ4YTEzNzQ0MzBkMjY2MDkwMzgzMTMxNjlkZjllZmFhMjRhMTI3MWY1NmUxOWUyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLWp1c3Rpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjYyNGZhYmNiNjA0MzAzZjEzN2JlYWFmOWRjMTk4ZmE1NmE1YmIwOGJhODc1MDBmNjRmYzc2YjcyYzlhMGZiNDg4MzA1YzE1YTVmZGI2NTQ0N2UwZDMyNzNjMDk1MzhiZDlmODZiYjA5MWVhZjM5MzcyZDIzOGFjNGFiZDFjM2ZmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImFkNDVmYWJlMGM3MTc2ZjY4NzNmY2M4YmJjMTE1YzY2ZDM1ODA3NWQ4YjE1OGM3M2NlOTVmZjJiYjViN2I1ZGZmMTZmYjJjM2M5NTFmYzA2ZTc1ZjVlZTA1MjVmYmZmZDk1OTgwNjM0MjlkMTk5YmRkYTY4OWU3NzI5MmFjYjQ5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1ZGFmYWVjYTE4YWM4YWMwMTNkYmM2ZGU0NTBlZWZlZTY0MzRiM2Q1ZjJjNGY2MTA0YzM4YTE3MjQ5Yjg5MjJhNWZlZjQ4MGQ1NTk4YzI5YmIyYzk2YzM1YmM2MDQwODY3NWUxZWMxMWRkZTVhZWQ4YmMxOWQ0MTEzMzFlZWE3ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yYW5rT3JkZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JhbmtPcmRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUzNTQ2OTRjMGQzNmFmODAwNmFiODE4ZjNiNGM4NDVhZWQ2MDgwMDFjM2I5ZTZiNTViMDYwZjIwMzUwMTE3YWRiNzRjYTc1NTg3MWQxMGE0OTg2OWYzNzEwMjI3Yzk2ODZiNDQxOTUzNWE2YjQyOTUxNGRlZTRjYzVjMTg3ZTk0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3NjdiOWRlODMwYTZlZDFiZGJhMjRlMTc3YTFjZTUwZjA4M2JjZDc2Y2QzMzcwMzIzNmEyNDQ4YzQxNzgyYzE0MDdjNWZkODVmOTA1ZWY4ZGVjNzljMTJlZGQwMjk1MjE4N2MyMTYxNjZmYTM0YzVmYWEwYjE1NTNkMjA4YTdhIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9uYXQtdjUuMC4xMCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vbmF0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL25hdC12NS4wLjEwIiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL25hdC12NS4wLjEwIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3NDA2MTM3ZTFiZDNiNTU4NGM1ZjI3ZGJmY2JhZTJlYzc3Y2JhNjNkZjA4MWMyZDQ0MDViYWRlYWI3OWRmNWVkMmU3NjU2NGEwMDk1MzU1M2FmMWMxYzBmMzU3MTA0OTYzNDhmN2VmZWMzYTkxNjc5MGU0YjVmY2ZlMzE1ZWYyMSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Bhc3Mtc3R5bGUiLAogICAgICAibGFiZWwiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZW52LW9wdGlvbnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGZhc3QtY2hlY2svYXZhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBmYXN0LWNoZWNrL2F2YS12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpYi9lc20vYXZhLWZhc3QtY2hlY2suanMiCiAgICAgICAgfSwKICAgICAgICAiQGZhc3QtY2hlY2svYXZhL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZmFzdC1jaGVjay9hdmEtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJlNzhjMjRmYWJhMDdmNjRhMGNmODQyOTdhM2ZlMWVkYzZhNTc1ZDY5NDNlNjNlZTYwYTE4MWU3ZmFkNjQ0NDRlNmEyNzM0ZGE2OGZkYTc4MDM2ZjBmYmVlM2FhMWIxZWRjZDc4M2MzOTU5ODRlZDEzYTU4NGVmYmY5ZGYxZDY4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvcHlBcnJheS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29weUFycmF5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTYwMGY4Y2NkNzMxNGMwNzA5MDVlZjg3Y2RhZjE1NjVjYzY2NDVmMzhhNGZjYWJjMWIzYTI1ZGEwMTg4ZmJjYzgwYzA2YzMzNTk2Y2E5ZTU5Yzg4MmFjMzY1YWFhZjg5NzU4OWRmN2QyNThiOTQyMTZhYzdhNDc0ZmM0MzQyZTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29weVJlY29yZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29weVJlY29yZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU4OTYwNzM0MGIyNTA3OTdmOTMwMzIzNzNiODRiZDVlM2NjMmZhNjY3ZjVlMTUyZjYyOTRmZmQwNmY1MzBkM2Q2YjA1MGJiY2U3MTNlMzE5ZWZkNTEzMTY0MjBlYTU5ZGQ4NzVjMDdmODMwZDQ3NWQ4MDViMmJiYzcxZWRmZjI1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjU2NmZkYzVhYmQwNzc3ZmFkYzQ0NGVmZjZjOTdjYWFkNTkyOTdkMmM5NTRiNjQyMTMyM2MxZjk3ODY5YmNmOWNkYWE0M2YzZjUyZGQ0MTgwMTFjN2FiZGIxMzM3ZTBjOTljYjY1NGM4MDljODJhODY5ODZjYTM0ZGM4M2MyMjIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXJyb3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vycm9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODBkYTdlMzY2OTNhZjM5OTQ3ZmEzYjNkZGY2ZmE3MDg0ODk1Yjc4YmQ2MDRlNWU2MDZiNTU3NjExOGZiMWQ0OWM0ODE0NjcwNDFhNTc3MmNmYzU0OWIyYzE5NDc2ZDczZjQ4ZDdhZjc2MTllYjA1OWMyOWRmMzcyYzYzMDhkNTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXRlci1oZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pdGVyLWhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5MzNmMWY2OWJlNjhkMzUxZjMxMmVkODVkMmNmMjMyMTRhN2YxZjBkOWJiZmExNTNiNTNmZjAxYjA4YzQxNjdjZGZjM2IyNzVlYmZlN2E2MDkyN2IyNmE5YzIwOGVjMGFmODA4ZGVhOTJkODcyYzQyZmExMTc0ZjlhZWRmZGFjMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYWtlLWZhci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZS1mYXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1OTcxMzdlZGJiMjBlMDEzNGM2ZjVmZmNjZmI4YTc3NTBjMjZhMzBmODc0N2I4YzM2Y2UxN2UzMzRiZDE4NWM0Y2M5MzI2OTcyNmE1MGI5ZWY5ODMwNjQ3NTRkYjE1NmM5ZTBlZjAyM2RhNGE4NGQ0OTQ5MThiYTRkMDA1MDg0OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYWtlVGFnZ2VkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlVGFnZ2VkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDRiNDhiNTQ1MjZmNTUwODUwMTFhZGVkNGI4NTJlOWY3Nzg1ZGE2MTNmZDc0NDExYTIxZDFjNTVhMmU3NDY3ZWE1ODZiYzAzM2UzZGMxMzRjNjc3NWI0NjM4NGYxODY5MzY0NjM3ODBiMGJiYjRmYmIzNDNkY2VlMWIwOWU5OGMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2RkYTM5MDc5NDc0OGJiMWE1YTI5NjkzM2U2NTNmNjRjNGQ0OWI5MzA4MWJjNTUxMGIyNWJjMWI1M2U0Y2ViYTFhMTVhMjZlMjQ0NGNhZmFkNjdhMGY4MTZkMmViNDEyODA3YTMwNDgwOTQzYzIyMTY2MDNlNDdjOGEwMmQyOTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFzc1N0eWxlT2YuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Bhc3NTdHlsZU9mLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzY5NDllYTZmMGQ4ODRmMjQ2OWVhZGM3N2M0NzY1OTQ2MGViZjUwNjY2ZWJiOWU1YWZjYjZlOWU5ZDExM2NkODNmZDBkNzA1NjA2ZDA2ZGJlNTI3YWE4ODRlNzEyODFmYWUxZTU5ZmY0MGU2NmM2YmE3MmNjOTEwMmY5MzAzMzQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmVtb3RhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yZW1vdGFibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzNGQ5Y2U1NWIzZTk2OTFkNGQ0Zjk1NjhjNGIyNGMyYTQwOTE4YmJjZTZmNDc3YTkwMTU5OTNkOTJmZTU1NGFmNjE0MWY0MGMwYjRjOThlNmQzMGFlMjVlMDZjMGFhMjMzOGY2ZWQ0MmE5YjhiZGRjNmFlN2RhNDRhZTZkMDg2YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zYWZlLXByb21pc2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3NhZmUtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImI1MWFhNGExOTkzMzk0ODY2NzgzMDMwNzVjNjFlMmFkMjBhYWQ2NTIwZmYyYjBkOTgxNjI2OTVhZTU3N2U3ZWMzN2ExZTUzZmYzYjQxM2FhNzJiYTBjYWUyOThjMTMzNjUyOGViYjFhYjBhYzQwMmE3ODI4NTgyMjFmMzkyYjhkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0cmluZy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RyaW5nLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2NmODg5MTk5NGJmNGZlMGI1MWVmM2JmN2YxZDg2YTljMDU4ZmVhODYyZTRkZWM0OGU4YTY2MGYwZTg3ZTU0NDhhM2Y3YzJiZDM3NjhhYmE4YjhmNjUxNTQyOWU1NjMzNzJhNWJhMDBmMGRiODI2YTM2YjUyN2UzMjBlMjY4YWQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3ltYm9sLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zeW1ib2wuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjY2E5YmU1NTczNGIxMmMyM2VjYmNjYzNlZmFiMzI0YmIzNDRhNTcxY2RiNGZkYzdjZDdjNWE4MDExZTVmZDIyMWFkMjM3ZjQ3NmM1ZmIyNmYxNmU4YTczZGUxNWVkN2M0OTc5M2M5ZjU1N2FlMDAzYjlkY2NkOWQzYjQ0NjgwMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90YWdnZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RhZ2dlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjRmNzY4Nzc2MjdhYWU4NDY1ZWQ2YTY3YjQzZDhmN2ZlMGY2MjIzMDEwMzkwOTMxOTZkM2U1MDdmYTMzN2IxNmQxYWNhZmE5YmFkOTA4YTEwNjNhZjg1NGYzZTllZDVjYWM4NjM4MTFiYWU5MWNlYWNmYjViZjQwMTJlODg1NDJiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0ODM4OTdmYzQ3NmFhOGRhYTZkNDg3NGJiNmJiMjRkNjgyM2U2MTEwNzEzMGZkOGUzNDQ3NGFjMDFlM2JjYzEyZGFkNjNlZjc3OTJhODMxYmFjZmRlZDY3NjMxZjAxNWU1ZjhmMmU0NjZhNjZmYzk4ZjRlMTBjZTU5Yjk4ZTRmZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmNzY3YjlkZTgzMGE2ZWQxYmRiYTI0ZTE3N2ExY2U1MGYwODNiY2Q3NmNkMzM3MDMyMzZhMjQ0OGM0MTc4MmMxNDA3YzVmZDg1ZjkwNWVmOGRlYzc5YzEyZWRkMDI5NTIxODdjMjE2MTY2ZmEzNGM1ZmFhMGIxNTUzZDIwOGE3YSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vcGF0dGVybnMtdjEuNC4zIjogewogICAgICAibmFtZSI6ICJAZW5kby9wYXR0ZXJucyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vcGF0dGVybnMtdjEuNC4zIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2lkZW50LWNoZWNrZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLWFzc2lnbi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1hc3NpZ24uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3Rocm93LWxhYmVsZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdGhyb3ctbGFiZWxlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYWEzYzE0YWViN2VmNGUxYTYwMGFmOWRhMWEyOTVkNzczYWM3ZjcyOWEyNzVlZWFhNGRjZTM5MmFkOGUxOGE3NjNkMDM2Yzk3ZjVhZGRmZWE5YjFiMDI0MTAyMDZlZTI5NWFiOWMxZjI5ZTQ3ODg3YTE2OGFiMWQxZWIwYTJlNWIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jaGVja0tleS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jaGVja0tleS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjVkM2IyMzVjOGMyNzViYjIwZGUxZDMwMzZmYjg5ZWZmMTFiZTJmNzA3MjY1NWFiYzA2MGRiNjBiNGFhZmRiNDJlYWM5YTQxOWJhYzcwNGIzNTllZWNhYWMyM2E1NDJjOTdlYzc4ZGE5NjJkMGVmODJmMTk3MDVhNGQ3YmUwMDAxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29tcGFyZUtleXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvY29tcGFyZUtleXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwY2Y0MDM2ZDRiODRjOGFlZTVmNTAxYjM2Yjc0ODdhMjZjNWIzOWVjMDg2NDMxYzRkYzZmODBiOTY3YzU2NjBlMGMzNjFmY2MyNjg0YjQ0OWVjZTFiZTk0MzA1MGJjYWE1NzkzMTFjM2VmYTg4NTk2Mjc5ODdlNTNjMjM3OTIyYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2NvcHlCYWcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvY29weUJhZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ1MjYzYzlmZjgxODE3YjhmNTQ3MTE1YWM1ODY3ZjQ5MjRjY2Q3MWIxNjJkNDg0OTE3NGY2ZTdlY2MwZThhMzI5NGY4MzkyNTViMTIyMmE2YzYzMWM2NDQzM2Q4ODE0OTViYzdiZTY0ZWFiMTY2OTg5YTgyYmU0NGU1Zjg0NWM1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29weVNldC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb3B5U2V0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZWJmMjkwZjQxYTM1NDg3ZDUzYTE0OWQ0NTRkZjFkYTEwNDFmZTBhNzZhMTM4OGMyYWFhYTY0ZTgzMDEyNTg4M2MzYmVhNjhjYTc1NWM3MzRjNjFhYTRjNGY5M2UxOTIwNzdhZDAzNTUxOTQ2N2I0ODM3ZmY4YzA4MWI1OThmZDAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImE4YzkwYzEyY2RiOGU2NGRkZTU3MTUwN2Y3MzFlZmQ5MmJlMmI3YWEzM2Y2YjkyZDYyZmE1NzcxMTMzMDJkNjA1OTJhNDVmZTY5YmIyYjE2YmM0ZmUyNjgyODRiNDNlYmJjOTc2N2E3MjNkNmI5ZWM0MzIxMjNhYTE2MTFhNWE2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDczNGE3ZWIwODRkN2U1NDdlZWIyYmQ3MTBjNGZhYTAxMmI0Y2FhZDJkZWJjODE0OTc4NDQ1ZWU4YWYwNWNiMjdlODAyMzFiMGI5NDU5ODljZDllMTVhYzIyYjRjZDE4ODQ2M2NkNTQ0OThhZTI4MzZiMGZkOGE2M2IxMjMyMDIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5Y2E3ZjgxMTI1ZmQ3MGQ4NWMzOTM3NmM3YTBkZDhhNjNmODMyZDIyYzEzODQ3YzFkMTZjY2UyYmJmOWUxNzI1NDdhMjUwNDYyMTQzMDg0YjM3OTdmNDIyYTFkODU3NmFjNDFmZWM4NmIwNGMxY2UwNGY5NGE4ZDMzYWJiY2EyMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjE0YTNkYjhlMjNmMzZhZTA1NzE5ZmRmMjdhMWE5N2ZjZDgyZTk4MjQwNWNiZTNjNTQ5ZDZkMzI2Zjk3N2E5MzQ4YjQ1MDdhOTQ4MWE2Y2Q0NmQ4OTdmMTY2Mzk2YmJiNDY1ZDFiOTg2MmYyYzk1MTQwN2QyNTk0ZGM2MmU1NDAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjNTRlNDBhYmE3NjNmOGM3Y2RmNjIwZWQ4Y2Y1MjFmNTczNjc4OTIwMGVlMjAzZDgwYmZiMzBkZmRiOGYwOWEzMWYyN2FhYmU4N2QxMTRlODI2NmY4ZTg4ZWUyMDViNjQ4OTQ5Y2Q3ODgyZDM1ZmU3OWM0NjAyNmM2ODZiYThiOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmNzY3YjlkZTgzMGE2ZWQxYmRiYTI0ZTE3N2ExY2U1MGYwODNiY2Q3NmNkMzM3MDMyMzZhMjQ0OGM0MTc4MmMxNDA3YzVmZDg1ZjkwNWVmOGRlYzc5YzEyZWRkMDI5NTIxODdjMjE2MTY2ZmEzNGM1ZmFhMGIxNTUzZDIwOGE3YSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IjogewogICAgICAibmFtZSI6ICJAZW5kby9wcm9taXNlLWtpdCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvYXNzZXJ0LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXNzZXJ0LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbXBhcnRtZW50LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29tcGFydG1lbnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbG9ja2Rvd24tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJzZXMvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImIwMGI4MWM1ZTg0ZWE4ZWU2MDIwZjAzZDcyOWM3ZTBhYTY5ZTk5YmUzN2JkYjc3MmI3NGI5MWVhN2UzYTIwODRiNGQxNDQ5NGZiNDc3MjA1NTE4NmU1Yjc2NzkwZDZhMzAwZjJiMWE2NzhmMGY5Y2JmYzU4NmQxODBmNDRhZjY3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2lzLXByb21pc2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzLXByb21pc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhZjVjNjE1OTE3ZDU0NGYzM2ZjMjhmNWJkYWUyZTkwMGM1NjE2NDQ2NzhiMDJhM2ZiNWM4MGI4MTEwNjYxMWJiNmQwOTVjNTc1OTU2NmJhY2JhZWNmMzYzYTVlNzIzODZkMTdmZGYxMjc0ODVhMGNiYTBhZDE5NjBkZDQ5MDAwOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZW1vLXJhY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21lbW8tcmFjZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA5ZThmYzRkY2EyMWFlMzZkYTNkMmI2NjgwNGEyYWZiYTQ4ODNjYTViMTBkYTk4MDNhODE4ZGMzMTU4M2VlMDQwMGM5YmE0MmVkNTNmMmE5ODBmYmY1NWNhNGI0OGQxM2M3ODUyZTM1YjVhZGU1YWQ3NWRkY2NhZDk4N2E0ZDJhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM4NWQ0ZWZiOGMxN2UwYWU2MjliZDA5NWY0ODQ3YjY2ODQzOWRhNGQxZTdlZDE0MjU1OWNhYTU2NWExMmMxMGYxMThjMjAzOWQ2MTVhYWQzYTE1M2U2NzllNjc1ZjhlNDdmZThiZDBiN2FkMWE3OGMzMWZjYWIzZTE3YmEzNTc5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3NjdiOWRlODMwYTZlZDFiZGJhMjRlMTc3YTFjZTUwZjA4M2JjZDc2Y2QzMzcwMzIzNmEyNDQ4YzQxNzgyYzE0MDdjNWZkODVmOTA1ZWY4ZGVjNzljMTJlZGQwMjk1MjE4N2MyMTYxNjZmYTM0YzVmYWEwYjE1NTNkMjA4YTdhIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9zdHJlYW0tdjEuMi41IjogewogICAgICAibmFtZSI6ICJAZW5kby9zdHJlYW0iLAogICAgICAibGFiZWwiOiAiQGVuZG8vc3RyZWFtLXYxLjIuNSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9zdHJlYW0tdjEuMi41IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3N0cmVhbSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9zdHJlYW0tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9zdHJlYW0vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3N0cmVhbS12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJzZXMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2Fzc2VydC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Fzc2VydC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9jb21wYXJ0bWVudC1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2NvbXBhcnRtZW50LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93bi1zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xvY2tkb3duLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAic2VzL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiZGY3NmNjYmU3NmQwODI4MzM0OWRhZTcyZTQwMTlmMGEwOTIzZmYwYjI2MzQwODRhNmMxOWI1ZWEyNjc3YTUxODlmMmEwNGY3NDVmOTdhMDVmNzg0MWI2YjIzNzQ5YTc4YmQ0MmU2ZDkxZjBkOTdhNTJiZWNmZWU3NGJjNDVhZCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiamVzc2llLmpzLXYwLjMuNCI6IHsKICAgICAgIm5hbWUiOiAiamVzc2llLmpzIiwKICAgICAgImxhYmVsIjogImplc3NpZS5qcy12MC4zLjQiLAogICAgICAibG9jYXRpb24iOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgImplc3NpZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJqZXNzaWUuanMtdjAuMy40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbWFpbi5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYWluLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWluLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTQyNTYwMWE4NjNmMDMzYjlmZTg1MjNiZGY3ODhmMmRmMWYwMTdhNWI1NDU5ZTUwMTViY2I4NTZmNDA2MWMxYTJmMjE5MmYxNGE0YTQ4YTFmMjI0MmYxYWYyYzRlYThmNDY1Y2I3NThiM2M4ZTM1OTQ5ZjUxN2E3ZmRiOTE2YjIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvRS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvRS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEyOGU4ZjNkYTRkNjExZjc5Nzk4YzA1ODFiODFiMmNhYTQwZDczNTQ1ZGZjN2QyOWQ0NjQ2NTk2MGFjMDk4Yjk5MWZmMDBiMzdkNjlhYTFmN2U3YWNiNzVjNDc5ZWJhYjg1NDM0NjYwYmFhMjM1ZjYzMjU0Y2Y2MGNmM2UxNmI2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcwL2FzeW5jLWdlbmVyYXRlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMC9hc3luYy1nZW5lcmF0ZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBjZTM3MDI2YmFiMDlmMWViMjgwZGUzMDY1YmJjMjYzZTdmOGE3ZTU1Yzc4ZTZiMzJiYTFiMDE2NTcxYmE0Nzg0OTIzMmFlNDkwZjNiMDU4MDRiZGYzN2I2MTE0MmJhZDllYjFiNDU0ZjMxOTczNGE0YTg3NWE5MDBkY2MyMDQ4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcwL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcwL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlNDgxMzUyZGMwOTc5OTJlMTRkNzc2M2I5Y2NmZGVmNGY0Y2UzMjIyYTlkNTZmYjlkZDVjY2M5MGE0Njg5ZTU5NjY3YWJhYjgxNzM1ZDg5Njc3MGU4YmZlOTUzMTQ4OGE2MThmYWNmN2EyYzJjOGU2ODk4YmQ5ODNhN2RlMTM1MSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMC9tYWtlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcwL21ha2Vycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImEwNWMyMjNlNWY0MDViZjM5YzIyZGE3YTIyNmRlMjg2MTU1ZTIzODJmN2JiYWYxNjUwOGZjOTFiMWI2ZjVmY2IzNjVhNTAzMDY4NjQ1ZTQ1MzU4Y2FlMjZhNjk0ZTE5MDk1NWQ2NWQ3YjI2MTI4ZTBjNDJjNGZjYWQxNTQwNGY0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcxL2FzeW5jLXRvb2xzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMS9hc3luYy10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjMyZjcwMjllMmFjYjc5N2I4M2NhZTgzYmQ5MWIwMDM5OGQyMTJlZmE4OTQxM2U2NjQ4NWY2MGJmNmJmYTBlNDVmNDJlNTdhODBkYzUxNDBkNjA1NzNlMTYzZTcxYzQ2YWQyZGQwMjYxZTFkMzBmYzUwMWQyZTA2ZDc4MzBjNGYyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcxL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcxL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4ZjAyMWQyOTQ1YTc3MmMzMmJkYmFlMGY5NGRiNjBjOGVmYjEzYzI4MmVkNTU3YjdkOWZhMDBmOTFjNGM5ZDMwMmFkODRlMjVlMjI2NjZmZWE3Y2ZkZDBhM2ZiYzNjOTIxMjQ1NGJkYjMxY2RlM2M2OTk3NWMwZGE3ZmJkZWVmOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn1QSwMECgAAAAAAAAAAAKeA7R2EAQAAhAEAACYAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEvaGVhcC5qc3siaW1wb3J0cyI6WyIuL3NyYy9oZWFwLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvaGVhcC5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtbXCIuL3NyYy9oZWFwLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAAC0AAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEvc3JjL2V4cG9ydHMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAm0GGYHcKAAB3CgAAKgAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTcuMS9zcmMvaGVhcC5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXhvIiwiQGFnb3JpYy9zdG9yZSIsIi4vbWFrZS1vbmNlLmpzIiwiLi9rZXlzLmpzIiwiLi93YXRjaC1wcm9taXNlLmpzIl0sImV4cG9ydHMiOlsibWFrZUhlYXBab25lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXIsaXNQYXNzYWJsZSxtYWtlRXhvLGRlZmluZUV4b0NsYXNzLGRlZmluZUV4b0NsYXNzS2l0LG1ha2VTY2FsYXJNYXBTdG9yZSxtYWtlU2NhbGFyU2V0U3RvcmUsbWFrZVNjYWxhcldlYWtNYXBTdG9yZSxtYWtlU2NhbGFyV2Vha1NldFN0b3JlLG1ha2VPbmNlS2l0LGtleXMsd2F0Y2hQcm9taXNlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXSxbXCJpc1Bhc3NhYmxlXCIsIFskaOKAjV9hID0+IChpc1Bhc3NhYmxlID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2V4b1wiLCBbW1wibWFrZUV4b1wiLCBbJGjigI1fYSA9PiAobWFrZUV4byA9ICRo4oCNX2EpXV0sW1wiZGVmaW5lRXhvQ2xhc3NcIiwgWyRo4oCNX2EgPT4gKGRlZmluZUV4b0NsYXNzID0gJGjigI1fYSldXSxbXCJkZWZpbmVFeG9DbGFzc0tpdFwiLCBbJGjigI1fYSA9PiAoZGVmaW5lRXhvQ2xhc3NLaXQgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaOKAjV9hKV1dLFtcIm1ha2VTY2FsYXJTZXRTdG9yZVwiLCBbJGjigI1fYSA9PiAobWFrZVNjYWxhclNldFN0b3JlID0gJGjigI1fYSldXSxbXCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyV2Vha01hcFN0b3JlID0gJGjigI1fYSldXSxbXCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyV2Vha1NldFN0b3JlID0gJGjigI1fYSldXV1dLFtcIi4vbWFrZS1vbmNlLmpzXCIsIFtbXCJtYWtlT25jZUtpdFwiLCBbJGjigI1fYSA9PiAobWFrZU9uY2VLaXQgPSAkaOKAjV9hKV1dXV0sW1wiLi9rZXlzLmpzXCIsIFtbXCJhZ29yaWNWYXREYXRhS2V5c1wiLCBbJGjigI1fYSA9PiAoa2V5cyA9ICRo4oCNX2EpXV1dXSxbXCIuL3dhdGNoLXByb21pc2UuanNcIiwgW1tcIndhdGNoUHJvbWlzZVwiLCBbJGjigI1fYSA9PiAod2F0Y2hQcm9taXNlID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cbmNvbnN0IGRldGFjaGVkSGVhcFN0b3Jlcz1GYXIoJ2hlYXBTdG9yZXMnLHtcbmRldGFjaGVkOigpPT5kZXRhY2hlZEhlYXBTdG9yZXMsXG5pc1N0b3JhYmxlOmlzUGFzc2FibGUsXG5cbnNldFN0b3JlOm1ha2VTY2FsYXJTZXRTdG9yZSxcbm1hcFN0b3JlOm1ha2VTY2FsYXJNYXBTdG9yZSxcbndlYWtNYXBTdG9yZTptYWtlU2NhbGFyV2Vha01hcFN0b3JlLFxud2Vha1NldFN0b3JlOm1ha2VTY2FsYXJXZWFrU2V0U3RvcmV9KTtcblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSGVhcFpvbmU9KGJhc2VMYWJlbD0naGVhcFpvbmUnKT0+e1xuY29uc3R7bWFrZU9uY2Usd3JhcFByb3ZpZGVyfT1tYWtlT25jZUtpdChiYXNlTGFiZWwsZGV0YWNoZWRIZWFwU3RvcmVzKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgbWFrZVN1YlpvbmU9KGxhYmVsLF9vcHRpb25zKT0+XG5tYWtlSGVhcFpvbmUoIGAke2Jhc2VMYWJlbH0uJHtsYWJlbH1gKTtcblxucmV0dXJuIEZhcignaGVhcFpvbmUnLHtcbmV4bzp3cmFwUHJvdmlkZXIobWFrZUV4byxrZXlzLmV4byksXG5leG9DbGFzczp3cmFwUHJvdmlkZXIoZGVmaW5lRXhvQ2xhc3Msa2V5cy5leG9DbGFzcyksXG5leG9DbGFzc0tpdDp3cmFwUHJvdmlkZXIoZGVmaW5lRXhvQ2xhc3NLaXQsa2V5cy5leG9DbGFzc0tpdCksXG5zdWJab25lOndyYXBQcm92aWRlcihtYWtlU3ViWm9uZSksXG5cbm1ha2VPbmNlLFxud2F0Y2hQcm9taXNlLFxuZGV0YWNoZWQ6ZGV0YWNoZWRIZWFwU3RvcmVzLmRldGFjaGVkLFxuaXNTdG9yYWJsZTpkZXRhY2hlZEhlYXBTdG9yZXMuaXNTdG9yYWJsZSxcblxubWFwU3RvcmU6d3JhcFByb3ZpZGVyKGRldGFjaGVkSGVhcFN0b3Jlcy5tYXBTdG9yZSksXG5zZXRTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLnNldFN0b3JlKSxcbndlYWtNYXBTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLndlYWtNYXBTdG9yZSksXG53ZWFrU2V0U3RvcmU6d3JhcFByb3ZpZGVyKGRldGFjaGVkSGVhcFN0b3Jlcy53ZWFrU2V0U3RvcmUpfSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZUhlYXBab25lKG1ha2VIZWFwWm9uZSk7XG5oYXJkZW4obWFrZUhlYXBab25lKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VIZWFwWm9uZSI6WyJtYWtlSGVhcFpvbmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAETdOXHACAABwAgAAKwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTcuMS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9leHBvcnRzLmpzIiwiLi9tYWtlLW9uY2UuanMiLCIuL2tleXMuanMiLCIuL2lzLXBhc3NhYmxlLmpzIiwiLi93YXRjaC1wcm9taXNlLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9leHBvcnRzLmpzIiwiLi9pcy1wYXNzYWJsZS5qcyIsIi4va2V5cy5qcyIsIi4vbWFrZS1vbmNlLmpzIiwiLi93YXRjaC1wcm9taXNlLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vZXhwb3J0cy5qc1wiLCBbXV0sW1wiLi9tYWtlLW9uY2UuanNcIiwgW11dLFtcIi4va2V5cy5qc1wiLCBbXV0sW1wiLi9pcy1wYXNzYWJsZS5qc1wiLCBbXV0sW1wiLi93YXRjaC1wcm9taXNlLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACottPlgAgAAYAIAADEAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEvc3JjL2lzLXBhc3NhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiXSwiZXhwb3J0cyI6WyJpc1Bhc3NhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCByZWFsSXNQYXNzYWJsZTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJpc1Bhc3NhYmxlXCIsIFskaOKAjV9hID0+IChyZWFsSXNQYXNzYWJsZSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQYXNzYWJsZT0oc3BlY2ltZW4pPT5yZWFsSXNQYXNzYWJsZShzcGVjaW1lbik7JGjigI1fb25jZS5pc1Bhc3NhYmxlKGlzUGFzc2FibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQYXNzYWJsZSI6WyJpc1Bhc3NhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIafySh7AwAAewMAACoAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEvc3JjL2tleXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImFnb3JpY1ZhdERhdGFLZXlzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGtpbmQ9KGxhYmVsKT0+IGAke2xhYmVsfV9raW5kSGFuZGxlYDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2luZ2xldG9uPShsYWJlbCk9PiBgJHtsYWJlbH1fc2luZ2xldG9uYDtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFnb3JpY1ZhdERhdGFLZXlzPXtcbmV4b0NsYXNzOihsYWJlbCk9PmhhcmRlbihba2luZChsYWJlbCldKSxcbmV4b0NsYXNzS2l0OihsYWJlbCk9PmhhcmRlbihba2luZChsYWJlbCldKSxcbmV4bzoobGFiZWwpPT5oYXJkZW4oW2tpbmQobGFiZWwpLHNpbmdsZXRvbihsYWJlbCldKSxcbnN0b3JlOihsYWJlbCk9PmhhcmRlbihbbGFiZWxdKSxcbnpvbmU6KGxhYmVsKT0+aGFyZGVuKFtsYWJlbF0pfTskaOKAjV9vbmNlLmFnb3JpY1ZhdERhdGFLZXlzKGFnb3JpY1ZhdERhdGFLZXlzKTtcblxuaGFyZGVuKGFnb3JpY1ZhdERhdGFLZXlzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFnb3JpY1ZhdERhdGFLZXlzIjpbImFnb3JpY1ZhdERhdGFLZXlzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKV9E37qBgAA6gYAAC8AAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEvc3JjL21ha2Utb25jZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlT25jZUtpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0TGFiZWxUb0tleXM9KGxhYmVsKT0+aGFyZGVuKFtsYWJlbF0pO1xuaGFyZGVuKGRlZmF1bHRMYWJlbFRvS2V5cyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlT25jZUtpdD0oZGVidWdOYW1lLHN0b3JlcyxiYWNraW5nU3RvcmU9dW5kZWZpbmVkKT0+e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCB1c2VkS2V5cz1zdG9yZXMuZGV0YWNoZWQoKS5zZXRTdG9yZSggYCR7ZGVidWdOYW1lfSB1c2VkIGtleXNgKTtcblxuLypcblxuICAgKi9cbmNvbnN0IGFzc2VydE9ubHlPbmNlPShrZXkpPT57XG50eXBlb2Yga2V5PT09J3N0cmluZyd8fEZhaWwgYGtleSAke2tleX0gbXVzdCBiZSBhIHN0cmluZ2A7XG4hdXNlZEtleXMuaGFzKGtleSl8fFxuRmFpbCBga2V5ICR7a2V5fSBoYXMgYWxyZWFkeSBiZWVuIHVzZWQgaW4gdGhpcyB6b25lIGFuZCBpbmNhcm5hdGlvbmA7XG5cbi8vXG4vL1xudXNlZEtleXMuYWRkKGtleSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHdyYXBQcm92aWRlcj0ocHJvdmlkZXIsbGFiZWxUb0tleXM9ZGVmYXVsdExhYmVsVG9LZXlzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdyYXBwZXI9KGxhYmVsLC4uLnJlc3QpPT57XG5mb3IoY29uc3Qga2V5IG9mIGxhYmVsVG9LZXlzKGxhYmVsKSl7XG5hc3NlcnRPbmx5T25jZShrZXkpO1xuIH1cbnJldHVybiBwcm92aWRlcihsYWJlbCwuLi5yZXN0KTtcbiB9O1xucmV0dXJuICgvKiAgICAgICAgICAgICovd3JhcHBlcik7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VPbmNlPShrZXksbWFrZXIpPT57XG5hc3NlcnRPbmx5T25jZShrZXkpO1xuaWYoYmFja2luZ1N0b3JlJiZiYWNraW5nU3RvcmUuaGFzKGtleSkpe1xucmV0dXJuIGJhY2tpbmdTdG9yZS5nZXQoa2V5KTtcbiB9XG5jb25zdCB2YWx1ZT1tYWtlcihrZXkpO1xuc3RvcmVzLmlzU3RvcmFibGUodmFsdWUpfHxcbkZhaWwgYG1ha2VyIHJldHVybiB2YWx1ZSAke3ZhbHVlfSBpcyBub3Qgc3RvcmFibGVgO1xuYmFja2luZ1N0b3JlJiZiYWNraW5nU3RvcmUuaW5pdChrZXksdmFsdWUpO1xucmV0dXJuIHZhbHVlO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe21ha2VPbmNlLHdyYXBQcm92aWRlcn0pO1xuIH07JGjigI1fb25jZS5tYWtlT25jZUtpdChtYWtlT25jZUtpdCk7XG5oYXJkZW4obWFrZU9uY2VLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU9uY2VLaXQiOlsibWFrZU9uY2VLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAaHPLgW8JAABvCQAAMwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTcuMS9zcmMvd2F0Y2gtcHJvbWlzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXR0ZXJucyIsIkBlbmRvL2ZhciJdLCJleHBvcnRzIjpbIlByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSIsIlByb21pc2VXYXRjaGVySGFuZGxlciIsIlByb21pc2VXYXRjaGVySSIsIlByb21pc2VXYXRjaGVyUmVqZWN0ZWRJIiwid2F0Y2hQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLE0sRTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRo4oCNX2EgPT4gKE0gPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBQcm9taXNlV2F0Y2hlckhhbmRsZXI9TS5jYWxsKE0ucmF3KCkpLnJlc3QoTS5yYXcoKSkucmV0dXJucygpO1xuXG4vKlxuXG4gKi8kaOKAjV9vbmNlLlByb21pc2VXYXRjaGVySGFuZGxlcihQcm9taXNlV2F0Y2hlckhhbmRsZXIpO1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVyST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXInLHtcbm9uRnVsZmlsbGVkOlByb21pc2VXYXRjaGVySGFuZGxlcixcbm9uUmVqZWN0ZWQ6UHJvbWlzZVdhdGNoZXJIYW5kbGVyfSk7XG5cblxuLypcblxuICovJGjigI1fb25jZS5Qcm9taXNlV2F0Y2hlckkoUHJvbWlzZVdhdGNoZXJJKTtcbmNvbnN0ICAgICAgICBQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEk9TS5pbnRlcmZhY2UoJ1Byb21pc2VXYXRjaGVyRnVsZmlsbGVkJyx7XG5vbkZ1bGZpbGxlZDpQcm9taXNlV2F0Y2hlckhhbmRsZXJ9KTtcblxuXG4vKlxuXG4gKi8kaOKAjV9vbmNlLlByb21pc2VXYXRjaGVyRnVsZmlsbGVkSShQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkpO1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVyUmVqZWN0ZWRJPU0uaW50ZXJmYWNlKCdQcm9taXNlV2F0Y2hlclJlamVjdGVkJyx7XG5vblJlamVjdGVkOlByb21pc2VXYXRjaGVySGFuZGxlcn0pO1xuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovJGjigI1fb25jZS5Qcm9taXNlV2F0Y2hlclJlamVjdGVkSShQcm9taXNlV2F0Y2hlclJlamVjdGVkSSk7XG5jb25zdCBjYWxsTWVNYXliZT0odGhhdCxwcm9wLHBvc3RBcmdzKT0+e1xuY29uc3QgZm49dGhhdFtwcm9wXTtcbmlmKCFmbil7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmFzc2VydC50eXBlb2YoZm4sJ2Z1bmN0aW9uJyk7XG4vKlxuXG4gICAqL1xuY29uc3Qgd3JhcHBlZD0oYXJnKT0+e1xuLy9cbi8vXG5hcHBseShmbix0aGF0LFthcmcsLi4ucG9zdEFyZ3NdKTtcbiB9O1xucmV0dXJuIHdyYXBwZWQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHdhdGNoUHJvbWlzZT0ocCx3YXRjaGVyLC4uLndhdGNoZXJBcmdzKT0+e1xuUHJvbWlzZS5yZXNvbHZlKHApPT09cHx8RmFpbCBgd2F0Y2hQcm9taXNlIG9ubHkgd2F0Y2hlcyBwcm9taXNlc2A7XG5jb25zdCBvbkZ1bGZpbGxlZD1jYWxsTWVNYXliZSh3YXRjaGVyLCdvbkZ1bGZpbGxlZCcsd2F0Y2hlckFyZ3MpO1xuY29uc3Qgb25SZWplY3RlZD1jYWxsTWVNYXliZSh3YXRjaGVyLCdvblJlamVjdGVkJyx3YXRjaGVyQXJncyk7XG5vbkZ1bGZpbGxlZHx8XG5vblJlamVjdGVkfHxcbkZhaWwgYHByb21pc2Ugd2F0Y2hlciBtdXN0IGltcGxlbWVudCBhdCBsZWFzdCBvbmUgaGFuZGxlciBtZXRob2RgO1xudm9pZCBFLndoZW4ocCxvbkZ1bGZpbGxlZCxvblJlamVjdGVkKTtcbiB9OyRo4oCNX29uY2Uud2F0Y2hQcm9taXNlKHdhdGNoUHJvbWlzZSk7XG5oYXJkZW4od2F0Y2hQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlByb21pc2VXYXRjaGVySGFuZGxlciI6WyJQcm9taXNlV2F0Y2hlckhhbmRsZXIiXSwiUHJvbWlzZVdhdGNoZXJJIjpbIlByb21pc2VXYXRjaGVySSJdLCJQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkiOlsiUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWRJIl0sIlByb21pc2VXYXRjaGVyUmVqZWN0ZWRJIjpbIlByb21pc2VXYXRjaGVyUmVqZWN0ZWRJIl0sIndhdGNoUHJvbWlzZSI6WyJ3YXRjaFByb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAnQGtIwUFAAAFBQAAJwAAAEBhZ29yaWMvY2FjaGUtdjAuMy4zLXUxNy4xL3NyYy9jYWNoZS5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiLCIuL3N0b3JlLmpzIl0sImV4cG9ydHMiOlsibWFrZUNhY2hlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLEZhcixtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvcjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dLFtcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIi4vc3RvcmUuanNcIiwgW1tcIm1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvciA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuICovXG5jb25zdCAgICAgICAgbWFrZUNhY2hlPShjb29yZGluYXRvcj1tYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvcigpKT0+e1xuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2FjaGU9KGtleSwuLi5vcHRVcGRhdGVHdWFyZFBhdHRlcm4pPT57XG5pZihvcHRVcGRhdGVHdWFyZFBhdHRlcm4ubGVuZ3RoPT09MCl7XG5yZXR1cm4gRShjb29yZGluYXRvcikuZ2V0UmVjZW50VmFsdWUoa2V5KTtcbiB9XG5cbmNvbnN0W3VwZGF0ZSxndWFyZFBhdHRlcm5dPW9wdFVwZGF0ZUd1YXJkUGF0dGVybjtcbmlmKHR5cGVvZiB1cGRhdGUhPT0nZnVuY3Rpb24nKXtcbnJldHVybiBFKGNvb3JkaW5hdG9yKS5zZXRDYWNoZVZhbHVlKGtleSx1cGRhdGUsZ3VhcmRQYXR0ZXJuKTtcbiB9XG5cbmNvbnN0IHVwZGF0ZXI9RmFyKCdjYWNoZSB1cGRhdGVyJyx7XG51cGRhdGU6KG9sZFZhbHVlKT0+e1xucmV0dXJuIHVwZGF0ZShvbGRWYWx1ZSk7XG4gfX0pO1xuXG5yZXR1cm4gRShjb29yZGluYXRvcikudXBkYXRlQ2FjaGVWYWx1ZShrZXksdXBkYXRlcixndWFyZFBhdHRlcm4pO1xuIH07XG5cbnJldHVybiBjYWNoZTtcbiB9OyRo4oCNX29uY2UubWFrZUNhY2hlKG1ha2VDYWNoZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlQ2FjaGUiOlsibWFrZUNhY2hlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHnwkU4IAgAACAIAACYAAABAYWdvcmljL2NhY2hlLXYwLjMuMy11MTcuMS9zcmMvbWFpbi5qc3siaW1wb3J0cyI6WyIuL3R5cGVzLmpzIiwiLi9zdG9yZS5qcyIsIi4vY2FjaGUuanMiLCIuL3N0YXRlLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9jYWNoZS5qcyIsIi4vc3RhdGUuanMiLCIuL3N0b3JlLmpzIiwiLi90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtbXCIuL3R5cGVzLmpzXCIsIFtdXSxbXCIuL3N0b3JlLmpzXCIsIFtdXSxbXCIuL2NhY2hlLmpzXCIsIFtdXSxbXCIuL3N0YXRlLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAp16cMUBAAAFAQAACcAAABAYWdvcmljL2NhY2hlLXYwLjMuMy11MTcuMS9zcmMvc3RhdGUuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIkdST1VORF9TVEFURSIsIm1ha2VTdGF0ZSIsIndpdGhHcm91bmRTdGF0ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEdST1VORF9TVEFURT1oYXJkZW4oe2dlbmVyYXRpb246MG4sdmFsdWU6dW5kZWZpbmVkfSk7XG5cbi8qXG5cblxuXG5cblxuICovJGjigI1fb25jZS5HUk9VTkRfU1RBVEUoR1JPVU5EX1NUQVRFKTtcbmNvbnN0ICAgICAgICBtYWtlU3RhdGU9KHZhbHVlLHByaW9yU3RhdGU9R1JPVU5EX1NUQVRFKT0+XG5oYXJkZW4oe1xuZ2VuZXJhdGlvbjpwcmlvclN0YXRlLmdlbmVyYXRpb24rMW4sXG52YWx1ZX0pO1xuXG5cbi8qXG5cblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VTdGF0ZShtYWtlU3RhdGUpO1xuY29uc3QgICAgICAgIHdpdGhHcm91bmRTdGF0ZT0oc3RhdGVTdG9yZSk9Pih7XG4uLi5zdGF0ZVN0b3JlLFxuZ2V0OihrZXkpPT57XG5pZighc3RhdGVTdG9yZS5oYXMoa2V5KSl7XG5yZXR1cm4gR1JPVU5EX1NUQVRFO1xuIH1cbnJldHVybiBzdGF0ZVN0b3JlLmdldChrZXkpO1xuIH19KTskaOKAjV9vbmNlLndpdGhHcm91bmRTdGF0ZSh3aXRoR3JvdW5kU3RhdGUpO1xuXG5oYXJkZW4od2l0aEdyb3VuZFN0YXRlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkdST1VORF9TVEFURSI6WyJHUk9VTkRfU1RBVEUiXSwibWFrZVN0YXRlIjpbIm1ha2VTdGF0ZSJdLCJ3aXRoR3JvdW5kU3RhdGUiOlsid2l0aEdyb3VuZFN0YXRlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPW3bomdFwAAnRcAACcAAABAYWdvcmljL2NhY2hlLXYwLjMuMy11MTcuMS9zcmMvc3RvcmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy9pbnRlcm5hbCIsIi4vc3RhdGUuanMiXSwiZXhwb3J0cyI6WyJtYWtlQ2hhaW5TdG9yYWdlQ29vcmRpbmF0b3IiLCJtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxGYXIsZGVlcGx5RnVsZmlsbGVkLG1ha2VNYXJzaGFsLG1hdGNoZXMsbWFrZVNjYWxhck1hcFN0b3JlLG1ha2VTY2FsYXJCaWdNYXBTdG9yZSx1bnRpbFRydWUsd2l0aEdyb3VuZFN0YXRlLG1ha2VTdGF0ZTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dLFtcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImRlZXBseUZ1bGZpbGxlZFwiLCBbJGjigI1fYSA9PiAoZGVlcGx5RnVsZmlsbGVkID0gJGjigI1fYSldXSxbXCJtYWtlTWFyc2hhbFwiLCBbJGjigI1fYSA9PiAobWFrZU1hcnNoYWwgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibWF0Y2hlc1wiLCBbJGjigI1fYSA9PiAobWF0Y2hlcyA9ICRo4oCNX2EpXV0sW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyQmlnTWFwU3RvcmUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1widW50aWxUcnVlXCIsIFskaOKAjV9hID0+ICh1bnRpbFRydWUgPSAkaOKAjV9hKV1dXV0sW1wiLi9zdGF0ZS5qc1wiLCBbW1wid2l0aEdyb3VuZFN0YXRlXCIsIFskaOKAjV9hID0+ICh3aXRoR3JvdW5kU3RhdGUgPSAkaOKAjV9hKV1dLFtcIm1ha2VTdGF0ZVwiLCBbJGjigI1fYSA9PiAobWFrZVN0YXRlID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFrZUtleVRvU3RyaW5nPShzYW5pdGl6ZT0ob2JqKT0+b2JqKT0+e1xubGV0IGxhc3ROb25jZT0wO1xuY29uc3QgdmFsVG9Ob25jZT1uZXcgV2Vha01hcCgpO1xuY29uc3QgdmFsVG9TbG90PSh2YWwpPT57XG5sZXQgc2xvdD12YWxUb05vbmNlLmdldCh2YWwpO1xuaWYoIXNsb3Qpe1xubGFzdE5vbmNlKz0xO1xuc2xvdD1sYXN0Tm9uY2U7XG52YWxUb05vbmNlLnNldCh2YWwsc2xvdCk7XG4gfVxucmV0dXJuIHNsb3Q7XG4gfTtcblxuY29uc3R7dG9DYXBEYXRhOmtleVRvSnNvbmFibGV9PW1ha2VNYXJzaGFsKHZhbFRvU2xvdCx1bmRlZmluZWQse1xuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pO1xuXG5jb25zdCBrZXlUb1N0cmluZz1hc3luYyhrZXlQKT0+e1xuY29uc3Qga2V5PWF3YWl0IHNhbml0aXplKGtleVApO1xuY29uc3Qgb2JqPWtleVRvSnNvbmFibGUoa2V5KTtcbnJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xuIH07XG5yZXR1cm4ga2V5VG9TdHJpbmc7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGFwcGx5Q2FjaGVUcmFuc2FjdGlvbj1hc3luYyhcbmtleVN0cixcbnR4bixcbmd1YXJkUGF0dGVybixcbnNhbml0aXplLFxuc3RhdGVTdG9yZSk9Plxue1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGdldFVwZGF0ZWRTdGF0ZT1hc3luYyhiYXNpc1N0YXRlKT0+e1xuY29uc3R7dmFsdWV9PWJhc2lzU3RhdGU7XG5pZighbWF0Y2hlcyh2YWx1ZSxndWFyZFBhdHRlcm4pKXtcbi8vXG5yZXR1cm4gbnVsbDtcbiB9XG5cbmNvbnN0IG5ld1ZhbHVlPWF3YWl0IHNhbml0aXplKHR4bih2YWx1ZSkpO1xucmV0dXJuIG1ha2VTdGF0ZShuZXdWYWx1ZSxiYXNpc1N0YXRlKTtcbiB9O1xuXG5sZXQgYmFzaXNTdGF0ZT1zdGF0ZVN0b3JlLmdldChrZXlTdHIpO1xubGV0IHVwZGF0ZWRTdGF0ZT1hd2FpdCBnZXRVcGRhdGVkU3RhdGUoYmFzaXNTdGF0ZSk7XG5cbi8vXG5cbi8vXG5iYXNpc1N0YXRlPXN0YXRlU3RvcmUuZ2V0KGtleVN0cik7XG5jb25zdCB1bnRpbFVwZGF0ZVN5bmNlZD11bnRpbFRydWUoXG4oKT0+IXVwZGF0ZWRTdGF0ZXx8dXBkYXRlZFN0YXRlLmdlbmVyYXRpb24+YmFzaXNTdGF0ZS5nZW5lcmF0aW9uKTtcblxuZm9yIGF3YWl0KGNvbnN0IF8gb2YgdW50aWxVcGRhdGVTeW5jZWQpe1xudXBkYXRlZFN0YXRlPWF3YWl0IGdldFVwZGF0ZWRTdGF0ZShiYXNpc1N0YXRlKTtcbi8vXG5iYXNpc1N0YXRlPXN0YXRlU3RvcmUuZ2V0KGtleVN0cik7XG4gfVxuXG5pZighdXBkYXRlZFN0YXRlKXtcbi8vXG4vL1xucmV0dXJuIGJhc2lzU3RhdGUudmFsdWU7XG4gfVxuXG4vL1xuLy9cbmlmKGJhc2lzU3RhdGUuZ2VuZXJhdGlvbjwxbil7XG4vL1xuc3RhdGVTdG9yZS5pbml0KGtleVN0cix1cGRhdGVkU3RhdGUpO1xuIH1lbHNle1xuc3RhdGVTdG9yZS5zZXQoa2V5U3RyLHVwZGF0ZWRTdGF0ZSk7XG4gfVxuXG4vL1xucmV0dXJuIHVwZGF0ZWRTdGF0ZS52YWx1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBzdHJpbmdpZnlTdGF0ZVN0b3JlPWFzeW5jKHN0YXRlU3RvcmUsbWFyc2hhbGxlcik9Pntcbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBvYmo9e307XG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mIHN0YXRlU3RvcmUuZW50cmllcygpKXtcbm9ialtrZXldPUUobWFyc2hhbGxlcikudG9DYXBEYXRhKHZhbHVlKTtcbiB9XG5yZXR1cm4gZGVlcGx5RnVsZmlsbGVkKGhhcmRlbihvYmopKS50aGVuKChmdWxmaWxsZWRPYmopPT5cbkpTT04uc3RyaW5naWZ5KGZ1bGZpbGxlZE9iaikpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yPShcbnN0YXRlU3RvcmU9bWFrZVNjYWxhck1hcFN0b3JlKCksXG5zYW5pdGl6ZT1kZWVwbHlGdWxmaWxsZWQpPT5cbntcbmNvbnN0IHNlcmlhbGl6ZVBhc3NhYmxlPW1ha2VLZXlUb1N0cmluZyhzYW5pdGl6ZSk7XG5cbmNvbnN0IGRlZmF1bHRTdGF0ZVN0b3JlPXdpdGhHcm91bmRTdGF0ZShzdGF0ZVN0b3JlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvb3JkPUZhcignc3RvcmUgY2FjaGUgY29vcmRpbmF0b3InLHtcbmdldFJlY2VudFZhbHVlOmFzeW5jKGtleSk9PntcbmNvbnN0IGtleVN0cj1hd2FpdCBzZXJpYWxpemVQYXNzYWJsZShrZXkpO1xucmV0dXJuIGRlZmF1bHRTdGF0ZVN0b3JlLmdldChrZXlTdHIpLnZhbHVlO1xuIH0sXG5zZXRDYWNoZVZhbHVlOmFzeW5jKGtleSxuZXdWYWx1ZSxndWFyZFBhdHRlcm4pPT57XG5jb25zdCBrZXlTdHI9YXdhaXQgc2VyaWFsaXplUGFzc2FibGUoa2V5KTtcbnJldHVybiBhcHBseUNhY2hlVHJhbnNhY3Rpb24oXG5rZXlTdHIsXG4oKT0+bmV3VmFsdWUsXG5ndWFyZFBhdHRlcm4sXG5zYW5pdGl6ZSxcbmRlZmF1bHRTdGF0ZVN0b3JlKTtcblxuIH0sXG51cGRhdGVDYWNoZVZhbHVlOmFzeW5jKGtleSx1cGRhdGVyLGd1YXJkUGF0dGVybik9PntcbmNvbnN0IGtleVN0cj1hd2FpdCBzZXJpYWxpemVQYXNzYWJsZShrZXkpO1xucmV0dXJuIGFwcGx5Q2FjaGVUcmFuc2FjdGlvbihcbmtleVN0cixcbihvbGRWYWx1ZSk9PkUodXBkYXRlcikudXBkYXRlKG9sZFZhbHVlKSxcbmd1YXJkUGF0dGVybixcbnNhbml0aXplLFxuZGVmYXVsdFN0YXRlU3RvcmUpO1xuXG4gfX0pO1xuXG5yZXR1cm4gY29vcmQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3IobWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3IpO1xuY29uc3QgbWFrZUxhc3RXaW5zVXBkYXRlcj0oc3RhdGVTdG9yZSxtYXJzaGFsbGVyLHN0b3JhZ2VOb2RlKT0+e1xubGV0IGxhc3RQcmVwYXJlVGlja2V0PTBuO1xubGV0IGxhc3RDb21taXRUaWNrZXQ9MG47XG5cbnJldHVybiBhc3luYyhzdG9yZWRWYWx1ZSk9Pntcbi8vXG4vL1xuLy9cbmxhc3RQcmVwYXJlVGlja2V0Kz0xbjtcbmNvbnN0IG1hcnNoYWxsVGlja2V0PWxhc3RQcmVwYXJlVGlja2V0O1xuY29uc3Qgc2VyaWFsaXplZFN0b3JlPWF3YWl0IHN0cmluZ2lmeVN0YXRlU3RvcmUoc3RhdGVTdG9yZSxtYXJzaGFsbGVyKTtcbmlmKG1hcnNoYWxsVGlja2V0PGxhc3RDb21taXRUaWNrZXQpe1xuLy9cbnJldHVybiBzdG9yZWRWYWx1ZTtcbiB9XG5hd2FpdCBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShzZXJpYWxpemVkU3RvcmUpO1xubGFzdENvbW1pdFRpY2tldD1tYXJzaGFsbFRpY2tldDtcbnJldHVybiBzdG9yZWRWYWx1ZTtcbiB9O1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNoYWluU3RvcmFnZUNvb3JkaW5hdG9yPShzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKT0+e1xuY29uc3Qgc3RhdGVTdG9yZT1tYWtlU2NhbGFyQmlnTWFwU3RvcmUoJ3N0YXRlS2V5Jyk7XG5cbmNvbnN0IHNhbml0aXplPWRlZXBseUZ1bGZpbGxlZDtcbmNvbnN0IHNlcmlhbGl6ZVBhc3NhYmxlPW1ha2VLZXlUb1N0cmluZyhzYW5pdGl6ZSk7XG5cbmNvbnN0IGRlZmF1bHRTdGF0ZVN0b3JlPXdpdGhHcm91bmRTdGF0ZShzdGF0ZVN0b3JlKTtcblxuY29uc3QgdXBkYXRlU3RvcmFnZU5vZGU9bWFrZUxhc3RXaW5zVXBkYXRlcihcbmRlZmF1bHRTdGF0ZVN0b3JlLFxubWFyc2hhbGxlcixcbnN0b3JhZ2VOb2RlKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29vcmQ9RmFyKCdzdG9yZSBjYWNoZSBjb29yZGluYXRvcicse1xuZ2V0UmVjZW50VmFsdWU6YXN5bmMoa2V5KT0+e1xuY29uc3Qga2V5U3RyPWF3YWl0IHNlcmlhbGl6ZVBhc3NhYmxlKGtleSk7XG5yZXR1cm4gZGVmYXVsdFN0YXRlU3RvcmUuZ2V0KGtleVN0cikudmFsdWU7XG4gfSxcbnNldENhY2hlVmFsdWU6YXN5bmMoa2V5LG5ld1ZhbHVlLGd1YXJkUGF0dGVybik9PntcbmNvbnN0IGtleVN0cj1hd2FpdCBzZXJpYWxpemVQYXNzYWJsZShrZXkpO1xuY29uc3Qgc3RvcmVkVmFsdWU9YXdhaXQgYXBwbHlDYWNoZVRyYW5zYWN0aW9uKFxua2V5U3RyLFxuKCk9Pm5ld1ZhbHVlLFxuZ3VhcmRQYXR0ZXJuLFxuc2FuaXRpemUsXG5kZWZhdWx0U3RhdGVTdG9yZSk7XG5cbnJldHVybiB1cGRhdGVTdG9yYWdlTm9kZShzdG9yZWRWYWx1ZSk7XG4gfSxcbnVwZGF0ZUNhY2hlVmFsdWU6YXN5bmMoa2V5LHVwZGF0ZXIsZ3VhcmRQYXR0ZXJuKT0+e1xuY29uc3Qga2V5U3RyPWF3YWl0IHNlcmlhbGl6ZVBhc3NhYmxlKGtleSk7XG5jb25zdCBzdG9yZWRWYWx1ZT1hd2FpdCBhcHBseUNhY2hlVHJhbnNhY3Rpb24oXG5rZXlTdHIsXG4ob2xkVmFsdWUpPT5FKHVwZGF0ZXIpLnVwZGF0ZShvbGRWYWx1ZSksXG5ndWFyZFBhdHRlcm4sXG5zYW5pdGl6ZSxcbmRlZmF1bHRTdGF0ZVN0b3JlKTtcblxucmV0dXJuIHVwZGF0ZVN0b3JhZ2VOb2RlKHN0b3JlZFZhbHVlKTtcbiB9fSk7XG5cbnJldHVybiBjb29yZDtcbiB9OyRo4oCNX29uY2UubWFrZUNoYWluU3RvcmFnZUNvb3JkaW5hdG9yKG1ha2VDaGFpblN0b3JhZ2VDb29yZGluYXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvciI6WyJtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvciJdLCJtYWtlQ2hhaW5TdG9yYWdlQ29vcmRpbmF0b3IiOlsibWFrZUNoYWluU3RvcmFnZUNvb3JkaW5hdG9yIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAACcAAABAYWdvcmljL2NhY2hlLXYwLjMuMy11MTcuMS9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA4XyFO+ocAADqHAAALAAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xL3NyYy9hbW91bnRNYXRoLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3N0b3JlIiwiLi9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanMiLCIuL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiQW1vdW50TWF0aCIsIkFzc2V0S2luZCIsImFzc2VydEFzc2V0S2luZCIsImFzc2VydFZhbHVlR2V0SGVscGVycyIsImdldEFzc2V0S2luZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLHBhc3NTdHlsZU9mLGFzc2VydFJlbW90YWJsZSxhc3NlcnRSZWNvcmQsTSxtYXRjaGVzLG5hdE1hdGhIZWxwZXJzLHNldE1hdGhIZWxwZXJzLGNvcHlTZXRNYXRoSGVscGVycyxjb3B5QmFnTWF0aEhlbHBlcnM7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaOKAjV9hID0+IChwYXNzU3R5bGVPZiA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0UmVtb3RhYmxlXCIsIFskaOKAjV9hID0+IChhc3NlcnRSZW1vdGFibGUgPSAkaOKAjV9hKV1dLFtcImFzc2VydFJlY29yZFwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UmVjb3JkID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIk1cIiwgWyRo4oCNX2EgPT4gKE0gPSAkaOKAjV9hKV1dLFtcIm1hdGNoZXNcIiwgWyRo4oCNX2EgPT4gKG1hdGNoZXMgPSAkaOKAjV9hKV1dXV0sW1wiLi9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qc1wiLCBbW1wibmF0TWF0aEhlbHBlcnNcIiwgWyRo4oCNX2EgPT4gKG5hdE1hdGhIZWxwZXJzID0gJGjigI1fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanNcIiwgW1tcInNldE1hdGhIZWxwZXJzXCIsIFskaOKAjV9hID0+IChzZXRNYXRoSGVscGVycyA9ICRo4oCNX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qc1wiLCBbW1wiY29weVNldE1hdGhIZWxwZXJzXCIsIFskaOKAjV9hID0+IChjb3B5U2V0TWF0aEhlbHBlcnMgPSAkaOKAjV9hKV1dXV0sW1wiLi9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanNcIiwgW1tcImNvcHlCYWdNYXRoSGVscGVyc1wiLCBbJGjigI1fYSA9PiAoY29weUJhZ01hdGhIZWxwZXJzID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IEFzc2V0S2luZD1oYXJkZW4oe1xuTkFUOiduYXQnLFxuU0VUOidzZXQnLFxuQ09QWV9TRVQ6J2NvcHlTZXQnLFxuQ09QWV9CQUc6J2NvcHlCYWcnfSk7JGjigI1fb25jZS5Bc3NldEtpbmQoQXNzZXRLaW5kKTtcblxuY29uc3QgYXNzZXRLaW5kTmFtZXM9aGFyZGVuKE9iamVjdC52YWx1ZXMoQXNzZXRLaW5kKS5zb3J0KCkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYXNzZXJ0QXNzZXRLaW5kPShhbGxlZ2VkQUspPT57XG5hc3NldEtpbmROYW1lcy5pbmNsdWRlcyhhbGxlZ2VkQUspfHxcbkZhaWwgYFRoZSBhc3NldEtpbmQgJHthbGxlZ2VkQUt9IG11c3QgYmUgb25lIG9mICR7cShhc3NldEtpbmROYW1lcyl9YDtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0QXNzZXRLaW5kKGFzc2VydEFzc2V0S2luZCk7XG5oYXJkZW4oYXNzZXJ0QXNzZXRLaW5kKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGhlbHBlcnM9e1xubmF0Om5hdE1hdGhIZWxwZXJzLFxuc2V0OnNldE1hdGhIZWxwZXJzLFxuY29weVNldDpjb3B5U2V0TWF0aEhlbHBlcnMsXG5jb3B5QmFnOmNvcHlCYWdNYXRoSGVscGVyc307XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFzc2VydFZhbHVlR2V0QXNzZXRLaW5kPSh2YWx1ZSk9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZih2YWx1ZSk7XG5pZihwYXNzU3R5bGU9PT0nYmlnaW50Jyl7XG5yZXR1cm4nbmF0JztcbiB9XG5pZihwYXNzU3R5bGU9PT0nY29weUFycmF5Jyl7XG5yZXR1cm4nc2V0JztcbiB9XG5pZihtYXRjaGVzKHZhbHVlLE0uc2V0KCkpKXtcbnJldHVybidjb3B5U2V0JztcbiB9XG5pZihtYXRjaGVzKHZhbHVlLE0uYmFnKCkpKXtcbnJldHVybidjb3B5QmFnJztcbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbnRocm93IEZhaWwgYHZhbHVlICR7dmFsdWV9IG11c3QgYmUgYSBiaWdpbnQsIGNvcHlTZXQsIGNvcHlCYWcsIG9yIGFuIGFycmF5LCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFZhbHVlR2V0SGVscGVycz0odmFsdWUpPT5cbi8vXG5oZWxwZXJzW2Fzc2VydFZhbHVlR2V0QXNzZXRLaW5kKHZhbHVlKV07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjigI1fb25jZS5hc3NlcnRWYWx1ZUdldEhlbHBlcnMoYXNzZXJ0VmFsdWVHZXRIZWxwZXJzKTtcbmNvbnN0IG9wdGlvbmFsQnJhbmRDaGVjaz0oYWxsZWdlZEJyYW5kLGJyYW5kKT0+e1xuaWYoYnJhbmQhPT11bmRlZmluZWQpe1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuYWxsZWdlZEJyYW5kPT09YnJhbmR8fFxuRmFpbCBgYW1vdW50J3MgYnJhbmQgJHtxKGFsbGVnZWRCcmFuZCl9IGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgYnJhbmQgJHtxKFxuYnJhbmQpXG4gfWA7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja0xSQW5kR2V0SGVscGVycz0obGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5hc3NlcnRSZWNvcmQobGVmdEFtb3VudCwnbGVmdEFtb3VudCcpO1xuYXNzZXJ0UmVjb3JkKHJpZ2h0QW1vdW50LCdyaWdodEFtb3VudCcpO1xuY29uc3R7dmFsdWU6bGVmdFZhbHVlLGJyYW5kOmxlZnRCcmFuZH09bGVmdEFtb3VudDtcbmNvbnN0e3ZhbHVlOnJpZ2h0VmFsdWUsYnJhbmQ6cmlnaHRCcmFuZH09cmlnaHRBbW91bnQ7XG5hc3NlcnRSZW1vdGFibGUobGVmdEJyYW5kLCdsZWZ0QnJhbmQnKTtcbmFzc2VydFJlbW90YWJsZShyaWdodEJyYW5kLCdyaWdodEJyYW5kJyk7XG5vcHRpb25hbEJyYW5kQ2hlY2sobGVmdEJyYW5kLGJyYW5kKTtcbm9wdGlvbmFsQnJhbmRDaGVjayhyaWdodEJyYW5kLGJyYW5kKTtcbmxlZnRCcmFuZD09PXJpZ2h0QnJhbmR8fFxuRmFpbCBgQnJhbmRzIGluIGxlZnQgJHtxKGxlZnRCcmFuZCl9IGFuZCByaWdodCAke3EoXG5yaWdodEJyYW5kKVxuIH0gc2hvdWxkIG1hdGNoIGJ1dCBkbyBub3RgO1xuY29uc3QgbGVmdEhlbHBlcnM9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKGxlZnRWYWx1ZSk7XG5jb25zdCByaWdodEhlbHBlcnM9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKHJpZ2h0VmFsdWUpO1xubGVmdEhlbHBlcnM9PT1yaWdodEhlbHBlcnN8fFxuRmFpbCBgVGhlIGxlZnQgJHtsZWZ0QW1vdW50fSBhbmQgcmlnaHQgYW1vdW50ICR7cmlnaHRBbW91bnR9IGhhZCBkaWZmZXJlbnQgYXNzZXRLaW5kc2A7XG5yZXR1cm4gbGVmdEhlbHBlcnM7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvZXJjZUxSPShoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpPT57XG4vL1xucmV0dXJuW2guZG9Db2VyY2UobGVmdEFtb3VudC52YWx1ZSksaC5kb0NvZXJjZShyaWdodEFtb3VudC52YWx1ZSldO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBpc0dURT0obGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xucmV0dXJuIGguZG9Jc0dURSguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBBbW91bnRNYXRoPXtcbi8vXG4vL1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbm1ha2U6KGJyYW5kLGFsbGVnZWRWYWx1ZSk9PntcbmFzc2VydFJlbW90YWJsZShicmFuZCwnYnJhbmQnKTtcbmNvbnN0IGg9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKGFsbGVnZWRWYWx1ZSk7XG5jb25zdCB2YWx1ZT1oLmRvQ29lcmNlKGFsbGVnZWRWYWx1ZSk7XG4vL1xucmV0dXJuIGhhcmRlbih7YnJhbmQsdmFsdWV9KTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvZXJjZTooYnJhbmQsYWxsZWdlZEFtb3VudCk9PntcbmFzc2VydFJlbW90YWJsZShicmFuZCwnYnJhbmQnKTtcbmFzc2VydFJlY29yZChhbGxlZ2VkQW1vdW50LCdhbW91bnQnKTtcbmNvbnN0e2JyYW5kOmFsbGVnZWRCcmFuZCx2YWx1ZTphbGxlZ2VkVmFsdWV9PWFsbGVnZWRBbW91bnQ7XG5icmFuZD09PWFsbGVnZWRCcmFuZHx8XG5GYWlsIGBUaGUgYnJhbmQgaW4gdGhlIGFsbGVnZWRBbW91bnQgJHthbGxlZ2VkQW1vdW50fSBpbiAnY29lcmNlJyBkaWRuJ3QgbWF0Y2ggdGhlIHNwZWNpZmllZCBicmFuZCAke2JyYW5kfS5gO1xuLy9cbi8vXG5yZXR1cm4gQW1vdW50TWF0aC5tYWtlKGJyYW5kLGFsbGVnZWRWYWx1ZSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG4gICAqL1xuZ2V0VmFsdWU6KGJyYW5kLGFtb3VudCk9PkFtb3VudE1hdGguY29lcmNlKGJyYW5kLGFtb3VudCkudmFsdWUsXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xubWFrZUVtcHR5OihicmFuZCxhc3NldEtpbmQ9LyogICAgICAgICAgICAgICAgKi8nbmF0Jyk9PntcbmFzc2VydFJlbW90YWJsZShicmFuZCwnYnJhbmQnKTtcbmFzc2VydEFzc2V0S2luZChhc3NldEtpbmQpO1xuY29uc3QgdmFsdWU9aGVscGVyc1thc3NldEtpbmRdLmRvTWFrZUVtcHR5KCk7XG4vL1xucmV0dXJuIGhhcmRlbih7YnJhbmQsdmFsdWV9KTtcbiB9LFxuLypcblxuXG5cblxuXG5cbiAgICovXG5tYWtlRW1wdHlGcm9tQW1vdW50OihhbW91bnQpPT57XG5hc3NlcnRSZWNvcmQoYW1vdW50LCdhbW91bnQnKTtcbmNvbnN0e2JyYW5kLHZhbHVlfT1hbW91bnQ7XG5jb25zdCBhc3NldEtpbmQ9YXNzZXJ0VmFsdWVHZXRBc3NldEtpbmQodmFsdWUpO1xuLy9cbnJldHVybiBBbW91bnRNYXRoLm1ha2VFbXB0eShicmFuZCxhc3NldEtpbmQpO1xuIH0sXG4vKlxuXG5cblxuXG5cbiAgICovXG5pc0VtcHR5OihhbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuYXNzZXJ0UmVjb3JkKGFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHticmFuZDphbGxlZ2VkQnJhbmQsdmFsdWV9PWFtb3VudDtcbmFzc2VydFJlbW90YWJsZShhbGxlZ2VkQnJhbmQsJ2JyYW5kJyk7XG5vcHRpb25hbEJyYW5kQ2hlY2soYWxsZWdlZEJyYW5kLGJyYW5kKTtcbmNvbnN0IGg9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKHZhbHVlKTtcbnJldHVybiBoLmRvSXNFbXB0eShoLmRvQ29lcmNlKHZhbHVlKSk7XG4gfSxcbmlzR1RFLFxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuaXNFcXVhbDoobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xucmV0dXJuIGguZG9Jc0VxdWFsKC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5hZGQ6KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuY29uc3QgaD1jaGVja0xSQW5kR2V0SGVscGVycyhsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kKTtcbmNvbnN0IHZhbHVlPWguZG9BZGQoLi4uY29lcmNlTFIoaCxsZWZ0QW1vdW50LHJpZ2h0QW1vdW50KSk7XG4vL1xucmV0dXJuIGhhcmRlbih7YnJhbmQ6bGVmdEFtb3VudC5icmFuZCx2YWx1ZX0pO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbnN1YnRyYWN0OihsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmNvbnN0IGg9Y2hlY2tMUkFuZEdldEhlbHBlcnMobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZCk7XG5jb25zdCB2YWx1ZT1oLmRvU3VidHJhY3QoLi4uY29lcmNlTFIoaCxsZWZ0QW1vdW50LHJpZ2h0QW1vdW50KSk7XG4vL1xucmV0dXJuIGhhcmRlbih7YnJhbmQ6bGVmdEFtb3VudC5icmFuZCx2YWx1ZX0pO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xubWluOih4LHksYnJhbmQ9dW5kZWZpbmVkKT0+XG4vL1xuaXNHVEUoeCx5LGJyYW5kKT9cbnk6XG5pc0dURSh5LHgsYnJhbmQpP1xueDpcbkZhaWwgYCR7eH0gYW5kICR7eX0gYXJlIGluY29tcGFyYWJsZWAsXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xubWF4Oih4LHksYnJhbmQ9dW5kZWZpbmVkKT0+XG4vL1xuaXNHVEUoeCx5LGJyYW5kKT9cbng6XG5pc0dURSh5LHgpP1xueTpcbkZhaWwgYCR7eH0gYW5kICR7eX0gYXJlIGluY29tcGFyYWJsZWB9OyRo4oCNX29uY2UuQW1vdW50TWF0aChBbW91bnRNYXRoKTtcblxuaGFyZGVuKEFtb3VudE1hdGgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2V0QXNzZXRLaW5kPShhbW91bnQpPT57XG5hc3NlcnRSZWNvcmQoYW1vdW50LCdhbW91bnQnKTtcbmNvbnN0e3ZhbHVlfT1hbW91bnQ7XG5yZXR1cm4gYXNzZXJ0VmFsdWVHZXRBc3NldEtpbmQodmFsdWUpO1xuIH07JGjigI1fb25jZS5nZXRBc3NldEtpbmQoZ2V0QXNzZXRLaW5kKTtcbmhhcmRlbihnZXRBc3NldEtpbmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQXNzZXRLaW5kIjpbIkFzc2V0S2luZCJdLCJhc3NlcnRBc3NldEtpbmQiOlsiYXNzZXJ0QXNzZXRLaW5kIl0sIkFtb3VudE1hdGgiOlsiQW1vdW50TWF0aCJdLCJnZXRBc3NldEtpbmQiOlsiZ2V0QXNzZXRLaW5kIl0sImFzc2VydFZhbHVlR2V0SGVscGVycyI6WyJhc3NlcnRWYWx1ZUdldEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA6JP/LyMEAAAjBAAALQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xL3NyYy9hbW91bnRTdG9yZS5qc3siaW1wb3J0cyI6WyIuL2Ftb3VudE1hdGguanMiXSwiZXhwb3J0cyI6WyJtYWtlQW1vdW50U3RvcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEFtb3VudE1hdGg7JGjigI1faW1wb3J0cyhbW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaOKAjV9hID0+IChBbW91bnRNYXRoID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQW1vdW50U3RvcmU9KHN0YXRlLGtleSk9PntcbnJldHVybiBoYXJkZW4oe1xuZ2V0QW1vdW50OigpPT5zdGF0ZVtrZXldLFxuaW5jcmVtZW50OihkZWx0YSk9PntcbnN0YXRlW2tleV09QW1vdW50TWF0aC5hZGQoc3RhdGVba2V5XSxkZWx0YSk7XG4gfSxcbmRlY3JlbWVudDooZGVsdGEpPT57XG5pZihBbW91bnRNYXRoLmlzR1RFKHN0YXRlW2tleV0sZGVsdGEpKXtcbnN0YXRlW2tleV09QW1vdW50TWF0aC5zdWJ0cmFjdChzdGF0ZVtrZXldLGRlbHRhKTtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9fSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZUFtb3VudFN0b3JlKG1ha2VBbW91bnRTdG9yZSk7XG5oYXJkZW4obWFrZUFtb3VudFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VBbW91bnRTdG9yZSI6WyJtYWtlQW1vdW50U3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAyxDGxtMFAADTBQAALQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xL3NyYy9kaXNwbGF5SW5mby5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsiY29lcmNlRGlzcGxheUluZm8iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsbXVzdE1hdGNoLERpc3BsYXlJbmZvU2hhcGU7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAobXVzdE1hdGNoID0gJGjigI1fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiRGlzcGxheUluZm9TaGFwZVwiLCBbJGjigI1fYSA9PiAoRGlzcGxheUluZm9TaGFwZSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvZXJjZURpc3BsYXlJbmZvPShhbGxlZ2VkRGlzcGxheUluZm8sYXNzZXRLaW5kKT0+e1xubXVzdE1hdGNoKGFsbGVnZWREaXNwbGF5SW5mbyxEaXNwbGF5SW5mb1NoYXBlLCdkaXNwbGF5SW5mbycpO1xuXG5pZihhbGxlZ2VkRGlzcGxheUluZm8uYXNzZXRLaW5kIT09dW5kZWZpbmVkKXtcbmFsbGVnZWREaXNwbGF5SW5mby5hc3NldEtpbmQ9PT1hc3NldEtpbmR8fFxuRmFpbCBgZGlzcGxheUluZm8uYXNzZXRLaW5kIHdhcyBwcmVzZW50ICgke2FsbGVnZWREaXNwbGF5SW5mby5hc3NldEtpbmR9KSBhbmQgZGlkIG5vdCBtYXRjaCB0aGUgYXNzZXRLaW5kIGFyZ3VtZW50ICgke2Fzc2V0S2luZH0pYDtcbiB9XG5jb25zdCBkaXNwbGF5SW5mbz1oYXJkZW4oey4uLmFsbGVnZWREaXNwbGF5SW5mbyxhc3NldEtpbmR9KTtcblxuaWYoZGlzcGxheUluZm8uZGVjaW1hbFBsYWNlcyE9PXVuZGVmaW5lZCl7XG5OdW1iZXIuaXNTYWZlSW50ZWdlcihkaXNwbGF5SW5mby5kZWNpbWFsUGxhY2VzKXx8XG5GYWlsIGBkZWNpbWFsUGxhY2VzICR7ZGlzcGxheUluZm8uZGVjaW1hbFBsYWNlc30gaXMgbm90IGEgc2FmZSBpbnRlZ2VyYDtcbiB9XG5cbnJldHVybiBkaXNwbGF5SW5mbztcbiB9OyRo4oCNX29uY2UuY29lcmNlRGlzcGxheUluZm8oY29lcmNlRGlzcGxheUluZm8pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY29lcmNlRGlzcGxheUluZm8iOlsiY29lcmNlRGlzcGxheUluZm8iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAUfBylgMCAAADAgAAJwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL2Ftb3VudE1hdGguanMiLCIuL2lzc3VlcktpdC5qcyIsIi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vYW1vdW50TWF0aC5qcyIsIi4vaXNzdWVyS2l0LmpzIiwiLi90eXBlR3VhcmRzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vYW1vdW50TWF0aC5qc1wiLCBbXV0sW1wiLi9pc3N1ZXJLaXQuanNcIiwgW11dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABWDYVFhhYAAIYWAAArAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE3LjEvc3JjL2lzc3VlcktpdC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIiwiLi9hbW91bnRNYXRoLmpzIiwiLi9kaXNwbGF5SW5mby5qcyIsIi4vcGF5bWVudExlZGdlci5qcyJdLCJleHBvcnRzIjpbImhhc0lzc3VlciIsIm1ha2VEdXJhYmxlSXNzdWVyS2l0IiwibWFrZUlzc3VlcktpdCIsInByZXBhcmVJc3N1ZXJLaXQiLCJ1cGdyYWRlSXNzdWVyS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRmFpbCxhc3NlcnRQYXR0ZXJuLG1ha2VTY2FsYXJCaWdNYXBTdG9yZSxtYWtlRHVyYWJsZVpvbmUsQXNzZXRLaW5kLGFzc2VydEFzc2V0S2luZCxjb2VyY2VEaXNwbGF5SW5mbyxwcmVwYXJlUGF5bWVudExlZGdlcjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0ID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImFzc2VydFBhdHRlcm5cIiwgWyRo4oCNX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyQmlnTWFwU3RvcmUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy96b25lL2R1cmFibGUuanNcIiwgW1tcIm1ha2VEdXJhYmxlWm9uZVwiLCBbJGjigI1fYSA9PiAobWFrZUR1cmFibGVab25lID0gJGjigI1fYSldXV1dLFtcIi4vYW1vdW50TWF0aC5qc1wiLCBbW1wiQXNzZXRLaW5kXCIsIFskaOKAjV9hID0+IChBc3NldEtpbmQgPSAkaOKAjV9hKV1dLFtcImFzc2VydEFzc2V0S2luZFwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0QXNzZXRLaW5kID0gJGjigI1fYSldXV1dLFtcIi4vZGlzcGxheUluZm8uanNcIiwgW1tcImNvZXJjZURpc3BsYXlJbmZvXCIsIFskaOKAjV9hID0+IChjb2VyY2VEaXNwbGF5SW5mbyA9ICRo4oCNX2EpXV1dXSxbXCIuL3BheW1lbnRMZWRnZXIuanNcIiwgW1tcInByZXBhcmVQYXltZW50TGVkZ2VyXCIsIFskaOKAjV9hID0+IChwcmVwYXJlUGF5bWVudExlZGdlciA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzZXR1cElzc3VlcktpdD0oXG57bmFtZSxhc3NldEtpbmQsZGlzcGxheUluZm8sZWxlbWVudFNoYXBlfSxcbmlzc3VlclpvbmUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkKT0+XG57XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuYXNzZXJ0QXNzZXRLaW5kKGFzc2V0S2luZCk7XG5cbi8vXG5jb25zdCBjbGVhbkRpc3BsYXlJbmZvPWNvZXJjZURpc3BsYXlJbmZvKGRpc3BsYXlJbmZvLGFzc2V0S2luZCk7XG5pZihvcHRTaHV0ZG93bldpdGhGYWlsdXJlIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2Yob3B0U2h1dGRvd25XaXRoRmFpbHVyZSwnZnVuY3Rpb24nKTtcbiB9XG5cbmlmKGVsZW1lbnRTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGVsZW1lbnRTaGFwZSk7XG4gfVxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0e2lzc3VlcixtaW50LGJyYW5kLG1pbnRSZWNvdmVyeVB1cnNlfT1wcmVwYXJlUGF5bWVudExlZGdlcihcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuY2xlYW5EaXNwbGF5SW5mbyxcbmVsZW1lbnRTaGFwZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5icmFuZCxcbmlzc3Vlcixcbm1pbnQsXG5taW50UmVjb3ZlcnlQdXJzZSxcbmRpc3BsYXlJbmZvOmNsZWFuRGlzcGxheUluZm99KTtcblxuIH07XG5oYXJkZW4oc2V0dXBJc3N1ZXJLaXQpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBJTlNUQU5DRV9LRVk9J2lzc3Vlcic7XG4vKlxuXG5cblxuICovXG5jb25zdCBSRUNPVkVSWV9TRVRTX1NUQVRFPSdyZWNvdmVyeVNldHNTdGF0ZSc7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1cGdyYWRlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbnJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWQpPT5cbntcbmNvbnN0IGlzc3VlclJlY29yZD1pc3N1ZXJCYWdnYWdlLmdldChJTlNUQU5DRV9LRVkpO1xuY29uc3QgaXNzdWVyWm9uZT1tYWtlRHVyYWJsZVpvbmUoaXNzdWVyQmFnZ2FnZSk7XG5jb25zdCBvbGRSZWNvdmVyeVNldHNTdGF0ZT1pc3N1ZXJCYWdnYWdlLmhhcyhSRUNPVkVSWV9TRVRTX1NUQVRFKT9cbmlzc3VlckJhZ2dhZ2UuZ2V0KFJFQ09WRVJZX1NFVFNfU1RBVEUpOlxuJ2hhc1JlY292ZXJ5U2V0cyc7XG5pZihcbm9sZFJlY292ZXJ5U2V0c1N0YXRlPT09J25vUmVjb3ZlcnlTZXRzJyYmXG5yZWNvdmVyeVNldHNPcHRpb249PT0naGFzUmVjb3ZlcnlTZXRzJylcbntcbkZhaWwgYENhbm5vdCAoeWV0PykgdXBncmFkZSBmcm9tICdub1JlY292ZXJ5U2V0cycgdG8gJ2hhc1JlY292ZXJ5U2V0cydgO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHJlY292ZXJ5U2V0c1N0YXRlPXJlY292ZXJ5U2V0c09wdGlvbnx8b2xkUmVjb3ZlcnlTZXRzU3RhdGU7XG5yZXR1cm4gc2V0dXBJc3N1ZXJLaXQoXG5pc3N1ZXJSZWNvcmQsXG5pc3N1ZXJab25lLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKTtcblxuIH07JGjigI1fb25jZS51cGdyYWRlSXNzdWVyS2l0KHVwZ3JhZGVJc3N1ZXJLaXQpO1xuaGFyZGVuKHVwZ3JhZGVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaGFzSXNzdWVyPShiYWdnYWdlKT0+YmFnZ2FnZS5oYXMoSU5TVEFOQ0VfS0VZKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5oYXNJc3N1ZXIoaGFzSXNzdWVyKTtcbmNvbnN0ICAgICAgICBtYWtlRHVyYWJsZUlzc3VlcktpdD0oXG5pc3N1ZXJCYWdnYWdlLFxubmFtZSxcbi8vXG5hc3NldEtpbmQ9QXNzZXRLaW5kLk5BVCxcbmRpc3BsYXlJbmZvPWhhcmRlbih7fSksXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbntlbGVtZW50U2hhcGU9dW5kZWZpbmVkLHJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBpc3N1ZXJEYXRhPWhhcmRlbih7XG5uYW1lLFxuYXNzZXRLaW5kLFxuZGlzcGxheUluZm8sXG5lbGVtZW50U2hhcGV9KTtcblxuaXNzdWVyQmFnZ2FnZS5pbml0KElOU1RBTkNFX0tFWSxpc3N1ZXJEYXRhKTtcbmNvbnN0IGlzc3VlclpvbmU9bWFrZUR1cmFibGVab25lKGlzc3VlckJhZ2dhZ2UpO1xuY29uc3QgcmVjb3ZlcnlTZXRzU3RhdGU9cmVjb3ZlcnlTZXRzT3B0aW9ufHwnaGFzUmVjb3ZlcnlTZXRzJztcbmlzc3VlckJhZ2dhZ2UuaW5pdChSRUNPVkVSWV9TRVRTX1NUQVRFLHJlY292ZXJ5U2V0c1N0YXRlKTtcbnJldHVybiBzZXR1cElzc3VlcktpdChcbmlzc3VlckRhdGEsXG5pc3N1ZXJab25lLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKTtcblxuIH07JGjigI1fb25jZS5tYWtlRHVyYWJsZUlzc3VlcktpdChtYWtlRHVyYWJsZUlzc3VlcktpdCk7XG5oYXJkZW4obWFrZUR1cmFibGVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5uYW1lLFxuLy9cbmFzc2V0S2luZD1Bc3NldEtpbmQuTkFULFxuZGlzcGxheUluZm89aGFyZGVuKHt9KSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkLFxub3B0aW9ucz17fSk9Plxue1xuaWYoaGFzSXNzdWVyKGlzc3VlckJhZ2dhZ2UpKXtcbmNvbnN0e2VsZW1lbnRTaGFwZTpfPXVuZGVmaW5lZCxyZWNvdmVyeVNldHNPcHRpb249dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG5jb25zdCBpc3N1ZXJLaXQ9dXBncmFkZUlzc3VlcktpdChcbmlzc3VlckJhZ2dhZ2UsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlLFxucmVjb3ZlcnlTZXRzT3B0aW9uKTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbnJldHVybiBpc3N1ZXJLaXQ7XG4gfWVsc2V7XG5jb25zdCBpc3N1ZXJLaXQ9bWFrZUR1cmFibGVJc3N1ZXJLaXQoXG5pc3N1ZXJCYWdnYWdlLFxubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSxcbm9wdGlvbnMpO1xuXG5yZXR1cm4gaXNzdWVyS2l0O1xuIH1cbiB9OyRo4oCNX29uY2UucHJlcGFyZUlzc3VlcktpdChwcmVwYXJlSXNzdWVyS2l0KTtcbmhhcmRlbihwcmVwYXJlSXNzdWVyS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSXNzdWVyS2l0PShcbm5hbWUsXG4vL1xuYXNzZXRLaW5kPUFzc2V0S2luZC5OQVQsXG5kaXNwbGF5SW5mbz1oYXJkZW4oe30pLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQsXG57ZWxlbWVudFNoYXBlPXVuZGVmaW5lZCxyZWNvdmVyeVNldHNPcHRpb249dW5kZWZpbmVkfT17fSk9PlxuXG5tYWtlRHVyYWJsZUlzc3VlcktpdChcbm1ha2VTY2FsYXJCaWdNYXBTdG9yZSgnZHJvcHBlZCBpc3N1ZXIga2l0Jyx7ZHVyYWJsZTp0cnVlfSksXG5uYW1lLFxuYXNzZXRLaW5kLFxuZGlzcGxheUluZm8sXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlLFxue2VsZW1lbnRTaGFwZSxyZWNvdmVyeVNldHNPcHRpb259KTskaOKAjV9vbmNlLm1ha2VJc3N1ZXJLaXQobWFrZUlzc3VlcktpdCk7XG5cbmhhcmRlbihtYWtlSXNzdWVyS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InVwZ3JhZGVJc3N1ZXJLaXQiOlsidXBncmFkZUlzc3VlcktpdCJdLCJoYXNJc3N1ZXIiOlsiaGFzSXNzdWVyIl0sIm1ha2VEdXJhYmxlSXNzdWVyS2l0IjpbIm1ha2VEdXJhYmxlSXNzdWVyS2l0Il0sInByZXBhcmVJc3N1ZXJLaXQiOlsicHJlcGFyZUlzc3VlcktpdCJdLCJtYWtlSXNzdWVyS2l0IjpbIm1ha2VJc3N1ZXJLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA72F5q/cFAAD3BQAAQAAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xL3NyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbImNvcHlCYWdNYXRoSGVscGVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQga2V5RVEsbWFrZUNvcHlCYWcsbXVzdE1hdGNoLE0sZ2V0Q29weUJhZ0VudHJpZXMsYmFnSXNTdXBlcmJhZyxiYWdVbmlvbixiYWdEaXNqb2ludFN1YnRyYWN0OyRo4oCNX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImtleUVRXCIsIFskaOKAjV9hID0+IChrZXlFUSA9ICRo4oCNX2EpXV0sW1wibWFrZUNvcHlCYWdcIiwgWyRo4oCNX2EgPT4gKG1ha2VDb3B5QmFnID0gJGjigI1fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRo4oCNX2EgPT4gKG11c3RNYXRjaCA9ICRo4oCNX2EpXV0sW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV0sW1wiZ2V0Q29weUJhZ0VudHJpZXNcIiwgWyRo4oCNX2EgPT4gKGdldENvcHlCYWdFbnRyaWVzID0gJGjigI1fYSldXSxbXCJiYWdJc1N1cGVyYmFnXCIsIFskaOKAjV9hID0+IChiYWdJc1N1cGVyYmFnID0gJGjigI1fYSldXSxbXCJiYWdVbmlvblwiLCBbJGjigI1fYSA9PiAoYmFnVW5pb24gPSAkaOKAjV9hKV1dLFtcImJhZ0Rpc2pvaW50U3VidHJhY3RcIiwgWyRo4oCNX2EgPT4gKGJhZ0Rpc2pvaW50U3VidHJhY3QgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbXB0eT1tYWtlQ29weUJhZyhbXSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGNvcHlCYWdNYXRoSGVscGVycz1oYXJkZW4oe1xuZG9Db2VyY2U6KGJhZyk9Pntcbm11c3RNYXRjaChiYWcsTS5iYWcoKSwnYmFnIG9mIGFtb3VudCcpO1xucmV0dXJuIGJhZztcbiB9LFxuZG9NYWtlRW1wdHk6KCk9PmVtcHR5LFxuZG9Jc0VtcHR5OihiYWcpPT5nZXRDb3B5QmFnRW50cmllcyhiYWcpLmxlbmd0aD09PTAsXG5kb0lzR1RFOmJhZ0lzU3VwZXJiYWcsXG5kb0lzRXF1YWw6a2V5RVEsXG5kb0FkZDpiYWdVbmlvbixcbmRvU3VidHJhY3Q6YmFnRGlzam9pbnRTdWJ0cmFjdH0pOyRo4oCNX29uY2UuY29weUJhZ01hdGhIZWxwZXJzKGNvcHlCYWdNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb3B5QmFnTWF0aEhlbHBlcnMiOlsiY29weUJhZ01hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABNO7T61BQAAtQUAAEAAAABAYWdvcmljL2VydHAtdjAuMTYuMy11MTcuMS9zcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJjb3B5U2V0TWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGtleUVRLG1ha2VDb3B5U2V0LG11c3RNYXRjaCxNLGdldENvcHlTZXRLZXlzLHNldElzU3VwZXJzZXQsc2V0RGlzam9pbnRVbmlvbixzZXREaXNqb2ludFN1YnRyYWN0OyRo4oCNX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImtleUVRXCIsIFskaOKAjV9hID0+IChrZXlFUSA9ICRo4oCNX2EpXV0sW1wibWFrZUNvcHlTZXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VDb3B5U2V0ID0gJGjigI1fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRo4oCNX2EgPT4gKG11c3RNYXRjaCA9ICRo4oCNX2EpXV0sW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV0sW1wiZ2V0Q29weVNldEtleXNcIiwgWyRo4oCNX2EgPT4gKGdldENvcHlTZXRLZXlzID0gJGjigI1fYSldXSxbXCJzZXRJc1N1cGVyc2V0XCIsIFskaOKAjV9hID0+IChzZXRJc1N1cGVyc2V0ID0gJGjigI1fYSldXSxbXCJzZXREaXNqb2ludFVuaW9uXCIsIFskaOKAjV9hID0+IChzZXREaXNqb2ludFVuaW9uID0gJGjigI1fYSldXSxbXCJzZXREaXNqb2ludFN1YnRyYWN0XCIsIFskaOKAjV9hID0+IChzZXREaXNqb2ludFN1YnRyYWN0ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbXB0eT1tYWtlQ29weVNldChbXSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgY29weVNldE1hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZTooc2V0KT0+e1xubXVzdE1hdGNoKHNldCxNLnNldCgpLCdzZXQgb2YgYW1vdW50Jyk7XG5yZXR1cm4gc2V0O1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KHNldCk9PmdldENvcHlTZXRLZXlzKHNldCkubGVuZ3RoPT09MCxcbmRvSXNHVEU6c2V0SXNTdXBlcnNldCxcbmRvSXNFcXVhbDprZXlFUSxcbmRvQWRkOnNldERpc2pvaW50VW5pb24sXG5kb1N1YnRyYWN0OnNldERpc2pvaW50U3VidHJhY3R9KTskaOKAjV9vbmNlLmNvcHlTZXRNYXRoSGVscGVycyhjb3B5U2V0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY29weVNldE1hdGhIZWxwZXJzIjpbImNvcHlTZXRNYXRoSGVscGVycyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABDk+AWcwQAAHMEAAA8AAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE3LjEvc3JjL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL25hdCJdLCJleHBvcnRzIjpbIm5hdE1hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLE5hdCxpc05hdDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRo4oCNX2EgPT4gKE5hdCA9ICRo4oCNX2EpXV0sW1wiaXNOYXRcIiwgWyRo4oCNX2EgPT4gKGlzTmF0ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBlbXB0eT0wbjtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG5hdE1hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZToobmF0KT0+e1xuLy9cbmFzc2VydC50eXBlb2YobmF0LCdiaWdpbnQnKTtcbmlzTmF0KG5hdCl8fEZhaWwgYHZhbHVlICR7bmF0fSBtdXN0IGJlIGEgbmF0dXJhbCBudW1iZXJgO1xucmV0dXJuIE5hdChuYXQpO1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KG5hdCk9Pm5hdD09PWVtcHR5LFxuZG9Jc0dURToobGVmdCxyaWdodCk9PmxlZnQ+PXJpZ2h0LFxuZG9Jc0VxdWFsOihsZWZ0LHJpZ2h0KT0+bGVmdD09PXJpZ2h0LFxuLy9cbmRvQWRkOihsZWZ0LHJpZ2h0KT0+bGVmdCtyaWdodCxcbmRvU3VidHJhY3Q6KGxlZnQscmlnaHQpPT5OYXQobGVmdC1yaWdodCl9KTskaOKAjV9vbmNlLm5hdE1hdGhIZWxwZXJzKG5hdE1hdGhIZWxwZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im5hdE1hdGhIZWxwZXJzIjpbIm5hdE1hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAPyRspcBgAAXAYAADwAAABAYWdvcmljL2VydHAtdjAuMTYuMy11MTcuMS9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJzZXRNYXRoSGVscGVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFzc1N0eWxlT2YsYXNzZXJ0S2V5LGVsZW1lbnRzSXNTdXBlcnNldCxlbGVtZW50c0Rpc2pvaW50VW5pb24sZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0LGNvZXJjZVRvRWxlbWVudHMsZWxlbWVudHNDb21wYXJlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaOKAjV9hID0+IChwYXNzU3R5bGVPZiA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJhc3NlcnRLZXlcIiwgWyRo4oCNX2EgPT4gKGFzc2VydEtleSA9ICRo4oCNX2EpXV0sW1wiZWxlbWVudHNJc1N1cGVyc2V0XCIsIFskaOKAjV9hID0+IChlbGVtZW50c0lzU3VwZXJzZXQgPSAkaOKAjV9hKV1dLFtcImVsZW1lbnRzRGlzam9pbnRVbmlvblwiLCBbJGjigI1fYSA9PiAoZWxlbWVudHNEaXNqb2ludFVuaW9uID0gJGjigI1fYSldXSxbXCJlbGVtZW50c0Rpc2pvaW50U3VidHJhY3RcIiwgWyRo4oCNX2EgPT4gKGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCA9ICRo4oCNX2EpXV0sW1wiY29lcmNlVG9FbGVtZW50c1wiLCBbJGjigI1fYSA9PiAoY29lcmNlVG9FbGVtZW50cyA9ICRo4oCNX2EpXV0sW1wiZWxlbWVudHNDb21wYXJlXCIsIFskaOKAjV9hID0+IChlbGVtZW50c0NvbXBhcmUgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW1wdHk9aGFyZGVuKFtdKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBzZXRNYXRoSGVscGVycz1oYXJkZW4oe1xuZG9Db2VyY2U6KGxpc3QpPT57XG5saXN0PWNvZXJjZVRvRWxlbWVudHMobGlzdCk7XG4vL1xuLy9cbi8vXG4vL1xuYXNzZXJ0S2V5KGxpc3QpO1xucmV0dXJuIGxpc3Q7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eToobGlzdCk9PnBhc3NTdHlsZU9mKGxpc3QpPT09J2NvcHlBcnJheScmJmxpc3QubGVuZ3RoPT09MCxcbmRvSXNHVEU6ZWxlbWVudHNJc1N1cGVyc2V0LFxuZG9Jc0VxdWFsOih4LHkpPT5lbGVtZW50c0NvbXBhcmUoeCx5KT09PTAsXG5kb0FkZDplbGVtZW50c0Rpc2pvaW50VW5pb24sXG5kb1N1YnRyYWN0OmVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdH0pOyRo4oCNX29uY2Uuc2V0TWF0aEhlbHBlcnMoc2V0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2V0TWF0aEhlbHBlcnMiOlsic2V0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAqh1vP4cDAACHAwAAKQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xL3NyYy9wYXltZW50LmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUGF5bWVudEtpbmQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGluaXRFbXB0eTskaOKAjV9pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJpbml0RW1wdHlcIiwgWyRo4oCNX2EgPT4gKGluaXRFbXB0eSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8vXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZVBheW1lbnRLaW5kPShpc3N1ZXJab25lLG5hbWUsYnJhbmQsUGF5bWVudEkpPT57XG5jb25zdCBtYWtlUGF5bWVudD1pc3N1ZXJab25lLmV4b0NsYXNzKFxuIGAke25hbWV9IHBheW1lbnRgLFxuUGF5bWVudEksXG5pbml0RW1wdHksXG57XG5nZXRBbGxlZ2VkQnJhbmQoKXtcbnJldHVybiBicmFuZDtcbiB9fSk7XG5cblxucmV0dXJuIG1ha2VQYXltZW50O1xuIH07JGjigI1fb25jZS5wcmVwYXJlUGF5bWVudEtpbmQocHJlcGFyZVBheW1lbnRLaW5kKTtcbmhhcmRlbihwcmVwYXJlUGF5bWVudEtpbmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicHJlcGFyZVBheW1lbnRLaW5kIjpbInByZXBhcmVQYXltZW50S2luZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAh+cf3DSAAAA0gAAAvAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE3LjEvc3JjL3BheW1lbnRMZWRnZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcHJvbWlzZS1raXQiLCJAYWdvcmljL3N0b3JlIiwiLi9hbW91bnRNYXRoLmpzIiwiLi9wYXltZW50LmpzIiwiLi9wdXJzZS5qcyIsIi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbInByZXBhcmVQYXltZW50TGVkZ2VyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRmFpbCxhbm5vdGF0ZUVycm9yLGlzUHJvbWlzZSxtdXN0TWF0Y2gsTSxrZXlFUSxBbW91bnRNYXRoLHByZXBhcmVQYXltZW50S2luZCxwcmVwYXJlUHVyc2VLaW5kLEJyYW5kSSxtYWtlSXNzdWVySW50ZXJmYWNlczskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRo4oCNX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjigI1fYSA9PiAoaXNQcm9taXNlID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAobXVzdE1hdGNoID0gJGjigI1fYSldXSxbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJrZXlFUVwiLCBbJGjigI1fYSA9PiAoa2V5RVEgPSAkaOKAjV9hKV1dXV0sW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaOKAjV9hID0+IChBbW91bnRNYXRoID0gJGjigI1fYSldXV1dLFtcIi4vcGF5bWVudC5qc1wiLCBbW1wicHJlcGFyZVBheW1lbnRLaW5kXCIsIFskaOKAjV9hID0+IChwcmVwYXJlUGF5bWVudEtpbmQgPSAkaOKAjV9hKV1dXV0sW1wiLi9wdXJzZS5qc1wiLCBbW1wicHJlcGFyZVB1cnNlS2luZFwiLCBbJGjigI1fYSA9PiAocHJlcGFyZVB1cnNlS2luZCA9ICRo4oCNX2EpXV1dXSxbXCIuL3R5cGVHdWFyZHMuanNcIiwgW1tcIkJyYW5kSVwiLCBbJGjigI1fYSA9PiAoQnJhbmRJID0gJGjigI1fYSldXSxbXCJtYWtlSXNzdWVySW50ZXJmYWNlc1wiLCBbJGjigI1fYSA9PiAobWFrZUlzc3VlckludGVyZmFjZXMgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgYW1vdW50U2hhcGVGcm9tRWxlbWVudFNoYXBlPShicmFuZCxhc3NldEtpbmQsZWxlbWVudFNoYXBlKT0+e1xubGV0IHZhbHVlU2hhcGU7XG5zd2l0Y2goYXNzZXRLaW5kKXtcbmNhc2UnbmF0Jzp7XG52YWx1ZVNoYXBlPU0ubmF0KCk7XG5lbGVtZW50U2hhcGU9PT11bmRlZmluZWR8fFxuRmFpbCBgRnVuZ2libGUgYXNzZXRzIGNhbm5vdCBoYXZlIGFuIGVsZW1lbnRTaGFwZTogJHtxKGVsZW1lbnRTaGFwZSl9YDtcbmJyZWFrO1xuIH1cbmNhc2Unc2V0Jzp7XG5pZihlbGVtZW50U2hhcGU9PT11bmRlZmluZWQpe1xudmFsdWVTaGFwZT1NLmFycmF5T2YoTS5rZXkoKSk7XG4gfWVsc2V7XG52YWx1ZVNoYXBlPU0uYXJyYXlPZihNLmFuZChNLmtleSgpLGVsZW1lbnRTaGFwZSkpO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVNldCc6e1xuaWYoZWxlbWVudFNoYXBlPT09dW5kZWZpbmVkKXtcbnZhbHVlU2hhcGU9TS5zZXQoKTtcbiB9ZWxzZXtcbnZhbHVlU2hhcGU9TS5zZXRPZihlbGVtZW50U2hhcGUpO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weUJhZyc6e1xuaWYoZWxlbWVudFNoYXBlPT09dW5kZWZpbmVkKXtcbnZhbHVlU2hhcGU9TS5iYWcoKTtcbiB9ZWxzZXtcbnZhbHVlU2hhcGU9TS5iYWdPZihlbGVtZW50U2hhcGUpO1xuIH1cbmJyZWFrO1xuIH1cbmRlZmF1bHQ6e1xuRmFpbCBgdW5leHBlY3RlZCBhc3NldCBraW5kICR7cShhc3NldEtpbmQpfWA7XG4gfX1cblxuXG5jb25zdCBhbW91bnRTaGFwZT1oYXJkZW4oe1xuYnJhbmQsLy9cbnZhbHVlOnZhbHVlU2hhcGV9KTtcblxucmV0dXJuIGFtb3VudFNoYXBlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUGF5bWVudExlZGdlcj0oXG5pc3N1ZXJab25lLFxubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxuZWxlbWVudFNoYXBlLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCk9Plxue1xuLyogICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBicmFuZD1pc3N1ZXJab25lLmV4byggYCR7bmFtZX0gYnJhbmRgLEJyYW5kSSx7XG5pc015SXNzdWVyKGFsbGVnZWRJc3N1ZXIpe1xuLy9cbnJldHVybiBhbGxlZ2VkSXNzdWVyPT09aXNzdWVyO1xuIH0sXG5nZXRBbGxlZ2VkTmFtZSgpe1xucmV0dXJuIG5hbWU7XG4gfSxcbi8vXG5nZXREaXNwbGF5SW5mbygpe1xucmV0dXJuIGRpc3BsYXlJbmZvO1xuIH0sXG5nZXRBbW91bnRTaGFwZSgpe1xucmV0dXJuIGFtb3VudFNoYXBlO1xuIH19KTtcblxuXG5jb25zdCBhbW91bnRTaGFwZT1hbW91bnRTaGFwZUZyb21FbGVtZW50U2hhcGUoXG5icmFuZCxcbmFzc2V0S2luZCxcbmVsZW1lbnRTaGFwZSk7XG5cblxuY29uc3R7SXNzdWVySSxNaW50SSxQYXltZW50SSxQdXJzZUlLaXR9PW1ha2VJc3N1ZXJJbnRlcmZhY2VzKFxuYnJhbmQsXG5hc3NldEtpbmQsXG5hbW91bnRTaGFwZSk7XG5cblxuY29uc3QgbWFrZVBheW1lbnQ9cHJlcGFyZVBheW1lbnRLaW5kKGlzc3VlclpvbmUsbmFtZSxicmFuZCxQYXltZW50SSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNodXRkb3duTGVkZ2VyV2l0aEZhaWx1cmU9KHJlYXNvbik9Pntcbi8vXG4vL1xuaWYob3B0U2h1dGRvd25XaXRoRmFpbHVyZSE9PXVuZGVmaW5lZCl7XG50cnl7XG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKHJlYXNvbik7XG4gfWNhdGNoKGVyckluU2h1dGRvd24pe1xuYW5ub3RhdGVFcnJvcihlcnJJblNodXRkb3duLFggYENhdXNlZCBieTogJHtyZWFzb259YCk7XG50aHJvdyBlcnJJblNodXRkb3duO1xuIH1cbiB9XG50aHJvdyByZWFzb247XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBheW1lbnRMZWRnZXI9aXNzdWVyWm9uZS53ZWFrTWFwU3RvcmUoJ3BheW1lbnRMZWRnZXInLHtcbnZhbHVlU2hhcGU6YW1vdW50U2hhcGV9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwYXltZW50UmVjb3ZlcnlTZXRzPWlzc3VlclpvbmUud2Vha01hcFN0b3JlKCdwYXltZW50UmVjb3ZlcnlTZXRzJyk7XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgaW5pdFBheW1lbnQ9KHBheW1lbnQsYW1vdW50LG9wdFJlY292ZXJ5U2V0PXVuZGVmaW5lZCk9PntcbmlmKHJlY292ZXJ5U2V0c1N0YXRlPT09J25vUmVjb3ZlcnlTZXRzJyl7XG5vcHRSZWNvdmVyeVNldD09PXVuZGVmaW5lZHx8XG5GYWlsIGB3aGVuIHJlY292ZXJTZXRzU3RhdGUgPT09ICdub1JlY292ZXJ5U2V0cycsIG9wdFJlY292ZXJ5U2V0IG11c3QgYmUgZW1wdHlgO1xuIH1cbmlmKG9wdFJlY292ZXJ5U2V0IT09dW5kZWZpbmVkJiYhQW1vdW50TWF0aC5pc0VtcHR5KGFtb3VudCkpe1xub3B0UmVjb3ZlcnlTZXQuYWRkKHBheW1lbnQpO1xucGF5bWVudFJlY292ZXJ5U2V0cy5pbml0KHBheW1lbnQsb3B0UmVjb3ZlcnlTZXQpO1xuIH1cbnBheW1lbnRMZWRnZXIuaW5pdChwYXltZW50LGFtb3VudCk7XG4gfTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGRlbGV0ZVBheW1lbnQ9KHBheW1lbnQpPT57XG5wYXltZW50TGVkZ2VyLmRlbGV0ZShwYXltZW50KTtcbmlmKHBheW1lbnRSZWNvdmVyeVNldHMuaGFzKHBheW1lbnQpKXtcbmNvbnN0IHJlY292ZXJ5U2V0PXBheW1lbnRSZWNvdmVyeVNldHMuZ2V0KHBheW1lbnQpO1xucGF5bWVudFJlY292ZXJ5U2V0cy5kZWxldGUocGF5bWVudCk7XG5yZWNvdmVyeVNldC5kZWxldGUocGF5bWVudCk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29lcmNlPShhbGxlZ2VkQW1vdW50KT0+QW1vdW50TWF0aC5jb2VyY2UoYnJhbmQsYWxsZWdlZEFtb3VudCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgYXNzZXJ0QW1vdW50Q29uc2lzdGVudD0ocGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUpPT57XG5pZihvcHRBbW91bnRTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2gocGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUsJ2Ftb3VudCcpO1xuIH1cbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBhc3NlcnRMaXZlUGF5bWVudD0ocGF5bWVudCk9PntcbnBheW1lbnRMZWRnZXIuaGFzKHBheW1lbnQpfHxcbkZhaWwgYCR7cGF5bWVudH0gd2FzIG5vdCBhIGxpdmUgcGF5bWVudCBmb3IgYnJhbmQgJHtxKFxuYnJhbmQpXG4gfS4gSXQgY291bGQgYmUgYSB1c2VkLXVwIHBheW1lbnQsIGEgcGF5bWVudCBmb3IgYW5vdGhlciBicmFuZCwgb3IgaXQgbWlnaHQgbm90IGJlIGEgcGF5bWVudCBhdCBhbGwuYDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlcG9zaXRJbnRlcm5hbD0oXG5iYWxhbmNlU3RvcmUsXG5zcmNQYXltZW50LFxub3B0QW1vdW50U2hhcGU9dW5kZWZpbmVkKT0+XG57XG4haXNQcm9taXNlKHNyY1BheW1lbnQpfHxcbmFzc2VydC5mYWlsKFxuIGBkZXBvc2l0IGRvZXMgbm90IGFjY2VwdCBwcm9taXNlcyBhcyBmaXJzdCBhcmd1bWVudC4gSW5zdGVhZCBvZiBwYXNzaW5nIHRoZSBwcm9taXNlIChkZXBvc2l0KHBheW1lbnRQcm9taXNlKSksIGNvbnNpZGVyIHVud3JhcHBpbmcgdGhlIHByb21pc2UgZmlyc3Q6IEUud2hlbihwYXltZW50UHJvbWlzZSwgKGFjdHVhbFBheW1lbnQgPT4gZGVwb3NpdChhY3R1YWxQYXltZW50KSlgLFxuVHlwZUVycm9yKTtcblxuYXNzZXJ0TGl2ZVBheW1lbnQoc3JjUGF5bWVudCk7XG5jb25zdCBzcmNQYXltZW50QmFsYW5jZT1wYXltZW50TGVkZ2VyLmdldChzcmNQYXltZW50KTtcbmFzc2VydEFtb3VudENvbnNpc3RlbnQoc3JjUGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUpO1xudHJ5e1xuLy9cbi8vXG4vL1xuZGVsZXRlUGF5bWVudChzcmNQYXltZW50KTtcbmJhbGFuY2VTdG9yZS5pbmNyZW1lbnQoc3JjUGF5bWVudEJhbGFuY2UpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbnJldHVybiBzcmNQYXltZW50QmFsYW5jZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHdpdGhkcmF3SW50ZXJuYWw9KGJhbGFuY2VTdG9yZSxhbW91bnQscmVjb3ZlcnlTZXQ9dW5kZWZpbmVkKT0+e1xuYW1vdW50PWNvZXJjZShhbW91bnQpO1xuY29uc3QgcGF5bWVudD1tYWtlUGF5bWVudCgpO1xuLy9cbi8vXG5iYWxhbmNlU3RvcmUuZGVjcmVtZW50KGFtb3VudCl8fFxuRmFpbCBgV2l0aGRyYXdhbCBvZiAke2Ftb3VudH0gZmFpbGVkIGJlY2F1c2UgdGhlIHB1cnNlIG9ubHkgY29udGFpbmVkICR7YmFsYW5jZVN0b3JlLmdldEFtb3VudCgpfWA7XG50cnl7XG5pbml0UGF5bWVudChwYXltZW50LGFtb3VudCxyZWNvdmVyeVNldCk7XG4gfWNhdGNoKGVycil7XG5zaHV0ZG93bkxlZGdlcldpdGhGYWlsdXJlKGVycik7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIHBheW1lbnQ7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBtYWtlRW1wdHlQdXJzZT1wcmVwYXJlUHVyc2VLaW5kKFxuaXNzdWVyWm9uZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5icmFuZCxcblB1cnNlSUtpdCxcbmhhcmRlbih7XG5kZXBvc2l0SW50ZXJuYWwsXG53aXRoZHJhd0ludGVybmFsfSksXG5cbnJlY292ZXJ5U2V0c1N0YXRlLFxucGF5bWVudFJlY292ZXJ5U2V0cyk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgaXNzdWVyPWlzc3VlclpvbmUuZXhvKCBgJHtuYW1lfSBpc3N1ZXJgLElzc3Vlckkse1xuZ2V0QnJhbmQoKXtcbnJldHVybiBicmFuZDtcbiB9LFxuZ2V0QWxsZWdlZE5hbWUoKXtcbnJldHVybiBuYW1lO1xuIH0sXG5nZXRBc3NldEtpbmQoKXtcbnJldHVybiBhc3NldEtpbmQ7XG4gfSxcbmdldERpc3BsYXlJbmZvKCl7XG5yZXR1cm4gZGlzcGxheUluZm87XG4gfSxcbm1ha2VFbXB0eVB1cnNlKCl7XG5yZXR1cm4gbWFrZUVtcHR5UHVyc2UoKTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5pc0xpdmUocGF5bWVudCl7XG4vL1xucmV0dXJuIHBheW1lbnRMZWRnZXIuaGFzKHBheW1lbnQpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldEFtb3VudE9mKHBheW1lbnQpe1xuLy9cbmFzc2VydExpdmVQYXltZW50KHBheW1lbnQpO1xucmV0dXJuIHBheW1lbnRMZWRnZXIuZ2V0KHBheW1lbnQpO1xuIH0sXG4vKlxuXG5cbiAgICAgKi9cbmJ1cm4ocGF5bWVudCxvcHRBbW91bnRTaGFwZT11bmRlZmluZWQpe1xuLy9cbmFzc2VydExpdmVQYXltZW50KHBheW1lbnQpO1xuY29uc3QgcGF5bWVudEJhbGFuY2U9cGF5bWVudExlZGdlci5nZXQocGF5bWVudCk7XG5hc3NlcnRBbW91bnRDb25zaXN0ZW50KHBheW1lbnRCYWxhbmNlLG9wdEFtb3VudFNoYXBlKTtcbnRyeXtcbi8vXG5kZWxldGVQYXltZW50KHBheW1lbnQpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbnJldHVybiBwYXltZW50QmFsYW5jZTtcbiB9fSk7XG5cblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWludFJlY292ZXJ5UHVyc2U9LyogICAgICAgICAgICAgICAgICAgKi9cbmlzc3VlclpvbmUubWFrZU9uY2UoJ21pbnRSZWNvdmVyeVB1cnNlJywoKT0+bWFrZUVtcHR5UHVyc2UoKSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWludD1pc3N1ZXJab25lLmV4byggYCR7bmFtZX0gbWludGAsTWludEkse1xuZ2V0SXNzdWVyKCl7XG5yZXR1cm4gaXNzdWVyO1xuIH0sXG5taW50UGF5bWVudChuZXdBbW91bnQpe1xubmV3QW1vdW50PWNvZXJjZShuZXdBbW91bnQpO1xubXVzdE1hdGNoKG5ld0Ftb3VudCxhbW91bnRTaGFwZSwnbWludGVkIGFtb3VudCcpO1xuLy9cbi8vXG5jb25zdCByYXdQYXltZW50PW1ha2VQYXltZW50KCk7XG5pbml0UGF5bWVudChyYXdQYXltZW50LG5ld0Ftb3VudCx1bmRlZmluZWQpO1xuXG5jb25zdCBtaW50UmVjb3ZlcnlQdXJzZUJlZm9yZT1taW50UmVjb3ZlcnlQdXJzZS5nZXRDdXJyZW50QW1vdW50KCk7XG5taW50UmVjb3ZlcnlQdXJzZS5kZXBvc2l0KHJhd1BheW1lbnQsbmV3QW1vdW50KTtcbmNvbnN0IHBheW1lbnQ9bWludFJlY292ZXJ5UHVyc2Uud2l0aGRyYXcobmV3QW1vdW50KTtcbmNvbnN0IG1pbnRSZWNvdmVyeVB1cnNlQWZ0ZXI9bWludFJlY292ZXJ5UHVyc2UuZ2V0Q3VycmVudEFtb3VudCgpO1xuYXNzZXJ0KGtleUVRKG1pbnRSZWNvdmVyeVB1cnNlQmVmb3JlLG1pbnRSZWNvdmVyeVB1cnNlQWZ0ZXIpKTtcbnJldHVybiBwYXltZW50O1xuIH19KTtcblxuXG5jb25zdCBpc3N1ZXJLaXQ9aGFyZGVuKHtpc3N1ZXIsbWludCxicmFuZCxtaW50UmVjb3ZlcnlQdXJzZX0pO1xucmV0dXJuIGlzc3VlcktpdDtcbiB9OyRo4oCNX29uY2UucHJlcGFyZVBheW1lbnRMZWRnZXIocHJlcGFyZVBheW1lbnRMZWRnZXIpO1xuaGFyZGVuKHByZXBhcmVQYXltZW50TGVkZ2VyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVQYXltZW50TGVkZ2VyIjpbInByZXBhcmVQYXltZW50TGVkZ2VyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANnHN3H0EAAA9BAAACcAAABAYWdvcmljL2VydHAtdjAuMTYuMy11MTcuMS9zcmMvcHVyc2UuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9zdG9yZSIsIi4vYW1vdW50TWF0aC5qcyIsIi4vdHJhbnNpZW50Tm90aWZpZXIuanMiLCIuL2Ftb3VudFN0b3JlLmpzIl0sImV4cG9ydHMiOlsicHJlcGFyZVB1cnNlS2luZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxNLG1ha2VDb3B5U2V0LEFtb3VudE1hdGgsbWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0LG1ha2VBbW91bnRTdG9yZTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV0sW1wibWFrZUNvcHlTZXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VDb3B5U2V0ID0gJGjigI1fYSldXV1dLFtcIi4vYW1vdW50TWF0aC5qc1wiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjigI1fYSA9PiAoQW1vdW50TWF0aCA9ICRo4oCNX2EpXV1dXSxbXCIuL3RyYW5zaWVudE5vdGlmaWVyLmpzXCIsIFtbXCJtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VUcmFuc2llbnROb3RpZmllcktpdCA9ICRo4oCNX2EpXV1dXSxbXCIuL2Ftb3VudFN0b3JlLmpzXCIsIFtbXCJtYWtlQW1vdW50U3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VBbW91bnRTdG9yZSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBFTVBUWV9DT1BZX1NFVD1tYWtlQ29weVNldChbXSk7XG5cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVQdXJzZUtpbmQ9KFxuaXNzdWVyWm9uZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5icmFuZCxcblB1cnNlSUtpdCxcbnB1cnNlTWV0aG9kcyxcbnJlY292ZXJ5U2V0c1N0YXRlLFxucGF5bWVudFJlY292ZXJ5U2V0cyk9Plxue1xuY29uc3QgYW1vdW50U2hhcGU9YnJhbmQuZ2V0QW1vdW50U2hhcGUoKTtcblxuLy9cbi8vXG4vL1xuY29uc3R7cHJvdmlkZU5vdGlmaWVyLHVwZGF0ZTp1cGRhdGVCYWxhbmNlfT1tYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1heWJlUmVjb3ZlcnlTZXQ9KHN0YXRlKT0+e1xuY29uc3R7cmVjb3ZlcnlTZXR9PXN0YXRlO1xuaWYocmVjb3ZlcnlTZXRzU3RhdGU9PT0naGFzUmVjb3ZlcnlTZXRzJyl7XG5yZXR1cm4gcmVjb3ZlcnlTZXQ7XG4gfWVsc2V7XG5yZWNvdmVyeVNldHNTdGF0ZT09PSdub1JlY292ZXJ5U2V0cyd8fFxuRmFpbCBgcmVjb3ZlclNldHNTdGF0ZSBtdXN0IGJlIG5vUmVjb3ZlcnlTZXRzIGlmIGl0IGlzbid0IGhhc1JlY292ZXJTZXRzYDtcbnBheW1lbnRSZWNvdmVyeVNldHMhPT11bmRlZmluZWR8fFxuRmFpbCBgcGF5bWVudFJlY292ZXJ5U2V0cyBtdXN0IGFsd2F5cyBiZSBkZWZpbmVkYDtcbnJlY292ZXJ5U2V0LmdldFNpemUoKT09PTB8fFxuRmFpbCBgV2l0aCBub1JlY292ZXJ5U2V0cywgcmVjb3ZlcnlTZXQgbXVzdCBiZSBlbXB0eWA7XG5cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuIH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0e2RlcG9zaXRJbnRlcm5hbCx3aXRoZHJhd0ludGVybmFsfT1wdXJzZU1ldGhvZHM7XG5jb25zdCBtYWtlUHVyc2VLaXQ9aXNzdWVyWm9uZS5leG9DbGFzc0tpdChcbiBgJHtuYW1lfSBQdXJzZWAsXG5QdXJzZUlLaXQsXG4oKT0+e1xuY29uc3QgY3VycmVudEJhbGFuY2U9QW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlY292ZXJ5U2V0PWlzc3VlclpvbmUuZGV0YWNoZWQoKS5zZXRTdG9yZSgncmVjb3Zlcnkgc2V0Jyk7XG5cbnJldHVybntcbmN1cnJlbnRCYWxhbmNlLFxucmVjb3ZlcnlTZXR9O1xuXG4gfSxcbntcbnB1cnNlOntcbmRlcG9zaXQoc3JjUGF5bWVudCxvcHRBbW91bnRTaGFwZT11bmRlZmluZWQpe1xuLy9cbi8vXG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0e3B1cnNlfT10aGlzLmZhY2V0cztcbmNvbnN0IGJhbGFuY2VTdG9yZT1tYWtlQW1vdW50U3RvcmUoc3RhdGUsJ2N1cnJlbnRCYWxhbmNlJyk7XG4vL1xuY29uc3Qgc3JjUGF5bWVudEJhbGFuY2U9ZGVwb3NpdEludGVybmFsKFxuYmFsYW5jZVN0b3JlLFxuc3JjUGF5bWVudCxcbm9wdEFtb3VudFNoYXBlKTtcblxudXBkYXRlQmFsYW5jZShwdXJzZSxiYWxhbmNlU3RvcmUuZ2V0QW1vdW50KCkpO1xucmV0dXJuIHNyY1BheW1lbnRCYWxhbmNlO1xuIH0sXG53aXRoZHJhdyhhbW91bnQpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5jb25zdHtwdXJzZX09dGhpcy5mYWNldHM7XG5cbmNvbnN0IG9wdFJlY292ZXJ5U2V0PW1heWJlUmVjb3ZlcnlTZXQoc3RhdGUpO1xuY29uc3QgYmFsYW5jZVN0b3JlPW1ha2VBbW91bnRTdG9yZShzdGF0ZSwnY3VycmVudEJhbGFuY2UnKTtcbi8vXG5jb25zdCBwYXltZW50PXdpdGhkcmF3SW50ZXJuYWwoXG5iYWxhbmNlU3RvcmUsXG5hbW91bnQsXG5vcHRSZWNvdmVyeVNldCk7XG5cbnVwZGF0ZUJhbGFuY2UocHVyc2UsYmFsYW5jZVN0b3JlLmdldEFtb3VudCgpKTtcbnJldHVybiBwYXltZW50O1xuIH0sXG5nZXRDdXJyZW50QW1vdW50KCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0IGJhbGFuY2VTdG9yZT1tYWtlQW1vdW50U3RvcmUoc3RhdGUsJ2N1cnJlbnRCYWxhbmNlJyk7XG5yZXR1cm4gYmFsYW5jZVN0b3JlLmdldEFtb3VudCgpO1xuIH0sXG5nZXRDdXJyZW50QW1vdW50Tm90aWZpZXIoKXtcbnJldHVybiBwcm92aWRlTm90aWZpZXIodGhpcy5mYWNldHMucHVyc2UpO1xuIH0sXG5nZXRBbGxlZ2VkQnJhbmQoKXtcbnJldHVybiBicmFuZDtcbiB9LFxuXG5nZXREZXBvc2l0RmFjZXQoKXtcbnJldHVybiB0aGlzLmZhY2V0cy5kZXBvc2l0RmFjZXQ7XG4gfSxcblxuZ2V0UmVjb3ZlcnlTZXQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3Qgb3B0UmVjb3ZlcnlTZXQ9bWF5YmVSZWNvdmVyeVNldChzdGF0ZSk7XG5pZihvcHRSZWNvdmVyeVNldD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gRU1QVFlfQ09QWV9TRVQ7XG4gfVxucmV0dXJuIG9wdFJlY292ZXJ5U2V0LnNuYXBzaG90KCk7XG4gfSxcbnJlY292ZXJBbGwoKXtcbmNvbnN0e3N0YXRlLGZhY2V0c309dGhpcztcbmxldCBhbW91bnQ9QW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcbmNvbnN0IG9wdFJlY292ZXJ5U2V0PW1heWJlUmVjb3ZlcnlTZXQoc3RhdGUpO1xuaWYob3B0UmVjb3ZlcnlTZXQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGFtb3VudDsvL1xuIH1cbmZvcihjb25zdCBwYXltZW50IG9mIG9wdFJlY292ZXJ5U2V0LmtleXMoKSl7XG4vL1xuLy9cbmNvbnN0IGRlbHRhPWZhY2V0cy5wdXJzZS5kZXBvc2l0KHBheW1lbnQpO1xuYW1vdW50PUFtb3VudE1hdGguYWRkKGFtb3VudCxkZWx0YSxicmFuZCk7XG4gfVxub3B0UmVjb3ZlcnlTZXQuZ2V0U2l6ZSgpPT09MHx8XG5GYWlsIGBpbnRlcm5hbDogUmVtYWluaW5nIHVucmVjb3ZlcmVkIHBheW1lbnRzOiAke2ZhY2V0cy5wdXJzZS5nZXRSZWNvdmVyeVNldCgpfWA7XG5yZXR1cm4gYW1vdW50O1xuIH19LFxuXG5kZXBvc2l0RmFjZXQ6e1xucmVjZWl2ZSguLi5hcmdzKXtcbnJldHVybiB0aGlzLmZhY2V0cy5wdXJzZS5kZXBvc2l0KC4uLmFyZ3MpO1xuIH19fSxcblxuXG57XG5zdGF0ZVNoYXBlOntcbmN1cnJlbnRCYWxhbmNlOmFtb3VudFNoYXBlLFxucmVjb3ZlcnlTZXQ6TS5yZW1vdGFibGUoJ3JlY292ZXJ5U2V0Jyl9fSk7XG5cblxuXG5yZXR1cm4oKT0+bWFrZVB1cnNlS2l0KCkucHVyc2U7XG4gfTskaOKAjV9vbmNlLnByZXBhcmVQdXJzZUtpbmQocHJlcGFyZVB1cnNlS2luZCk7XG5oYXJkZW4ocHJlcGFyZVB1cnNlS2luZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwcmVwYXJlUHVyc2VLaW5kIjpbInByZXBhcmVQdXJzZUtpbmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAu0MMHOIFAADiBQAAMwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xL3NyYy90cmFuc2llbnROb3RpZmllci5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvbm90aWZpZXIiXSwiZXhwb3J0cyI6WyJtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUscHJvdmlkZUxhenksbWFrZU5vdGlmaWVyS2l0OyRo4oCNX2ltcG9ydHMoW1tcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wicHJvdmlkZUxhenlcIiwgWyRo4oCNX2EgPT4gKHByb3ZpZGVMYXp5ID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcIm1ha2VOb3RpZmllcktpdFwiLCBbJGjigI1fYSA9PiAobWFrZU5vdGlmaWVyS2l0ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLy9cbi8vXG5jb25zdCAgICAgICAgbWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0cmFuc2llbnROb3RpZmVyS2l0cz1tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKFxuJ3RyYW5zaWVudE5vdGlmZXJLaXRzJyk7XG5cblxuY29uc3QgcHJvdmlkZU5vdGlmaWVyS2l0PShrZXkpPT5cbnByb3ZpZGVMYXp5KHRyYW5zaWVudE5vdGlmZXJLaXRzLGtleSwoKT0+XG5tYWtlTm90aWZpZXJLaXQoa2V5LmdldEN1cnJlbnRBbW91bnQoKSkpO1xuXG5cbmNvbnN0IHByb3ZpZGVOb3RpZmllcj0oa2V5KT0+cHJvdmlkZU5vdGlmaWVyS2l0KGtleSkubm90aWZpZXI7XG5jb25zdCB1cGRhdGU9KGtleSxuZXdWYWx1ZSk9PntcbmlmKHRyYW5zaWVudE5vdGlmZXJLaXRzLmhhcyhrZXkpKXtcbmNvbnN0e3VwZGF0ZXJ9PXRyYW5zaWVudE5vdGlmZXJLaXRzLmdldChrZXkpO1xudXBkYXRlci51cGRhdGVTdGF0ZShuZXdWYWx1ZSk7XG4gfVxuIH07XG5cbnJldHVybntwcm92aWRlTm90aWZpZXIsdXBkYXRlfTtcbiB9OyRo4oCNX29uY2UubWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KG1ha2VUcmFuc2llbnROb3RpZmllcktpdCk7XG5oYXJkZW4obWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VUcmFuc2llbnROb3RpZmllcktpdCI6WyJtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAct1qsfgYAAD4GAAALAAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xL3NyYy90eXBlR3VhcmRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiQW1vdW50UGF0dGVyblNoYXBlIiwiQW1vdW50U2hhcGUiLCJBc3NldEtpbmRTaGFwZSIsIkJyYW5kSSIsIkJyYW5kU2hhcGUiLCJEZXBvc2l0RmFjZXRTaGFwZSIsIkRpc3BsYXlJbmZvU2hhcGUiLCJJc3N1ZXJLaXRTaGFwZSIsIklzc3VlclNoYXBlIiwiTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTIiwiTWludFNoYXBlIiwiTm90aWZpZXJTaGFwZSIsIlBheW1lbnRTaGFwZSIsIlB1cnNlU2hhcGUiLCJSYXRpb1NoYXBlIiwiaXNDb3B5QmFnVmFsdWUiLCJpc0NvcHlTZXRWYWx1ZSIsImlzTmF0VmFsdWUiLCJpc1NldFZhbHVlIiwibWFrZUlzc3VlckludGVyZmFjZXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE0sbWF0Y2hlcyxnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQ7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRo4oCNX2EgPT4gKE0gPSAkaOKAjV9hKV1dLFtcIm1hdGNoZXNcIiwgWyRo4oCNX2EgPT4gKG1hdGNoZXMgPSAkaOKAjV9hKV1dLFtcImdldEludGVyZmFjZUd1YXJkUGF5bG9hZFwiLCBbJGjigI1fYSA9PiAoZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgICAgICAgIEJyYW5kU2hhcGU9TS5yZW1vdGFibGUoJ0JyYW5kJyk7JGjigI1fb25jZS5CcmFuZFNoYXBlKEJyYW5kU2hhcGUpO1xuY29uc3QgICAgICAgIElzc3VlclNoYXBlPU0ucmVtb3RhYmxlKCdJc3N1ZXInKTskaOKAjV9vbmNlLklzc3VlclNoYXBlKElzc3VlclNoYXBlKTtcbmNvbnN0ICAgICAgICBQYXltZW50U2hhcGU9TS5yZW1vdGFibGUoJ1BheW1lbnQnKTskaOKAjV9vbmNlLlBheW1lbnRTaGFwZShQYXltZW50U2hhcGUpO1xuY29uc3QgICAgICAgIFB1cnNlU2hhcGU9TS5yZW1vdGFibGUoJ1B1cnNlJyk7JGjigI1fb25jZS5QdXJzZVNoYXBlKFB1cnNlU2hhcGUpO1xuY29uc3QgICAgICAgIERlcG9zaXRGYWNldFNoYXBlPU0ucmVtb3RhYmxlKCdEZXBvc2l0RmFjZXQnKTskaOKAjV9vbmNlLkRlcG9zaXRGYWNldFNoYXBlKERlcG9zaXRGYWNldFNoYXBlKTtcbmNvbnN0ICAgICAgICBOb3RpZmllclNoYXBlPU0ucmVtb3RhYmxlKCdOb3RpZmllcicpOyRo4oCNX29uY2UuTm90aWZpZXJTaGFwZShOb3RpZmllclNoYXBlKTtcbmNvbnN0ICAgICAgICBNaW50U2hhcGU9TS5yZW1vdGFibGUoJ01pbnQnKTtcblxuLypcblxuXG5cblxuICovJGjigI1fb25jZS5NaW50U2hhcGUoTWludFNoYXBlKTtcbmNvbnN0IE5hdFZhbHVlU2hhcGU9TS5uYXQoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IENvcHlTZXRWYWx1ZVNoYXBlPU0uc2V0KCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBTZXRWYWx1ZVNoYXBlPU0uYXJyYXlPZihNLmtleSgpKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgQ29weUJhZ1ZhbHVlU2hhcGU9TS5iYWcoKTtcblxuY29uc3QgQW1vdW50VmFsdWVTaGFwZT1NLm9yKFxuTmF0VmFsdWVTaGFwZSxcbkNvcHlTZXRWYWx1ZVNoYXBlLFxuU2V0VmFsdWVTaGFwZSxcbkNvcHlCYWdWYWx1ZVNoYXBlKTtcblxuXG5jb25zdCAgICAgICAgQW1vdW50U2hhcGU9aGFyZGVuKHtcbmJyYW5kOkJyYW5kU2hhcGUsXG52YWx1ZTpBbW91bnRWYWx1ZVNoYXBlfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuQW1vdW50U2hhcGUoQW1vdW50U2hhcGUpO1xuY29uc3QgICAgICAgIEFtb3VudFBhdHRlcm5TaGFwZT1NLnBhdHRlcm4oKTskaOKAjV9vbmNlLkFtb3VudFBhdHRlcm5TaGFwZShBbW91bnRQYXR0ZXJuU2hhcGUpO1xuXG5jb25zdCAgICAgICAgUmF0aW9TaGFwZT1oYXJkZW4oe1xubnVtZXJhdG9yOkFtb3VudFNoYXBlLFxuZGVub21pbmF0b3I6QW1vdW50U2hhcGV9KTtcblxuXG4vKlxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLlJhdGlvU2hhcGUoUmF0aW9TaGFwZSk7XG5jb25zdCAgICAgICAgaXNOYXRWYWx1ZT0odmFsdWUpPT5tYXRjaGVzKHZhbHVlLE5hdFZhbHVlU2hhcGUpOyRo4oCNX29uY2UuaXNOYXRWYWx1ZShpc05hdFZhbHVlKTtcbmhhcmRlbihpc05hdFZhbHVlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5U2V0VmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxDb3B5U2V0VmFsdWVTaGFwZSk7JGjigI1fb25jZS5pc0NvcHlTZXRWYWx1ZShpc0NvcHlTZXRWYWx1ZSk7XG5oYXJkZW4oaXNDb3B5U2V0VmFsdWUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1NldFZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsU2V0VmFsdWVTaGFwZSk7JGjigI1fb25jZS5pc1NldFZhbHVlKGlzU2V0VmFsdWUpO1xuaGFyZGVuKGlzU2V0VmFsdWUpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NvcHlCYWdWYWx1ZT0odmFsdWUpPT5tYXRjaGVzKHZhbHVlLENvcHlCYWdWYWx1ZVNoYXBlKTskaOKAjV9vbmNlLmlzQ29weUJhZ1ZhbHVlKGlzQ29weUJhZ1ZhbHVlKTtcbmhhcmRlbihpc0NvcHlCYWdWYWx1ZSk7XG5cbi8vXG5jb25zdCAgICAgICAgTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTPTEwMDskaOKAjV9vbmNlLk1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyhNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMpO1xuXG5jb25zdCAgICAgICAgQXNzZXRLaW5kU2hhcGU9TS5vcignbmF0Jywnc2V0JywnY29weVNldCcsJ2NvcHlCYWcnKTskaOKAjV9vbmNlLkFzc2V0S2luZFNoYXBlKEFzc2V0S2luZFNoYXBlKTtcblxuY29uc3QgICAgICAgIERpc3BsYXlJbmZvU2hhcGU9TS5zcGxpdFJlY29yZChcbnt9LFxue1xuZGVjaW1hbFBsYWNlczpNLmFuZChcbk0uZ3RlKC1NQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMpLFxuTS5sdGUoTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTKSksXG5cbmFzc2V0S2luZDpBc3NldEtpbmRTaGFwZX0sXG5cbntcbi8vXG4vL1xufSk7JGjigI1fb25jZS5EaXNwbGF5SW5mb1NoYXBlKERpc3BsYXlJbmZvU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBJc3N1ZXJLaXRTaGFwZT1oYXJkZW4oe1xuYnJhbmQ6QnJhbmRTaGFwZSxcbm1pbnQ6TWludFNoYXBlLFxubWludFJlY292ZXJ5UHVyc2U6UHVyc2VTaGFwZSxcbmlzc3VlcjpJc3N1ZXJTaGFwZSxcbmRpc3BsYXlJbmZvOkRpc3BsYXlJbmZvU2hhcGV9KTtcblxuXG4vL1xuJGjigI1fb25jZS5Jc3N1ZXJLaXRTaGFwZShJc3N1ZXJLaXRTaGFwZSk7XG5jb25zdCAgICAgICAgQnJhbmRJPU0uaW50ZXJmYWNlKCdCcmFuZCcse1xuaXNNeUlzc3VlcjpNLmNhbGxXaGVuKE0uYXdhaXQoSXNzdWVyU2hhcGUpKS5yZXR1cm5zKE0uYm9vbGVhbigpKSxcbmdldEFsbGVnZWROYW1lOk0uY2FsbCgpLnJldHVybnMoTS5zdHJpbmcoKSksXG5nZXREaXNwbGF5SW5mbzpNLmNhbGwoKS5yZXR1cm5zKERpc3BsYXlJbmZvU2hhcGUpLFxuZ2V0QW1vdW50U2hhcGU6TS5jYWxsKCkucmV0dXJucyhNLnBhdHRlcm4oKSl9KTtcblxuXG4vKlxuXG5cblxuICovJGjigI1fb25jZS5CcmFuZEkoQnJhbmRJKTtcbmNvbnN0ICAgICAgICBtYWtlSXNzdWVySW50ZXJmYWNlcz0oXG5icmFuZFNoYXBlPUJyYW5kU2hhcGUsXG5hc3NldEtpbmRTaGFwZT1Bc3NldEtpbmRTaGFwZSxcbmFtb3VudFNoYXBlPUFtb3VudFNoYXBlKT0+XG57XG5jb25zdCBJc3N1ZXJJPU0uaW50ZXJmYWNlKCdJc3N1ZXInLHtcbmdldEJyYW5kOk0uY2FsbCgpLnJldHVybnMoYnJhbmRTaGFwZSksXG5nZXRBbGxlZ2VkTmFtZTpNLmNhbGwoKS5yZXR1cm5zKE0uc3RyaW5nKCkpLFxuZ2V0QXNzZXRLaW5kOk0uY2FsbCgpLnJldHVybnMoYXNzZXRLaW5kU2hhcGUpLFxuZ2V0RGlzcGxheUluZm86TS5jYWxsKCkucmV0dXJucyhEaXNwbGF5SW5mb1NoYXBlKSxcbm1ha2VFbXB0eVB1cnNlOk0uY2FsbCgpLnJldHVybnMoUHVyc2VTaGFwZSksXG5cbmlzTGl2ZTpNLmNhbGxXaGVuKE0uYXdhaXQoUGF5bWVudFNoYXBlKSkucmV0dXJucyhNLmJvb2xlYW4oKSksXG5nZXRBbW91bnRPZjpNLmNhbGxXaGVuKE0uYXdhaXQoUGF5bWVudFNoYXBlKSkucmV0dXJucyhhbW91bnRTaGFwZSksXG5idXJuOk0uY2FsbFdoZW4oTS5hd2FpdChQYXltZW50U2hhcGUpKS5cbm9wdGlvbmFsKEFtb3VudFBhdHRlcm5TaGFwZSkuXG5yZXR1cm5zKGFtb3VudFNoYXBlKX0pO1xuXG5cbmNvbnN0IE1pbnRJPU0uaW50ZXJmYWNlKCdNaW50Jyx7XG5nZXRJc3N1ZXI6TS5jYWxsKCkucmV0dXJucyhJc3N1ZXJTaGFwZSksXG5taW50UGF5bWVudDpNLmNhbGwoYW1vdW50U2hhcGUpLnJldHVybnMoUGF5bWVudFNoYXBlKX0pO1xuXG5cbmNvbnN0IFBheW1lbnRJPU0uaW50ZXJmYWNlKCdQYXltZW50Jyx7XG5nZXRBbGxlZ2VkQnJhbmQ6TS5jYWxsKCkucmV0dXJucyhicmFuZFNoYXBlKX0pO1xuXG5cbmNvbnN0IFB1cnNlST1NLmludGVyZmFjZSgnUHVyc2UnLHtcbmdldEFsbGVnZWRCcmFuZDpNLmNhbGwoKS5yZXR1cm5zKGJyYW5kU2hhcGUpLFxuZ2V0Q3VycmVudEFtb3VudDpNLmNhbGwoKS5yZXR1cm5zKGFtb3VudFNoYXBlKSxcbmdldEN1cnJlbnRBbW91bnROb3RpZmllcjpNLmNhbGwoKS5yZXR1cm5zKE5vdGlmaWVyU2hhcGUpLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmRlcG9zaXQ6TS5jYWxsKFBheW1lbnRTaGFwZSkuXG5vcHRpb25hbChBbW91bnRQYXR0ZXJuU2hhcGUpLlxucmV0dXJucyhhbW91bnRTaGFwZSksXG5nZXREZXBvc2l0RmFjZXQ6TS5jYWxsKCkucmV0dXJucyhEZXBvc2l0RmFjZXRTaGFwZSksXG53aXRoZHJhdzpNLmNhbGwoYW1vdW50U2hhcGUpLnJldHVybnMoUGF5bWVudFNoYXBlKSxcbmdldFJlY292ZXJ5U2V0Ok0uY2FsbCgpLnJldHVybnMoTS5zZXRPZihQYXltZW50U2hhcGUpKSxcbnJlY292ZXJBbGw6TS5jYWxsKCkucmV0dXJucyhhbW91bnRTaGFwZSl9KTtcblxuXG5jb25zdCBEZXBvc2l0RmFjZXRJPU0uaW50ZXJmYWNlKCdEZXBvc2l0RmFjZXQnLHtcbnJlY2VpdmU6Z2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKFB1cnNlSSkubWV0aG9kR3VhcmRzLmRlcG9zaXR9KTtcblxuXG5jb25zdCBQdXJzZUlLaXQ9aGFyZGVuKHtcbnB1cnNlOlB1cnNlSSxcbmRlcG9zaXRGYWNldDpEZXBvc2l0RmFjZXRJfSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5Jc3N1ZXJJLFxuTWludEksXG5QYXltZW50SSxcblB1cnNlSUtpdH0pO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VJc3N1ZXJJbnRlcmZhY2VzKG1ha2VJc3N1ZXJJbnRlcmZhY2VzKTtcbmhhcmRlbihtYWtlSXNzdWVySW50ZXJmYWNlcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJCcmFuZFNoYXBlIjpbIkJyYW5kU2hhcGUiXSwiSXNzdWVyU2hhcGUiOlsiSXNzdWVyU2hhcGUiXSwiUGF5bWVudFNoYXBlIjpbIlBheW1lbnRTaGFwZSJdLCJQdXJzZVNoYXBlIjpbIlB1cnNlU2hhcGUiXSwiRGVwb3NpdEZhY2V0U2hhcGUiOlsiRGVwb3NpdEZhY2V0U2hhcGUiXSwiTm90aWZpZXJTaGFwZSI6WyJOb3RpZmllclNoYXBlIl0sIk1pbnRTaGFwZSI6WyJNaW50U2hhcGUiXSwiQW1vdW50U2hhcGUiOlsiQW1vdW50U2hhcGUiXSwiQW1vdW50UGF0dGVyblNoYXBlIjpbIkFtb3VudFBhdHRlcm5TaGFwZSJdLCJSYXRpb1NoYXBlIjpbIlJhdGlvU2hhcGUiXSwiaXNOYXRWYWx1ZSI6WyJpc05hdFZhbHVlIl0sImlzQ29weVNldFZhbHVlIjpbImlzQ29weVNldFZhbHVlIl0sImlzU2V0VmFsdWUiOlsiaXNTZXRWYWx1ZSJdLCJpc0NvcHlCYWdWYWx1ZSI6WyJpc0NvcHlCYWdWYWx1ZSJdLCJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiOlsiTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTIl0sIkFzc2V0S2luZFNoYXBlIjpbIkFzc2V0S2luZFNoYXBlIl0sIkRpc3BsYXlJbmZvU2hhcGUiOlsiRGlzcGxheUluZm9TaGFwZSJdLCJJc3N1ZXJLaXRTaGFwZSI6WyJJc3N1ZXJLaXRTaGFwZSJdLCJCcmFuZEkiOlsiQnJhbmRJIl0sIm1ha2VJc3N1ZXJJbnRlcmZhY2VzIjpbIm1ha2VJc3N1ZXJJbnRlcmZhY2VzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAP7+Vo4FGgAABRoAAC0AAABAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTcuMS9zcmMvY2FsbGJhY2suanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiY2FsbEUiLCJjYWxsU3luYyIsImlzQ2FsbGJhY2siLCJtYWtlRnVuY3Rpb25DYWxsYmFjayIsIm1ha2VNZXRob2RDYWxsYmFjayIsIm1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjayIsIm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2siLCJwcmVwYXJlQXR0ZW51YXRvciIsInByZXBhcmVHdWFyZGVkQXR0ZW51YXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtYWtlRXJyb3IscSxFLGlzT2JqZWN0LGlzUGFzc2FibGVTeW1ib2wsZ2V0SW50ZXJmYWNlTWV0aG9kS2V5czskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjigI1fYSA9PiAobWFrZUVycm9yID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJpc09iamVjdFwiLCBbJGjigI1fYSA9PiAoaXNPYmplY3QgPSAkaOKAjV9hKV1dLFtcImlzUGFzc2FibGVTeW1ib2xcIiwgWyRo4oCNX2EgPT4gKGlzUGFzc2FibGVTeW1ib2wgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImdldEludGVyZmFjZU1ldGhvZEtleXNcIiwgWyRo4oCNX2EgPT4gKGdldEludGVyZmFjZU1ldGhvZEtleXMgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e2Zyb21FbnRyaWVzfT1PYmplY3Q7XG5cbmNvbnN0e293bktleXM6cmF3T3duS2V5c309UmVmbGVjdDtcbmNvbnN0IG93bktleXM9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucmF3T3duS2V5cztcblxuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXNQcm9wZXJ0eUtleT0oa2V5KT0+e1xuc3dpdGNoKHR5cGVvZiBrZXkpe1xuY2FzZSdzdHJpbmcnOlxuY2FzZSdudW1iZXInOlxuY2FzZSdzeW1ib2wnOlxucmV0dXJuIHRydWU7XG5kZWZhdWx0OlxucmV0dXJuIGZhbHNlO31cblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjYWxsU3luYz0oY2FsbGJhY2ssLi4uYXJncyk9PntcbmNvbnN0e3RhcmdldCxtZXRob2ROYW1lLGJvdW5kfT1jYWxsYmFjaztcbmlmKG1ldGhvZE5hbWU9PT11bmRlZmluZWQpe1xucmV0dXJuIHRhcmdldCguLi5ib3VuZCwuLi5hcmdzKTtcbiB9XG5yZXR1cm4gdGFyZ2V0W21ldGhvZE5hbWVdKC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH07JGjigI1fb25jZS5jYWxsU3luYyhjYWxsU3luYyk7XG5oYXJkZW4oY2FsbFN5bmMpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2FsbEU9KGNhbGxiYWNrLC4uLmFyZ3MpPT57XG5jb25zdHt0YXJnZXQsbWV0aG9kTmFtZSxib3VuZH09Y2FsbGJhY2s7XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkKXtcbnJldHVybiBFKHRhcmdldCkoLi4uYm91bmQsLi4uYXJncyk7XG4gfVxucmV0dXJuIEUodGFyZ2V0KVttZXRob2ROYW1lXSguLi5ib3VuZCwuLi5hcmdzKTtcbiB9OyRo4oCNX29uY2UuY2FsbEUoY2FsbEUpO1xuaGFyZGVuKGNhbGxFKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2s9KHRhcmdldCwuLi5ib3VuZCk9PntcbnR5cGVvZiB0YXJnZXQ9PT0nZnVuY3Rpb24nfHxcbkZhaWwgYHN5bmMgZnVuY3Rpb24gY2FsbGJhY2sgdGFyZ2V0IG11c3QgYmUgYSBmdW5jdGlvbjogJHt0YXJnZXR9YDtcbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNiPWhhcmRlbih7dGFyZ2V0LGJvdW5kLGlzU3luYzp0cnVlfSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRo4oCNX29uY2UubWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrKG1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjayk7XG5oYXJkZW4obWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRnVuY3Rpb25DYWxsYmFjaz0odGFyZ2V0LC4uLmJvdW5kKT0+e1xuaXNPYmplY3QodGFyZ2V0KXx8XG5GYWlsIGBmdW5jdGlvbiBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhIGZ1bmN0aW9uIHByZXNlbmNlOiAke3RhcmdldH1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsYm91bmR9KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgKi9jYik7XG4gfTskaOKAjV9vbmNlLm1ha2VGdW5jdGlvbkNhbGxiYWNrKG1ha2VGdW5jdGlvbkNhbGxiYWNrKTtcbmhhcmRlbihtYWtlRnVuY3Rpb25DYWxsYmFjayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3luY01ldGhvZENhbGxiYWNrPSh0YXJnZXQsbWV0aG9kTmFtZSwuLi5ib3VuZCk9PntcbmlzT2JqZWN0KHRhcmdldCl8fFxuRmFpbCBgc3luYyBtZXRob2QgY2FsbGJhY2sgdGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0OiAke3RhcmdldH1gO1xudHlwZW9mIG1ldGhvZE5hbWU9PT0nc3RyaW5nJ3x8XG5pc1Bhc3NhYmxlU3ltYm9sKG1ldGhvZE5hbWUpfHxcbkZhaWwgYG1ldGhvZCBuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgcGFzc2FibGUgc3ltYm9sOiAke21ldGhvZE5hbWV9YDtcbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNiPWhhcmRlbih7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmQsaXNTeW5jOnRydWV9KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICovY2IpO1xuIH07JGjigI1fb25jZS5tYWtlU3luY01ldGhvZENhbGxiYWNrKG1ha2VTeW5jTWV0aG9kQ2FsbGJhY2spO1xuaGFyZGVuKG1ha2VTeW5jTWV0aG9kQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1ldGhvZENhbGxiYWNrPSh0YXJnZXQsbWV0aG9kTmFtZSwuLi5ib3VuZCk9PntcbmlzT2JqZWN0KHRhcmdldCl8fEZhaWwgYG1ldGhvZCBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3Q6ICR7dGFyZ2V0fWA7XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSl8fFxuRmFpbCBgbWV0aG9kIG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBwYXNzYWJsZSBzeW1ib2w6ICR7bWV0aG9kTmFtZX1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsbWV0aG9kTmFtZSxib3VuZH0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRo4oCNX29uY2UubWFrZU1ldGhvZENhbGxiYWNrKG1ha2VNZXRob2RDYWxsYmFjayk7XG5oYXJkZW4obWFrZU1ldGhvZENhbGxiYWNrKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NhbGxiYWNrPShjYWxsYmFjayk9PntcbmlmKCFpc09iamVjdChjYWxsYmFjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0e3RhcmdldCxtZXRob2ROYW1lLGJvdW5kfT1jYWxsYmFjaztcbnJldHVybihcbmlzT2JqZWN0KHRhcmdldCkmJihcbm1ldGhvZE5hbWU9PT11bmRlZmluZWR8fFxudHlwZW9mIG1ldGhvZE5hbWU9PT0nc3RyaW5nJ3x8XG5pc1Bhc3NhYmxlU3ltYm9sKG1ldGhvZE5hbWUpKSYmXG5BcnJheS5pc0FycmF5KGJvdW5kKSk7XG5cbiB9OyRo4oCNX29uY2UuaXNDYWxsYmFjayhpc0NhbGxiYWNrKTtcbmhhcmRlbihpc0NhbGxiYWNrKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVBdHRlbnVhdG9yPShcbnpvbmUsXG5tZXRob2ROYW1lcyxcbntpbnRlcmZhY2VHdWFyZCx0YWc9J0F0dGVudWF0b3InfT17fSk9Plxue1xuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWV0aG9kcz0vKiAgICAgICAgICAgICAgICAgICovXG5mcm9tRW50cmllcyhcbm1ldGhvZE5hbWVzLm1hcCgoa2V5KT0+e1xuLy9cbmlmKCFpc1Byb3BlcnR5S2V5KGtleSkpe1xudGhyb3cgRmFpbCBga2V5ICR7cShrZXkpfSBpcyBub3QgYSBQcm9wZXJ0eUtleWA7XG4gfVxuXG5jb25zdCBtPS8qICAgICAgICAgICAgICAgICAgKi97XG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAqL1xuW2tleV0oLi4uYXJncyl7XG4vL1xuY29uc3QgY2I9dGhpcy5zdGF0ZS5jYnNba2V5XTtcbmlmKCFjYil7XG5jb25zdCBlcnI9bWFrZUVycm9yKCBgdW5pbXBsZW1lbnRlZCAke3EodGFnKX0gbWV0aG9kICR7cShrZXkpfWApO1xuaWYodGhpcy5zdGF0ZS5pc1N5bmMpe1xudGhyb3cgZXJyO1xuIH1cbnJldHVybiBQcm9taXNlLnJlamVjdChlcnIpO1xuIH1cbmlmKGNiLmlzU3luYyl7XG5yZXR1cm4gY2FsbFN5bmMoY2IsLi4uYXJncyk7XG4gfVxucmV0dXJuIGNhbGxFKGNiLC4uLmFyZ3MpO1xuIH19W1xua2V5XTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgKi9ba2V5LG1dKTtcbiB9KSk7XG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlQXR0ZW51YXRvcj16b25lLmV4b0NsYXNzKFxudGFnLFxuaW50ZXJmYWNlR3VhcmQsXG4vKlxuXG5cblxuXG4gICAgICovXG4oe1xudGFyZ2V0PW51bGwsXG5pc1N5bmM9ZmFsc2UsXG5vdmVycmlkZXM9LyogICAgICAgICAgICAgICAgICAgICove319KT0+XG57XG5jb25zdCBjYnM9LyogICAgICAgICAgICAgICAgICAgICove307XG5cbmNvbnN0IHJlbWFpbmluZz1uZXcgU2V0KG1ldGhvZE5hbWVzKTtcbmZvcihjb25zdCBrZXkgb2Ygb3duS2V5cyhvdmVycmlkZXMpKXtcbnJlbWFpbmluZy5oYXMoa2V5KXx8XG5GYWlsIGAke3EodGFnKX0gb3ZlcnJpZGVzWyR7cShrZXkpfV0gbm90IGFsbG93ZWQgYnkgbWV0aG9kTmFtZXNgO1xuXG5yZW1haW5pbmcuZGVsZXRlKGtleSk7XG5jb25zdCBjYj1vdmVycmlkZXNba2V5XTtcbmNiPT1udWxsfHxcbmlzQ2FsbGJhY2soY2IpfHxcbkZhaWwgYCR7cSh0YWcpfSBvdmVycmlkZXNbJHtxKGtleSl9XSBpcyBub3QgYSBjYWxsYmFjazsgZ290ICR7Y2J9YDtcbmNic1trZXldPWNiO1xuIH1cbmZvcihjb25zdCBrZXkgb2YgcmVtYWluaW5nKXtcbmlmKGlzU3luYyl7XG5jYnNba2V5XT1tYWtlU3luY01ldGhvZENhbGxiYWNrKHRhcmdldCxrZXkpO1xuIH1lbHNle1xuY2JzW2tleV09bWFrZU1ldGhvZENhbGxiYWNrKHRhcmdldCxrZXkpO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtjYnMsaXNTeW5jfSk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgKi9tZXRob2RzKTtcblxucmV0dXJuIG1ha2VBdHRlbnVhdG9yO1xuIH07JGjigI1fb25jZS5wcmVwYXJlQXR0ZW51YXRvcihwcmVwYXJlQXR0ZW51YXRvcik7XG5oYXJkZW4ocHJlcGFyZUF0dGVudWF0b3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3I9KHpvbmUsaW50ZXJmYWNlR3VhcmQsb3B0cz17fSk9PntcbmNvbnN0IG1ldGhvZE5hbWVzPWdldEludGVyZmFjZU1ldGhvZEtleXMoaW50ZXJmYWNlR3VhcmQpO1xuY29uc3QgbWFrZUF0dGVudWF0b3I9cHJlcGFyZUF0dGVudWF0b3Ioem9uZSxtZXRob2ROYW1lcyx7XG4uLi5vcHRzLFxuaW50ZXJmYWNlR3VhcmR9KTtcblxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZUF0dGVudWF0b3IpO1xuIH07JGjigI1fb25jZS5wcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IocHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yKTtcbmhhcmRlbihwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY2FsbFN5bmMiOlsiY2FsbFN5bmMiXSwiY2FsbEUiOlsiY2FsbEUiXSwibWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrIjpbIm1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjayJdLCJtYWtlRnVuY3Rpb25DYWxsYmFjayI6WyJtYWtlRnVuY3Rpb25DYWxsYmFjayJdLCJtYWtlU3luY01ldGhvZENhbGxiYWNrIjpbIm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2siXSwibWFrZU1ldGhvZENhbGxiYWNrIjpbIm1ha2VNZXRob2RDYWxsYmFjayJdLCJpc0NhbGxiYWNrIjpbImlzQ2FsbGJhY2siXSwicHJlcGFyZUF0dGVudWF0b3IiOlsicHJlcGFyZUF0dGVudWF0b3IiXSwicHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yIjpbInByZXBhcmVHdWFyZGVkQXR0ZW51YXRvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAASPlfFHAYAABwGAAArAAAAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEvc3JjL2NvbmZpZy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiQnJpZGdlSWQiLCJDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZCIsIlZCYW5rQWNjb3VudCIsIldhbGxldE5hbWUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuICovXG5jb25zdCAgICAgICAgQnJpZGdlSWQ9LyogICAgICAgICAgICAgICAgKi97XG5CQU5LOidiYW5rJyxcbkNPUkU6J2NvcmUnLFxuRElCQzonZGliYycsXG5TVE9SQUdFOidzdG9yYWdlJyxcblBST1ZJU0lPTjoncHJvdmlzaW9uJyxcblBST1ZJU0lPTl9TTUFSVF9XQUxMRVQ6J3Byb3Zpc2lvbldhbGxldCcsXG5WTE9DQUxDSEFJTjondmxvY2FsY2hhaW4nLFxuVlRSQU5TRkVSOid2dHJhbnNmZXInLFxuV0FMTEVUOid3YWxsZXQnfTskaOKAjV9vbmNlLkJyaWRnZUlkKEJyaWRnZUlkKTtcblxuaGFyZGVuKEJyaWRnZUlkKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCAgICAgICAgQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQ9e1xudmJhbmtQb3J0OkJyaWRnZUlkLkJBTkssXG52aWJjUG9ydDpCcmlkZ2VJZC5ESUJDfTskaOKAjV9vbmNlLkNvc21vc0luaXRLZXlUb0JyaWRnZUlkKENvc21vc0luaXRLZXlUb0JyaWRnZUlkKTtcblxuXG5jb25zdCAgICAgICAgV2FsbGV0TmFtZT0vKiAgICAgICAgICAgICAgICAqL3tcbmRlcG9zaXRGYWNldDonZGVwb3NpdEZhY2V0J307JGjigI1fb25jZS5XYWxsZXROYW1lKFdhbGxldE5hbWUpO1xuXG5oYXJkZW4oV2FsbGV0TmFtZSk7XG5cbi8vXG5jb25zdCAgICAgICAgVkJhbmtBY2NvdW50PS8qICAgICAgICAgICAgICAgICove1xucmVzZXJ2ZTp7XG5tb2R1bGU6J3ZiYW5rL3Jlc2VydmUnLFxuYWRkcmVzczonYWdvcmljMWFlMGxtdHpsZ3JjbmxhOXhqa3BhYXJxNWQ1ZGZlejYzaDNudWNsJ30sXG5cbnByb3Zpc2lvbjp7XG5tb2R1bGU6J3ZiYW5rL3Byb3Zpc2lvbicsXG5hZGRyZXNzOidhZ29yaWMxbWVnenl0ZzY1Y3lyZ3pzNmZ2enhncmNxdnd3bDd1Z3B0NjIzNDYnfX07JGjigI1fb25jZS5WQmFua0FjY291bnQoVkJhbmtBY2NvdW50KTtcblxuXG5oYXJkZW4oVkJhbmtBY2NvdW50KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkJyaWRnZUlkIjpbIkJyaWRnZUlkIl0sIkNvc21vc0luaXRLZXlUb0JyaWRnZUlkIjpbIkNvc21vc0luaXRLZXlUb0JyaWRnZUlkIl0sIldhbGxldE5hbWUiOlsiV2FsbGV0TmFtZSJdLCJWQmFua0FjY291bnQiOlsiVkJhbmtBY2NvdW50Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANDfrk9OBAAATgQAACoAAABAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTcuMS9zcmMvZGVidWcuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VUcmFjZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLy9cblxubGV0IGRlYnVnSW5zdGFuY2U9MTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlVHJhY2VyPShuYW1lLGVuYWJsZT10cnVlKT0+e1xuZGVidWdJbnN0YW5jZSs9MTtcbmxldCBkZWJ1Z0NvdW50PTE7XG5jb25zdCBrZXk9IGAtLS0tLSAke25hbWV9LiR7ZGVidWdJbnN0YW5jZX0gYDtcbi8vXG5zd2l0Y2goZW5hYmxlKXtcbmNhc2UgZmFsc2U6e1xuY29uc3QgbG9nRGlzYWJsZWQ9KC4uLl9hcmdzKT0+eyB9O1xucmV0dXJuIGxvZ0Rpc2FibGVkO1xuIH1cbmNhc2UndmVyYm9zZSc6e1xuY29uc3QgaW5mb1RpY2s9KG9wdExvZywuLi5hcmdzKT0+e1xuaWYob3B0TG9nLmxvZyl7XG5jb25zb2xlLmluZm8oa2V5LGRlYnVnQ291bnQrPTEsLi4uYXJncyk7XG4gfWVsc2V7XG5jb25zb2xlLmluZm8oa2V5LGRlYnVnQ291bnQrPTEsb3B0TG9nLC4uLmFyZ3MpO1xuIH1cbiB9O1xucmV0dXJuIGluZm9UaWNrO1xuIH1cbmRlZmF1bHQ6e1xuY29uc3QgZGVidWdUaWNrPShvcHRMb2csLi4uYXJncyk9PntcbmlmKG9wdExvZy5sb2cpe1xub3B0TG9nLmxvZyhrZXksZGVidWdDb3VudCs9MSwuLi5hcmdzKTtcbiB9ZWxzZXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSxvcHRMb2csLi4uYXJncyk7XG4gfVxuIH07XG5yZXR1cm4gZGVidWdUaWNrO1xuIH19XG5cbiB9OyRo4oCNX29uY2UubWFrZVRyYWNlcihtYWtlVHJhY2VyKTtcbmhhcmRlbihtYWtlVHJhY2VyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VUcmFjZXIiOlsibWFrZVRyYWNlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAmaZVmlgIAAJYCAAArAAAAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEvc3JjL2Vycm9ycy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJOb25OdWxsaXNoIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBOb25OdWxsaXNoPSh2YWwsb3B0RGV0YWlscz0gYHVuZXhwZWN0ZWQgJHtxKHZhbCl9YCk9PntcbmlmKHZhbCE9bnVsbCl7XG4vL1xucmV0dXJuIHZhbDtcbiB9XG5hc3NlcnQuZmFpbChvcHREZXRhaWxzKTtcbiB9OyRo4oCNX29uY2UuTm9uTnVsbGlzaChOb25OdWxsaXNoKTtcbmhhcmRlbihOb25OdWxsaXNoKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Ik5vbk51bGxpc2giOlsiTm9uTnVsbGlzaCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADwfjnlugQAALoEAAAqAAAAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vY29uZmlnLmpzIiwiLi9kZWJ1Zy5qcyIsIi4vZXJyb3JzLmpzIiwiLi91dGlscy5qcyIsIi4vbWV0aG9kLXRvb2xzLmpzIiwiLi90eXBlQ2hlY2suanMiLCIuL3R5cGVHdWFyZHMuanMiLCIuL3R5cGVzLmpzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIiwiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vY29uZmlnLmpzIiwiLi9kZWJ1Zy5qcyIsIi4vZXJyb3JzLmpzIiwiLi9tZXRob2QtdG9vbHMuanMiLCIuL3R5cGVDaGVjay5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vdHlwZXMuanMiLCIuL3V0aWxzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vY29uZmlnLmpzXCIsIFtdXSxbXCIuL2RlYnVnLmpzXCIsIFtdXSxbXCIuL2Vycm9ycy5qc1wiLCBbXV0sW1wiLi91dGlscy5qc1wiLCBbXV0sW1wiLi9tZXRob2QtdG9vbHMuanNcIiwgW11dLFtcIi4vdHlwZUNoZWNrLmpzXCIsIFtdXSxbXCIuL3R5cGVHdWFyZHMuanNcIiwgW11dLFtcIi4vdHlwZXMuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtdXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzXCIsIFtdXSxbXCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7IkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjpbWyJvYmplY3RNYXAiLCJvYmplY3RNYXAiXV0sIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOltbIm9iamVjdE1ldGFNYXAiLCJvYmplY3RNZXRhTWFwIl1dLCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6W1siZnJvbVVuaXF1ZUVudHJpZXMiLCJmcm9tVW5pcXVlRW50cmllcyJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA57a6PKQVAACkFQAANQAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL3BhdHRlcm5zIiwiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qcyIsIi4vY2FsbGJhY2suanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRDYXBEYXRhIiwiYXNzZXJ0UGF0aFNlZ21lbnQiLCJpc1N0cmVhbUNlbGwiLCJtYWtlQ2hhaW5TdG9yYWdlUm9vdCIsIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2UiLCJtYWtlU3RvcmFnZU5vZGVDaGlsZCIsInByZXBhcmVDaGFpblN0b3JhZ2VOb2RlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEUsTSxtYWtlSGVhcFpvbmUsY2I7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2Jhc2Utem9uZS9oZWFwLmpzXCIsIFtbXCJtYWtlSGVhcFpvbmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VIZWFwWm9uZSA9ICRo4oCNX2EpXV1dXSxbXCIuL2NhbGxiYWNrLmpzXCIsIFtbXCIqXCIsIFskaOKAjV9hID0+IChjYiA9ICRo4oCNX2EpXV1dXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlQ2hhaW5TdG9yYWdlUm9vdCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZUNoYWluU3RvcmFnZVJvb3RcIn0pOyRo4oCNX29uY2UubWFrZUNoYWluU3RvcmFnZVJvb3QobWFrZUNoYWluU3RvcmFnZVJvb3QpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlU3RvcmFnZU5vZGVDaGlsZCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZVN0b3JhZ2VOb2RlQ2hpbGRcIn0pOyRo4oCNX29uY2UubWFrZVN0b3JhZ2VOb2RlQ2hpbGQobWFrZVN0b3JhZ2VOb2RlQ2hpbGQpOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IENoYWluU3RvcmFnZU5vZGVJPU0uaW50ZXJmYWNlKCdTdG9yYWdlTm9kZScse1xuc2V0VmFsdWU6TS5jYWxsV2hlbihNLnN0cmluZygpKS5yZXR1cm5zKCksXG5nZXRQYXRoOk0uY2FsbCgpLnJldHVybnMoTS5zdHJpbmcoKSksXG5nZXRTdG9yZUtleTpNLmNhbGxXaGVuKCkucmV0dXJucyhNLnJlY29yZCgpKSxcbm1ha2VDaGlsZE5vZGU6TS5jYWxsKE0uc3RyaW5nKCkpLlxub3B0aW9uYWwoTS5zcGxpdFJlY29yZCh7fSx7c2VxdWVuY2U6TS5ib29sZWFuKCl9LHt9KSkuXG5yZXR1cm5zKE0ucmVtb3RhYmxlKCdTdG9yYWdlTm9kZScpKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1N0cmVhbUNlbGw9KGNlbGwpPT5cbmNlbGwmJlxudHlwZW9mIGNlbGw9PT0nb2JqZWN0JyYmXG5BcnJheS5pc0FycmF5KGNlbGwudmFsdWVzKSYmXG50eXBlb2YgY2VsbC5ibG9ja0hlaWdodD09PSdzdHJpbmcnJiZcbi9eMCR8XlsxLTldWzAtOV0qJC8udGVzdChjZWxsLmJsb2NrSGVpZ2h0KTskaOKAjV9vbmNlLmlzU3RyZWFtQ2VsbChpc1N0cmVhbUNlbGwpO1xuaGFyZGVuKGlzU3RyZWFtQ2VsbCk7XG5cbi8vXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDYXBEYXRhPShkYXRhKT0+e1xuYXNzZXJ0LnR5cGVvZihkYXRhLCdvYmplY3QnKTtcbmFzc2VydChkYXRhKTtcbmFzc2VydC50eXBlb2YoZGF0YS5ib2R5LCdzdHJpbmcnKTtcbmFzc2VydChBcnJheS5pc0FycmF5KGRhdGEuc2xvdHMpKTtcbi8vXG4gfTskaOKAjV9vbmNlLmFzc2VydENhcERhdGEoYXNzZXJ0Q2FwRGF0YSk7XG5oYXJkZW4oYXNzZXJ0Q2FwRGF0YSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBwYXRoU2VnbWVudFBhdHRlcm49L15bYS16QS1aMC05Xy1dezEsMTAwfSQvO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgYXNzZXJ0UGF0aFNlZ21lbnQ9KG5hbWUpPT57XG5wYXRoU2VnbWVudFBhdHRlcm4udGVzdChuYW1lKXx8XG5GYWlsIGBQYXRoIHNlZ21lbnQgbmFtZXMgbXVzdCBjb25zaXN0IG9mIDEgdG8gMTAwIGNoYXJhY3RlcnMgbGltaXRlZCB0byBBU0NJSSBhbHBoYW51bWVyaWNzLCB1bmRlcnNjb3JlcywgYW5kL29yIGRhc2hlczogJHtuYW1lfWA7XG4gfTskaOKAjV9vbmNlLmFzc2VydFBhdGhTZWdtZW50KGFzc2VydFBhdGhTZWdtZW50KTtcbmhhcmRlbihhc3NlcnRQYXRoU2VnbWVudCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVDaGFpblN0b3JhZ2VOb2RlPSh6b25lKT0+e1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZUNoYWluU3RvcmFnZU5vZGU9em9uZS5leG9DbGFzcyhcbidDaGFpblN0b3JhZ2VOb2RlJyxcbkNoYWluU3RvcmFnZU5vZGVJLFxuLypcblxuXG5cblxuXG5cbiAgICAgKi9cbihtZXNzZW5nZXIscGF0aCx7c2VxdWVuY2U9ZmFsc2V9PXt9KT0+e1xuYXNzZXJ0LnR5cGVvZihwYXRoLCdzdHJpbmcnKTtcbmFzc2VydC50eXBlb2Yoc2VxdWVuY2UsJ2Jvb2xlYW4nKTtcbnJldHVybiBoYXJkZW4oe3BhdGgsbWVzc2VuZ2VyLHNlcXVlbmNlfSk7XG4gfSxcbntcbmdldFBhdGgoKXtcbnJldHVybiB0aGlzLnN0YXRlLnBhdGg7XG4gfSxcbi8qXG5cblxuICAgICAgICovXG4gICAgICBhc3luYyBnZXRTdG9yZUtleSgpe1xuY29uc3R7cGF0aCxtZXNzZW5nZXJ9PXRoaXMuc3RhdGU7XG5yZXR1cm4gY2IuY2FsbEUobWVzc2VuZ2VyLHtcbm1ldGhvZDonZ2V0U3RvcmVLZXknLFxuYXJnczpbcGF0aF19KTtcblxuIH0sXG4vKlxuXG5cblxuXG4gICAgICAgKi9cbm1ha2VDaGlsZE5vZGUobmFtZSxjaGlsZE5vZGVPcHRpb25zPXt9KXtcbmNvbnN0e3NlcXVlbmNlLHBhdGgsbWVzc2VuZ2VyfT10aGlzLnN0YXRlO1xuYXNzZXJ0UGF0aFNlZ21lbnQobmFtZSk7XG5jb25zdCBtZXJnZWRPcHRpb25zPXtzZXF1ZW5jZSwuLi5jaGlsZE5vZGVPcHRpb25zfTtcbnJldHVybiBtYWtlQ2hhaW5TdG9yYWdlTm9kZShcbm1lc3NlbmdlcixcbiBgJHtwYXRofS4ke25hbWV9YCxcbm1lcmdlZE9wdGlvbnMpO1xuXG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICBhc3luYyBzZXRWYWx1ZSh2YWx1ZSl7XG5jb25zdHtzZXF1ZW5jZSxwYXRoLG1lc3Nlbmdlcn09dGhpcy5zdGF0ZTtcbmFzc2VydC50eXBlb2YodmFsdWUsJ3N0cmluZycpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZW50cnk7XG5pZighc2VxdWVuY2UmJiF2YWx1ZSl7XG5lbnRyeT1bcGF0aF07XG4gfWVsc2V7XG5lbnRyeT1bcGF0aCx2YWx1ZV07XG4gfVxuYXdhaXQgY2IuY2FsbEUobWVzc2VuZ2VyLHtcbm1ldGhvZDpzZXF1ZW5jZT8nYXBwZW5kJzonc2V0JyxcbmFyZ3M6W2VudHJ5XX0pO1xuXG4gfVxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbn0pO1xuXG5yZXR1cm4gbWFrZUNoYWluU3RvcmFnZU5vZGU7XG4gfTskaOKAjV9vbmNlLnByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKHByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKTtcblxuY29uc3QgbWFrZUhlYXBDaGFpblN0b3JhZ2VOb2RlPXByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKG1ha2VIZWFwWm9uZSgpKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBtYWtlQ2hhaW5TdG9yYWdlUm9vdChcbmhhbmRsZVN0b3JhZ2VNZXNzYWdlLFxucm9vdFBhdGgsXG5yb290T3B0aW9ucz17fSlcbntcbmNvbnN0IG1lc3Nlbmdlcj1jYi5tYWtlRnVuY3Rpb25DYWxsYmFjayhoYW5kbGVTdG9yYWdlTWVzc2FnZSk7XG5cbi8vXG5jb25zdCByb290Tm9kZT1tYWtlSGVhcENoYWluU3RvcmFnZU5vZGUobWVzc2VuZ2VyLHJvb3RQYXRoLHJvb3RPcHRpb25zKTtcbnJldHVybiByb290Tm9kZTtcbiB9XG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlTnVsbFN0b3JhZ2VOb2RlPSgpPT57XG4vL1xucmV0dXJuIG1ha2VDaGFpblN0b3JhZ2VSb290KCgpPT5udWxsLCdudWxsJyk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5hc3luYyBmdW5jdGlvbiAgICAgICAgbWFrZVN0b3JhZ2VOb2RlQ2hpbGQoc3RvcmFnZU5vZGVSZWYsY2hpbGROYW1lKXtcbmNvbnN0IGV4aXN0aW5nU3RvcmFnZU5vZGU9YXdhaXQgc3RvcmFnZU5vZGVSZWY7XG5jb25zdCBzdG9yYWdlTm9kZT1leGlzdGluZ1N0b3JhZ2VOb2RlfHxtYWtlTnVsbFN0b3JhZ2VOb2RlKCk7XG5yZXR1cm4gRShzdG9yYWdlTm9kZSkubWFrZUNoaWxkTm9kZShjaGlsZE5hbWUpO1xuIH1cbmhhcmRlbihtYWtlU3RvcmFnZU5vZGVDaGlsZCk7XG5cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNlcmlhbGl6ZVRvU3RvcmFnZT0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbnJldHVybiBhc3luYyh2YWx1ZSk9PntcbmNvbnN0IG1hcnNoYWxsZWQ9YXdhaXQgRShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuY29uc3Qgc2VyaWFsaXplZD1KU09OLnN0cmluZ2lmeShtYXJzaGFsbGVkKTtcbnJldHVybiBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShzZXJpYWxpemVkKTtcbiB9O1xuIH07JGjigI1fb25jZS5tYWtlU2VyaWFsaXplVG9TdG9yYWdlKG1ha2VTZXJpYWxpemVUb1N0b3JhZ2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNTdHJlYW1DZWxsIjpbImlzU3RyZWFtQ2VsbCJdLCJhc3NlcnRDYXBEYXRhIjpbImFzc2VydENhcERhdGEiXSwiYXNzZXJ0UGF0aFNlZ21lbnQiOlsiYXNzZXJ0UGF0aFNlZ21lbnQiXSwicHJlcGFyZUNoYWluU3RvcmFnZU5vZGUiOlsicHJlcGFyZUNoYWluU3RvcmFnZU5vZGUiXSwibWFrZUNoYWluU3RvcmFnZVJvb3QiOlsibWFrZUNoYWluU3RvcmFnZVJvb3QiXSwibWFrZVN0b3JhZ2VOb2RlQ2hpbGQiOlsibWFrZVN0b3JhZ2VOb2RlQ2hpbGQiXSwibWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSI6WyJtYWtlU2VyaWFsaXplVG9TdG9yYWdlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAk6qcmwDgAAsA4AACwAAABAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTcuMS9zcmMvbWFyc2hhbC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9tYXJzaGFsIiwiLi9saWItY2hhaW5TdG9yYWdlLmpzIl0sImV4cG9ydHMiOlsiYm9hcmRTbG90dGluZ01hcnNoYWxsZXIiLCJtYWtlQm9hcmRSZW1vdGUiLCJtYWtlSGlzdG9yeVJldml2ZXIiLCJzbG90VG9Cb2FyZFJlbW90ZSIsInVubWFyc2hhbEZyb21Wc3RvcmFnZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxGYXIsbWFrZU1hcnNoYWwsaXNTdHJlYW1DZWxsOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIm1ha2VNYXJzaGFsXCIsIFskaOKAjV9hID0+IChtYWtlTWFyc2hhbCA9ICRo4oCNX2EpXV1dXSxbXCIuL2xpYi1jaGFpblN0b3JhZ2UuanNcIiwgW1tcImlzU3RyZWFtQ2VsbFwiLCBbJGjigI1fYSA9PiAoaXNTdHJlYW1DZWxsID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUJvYXJkUmVtb3RlPSh7Ym9hcmRJZCxpZmFjZX0pPT57XG5jb25zdCBub25hbGxlZ2VkPWlmYWNlP2lmYWNlLnJlcGxhY2UoL15BbGxlZ2VkOiAvLCcnKTonJztcbnJldHVybiBGYXIoIGBCb2FyZFJlbW90ZSR7bm9uYWxsZWdlZH1gLHtnZXRCb2FyZElkOigpPT5ib2FyZElkfSk7XG4gfTtcblxuLypcblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VCb2FyZFJlbW90ZShtYWtlQm9hcmRSZW1vdGUpO1xuY29uc3QgICAgICAgIHNsb3RUb0JvYXJkUmVtb3RlPShib2FyZElkLGlmYWNlKT0+XG5tYWtlQm9hcmRSZW1vdGUoe2JvYXJkSWQsaWZhY2V9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRo4oCNX29uY2Uuc2xvdFRvQm9hcmRSZW1vdGUoc2xvdFRvQm9hcmRSZW1vdGUpO1xuY29uc3QgYm9hcmRWYWxUb1Nsb3Q9KHZhbCk9PntcbmlmKCdnZXRCb2FyZElkJ2luIHZhbCl7XG5yZXR1cm4gdmFsLmdldEJvYXJkSWQoKTtcbiB9XG50aHJvdyBGYWlsIGB1bmtub3duIG9iaiBpbiBib2FyZFNsb3R0aW5nTWFyc2hhbGxlci52YWxUb1Nsb3QgJHt2YWx9YDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYm9hcmRTbG90dGluZ01hcnNoYWxsZXI9KHNsb3RUb1ZhbD11bmRlZmluZWQpPT57XG5yZXR1cm4gbWFrZU1hcnNoYWwoYm9hcmRWYWxUb1Nsb3Qsc2xvdFRvVmFsLHtcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KTtcblxuIH07XG5cbi8vXG4vL1xuLypcblxuXG4gKi8kaOKAjV9vbmNlLmJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyKGJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyKTtcbmNvbnN0IGFzc2VydENhcERhdGE9KGRhdGEpPT57XG5hc3NlcnQudHlwZW9mKGRhdGEsJ29iamVjdCcpO1xuYXNzZXJ0KGRhdGEpO1xuYXNzZXJ0LnR5cGVvZihkYXRhLmJvZHksJ3N0cmluZycpO1xuYXNzZXJ0KEFycmF5LmlzQXJyYXkoZGF0YS5zbG90cykpO1xuLy9cbiB9O1xuaGFyZGVuKGFzc2VydENhcERhdGEpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1bm1hcnNoYWxGcm9tVnN0b3JhZ2U9KGRhdGEsa2V5LGZyb21DYXBEYXRhLGluZGV4KT0+e1xuY29uc3Qgc2VyaWFsaXplZD1kYXRhLmdldChrZXkpfHxGYWlsIGBubyBkYXRhIGZvciAke2tleX1gO1xuYXNzZXJ0LnR5cGVvZihzZXJpYWxpemVkLCdzdHJpbmcnKTtcbmFzc2VydC50eXBlb2YoaW5kZXgsJ251bWJlcicpO1xuXG5jb25zdCBzdHJlYW1DZWxsPUpTT04ucGFyc2Uoc2VyaWFsaXplZCk7XG5pZighaXNTdHJlYW1DZWxsKHN0cmVhbUNlbGwpKXtcbnRocm93IEZhaWwgYG5vdCBhIFN0cmVhbUNlbGw6ICR7c3RyZWFtQ2VsbH1gO1xuIH1cblxuY29uc3R7dmFsdWVzfT1zdHJlYW1DZWxsO1xudmFsdWVzLmxlbmd0aD4wfHxGYWlsIGBubyBTdHJlYW1DZWxsIHZhbHVlczogJHtzdHJlYW1DZWxsfWA7XG5cbmNvbnN0IG1hcnNoYWxsZWQ9dmFsdWVzLmF0KGluZGV4KTtcbmFzc2VydC50eXBlb2YobWFyc2hhbGxlZCwnc3RyaW5nJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2FwRGF0YT1oYXJkZW4oSlNPTi5wYXJzZShtYXJzaGFsbGVkKSk7XG5hc3NlcnRDYXBEYXRhKGNhcERhdGEpO1xuXG5jb25zdCB1bm1hcnNoYWxsZWQ9ZnJvbUNhcERhdGEoY2FwRGF0YSk7XG5yZXR1cm4gdW5tYXJzaGFsbGVkO1xuIH07JGjigI1fb25jZS51bm1hcnNoYWxGcm9tVnN0b3JhZ2UodW5tYXJzaGFsRnJvbVZzdG9yYWdlKTtcbmhhcmRlbih1bm1hcnNoYWxGcm9tVnN0b3JhZ2UpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSGlzdG9yeVJldml2ZXI9KGVudHJpZXMsc2xvdFRvVmFsPXVuZGVmaW5lZCk9PntcbmNvbnN0IGJvYXJkPWJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyKHNsb3RUb1ZhbCk7XG5jb25zdCB2c01hcD1uZXcgTWFwKGVudHJpZXMpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBmcm9tQ2FwRGF0YT0oLi4uYXJncyk9PlxuUmVmbGVjdC5hcHBseShib2FyZC5mcm9tQ2FwRGF0YSxib2FyZCxhcmdzKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdldEl0ZW09KGtleSk9PnVubWFyc2hhbEZyb21Wc3RvcmFnZSh2c01hcCxrZXksZnJvbUNhcERhdGEsLTEpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2hpbGRyZW49KHByZWZpeCk9PntcbnByZWZpeC5lbmRzV2l0aCgnLicpfHxGYWlsIGBwcmVmaXggbXVzdCBlbmQgd2l0aCAnLidgO1xucmV0dXJuIGhhcmRlbihbXG4uLi5uZXcgU2V0KFxuZW50cmllcy5cbm1hcCgoW2ssX10pPT5rKS5cbmZpbHRlcigoayk9Pmsuc3RhcnRzV2l0aChwcmVmaXgpKS5cbm1hcCgoayk9Pmsuc2xpY2UocHJlZml4Lmxlbmd0aCkuc3BsaXQoJy4nKVswXSkpXSk7XG5cblxuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaGFzPShrKT0+dnNNYXAuZ2V0KGspIT09dW5kZWZpbmVkO1xuXG5yZXR1cm4gaGFyZGVuKHtnZXRJdGVtLGNoaWxkcmVuLGhhc30pO1xuIH07JGjigI1fb25jZS5tYWtlSGlzdG9yeVJldml2ZXIobWFrZUhpc3RvcnlSZXZpdmVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VCb2FyZFJlbW90ZSI6WyJtYWtlQm9hcmRSZW1vdGUiXSwic2xvdFRvQm9hcmRSZW1vdGUiOlsic2xvdFRvQm9hcmRSZW1vdGUiXSwiYm9hcmRTbG90dGluZ01hcnNoYWxsZXIiOlsiYm9hcmRTbG90dGluZ01hcnNoYWxsZXIiXSwidW5tYXJzaGFsRnJvbVZzdG9yYWdlIjpbInVubWFyc2hhbEZyb21Wc3RvcmFnZSJdLCJtYWtlSGlzdG9yeVJldml2ZXIiOlsibWFrZUhpc3RvcnlSZXZpdmVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJXsqr11CAAAdQgAADEAAABAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTcuMS9zcmMvbWV0aG9kLXRvb2xzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiXSwiZXhwb3J0cyI6WyJiaW5kQWxsTWV0aG9kcyIsImdldE1ldGhvZE5hbWVzIiwiZ2V0U3RyaW5nTWV0aG9kTmFtZXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGlzT2JqZWN0OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaOKAjV9hID0+IChpc09iamVjdCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0e2dldFByb3RvdHlwZU9mLGNyZWF0ZSxmcm9tRW50cmllcyxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1cbk9iamVjdDtcbmNvbnN0e293bktleXMsYXBwbHl9PVJlZmxlY3Q7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjb21wYXJlU3RyaW5naWZpZWQ9KGEsYik9PntcbmlmKHR5cGVvZiBhPT09dHlwZW9mIGIpe1xuY29uc3QgbGVmdD1TdHJpbmcoYSk7XG5jb25zdCByaWdodD1TdHJpbmcoYik7XG4vL1xucmV0dXJuIGxlZnQ8cmlnaHQ/LTE6bGVmdD5yaWdodD8xOjA7XG4gfVxuaWYodHlwZW9mIGE9PT0nc3ltYm9sJyl7XG5hc3NlcnQodHlwZW9mIGI9PT0nc3RyaW5nJyk7XG5yZXR1cm4tMTtcbiB9XG5hc3NlcnQodHlwZW9mIGE9PT0nc3RyaW5nJyk7XG5hc3NlcnQodHlwZW9mIGI9PT0nc3ltYm9sJyk7XG5yZXR1cm4gMTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE1ldGhvZE5hbWVzPSh2YWwpPT57XG5sZXQgbGF5ZXI9dmFsO1xuY29uc3QgbmFtZXM9bmV3IFNldCgpOy8vXG53aGlsZShsYXllciE9PW51bGwmJmxheWVyIT09T2JqZWN0LnByb3RvdHlwZSl7XG4vL1xuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhsYXllcik7XG5jb25zdCBvd25OYW1lcz0vKiAgICAgICAgICAgICAgKi9vd25LZXlzKGRlc2NzKTtcbmZvcihjb25zdCBuYW1lIG9mIG93bk5hbWVzKXtcbi8vXG4vL1xuaWYodHlwZW9mIHZhbFtuYW1lXT09PSdmdW5jdGlvbicpe1xubmFtZXMuYWRkKG5hbWUpO1xuIH1cbiB9XG5pZighaXNPYmplY3QodmFsKSl7XG5icmVhaztcbiB9XG5sYXllcj1nZXRQcm90b3R5cGVPZihsYXllcik7XG4gfVxucmV0dXJuIGhhcmRlbihbLi4ubmFtZXNdLnNvcnQoY29tcGFyZVN0cmluZ2lmaWVkKSk7XG4gfTskaOKAjV9vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtcbmhhcmRlbihnZXRNZXRob2ROYW1lcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0U3RyaW5nTWV0aG9kTmFtZXM9KHZhbCk9PlxuLyogICAgICAgICAgICAgICAgICAgKi9cbmdldE1ldGhvZE5hbWVzKHZhbCkuZmlsdGVyKChuYW1lKT0+dHlwZW9mIG5hbWU9PT0nc3RyaW5nJyk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuZ2V0U3RyaW5nTWV0aG9kTmFtZXMoZ2V0U3RyaW5nTWV0aG9kTmFtZXMpO1xuY29uc3QgICAgICAgIGJpbmRBbGxNZXRob2RzPShvYmopPT5cbmhhcmRlbihcbmNyZWF0ZShcbm9iaixcbmZyb21FbnRyaWVzKFxuZ2V0TWV0aG9kTmFtZXMob2JqKS5tYXAoKG5hbWUpPT5bXG5uYW1lLFxue1xudmFsdWU6KC8qICAgICAgICAgICAgICAgICAgICAqLy4uLmFyZ3MpPT5cbmFwcGx5KG9ialtuYW1lXSxvYmosYXJncyksXG5lbnVtZXJhYmxlOnRydWV9XSkpKSk7JGjigI1fb25jZS5iaW5kQWxsTWV0aG9kcyhiaW5kQWxsTWV0aG9kcyk7XG5cblxuXG5cblxuaGFyZGVuKGJpbmRBbGxNZXRob2RzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldE1ldGhvZE5hbWVzIjpbImdldE1ldGhvZE5hbWVzIl0sImdldFN0cmluZ01ldGhvZE5hbWVzIjpbImdldFN0cmluZ01ldGhvZE5hbWVzIl0sImJpbmRBbGxNZXRob2RzIjpbImJpbmRBbGxNZXRob2RzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOaHnK8WHQAAFh0AADcAAABAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTcuMS9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCIuL21hcnNoYWwuanMiLCIuL2RlYnVnLmpzIiwiLi9saWItY2hhaW5TdG9yYWdlLmpzIiwiLi9tZXRob2QtdG9vbHMuanMiLCIuL3Rlc3RpbmctdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJkZWZhdWx0TWFyc2hhbGxlciIsImRvY3VtZW50U3RvcmFnZVNjaGVtYSIsIm1ha2VGYWtlU3RvcmFnZUtpdCIsIm1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdCIsInNsb3RTdHJpbmdVbnNlcmlhbGl6ZSIsInNsb3RUb1JlbW90YWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxGYXIsbWFrZU1hcnNoYWwsUmVtb3RhYmxlLHVubWFyc2hhbEZyb21Wc3RvcmFnZSxtYWtlVHJhY2VyLGlzU3RyZWFtQ2VsbCxtYWtlQ2hhaW5TdG9yYWdlUm9vdCxiaW5kQWxsTWV0aG9kcyxldmVudExvb3BJdGVyYXRpb247JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wibWFrZU1hcnNoYWxcIiwgWyRo4oCNX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjigI1fYSldXSxbXCJSZW1vdGFibGVcIiwgWyRo4oCNX2EgPT4gKFJlbW90YWJsZSA9ICRo4oCNX2EpXV1dXSxbXCIuL21hcnNoYWwuanNcIiwgW1tcInVubWFyc2hhbEZyb21Wc3RvcmFnZVwiLCBbJGjigI1fYSA9PiAodW5tYXJzaGFsRnJvbVZzdG9yYWdlID0gJGjigI1fYSldXV1dLFtcIi4vZGVidWcuanNcIiwgW1tcIm1ha2VUcmFjZXJcIiwgWyRo4oCNX2EgPT4gKG1ha2VUcmFjZXIgPSAkaOKAjV9hKV1dXV0sW1wiLi9saWItY2hhaW5TdG9yYWdlLmpzXCIsIFtbXCJpc1N0cmVhbUNlbGxcIiwgWyRo4oCNX2EgPT4gKGlzU3RyZWFtQ2VsbCA9ICRo4oCNX2EpXV0sW1wibWFrZUNoYWluU3RvcmFnZVJvb3RcIiwgWyRo4oCNX2EgPT4gKG1ha2VDaGFpblN0b3JhZ2VSb290ID0gJGjigI1fYSldXV1dLFtcIi4vbWV0aG9kLXRvb2xzLmpzXCIsIFtbXCJiaW5kQWxsTWV0aG9kc1wiLCBbJGjigI1fYSA9PiAoYmluZEFsbE1ldGhvZHMgPSAkaOKAjV9hKV1dXV0sW1wiLi90ZXN0aW5nLXV0aWxzLmpzXCIsIFtbXCJldmVudExvb3BJdGVyYXRpb25cIiwgWyRo4oCNX2EgPT4gKGV2ZW50TG9vcEl0ZXJhdGlvbiA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3QgdHJhY2U9bWFrZVRyYWNlcignU3RvclRVJyxmYWxzZSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc2xvdFRvUmVtb3RhYmxlPShfc2xvdElkLGlmYWNlPSdSZW1vdGFibGUnKT0+XG5SZW1vdGFibGUoaWZhY2UpO1xuXG4vKlxuXG5cbiAqLyRo4oCNX29uY2Uuc2xvdFRvUmVtb3RhYmxlKHNsb3RUb1JlbW90YWJsZSk7XG5jb25zdCAgICAgICAgZGVmYXVsdE1hcnNoYWxsZXI9bWFrZU1hcnNoYWwodW5kZWZpbmVkLHNsb3RUb1JlbW90YWJsZSx7XG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmRlZmF1bHRNYXJzaGFsbGVyKGRlZmF1bHRNYXJzaGFsbGVyKTtcbmNvbnN0IG1ha2VTbG90U3RyaW5nVW5zZXJpYWxpemU9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaWRlbnRpdHlTbG90VG9WYWxGbj0oc2xvdCxfKT0+RmFyKCd1bmsnLHt0b0pTT046KCk9PnNsb3R9KTtcbmNvbnN0e2Zyb21DYXBEYXRhfT1tYWtlTWFyc2hhbCh1bmRlZmluZWQsaWRlbnRpdHlTbG90VG9WYWxGbik7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHVuc2VyaWFsaXplPShjYXBEYXRhKT0+XG5KU09OLnBhcnNlKFxuSlNPTi5zdHJpbmdpZnkoZnJvbUNhcERhdGEoY2FwRGF0YSksKF8sdmFsKT0+e1xuaWYodHlwZW9mIHZhbD09PSdiaWdpbnQnKXtcbi8vXG4vL1xucmV0dXJuIGBAZW5jcm9tdWxhdGU6JHt2YWx9YDtcbiB9ZWxzZXtcbnJldHVybiB2YWw7XG4gfVxuIH0pLFxuKF9rZXksdmFsKT0+e1xuaWYodHlwZW9mIHZhbD09PSdzdHJpbmcnJiZ2YWwuc3RhcnRzV2l0aCgnQGVuY3JvbXVsYXRlJykpe1xucmV0dXJuIEJpZ0ludCh2YWwuc3BsaXQoJzonKVsxXSk7XG4gfWVsc2V7XG5yZXR1cm4gdmFsO1xuIH1cbiB9KTtcblxucmV0dXJuIGhhcmRlbih1bnNlcmlhbGl6ZSk7XG4gfTtcbmNvbnN0ICAgICAgICBzbG90U3RyaW5nVW5zZXJpYWxpemU9bWFrZVNsb3RTdHJpbmdVbnNlcmlhbGl6ZSgpO1xuXG4vKlxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5zbG90U3RyaW5nVW5zZXJpYWxpemUoc2xvdFN0cmluZ1Vuc2VyaWFsaXplKTtcbmNvbnN0ICAgICAgICBtYWtlRmFrZVN0b3JhZ2VLaXQ9KHJvb3RQYXRoLHJvb3RPcHRpb25zKT0+e1xuY29uc3QgcmVzb2x2ZWRPcHRpb25zPXtzZXF1ZW5jZTp0cnVlLC4uLnJvb3RPcHRpb25zfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGF0YT1uZXcgTWFwKCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2V0Q2hpbGRFbnRyaWVzPShwcmVmaXgpPT57XG5hc3NlcnQocHJlZml4LmVuZHNXaXRoKCcuJykpO1xuY29uc3QgY2hpbGRFbnRyaWVzPW5ldyBNYXAoKTtcbmZvcihjb25zdFtwYXRoLHZhbHVlXW9mIGRhdGEuZW50cmllcygpKXtcbmlmKCFwYXRoLnN0YXJ0c1dpdGgocHJlZml4KSl7XG5jb250aW51ZTtcbiB9XG5jb25zdFtzZWdtZW50LC4uLnN1ZmZpeF09cGF0aC5zbGljZShwcmVmaXgubGVuZ3RoKS5zcGxpdCgnLicpO1xuaWYoc3VmZml4Lmxlbmd0aD09PTApe1xuY2hpbGRFbnRyaWVzLnNldChzZWdtZW50LHZhbHVlKTtcbiB9ZWxzZSBpZighY2hpbGRFbnRyaWVzLmhhcyhzZWdtZW50KSl7XG5jaGlsZEVudHJpZXMuc2V0KHNlZ21lbnQsbnVsbCk7XG4gfVxuIH1cbnJldHVybiBjaGlsZEVudHJpZXM7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1lc3NhZ2VzPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgdG9TdG9yYWdlPShtZXNzYWdlKT0+e1xubWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbnN3aXRjaChtZXNzYWdlLm1ldGhvZCl7XG5jYXNlJ2dldFN0b3JlS2V5Jzp7XG5jb25zdFtrZXldPW1lc3NhZ2UuYXJncztcbnJldHVybntzdG9yZU5hbWU6J3N3aW5nc2V0JyxzdG9yZVN1YmtleTogYGZha2U6JHtrZXl9YH07XG4gfVxuY2FzZSdnZXQnOntcbmNvbnN0W2tleV09bWVzc2FnZS5hcmdzO1xucmV0dXJuIGRhdGEuaGFzKGtleSk/ZGF0YS5nZXQoa2V5KTpudWxsO1xuIH1cbmNhc2UnY2hpbGRyZW4nOntcbmNvbnN0W2tleV09bWVzc2FnZS5hcmdzO1xuY29uc3QgY2hpbGRFbnRyaWVzPWdldENoaWxkRW50cmllcyggYCR7a2V5fS5gKTtcbnJldHVyblsuLi5jaGlsZEVudHJpZXMua2V5cygpXTtcbiB9XG5jYXNlJ2VudHJpZXMnOntcbmNvbnN0W2tleV09bWVzc2FnZS5hcmdzO1xuY29uc3QgY2hpbGRFbnRyaWVzPWdldENoaWxkRW50cmllcyggYCR7a2V5fS5gKTtcbnJldHVyblsuLi5jaGlsZEVudHJpZXMuZW50cmllcygpXS5tYXAoKGVudHJ5KT0+XG5lbnRyeVsxXSE9bnVsbD9lbnRyeTpbZW50cnlbMF1dKTtcblxuIH1cbmNhc2Unc2V0JzpcbmNhc2Unc2V0V2l0aG91dE5vdGlmeSc6e1xudHJhY2UoJ3RvU3RvcmFnZSBzZXQnLG1lc3NhZ2UpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5ld0VudHJpZXM9bWVzc2FnZS5hcmdzO1xuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBuZXdFbnRyaWVzKXtcbmlmKHZhbHVlIT1udWxsKXtcbmRhdGEuc2V0KGtleSx2YWx1ZSk7XG4gfWVsc2V7XG5kYXRhLmRlbGV0ZShrZXkpO1xuIH1cbiB9XG5icmVhaztcbiB9XG5jYXNlJ2FwcGVuZCc6e1xudHJhY2UoJ3RvU3RvcmFnZSBhcHBlbmQnLG1lc3NhZ2UpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5ld0VudHJpZXM9bWVzc2FnZS5hcmdzO1xuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBuZXdFbnRyaWVzKXtcbnZhbHVlIT1udWxsfHxGYWlsIGBhdHRlbXB0IHRvIGFwcGVuZCB3aXRoIG5vIHZhbHVlYDtcbi8vXG5jb25zdCBvbGRWYWw9ZGF0YS5nZXQoa2V5KTtcbmxldCBzdHJlYW1DZWxsO1xuaWYob2xkVmFsIT1udWxsKXtcbnRyeXtcbnN0cmVhbUNlbGw9SlNPTi5wYXJzZShvbGRWYWwpO1xuYXNzZXJ0KGlzU3RyZWFtQ2VsbChzdHJlYW1DZWxsKSk7XG4gfWNhdGNoKF9lcnIpe1xuc3RyZWFtQ2VsbD11bmRlZmluZWQ7XG4gfVxuIH1cbmlmKHN0cmVhbUNlbGw9PT11bmRlZmluZWQpe1xuc3RyZWFtQ2VsbD17XG5ibG9ja0hlaWdodDonMCcsXG52YWx1ZXM6b2xkVmFsIT1udWxsP1tvbGRWYWxdOltdfTtcblxuIH1cbnN0cmVhbUNlbGwudmFsdWVzLnB1c2godmFsdWUpO1xuZGF0YS5zZXQoa2V5LEpTT04uc3RyaW5naWZ5KHN0cmVhbUNlbGwpKTtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3NpemUnOlxuLy9cbi8vXG5yZXR1cm5bLi4uZGF0YS5rZXlzKCldLmZpbHRlcigoayk9Pmsuc3RhcnRzV2l0aCggYCR7bWVzc2FnZS5hcmdzWzBdfS5gKSkuXG5sZW5ndGg7XG5kZWZhdWx0OlxudGhyb3cgRXJyb3IoIGB1bnN1cHBvcnRlZCBtZXRob2Q6ICR7bWVzc2FnZS5tZXRob2R9YCk7fVxuXG4gfTtcbmNvbnN0IHJvb3ROb2RlPW1ha2VDaGFpblN0b3JhZ2VSb290KHRvU3RvcmFnZSxyb290UGF0aCxyZXNvbHZlZE9wdGlvbnMpO1xucmV0dXJue1xucm9vdE5vZGUsXG4vL1xuZGF0YTovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovZGF0YSxcbm1lc3NhZ2VzLFxudG9TdG9yYWdlfTtcblxuIH07JGjigI1fb25jZS5tYWtlRmFrZVN0b3JhZ2VLaXQobWFrZUZha2VTdG9yYWdlS2l0KTtcbmhhcmRlbihtYWtlRmFrZVN0b3JhZ2VLaXQpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlTW9ja0NoYWluU3RvcmFnZVJvb3Q9KCk9PntcbmNvbnN0e3Jvb3ROb2RlLGRhdGF9PW1ha2VGYWtlU3RvcmFnZUtpdCgnbW9ja0NoYWluU3RvcmFnZVJvb3QnKTtcbnJldHVybiBGYXIoJ21vY2tDaGFpblN0b3JhZ2UnLHtcbi4uLmJpbmRBbGxNZXRob2RzKHJvb3ROb2RlKSxcbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAgICovXG5nZXRCb2R5OihwYXRoLG1hcnNoYWxsZXI9ZGVmYXVsdE1hcnNoYWxsZXIsaW5kZXg9LTEpPT57XG5kYXRhLnNpemV8fEZhaWwgYG5vIGRhdGEgaW4gc3RvcmFnZWA7XG4vKlxuXG5cblxuICAgICAgICovXG5jb25zdCBmcm9tQ2FwRGF0YT0oLi4uYXJncyk9PlxuUmVmbGVjdC5hcHBseShtYXJzaGFsbGVyLmZyb21DYXBEYXRhLG1hcnNoYWxsZXIsYXJncyk7XG5yZXR1cm4gdW5tYXJzaGFsRnJvbVZzdG9yYWdlKGRhdGEscGF0aCxmcm9tQ2FwRGF0YSxpbmRleCk7XG4gfSxcbmtleXM6KCk9PlsuLi5kYXRhLmtleXMoKV19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZU1vY2tDaGFpblN0b3JhZ2VSb290KG1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdCk7XG5jb25zdCAgICAgICAgZG9jdW1lbnRTdG9yYWdlU2NoZW1hPWFzeW5jKHQsc3RvcmFnZSxvcHRzKT0+e1xuLy9cbmF3YWl0IGV2ZW50TG9vcEl0ZXJhdGlvbigpO1xuXG5jb25zdFtrZXlzLGdldEJvZHldPVxuJ2tleXMnaW4gc3RvcmFnZT9cbltzdG9yYWdlLmtleXMoKSwoLyogICAgICAgICAgICAgICAgICovayk9PnN0b3JhZ2UuZ2V0Qm9keShrKV06XG5bc3RvcmFnZS5kYXRhLmtleXMoKSwoLyogICAgICAgICAgICAgICAgICovayk9PnN0b3JhZ2UuZGF0YS5nZXQoayldO1xuXG5jb25zdHtwYXR0ZXJuLHJlcGxhY2VtZW50fT1cbidwYXR0ZXJuJ2luIG9wdHM/XG5vcHRzOlxue3BhdHRlcm46J21vY2tDaGFpblN0b3JhZ2VSb290LicscmVwbGFjZW1lbnQ6J3B1Ymxpc2hlZC4nfTtcbmNvbnN0IGlsbHVzdHJhdGlvbj1bLi4ua2V5c10uc29ydCgpLm1hcChcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4oa2V5KT0+W2tleS5yZXBsYWNlKHBhdHRlcm4scmVwbGFjZW1lbnQpLGdldEJvZHkoa2V5KV0pO1xuXG5jb25zdCBwcnVuZWQ9aWxsdXN0cmF0aW9uLmZpbHRlcihcbidub2RlJ2luIG9wdHM/XG4oW2tleSxfXSk9PmtleS5zdGFydHNXaXRoKCBgcHVibGlzaGVkLiR7b3B0cy5ub2RlfWApOlxuKF9lbnRyeSk9PnRydWUpO1xuXG5cbmNvbnN0IG5vdGU9XG4nbm90ZSdpbiBvcHRzP1xub3B0cy5ub3RlOlxuIGBVbmRlciBcInB1Ymxpc2hlZFwiLCB0aGUgXCIke29wdHMubm9kZX1cIiBub2RlIGlzIGRlbGVnYXRlZCB0byAke29wdHMub3duZXJ9LmA7XG5jb25zdCBib2lsZXJwbGF0ZT0gYFxuVGhlIGV4YW1wbGUgYmVsb3cgaWxsdXN0cmF0ZXMgdGhlIHNjaGVtYSBvZiB0aGUgZGF0YSBwdWJsaXNoZWQgdGhlcmUuXG5cblNlZSBhbHNvIGJvYXJkIG1hcnNoYWxsaW5nIGNvbnZlbnRpb25zIChfdG8gYXBwZWFyXykuYDtcbnQuc25hcHNob3QocHJ1bmVkLG5vdGUrYm9pbGVycGxhdGUpO1xuIH07JGjigI1fb25jZS5kb2N1bWVudFN0b3JhZ2VTY2hlbWEoZG9jdW1lbnRTdG9yYWdlU2NoZW1hKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InNsb3RUb1JlbW90YWJsZSI6WyJzbG90VG9SZW1vdGFibGUiXSwiZGVmYXVsdE1hcnNoYWxsZXIiOlsiZGVmYXVsdE1hcnNoYWxsZXIiXSwic2xvdFN0cmluZ1Vuc2VyaWFsaXplIjpbInNsb3RTdHJpbmdVbnNlcmlhbGl6ZSJdLCJtYWtlRmFrZVN0b3JhZ2VLaXQiOlsibWFrZUZha2VTdG9yYWdlS2l0Il0sIm1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdCI6WyJtYWtlTW9ja0NoYWluU3RvcmFnZVJvb3QiXSwiZG9jdW1lbnRTdG9yYWdlU2NoZW1hIjpbImRvY3VtZW50U3RvcmFnZVNjaGVtYSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAAtRo2KAYAACgGAAAyAAAAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEvc3JjL3Rlc3RpbmctdXRpbHMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImV2ZW50TG9vcEl0ZXJhdGlvbiIsImluc3BlY3RNYXBTdG9yZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvL1xuLypcblxuXG4gKi9cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlbnRMb29wSXRlcmF0aW9uPWFzeW5jKCk9PlxubmV3IFByb21pc2UoKHJlc29sdmUpPT5zZXRJbW1lZGlhdGUocmVzb2x2ZSkpOyRo4oCNX29uY2UuZXZlbnRMb29wSXRlcmF0aW9uKGV2ZW50TG9vcEl0ZXJhdGlvbik7XG5oYXJkZW4oZXZlbnRMb29wSXRlcmF0aW9uKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RyaW5nT3JUYWc9KHZhbHVlKT0+e1xuaWYodHlwZW9mIHZhbHVlPT09J3N0cmluZycpe1xucmV0dXJuIHZhbHVlO1xuIH1lbHNlIGlmKHR5cGVvZiB2YWx1ZT09PSdvYmplY3QnJiZTeW1ib2wudG9TdHJpbmdUYWcgaW4gdmFsdWUpe1xucmV0dXJuIHZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ107XG4gfVxucmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gfTtcbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaW5zcGVjdE1hcFN0b3JlPShzdG9yZSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBvYmo9e307XG5mb3IoY29uc3Qga2V5IG9mIHN0b3JlLmtleXMoKSl7XG5jb25zdCB2YWx1ZT1zdG9yZS5nZXQoa2V5KTtcbmNvbnN0IGhhc0tleXM9dHlwZW9mIHZhbHVlPT09J29iamVjdCcmJidrZXlzJ2luIHZhbHVlO1xuY29uc3QgaW5kZXg9c3RyaW5nT3JUYWcoa2V5KTtcbmlmKGhhc0tleXMmJidnZXQnaW4gdmFsdWUpe1xub2JqW2luZGV4XT1pbnNwZWN0TWFwU3RvcmUodmFsdWUpO1xuIH1lbHNlIGlmKGhhc0tleXMpe1xub2JqW2luZGV4XT1BcnJheS5mcm9tKHZhbHVlLmtleXMoKSk7XG4gfWVsc2V7XG5vYmpbaW5kZXhdPVxudmFsdWUgaW5zdGFuY2VvZiBPYmplY3QmJlN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZT9cbnZhbHVlW1N5bWJvbC50b1N0cmluZ1RhZ106XG52YWx1ZTtcbiB9XG4gfVxucmV0dXJuIG9iajtcbiB9OyRo4oCNX29uY2UuaW5zcGVjdE1hcFN0b3JlKGluc3BlY3RNYXBTdG9yZSk7XG5oYXJkZW4oaW5zcGVjdE1hcFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImV2ZW50TG9vcEl0ZXJhdGlvbiI6WyJldmVudExvb3BJdGVyYXRpb24iXSwiaW5zcGVjdE1hcFN0b3JlIjpbImluc3BlY3RNYXBTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD0Su0eBgMAAAYDAAAuAAAAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEvc3JjL3R5cGVDaGVjay5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbImNhc3QiLCJtdXN0TWF0Y2giXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHR5cGVsZXNzTXVzdE1hdGNoOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRo4oCNX2EgPT4gKHR5cGVsZXNzTXVzdE1hdGNoID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuLypcblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG11c3RNYXRjaD10eXBlbGVzc011c3RNYXRjaDtcblxuLypcblxuXG5cblxuICovJGjigI1fb25jZS5tdXN0TWF0Y2gobXVzdE1hdGNoKTtcbmNvbnN0ICAgICAgICBjYXN0PShzcGVjaW1lbixwYXR0KT0+e1xuLy9cbi8vXG4vL1xubXVzdE1hdGNoKHNwZWNpbWVuLHBhdHQpO1xucmV0dXJuIHNwZWNpbWVuO1xuIH07JGjigI1fb25jZS5jYXN0KGNhc3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibXVzdE1hdGNoIjpbIm11c3RNYXRjaCJdLCJjYXN0IjpbImNhc3QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAArVi+CVcDAABXAwAALwAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xL3NyYy90eXBlR3VhcmRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiU3RvcmFnZU5vZGVTaGFwZSIsIlVuZ3VhcmRlZEhlbHBlckkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE07JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRo4oCNX2EgPT4gKE0gPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cbmNvbnN0ICAgICAgICBTdG9yYWdlTm9kZVNoYXBlPU0ucmVtb3RhYmxlKCdTdG9yYWdlTm9kZScpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaOKAjV9vbmNlLlN0b3JhZ2VOb2RlU2hhcGUoU3RvcmFnZU5vZGVTaGFwZSk7XG5jb25zdCAgICAgICAgVW5ndWFyZGVkSGVscGVyST1NLmludGVyZmFjZShcbidoZWxwZXInLFxue30sXG4vL1xue3Nsb3BweTp0cnVlfSk7JGjigI1fb25jZS5Vbmd1YXJkZWRIZWxwZXJJKFVuZ3VhcmRlZEhlbHBlckkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiU3RvcmFnZU5vZGVTaGFwZSI6WyJTdG9yYWdlTm9kZVNoYXBlIl0sIlVuZ3VhcmRlZEhlbHBlckkiOlsiVW5ndWFyZGVkSGVscGVySSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACHklKnTwEAAE8BAAAqAAAAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADn+rSrNBQAAzQUAADAAAABAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTcuMS9zcmMvdXBncmFkZS1hcGkuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlIiwiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiIsIm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTSxtYXRjaGVzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJtYXRjaGVzXCIsIFskaOKAjV9hID0+IChtYXRjaGVzID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNvbnN0e2lzRnJvemVufT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlPWhhcmRlbih7XG5uYW1lOid2YXRVcGdyYWRlZCcsXG51cGdyYWRlTWVzc2FnZTpNLnN0cmluZygpLFxuaW5jYXJuYXRpb25OdW1iZXI6TS5udW1iZXIoKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUoVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSk7XG5jb25zdCAgICAgICAgbWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uPSh1cGdyYWRlTWVzc2FnZSx0b0luY2FybmF0aW9uTnVtYmVyKT0+XG5oYXJkZW4oe1xubmFtZTondmF0VXBncmFkZWQnLFxudXBncmFkZU1lc3NhZ2UsXG5pbmNhcm5hdGlvbk51bWJlcjp0b0luY2FybmF0aW9uTnVtYmVyfSk7JGjigI1fb25jZS5tYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24obWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uKTtcblxuaGFyZGVuKG1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzVXBncmFkZURpc2Nvbm5lY3Rpb249KHJlYXNvbik9PlxuaXNGcm96ZW4ocmVhc29uKSYmbWF0Y2hlcyhyZWFzb24sVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSk7JGjigI1fb25jZS5pc1VwZ3JhZGVEaXNjb25uZWN0aW9uKGlzVXBncmFkZURpc2Nvbm5lY3Rpb24pO1xuaGFyZGVuKGlzVXBncmFkZURpc2Nvbm5lY3Rpb24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSI6WyJVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlIl0sIm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbiI6WyJtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24iXSwiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiI6WyJpc1VwZ3JhZGVEaXNjb25uZWN0aW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJtTvf/iIgAA4iIAACoAAABAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTcuMS9zcmMvdXRpbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vc3RyZWFtIiwiamVzc2llLmpzIl0sImV4cG9ydHMiOlsiQkFTSVNfUE9JTlRTIiwiUHJvbWlzZUFsbE9yRXJyb3JzIiwiYWdncmVnYXRlVHJ5RmluYWxseSIsImFsbFZhbHVlcyIsImFzc2VydEFsbERlZmluZWQiLCJkZWVwTWFwT2JqZWN0IiwiZGVlcGx5RnVsZmlsbGVkT2JqZWN0IiwiZm9yZXZlciIsIm1ha2VNZWFzdXJlU2Vjb25kcyIsInN5bmNocm9uaXplZFRlZSIsInVudGlsVHJ1ZSIsIndoaWxlVHJ1ZSIsIndpdGhEZWZlcnJlZENsZWFudXAiLCJ6aXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcixYLGRlZXBseUZ1bGZpbGxlZCxpc09iamVjdCxtYWtlUHJvbWlzZUtpdCxtYWtlUXVldWUsYXN5bmNHZW5lcmF0ZTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjigI1fYSA9PiAobWFrZUVycm9yID0gJGjigI1fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaOKAjV9hID0+IChhbm5vdGF0ZUVycm9yID0gJGjigI1fYSldXSxbXCJYXCIsIFskaOKAjV9hID0+IChYID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImRlZXBseUZ1bGZpbGxlZFwiLCBbJGjigI1fYSA9PiAoZGVlcGx5RnVsZmlsbGVkID0gJGjigI1fYSldXSxbXCJpc09iamVjdFwiLCBbJGjigI1fYSA9PiAoaXNPYmplY3QgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9zdHJlYW1cIiwgW1tcIm1ha2VRdWV1ZVwiLCBbJGjigI1fYSA9PiAobWFrZVF1ZXVlID0gJGjigI1fYSldXV1dLFtcImplc3NpZS5qc1wiLCBbW1wiYXN5bmNHZW5lcmF0ZVwiLCBbJGjigI1fYSA9PiAoYXN5bmNHZW5lcmF0ZSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2Zyb21FbnRyaWVzLGtleXMsdmFsdWVzfT1PYmplY3Q7XG5cbmNvbnN0ICAgICAgICBCQVNJU19QT0lOVFM9MTBfMDAwbjtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuQkFTSVNfUE9JTlRTKEJBU0lTX1BPSU5UUyk7XG5jb25zdCAgICAgICAgZGVlcGx5RnVsZmlsbGVkT2JqZWN0PWFzeW5jKG9iaik9PntcbmlzT2JqZWN0KG9iail8fEZhaWwgYHBhcmFtIG11c3QgYmUgYW4gb2JqZWN0YDtcbnJldHVybiBkZWVwbHlGdWxmaWxsZWQob2JqKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuZGVlcGx5RnVsZmlsbGVkT2JqZWN0KGRlZXBseUZ1bGZpbGxlZE9iamVjdCk7XG5jb25zdCBkZWVwTWFwT2JqZWN0SW50ZXJuYWw9KHZhbHVlLG5hbWUsY29udGFpbmVyLG1hcHBlcik9PntcbmlmKGNvbnRhaW5lciYmdHlwZW9mIG5hbWU9PT0nc3RyaW5nJyl7XG5jb25zdCBtYXBwZWQ9bWFwcGVyKHZhbHVlLG5hbWUsY29udGFpbmVyKTtcbmlmKG1hcHBlZCE9PXZhbHVlKXtcbnJldHVybiBtYXBwZWQ7XG4gfVxuIH1cblxuaWYodHlwZW9mIHZhbHVlIT09J29iamVjdCd8fCF2YWx1ZSl7XG5yZXR1cm4gdmFsdWU7XG4gfVxuXG5sZXQgd2FzTWFwcGVkPWZhbHNlO1xuY29uc3QgbWFwcGVkRW50cmllcz1PYmplY3QuZW50cmllcyh2YWx1ZSkubWFwKChbaW5uZXJOYW1lLGlubmVyVmFsdWVdKT0+e1xuY29uc3QgbWFwcGVkSW5uZXJWYWx1ZT1kZWVwTWFwT2JqZWN0SW50ZXJuYWwoXG5pbm5lclZhbHVlLFxuaW5uZXJOYW1lLFxudmFsdWUsXG5tYXBwZXIpO1xuXG53YXNNYXBwZWR8fD1tYXBwZWRJbm5lclZhbHVlIT09aW5uZXJWYWx1ZTtcbnJldHVybltpbm5lck5hbWUsbWFwcGVkSW5uZXJWYWx1ZV07XG4gfSk7XG5cbnJldHVybiB3YXNNYXBwZWQ/T2JqZWN0LmZyb21FbnRyaWVzKG1hcHBlZEVudHJpZXMpOnZhbHVlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZXBNYXBPYmplY3Q9KG9iaixtYXBwZXIpPT5cbmRlZXBNYXBPYmplY3RJbnRlcm5hbChvYmosdW5kZWZpbmVkLHVuZGVmaW5lZCxtYXBwZXIpO1xuXG4vKlxuXG5cblxuICovJGjigI1fb25jZS5kZWVwTWFwT2JqZWN0KGRlZXBNYXBPYmplY3QpO1xuY29uc3QgbWFrZUFnZ3JlZ2F0ZUVycm9yPVxudHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPT09J2Z1bmN0aW9uJz9cbihlcnJvcnMsbWVzc2FnZSxvcHRpb25zKT0+QWdncmVnYXRlRXJyb3IoZXJyb3JzLG1lc3NhZ2Usb3B0aW9ucyk6XG4oZXJyb3JzLG1lc3NhZ2Usb3B0aW9ucyk9PntcbnJldHVybiBtYWtlRXJyb3IobWVzc2FnZT8/J211bHRpcGxlIGVycm9ycycsdW5kZWZpbmVkLHtcbi4uLm9wdGlvbnMsXG5lcnJvcnN9KTtcblxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBQcm9taXNlQWxsT3JFcnJvcnM9YXN5bmMoaXRlbXMpPT57XG5yZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGl0ZW1zKS50aGVuKChyZXN1bHRzKT0+e1xuY29uc3QgZXJyb3JzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZXN1bHRzLmZpbHRlcigoe3N0YXR1c30pPT5zdGF0dXM9PT0ncmVqZWN0ZWQnKS5cbm1hcCgocmVzdWx0KT0+cmVzdWx0LnJlYXNvbik7XG5pZighZXJyb3JzLmxlbmd0aCl7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3Jlc3VsdHMubWFwKFxuKHJlc3VsdCk9PnJlc3VsdC52YWx1ZSkpO1xuXG4gfWVsc2UgaWYoZXJyb3JzLmxlbmd0aD09PTEpe1xudGhyb3cgZXJyb3JzWzBdO1xuIH1lbHNle1xudGhyb3cgbWFrZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gfVxuIH0pO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuUHJvbWlzZUFsbE9yRXJyb3JzKFByb21pc2VBbGxPckVycm9ycyk7XG5jb25zdCAgICAgICAgYWdncmVnYXRlVHJ5RmluYWxseT1hc3luYyh0cmllcixmaW5hbGl6ZXIpPT5cbnRyaWVyKCkudGhlbihcbmFzeW5jKHJlc3VsdCk9PmZpbmFsaXplcigpLnRoZW4oKCk9PnJlc3VsdCksXG5hc3luYyh0cnlFcnJvcik9PlxuZmluYWxpemVyKHRyeUVycm9yKS5cbnRoZW4oXG4oKT0+dHJ5RXJyb3IsXG4oZmluYWxpemVFcnJvcik9Pm1ha2VBZ2dyZWdhdGVFcnJvcihbdHJ5RXJyb3IsZmluYWxpemVFcnJvcl0pKS5cblxudGhlbigoZXJyb3IpPT5Qcm9taXNlLnJlamVjdChlcnJvcikpKTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmFnZ3JlZ2F0ZVRyeUZpbmFsbHkoYWdncmVnYXRlVHJ5RmluYWxseSk7XG5jb25zdCAgICAgICAgd2l0aERlZmVycmVkQ2xlYW51cD1hc3luYyhmbik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2xlYW51cHNMSUZPPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhZGRDbGVhbnVwPShjbGVhbnVwKT0+e1xuY2xlYW51cHNMSUZPLnVuc2hpZnQoY2xlYW51cCk7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBmaW5hbGl6ZXI9YXN5bmMoZXJyKT0+e1xuLy9cbmNvbnN0IGNsZWFudXBSZXN1bHRzPWNsZWFudXBzTElGTy5tYXAoYXN5bmMoY2xlYW51cCk9PntcbmF3YWl0IG51bGw7XG5yZXR1cm4gY2xlYW51cChlcnIpO1xuIH0pO1xuYXdhaXQgUHJvbWlzZUFsbE9yRXJyb3JzKGNsZWFudXBSZXN1bHRzKTtcbiB9O1xucmV0dXJuIGFnZ3JlZ2F0ZVRyeUZpbmFsbHkoKCk9PmZuKGFkZENsZWFudXApLGZpbmFsaXplcik7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLndpdGhEZWZlcnJlZENsZWFudXAod2l0aERlZmVycmVkQ2xlYW51cCk7XG5jb25zdCAgICAgICAgbWFrZU1lYXN1cmVTZWNvbmRzPShjdXJyZW50VGltZU1pbGxpc2VjKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWVhc3VyZVNlY29uZHM9YXN5bmMoZm4pPT57XG5jb25zdCB0MD1jdXJyZW50VGltZU1pbGxpc2VjKCk7XG5jb25zdCByZXN1bHQ9YXdhaXQgZm4oKTtcbmNvbnN0IGR1cmF0aW9uTWlsbGlzZWM9Y3VycmVudFRpbWVNaWxsaXNlYygpLXQwO1xucmV0dXJue3Jlc3VsdCxkdXJhdGlvbjpkdXJhdGlvbk1pbGxpc2VjLzEwMDB9O1xuIH07XG5yZXR1cm4gbWVhc3VyZVNlY29uZHM7XG4gfTtcblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlTWVhc3VyZVNlY29uZHMobWFrZU1lYXN1cmVTZWNvbmRzKTtcbmNvbnN0ICAgICAgICBhc3NlcnRBbGxEZWZpbmVkPShvYmopPT57XG5jb25zdCBtaXNzaW5nPVtdO1xuZm9yKGNvbnN0W2tleSx2YWxdb2YgT2JqZWN0LmVudHJpZXMob2JqKSl7XG5pZih2YWw9PT11bmRlZmluZWQpe1xubWlzc2luZy5wdXNoKGtleSk7XG4gfVxuIH1cbmlmKG1pc3NpbmcubGVuZ3RoPjApe1xuRmFpbCBgbWlzc2luZyAke3EobWlzc2luZyl9YDtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaOKAjV9vbmNlLmFzc2VydEFsbERlZmluZWQoYXNzZXJ0QWxsRGVmaW5lZCk7XG5jb25zdCBub3REb25lPWhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTp1bmRlZmluZWR9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhbHdheXNEb25lPWhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuXG5jb25zdCAgICAgICAgZm9yZXZlcj1hc3luY0dlbmVyYXRlKCgpPT5ub3REb25lKTtcblxuLypcblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmZvcmV2ZXIoZm9yZXZlcik7XG5jb25zdCAgICAgICAgd2hpbGVUcnVlPShwcm9kdWNlKT0+XG5hc3luY0dlbmVyYXRlKGFzeW5jKCk9PntcbmNvbnN0IHZhbHVlPWF3YWl0IHByb2R1Y2UoKTtcbmlmKCF2YWx1ZSl7XG5yZXR1cm4gYWx3YXlzRG9uZTtcbiB9XG5yZXR1cm4gaGFyZGVuKHtcbmRvbmU6ZmFsc2UsXG52YWx1ZX0pO1xuXG4gfSk7XG5cbi8qXG5cblxuXG5cblxuICovJGjigI1fb25jZS53aGlsZVRydWUod2hpbGVUcnVlKTtcbmNvbnN0ICAgICAgICB1bnRpbFRydWU9KHByb2R1Y2UpPT5cbmFzeW5jR2VuZXJhdGUoYXN5bmMoKT0+e1xuY29uc3QgdmFsdWU9YXdhaXQgcHJvZHVjZSgpO1xuaWYodmFsdWUpe1xucmV0dXJuIGhhcmRlbih7XG5kb25lOnRydWUsXG52YWx1ZX0pO1xuXG4gfVxucmV0dXJuIGhhcmRlbih7XG5kb25lOmZhbHNlLFxudmFsdWV9KTtcblxuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaOKAjV9vbmNlLnVudGlsVHJ1ZSh1bnRpbFRydWUpO1xuY29uc3QgICAgICAgIHppcD0oeHMseXMpPT5oYXJkZW4oeHMubWFwKCh4LGkpPT5beCx5c1sraV1dKSk7XG5cbi8qXG5cblxuXG4gKi8kaOKAjV9vbmNlLnppcCh6aXApO1xuY29uc3QgICAgICAgIGFsbFZhbHVlcz1hc3luYyhvYmopPT57XG5jb25zdCByZXNvbHZlZD1hd2FpdCBQcm9taXNlLmFsbCh2YWx1ZXMob2JqKSk7XG4vL1xucmV0dXJuIGhhcmRlbihmcm9tRW50cmllcyh6aXAoa2V5cyhvYmopLHJlc29sdmVkKSkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuYWxsVmFsdWVzKGFsbFZhbHVlcyk7XG5jb25zdCAgICAgICAgc3luY2hyb25pemVkVGVlPShzb3VyY2VTdHJlYW0scmVhZGVyQ291bnQpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGRvbmVSZXN1bHQ7XG5cbi8qXG5cblxuXG4gICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcXVldWVzPVtdO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdWxsTmV4dD1hc3luYygpPT57XG5jb25zdCByZXF1ZXN0cz1hd2FpdCBQcm9taXNlLmFsbFNldHRsZWQocXVldWVzLm1hcCgocXVldWUpPT5xdWV1ZS5nZXQoKSkpO1xuY29uc3QgcmVqZWN0aW9ucz1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzb2x2ZXJzPVtdO1xubGV0IGRvbmU9ZmFsc2U7XG5mb3IoY29uc3Qgc2V0dGxlZFJlc3VsdCBvZiByZXF1ZXN0cyl7XG5pZihzZXR0bGVkUmVzdWx0LnN0YXR1cz09PSdyZWplY3RlZCcpe1xucmVqZWN0aW9ucy5wdXNoKHNldHRsZWRSZXN1bHQucmVhc29uKTtcbiB9ZWxzZXtcbmRvbmV8fD0hIXNldHRsZWRSZXN1bHQudmFsdWUuZG9uZTtcbnJlc29sdmVycy5wdXNoKHNldHRsZWRSZXN1bHQudmFsdWUudmFsdWUpO1xuIH1cbiB9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHJlc3VsdDtcbmlmKGRvbmVSZXN1bHQpe1xucmVzdWx0PVByb21pc2UucmVzb2x2ZShkb25lUmVzdWx0KTtcbiB9ZWxzZSBpZihyZWplY3Rpb25zLmxlbmd0aCl7XG5jb25zdCBlcnJvcj1tYWtlRXJyb3IoWCBgVGVlZCBzdHJlYW0gdGhyZXdgKTtcbmFubm90YXRlRXJyb3IoZXJyb3IsWCBgVGVlZCByZWplY3Rpb25zOiAke3JlamVjdGlvbnN9YCk7XG5yZXN1bHQ9XG5zb3VyY2VTdHJlYW0udGhyb3c/LihlcnJvcil8fFxuUHJvbWlzZS5yZXNvbHZlKHNvdXJjZVN0cmVhbS5yZXR1cm4/LigpKS50aGVuKCgpPT5cblByb21pc2UucmVqZWN0KGVycm9yKSk7XG5cbiB9ZWxzZSBpZihkb25lKXtcbnJlc3VsdD1cbnNvdXJjZVN0cmVhbS5yZXR1cm4/LigpfHxcblByb21pc2UucmVzb2x2ZSh7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuIH1lbHNle1xucmVzdWx0PXNvdXJjZVN0cmVhbS5uZXh0KCk7XG4gfVxucmVzdWx0LnRoZW4oXG4ocik9PntcbmlmKHIuZG9uZSl7XG5kb25lUmVzdWx0PXI7XG4gfVxuIH0sXG4oKT0+e1xuZG9uZVJlc3VsdD17ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH07XG4gfSk7XG5cbmZvcihjb25zdCByZXNvbHZlIG9mIHJlc29sdmVycyl7XG5yZXNvbHZlKHJlc3VsdCk7XG4gfVxucmV0dXJuIHB1bGxOZXh0KCk7XG4gfTtcblxuY29uc3QgcmVhZGVycz1BcnJheS5mcm9tKHtsZW5ndGg6cmVhZGVyQ291bnR9KS5tYXAoKCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBxdWV1ZT1tYWtlUXVldWUoKTtcbnF1ZXVlcy5wdXNoKHF1ZXVlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlYWRlcj1oYXJkZW4oe1xuICAgICAgYXN5bmMgbmV4dCgpe1xuLypcblxuXG5cbiAgICAgICAgICovXG5jb25zdHtwcm9taXNlLHJlc29sdmV9PW1ha2VQcm9taXNlS2l0KCk7XG5xdWV1ZS5wdXQoe3ZhbHVlOnJlc29sdmUsZG9uZTpmYWxzZX0pO1xucmV0dXJuIHByb21pc2U7XG4gfSxcbiAgICAgIGFzeW5jIHJldHVybigpe1xuLypcblxuXG5cbiAgICAgICAgICovXG5jb25zdHtwcm9taXNlLHJlc29sdmV9PW1ha2VQcm9taXNlS2l0KCk7XG5xdWV1ZS5wdXQoe3ZhbHVlOnJlc29sdmUsZG9uZTp0cnVlfSk7XG5yZXR1cm4gcHJvbWlzZTtcbiB9LFxuICAgICAgYXN5bmMgdGhyb3cocmVhc29uKXtcbmNvbnN0IHJlamVjdGlvbj1Qcm9taXNlLnJlamVjdChyZWFzb24pO1xucXVldWUucHV0KHJlamVjdGlvbik7XG5yZXR1cm4gcmVqZWN0aW9uO1xuIH0sXG4vL1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe1xucmV0dXJuIHJlYWRlcjtcbiB9fSk7XG5cbnJldHVybiByZWFkZXI7XG4gfSk7XG5cbnZvaWQgcHVsbE5leHQoKTtcbnJldHVybiByZWFkZXJzO1xuIH07JGjigI1fb25jZS5zeW5jaHJvbml6ZWRUZWUoc3luY2hyb25pemVkVGVlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkJBU0lTX1BPSU5UUyI6WyJCQVNJU19QT0lOVFMiXSwiZGVlcGx5RnVsZmlsbGVkT2JqZWN0IjpbImRlZXBseUZ1bGZpbGxlZE9iamVjdCJdLCJkZWVwTWFwT2JqZWN0IjpbImRlZXBNYXBPYmplY3QiXSwiUHJvbWlzZUFsbE9yRXJyb3JzIjpbIlByb21pc2VBbGxPckVycm9ycyJdLCJhZ2dyZWdhdGVUcnlGaW5hbGx5IjpbImFnZ3JlZ2F0ZVRyeUZpbmFsbHkiXSwid2l0aERlZmVycmVkQ2xlYW51cCI6WyJ3aXRoRGVmZXJyZWRDbGVhbnVwIl0sIm1ha2VNZWFzdXJlU2Vjb25kcyI6WyJtYWtlTWVhc3VyZVNlY29uZHMiXSwiYXNzZXJ0QWxsRGVmaW5lZCI6WyJhc3NlcnRBbGxEZWZpbmVkIl0sImZvcmV2ZXIiOlsiZm9yZXZlciJdLCJ3aGlsZVRydWUiOlsid2hpbGVUcnVlIl0sInVudGlsVHJ1ZSI6WyJ1bnRpbFRydWUiXSwiemlwIjpbInppcCJdLCJhbGxWYWx1ZXMiOlsiYWxsVmFsdWVzIl0sInN5bmNocm9uaXplZFRlZSI6WyJzeW5jaHJvbml6ZWRUZWUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAIJVqyBQIAAAUCAAAOQAAAEBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xL3NyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIiwib2JzZXJ2ZUl0ZXJhdGlvbiIsIm9ic2VydmVJdGVyYXRvciIsIm9ic2VydmVOb3RpZmllciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxzdWJzY3JpYmVMYXRlc3Q7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtbXCJzdWJzY3JpYmVMYXRlc3RcIiwgWyRo4oCNX2EgPT4gKHN1YnNjcmliZUxhdGVzdCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyPXN1YnNjcmliZUxhdGVzdDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIobWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIpO1xuY29uc3QgICAgICAgIG9ic2VydmVJdGVyYXRvcj0oYXN5bmNJdGVyYXRvclAsaXRlcmF0aW9uT2JzZXJ2ZXIpPT57XG5yZXR1cm4gbmV3IFByb21pc2UoKGFjayxvYnNlcnZlckVycm9yKT0+e1xuY29uc3QgcmVjdXI9KCk9PntcbkUud2hlbihcbkUoYXN5bmNJdGVyYXRvclApLm5leHQoKSxcbih7dmFsdWUsZG9uZX0pPT57XG5pZihkb25lKXtcbml0ZXJhdGlvbk9ic2VydmVyLmZpbmlzaCYmaXRlcmF0aW9uT2JzZXJ2ZXIuZmluaXNoKHZhbHVlKTtcbmFjayh1bmRlZmluZWQpO1xuIH1lbHNle1xuaXRlcmF0aW9uT2JzZXJ2ZXIudXBkYXRlU3RhdGUmJlxuaXRlcmF0aW9uT2JzZXJ2ZXIudXBkYXRlU3RhdGUodmFsdWUpO1xucmVjdXIoKTtcbiB9XG4gfSxcbihyZWFzb24pPT57XG5pdGVyYXRpb25PYnNlcnZlci5mYWlsJiZpdGVyYXRpb25PYnNlcnZlci5mYWlsKHJlYXNvbik7XG5hY2sodW5kZWZpbmVkKTtcbiB9KS5cbmNhdGNoKG9ic2VydmVyRXJyb3IpO1xuIH07XG5yZWN1cigpO1xuIH0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm9ic2VydmVJdGVyYXRvcihvYnNlcnZlSXRlcmF0b3IpO1xuY29uc3QgICAgICAgIG9ic2VydmVJdGVyYXRpb249KGFzeW5jSXRlcmFibGVQLGl0ZXJhdGlvbk9ic2VydmVyKT0+e1xuY29uc3QgaXRlcmF0b3JQPUUoYXN5bmNJdGVyYWJsZVApW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xucmV0dXJuIG9ic2VydmVJdGVyYXRvcihpdGVyYXRvclAsaXRlcmF0aW9uT2JzZXJ2ZXIpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm9ic2VydmVJdGVyYXRpb24ob2JzZXJ2ZUl0ZXJhdGlvbik7XG5jb25zdCAgICAgICAgb2JzZXJ2ZU5vdGlmaWVyPShub3RpZmllclAsaXRlcmF0aW9uT2JzZXJ2ZXIpPT5cbm9ic2VydmVJdGVyYXRpb24oc3Vic2NyaWJlTGF0ZXN0KG5vdGlmaWVyUCksaXRlcmF0aW9uT2JzZXJ2ZXIpOyRo4oCNX29uY2Uub2JzZXJ2ZU5vdGlmaWVyKG9ic2VydmVOb3RpZmllcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllciI6WyJtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllciJdLCJvYnNlcnZlSXRlcmF0b3IiOlsib2JzZXJ2ZUl0ZXJhdG9yIl0sIm9ic2VydmVJdGVyYXRpb24iOlsib2JzZXJ2ZUl0ZXJhdGlvbiJdLCJvYnNlcnZlTm90aWZpZXIiOlsib2JzZXJ2ZU5vdGlmaWVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFmwD/fQBwAA0AcAACoAAABAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9wdWJsaXNoLWtpdC5qcyIsIi4vc3Vic2NyaWJlLmpzIiwiLi9ub3RpZmllci5qcyIsIi4vc3Vic2NyaWJlci5qcyIsIi4vdG9waWMuanMiLCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIiwiLi9zdG9yZXN1Yi5qcyIsIi4vc3RvcmVkLW5vdGlmaWVyLmpzIiwiLi90eXBlcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VOb3RpZmllcktpdCIsIm1ha2VOb3RpZmllcktpdCIsIm1ha2VTdWJzY3JpcHRpb25LaXQiLCJtYWtlU3Vic2NyaXB0aW9uS2l0Iiwib2JzZXJ2ZUl0ZXJhdG9yIiwib2JzZXJ2ZUl0ZXJhdG9yIiwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0IiwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0Iiwic3Vic2NyaWJlTGF0ZXN0Iiwic3Vic2NyaWJlTGF0ZXN0IixudWxsXSwicmVleHBvcnRzIjpbIi4vc3RvcmVkLW5vdGlmaWVyLmpzIiwiLi9zdG9yZXN1Yi5qcyIsIi4vdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9wdWJsaXNoLWtpdC5qc1wiLCBbXV0sW1wiLi9zdWJzY3JpYmUuanNcIiwgW11dLFtcIi4vbm90aWZpZXIuanNcIiwgW11dLFtcIi4vc3Vic2NyaWJlci5qc1wiLCBbXV0sW1wiLi90b3BpYy5qc1wiLCBbXV0sW1wiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc1wiLCBbXV0sW1wiLi9zdG9yZXN1Yi5qc1wiLCBbXV0sW1wiLi9zdG9yZWQtbm90aWZpZXIuanNcIiwgW11dLFtcIi4vdHlwZXMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3B1Ymxpc2gta2l0LmpzIjpbWyJtYWtlUHVibGlzaEtpdCIsIm1ha2VQdWJsaXNoS2l0Il0sWyJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiLCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiXSxbIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiLCJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIl0sWyJJdGVyYWJsZUVhY2hUb3BpY0kiLCJJdGVyYWJsZUVhY2hUb3BpY0kiXSxbIkl0ZXJhYmxlTGF0ZXN0VG9waWNJIiwiSXRlcmFibGVMYXRlc3RUb3BpY0kiXSxbIlN1YnNjcmliZXJTaGFwZSIsIlN1YnNjcmliZXJTaGFwZSJdXSwiLi9zdWJzY3JpYmUuanMiOltbInN1YnNjcmliZUVhY2giLCJzdWJzY3JpYmVFYWNoIl0sWyJzdWJzY3JpYmVMYXRlc3QiLCJzdWJzY3JpYmVMYXRlc3QiXV0sIi4vbm90aWZpZXIuanMiOltbIm1ha2VOb3RpZmllciIsIm1ha2VOb3RpZmllciJdLFsibWFrZU5vdGlmaWVyS2l0IiwibWFrZU5vdGlmaWVyS2l0Il0sWyJtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSIsIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIl0sWyJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciIsIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIl1dLCIuL3N1YnNjcmliZXIuanMiOltbIm1ha2VTdWJzY3JpcHRpb24iLCJtYWtlU3Vic2NyaXB0aW9uIl0sWyJtYWtlU3Vic2NyaXB0aW9uS2l0IiwibWFrZVN1YnNjcmlwdGlvbktpdCJdXSwiLi90b3BpYy5qcyI6W1sibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyIsIm1ha2VQaW5uZWRIaXN0b3J5VG9waWMiXV0sIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiOltbIm9ic2VydmVOb3RpZmllciIsIm9ic2VydmVOb3RpZmllciJdLFsib2JzZXJ2ZUl0ZXJhdG9yIiwib2JzZXJ2ZUl0ZXJhdG9yIl0sWyJvYnNlcnZlSXRlcmF0aW9uIiwib2JzZXJ2ZUl0ZXJhdGlvbiJdLFsibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiLCJtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllciJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA8UEO4IQQAACEEAAALQAAAEBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xL3NyYy9ub3RpZmllci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCIuL3B1Ymxpc2gta2l0LmpzIiwiLi9zdWJzY3JpYmUuanMiXSwiZXhwb3J0cyI6WyJtYWtlTm90aWZpZXIiLCJtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSIsIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIiwibWFrZU5vdGlmaWVyS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRSxGYXIsbWFrZVB1Ymxpc2hLaXQsc3Vic2NyaWJlTGF0ZXN0OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaOKAjV9hID0+IChhc3NlcnQgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXSxbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXSxbXCIuL3B1Ymxpc2gta2l0LmpzXCIsIFtbXCJtYWtlUHVibGlzaEtpdFwiLCBbJGjigI1fYSA9PiAobWFrZVB1Ymxpc2hLaXQgPSAkaOKAjV9hKV1dXV0sW1wiLi9zdWJzY3JpYmUuanNcIiwgW1tcInN1YnNjcmliZUxhdGVzdFwiLCBbJGjigI1fYSA9PiAoc3Vic2NyaWJlTGF0ZXN0ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTm90aWZpZXI9KHNoYXJhYmxlSW50ZXJuYWxzUCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBub3RpZmllcj1GYXIoJ25vdGlmaWVyJyx7XG4uLi5zdWJzY3JpYmVMYXRlc3Qoc2hhcmFibGVJbnRlcm5hbHNQKSxcbmdldFVwZGF0ZVNpbmNlOmFzeW5jKHVwZGF0ZUNvdW50KT0+XG5FKHNoYXJhYmxlSW50ZXJuYWxzUCkuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpLFxuXG4vKlxuXG5cblxuXG4gICAgICovXG5nZXRTaGFyYWJsZU5vdGlmaWVySW50ZXJuYWxzOmFzeW5jKCk9PnNoYXJhYmxlSW50ZXJuYWxzUCxcbi8qXG5cblxuXG4gICAgICovXG5nZXRTdG9yZUtleTooKT0+aGFyZGVuKHtub3RpZmllcn0pfSk7XG5cbnJldHVybiBub3RpZmllcjtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjigI1fb25jZS5tYWtlTm90aWZpZXIobWFrZU5vdGlmaWVyKTtcbmNvbnN0ICAgICAgICBtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcj0oc3Vic2NyaWJlcik9Pntcbi8qXG5cbiAgICovXG5jb25zdCBiYXNlTm90aWZpZXI9aGFyZGVuKHtcbmdldFVwZGF0ZVNpbmNlOih1cGRhdGVDb3VudD11bmRlZmluZWQpPT5cbkUoc3Vic2NyaWJlcikuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5vdGlmaWVyPUZhcignbm90aWZpZXInLHtcbi4uLm1ha2VOb3RpZmllcihiYXNlTm90aWZpZXIpLFxuLi4uYmFzZU5vdGlmaWVyfSk7XG5cbnJldHVybiBub3RpZmllcjtcbiB9OyRo4oCNX29uY2UubWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIobWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIpO1xuaGFyZGVuKG1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllcktpdD0oLi4uaW5pdGlhbFN0YXRlQXJyKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3R7cHVibGlzaGVyLHN1YnNjcmliZXJ9PW1ha2VQdWJsaXNoS2l0KCk7XG5cbmNvbnN0IG5vdGlmaWVyPW1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyKHN1YnNjcmliZXIpO1xuXG5jb25zdCB1cGRhdGVyPUZhcigndXBkYXRlcicse1xudXBkYXRlU3RhdGU6KHN0YXRlKT0+cHVibGlzaGVyLnB1Ymxpc2goc3RhdGUpLFxuZmluaXNoOihjb21wbGV0aW9uKT0+cHVibGlzaGVyLmZpbmlzaChjb21wbGV0aW9uKSxcbmZhaWw6KHJlYXNvbik9PnB1Ymxpc2hlci5mYWlsKHJlYXNvbil9KTtcblxuXG5hc3NlcnQoaW5pdGlhbFN0YXRlQXJyLmxlbmd0aDw9MSwndG9vIG1hbnkgYXJndW1lbnRzJyk7XG5pZihpbml0aWFsU3RhdGVBcnIubGVuZ3RoPT09MSl7XG51cGRhdGVyLnVwZGF0ZVN0YXRlKGluaXRpYWxTdGF0ZUFyclswXSk7XG4gfVxuXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oe25vdGlmaWVyLHVwZGF0ZXJ9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VOb3RpZmllcktpdChtYWtlTm90aWZpZXJLaXQpO1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlPShhc3luY0l0ZXJhYmxlUCk9PntcbmNvbnN0IGl0ZXJhdG9yUD1FKGFzeW5jSXRlcmFibGVQKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IG9wdE5leHRQcm9taXNlO1xubGV0IGN1cnJlbnRVcGRhdGVDb3VudD0wbjtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBjdXJyZW50UmVzcG9uc2U7XG5sZXQgZmluYWw9ZmFsc2U7XG5cbi8qXG5cbiAgICovXG5jb25zdCBiYXNlTm90aWZpZXI9RmFyKCdiYXNlTm90aWZpZXInLHtcbmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50PS0xbil7XG5pZih1cGRhdGVDb3VudDxjdXJyZW50VXBkYXRlQ291bnQpe1xuaWYoY3VycmVudFJlc3BvbnNlKXtcbnJldHVybiBQcm9taXNlLnJlc29sdmUoY3VycmVudFJlc3BvbnNlKTtcbiB9XG4gfWVsc2UgaWYodXBkYXRlQ291bnQhPT1jdXJyZW50VXBkYXRlQ291bnQpe1xudGhyb3cgRXJyb3IoXG4nZ2V0VXBkYXRlU2luY2UgYXJndW1lbnQgbXVzdCBiZSBhIHByZXZpb3VzbHktaXNzdWVkIHVwZGF0ZUNvdW50LicpO1xuXG4gfVxuXG4vL1xuaWYoZmluYWwpe1xuYXNzZXJ0KGN1cnJlbnRSZXNwb25zZSE9PXVuZGVmaW5lZCk7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGN1cnJlbnRSZXNwb25zZSk7XG4gfVxuaWYoIW9wdE5leHRQcm9taXNlKXtcbmNvbnN0IG5leHRJdGVyUmVzdWx0UD1FKGl0ZXJhdG9yUCkubmV4dCgpO1xub3B0TmV4dFByb21pc2U9RS53aGVuKFxubmV4dEl0ZXJSZXN1bHRQLFxuKHtkb25lLHZhbHVlfSk9PntcbmFzc2VydCghZmluYWwpO1xuaWYoZG9uZSl7XG5maW5hbD10cnVlO1xuIH1cbmN1cnJlbnRVcGRhdGVDb3VudCs9MW47XG5jdXJyZW50UmVzcG9uc2U9aGFyZGVuKHtcbnZhbHVlLFxudXBkYXRlQ291bnQ6ZG9uZT91bmRlZmluZWQ6Y3VycmVudFVwZGF0ZUNvdW50fSk7XG5cbm9wdE5leHRQcm9taXNlPXVuZGVmaW5lZDtcbnJldHVybiBjdXJyZW50UmVzcG9uc2U7XG4gfSxcbihfcmVhc29uKT0+e1xuZmluYWw9dHJ1ZTtcbmN1cnJlbnRSZXNwb25zZT1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubmV4dEl0ZXJSZXN1bHRQO1xub3B0TmV4dFByb21pc2U9dW5kZWZpbmVkO1xucmV0dXJuIGN1cnJlbnRSZXNwb25zZTtcbiB9KTtcblxuIH1cbnJldHVybiBvcHROZXh0UHJvbWlzZTtcbiB9fSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5vdGlmaWVyPUZhcignbm90aWZpZXInLHtcbi8vXG4vL1xuLi4ubWFrZU5vdGlmaWVyKGJhc2VOb3RpZmllciksXG4uLi5iYXNlTm90aWZpZXJ9KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH07JGjigI1fb25jZS5tYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZShtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSk7XG5oYXJkZW4obWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU5vdGlmaWVyIjpbIm1ha2VOb3RpZmllciJdLCJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciI6WyJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciJdLCJtYWtlTm90aWZpZXJLaXQiOlsibWFrZU5vdGlmaWVyS2l0Il0sIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIjpbIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJUEawxOKwAATisAADAAAABAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMS9zcmMvcHVibGlzaC1raXQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9wYXR0ZXJucyIsIkBhZ29yaWMvdmF0LWRhdGEiXSwiZXhwb3J0cyI6WyJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIiwiSXRlcmFibGVFYWNoVG9waWNJIiwiSXRlcmFibGVMYXRlc3RUb3BpY0kiLCJQdWJsaXNoZXJJIiwiU3Vic2NyaWJlckkiLCJTdWJzY3JpYmVyU2hhcGUiLCJVcGRhdGVDb3VudFNoYXBlIiwibWFrZVB1Ymxpc2hLaXQiLCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiLCJwdWJsaXNoS2l0SUtpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEUsRmFyLG1ha2VQcm9taXNlS2l0LE0sZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkLGNhbkJlRHVyYWJsZSxwcmVwYXJlRXhvQ2xhc3NLaXQ7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV0sW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV0sW1wiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkXCIsIFskaOKAjV9hID0+IChnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wiY2FuQmVEdXJhYmxlXCIsIFskaOKAjV9hID0+IChjYW5CZUR1cmFibGUgPSAkaOKAjV9hKV1dLFtcInByZXBhcmVFeG9DbGFzc0tpdFwiLCBbJGjigI1fYSA9PiAocHJlcGFyZUV4b0NsYXNzS2l0ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0IHNpbms9KCk9PnsgfTtcbmNvbnN0IG1ha2VRdWlldFJlamVjdGlvbj0ocmVhc29uKT0+e1xuY29uc3QgcmVqZWN0aW9uPWhhcmRlbihQcm9taXNlLnJlamVjdChyZWFzb24pKTtcbnZvaWQgRS53aGVuKHJlamVjdGlvbixzaW5rLHNpbmspO1xucmV0dXJuIHJlamVjdGlvbjtcbiB9O1xuY29uc3QgdG9vRmFyUmVqZWN0aW9uPW1ha2VRdWlldFJlamVjdGlvbihcbmhhcmRlbihFcnJvcignQ2Fubm90IHJlYWQgcGFzdCBlbmQgb2YgaXRlcmF0aW9uLicpKSk7XG5cblxuY29uc3QgICAgICAgIFB1Ymxpc2hlckk9TS5pbnRlcmZhY2UoJ1B1Ymxpc2hlcicse1xucHVibGlzaDpNLmNhbGwoTS5hbnkoKSkucmV0dXJucygpLFxuZmluaXNoOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCksXG5mYWlsOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCl9KTtcblxuXG4vL1xuJGjigI1fb25jZS5QdWJsaXNoZXJJKFB1Ymxpc2hlckkpO2NvbnN0IFVwZGF0ZUNvdW50U2hhcGU9TS5vcihNLmJpZ2ludCgpLE0ubnVtYmVyKCkpOyRo4oCNX29uY2UuVXBkYXRlQ291bnRTaGFwZShVcGRhdGVDb3VudFNoYXBlKTtcbmNvbnN0ICAgICAgICBTdWJzY3JpYmVyST1NLmludGVyZmFjZSgnU3Vic2NyaWJlcicse1xuc3Vic2NyaWJlQWZ0ZXI6TS5jYWxsKCkub3B0aW9uYWwoTS5iaWdpbnQoKSkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRVcGRhdGVTaW5jZTpNLmNhbGwoKS5vcHRpb25hbChVcGRhdGVDb3VudFNoYXBlKS5yZXR1cm5zKE0ucHJvbWlzZSgpKX0pOyRo4oCNX29uY2UuU3Vic2NyaWJlckkoU3Vic2NyaWJlckkpO1xuXG5jb25zdCAgICAgICAgcHVibGlzaEtpdElLaXQ9aGFyZGVuKHtcbnB1Ymxpc2hlcjpQdWJsaXNoZXJJLFxuc3Vic2NyaWJlcjpTdWJzY3JpYmVySX0pOyRo4oCNX29uY2UucHVibGlzaEtpdElLaXQocHVibGlzaEtpdElLaXQpO1xuXG5cbmNvbnN0ICAgICAgICBGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlPU0uaW50ZXJmYWNlKFxuJ0ZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJyxcbntcbmZvcms6TS5jYWxsKCkucmV0dXJucyhNLmFueSgpKSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06TS5jYWxsKCkucmV0dXJucyhNLmFueSgpKSwvL1xubmV4dDpNLmNhbGxXaGVuKCkucmV0dXJucyhNLmFueSgpKX0pOyRo4oCNX29uY2UuRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZShGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlKTtcblxuXG5cbmNvbnN0ICAgICAgICBJdGVyYWJsZUVhY2hUb3BpY0k9TS5pbnRlcmZhY2UoJ0l0ZXJhYmxlRWFjaFRvcGljJyx7XG5zdWJzY3JpYmVBZnRlcjpcbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChTdWJzY3JpYmVySSkubWV0aG9kR3VhcmRzLnN1YnNjcmliZUFmdGVyLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTpNLmNhbGwoKS5yZXR1cm5zKFxuTS5yZW1vdGFibGUoJ0ZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJykpfSk7JGjigI1fb25jZS5JdGVyYWJsZUVhY2hUb3BpY0koSXRlcmFibGVFYWNoVG9waWNJKTtcblxuXG5cbmNvbnN0ICAgICAgICBJdGVyYWJsZUxhdGVzdFRvcGljST1NLmludGVyZmFjZSgnSXRlcmFibGVMYXRlc3RUb3BpYycse1xuZ2V0VXBkYXRlU2luY2U6XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoU3Vic2NyaWJlckkpLm1ldGhvZEd1YXJkcy5nZXRVcGRhdGVTaW5jZSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06TS5jYWxsKCkucmV0dXJucyhcbk0ucmVtb3RhYmxlKCdGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvcicpKX0pO1xuXG5cblxuLypcblxuXG5cblxuICovJGjigI1fb25jZS5JdGVyYWJsZUxhdGVzdFRvcGljSShJdGVyYWJsZUxhdGVzdFRvcGljSSk7XG5jb25zdCB3ZWFrTWVtb2l6ZVVuYXJ5PShmbik9PntcbmNvbnN0IGNhY2hlPW5ldyBXZWFrTWFwKCk7XG5yZXR1cm4oYXJnKT0+e1xuLyogICAgICAgICAgICAgICAgICovXG5jb25zdCBvYXJnPWFyZztcbmlmKGNhY2hlLmhhcyhvYXJnKSl7XG5yZXR1cm4gY2FjaGUuZ2V0KG9hcmcpO1xuIH1cbmNvbnN0IHJlc3VsdD1mbihhcmcpO1xuY2FjaGUuc2V0KG9hcmcscmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBtYWtlVXBkYXRlUmVjb3JkRnJvbVB1YmxpY2F0aW9uUmVjb3JkPShyZWNvcmQpPT57XG5jb25zdHtcbmhlYWQ6e3ZhbHVlLGRvbmV9LFxucHVibGlzaENvdW50fT1cbnJlY29yZDtcbmlmKGRvbmUpe1xuLy9cbnJldHVybiBoYXJkZW4oe3ZhbHVlLHVwZGF0ZUNvdW50OnVuZGVmaW5lZH0pO1xuIH1cbnJldHVybiBoYXJkZW4oe3ZhbHVlLHVwZGF0ZUNvdW50OnB1Ymxpc2hDb3VudH0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUHVibGlzaEtpdD0oKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB0YWlsUDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHRhaWxSO1xuKHtwcm9taXNlOnRhaWxQLHJlc29sdmU6dGFpbFJ9PW1ha2VQcm9taXNlS2l0KCkpO1xuXG5sZXQgY3VycmVudFB1Ymxpc2hDb3VudD0wbjtcbmxldCBjdXJyZW50UD10YWlsUDtcbmNvbnN0IGFkdmFuY2VDdXJyZW50PShkb25lLHZhbHVlLHJlamVjdGlvbik9PntcbmlmKHRhaWxSPT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKCdDYW5ub3QgdXBkYXRlIHN0YXRlIGFmdGVyIHRlcm1pbmF0aW9uLicpO1xuIH1cblxuY3VycmVudFB1Ymxpc2hDb3VudCs9MW47XG5jdXJyZW50UD10YWlsUDtcbmNvbnN0IHJlc29sdmVDdXJyZW50PXRhaWxSO1xuXG5pZihkb25lKXtcbnRhaWxQPXRvb0ZhclJlamVjdGlvbjtcbnRhaWxSPXVuZGVmaW5lZDtcbiB9ZWxzZXtcbih7cHJvbWlzZTp0YWlsUCxyZXNvbHZlOnRhaWxSfT1tYWtlUHJvbWlzZUtpdCgpKTtcbiB9XG5cbmlmKHJlamVjdGlvbil7XG5yZXNvbHZlQ3VycmVudChyZWplY3Rpb24pO1xuIH1lbHNle1xucmVzb2x2ZUN1cnJlbnQoXG5oYXJkZW4oe1xuaGVhZDp7dmFsdWUsZG9uZX0sXG5wdWJsaXNoQ291bnQ6Y3VycmVudFB1Ymxpc2hDb3VudCxcbnRhaWw6dGFpbFB9KSk7XG5cblxuIH1cbiB9O1xuXG5jb25zdCBtYWtlTWVtb2l6ZWRVcGRhdGVSZWNvcmQ9d2Vha01lbW9pemVVbmFyeShcbm1ha2VVcGRhdGVSZWNvcmRGcm9tUHVibGljYXRpb25SZWNvcmQpO1xuXG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHN1YnNjcmliZXI9RmFyKCdTdWJzY3JpYmVyJyx7XG5zdWJzY3JpYmVBZnRlcjoocHVibGlzaENvdW50PS0xbik9PntcbmFzc2VydC50eXBlb2YocHVibGlzaENvdW50LCdiaWdpbnQnKTtcbmlmKHB1Ymxpc2hDb3VudD09PWN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIHRhaWxQO1xuIH1lbHNlIGlmKHB1Ymxpc2hDb3VudDxjdXJyZW50UHVibGlzaENvdW50KXtcbnJldHVybiBjdXJyZW50UDtcbiB9ZWxzZXtcbnRocm93IEVycm9yKFxuJ3N1YnNjcmliZUFmdGVyIGFyZ3VtZW50IG11c3QgYmUgYSBwcmV2aW91c2x5LWlzc3VlZCBwdWJsaXNoQ291bnQuJyk7XG5cbiB9XG4gfSxcbmdldFVwZGF0ZVNpbmNlOih1cGRhdGVDb3VudCk9PntcbmlmKHVwZGF0ZUNvdW50PT09dW5kZWZpbmVkKXtcbnJldHVybiBzdWJzY3JpYmVyLnN1YnNjcmliZUFmdGVyKCkudGhlbihtYWtlTWVtb2l6ZWRVcGRhdGVSZWNvcmQpO1xuIH1cbnVwZGF0ZUNvdW50PUJpZ0ludCh1cGRhdGVDb3VudCk7XG5yZXR1cm4oXG5zdWJzY3JpYmVyXG4vL1xuLy9cbi8vXG4uc3Vic2NyaWJlQWZ0ZXIodXBkYXRlQ291bnQpXG4vL1xuLy9cbi50aGVuKCgpPT5zdWJzY3JpYmVyLmdldFVwZGF0ZVNpbmNlKCkpKTtcblxuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1Ymxpc2hlcj1GYXIoJ1B1Ymxpc2hlcicse1xucHVibGlzaDoodmFsdWUpPT57XG5hZHZhbmNlQ3VycmVudChmYWxzZSx2YWx1ZSk7XG4gfSxcbmZpbmlzaDooZmluYWxWYWx1ZSk9PntcbmFkdmFuY2VDdXJyZW50KHRydWUsZmluYWxWYWx1ZSk7XG4gfSxcbmZhaWw6KHJlYXNvbik9PntcbmFkdmFuY2VDdXJyZW50KHRydWUsdW5kZWZpbmVkLG1ha2VRdWlldFJlamVjdGlvbihyZWFzb24pKTtcbiB9fSk7XG5cbnJldHVybiBoYXJkZW4oe3B1Ymxpc2hlcixzdWJzY3JpYmVyfSk7XG4gfTskaOKAjV9vbmNlLm1ha2VQdWJsaXNoS2l0KG1ha2VQdWJsaXNoS2l0KTtcbmhhcmRlbihtYWtlUHVibGlzaEtpdCk7XG5cbmNvbnN0IER1cmFibGVQdWJsaXNoS2l0U3RhdGVTaGFwZT1oYXJkZW4oe1xudmFsdWVEdXJhYmlsaXR5Ok0uYW55KCksXG5wdWJsaXNoQ291bnQ6TS5hbnkoKSxcbnN0YXR1czpNLmFueSgpLFxuaGFzVmFsdWU6TS5hbnkoKSxcbnZhbHVlOk0uYW55KCl9KTtcblxuXG4vL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpbml0RHVyYWJsZVB1Ymxpc2hLaXRTdGF0ZT0ob3B0aW9ucz17fSk9PntcbmNvbnN0e3ZhbHVlRHVyYWJpbGl0eT0nbWFuZGF0b3J5J309b3B0aW9ucztcbmFzc2VydC5lcXVhbCh2YWx1ZUR1cmFiaWxpdHksJ21hbmRhdG9yeScpO1xucmV0dXJue1xuLy9cbnZhbHVlRHVyYWJpbGl0eSxcblxuLy9cbnB1Ymxpc2hDb3VudDowbixcbnN0YXR1czonbGl2ZScsLy9cblxuLy9cbi8vXG4vL1xuaGFzVmFsdWU6ZmFsc2UsXG52YWx1ZTp1bmRlZmluZWR9O1xuXG4gfTtcblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qXG5cblxuICovXG5jb25zdCBnZXRFcGhlbWVyYWxLZXk9KGZhY2V0cyk9PmZhY2V0cy5wdWJsaXNoZXI7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBwcm92aWRlQ3VycmVudFA9KHN0YXRlLGZhY2V0cyx0YWlsKT0+e1xuY29uc3QgZXBoZW1lcmFsS2V5PWdldEVwaGVtZXJhbEtleShmYWNldHMpO1xuY29uc3QgZm91bmREYXRhPWR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YS5nZXQoZXBoZW1lcmFsS2V5KTtcbmNvbnN0IGN1cnJlbnRQPWZvdW5kRGF0YSYmZm91bmREYXRhLmN1cnJlbnRQO1xuaWYoY3VycmVudFApe1xucmV0dXJuIGN1cnJlbnRQO1xuIH1cblxuY29uc3R7cHVibGlzaENvdW50LHN0YXR1cyxoYXNWYWx1ZSx2YWx1ZX09c3RhdGU7XG5pZighaGFzVmFsdWUpe1xuYXNzZXJ0KHN0YXR1cz09PSdsaXZlJyk7XG5yZXR1cm4gdGFpbDtcbiB9XG5pZihzdGF0dXM9PT0nbGl2ZSd8fHN0YXR1cz09PSdmaW5pc2hlZCcpe1xuY29uc3QgY2VsbD1oYXJkZW4oe1xuaGVhZDp7dmFsdWUsZG9uZTpzdGF0dXMhPT0nbGl2ZSd9LFxucHVibGlzaENvdW50LFxudGFpbH0pO1xuXG5yZXR1cm4gRS5yZXNvbHZlKGNlbGwpO1xuIH1lbHNlIGlmKHN0YXR1cz09PSdmYWlsZWQnKXtcbnJldHVybiBtYWtlUXVpZXRSZWplY3Rpb24odmFsdWUpO1xuIH1lbHNle1xudGhyb3cgRmFpbCBgSW52YWxpZCBkdXJhYmxlIHByb21pc2Uga2l0IHN0YXR1czogJHtxKHN0YXR1cyl9YDtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGE9KHN0YXRlLGZhY2V0cyk9PntcbmNvbnN0IGVwaGVtZXJhbEtleT1nZXRFcGhlbWVyYWxLZXkoZmFjZXRzKTtcbmNvbnN0IGZvdW5kRGF0YT1kdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEuZ2V0KGVwaGVtZXJhbEtleSk7XG5pZihmb3VuZERhdGEpe1xucmV0dXJuIGZvdW5kRGF0YTtcbiB9XG5cbmNvbnN0e3N0YXR1c309c3RhdGU7XG5sZXQgdGFpbFA7XG5sZXQgdGFpbFI7XG5pZihzdGF0dXM9PT0nbGl2ZScpe1xuKHtwcm9taXNlOnRhaWxQLHJlc29sdmU6dGFpbFJ9PW1ha2VQcm9taXNlS2l0KCkpO1xudm9pZCBFLndoZW4odGFpbFAsc2luayxzaW5rKTtcbiB9ZWxzZSBpZihzdGF0dXM9PT0nZmluaXNoZWQnfHxzdGF0dXM9PT0nZmFpbGVkJyl7XG50YWlsUD10b29GYXJSZWplY3Rpb247XG4gfWVsc2V7XG50aHJvdyBGYWlsIGBJbnZhbGlkIGR1cmFibGUgcHJvbWlzZSBraXQgc3RhdHVzOiAke3Eoc3RhdHVzKX1gO1xuIH1cbi8vXG5jb25zdCBvYmo9aGFyZGVuKHtjdXJyZW50UDp1bmRlZmluZWQsdGFpbFAsdGFpbFJ9KTtcbmR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YS5zZXQoZXBoZW1lcmFsS2V5LG9iaik7XG5yZXR1cm4gb2JqO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBhZHZhbmNlRHVyYWJsZVB1Ymxpc2hLaXQ9KGNvbnRleHQsdmFsdWUsdGFyZ2V0U3RhdHVzPSdsaXZlJyk9PntcbmNvbnN0e3N0YXRlLGZhY2V0c309Y29udGV4dDtcbmNvbnN0e3ZhbHVlRHVyYWJpbGl0eSxzdGF0dXN9PXN0YXRlO1xuaWYoc3RhdHVzIT09J2xpdmUnKXtcbnRocm93IEVycm9yKCdDYW5ub3QgdXBkYXRlIHN0YXRlIGFmdGVyIHRlcm1pbmF0aW9uLicpO1xuIH1cbmNvbnN0IGRvbmU9dGFyZ2V0U3RhdHVzIT09J2xpdmUnO1xuaWYoZG9uZXx8dmFsdWVEdXJhYmlsaXR5PT09J21hbmRhdG9yeScpe1xuY2FuQmVEdXJhYmxlKHZhbHVlKXx8RmFpbCBgQ2Fubm90IGFjY2VwdCBub24tZHVyYWJsZSB2YWx1ZTogJHt2YWx1ZX1gO1xuIH1cbmNvbnN0e3RhaWxQOm9sZFRhaWxQLHRhaWxSOnJlc29sdmVPbGRUYWlsfT1cbnByb3ZpZGVEdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEoc3RhdGUsZmFjZXRzKTtcbmFzc2VydC50eXBlb2YocmVzb2x2ZU9sZFRhaWwsJ2Z1bmN0aW9uJyk7XG5cbmNvbnN0IHB1Ymxpc2hDb3VudD1zdGF0ZS5wdWJsaXNoQ291bnQrMW47XG5zdGF0ZS5wdWJsaXNoQ291bnQ9cHVibGlzaENvdW50O1xuXG5sZXQgdGFpbFA7XG5sZXQgdGFpbFI7XG5pZihkb25lKXtcbnN0YXRlLnN0YXR1cz10YXJnZXRTdGF0dXM7XG50YWlsUD10b29GYXJSZWplY3Rpb247XG50YWlsUj11bmRlZmluZWQ7XG4gfWVsc2V7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG52b2lkIEUud2hlbih0YWlsUCxzaW5rLHNpbmspO1xuIH1cblxubGV0IGN1cnJlbnRQO1xuaWYodGFyZ2V0U3RhdHVzPT09J2ZhaWxlZCcpe1xuc3RhdGUuaGFzVmFsdWU9dHJ1ZTtcbnN0YXRlLnZhbHVlPXZhbHVlO1xuY29uc3QgcmVqZWN0aW9uPW1ha2VRdWlldFJlamVjdGlvbih2YWx1ZSk7XG5yZXNvbHZlT2xkVGFpbChyZWplY3Rpb24pO1xuIH1lbHNle1xuLy9cbi8vXG5pZihkb25lfHx2YWx1ZUR1cmFiaWxpdHkhPT0naWdub3JlZCcmJmNhbkJlRHVyYWJsZSh2YWx1ZSkpe1xuc3RhdGUuaGFzVmFsdWU9dHJ1ZTtcbnN0YXRlLnZhbHVlPXZhbHVlO1xuIH1lbHNle1xuc3RhdGUuaGFzVmFsdWU9ZmFsc2U7XG5zdGF0ZS52YWx1ZT11bmRlZmluZWQ7XG4vL1xuY3VycmVudFA9b2xkVGFpbFA7XG4gfVxuXG5yZXNvbHZlT2xkVGFpbChcbmhhcmRlbih7XG5oZWFkOnt2YWx1ZSxkb25lfSxcbnB1Ymxpc2hDb3VudCxcbnRhaWw6dGFpbFB9KSk7XG5cblxuIH1cblxuZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhLnNldChcbmdldEVwaGVtZXJhbEtleShmYWNldHMpLFxuaGFyZGVuKHtjdXJyZW50UCx0YWlsUCx0YWlsUn0pKTtcblxuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0PShiYWdnYWdlLGtpbmROYW1lKT0+e1xuLy9cbi8vXG5jb25zdCBtYWtlTWVtb2l6ZWRVcGRhdGVSZWNvcmQ9bWFrZVVwZGF0ZVJlY29yZEZyb21QdWJsaWNhdGlvblJlY29yZDtcblxuLypcblxuICAgKi9cbnJldHVybiBwcmVwYXJlRXhvQ2xhc3NLaXQoXG5iYWdnYWdlLFxua2luZE5hbWUsXG5wdWJsaXNoS2l0SUtpdCxcbmluaXREdXJhYmxlUHVibGlzaEtpdFN0YXRlLFxue1xuLy9cbi8vXG5wdWJsaXNoZXI6e1xucHVibGlzaCh2YWx1ZSl7XG5hZHZhbmNlRHVyYWJsZVB1Ymxpc2hLaXQodGhpcyx2YWx1ZSk7XG4gfSxcbmZpbmlzaChmaW5hbFZhbHVlKXtcbmFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdCh0aGlzLGZpbmFsVmFsdWUsJ2ZpbmlzaGVkJyk7XG4gfSxcbmZhaWwocmVhc29uKXtcbmFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdCh0aGlzLHJlYXNvbiwnZmFpbGVkJyk7XG4gfX0sXG5cblxuLy9cbi8vXG5zdWJzY3JpYmVyOntcbnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudD0tMW4pe1xuY29uc3R7c3RhdGUsZmFjZXRzfT10aGlzO1xuY29uc3R7cHVibGlzaENvdW50OmN1cnJlbnRQdWJsaXNoQ291bnR9PXN0YXRlO1xuY29uc3R7Y3VycmVudFAsdGFpbFB9PXByb3ZpZGVEdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEoXG5zdGF0ZSxcbmZhY2V0cyk7XG5cbmlmKHB1Ymxpc2hDb3VudD09PWN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIHRhaWxQO1xuIH1lbHNlIGlmKHB1Ymxpc2hDb3VudDxjdXJyZW50UHVibGlzaENvdW50KXtcbnJldHVybiBjdXJyZW50UHx8cHJvdmlkZUN1cnJlbnRQKHN0YXRlLGZhY2V0cyx0YWlsUCk7XG4gfWVsc2V7XG50aHJvdyBFcnJvcihcbidzdWJzY3JpYmVBZnRlciBhcmd1bWVudCBtdXN0IGJlIGEgcHJldmlvdXNseS1pc3N1ZWQgcHVibGlzaENvdW50LicpO1xuXG4gfVxuIH0sXG5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCl7XG5jb25zdHtcbmZhY2V0czp7c3Vic2NyaWJlcn19PVxudGhpcztcbmlmKHVwZGF0ZUNvdW50PT09dW5kZWZpbmVkKXtcbnJldHVybiBzdWJzY3JpYmVyLnN1YnNjcmliZUFmdGVyKCkudGhlbihtYWtlTWVtb2l6ZWRVcGRhdGVSZWNvcmQpO1xuIH1cbnVwZGF0ZUNvdW50PUJpZ0ludCh1cGRhdGVDb3VudCk7XG5yZXR1cm4oXG5zdWJzY3JpYmVyXG4vL1xuLy9cbi8vXG4uc3Vic2NyaWJlQWZ0ZXIodXBkYXRlQ291bnQpXG4vL1xuLy9cbi50aGVuKCgpPT5zdWJzY3JpYmVyLmdldFVwZGF0ZVNpbmNlKCkpKTtcblxuIH19fSxcblxuXG57XG5zdGF0ZVNoYXBlOkR1cmFibGVQdWJsaXNoS2l0U3RhdGVTaGFwZX0pO1xuXG5cbiB9OyRo4oCNX29uY2UucHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCk7XG5oYXJkZW4ocHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KTtcblxuY29uc3QgICAgICAgIFN1YnNjcmliZXJTaGFwZT1NLnJlbW90YWJsZSgnU3Vic2NyaWJlcicpOyRo4oCNX29uY2UuU3Vic2NyaWJlclNoYXBlKFN1YnNjcmliZXJTaGFwZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJQdWJsaXNoZXJJIjpbIlB1Ymxpc2hlckkiXSwiVXBkYXRlQ291bnRTaGFwZSI6WyJVcGRhdGVDb3VudFNoYXBlIl0sIlN1YnNjcmliZXJJIjpbIlN1YnNjcmliZXJJIl0sInB1Ymxpc2hLaXRJS2l0IjpbInB1Ymxpc2hLaXRJS2l0Il0sIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiOlsiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSJdLCJJdGVyYWJsZUVhY2hUb3BpY0kiOlsiSXRlcmFibGVFYWNoVG9waWNJIl0sIkl0ZXJhYmxlTGF0ZXN0VG9waWNJIjpbIkl0ZXJhYmxlTGF0ZXN0VG9waWNJIl0sIm1ha2VQdWJsaXNoS2l0IjpbIm1ha2VQdWJsaXNoS2l0Il0sInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCI6WyJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiXSwiU3Vic2NyaWJlclNoYXBlIjpbIlN1YnNjcmliZXJTaGFwZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA0GfPRIQgAACEIAAA0AAAAQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEvc3JjL3N0b3JlZC1ub3RpZmllci5qc3siaW1wb3J0cyI6WyJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyIsIkBlbmRvL2ZhciIsIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiXSwiZXhwb3J0cyI6WyJtYWtlU3RvcmVkTm90aWZpZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydEFsbERlZmluZWQsbWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSxFLEZhcixvYnNlcnZlTm90aWZpZXI7JGjigI1faW1wb3J0cyhbW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wiYXNzZXJ0QWxsRGVmaW5lZFwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0QWxsRGVmaW5lZCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzXCIsIFtbXCJtYWtlU2VyaWFsaXplVG9TdG9yYWdlXCIsIFskaOKAjV9hID0+IChtYWtlU2VyaWFsaXplVG9TdG9yYWdlID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV0sW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dXV0sW1wiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc1wiLCBbW1wib2JzZXJ2ZU5vdGlmaWVyXCIsIFskaOKAjV9hID0+IChvYnNlcnZlTm90aWZpZXIgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkTm90aWZpZXI9KG5vdGlmaWVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5hc3NlcnRBbGxEZWZpbmVkKHtub3RpZmllcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyfSk7XG5cbmNvbnN0IG1hcnNoYWxsVG9TdG9yYWdlPW1ha2VTZXJpYWxpemVUb1N0b3JhZ2Uoc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik7XG5cbm9ic2VydmVOb3RpZmllcihub3RpZmllcix7XG51cGRhdGVTdGF0ZSh2YWx1ZSl7XG5tYXJzaGFsbFRvU3RvcmFnZSh2YWx1ZSkuY2F0Y2goKHJlYXNvbik9PlxuY29uc29sZS5lcnJvcignU3RvcmVkTm90aWZpZXIgZmFpbGVkIHRvIHVwZGF0ZVN0YXRlJyxyZWFzb24pKTtcblxuIH0sXG5mYWlsKHJlYXNvbil7XG5jb25zb2xlLmVycm9yKCdTdG9yZWROb3RpZmllciBmYWlsZWQgdG8gaXRlcmF0ZScscmVhc29uKTtcbiB9fSkuXG5jYXRjaCgocmVhc29uKT0+e1xuY29uc29sZS5lcnJvcignU3RvcmVkTm90aWZpZXIgaGFsdGVkIGl0ZXJhdGlvbicscmVhc29uKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZXI9RmFyKCd1bnNlcmlhbGl6ZXInLHtcbmZyb21DYXBEYXRhOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKSxcbnVuc2VyaWFsaXplOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdG9yZWROb3RpZmllcj1GYXIoJ1N0b3JlZE5vdGlmaWVyJyx7XG5nZXRVcGRhdGVTaW5jZToodXBkYXRlQ291bnQpPT5FKG5vdGlmaWVyKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCksXG5nZXRQYXRoOigpPT5FKHN0b3JhZ2VOb2RlKS5nZXRQYXRoKCksXG5nZXRVbnNlcmlhbGl6ZXI6KCk9PnVuc2VyaWFsaXplcn0pO1xuXG5yZXR1cm4gc3RvcmVkTm90aWZpZXI7XG4gfTskaOKAjV9vbmNlLm1ha2VTdG9yZWROb3RpZmllcihtYWtlU3RvcmVkTm90aWZpZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVN0b3JlZE5vdGlmaWVyIjpbIm1ha2VTdG9yZWROb3RpZmllciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACdjSqQCRYAAAkWAAAtAAAAQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEvc3JjL3N0b3Jlc3ViLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyIsIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiLCIuL3B1Ymxpc2gta2l0LmpzIiwiLi9zdWJzY3JpYmVyLmpzIiwiLi9zdWJzY3JpYmUuanMiXSwiZXhwb3J0cyI6WyJmb3JFYWNoUHVibGljYXRpb25SZWNvcmQiLCJtYWtlU3RvcmVkUHVibGlzaEtpdCIsIm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQiLCJtYWtlU3RvcmVkU3Vic2NyaWJlciIsIm1ha2VTdG9yZWRTdWJzY3JpcHRpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLG1ha2VNYXJzaGFsLGFzc2VydEFsbERlZmluZWQsbWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSxvYnNlcnZlSXRlcmF0aW9uLG1ha2VQdWJsaXNoS2l0LG1ha2VTdWJzY3JpcHRpb25LaXQsc3Vic2NyaWJlRWFjaDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dLFtcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIm1ha2VNYXJzaGFsXCIsIFskaOKAjV9hID0+IChtYWtlTWFyc2hhbCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJhc3NlcnRBbGxEZWZpbmVkXCIsIFskaOKAjV9hID0+IChhc3NlcnRBbGxEZWZpbmVkID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNcIiwgW1tcIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2VcIiwgWyRo4oCNX2EgPT4gKG1ha2VTZXJpYWxpemVUb1N0b3JhZ2UgPSAkaOKAjV9hKV1dXV0sW1wiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc1wiLCBbW1wib2JzZXJ2ZUl0ZXJhdGlvblwiLCBbJGjigI1fYSA9PiAob2JzZXJ2ZUl0ZXJhdGlvbiA9ICRo4oCNX2EpXV1dXSxbXCIuL3B1Ymxpc2gta2l0LmpzXCIsIFtbXCJtYWtlUHVibGlzaEtpdFwiLCBbJGjigI1fYSA9PiAobWFrZVB1Ymxpc2hLaXQgPSAkaOKAjV9hKV1dXV0sW1wiLi9zdWJzY3JpYmVyLmpzXCIsIFtbXCJtYWtlU3Vic2NyaXB0aW9uS2l0XCIsIFskaOKAjV9hID0+IChtYWtlU3Vic2NyaXB0aW9uS2l0ID0gJGjigI1fYSldXV1dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtbXCJzdWJzY3JpYmVFYWNoXCIsIFskaOKAjV9hID0+IChzdWJzY3JpYmVFYWNoID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkPWFzeW5jKHN1YnNjcmliZXIsY29uc3VtZVZhbHVlKT0+e1xuLy9cbi8vXG5jb25zdCBpdGVyYXRvcj1zdWJzY3JpYmVFYWNoKHN1YnNjcmliZXIpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuXG5sZXQgZmluaXNoZWQ9ZmFsc2U7XG5hd2FpdCBudWxsO1xud2hpbGUoIWZpbmlzaGVkKXtcbmNvbnN0e3ZhbHVlLGRvbmV9PWF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcbmF3YWl0IGNvbnN1bWVWYWx1ZSh2YWx1ZSk7XG5maW5pc2hlZD0hIWRvbmU7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkKGZvckVhY2hQdWJsaWNhdGlvblJlY29yZCk7XG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFN1YnNjcmliZXI9KHN1YnNjcmliZXIsc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbmFzc2VydEFsbERlZmluZWQoe3N1YnNjcmliZXIsc3RvcmFnZU5vZGUsbWFyc2hhbGxlcn0pO1xuXG5jb25zdCBtYXJzaGFsbFRvU3RvcmFnZT1tYWtlU2VyaWFsaXplVG9TdG9yYWdlKHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpO1xuXG4vL1xuZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkKHN1YnNjcmliZXIsbWFyc2hhbGxUb1N0b3JhZ2UpLmNhdGNoKChlcnIpPT57XG4vL1xuLy9cbmNvbnNvbGUuZXJyb3IoJ1N0b3JlZFN1YnNjcmliZXIgZmFpbGVkIHRvIGl0ZXJhdGUnLGVycik7XG4gfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdW5zZXJpYWxpemVyPUZhcigndW5zZXJpYWxpemVyJyx7XG5mcm9tQ2FwRGF0YTooZGF0YSk9PkUobWFyc2hhbGxlcikuZnJvbUNhcERhdGEoZGF0YSksXG51bnNlcmlhbGl6ZTooZGF0YSk9PkUobWFyc2hhbGxlcikuZnJvbUNhcERhdGEoZGF0YSl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdG9yZXN1Yj1GYXIoJ1N0b3JlZFN1YnNjcmliZXInLHtcbnN1YnNjcmliZUFmdGVyOihwdWJsaXNoQ291bnQpPT5zdWJzY3JpYmVyLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCksXG5nZXRVcGRhdGVTaW5jZToodXBkYXRlQ291bnQpPT5zdWJzY3JpYmVyLmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KSxcbmdldFBhdGg6KCk9PkUoc3RvcmFnZU5vZGUpLmdldFBhdGgoKSxcbmdldFN0b3JlS2V5OigpPT5FKHN0b3JhZ2VOb2RlKS5nZXRTdG9yZUtleSgpLFxuZ2V0VW5zZXJpYWxpemVyOigpPT51bnNlcmlhbGl6ZXJ9KTtcblxucmV0dXJuIHN0b3Jlc3ViO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlU3RvcmVkU3Vic2NyaWJlcihtYWtlU3RvcmVkU3Vic2NyaWJlcik7XG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFN1YnNjcmlwdGlvbj0oXG5zdWJzY3JpcHRpb24sXG5zdG9yYWdlTm9kZSxcbm1hcnNoYWxsZXI9bWFrZU1hcnNoYWwodW5kZWZpbmVkLHVuZGVmaW5lZCx7XG5tYXJzaGFsU2F2ZUVycm9yOigpPT57IH0sXG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSkpPT5cblxue1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZXI9RmFyKCd1bnNlcmlhbGl6ZXInLHtcbmZyb21DYXBEYXRhOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKSxcbnVuc2VyaWFsaXplOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKX0pO1xuXG5cbi8vXG5sZXQgcHVibGlzaEZhaWxlZD1mYWxzZTtcbmxldCBwdWJsaXNoRXhjZXB0aW9uO1xuXG5jb25zdCBmYWlsPShlcnIpPT57XG5wdWJsaXNoRmFpbGVkPXRydWU7XG5wdWJsaXNoRXhjZXB0aW9uPWVycjtcbiB9O1xuXG4vL1xuLy9cbmNvbnN0IHB1Ymxpc2hWYWx1ZT0ob2JqKT0+e1xuYXNzZXJ0KHN0b3JhZ2VOb2RlKTtcbmlmKHB1Ymxpc2hGYWlsZWQpe1xuLy9cbnRocm93IHB1Ymxpc2hFeGNlcHRpb247XG4gfVxuXG4vL1xuRShtYXJzaGFsbGVyKS5cbnRvQ2FwRGF0YShvYmopLlxudGhlbigoc2VyaWFsaXplZCk9PntcbmNvbnN0IGVuY29kZWQ9SlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZCk7XG5yZXR1cm4gRShzdG9yYWdlTm9kZSkuc2V0VmFsdWUoZW5jb2RlZCk7XG4gfSkuXG5jYXRjaChmYWlsKTtcbiB9O1xuXG5pZihzdG9yYWdlTm9kZSl7XG4vL1xub2JzZXJ2ZUl0ZXJhdGlvbihzdWJzY3JpcHRpb24se1xudXBkYXRlU3RhdGU6cHVibGlzaFZhbHVlLFxuZmluaXNoOnB1Ymxpc2hWYWx1ZX0pLlxuY2F0Y2goZmFpbCk7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3Jlc3ViPUZhcignU3RvcmVkU3Vic2NyaXB0aW9uJyx7XG4vL1xuZ2V0U3RvcmVLZXk6YXN5bmMoKT0+e1xuaWYoIXN0b3JhZ2VOb2RlKXtcbnJldHVybiBoYXJkZW4oe3N1YnNjcmlwdGlvbn0pO1xuIH1cbmNvbnN0IHN0b3JlS2V5PWF3YWl0IEUoc3RvcmFnZU5vZGUpLmdldFN0b3JlS2V5KCk7XG5yZXR1cm4gaGFyZGVuKHsuLi5zdG9yZUtleSxzdWJzY3JpcHRpb259KTtcbiB9LFxuZ2V0VW5zZXJpYWxpemVyOigpPT51bnNlcmlhbGl6ZXIsXG5nZXRTaGFyYWJsZVN1YnNjcmlwdGlvbkludGVybmFsczooKT0+XG5zdWJzY3JpcHRpb24uZ2V0U2hhcmFibGVTdWJzY3JpcHRpb25JbnRlcm5hbHMoKSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnN1YnNjcmlwdGlvbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSxcbnN1YnNjcmliZUFmdGVyOihwdWJsaXNoQ291bnQpPT5zdWJzY3JpcHRpb24uc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KX0pO1xuXG5yZXR1cm4gc3RvcmVzdWI7XG4gfTskaOKAjV9vbmNlLm1ha2VTdG9yZWRTdWJzY3JpcHRpb24obWFrZVN0b3JlZFN1YnNjcmlwdGlvbik7XG5oYXJkZW4obWFrZVN0b3JlZFN1YnNjcmlwdGlvbik7XG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTdG9yZWRQdWJsaXNoZXJLaXQ9KHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIsY2hpbGRQYXRoKT0+e1xuY29uc3R7cHVibGljYXRpb24sc3Vic2NyaXB0aW9ufT1tYWtlU3Vic2NyaXB0aW9uS2l0KCk7XG5cbmlmKHN0b3JhZ2VOb2RlJiZjaGlsZFBhdGgpe1xuc3RvcmFnZU5vZGU9RShzdG9yYWdlTm9kZSkubWFrZUNoaWxkTm9kZShjaGlsZFBhdGgpO1xuIH1cblxuLy9cbmNvbnN0IHN1YnNjcmliZXI9bWFrZVN0b3JlZFN1YnNjcmlwdGlvbihcbnN1YnNjcmlwdGlvbixcbnN0b3JhZ2VOb2RlLFxubWFyc2hhbGxlcik7XG5cblxucmV0dXJue1xucHVibGlzaGVyOnB1YmxpY2F0aW9uLFxuc3Vic2NyaWJlcn07XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlU3RvcmVkUHVibGlzaGVyS2l0KG1ha2VTdG9yZWRQdWJsaXNoZXJLaXQpO1xuY29uc3QgICAgICAgIG1ha2VTdG9yZWRQdWJsaXNoS2l0PShzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKT0+e1xuY29uc3R7cHVibGlzaGVyLHN1YnNjcmliZXJ9PW1ha2VQdWJsaXNoS2l0KCk7XG5cbnJldHVybntcbnB1Ymxpc2hlcixcbi8vXG5zdWJzY3JpYmVyOm1ha2VTdG9yZWRTdWJzY3JpYmVyKHN1YnNjcmliZXIsc3RvcmFnZU5vZGUsbWFyc2hhbGxlcil9O1xuXG4gfTskaOKAjV9vbmNlLm1ha2VTdG9yZWRQdWJsaXNoS2l0KG1ha2VTdG9yZWRQdWJsaXNoS2l0KTtcbmhhcmRlbihtYWtlU3RvcmVkUHVibGlzaEtpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJmb3JFYWNoUHVibGljYXRpb25SZWNvcmQiOlsiZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkIl0sIm1ha2VTdG9yZWRTdWJzY3JpYmVyIjpbIm1ha2VTdG9yZWRTdWJzY3JpYmVyIl0sIm1ha2VTdG9yZWRTdWJzY3JpcHRpb24iOlsibWFrZVN0b3JlZFN1YnNjcmlwdGlvbiJdLCJtYWtlU3RvcmVkUHVibGlzaGVyS2l0IjpbIm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQiXSwibWFrZVN0b3JlZFB1Ymxpc2hLaXQiOlsibWFrZVN0b3JlZFB1Ymxpc2hLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAgzyNszcSAAA3EgAALgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xL3NyYy9zdWJzY3JpYmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3VwZ3JhZGUtYXBpLmpzIl0sImV4cG9ydHMiOlsic3Vic2NyaWJlIiwic3Vic2NyaWJlRWFjaCIsInN1YnNjcmliZUxhdGVzdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxGYWlsLGFubm90YXRlRXJyb3IsRSxGYXIsaXNPYmplY3QsaXNVcGdyYWRlRGlzY29ubmVjdGlvbjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRo4oCNX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXSxbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJpc09iamVjdFwiLCBbJGjigI1fYSA9PiAoaXNPYmplY3QgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdXBncmFkZS1hcGkuanNcIiwgW1tcImlzVXBncmFkZURpc2Nvbm5lY3Rpb25cIiwgWyRo4oCNX2EgPT4gKGlzVXBncmFkZURpc2Nvbm5lY3Rpb24gPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3Qgc2luaz0oKT0+eyB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHJlY29ubmVjdEFzTmVlZGVkPWFzeW5jKGdldHRlcixzZWVkPVtdKT0+e1xubGV0IGRpc2Nvbm5lY3Rpb247XG5sZXQgbGFzdFZlcnNpb249LUluZmluaXR5O1xuLy9cbmF3YWl0IG51bGw7XG5mb3IobGV0IGk9MDs7aSs9MSl7XG50cnl7XG5jb25zdCByZXN1bHRQPWk8c2VlZC5sZW5ndGg/c2VlZFtpXTpnZXR0ZXIoKTtcbmNvbnN0IHJlc3VsdD1hd2FpdCByZXN1bHRQO1xucmV0dXJuIHJlc3VsdDtcbiB9Y2F0Y2goZXJyKXtcbmlmKGlzVXBncmFkZURpc2Nvbm5lY3Rpb24oZXJyKSl7XG5pZighZGlzY29ubmVjdGlvbil7XG5kaXNjb25uZWN0aW9uPWVycjtcbiB9XG5jb25zdHtpbmNhcm5hdGlvbk51bWJlcjp2ZXJzaW9ufT1lcnI7XG5pZih2ZXJzaW9uPmxhc3RWZXJzaW9uKXtcbi8vXG4vL1xuLy9cbmxhc3RWZXJzaW9uPXZlcnNpb247XG5jb250aW51ZTtcbiB9XG4gfVxuLy9cbi8vXG4vL1xuaWYoaXNPYmplY3QoZXJyKSYmZGlzY29ubmVjdGlvbiYmZGlzY29ubmVjdGlvbiE9PWVycil7XG50cnl7XG5hbm5vdGF0ZUVycm9yKFxuZXJyLFxuWCBgQXR0ZW1wdGluZyB0byByZWNvdmVyIGZyb20gZGlzY29ubmVjdGlvbjogJHtkaXNjb25uZWN0aW9ufWApO1xuXG4gfWNhdGNoKF9lcnIpe1xuLy9cbiB9XG4gfVxudGhyb3cgZXJyO1xuIH1cbiB9XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc3Vic2NyaWJlPShpdFApPT5cbkZhcignQXN5bmNJdGVyYWJsZScse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+e1xuY29uc3QgaXQ9RShpdFApW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuY29uc3Qgc2VsZj1GYXIoJ0FzeW5jSXRlcmFibGVJdGVyYXRvcicse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+c2VsZixcbm5leHQ6YXN5bmMoKT0+RShpdCkubmV4dCgpfSk7XG5cbnJldHVybiBzZWxmO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5zdWJzY3JpYmUoc3Vic2NyaWJlKTtcbmNvbnN0IG1ha2VFYWNoSXRlcmF0b3I9KHRvcGljLG5leHRDZWxsUCk9Pntcbi8vXG4vL1xuY29uc3Qgc2VsZj1GYXIoJ0VhY2hJdGVyYXRvcicse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+c2VsZixcbm5leHQ6KCk9PntcbmNvbnN0e1xuaGVhZDpyZXN1bHRQLFxucHVibGlzaENvdW50OnB1Ymxpc2hDb3VudFAsXG50YWlsOnRhaWxQfT1cbkUuZ2V0KG5leHRDZWxsUCk7XG5cbi8vXG4vL1xuY29uc3QgZ2V0U3VjY2Vzc29yPWFzeW5jKCk9PntcbmNvbnN0IHB1Ymxpc2hDb3VudD1hd2FpdCBwdWJsaXNoQ291bnRQO1xuYXNzZXJ0LnR5cGVvZihwdWJsaXNoQ291bnQsJ2JpZ2ludCcpO1xuY29uc3Qgc3VjY2Vzc29yPWF3YWl0IEUodG9waWMpLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCk7XG5jb25zdCBuZXdQdWJsaXNoQ291bnQ9c3VjY2Vzc29yLnB1Ymxpc2hDb3VudDtcbmlmKG5ld1B1Ymxpc2hDb3VudCE9PXB1Ymxpc2hDb3VudCsxbil7XG5GYWlsIGBlYWNoSXRlcmF0b3IgYnJva2VuIGJ5IGdhcCBmcm9tIHB1Ymxpc2hDb3VudCAke3B1Ymxpc2hDb3VudH0gdG8gJHtuZXdQdWJsaXNoQ291bnR9YDtcbiB9XG5yZXR1cm4gc3VjY2Vzc29yO1xuIH07XG5cbi8vXG4vL1xubmV4dENlbGxQPXJlY29ubmVjdEFzTmVlZGVkKGdldFN1Y2Nlc3NvcixbdGFpbFBdKTtcblxuLy9cbi8vXG4vL1xuLy9cbnZvaWQgRS53aGVuKHB1Ymxpc2hDb3VudFAsc2luayxzaW5rKTtcbnZvaWQgRS53aGVuKG5leHRDZWxsUCxzaW5rLHNpbmspO1xucmV0dXJuIHJlc3VsdFA7XG4gfSxcbmZvcms6KCk9Pm1ha2VFYWNoSXRlcmF0b3IodG9waWMsbmV4dENlbGxQKX0pO1xuXG5yZXR1cm4gc2VsZjtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHN1YnNjcmliZUVhY2g9KHRvcGljKT0+e1xuY29uc3QgaXRlcmFibGU9RmFyKCdFYWNoSXRlcmFibGUnLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PntcbmNvbnN0IGZpcnN0Q2VsbFA9cmVjb25uZWN0QXNOZWVkZWQoKCk9PkUodG9waWMpLnN1YnNjcmliZUFmdGVyKCkpO1xucmV0dXJuIG1ha2VFYWNoSXRlcmF0b3IodG9waWMsZmlyc3RDZWxsUCk7XG4gfX0pO1xuXG5yZXR1cm4gaXRlcmFibGU7XG4gfTskaOKAjV9vbmNlLnN1YnNjcmliZUVhY2goc3Vic2NyaWJlRWFjaCk7XG5oYXJkZW4oc3Vic2NyaWJlRWFjaCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjbG9uZUxhdGVzdEl0ZXJhdG9yPSh0b3BpYyxsb2NhbFVwZGF0ZUNvdW50LHRlcm1pbmFsUmVzdWx0KT0+e1xubGV0IG11dGV4PVByb21pc2UucmVzb2x2ZSgpO1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgbWF5YmVSZXF1ZXN0TmV4dFJlc3VsdD1hc3luYygpPT57XG5pZih0ZXJtaW5hbFJlc3VsdCl7XG4vL1xuLy9cbnJldHVybiB0ZXJtaW5hbFJlc3VsdDtcbiB9XG5cbi8vXG4vL1xuY29uc3R7dmFsdWUsdXBkYXRlQ291bnR9PWF3YWl0IHJlY29ubmVjdEFzTmVlZGVkKCgpPT5cbkUodG9waWMpLmdldFVwZGF0ZVNpbmNlKGxvY2FsVXBkYXRlQ291bnQpKTtcblxuLy9cbmxvY2FsVXBkYXRlQ291bnQ9dXBkYXRlQ291bnQ7XG5cbi8vXG5pZih1cGRhdGVDb3VudD09PXVuZGVmaW5lZCl7XG50ZXJtaW5hbFJlc3VsdD1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZX0pO1xucmV0dXJuIHRlcm1pbmFsUmVzdWx0O1xuIH1cbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWV9KTtcbiB9O1xuXG5jb25zdCBzZWxmPUZhcignTGF0ZXN0SXRlcmF0b3InLHtcbmZvcms6KCk9PmNsb25lTGF0ZXN0SXRlcmF0b3IodG9waWMsbG9jYWxVcGRhdGVDb3VudCx0ZXJtaW5hbFJlc3VsdCksXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5zZWxmLFxubmV4dDphc3luYygpPT57XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbmlmKHRlcm1pbmFsUmVzdWx0KXtcbi8vXG4vL1xucmV0dXJuIHRlcm1pbmFsUmVzdWx0O1xuIH1cblxuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IG5leHRSZXN1bHQ9bXV0ZXgudGhlbihtYXliZVJlcXVlc3ROZXh0UmVzdWx0KTtcbm11dGV4PW5leHRSZXN1bHQudGhlbihzaW5rLHNpbmspO1xuLy9cblxucmV0dXJuIG5leHRSZXN1bHQ7XG4gfX0pO1xuXG5yZXR1cm4gc2VsZjtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBtYWtlTGF0ZXN0SXRlcmF0b3I9KHRvcGljKT0+Y2xvbmVMYXRlc3RJdGVyYXRvcih0b3BpYyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc3Vic2NyaWJlTGF0ZXN0PSh0b3BpYyk9PntcbmNvbnN0IGl0ZXJhYmxlPUZhcignTGF0ZXN0SXRlcmFibGUnLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9Pm1ha2VMYXRlc3RJdGVyYXRvcih0b3BpYyl9KTtcblxucmV0dXJuIGl0ZXJhYmxlO1xuIH07JGjigI1fb25jZS5zdWJzY3JpYmVMYXRlc3Qoc3Vic2NyaWJlTGF0ZXN0KTtcbmhhcmRlbihzdWJzY3JpYmVMYXRlc3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic3Vic2NyaWJlIjpbInN1YnNjcmliZSJdLCJzdWJzY3JpYmVFYWNoIjpbInN1YnNjcmliZUVhY2giXSwic3Vic2NyaWJlTGF0ZXN0IjpbInN1YnNjcmliZUxhdGVzdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAQrWne4gcAAOIHAAAvAAAAQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEvc3JjL3N1YnNjcmliZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIiwiLi9zdWJzY3JpYmUuanMiLCIuL3B1Ymxpc2gta2l0LmpzIiwiLi90b3BpYy5qcyJdLCJleHBvcnRzIjpbIm1ha2VTdWJzY3JpcHRpb24iLCJtYWtlU3Vic2NyaXB0aW9uS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLEZhcixzdWJzY3JpYmVFYWNoLG1ha2VQdWJsaXNoS2l0LG1ha2VQaW5uZWRIaXN0b3J5VG9waWM7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXSxbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlRWFjaFwiLCBbJGjigI1fYSA9PiAoc3Vic2NyaWJlRWFjaCA9ICRo4oCNX2EpXV1dXSxbXCIuL3B1Ymxpc2gta2l0LmpzXCIsIFtbXCJtYWtlUHVibGlzaEtpdFwiLCBbJGjigI1fYSA9PiAobWFrZVB1Ymxpc2hLaXQgPSAkaOKAjV9hKV1dXV0sW1wiLi90b3BpYy5qc1wiLCBbW1wibWFrZVBpbm5lZEhpc3RvcnlUb3BpY1wiLCBbJGjigI1fYSA9PiAobWFrZVBpbm5lZEhpc3RvcnlUb3BpYyA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VTdWJzY3JpcHRpb249KHRvcGljKT0+e1xuY29uc3Qgc3Vic2NyaXB0aW9uPUZhcignU3Vic2NyaXB0aW9uJyx7XG4uLi5zdWJzY3JpYmVFYWNoKHRvcGljKSxcbnN1YnNjcmliZUFmdGVyOmFzeW5jKHB1Ymxpc2hDb3VudCk9PkUodG9waWMpLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCksXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbmdldFNoYXJhYmxlU3Vic2NyaXB0aW9uSW50ZXJuYWxzOmFzeW5jKCk9PnRvcGljLFxuXG5nZXRTdG9yZUtleTooKT0+aGFyZGVuKHtzdWJzY3JpcHRpb259KX0pO1xuXG5yZXR1cm4gc3Vic2NyaXB0aW9uO1xuIH07JGjigI1fb25jZS5tYWtlU3Vic2NyaXB0aW9uKG1ha2VTdWJzY3JpcHRpb24pO1xuaGFyZGVuKG1ha2VTdWJzY3JpcHRpb24pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVN1YnNjcmlwdGlvbktpdD0oKT0+e1xuY29uc3R7cHVibGlzaGVyLHN1YnNjcmliZXJ9PW1ha2VQdWJsaXNoS2l0KCk7XG5cbi8vXG4vL1xuXG5jb25zdCBwaW5uZWRIaXN0b3J5VG9waWM9bWFrZVBpbm5lZEhpc3RvcnlUb3BpYyhzdWJzY3JpYmVyKTtcbmNvbnN0IHN1YnNjcmlwdGlvbj1tYWtlU3Vic2NyaXB0aW9uKHBpbm5lZEhpc3RvcnlUb3BpYyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdWJsaWNhdGlvbj1GYXIoJ3B1YmxpY2F0aW9uJyx7XG51cGRhdGVTdGF0ZToobm9uRmluYWxWYWx1ZSk9PnB1Ymxpc2hlci5wdWJsaXNoKG5vbkZpbmFsVmFsdWUpLFxuZmluaXNoOihjb21wbGV0aW9uKT0+cHVibGlzaGVyLmZpbmlzaChjb21wbGV0aW9uKSxcbmZhaWw6KHJlYXNvbik9PnB1Ymxpc2hlci5mYWlsKHJlYXNvbil9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtwdWJsaWNhdGlvbixzdWJzY3JpcHRpb259KTtcbiB9OyRo4oCNX29uY2UubWFrZVN1YnNjcmlwdGlvbktpdChtYWtlU3Vic2NyaXB0aW9uS2l0KTtcbmhhcmRlbihtYWtlU3Vic2NyaXB0aW9uS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VTdWJzY3JpcHRpb24iOlsibWFrZVN1YnNjcmlwdGlvbiJdLCJtYWtlU3Vic2NyaXB0aW9uS2l0IjpbIm1ha2VTdWJzY3JpcHRpb25LaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAX2geNfUDAAD1AwAAKgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xL3NyYy90b3BpYy5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiXSwiZXhwb3J0cyI6WyJtYWtlUGlubmVkSGlzdG9yeVRvcGljIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXI7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VQaW5uZWRIaXN0b3J5VG9waWM9KHRvcGljKT0+e1xuLy9cblxuLy9cbmNvbnN0IHBpbm5lZFB1Ykxpc3Q9dG9waWMuc3Vic2NyaWJlQWZ0ZXIoKTtcblxucmV0dXJuIEZhcignUGlubmVkSGlzdG9yeVRvcGljJyx7XG5zdWJzY3JpYmVBZnRlcjphc3luYyhwdWJsaXNoQ291bnQ9LTFuKT0+e1xuaWYocHVibGlzaENvdW50PT09LTFuKXtcbnJldHVybiBwaW5uZWRQdWJMaXN0O1xuIH1cbnJldHVybiB0b3BpYy5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQpO1xuIH0sXG5nZXRVcGRhdGVTaW5jZTphc3luYyh1cGRhdGVDb3VudD11bmRlZmluZWQpPT57XG4vL1xucmV0dXJuIHRvcGljLmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KTtcbiB9fSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZVBpbm5lZEhpc3RvcnlUb3BpYyhtYWtlUGlubmVkSGlzdG9yeVRvcGljKTtcbmhhcmRlbihtYWtlUGlubmVkSGlzdG9yeVRvcGljKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VQaW5uZWRIaXN0b3J5VG9waWMiOlsibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACHklKnTwEAAE8BAAAqAAAAQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFNY0MuNBgAAjQYAADMAAABAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMS90b29scy90ZXN0U3VwcG9ydHMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3Rlc3RpbmctdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlRmFrZU1hcnNoYWxsZXIiLCJtYWtlRmFrZVN0b3JhZ2UiLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFyLG1ha2VNYXJzaGFsOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXSxbXCJtYWtlTWFyc2hhbFwiLCBbJGjigI1fYSA9PiAobWFrZU1hcnNoYWwgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdGVzdGluZy11dGlscy5qc1wiLCBbXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VGYWtlU3RvcmFnZT0ocGF0aCxwdWJsaWNhdGlvbik9PntcbmxldCBzZXRWYWx1ZUNhbGxzPTA7XG5jb25zdCBmdWxsUGF0aD0gYHB1Ymxpc2guJHtwYXRofWA7XG5jb25zdCBzdG9yZUtleT1oYXJkZW4oe1xuc3RvcmVOYW1lOidzd2luZ3NldCcsXG5zdG9yZVN1YmtleTogYHN3aW5nc2V0L2RhdGE6JHtmdWxsUGF0aH1gLFxuZGF0YVByZWZpeEJ5dGVzOicnfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3JhZ2U9RmFyKCdTdG9yYWdlTm9kZScse1xuZ2V0UGF0aDooKT0+cGF0aCxcbmdldFN0b3JlS2V5OmFzeW5jKCk9PnN0b3JlS2V5LFxuc2V0VmFsdWU6YXN5bmModmFsdWUpPT57XG5zZXRWYWx1ZUNhbGxzKz0xO1xuYXNzZXJ0LnR5cGVvZih2YWx1ZSwnc3RyaW5nJyk7XG5pZihwdWJsaWNhdGlvbil7XG5wdWJsaWNhdGlvbi51cGRhdGVTdGF0ZSh2YWx1ZSk7XG4gfVxuIH0sXG5tYWtlQ2hpbGROb2RlOigpPT5zdG9yYWdlLFxuY291bnRTZXRWYWx1ZUNhbGxzOigpPT5zZXRWYWx1ZUNhbGxzfSk7XG5cbnJldHVybiBzdG9yYWdlO1xuIH07JGjigI1fb25jZS5tYWtlRmFrZVN0b3JhZ2UobWFrZUZha2VTdG9yYWdlKTtcbmhhcmRlbihtYWtlRmFrZVN0b3JhZ2UpO1xuXG5jb25zdCAgICAgICAgbWFrZUZha2VNYXJzaGFsbGVyPSgpPT5cbm1ha2VNYXJzaGFsKHVuZGVmaW5lZCx1bmRlZmluZWQse1xubWFyc2hhbFNhdmVFcnJvcjooKT0+eyB9fSk7JGjigI1fb25jZS5tYWtlRmFrZU1hcnNoYWxsZXIobWFrZUZha2VNYXJzaGFsbGVyKTtcblxuaGFyZGVuKG1ha2VGYWtlTWFyc2hhbGxlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyJAYWdvcmljL2ludGVybmFsL3NyYy90ZXN0aW5nLXV0aWxzLmpzIjpbWyJldmVudExvb3BJdGVyYXRpb24iLCJldmVudExvb3BJdGVyYXRpb24iXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUZha2VTdG9yYWdlIjpbIm1ha2VGYWtlU3RvcmFnZSJdLCJtYWtlRmFrZU1hcnNoYWxsZXIiOlsibWFrZUZha2VNYXJzaGFsbGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABo5eZ2jHQAAox0AADkAAABAYWdvcmljL3NtYXJ0LXdhbGxldC12MC41LjQtdTE3LjEvc3JjL21hcnNoYWwtY29udGV4dHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBhZ29yaWMvc3RvcmUiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy92YXRzL3NyYy9saWItYm9hcmQuanMiXSwiZXhwb3J0cyI6WyJtYWtlRXhwb3J0Q29udGV4dCIsIm1ha2VJbXBvcnRDb250ZXh0IiwibWFrZUxvZ2dpbmdQcmVzZW5jZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEhhbmRsZWRQcm9taXNlLG1ha2VTY2FsYXJNYXBTdG9yZSxGYXIsbWFrZU1hcnNoYWwsUmVtb3RhYmxlLERFRkFVTFRfUFJFRklYOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJIYW5kbGVkUHJvbWlzZVwiLCBbJGjigI1fYSA9PiAoSGFuZGxlZFByb21pc2UgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaOKAjV9hID0+IChtYWtlTWFyc2hhbCA9ICRo4oCNX2EpXV0sW1wiUmVtb3RhYmxlXCIsIFskaOKAjV9hID0+IChSZW1vdGFibGUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy92YXRzL3NyYy9saWItYm9hcmQuanNcIiwgW1tcIkRFRkFVTFRfUFJFRklYXCIsIFskaOKAjV9hID0+IChERUZBVUxUX1BSRUZJWCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgaXNEZWZhdWx0Qm9hcmRJZD0oc3BlY2ltZW4pPT57XG5yZXR1cm4gdHlwZW9mIHNwZWNpbWVuPT09J3N0cmluZycmJnNwZWNpbWVuLnN0YXJ0c1dpdGgoREVGQVVMVF9QUkVGSVgpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VXYWxsZXRTbG90PShfdGFibGVzLGtpbmQsaWQpPT57XG5jb25zdCBkaWdpdHM9LyogICAgICAgICAgICAgICAgICovIGAke2lkfWA7XG5yZXR1cm4gYCR7a2luZH06JHtkaWdpdHN9YDtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGZpbmRLZXk9KHJlY29yZCxwcmVkaWNhdGUpPT57XG5jb25zdCBrZXk9T2JqZWN0LmtleXMocmVjb3JkKS5maW5kKHByZWRpY2F0ZSk7XG5yZXR1cm4ga2V5O1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgcGFyc2VXYWxsZXRTbG90PSh0YWJsZXMsc2xvdCk9PntcbmNvbnN0IGtpbmQ9ZmluZEtleSh0YWJsZXMsKGspPT5zbG90LnN0YXJ0c1dpdGgoIGAke2t9OmApKTtcbmNvbnN0IGlkPWtpbmQ/TnVtYmVyKHNsb3Quc2xpY2Uoa2luZC5sZW5ndGgrMSkpOk5hTjtcbnJldHVybntraW5kLGlkfTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgaW5pdFNsb3RWYWw9KHRhYmxlLHNsb3QsdmFsKT0+e1xudGFibGUuYnlTbG90LmluaXQoc2xvdCx2YWwpO1xudGFibGUuYnlWYWwuaW5pdCh2YWwsc2xvdCk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRXhwb3J0Q29udGV4dD0oKT0+e1xuY29uc3Qgd2FsbGV0T2JqZWN0cz17XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wdXJzZTp7XG5ieVNsb3Q6bWFrZVNjYWxhck1hcFN0b3JlKCksXG5ieVZhbDptYWtlU2NhbGFyTWFwU3RvcmUoKX0sXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucGF5bWVudDp7XG5ieVNsb3Q6bWFrZVNjYWxhck1hcFN0b3JlKCksXG5ieVZhbDptYWtlU2NhbGFyTWFwU3RvcmUoKX0sXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG51bmtub3duOntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfX07XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGJvYXJkT2JqZWN0cz17XG5ieVNsb3Q6bWFrZVNjYWxhck1hcFN0b3JlKCksXG5ieVZhbDptYWtlU2NhbGFyTWFwU3RvcmUoKX07XG5cblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHNsb3RUb1ZhbD0oc2xvdCxfaWZhY2UpPT57XG5pZihpc0RlZmF1bHRCb2FyZElkKHNsb3QpJiZib2FyZE9iamVjdHMuYnlTbG90LmhhcyhzbG90KSl7XG5yZXR1cm4gYm9hcmRPYmplY3RzLmJ5U2xvdC5nZXQoc2xvdCk7XG4gfVxuY29uc3R7a2luZCxpZH09cGFyc2VXYWxsZXRTbG90KHdhbGxldE9iamVjdHMsc2xvdCk7XG5raW5kfHxGYWlsIGBiYWQgc2xvdCBraW5kOiAke3Nsb3R9YDtcbmNvbnN0IHZhbD13YWxsZXRPYmplY3RzW2tpbmRdLmJ5U2xvdC5nZXQoaWQpOy8vXG5yZXR1cm4gdmFsO1xuIH07XG5cbmxldCB1bmtub3duTm9uY2U9MDtcblxuLypcblxuXG4gICAqL1xuY29uc3QgdmFsVG9TbG90PSh2YWwpPT57XG5pZihib2FyZE9iamVjdHMuYnlWYWwuaGFzKHZhbCkpe1xucmV0dXJuIGJvYXJkT2JqZWN0cy5ieVZhbC5nZXQodmFsKTtcbiB9XG5jb25zdCBraW5kPWZpbmRLZXkod2FsbGV0T2JqZWN0cywoayk9PndhbGxldE9iamVjdHNba10uYnlWYWwuaGFzKHZhbCkpO1xuaWYoa2luZCl7XG4vL1xuY29uc3QgaWQ9d2FsbGV0T2JqZWN0c1traW5kXS5ieVZhbC5nZXQodmFsKTtcbnJldHVybiBtYWtlV2FsbGV0U2xvdCh3YWxsZXRPYmplY3RzLGtpbmQsaWQpO1xuIH1cbnVua25vd25Ob25jZSs9MTtcbmNvbnN0IHNsb3Q9bWFrZVdhbGxldFNsb3Qod2FsbGV0T2JqZWN0cywndW5rbm93bicsdW5rbm93bk5vbmNlKTtcbmluaXRTbG90VmFsKHdhbGxldE9iamVjdHMudW5rbm93bix1bmtub3duTm9uY2UsdmFsKTtcbnJldHVybiBzbG90O1xuIH07XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZVNhdmVyPShraW5kLHRhYmxlKT0+e1xubGV0IG5vbmNlPTA7XG4vKiAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNhdmVyPSh2YWwpPT57XG5ub25jZSs9MTtcbmluaXRTbG90VmFsKHRhYmxlLG5vbmNlLHZhbCk7XG4gfTtcbnJldHVybiBzYXZlcjtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtcbnNhdmVQdXJzZUFjdGlvbnM6bWFrZVNhdmVyKCdwdXJzZScsd2FsbGV0T2JqZWN0cy5wdXJzZSksXG5zYXZlUGF5bWVudEFjdGlvbnM6bWFrZVNhdmVyKCdwYXltZW50Jyx3YWxsZXRPYmplY3RzLnBheW1lbnQpLFxuLypcblxuXG4gICAgICovXG5pbml0UHVyc2VJZDooaWQscHVyc2UpPT57XG5pbml0U2xvdFZhbCh3YWxsZXRPYmplY3RzLnB1cnNlLGlkLHB1cnNlKTtcbiB9LFxucHVyc2VFbnRyaWVzOndhbGxldE9iamVjdHMucHVyc2UuYnlTbG90LmVudHJpZXMsXG4vKlxuXG5cbiAgICAgKi9cbmluaXRCb2FyZElkOihpZCx2YWwpPT57XG5pbml0U2xvdFZhbChib2FyZE9iamVjdHMsaWQsdmFsKTtcbiB9LFxuLypcblxuXG4gICAgICovXG5lbnN1cmVCb2FyZElkOihpZCx2YWwpPT57XG5pZihib2FyZE9iamVjdHMuYnlWYWwuaGFzKHZhbCkpe1xuYXNzZXJ0LmVxdWFsKGJvYXJkT2JqZWN0cy5ieVZhbC5nZXQodmFsKSxpZCk7XG5yZXR1cm47XG4gfVxuaW5pdFNsb3RWYWwoYm9hcmRPYmplY3RzLGlkLHZhbCk7XG4gfSxcbi4uLm1ha2VNYXJzaGFsKHZhbFRvU2xvdCxzbG90VG9WYWwse3NlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KX0pO1xuXG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjigI1fb25jZS5tYWtlRXhwb3J0Q29udGV4dChtYWtlRXhwb3J0Q29udGV4dCk7XG5cbmNvbnN0IGRlZmF1bHRNYWtlUHJlc2VuY2U9KGlmYWNlKT0+e1xuY29uc3Qgc2V2ZXJlZD0gYFNFVkVSRUQ6ICR7aWZhY2UucmVwbGFjZSgvXkFsbGVnZWQ6IC8sJycpfWA7XG5yZXR1cm4gRmFyKHNldmVyZWQse30pO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VJbXBvcnRDb250ZXh0PShtYWtlUHJlc2VuY2U9ZGVmYXVsdE1ha2VQcmVzZW5jZSk9PntcbmNvbnN0IHdhbGxldE9iamVjdHM9e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucHVyc2U6e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9LFxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wYXltZW50OntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfSxcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xudW5rbm93bjp7XG5ieVNsb3Q6bWFrZVNjYWxhck1hcFN0b3JlKCksXG5ieVZhbDptYWtlU2NhbGFyTWFwU3RvcmUoKX19O1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBib2FyZE9iamVjdHM9e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9O1xuXG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVWYWw9KHRhYmxlLHNsb3QsaWZhY2UpPT57XG5pZih0YWJsZS5ieVNsb3QuaGFzKHNsb3QpKXtcbnJldHVybiB0YWJsZS5ieVNsb3QuZ2V0KHNsb3QpO1xuIH1cbmNvbnN0IHZhbD1tYWtlUHJlc2VuY2UoaWZhY2UpO1xuaW5pdFNsb3RWYWwodGFibGUsc2xvdCx2YWwpO1xucmV0dXJuIHZhbDtcbiB9O1xuXG5jb25zdCBzbG90VG9WYWw9e1xuLypcblxuXG4gICAgICovXG5mcm9tQm9hcmQ6KHNsb3QsaWZhY2UpPT57XG5pc0RlZmF1bHRCb2FyZElkKHNsb3QpfHxGYWlsIGBiYWQgYm9hcmQgc2xvdCAke3Eoc2xvdCl9YDtcbnJldHVybiBwcm92aWRlVmFsKGJvYXJkT2JqZWN0cyxzbG90LGlmYWNlKTtcbiB9LFxuXG4vKlxuXG5cbiAgICAgKi9cbmZyb21NeVdhbGxldDooc2xvdCxpZmFjZSk9PntcbmlmKCFzbG90KXtcbi8vXG5yZXR1cm4gbWFrZVByZXNlbmNlKCBgJHtzbG90fWApO1xuIH1cbmNvbnN0e2tpbmQsaWR9PXBhcnNlV2FsbGV0U2xvdCh3YWxsZXRPYmplY3RzLHNsb3QpO1xucmV0dXJuIGtpbmQ/XG5wcm92aWRlVmFsKHdhbGxldE9iamVjdHNba2luZF0saWQsaWZhY2UpOlxuc2xvdFRvVmFsLmZyb21Cb2FyZChzbG90LGlmYWNlKTtcbiB9fTtcblxuXG5jb25zdCB2YWxUb1Nsb3Q9e1xuZnJvbUJvYXJkOih2YWwpPT5ib2FyZE9iamVjdHMuYnlWYWwuZ2V0KHZhbCksXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5mcm9tTXlXYWxsZXQ6KHZhbCk9PntcbmNvbnN0IGtpbmQ9ZmluZEtleSh3YWxsZXRPYmplY3RzLChrKT0+d2FsbGV0T2JqZWN0c1trXS5ieVZhbC5oYXModmFsKSk7XG5pZihraW5kPT09dW5kZWZpbmVkKXtcbnRocm93IEZhaWwgYGNhbm5vdCBzZXJpYWxpemUgdW5yZWdpc3RlcmVkICR7dmFsfWA7XG4gfVxuXG5jb25zdCBpZD13YWxsZXRPYmplY3RzW2tpbmRdLmJ5VmFsLmdldCh2YWwpO1xucmV0dXJuIG1ha2VXYWxsZXRTbG90KHdhbGxldE9iamVjdHMsa2luZCxpZCk7XG4gfX07XG5cblxuY29uc3QgbWFyc2hhbD17XG5mcm9tQm9hcmQ6bWFrZU1hcnNoYWwodmFsVG9TbG90LmZyb21Cb2FyZCxzbG90VG9WYWwuZnJvbUJvYXJkLHtcbm1hcnNoYWxOYW1lOidmcm9tQm9hcmQnLFxuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pLFxuXG5mcm9tTXlXYWxsZXQ6bWFrZU1hcnNoYWwodmFsVG9TbG90LmZyb21NeVdhbGxldCxzbG90VG9WYWwuZnJvbU15V2FsbGV0LHtcbm1hcnNoYWxOYW1lOidmcm9tTXlXYWxsZXQnLFxuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pfTtcblxuXG5cbnJldHVybiBoYXJkZW4oe1xuLypcblxuXG4gICAgICovXG5pbml0Qm9hcmRJZDooaWQsdmFsKT0+e1xuaW5pdFNsb3RWYWwoYm9hcmRPYmplY3RzLGlkLHZhbCk7XG4gfSxcbi8qXG5cblxuICAgICAqL1xuZW5zdXJlQm9hcmRJZDooaWQsdmFsKT0+e1xuaWYoYm9hcmRPYmplY3RzLmJ5VmFsLmhhcyh2YWwpKXtcbmFzc2VydC5lcXVhbChib2FyZE9iamVjdHMuYnlWYWwuZ2V0KHZhbCksaWQpO1xucmV0dXJuO1xuIH1cbmluaXRTbG90VmFsKGJvYXJkT2JqZWN0cyxpZCx2YWwpO1xuIH0sXG5mcm9tTXlXYWxsZXQ6RmFyKCd3YWxsZXQgbWFyc2hhbGxlcicsey4uLm1hcnNoYWwuZnJvbU15V2FsbGV0fSksXG5mcm9tQm9hcmQ6RmFyKCdib2FyZCBtYXJzaGFsbGVyJyx7Li4ubWFyc2hhbC5mcm9tQm9hcmR9KX0pO1xuXG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VJbXBvcnRDb250ZXh0KG1ha2VJbXBvcnRDb250ZXh0KTtcbmNvbnN0IG1ha2VQcmVzZW5jZT0oaWZhY2UsaGFuZGxlcik9PntcbmxldCBvYmo7XG5cbnZvaWQgbmV3IEhhbmRsZWRQcm9taXNlKChyZXNvbHZlLHJlamVjdCxyZXNvbHZlV2l0aFByZXNlbmNlKT0+e1xub2JqPXJlc29sdmVXaXRoUHJlc2VuY2UoaGFuZGxlcik7XG4gfSk7XG5hc3NlcnQob2JqKTtcbnJldHVybiBSZW1vdGFibGUoaWZhY2UsdW5kZWZpbmVkLG9iaik7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTG9nZ2luZ1ByZXNlbmNlPShpZmFjZSxsb2cpPT57XG4vKiAgICAgICAgICAgICAgKi8gLy9cbmNvbnN0IGl0PW1ha2VQcmVzZW5jZShpZmFjZSx7XG5hcHBseU1ldGhvZDoodGFyZ2V0LG1ldGhvZCxhcmdzKT0+e1xubG9nKGhhcmRlbihbJ2FwcGx5TWV0aG9kJyx0YXJnZXQsbWV0aG9kLGFyZ3NdKSk7XG4gfSxcbmFwcGx5RnVuY3Rpb246KHRhcmdldCxhcmdzKT0+e1xubG9nKGhhcmRlbihbJ2FwcGx5RnVuY3Rpb24nLHRhcmdldCxhcmdzXSkpO1xuIH19KTtcblxucmV0dXJuIGl0O1xuIH07JGjigI1fb25jZS5tYWtlTG9nZ2luZ1ByZXNlbmNlKG1ha2VMb2dnaW5nUHJlc2VuY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUV4cG9ydENvbnRleHQiOlsibWFrZUV4cG9ydENvbnRleHQiXSwibWFrZUltcG9ydENvbnRleHQiOlsibWFrZUltcG9ydENvbnRleHQiXSwibWFrZUxvZ2dpbmdQcmVzZW5jZSI6WyJtYWtlTG9nZ2luZ1ByZXNlbmNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKkp1sCcDQAAnA0AACcAAABAYWdvcmljL3N0b3JlLXYwLjkuMy11MTcuMS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiLCIuL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiLCIuL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qcyIsIi4vc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qcyIsIi4vc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzIiwiLi9zdG9yZXMvc3RvcmUtdXRpbHMuanMiLCJAZW5kby9leG8iLCIuL2xlZ2FjeS9sZWdhY3lNYXAuanMiLCIuL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzIiwiLi90eXBlcy5qcyJdLCJleHBvcnRzIjpbImFzc2VydEtleSIsImFzc2VydEtleSIsImRlZmluZUV4b0NsYXNzIiwiZGVmaW5lRXhvQ2xhc3MiLCJtdXN0TWF0Y2giLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHlwZWxlc3NNdXN0TWF0Y2g7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAodHlwZWxlc3NNdXN0TWF0Y2ggPSAkaOKAjV9hKV1dXV0sW1wiLi9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc3RvcmUtdXRpbHMuanNcIiwgW11dLFtcIkBlbmRvL2V4b1wiLCBbXV0sW1wiLi9sZWdhY3kvbGVnYWN5TWFwLmpzXCIsIFtdXSxbXCIuL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzXCIsIFtdXSxbXCIuL3R5cGVzLmpzXCIsIFtdXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG11c3RNYXRjaD10eXBlbGVzc011c3RNYXRjaDskaOKAjV9vbmNlLm11c3RNYXRjaChtdXN0TWF0Y2gpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzIjpbWyJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIiwibWFrZVNjYWxhcldlYWtTZXRTdG9yZSJdXSwiLi9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanMiOltbIm1ha2VTY2FsYXJTZXRTdG9yZSIsIm1ha2VTY2FsYXJTZXRTdG9yZSJdXSwiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIjpbWyJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIiwibWFrZVNjYWxhcldlYWtNYXBTdG9yZSJdXSwiLi9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiOltbIm1ha2VTY2FsYXJNYXBTdG9yZSIsIm1ha2VTY2FsYXJNYXBTdG9yZSJdXSwiLi9zdG9yZXMvc3RvcmUtdXRpbHMuanMiOltbInByb3ZpZGVMYXp5IiwicHJvdmlkZUxhenkiXV0sIkBlbmRvL3BhdHRlcm5zIjpbWyJpc0tleSIsImlzS2V5Il0sWyJhc3NlcnRLZXkiLCJhc3NlcnRLZXkiXSxbImFzc2VydFNjYWxhcktleSIsImFzc2VydFNjYWxhcktleSJdLFsibWFrZUNvcHlTZXQiLCJtYWtlQ29weVNldCJdLFsiZ2V0Q29weVNldEtleXMiLCJnZXRDb3B5U2V0S2V5cyJdLFsibWFrZUNvcHlCYWciLCJtYWtlQ29weUJhZyJdLFsibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiLCJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyJdLFsiZ2V0Q29weUJhZ0VudHJpZXMiLCJnZXRDb3B5QmFnRW50cmllcyJdLFsibWFrZUNvcHlNYXAiLCJtYWtlQ29weU1hcCJdLFsiZ2V0Q29weU1hcEVudHJpZXMiLCJnZXRDb3B5TWFwRW50cmllcyJdLFsiY29lcmNlVG9FbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiXSxbImNvZXJjZVRvQmFnRW50cmllcyIsImNvZXJjZVRvQmFnRW50cmllcyJdLFsiY29tcGFyZUtleXMiLCJjb21wYXJlS2V5cyJdLFsia2V5TFQiLCJrZXlMVCJdLFsia2V5TFRFIiwia2V5TFRFIl0sWyJrZXlFUSIsImtleUVRIl0sWyJrZXlHVEUiLCJrZXlHVEUiXSxbImtleUdUIiwia2V5R1QiXSxbImVsZW1lbnRzSXNTdXBlcnNldCIsImVsZW1lbnRzSXNTdXBlcnNldCJdLFsiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50Il0sWyJlbGVtZW50c0NvbXBhcmUiLCJlbGVtZW50c0NvbXBhcmUiXSxbImVsZW1lbnRzVW5pb24iLCJlbGVtZW50c1VuaW9uIl0sWyJlbGVtZW50c0Rpc2pvaW50VW5pb24iLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSxbImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSxbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLFsic2V0SXNTdXBlcnNldCIsInNldElzU3VwZXJzZXQiXSxbInNldElzRGlzam9pbnQiLCJzZXRJc0Rpc2pvaW50Il0sWyJzZXRDb21wYXJlIiwic2V0Q29tcGFyZSJdLFsic2V0VW5pb24iLCJzZXRVbmlvbiJdLFsic2V0RGlzam9pbnRVbmlvbiIsInNldERpc2pvaW50VW5pb24iXSxbInNldEludGVyc2VjdGlvbiIsInNldEludGVyc2VjdGlvbiJdLFsic2V0RGlzam9pbnRTdWJ0cmFjdCIsInNldERpc2pvaW50U3VidHJhY3QiXSxbImJhZ0lzU3VwZXJiYWciLCJiYWdJc1N1cGVyYmFnIl0sWyJiYWdDb21wYXJlIiwiYmFnQ29tcGFyZSJdLFsiYmFnVW5pb24iLCJiYWdVbmlvbiJdLFsiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSW50ZXJzZWN0aW9uIl0sWyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnRGlzam9pbnRTdWJ0cmFjdCJdLFsiTSIsIk0iXSxbImdldFJhbmtDb3ZlciIsImdldFJhbmtDb3ZlciJdLFsiaXNQYXR0ZXJuIiwiaXNQYXR0ZXJuIl0sWyJhc3NlcnRQYXR0ZXJuIiwiYXNzZXJ0UGF0dGVybiJdLFsibWF0Y2hlcyIsIm1hdGNoZXMiXSxbImlzQ29weVNldCIsImlzQ29weVNldCJdLFsiaXNDb3B5TWFwIiwiaXNDb3B5TWFwIl1dLCJAZW5kby9leG8iOltbImluaXRFbXB0eSIsImluaXRFbXB0eSJdLFsiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzcyJdLFsiZGVmaW5lRXhvQ2xhc3NLaXQiLCJkZWZpbmVFeG9DbGFzc0tpdCJdLFsibWFrZUV4byIsIm1ha2VFeG8iXV0sIi4vbGVnYWN5L2xlZ2FjeU1hcC5qcyI6W1sibWFrZUxlZ2FjeU1hcCIsIm1ha2VMZWdhY3lNYXAiXV0sIi4vbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiOltbIm1ha2VMZWdhY3lXZWFrTWFwIiwibWFrZUxlZ2FjeVdlYWtNYXAiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibXVzdE1hdGNoIjpbIm11c3RNYXRjaCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADXs6x+PwUAAD8FAAAyAAAAQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEvc3JjL2xlZ2FjeS9sZWdhY3lNYXAuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsibWFrZUxlZ2FjeU1hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTGVnYWN5TWFwPSh0YWc9J2tleScpPT57XG5jb25zdCBtPW5ldyBNYXAoKTtcbmNvbnN0IGFzc2VydEtleURvZXNOb3RFeGlzdD0oa2V5KT0+XG4hbS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IGFscmVhZHkgcmVnaXN0ZXJlZDogJHtrZXl9YDtcbmNvbnN0IGFzc2VydEtleUV4aXN0cz0oa2V5KT0+XG5tLmhhcyhrZXkpfHxGYWlsIGAke3EodGFnKX0gbm90IGZvdW5kOiAke2tleX1gO1xucmV0dXJuIGhhcmRlbih7XG5oYXM6KGtleSk9Pntcbi8vXG4vL1xuLy9cbnJldHVybiBtLmhhcyhrZXkpO1xuIH0sXG5pbml0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlEb2VzTm90RXhpc3Qoa2V5KTtcbm0uc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmdldDooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5yZXR1cm4gbS5nZXQoa2V5KTtcbiB9LFxuc2V0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbm0uc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5tLmRlbGV0ZShrZXkpO1xuIH0sXG5rZXlzOigpPT5tLmtleXMoKSxcbnZhbHVlczooKT0+bS52YWx1ZXMoKSxcbmVudHJpZXM6KCk9Pm0uZW50cmllcygpLFxuZ2V0U2l6ZTooKT0+bS5zaXplLFxuY2xlYXI6KCk9Pm0uY2xlYXIoKX0pO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VMZWdhY3lNYXAobWFrZUxlZ2FjeU1hcCk7XG5oYXJkZW4obWFrZUxlZ2FjeU1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTGVnYWN5TWFwIjpbIm1ha2VMZWdhY3lNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAMgFV9gEFAAABBQAANgAAAEBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxNy4xL3NyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlTGVnYWN5V2Vha01hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUxlZ2FjeVdlYWtNYXA9KHRhZz0na2V5Jyk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdtPW5ldyBXZWFrTWFwKCk7XG5jb25zdCBhc3NlcnRLZXlEb2VzTm90RXhpc3Q9KGtleSk9PlxuIXdtLmhhcyhrZXkpfHxGYWlsIGAke3EodGFnKX0gYWxyZWFkeSByZWdpc3RlcmVkOiAke2tleX1gO1xuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbndtLmhhcyhrZXkpfHxGYWlsIGAke3EodGFnKX0gbm90IGZvdW5kOiAke2tleX1gO1xucmV0dXJuIGhhcmRlbih7XG5oYXM6KGtleSk9Pntcbi8vXG4vL1xuLy9cbnJldHVybiB3bS5oYXMoa2V5KTtcbiB9LFxuaW5pdDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RG9lc05vdEV4aXN0KGtleSk7XG53bS5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZ2V0OihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbi8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgKi93bS5nZXQoa2V5KSk7XG4gfSxcbnNldDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG53bS5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbndtLmRlbGV0ZShrZXkpO1xuIH19KTtcblxuIH07JGjigI1fb25jZS5tYWtlTGVnYWN5V2Vha01hcChtYWtlTGVnYWN5V2Vha01hcCk7XG5oYXJkZW4obWFrZUxlZ2FjeVdlYWtNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUxlZ2FjeVdlYWtNYXAiOlsibWFrZUxlZ2FjeVdlYWtNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAl46XO70QAAC9EAAANwAAAEBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxNy4xL3NyYy9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wYXR0ZXJucyIsIi4vc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwiLi9zdG9yZS11dGlscy5qcyJdLCJleHBvcnRzIjpbIm1ha2VNYXBTdG9yZU1ldGhvZHMiLCJtYWtlU2NhbGFyTWFwU3RvcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFyLGFzc2VydFBhc3NhYmxlLGZpbHRlckl0ZXJhYmxlLG1hcEl0ZXJhYmxlLGNvbXBhcmVSYW5rLGFzc2VydFNjYWxhcktleSxtYWtlQ29weU1hcCxtYXRjaGVzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzLG1ha2VDdXJyZW50S2V5c0tpdDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRo4oCNX2EpXV0sW1wiZmlsdGVySXRlcmFibGVcIiwgWyRo4oCNX2EgPT4gKGZpbHRlckl0ZXJhYmxlID0gJGjigI1fYSldXSxbXCJtYXBJdGVyYWJsZVwiLCBbJGjigI1fYSA9PiAobWFwSXRlcmFibGUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiY29tcGFyZVJhbmtcIiwgWyRo4oCNX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJhc3NlcnRTY2FsYXJLZXlcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFNjYWxhcktleSA9ICRo4oCNX2EpXV0sW1wibWFrZUNvcHlNYXBcIiwgWyRo4oCNX2EgPT4gKG1ha2VDb3B5TWFwID0gJGjigI1fYSldXSxbXCJtYXRjaGVzXCIsIFskaOKAjV9hID0+IChtYXRjaGVzID0gJGjigI1fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRo4oCNX2EgPT4gKG11c3RNYXRjaCA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRo4oCNX2EpXV1dXSxbXCIuL3NjYWxhcldlYWtNYXBTdG9yZS5qc1wiLCBbW1wibWFrZVdlYWtNYXBTdG9yZU1ldGhvZHNcIiwgWyRo4oCNX2EgPT4gKG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzID0gJGjigI1fYSldXV1dLFtcIi4vc3RvcmUtdXRpbHMuanNcIiwgW1tcIm1ha2VDdXJyZW50S2V5c0tpdFwiLCBbJGjigI1fYSA9PiAobWFrZUN1cnJlbnRLZXlzS2l0ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNYXBTdG9yZU1ldGhvZHM9KFxuanNtYXAsXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbnRhZz0na2V5Jyk9Plxue1xuY29uc3R7YXNzZXJ0VXBkYXRlT25BZGQsYXNzZXJ0VXBkYXRlT25EZWxldGUsaXRlcmFibGVLZXlzfT1cbm1ha2VDdXJyZW50S2V5c0tpdChcbigpPT5qc21hcC5rZXlzKCksXG4oayk9PmpzbWFwLmhhcyhrKSxcbmNvbXBhcmVSYW5rLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZSxcbnRhZyk7XG5cblxuLypcblxuXG5cbiAgICovXG5jb25zdCBrZXlzPShrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+e1xuaWYoa2V5UGF0dD09PXVuZGVmaW5lZCYmdmFsdWVQYXR0PT09dW5kZWZpbmVkKXtcbnJldHVybiBpdGVyYWJsZUtleXM7XG4gfVxuY29uc3QgZmlsdGVyPShrKT0+e1xuaWYoa2V5UGF0dCE9PXVuZGVmaW5lZCYmIW1hdGNoZXMoayxrZXlQYXR0KSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuLy9cbmlmKHZhbHVlUGF0dCE9PXVuZGVmaW5lZCYmIW1hdGNoZXMoanNtYXAuZ2V0KGspLHZhbHVlUGF0dCkpe1xucmV0dXJuIGZhbHNlO1xuIH1cbnJldHVybiB0cnVlO1xuIH07XG5yZXR1cm4gZmlsdGVySXRlcmFibGUoaXRlcmFibGVLZXlzLGZpbHRlcik7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCB2YWx1ZXM9KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT5cbm1hcEl0ZXJhYmxlKGtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpLChrKT0+LyogICAgICAgICAgICAqL2pzbWFwLmdldChrKSk7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgZW50cmllcz0oa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PlxubWFwSXRlcmFibGUoa2V5cyhrZXlQYXR0LHZhbHVlUGF0dCksKGspPT5bXG5rLFxuLyogICAgICAgICAgICAqL2pzbWFwLmdldChrKV0pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuLi4ubWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMoXG5qc21hcCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovYXNzZXJ0VXBkYXRlT25BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG5hc3NlcnRVcGRhdGVPbkRlbGV0ZSxcbnRhZyksXG5cbmtleXMsXG52YWx1ZXMsXG5lbnRyaWVzLFxuXG5zbmFwc2hvdDooa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PlxubWFrZUNvcHlNYXAoZW50cmllcyhrZXlQYXR0LHZhbHVlUGF0dCkpLFxuXG5nZXRTaXplOihrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5rZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQ/XG5qc21hcC5zaXplOlxuWy4uLmtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpXS5sZW5ndGgsXG5cbmNsZWFyOihrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+e1xuaWYoa2V5UGF0dD09PXVuZGVmaW5lZCYmdmFsdWVQYXR0PT09dW5kZWZpbmVkKXtcbmpzbWFwLmNsZWFyKCk7XG4gfVxuZm9yKGNvbnN0IGtleSBvZiBrZXlzKGtleVBhdHQsdmFsdWVQYXR0KSl7XG5qc21hcC5kZWxldGUoa2V5KTtcbiB9XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlTWFwU3RvcmVNZXRob2RzKG1ha2VNYXBTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJNYXBTdG9yZT0oXG50YWc9J2tleScsXG57a2V5U2hhcGU9dW5kZWZpbmVkLHZhbHVlU2hhcGU9dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QganNtYXA9bmV3IE1hcCgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuaWYodmFsdWVTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKHZhbHVlU2hhcGUpO1xuIH1cblxuY29uc3QgYXNzZXJ0S1ZPa1RvU2V0PShfa2V5LHZhbHVlKT0+e1xuLy9cbi8vXG5oYXJkZW4odmFsdWUpO1xuXG5hc3NlcnRQYXNzYWJsZSh2YWx1ZSk7XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaCh2YWx1ZSx2YWx1ZVNoYXBlLCdtYXBTdG9yZSB2YWx1ZScpO1xuIH1cbiB9O1xuXG5jb25zdCBhc3NlcnRLVk9rVG9BZGQ9KGtleSx2YWx1ZSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5cbmFzc2VydFNjYWxhcktleShrZXkpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnbWFwU3RvcmUga2V5Jyk7XG4gfVxuYXNzZXJ0S1ZPa1RvU2V0KGtleSx2YWx1ZSk7XG4gfTtcblxucmV0dXJuIEZhciggYHNjYWxhciBNYXBTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VNYXBTdG9yZU1ldGhvZHMoXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbnVuZGVmaW5lZCxcbnRhZyl9KTtcblxuXG4gfTskaOKAjV9vbmNlLm1ha2VTY2FsYXJNYXBTdG9yZShtYWtlU2NhbGFyTWFwU3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJNYXBTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWFwU3RvcmVNZXRob2RzIjpbIm1ha2VNYXBTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhck1hcFN0b3JlIjpbIm1ha2VTY2FsYXJNYXBTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACNSUio6gsAAOoLAAA3AAAAQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEvc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIiwiLi9zY2FsYXJXZWFrU2V0U3RvcmUuanMiLCIuL3N0b3JlLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsibWFrZVNjYWxhclNldFN0b3JlIiwibWFrZVNldFN0b3JlTWV0aG9kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYXIsZmlsdGVySXRlcmFibGUsY29tcGFyZVJhbmssYXNzZXJ0U2NhbGFyS2V5LG1ha2VDb3B5U2V0LG1hdGNoZXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4sbWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMsbWFrZUN1cnJlbnRLZXlzS2l0OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV0sW1wiZmlsdGVySXRlcmFibGVcIiwgWyRo4oCNX2EgPT4gKGZpbHRlckl0ZXJhYmxlID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImNvbXBhcmVSYW5rXCIsIFskaOKAjV9hID0+IChjb21wYXJlUmFuayA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiYXNzZXJ0U2NhbGFyS2V5XCIsIFskaOKAjV9hID0+IChhc3NlcnRTY2FsYXJLZXkgPSAkaOKAjV9hKV1dLFtcIm1ha2VDb3B5U2V0XCIsIFskaOKAjV9hID0+IChtYWtlQ29weVNldCA9ICRo4oCNX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjigI1fYSA9PiAobWF0Y2hlcyA9ICRo4oCNX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaOKAjV9hID0+IChtdXN0TWF0Y2ggPSAkaOKAjV9hKV1dLFtcImFzc2VydFBhdHRlcm5cIiwgWyRo4oCNX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaOKAjV9hKV1dXV0sW1wiLi9zY2FsYXJXZWFrU2V0U3RvcmUuanNcIiwgW1tcIm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzXCIsIFskaOKAjV9hID0+IChtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyA9ICRo4oCNX2EpXV1dXSxbXCIuL3N0b3JlLXV0aWxzLmpzXCIsIFtbXCJtYWtlQ3VycmVudEtleXNLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VDdXJyZW50S2V5c0tpdCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTZXRTdG9yZU1ldGhvZHM9KFxuanNzZXQsXG5hc3NlcnRLZXlPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5jb25zdHthc3NlcnRVcGRhdGVPbkFkZCxhc3NlcnRVcGRhdGVPbkRlbGV0ZSxpdGVyYWJsZUtleXN9PVxubWFrZUN1cnJlbnRLZXlzS2l0KFxuKCk9Pmpzc2V0LmtleXMoKSxcbihrKT0+anNzZXQuaGFzKGspLFxuY29tcGFyZVJhbmssXG5hc3NlcnRLZXlPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZSxcbmtleU5hbWUpO1xuXG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGtleXM9KGtleVBhdHQ9dW5kZWZpbmVkKT0+XG5rZXlQYXR0PT09dW5kZWZpbmVkP1xuaXRlcmFibGVLZXlzOlxuZmlsdGVySXRlcmFibGUoaXRlcmFibGVLZXlzLChrKT0+bWF0Y2hlcyhrLGtleVBhdHQpKTtcblxucmV0dXJuIGhhcmRlbih7XG4uLi5tYWtlV2Vha1NldFN0b3JlTWV0aG9kcyhcbmpzc2V0LFxuYXNzZXJ0VXBkYXRlT25BZGQsXG5hc3NlcnRVcGRhdGVPbkRlbGV0ZSxcbmtleU5hbWUpLFxuXG5cbmtleXMsXG5cbnZhbHVlczprZXlzLFxuXG5zbmFwc2hvdDooa2V5UGF0dD11bmRlZmluZWQpPT5tYWtlQ29weVNldChrZXlzKGtleVBhdHQpKSxcblxuZ2V0U2l6ZTooa2V5UGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQ/anNzZXQuc2l6ZTpbLi4ua2V5cyhrZXlQYXR0KV0ubGVuZ3RoLFxuXG5jbGVhcjooa2V5UGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkKXtcbmpzc2V0LmNsZWFyKCk7XG4gfVxuZm9yKGNvbnN0IGtleSBvZiBrZXlzKGtleVBhdHQpKXtcbmpzc2V0LmRlbGV0ZShrZXkpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZVNldFN0b3JlTWV0aG9kcyhtYWtlU2V0U3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyU2V0U3RvcmU9KFxudGFnPSdrZXknLFxue2tleVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzc2V0PW5ldyBTZXQoKTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4oa2V5U2hhcGUpO1xuIH1cblxuY29uc3QgYXNzZXJ0S2V5T2tUb0FkZD0oa2V5KT0+e1xuLy9cbi8vXG5oYXJkZW4oa2V5KTtcblxuYXNzZXJ0U2NhbGFyS2V5KGtleSk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2goa2V5LGtleVNoYXBlLCdzZXRTdG9yZSBrZXknKTtcbiB9XG4gfTtcblxucmV0dXJuIEZhciggYHNjYWxhciBTZXRTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VTZXRTdG9yZU1ldGhvZHMoanNzZXQsYXNzZXJ0S2V5T2tUb0FkZCx1bmRlZmluZWQsdGFnKX0pO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VTY2FsYXJTZXRTdG9yZShtYWtlU2NhbGFyU2V0U3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU2V0U3RvcmVNZXRob2RzIjpbIm1ha2VTZXRTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhclNldFN0b3JlIjpbIm1ha2VTY2FsYXJTZXRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABKkRf1yQ0AAMkNAAA7AAAAQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEvc3JjL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSIsIm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwsRmFyLGFzc2VydFBhc3NhYmxlLHBhc3NTdHlsZU9mLGdldENvcHlNYXBFbnRyaWVzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLGlzQ29weU1hcDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRo4oCNX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJnZXRDb3B5TWFwRW50cmllc1wiLCBbJGjigI1fYSA9PiAoZ2V0Q29weU1hcEVudHJpZXMgPSAkaOKAjV9hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAobXVzdE1hdGNoID0gJGjigI1fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjigI1fYSldXSxbXCJpc0NvcHlNYXBcIiwgWyRo4oCNX2EgPT4gKGlzQ29weU1hcCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlV2Vha01hcFN0b3JlTWV0aG9kcz0oXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydEtleU9rVG9EZWxldGU9dW5kZWZpbmVkLFxua2V5TmFtZT0na2V5Jyk9Plxue1xuY29uc3QgYXNzZXJ0S2V5RG9lc05vdEV4aXN0PShrZXkpPT5cbiFqc21hcC5oYXMoa2V5KXx8RmFpbCBgJHtxKGtleU5hbWUpfSBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7a2V5fWA7XG5cbmNvbnN0IGFzc2VydEtleUV4aXN0cz0oa2V5KT0+XG5qc21hcC5oYXMoa2V5KXx8RmFpbCBgJHtxKGtleU5hbWUpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5cbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4ganNtYXAuaGFzKGtleSk7XG4gfSxcbmdldDooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG4vL1xucmV0dXJuICgvKiAgICAgICAgICAgICovanNtYXAuZ2V0KGtleSkpO1xuIH0sXG5cbmluaXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleURvZXNOb3RFeGlzdChrZXkpO1xuYXNzZXJ0S1ZPa1RvQWRkKGtleSx2YWx1ZSk7XG5qc21hcC5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuc2V0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbmFzc2VydEtWT2tUb1NldChrZXksdmFsdWUpO1xuanNtYXAuc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5pZihhc3NlcnRLZXlPa1RvRGVsZXRlIT09dW5kZWZpbmVkKXtcbmFzc2VydEtleU9rVG9EZWxldGUoa2V5KTtcbiB9XG5qc21hcC5kZWxldGUoa2V5KTtcbiB9LFxuXG5hZGRBbGw6KGVudHJpZXMpPT57XG5pZih0eXBlb2YgZW50cmllc1tTeW1ib2wuaXRlcmF0b3JdIT09J2Z1bmN0aW9uJyl7XG5pZihPYmplY3QuaXNGcm96ZW4oZW50cmllcykmJmlzQ29weU1hcChlbnRyaWVzKSl7XG4vL1xuZW50cmllcz1nZXRDb3B5TWFwRW50cmllcyhlbnRyaWVzKTtcbiB9ZWxzZXtcbkZhaWwgYHByb3ZpZGVkIGRhdGEgc291cmNlIGlzIG5vdCBpdGVyYWJsZTogJHtlbnRyaWVzfWA7XG4gfVxuIH1cbmZvcihjb25zdFtrZXksdmFsdWVdb2YvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovZW50cmllcyl7XG4vL1xuYXNzZXJ0S1ZPa1RvQWRkKGtleSx2YWx1ZSk7XG5qc21hcC5zZXQoa2V5LHZhbHVlKTtcbiB9XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlV2Vha01hcFN0b3JlTWV0aG9kcyhtYWtlV2Vha01hcFN0b3JlTWV0aG9kcyk7XG5jb25zdCAgICAgICAgbWFrZVNjYWxhcldlYWtNYXBTdG9yZT0oXG50YWc9J2tleScsXG57bG9uZ0xpdmVkPXRydWUsa2V5U2hhcGU9dW5kZWZpbmVkLHZhbHVlU2hhcGU9dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QganNtYXA9bmV3KGxvbmdMaXZlZD9XZWFrTWFwOk1hcCkoKTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4oa2V5U2hhcGUpO1xuIH1cbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybih2YWx1ZVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtWT2tUb1NldD0oX2tleSx2YWx1ZSk9Pntcbi8vXG4vL1xuaGFyZGVuKHZhbHVlKTtcblxuYXNzZXJ0UGFzc2FibGUodmFsdWUpO1xuaWYodmFsdWVTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2godmFsdWUsdmFsdWVTaGFwZSwnd2Vha01hcFN0b3JlIHZhbHVlJyk7XG4gfVxuIH07XG5cbmNvbnN0IGFzc2VydEtWT2tUb0FkZD0oa2V5LHZhbHVlKT0+e1xuLy9cbi8vXG5oYXJkZW4oa2V5KTtcbnBhc3NTdHlsZU9mKGtleSk9PT0ncmVtb3RhYmxlJ3x8XG5GYWlsIGBPbmx5IHJlbW90YWJsZXMgY2FuIGJlIGtleXMgb2Ygc2NhbGFyIFdlYWtNYXBTdG9yZXM6ICR7a2V5fWA7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2goa2V5LGtleVNoYXBlLCd3ZWFrTWFwU3RvcmUga2V5Jyk7XG4gfVxuYXNzZXJ0S1ZPa1RvU2V0KGtleSx2YWx1ZSk7XG4gfTtcblxucmV0dXJuIEZhciggYHNjYWxhciBXZWFrTWFwU3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlV2Vha01hcFN0b3JlTWV0aG9kcyhcbmpzbWFwLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxudW5kZWZpbmVkLFxudGFnKX0pO1xuXG5cbiB9OyRo4oCNX29uY2UubWFrZVNjYWxhcldlYWtNYXBTdG9yZShtYWtlU2NhbGFyV2Vha01hcFN0b3JlKTtcbmhhcmRlbihtYWtlU2NhbGFyV2Vha01hcFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VXZWFrTWFwU3RvcmVNZXRob2RzIjpbIm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzIl0sIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiOlsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAreXenigoAAIoKAAA7AAAAQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEvc3JjL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsibWFrZVNjYWxhcldlYWtTZXRTdG9yZSIsIm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwsRmFyLHBhc3NTdHlsZU9mLGdldENvcHlTZXRLZXlzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLGlzQ29weVNldDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaOKAjV9hID0+IChwYXNzU3R5bGVPZiA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiZ2V0Q29weVNldEtleXNcIiwgWyRo4oCNX2EgPT4gKGdldENvcHlTZXRLZXlzID0gJGjigI1fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRo4oCNX2EgPT4gKG11c3RNYXRjaCA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRo4oCNX2EpXV0sW1wiaXNDb3B5U2V0XCIsIFskaOKAjV9hID0+IChpc0NvcHlTZXQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtTZXRTdG9yZU1ldGhvZHM9KFxuanNzZXQsXG5hc3NlcnRLZXlPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9PlxuanNzZXQuaGFzKGtleSl8fEZhaWwgYCR7cShrZXlOYW1lKX0gbm90IGZvdW5kOiAke2tleX1gO1xuXG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIGpzc2V0LmhhcyhrZXkpO1xuIH0sXG5cbmFkZDooa2V5KT0+e1xuYXNzZXJ0S2V5T2tUb0FkZChrZXkpO1xuanNzZXQuYWRkKGtleSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5pZihhc3NlcnRLZXlPa1RvRGVsZXRlIT09dW5kZWZpbmVkKXtcbmFzc2VydEtleU9rVG9EZWxldGUoa2V5KTtcbiB9XG5qc3NldC5kZWxldGUoa2V5KTtcbiB9LFxuXG5hZGRBbGw6KGtleXMpPT57XG5pZih0eXBlb2Yga2V5c1tTeW1ib2wuaXRlcmF0b3JdIT09J2Z1bmN0aW9uJyl7XG5pZihPYmplY3QuaXNGcm96ZW4oa2V5cykmJmlzQ29weVNldChrZXlzKSl7XG4vL1xua2V5cz1nZXRDb3B5U2V0S2V5cyhrZXlzKTtcbiB9ZWxzZXtcbkZhaWwgYHByb3ZpZGVkIGRhdGEgc291cmNlIGlzIG5vdCBpdGVyYWJsZTogJHtrZXlzfWA7XG4gfVxuIH1cbmZvcihjb25zdCBrZXkgb2YvKiAgICAgICAgICAgICAgICAgICAgICAqL2tleXMpe1xuYXNzZXJ0S2V5T2tUb0FkZChrZXkpO1xuanNzZXQuYWRkKGtleSk7XG4gfVxuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyV2Vha1NldFN0b3JlPShcbnRhZz0na2V5Jyxcbntsb25nTGl2ZWQ9dHJ1ZSxrZXlTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc3NldD1uZXcobG9uZ0xpdmVkP1dlYWtTZXQ6U2V0KSgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLZXlPa1RvQWRkPShrZXkpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xucGFzc1N0eWxlT2Yoa2V5KT09PSdyZW1vdGFibGUnfHxcbkZhaWwgYE9ubHkgcmVtb3RhYmxlcyBjYW4gYmUga2V5cyBvZiBzY2FsYXIgV2Vha1N0b3JlczogJHtrZXl9YDtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ3dlYWtTZXRTdG9yZSBrZXknKTtcbiB9XG4gfTtcblxucmV0dXJuIEZhciggYHNjYWxhciBXZWFrU2V0U3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlV2Vha1NldFN0b3JlTWV0aG9kcyhqc3NldCxhc3NlcnRLZXlPa1RvQWRkLHVuZGVmaW5lZCx0YWcpfSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZVNjYWxhcldlYWtTZXRTdG9yZShtYWtlU2NhbGFyV2Vha1NldFN0b3JlKTtcbmhhcmRlbihtYWtlU2NhbGFyV2Vha1NldFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VXZWFrU2V0U3RvcmVNZXRob2RzIjpbIm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzIl0sIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiOlsibWFrZVNjYWxhcldlYWtTZXRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACtViviwA4AAMAOAAA0AAAAQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEvc3JjL3N0b3Jlcy9zdG9yZS11dGlscy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJhcHBlbmRUb1N0b3JlZEFycmF5IiwiaXNDb3B5TWFwIiwiaXNDb3B5U2V0IiwibWFrZUF0b21pY1Byb3ZpZGVyIiwibWFrZUN1cnJlbnRLZXlzS2l0IiwicHJvdmlkZUxhenkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxGYXIsTSxtYXRjaGVzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjigI1fYSA9PiAobWF0Y2hlcyA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuICovXG5cbi8vXG4vL1xuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldD0ocyk9Pm1hdGNoZXMocyxNLnNldCgpKTtcblxuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5pc0NvcHlTZXQoaXNDb3B5U2V0KTtcbmNvbnN0ICAgICAgICBpc0NvcHlNYXA9KG0pPT5tYXRjaGVzKG0sTS5tYXAoKSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuaXNDb3B5TWFwKGlzQ29weU1hcCk7XG5jb25zdCAgICAgICAgbWFrZUN1cnJlbnRLZXlzS2l0PShcbmdldFJhd0tleXMsXG5jaGVja0hhcyxcbmNvbXBhcmUsXG5hc3NlcnRPa1RvQWRkLFxuYXNzZXJ0T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5sZXQgdXBkYXRlQ291bnQ9MDtcbmxldCBzb3J0ZWRLZXlzTWVtbztcblxuY29uc3QgYXNzZXJ0VXBkYXRlT25BZGQ9KGssdj11bmRlZmluZWQpPT57XG5hc3NlcnRPa1RvQWRkKGssdik7XG51cGRhdGVDb3VudCs9MTtcbnNvcnRlZEtleXNNZW1vPXVuZGVmaW5lZDtcbiB9O1xuXG5jb25zdCBhc3NlcnRVcGRhdGVPbkRlbGV0ZT0oayk9PmFzc2VydE9rVG9EZWxldGUmJmFzc2VydE9rVG9EZWxldGUoayk7XG5cbmNvbnN0IGdldFNvcnRlZEtleXM9KCk9PntcbmlmKHNvcnRlZEtleXNNZW1vPT09dW5kZWZpbmVkKXtcbnNvcnRlZEtleXNNZW1vPWhhcmRlbihbLi4uZ2V0UmF3S2V5cygpXS5zb3J0KGNvbXBhcmUpKTtcbiB9XG5yZXR1cm4gc29ydGVkS2V5c01lbW87XG4gfTtcblxuY29uc3QgaXRlcmFibGVLZXlzPUZhcignSXRlcmFibGUgb2Yga2V5cycse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmNvbnN0IGdlbmVyYXRpb249dXBkYXRlQ291bnQ7XG5nZXRTb3J0ZWRLZXlzKCk7XG5jb25zdCBsZW49c29ydGVkS2V5c01lbW8ubGVuZ3RoO1xubGV0IGk9MDtcbnJldHVybiBGYXIoJ0l0ZXJhdG9yIG9mIGtleXMnLHtcbm5leHQ6KCk9PntcbmdlbmVyYXRpb249PT11cGRhdGVDb3VudHx8RmFpbCBgU3RvcmUgJHtxKGtleU5hbWUpfSBjdXJzb3Igc3RhbGVgO1xuLy9cbi8vXG5mb3IoOzspe1xuaWYoaTxsZW4pe1xuY29uc3QgdmFsdWU9c29ydGVkS2V5c01lbW9baV07XG5pKz0xO1xuaWYoY2hlY2tIYXModmFsdWUpKXtcbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWV9KTtcbiB9XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfVxuIH1cbiB9fSk7XG5cbiB9fSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxuaXRlcmFibGVLZXlzfSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZUN1cnJlbnRLZXlzS2l0KG1ha2VDdXJyZW50S2V5c0tpdCk7XG5oYXJkZW4obWFrZUN1cnJlbnRLZXlzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJvdmlkZUxhenk9KG1hcFN0b3JlLGtleSxtYWtlVmFsdWUpPT57XG5pZighbWFwU3RvcmUuaGFzKGtleSkpe1xubWFwU3RvcmUuaW5pdChrZXksbWFrZVZhbHVlKGtleSkpO1xuIH1cbnJldHVybiBtYXBTdG9yZS5nZXQoa2V5KTtcbiB9OyRo4oCNX29uY2UucHJvdmlkZUxhenkocHJvdmlkZUxhenkpO1xuaGFyZGVuKHByb3ZpZGVMYXp5KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUF0b21pY1Byb3ZpZGVyPShzdG9yZSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGVuZGluZz1uZXcgTWFwKCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVBc3luYz0oa2V5LG1ha2VWYWx1ZSxmaW5pc2hWYWx1ZSk9PntcbmlmKHN0b3JlLmhhcyhrZXkpKXtcbnJldHVybiBQcm9taXNlLnJlc29sdmUoc3RvcmUuZ2V0KGtleSkpO1xuIH1cbmlmKCFwZW5kaW5nLmhhcyhrZXkpKXtcbmNvbnN0IHZhbFA9bWFrZVZhbHVlKGtleSkuXG50aGVuKCh2KT0+e1xuc3RvcmUuaW5pdChrZXksdik7XG5yZXR1cm4gdjtcbiB9KS5cbnRoZW4oKHYpPT57XG5pZihmaW5pc2hWYWx1ZSl7XG5yZXR1cm4gZmluaXNoVmFsdWUoa2V5LHYpLnRoZW4oKCk9PnYpO1xuIH1cbnJldHVybiB2O1xuIH0pLlxuZmluYWxseSgoKT0+e1xucGVuZGluZy5kZWxldGUoa2V5KTtcbiB9KTtcbnBlbmRpbmcuc2V0KGtleSx2YWxQKTtcbiB9XG5jb25zdCB2YWxQPXBlbmRpbmcuZ2V0KGtleSk7XG5hc3NlcnQodmFsUCk7XG5yZXR1cm4gdmFsUDtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtwcm92aWRlQXN5bmN9KTtcbiB9OyRo4oCNX29uY2UubWFrZUF0b21pY1Byb3ZpZGVyKG1ha2VBdG9taWNQcm92aWRlcik7XG5oYXJkZW4obWFrZUF0b21pY1Byb3ZpZGVyKTtcbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhcHBlbmRUb1N0b3JlZEFycmF5PShtYXBTdG9yZSxrZXksaXRlbSk9PntcbmlmKG1hcFN0b3JlLmhhcyhrZXkpKXtcbmNvbnN0IGV4dGFudD1tYXBTdG9yZS5nZXQoa2V5KTtcbm1hcFN0b3JlLnNldChrZXksaGFyZGVuKFsuLi5leHRhbnQsaXRlbV0pKTtcbiB9ZWxzZXtcbm1hcFN0b3JlLmluaXQoa2V5LGhhcmRlbihbaXRlbV0pKTtcbiB9XG4gfTskaOKAjV9vbmNlLmFwcGVuZFRvU3RvcmVkQXJyYXkoYXBwZW5kVG9TdG9yZWRBcnJheSk7XG5oYXJkZW4oYXBwZW5kVG9TdG9yZWRBcnJheSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc0NvcHlTZXQiOlsiaXNDb3B5U2V0Il0sImlzQ29weU1hcCI6WyJpc0NvcHlNYXAiXSwibWFrZUN1cnJlbnRLZXlzS2l0IjpbIm1ha2VDdXJyZW50S2V5c0tpdCJdLCJwcm92aWRlTGF6eSI6WyJwcm92aWRlTGF6eSJdLCJtYWtlQXRvbWljUHJvdmlkZXIiOlsibWFrZUF0b21pY1Byb3ZpZGVyIl0sImFwcGVuZFRvU3RvcmVkQXJyYXkiOlsiYXBwZW5kVG9TdG9yZWRBcnJheSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACHklKnTwEAAE8BAAAnAAAAQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIdAXNyyFgAAshYAAC4AAABAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy11MTcuMS9zcmMvZXhvLXV0aWxzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiLCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lRHVyYWJsZUV4b0NsYXNzIiwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiaWdub3JlQ29udGV4dCIsIm1ha2VFeG9VdGlscyIsInByZXBhcmVFeG8iLCJwcmVwYXJlRXhvQ2xhc3MiLCJwcmVwYXJlRXhvQ2xhc3NLaXQiLCJwcmVwYXJlS2luZCIsInByZXBhcmVLaW5kTXVsdGkiLCJwcmVwYXJlU2luZ2xldG9uIiwicHJvdmlkZUtpbmRIYW5kbGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGluaXRFbXB0eSxwcm92aWRlLGdsb2JhbFZhdERhdGE7JGjigI1faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiaW5pdEVtcHR5XCIsIFskaOKAjV9hID0+IChpbml0RW1wdHkgPSAkaOKAjV9hKV1dXV0sW1wiLi92YXQtZGF0YS1iaW5kaW5ncy5qc1wiLCBbW1wicHJvdmlkZVwiLCBbJGjigI1fYSA9PiAocHJvdmlkZSA9ICRo4oCNX2EpXV0sW1wiVmF0RGF0YVwiLCBbJGjigI1fYSA9PiAoZ2xvYmFsVmF0RGF0YSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cbi8qXG5cbiAqL1xuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlnbm9yZUNvbnRleHQ9XG4oZm4pPT5cbihfY29udGV4dCwuLi5hcmdzKT0+XG5mbiguLi5hcmdzKTskaOKAjV9vbmNlLmlnbm9yZUNvbnRleHQoaWdub3JlQ29udGV4dCk7XG5oYXJkZW4oaWdub3JlQ29udGV4dCk7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VFeG9VdGlscz0oVmF0RGF0YSk9PntcbmNvbnN0e1xuZGVmaW5lS2luZCxcbmRlZmluZUtpbmRNdWx0aSxcbmRlZmluZUR1cmFibGVLaW5kLFxuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSxcbm1ha2VLaW5kSGFuZGxlfT1cblZhdERhdGE7XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlS2luZEhhbmRsZT0oYmFnZ2FnZSxraW5kTmFtZSk9PlxucHJvdmlkZShiYWdnYWdlLCBgJHtraW5kTmFtZX1fa2luZEhhbmRsZWAsKCk9Pm1ha2VLaW5kSGFuZGxlKGtpbmROYW1lKSk7XG5oYXJkZW4ocHJvdmlkZUtpbmRIYW5kbGUpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlS2luZD0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlS2luZChcbnByb3ZpZGVLaW5kSGFuZGxlKGJhZ2dhZ2Usa2luZE5hbWUpLFxuaW5pdCxcbmJlaGF2aW9yLFxub3B0aW9ucyk7XG5cbmhhcmRlbihwcmVwYXJlS2luZCk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVLaW5kTXVsdGk9KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW5pdCxcbmJlaGF2aW9yLFxub3B0aW9ucz11bmRlZmluZWQpPT5cblxuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aShcbnByb3ZpZGVLaW5kSGFuZGxlKGJhZ2dhZ2Usa2luZE5hbWUpLFxuaW5pdCxcbmJlaGF2aW9yLFxub3B0aW9ucyk7XG5cbmhhcmRlbihwcmVwYXJlS2luZE11bHRpKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWZpbmVWaXJ0dWFsRXhvQ2xhc3M9KHRhZyxpbnRlcmZhY2VHdWFyZCxpbml0LG1ldGhvZHMsb3B0aW9ucyk9PlxuLy9cbmRlZmluZUtpbmQodGFnLGluaXQsbWV0aG9kcyx7XG4uLi5vcHRpb25zLFxudGhpc2Z1bE1ldGhvZHM6dHJ1ZSxcbmludGVyZmFjZUd1YXJkfSk7XG5cbmhhcmRlbihkZWZpbmVWaXJ0dWFsRXhvQ2xhc3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdD0oXG50YWcsXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5mYWNldHMsXG5vcHRpb25zKT0+XG5cbi8vXG5kZWZpbmVLaW5kTXVsdGkodGFnLGluaXQsZmFjZXRzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmRLaXR9KTtcblxuaGFyZGVuKGRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVmaW5lRHVyYWJsZUV4b0NsYXNzPShcbmtpbmRIYW5kbGUsXG5pbnRlcmZhY2VHdWFyZCxcbmluaXQsXG5tZXRob2RzLFxub3B0aW9ucyk9PlxuXG4vL1xuZGVmaW5lRHVyYWJsZUtpbmQoa2luZEhhbmRsZSxpbml0LG1ldGhvZHMse1xuLi4ub3B0aW9ucyxcbnRoaXNmdWxNZXRob2RzOnRydWUsXG5pbnRlcmZhY2VHdWFyZH0pO1xuXG5oYXJkZW4oZGVmaW5lRHVyYWJsZUV4b0NsYXNzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQ9KFxua2luZEhhbmRsZSxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpPT5cblxuLy9cbmRlZmluZUR1cmFibGVLaW5kTXVsdGkoa2luZEhhbmRsZSxpbml0LGZhY2V0cyx7XG4uLi5vcHRpb25zLFxudGhpc2Z1bE1ldGhvZHM6dHJ1ZSxcbmludGVyZmFjZUd1YXJkS2l0fSk7XG5cbmhhcmRlbihkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZUV4b0NsYXNzPShcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmludGVyZmFjZUd1YXJkLFxuaW5pdCxcbm1ldGhvZHMsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3MoXG5wcm92aWRlS2luZEhhbmRsZShiYWdnYWdlLGtpbmROYW1lKSxcbmludGVyZmFjZUd1YXJkLFxuaW5pdCxcbm1ldGhvZHMsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlRXhvQ2xhc3NLaXQ9KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxuZmFjZXRzLFxub3B0aW9ucz11bmRlZmluZWQpPT5cblxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0KFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5mYWNldHMsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVFeG9DbGFzc0tpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlRXhvPShcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmludGVyZmFjZUd1YXJkLFxubWV0aG9kcyxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG57XG5jb25zdCBtYWtlU2luZ2xldG9uPXByZXBhcmVFeG9DbGFzcyhcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmludGVyZmFjZUd1YXJkLFxuaW5pdEVtcHR5LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5cbnJldHVybiBwcm92aWRlKGJhZ2dhZ2UsIGAke2tpbmROYW1lfV9zaW5nbGV0b25gLCgpPT5tYWtlU2luZ2xldG9uKCkpO1xuIH07XG5oYXJkZW4ocHJlcGFyZUV4byk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlU2luZ2xldG9uPShiYWdnYWdlLGtpbmROYW1lLG1ldGhvZHMsb3B0aW9ucz11bmRlZmluZWQpPT5cbnByZXBhcmVFeG8oYmFnZ2FnZSxraW5kTmFtZSx1bmRlZmluZWQsbWV0aG9kcyxvcHRpb25zKTtcbmhhcmRlbihwcmVwYXJlU2luZ2xldG9uKTtcblxucmV0dXJuIGhhcmRlbih7XG5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3MsXG5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQsXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3MsXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQsXG5wcmVwYXJlRXhvQ2xhc3MsXG5wcmVwYXJlRXhvQ2xhc3NLaXQsXG5wcmVwYXJlRXhvLFxuXG5wcmVwYXJlU2luZ2xldG9uLFxucHJvdmlkZUtpbmRIYW5kbGUsXG5wcmVwYXJlS2luZCxcbnByZXBhcmVLaW5kTXVsdGl9KTtcblxuIH07JGjigI1fb25jZS5tYWtlRXhvVXRpbHMobWFrZUV4b1V0aWxzKTtcblxuY29uc3QgZ2xvYmFsRXhvVXRpbHM9bWFrZUV4b1V0aWxzKGdsb2JhbFZhdERhdGEpO1xuXG5jb25zdCAgICAgICB7XG5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3MsXG5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQsXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3MsXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQsXG5wcmVwYXJlRXhvQ2xhc3MsXG5wcmVwYXJlRXhvQ2xhc3NLaXQsXG5wcmVwYXJlRXhvLFxucHJlcGFyZVNpbmdsZXRvbn09XG5nbG9iYWxFeG9VdGlscztcblxuLypcblxuICovJGjigI1fb25jZS5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3MoZGVmaW5lVmlydHVhbEV4b0NsYXNzKTskaOKAjV9vbmNlLmRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdChkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQpOyRo4oCNX29uY2UuZGVmaW5lRHVyYWJsZUV4b0NsYXNzKGRlZmluZUR1cmFibGVFeG9DbGFzcyk7JGjigI1fb25jZS5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQoZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0KTskaOKAjV9vbmNlLnByZXBhcmVFeG9DbGFzcyhwcmVwYXJlRXhvQ2xhc3MpOyRo4oCNX29uY2UucHJlcGFyZUV4b0NsYXNzS2l0KHByZXBhcmVFeG9DbGFzc0tpdCk7JGjigI1fb25jZS5wcmVwYXJlRXhvKHByZXBhcmVFeG8pOyRo4oCNX29uY2UucHJlcGFyZVNpbmdsZXRvbihwcmVwYXJlU2luZ2xldG9uKTtcbmNvbnN0ICAgICAgIHtwcm92aWRlS2luZEhhbmRsZSxwcmVwYXJlS2luZCxwcmVwYXJlS2luZE11bHRpfT1cbmdsb2JhbEV4b1V0aWxzOyRo4oCNX29uY2UucHJvdmlkZUtpbmRIYW5kbGUocHJvdmlkZUtpbmRIYW5kbGUpOyRo4oCNX29uY2UucHJlcGFyZUtpbmQocHJlcGFyZUtpbmQpOyRo4oCNX29uY2UucHJlcGFyZUtpbmRNdWx0aShwcmVwYXJlS2luZE11bHRpKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Imlnbm9yZUNvbnRleHQiOlsiaWdub3JlQ29udGV4dCJdLCJtYWtlRXhvVXRpbHMiOlsibWFrZUV4b1V0aWxzIl0sImRlZmluZVZpcnR1YWxFeG9DbGFzcyI6WyJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3MiXSwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IjpbImRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCJdLCJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiOlsiZGVmaW5lRHVyYWJsZUV4b0NsYXNzIl0sImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCI6WyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQiXSwicHJlcGFyZUV4b0NsYXNzIjpbInByZXBhcmVFeG9DbGFzcyJdLCJwcmVwYXJlRXhvQ2xhc3NLaXQiOlsicHJlcGFyZUV4b0NsYXNzS2l0Il0sInByZXBhcmVFeG8iOlsicHJlcGFyZUV4byJdLCJwcmVwYXJlU2luZ2xldG9uIjpbInByZXBhcmVTaW5nbGV0b24iXSwicHJvdmlkZUtpbmRIYW5kbGUiOlsicHJvdmlkZUtpbmRIYW5kbGUiXSwicHJlcGFyZUtpbmQiOlsicHJlcGFyZUtpbmQiXSwicHJlcGFyZUtpbmRNdWx0aSI6WyJwcmVwYXJlS2luZE11bHRpIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAN1zog6tCAAArQgAACoAAABAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy11MTcuMS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSIsIi4vdmF0LWRhdGEtYmluZGluZ3MuanMiLCIuL2V4by11dGlscy5qcyJdLCJleHBvcnRzIjpbImRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCIsImRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCIsIm1ha2VTY2FsYXJNYXBTdG9yZSIsIm1ha2VTY2FsYXJNYXBTdG9yZSIsInByb3ZpZGVQcm9taXNlV2F0Y2hlciIsInByb3ZpZGVQcm9taXNlV2F0Y2hlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtdXSxbXCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzXCIsIFtdXSxbXCIuL2V4by11dGlscy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7IkBhZ29yaWMvc3RvcmUiOltbIk0iLCJNIl0sWyJtYWtlU2NhbGFyTWFwU3RvcmUiLCJtYWtlU2NhbGFyTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIl0sWyJtYWtlU2NhbGFyU2V0U3RvcmUiLCJtYWtlU2NhbGFyU2V0U3RvcmUiXSxbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl1dLCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIjpbWyJtYWtlS2luZEhhbmRsZSIsIm1ha2VLaW5kSGFuZGxlIl0sWyJwcm92aWRlUHJvbWlzZVdhdGNoZXIiLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiXSxbIndhdGNoUHJvbWlzZSIsIndhdGNoUHJvbWlzZSJdLFsibWFrZVNjYWxhckJpZ01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ01hcFN0b3JlIl0sWyJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSJdLFsibWFrZVNjYWxhckJpZ1NldFN0b3JlIiwibWFrZVNjYWxhckJpZ1NldFN0b3JlIl0sWyJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSJdLFsiY2FuQmVEdXJhYmxlIiwiY2FuQmVEdXJhYmxlIl0sWyJwaWNrRmFjZXQiLCJwaWNrRmFjZXQiXSxbInBhcnRpYWxBc3NpZ24iLCJwYXJ0aWFsQXNzaWduIl0sWyJwcm92aWRlIiwicHJvdmlkZSJdLFsicHJvdmlkZUR1cmFibGVNYXBTdG9yZSIsInByb3ZpZGVEdXJhYmxlTWFwU3RvcmUiXSxbInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiXSxbInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiLCJwcm92aWRlRHVyYWJsZVNldFN0b3JlIl0sWyJwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIl0sWyJkZWZpbmVLaW5kIiwiZGVmaW5lS2luZCJdLFsiZGVmaW5lS2luZE11bHRpIiwiZGVmaW5lS2luZE11bHRpIl0sWyJkZWZpbmVEdXJhYmxlS2luZCIsImRlZmluZUR1cmFibGVLaW5kIl0sWyJkZWZpbmVEdXJhYmxlS2luZE11bHRpIiwiZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSJdXSwiLi9leG8tdXRpbHMuanMiOltbImRlZmluZVZpcnR1YWxFeG9DbGFzcyIsImRlZmluZVZpcnR1YWxFeG9DbGFzcyJdLFsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0Il0sWyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiLCJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiXSxbImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCIsImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCJdLFsicHJlcGFyZUV4b0NsYXNzIiwicHJlcGFyZUV4b0NsYXNzIl0sWyJwcmVwYXJlRXhvQ2xhc3NLaXQiLCJwcmVwYXJlRXhvQ2xhc3NLaXQiXSxbInByZXBhcmVFeG8iLCJwcmVwYXJlRXhvIl0sWyJwcmVwYXJlU2luZ2xldG9uIiwicHJlcGFyZVNpbmdsZXRvbiJdLFsiaWdub3JlQ29udGV4dCIsImlnbm9yZUNvbnRleHQiXSxbInByb3ZpZGVLaW5kSGFuZGxlIiwicHJvdmlkZUtpbmRIYW5kbGUiXSxbInByZXBhcmVLaW5kIiwicHJlcGFyZUtpbmQiXSxbInByZXBhcmVLaW5kTXVsdGkiLCJwcmVwYXJlS2luZE11bHRpIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABllqYkyhYAAMoWAAA2AAAAQGFnb3JpYy92YXQtZGF0YS12MC41LjMtdTE3LjEvc3JjL3ZhdC1kYXRhLWJpbmRpbmdzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJWYXREYXRhIiwiY2FuQmVEdXJhYmxlIiwiZGVmaW5lRHVyYWJsZUtpbmQiLCJkZWZpbmVEdXJhYmxlS2luZE11bHRpIiwiZGVmaW5lS2luZCIsImRlZmluZUtpbmRNdWx0aSIsIm1ha2VLaW5kSGFuZGxlIiwibWFrZVNjYWxhckJpZ01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ1NldFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSIsIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiLCJtYWtlU3RvcmVVdGlscyIsInBhcnRpYWxBc3NpZ24iLCJwaWNrRmFjZXQiLCJwcm92aWRlIiwicHJvdmlkZUR1cmFibGVNYXBTdG9yZSIsInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiLCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSIsInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIiwid2F0Y2hQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHByb3ZpZGVMYXp5OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJwcm92aWRlTGF6eVwiLCBbJGjigI1fYSA9PiAocHJvdmlkZUxhenkgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmxldCBWYXREYXRhR2xvYmFsO1xuaWYoJ1ZhdERhdGEnaW4gZ2xvYmFsVGhpcyl7XG5nbG9iYWxUaGlzLlZhdERhdGF8fEZhaWwgYFZhdERhdGEgZGVmaW5lZCBpbiBnbG9iYWwgYXMgbnVsbCBvciB1bmRlZmluZWRgO1xuLy9cblZhdERhdGFHbG9iYWw9LyogICAgICAgICAgICAgICovZ2xvYmFsVGhpcy5WYXREYXRhO1xuIH1lbHNle1xuLy9cbi8vXG4vL1xuY29uc3QgdW5hdmFpbGFibGU9KCk9PkZhaWwgYFZhdERhdGEgdW5hdmFpbGFibGVgO1xuVmF0RGF0YUdsb2JhbD17XG5kZWZpbmVLaW5kOnVuYXZhaWxhYmxlLFxuZGVmaW5lS2luZE11bHRpOnVuYXZhaWxhYmxlLFxuZGVmaW5lRHVyYWJsZUtpbmQ6dW5hdmFpbGFibGUsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpOnVuYXZhaWxhYmxlLFxubWFrZUtpbmRIYW5kbGU6dW5hdmFpbGFibGUsXG5wcm92aWRlUHJvbWlzZVdhdGNoZXI6dW5hdmFpbGFibGUsXG53YXRjaFByb21pc2U6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmU6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlOnVuYXZhaWxhYmxlLFxubWFrZVNjYWxhckJpZ1NldFN0b3JlOnVuYXZhaWxhYmxlLFxubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZTp1bmF2YWlsYWJsZSxcbmNhbkJlRHVyYWJsZTp1bmF2YWlsYWJsZX07XG5cbiB9XG5cbmNvbnN0IFZhdERhdGFFeHBvcnQ9VmF0RGF0YUdsb2JhbDskaOKAjV9vbmNlLlZhdERhdGFFeHBvcnQoVmF0RGF0YUV4cG9ydCk7XG5cblxuLypcblxuICovXG5jb25zdCAgICAgICB7XG5kZWZpbmVLaW5kLFxuZGVmaW5lS2luZE11bHRpLFxuZGVmaW5lRHVyYWJsZUtpbmQsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpfT1cblZhdERhdGFHbG9iYWw7JGjigI1fb25jZS5kZWZpbmVLaW5kKGRlZmluZUtpbmQpOyRo4oCNX29uY2UuZGVmaW5lS2luZE11bHRpKGRlZmluZUtpbmRNdWx0aSk7JGjigI1fb25jZS5kZWZpbmVEdXJhYmxlS2luZChkZWZpbmVEdXJhYmxlS2luZCk7JGjigI1fb25jZS5kZWZpbmVEdXJhYmxlS2luZE11bHRpKGRlZmluZUR1cmFibGVLaW5kTXVsdGkpO1xuXG5jb25zdCAgICAgICB7XG5tYWtlS2luZEhhbmRsZSxcbnByb3ZpZGVQcm9taXNlV2F0Y2hlcixcbndhdGNoUHJvbWlzZSxcbm1ha2VTY2FsYXJCaWdNYXBTdG9yZSxcbm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUsXG5tYWtlU2NhbGFyQmlnU2V0U3RvcmUsXG5tYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlLFxuY2FuQmVEdXJhYmxlfT1cblZhdERhdGFHbG9iYWw7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZUtpbmRIYW5kbGUobWFrZUtpbmRIYW5kbGUpOyRo4oCNX29uY2UucHJvdmlkZVByb21pc2VXYXRjaGVyKHByb3ZpZGVQcm9taXNlV2F0Y2hlcik7JGjigI1fb25jZS53YXRjaFByb21pc2Uod2F0Y2hQcm9taXNlKTskaOKAjV9vbmNlLm1ha2VTY2FsYXJCaWdNYXBTdG9yZShtYWtlU2NhbGFyQmlnTWFwU3RvcmUpOyRo4oCNX29uY2UubWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZShtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKTskaOKAjV9vbmNlLm1ha2VTY2FsYXJCaWdTZXRTdG9yZShtYWtlU2NhbGFyQmlnU2V0U3RvcmUpOyRo4oCNX29uY2UubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZShtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlKTskaOKAjV9vbmNlLmNhbkJlRHVyYWJsZShjYW5CZUR1cmFibGUpO1xuY29uc3QgICAgICAgIHBpY2tGYWNldD1cbihtYWtlcixmYWNldE5hbWUpPT5cbiguLi5hcmdzKT0+XG5tYWtlciguLi5hcmdzKVtmYWNldE5hbWVdOyRo4oCNX29uY2UucGlja0ZhY2V0KHBpY2tGYWNldCk7XG5oYXJkZW4ocGlja0ZhY2V0KTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhcnRpYWxBc3NpZ249KHRhcmdldCxzb3VyY2UpPT57XG5PYmplY3QuYXNzaWduKHRhcmdldCxzb3VyY2UpO1xuIH07JGjigI1fb25jZS5wYXJ0aWFsQXNzaWduKHBhcnRpYWxBc3NpZ24pO1xuaGFyZGVuKHBhcnRpYWxBc3NpZ24pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgICAgICAgIHByb3ZpZGU9XG4vL1xuLypcblxuXG5cblxuXG4gICAqL3Byb3ZpZGVMYXp5O1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRo4oCNX29uY2UucHJvdmlkZShwcm92aWRlKTtcbmNvbnN0ICAgICAgICBtYWtlU3RvcmVVdGlscz0oVmF0RGF0YSk9PntcbmNvbnN0e1xuLy9cbm1ha2VTY2FsYXJCaWdNYXBTdG9yZSxcbi8vXG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdTZXRTdG9yZSxcbi8vXG5tYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlfT1cblZhdERhdGE7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVNYXBTdG9yZT0oYmFnZ2FnZSxuYW1lLG9wdGlvbnM9e30pPT5cbnByb3ZpZGUoYmFnZ2FnZSxuYW1lLCgpPT5cbm1ha2VTY2FsYXJCaWdNYXBTdG9yZShuYW1lLHtkdXJhYmxlOnRydWUsLi4ub3B0aW9uc30pKTtcblxuaGFyZGVuKHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUpO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlPShiYWdnYWdlLG5hbWUsb3B0aW9ucz17fSk9PlxucHJvdmlkZShiYWdnYWdlLG5hbWUsKCk9PlxubWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZShuYW1lLHtkdXJhYmxlOnRydWUsLi4ub3B0aW9uc30pKTtcblxuaGFyZGVuKHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZVNldFN0b3JlPShiYWdnYWdlLG5hbWUsb3B0aW9ucz17fSk9PlxucHJvdmlkZShiYWdnYWdlLG5hbWUsKCk9PlxubWFrZVNjYWxhckJpZ1NldFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVTZXRTdG9yZSk7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbnByb3ZpZGVEdXJhYmxlTWFwU3RvcmUsXG5wcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlU2V0U3RvcmUsXG5wcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZX0pO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VTdG9yZVV0aWxzKG1ha2VTdG9yZVV0aWxzKTtcblxuY29uc3QgZ2xvYmFsU3RvcmVVdGlscz1tYWtlU3RvcmVVdGlscyhWYXREYXRhR2xvYmFsKTtcbmNvbnN0ICAgICAgIHtcbnByb3ZpZGVEdXJhYmxlTWFwU3RvcmUsXG5wcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlU2V0U3RvcmUsXG5wcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZX09XG5nbG9iYWxTdG9yZVV0aWxzOyRo4oCNX29uY2UucHJvdmlkZUR1cmFibGVNYXBTdG9yZShwcm92aWRlRHVyYWJsZU1hcFN0b3JlKTskaOKAjV9vbmNlLnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKTskaOKAjV9vbmNlLnByb3ZpZGVEdXJhYmxlU2V0U3RvcmUocHJvdmlkZUR1cmFibGVTZXRTdG9yZSk7JGjigI1fb25jZS5wcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZShwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJWYXREYXRhIjpbIlZhdERhdGFFeHBvcnQiXSwiZGVmaW5lS2luZCI6WyJkZWZpbmVLaW5kIl0sImRlZmluZUtpbmRNdWx0aSI6WyJkZWZpbmVLaW5kTXVsdGkiXSwiZGVmaW5lRHVyYWJsZUtpbmQiOlsiZGVmaW5lRHVyYWJsZUtpbmQiXSwiZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSI6WyJkZWZpbmVEdXJhYmxlS2luZE11bHRpIl0sIm1ha2VLaW5kSGFuZGxlIjpbIm1ha2VLaW5kSGFuZGxlIl0sInByb3ZpZGVQcm9taXNlV2F0Y2hlciI6WyJwcm92aWRlUHJvbWlzZVdhdGNoZXIiXSwid2F0Y2hQcm9taXNlIjpbIndhdGNoUHJvbWlzZSJdLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiOlsibWFrZVNjYWxhckJpZ01hcFN0b3JlIl0sIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUiOlsibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSJdLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiOlsibWFrZVNjYWxhckJpZ1NldFN0b3JlIl0sIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiOlsibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSJdLCJjYW5CZUR1cmFibGUiOlsiY2FuQmVEdXJhYmxlIl0sInBpY2tGYWNldCI6WyJwaWNrRmFjZXQiXSwicGFydGlhbEFzc2lnbiI6WyJwYXJ0aWFsQXNzaWduIl0sInByb3ZpZGUiOlsicHJvdmlkZSJdLCJtYWtlU3RvcmVVdGlscyI6WyJtYWtlU3RvcmVVdGlscyJdLCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlTWFwU3RvcmUiXSwicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiOlsicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiXSwicHJvdmlkZUR1cmFibGVTZXRTdG9yZSI6WyJwcm92aWRlRHVyYWJsZVNldFN0b3JlIl0sInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACyVHElFEQAARREAACUAAABAYWdvcmljL3ZhdHMtdjAuMTYuMC11MTcuMS9zcmMvY3JjLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJDUkMiLCJjcmMxIiwiY3JjMTAiLCJjcmMxNiIsImNyYzI0IiwiY3JjMzIiLCJjcmMzMmMiLCJjcmM2IiwiY3JjOCIsIm1vZGVscyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cblxuICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0IGVuY29kZXI9bmV3IFRleHRFbmNvZGVyKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmZ1bmN0aW9uIGNvbnZlcnQoZGF0YSl7XG5pZih0eXBlb2YgZGF0YT09PSdudW1iZXInKXtcbmNvbnN0IGJ5dGVzPVtdO1xuLy9cbi8vXG53aGlsZShkYXRhPjB8fGJ5dGVzLmxlbmd0aDw0KXtcbmJ5dGVzLnVuc2hpZnQoZGF0YSUyNTYpO1xuZGF0YT1NYXRoLmZsb29yKGRhdGEvMjU2KTtcbiB9XG5yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpO1xuIH1lbHNlIGlmKHR5cGVvZiBkYXRhPT09J3N0cmluZycpe1xucmV0dXJuIGVuY29kZXIuZW5jb2RlKGRhdGEpO1xuIH1lbHNlIGlmKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSl7XG5yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YS5idWZmZXIsZGF0YS5ieXRlT2Zmc2V0LGRhdGEuYnl0ZUxlbmd0aCk7XG4gfWVsc2UgaWYoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXtcbnJldHVybiBuZXcgVWludDhBcnJheShkYXRhKTtcbiB9XG50aHJvdyBUeXBlRXJyb3IoXG4gYGNyYyByZXF1aXJlcyAzMiBiaXQgbnVtYmVyLCBhIHN0cmluZyBvciBUeXBlZEFycmF5IGZvciBpbnB1dGApO1xuXG4gfVxuXG4vKlxuXG5cbiAqL1xuZnVuY3Rpb24gbWlycm9yKGRhdGEsd2lkdGgpe1xubGV0IHJlcz0wO1xuZm9yKGxldCBpPTA7aTx3aWR0aDtpKz0xKXtcbnJlcz1yZXM8PDF8ZGF0YSYxO1xuZGF0YT4+PTE7XG4gfVxucmV0dXJuIHJlcztcbiB9XG5cbmNsYXNzICAgICAgICBDUkN7XG4vKlxuXG5cblxuXG5cbiAgICovXG4gICAgICAgICAgIGNvbnN0cnVjdG9yKHdpZHRoLHBvbHkseG9ySW4seG9yT3V0LHJlZmxlY3Qpe1xudGhpcy53aWR0aD13aWR0aDtcbnRoaXMucG9seT1wb2x5O1xudGhpcy54b3JJbj14b3JJbjtcbnRoaXMucmVmbGVjdGVkWG9ySW49bWlycm9yKHhvckluLHdpZHRoKTtcbnRoaXMueG9yT3V0PXhvck91dDtcbnRoaXMucmVmbGVjdD1yZWZsZWN0O1xudGhpcy5tc2JNYXNrPTE8PHRoaXMud2lkdGgtMTtcbnRoaXMubWFzaz10aGlzLm1zYk1hc2stMTw8MXwxO1xudGhpcy5jcmNTaGlmdD10aGlzLndpZHRoPDg/OC10aGlzLndpZHRoOjA7XG50aGlzLnNoaWZ0ZWRYb3JJbj10aGlzLnhvckluPDx0aGlzLmNyY1NoaWZ0O1xuXG5jb25zdCB0YWJsZT10aGlzLmdlblRhYmxlKCk7XG50aGlzLnRhYmxlPXRhYmxlO1xuXG5pZih0aGlzLndpZHRoPT09OCYmIXRoaXMueG9ySW4mJiF0aGlzLnhvck91dCYmIXRoaXMucmVmbGVjdCl7XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG50aGlzLmNhbGN1bGF0ZT1mdW5jdGlvbiBjYWxjdWxhdGUoZGF0YSl7XG5jb25zdCBidWZmZXI9Y29udmVydChkYXRhKTtcbmxldCBjcmM9MDtcbmZvcihsZXQgaT0wO2k8YnVmZmVyLmxlbmd0aDtpKz0xKXtcbmNyYz10YWJsZVtjcmNeYnVmZmVyW2ldXTtcbiB9XG5yZXR1cm4gY3JjO1xuIH07XG4gfVxuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgY2FsY3VsYXRlKGRhdGEpe1xuY29uc3QgYnVmZmVyPWNvbnZlcnQoZGF0YSk7XG5sZXQgY3JjO1xuY29uc3R7dGFibGUsd2lkdGgsY3JjU2hpZnQsbWFza309dGhpcztcbmlmKHRoaXMucmVmbGVjdCl7XG5jcmM9dGhpcy5yZWZsZWN0ZWRYb3JJbjtcbmZvcihsZXQgaT0wO2k8YnVmZmVyLmxlbmd0aDtpKz0xKXtcbmNvbnN0IGJ5dGU9YnVmZmVyW2ldO1xuY3JjPSh0YWJsZVsoY3JjXmJ5dGUpJjB4ZmZdXmNyYz4+PjgpJm1hc2s7XG4gfVxuIH1lbHNle1xuY3JjPXRoaXMuc2hpZnRlZFhvckluO1xuZm9yKGxldCBpPTA7aTxidWZmZXIubGVuZ3RoO2krPTEpe1xuY3JjPVxudGFibGVbKGNyYz4+d2lkdGgtOCtjcmNTaGlmdF5idWZmZXJbaV0pJjB4ZmZdPDxcbmNyY1NoaWZ0XlxuY3JjPDw4LWNyY1NoaWZ0Jm1hc2s8PGNyY1NoaWZ0O1xuIH1cbmNyYz4+PWNyY1NoaWZ0O1xuIH1cbmNyY149dGhpcy54b3JPdXQ7XG5yZXR1cm4gY3JjPj4+MDtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVOb1RhYmxlKGRhdGEpe1xuY29uc3QgYnVmZmVyPWNvbnZlcnQoZGF0YSk7XG5sZXQgY3JjPXRoaXMueG9ySW47XG5mb3IobGV0IGk9MDtpPGJ1ZmZlci5sZW5ndGg7aSs9MSl7XG5sZXQgb2N0ZXQ9YnVmZmVyW2ldO1xuaWYodGhpcy5yZWZsZWN0KW9jdGV0PW1pcnJvcihvY3RldCw4KTtcbmZvcihsZXQgaj0wO2o8ODtqKz0xKXtcbmxldCB0b3BiaXQ9Y3JjJnRoaXMubXNiTWFzaztcbmlmKG9jdGV0JjB4ODA+PmopdG9wYml0Xj10aGlzLm1zYk1hc2s7XG5jcmM8PD0xO1xuaWYodG9wYml0KWNyY149dGhpcy5wb2x5O1xuIH1cbmNyYyY9dGhpcy5tYXNrO1xuIH1cbmlmKHRoaXMucmVmbGVjdCljcmM9bWlycm9yKGNyYyx0aGlzLndpZHRoKTtcbmNyY149dGhpcy54b3JPdXQ7XG5yZXR1cm4gY3JjPj4+MDtcbiB9XG5cbiAgICAgICAgZ2VuVGFibGUoKXtcbmNvbnN0IHRhYmxlTGVuZ3RoPTI1NjtcbmNvbnN0IHRhYmxlPVtdO1xuZm9yKGxldCBpPTA7aTx0YWJsZUxlbmd0aDtpKz0xKXtcbmxldCByZWc9aTtcbmlmKHRoaXMucmVmbGVjdClyZWc9bWlycm9yKHJlZyw4KTtcbnJlZzw8PXRoaXMud2lkdGgtOCt0aGlzLmNyY1NoaWZ0O1xuZm9yKGxldCBqPTA7ajw4O2orPTEpe1xuaWYoKHJlZyZ0aGlzLm1zYk1hc2s8PHRoaXMuY3JjU2hpZnQpIT09MCl7XG5yZWc8PD0xO1xucmVnXj10aGlzLnBvbHk8PHRoaXMuY3JjU2hpZnQ7XG4gfWVsc2V7XG5yZWc8PD0xO1xuIH1cbiB9XG5pZih0aGlzLnJlZmxlY3QpXG5yZWc9bWlycm9yKHJlZz4+dGhpcy5jcmNTaGlmdCx0aGlzLndpZHRoKTw8dGhpcy5jcmNTaGlmdDtcbnJlZz1yZWc+PnRoaXMuY3JjU2hpZnQmdGhpcy5tYXNrO1xudGFibGVbaV09cmVnPj4+MDtcbiB9XG5yZXR1cm4gbmV3IEludDMyQXJyYXkodGFibGUpO1xuIH19JGjigI1fb25jZS4gQ1JDKENSQyk7XG5cblxuY29uc3QgICAgICAgIGNyYzE9bmV3IENSQygxLDB4MDEsMHgwMCwweDAwLGZhbHNlKTskaOKAjV9vbmNlLmNyYzEoY3JjMSk7XG5jb25zdCAgICAgICAgY3JjNj1uZXcgQ1JDKDYsMHgyZiwweDAwLDB4MDAsZmFsc2UpOyRo4oCNX29uY2UuY3JjNihjcmM2KTtcbmNvbnN0ICAgICAgICBjcmM4PW5ldyBDUkMoOCwweDA3LDB4MDAsMHgwMCxmYWxzZSk7JGjigI1fb25jZS5jcmM4KGNyYzgpO1xuY29uc3QgICAgICAgIGNyYzEwPW5ldyBDUkMoMTAsMHgyMzMsMHgwMDAwLDB4MDAwMCxmYWxzZSk7JGjigI1fb25jZS5jcmMxMChjcmMxMCk7XG5jb25zdCAgICAgICAgY3JjMTY9bmV3IENSQygxNiwweDgwMDUsMHgwMDAwLDB4MDAwMCx0cnVlKTskaOKAjV9vbmNlLmNyYzE2KGNyYzE2KTtcbmNvbnN0ICAgICAgICBjcmMyND1uZXcgQ1JDKDI0LDB4ODY0Y2ZiLDB4YjcwNGNlLDB4MDAwMDAwLGZhbHNlKTskaOKAjV9vbmNlLmNyYzI0KGNyYzI0KTtcbmNvbnN0ICAgICAgICBjcmMzMj1uZXcgQ1JDKDMyLDB4MDRjMTFkYjcsMHhmZmZmZmZmZiwweGZmZmZmZmZmLHRydWUpOyRo4oCNX29uY2UuY3JjMzIoY3JjMzIpO1xuY29uc3QgICAgICAgIGNyYzMyYz1uZXcgQ1JDKDMyLDB4MWVkYzZmNDEsMHhmZmZmZmZmZiwweGZmZmZmZmZmLHRydWUpOyRo4oCNX29uY2UuY3JjMzJjKGNyYzMyYyk7XG5cbmNvbnN0ICAgICAgICBtb2RlbHM9e2NyYzEsY3JjNixjcmM4LGNyYzEwLGNyYzE2LGNyYzI0LGNyYzMyLGNyYzMyY307JGjigI1fb25jZS5tb2RlbHMobW9kZWxzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNSQyI6WyJDUkMiXSwiY3JjMSI6WyJjcmMxIl0sImNyYzYiOlsiY3JjNiJdLCJjcmM4IjpbImNyYzgiXSwiY3JjMTAiOlsiY3JjMTAiXSwiY3JjMTYiOlsiY3JjMTYiXSwiY3JjMjQiOlsiY3JjMjQiXSwiY3JjMzIiOlsiY3JjMzIiXSwiY3JjMzJjIjpbImNyYzMyYyJdLCJtb2RlbHMiOlsibW9kZWxzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABQlvW9ZIQAAWSEAACsAAABAYWdvcmljL3ZhdHMtdjAuMTYuMC11MTcuMS9zcmMvbGliLWJvYXJkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvbm90aWZpZXIiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy96b2Uvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCIuL2NyYy5qcyJdLCJleHBvcnRzIjpbIkRFRkFVTFRfQ1JDX0RJR0lUUyIsIkRFRkFVTFRfUFJFRklYIiwicHJlcGFyZUJvYXJkS2l0IiwicHJlcGFyZVJlY29yZGVyRmFjdG9yeSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEZhaWwscSxwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQsTSxtYWtlU2NhbGFyQmlnTWFwU3RvcmUscHJlcGFyZUV4b0NsYXNzS2l0LGRlZmluZVJlY29yZGVyS2l0LHByZXBhcmVSZWNvcmRlcixFLEZhcixpc1JlbW90YWJsZSxtYWtlTWFyc2hhbCxjcmM2OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaOKAjV9hID0+IChhc3NlcnQgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0XCIsIFskaOKAjV9hID0+IChwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV0sW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyQmlnTWFwU3RvcmUgPSAkaOKAjV9hKV1dLFtcInByZXBhcmVFeG9DbGFzc0tpdFwiLCBbJGjigI1fYSA9PiAocHJlcGFyZUV4b0NsYXNzS2l0ID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvem9lL3NyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanNcIiwgW1tcImRlZmluZVJlY29yZGVyS2l0XCIsIFskaOKAjV9hID0+IChkZWZpbmVSZWNvcmRlcktpdCA9ICRo4oCNX2EpXV0sW1wicHJlcGFyZVJlY29yZGVyXCIsIFskaOKAjV9hID0+IChwcmVwYXJlUmVjb3JkZXIgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXSxbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJpc1JlbW90YWJsZVwiLCBbJGjigI1fYSA9PiAoaXNSZW1vdGFibGUgPSAkaOKAjV9hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaOKAjV9hID0+IChtYWtlTWFyc2hhbCA9ICRo4oCNX2EpXV1dXSxbXCIuL2NyYy5qc1wiLCBbW1wiY3JjNlwiLCBbJGjigI1fYSA9PiAoY3JjNiA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCAgICAgICAgREVGQVVMVF9DUkNfRElHSVRTPTI7JGjigI1fb25jZS5ERUZBVUxUX0NSQ19ESUdJVFMoREVGQVVMVF9DUkNfRElHSVRTKTtcbmNvbnN0ICAgICAgICBERUZBVUxUX1BSRUZJWD0nYm9hcmQwJztcblxuLy9cbi8vXG4kaOKAjV9vbmNlLkRFRkFVTFRfUFJFRklYKERFRkFVTFRfUFJFRklYKTtjb25zdCBDYXBEYXRhU2hhcGU9e2JvZHk6TS5zdHJpbmcoKSxzbG90czpNLmFycmF5KCl9O1xuY29uc3QgTWFyc2hhbEk9TS5pbnRlcmZhY2UoJ01hcnNoYWxsZXInLHtcbnRvQ2FwRGF0YTpNLmNhbGwoTS5hbnkoKSkucmV0dXJucyhDYXBEYXRhU2hhcGUpLFxuc2VyaWFsaXplOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKENhcERhdGFTaGFwZSksXG5mcm9tQ2FwRGF0YTpNLmNhbGwoQ2FwRGF0YVNoYXBlKS5yZXR1cm5zKE0uYW55KCkpLFxudW5zZXJpYWxpemU6TS5jYWxsKENhcERhdGFTaGFwZSkucmV0dXJucyhNLmFueSgpKX0pO1xuXG5cbmNvbnN0IElkU2hhcGU9TS5zdHJpbmcoKTtcbmNvbnN0IFZhbFNoYXBlPU0uc2NhbGFyKCk7XG5jb25zdCBCb2FyZEtpdElLaXQ9e1xuYm9hcmQ6TS5pbnRlcmZhY2UoJ0JvYXJkJyx7XG5oYXM6TS5jYWxsKFZhbFNoYXBlKS5yZXR1cm5zKE0uYm9vbGVhbigpKSxcbmdldFZhbHVlOk0uY2FsbChJZFNoYXBlKS5yZXR1cm5zKFZhbFNoYXBlKSxcbmxvb2t1cDpNLmNhbGwoKS5yZXN0KE0uYXJyYXlPZihJZFNoYXBlKSkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRJZDpNLmNhbGwoVmFsU2hhcGUpLnJldHVybnMoSWRTaGFwZSksXG5pZHM6TS5jYWxsKCkucmV0dXJucyhNLmFycmF5T2YoSWRTaGFwZSkpLFxuZ2V0UHVibGlzaGluZ01hcnNoYWxsZXI6TS5jYWxsKCkucmV0dXJucyhNLnJlbW90YWJsZSgpKSxcbmdldFJlYWRvbmx5TWFyc2hhbGxlcjpNLmNhbGwoKS5yZXR1cm5zKE0ucmVtb3RhYmxlKCkpfSksXG5cbnB1Ymxpc2hpbmdNYXJzaGFsbGVyOk1hcnNoYWxJLFxucmVhZG9ubHlNYXJzaGFsbGVyOk1hcnNoYWxJfTtcblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGNhbGNDcmM9KGRhdGEsY3JjRGlnaXRzKT0+e1xuLy9cbi8vXG5jb25zdCBjcmM9Y3JjNi5jYWxjdWxhdGUoZGF0YSkrMTtcbmNvbnN0IGNyY1N0cj1jcmMudG9TdHJpbmcoKS5wYWRTdGFydChjcmNEaWdpdHMsJzAnKTtcbmFzc2VydChjcmNTdHIubGVuZ3RoPD1jcmNEaWdpdHMsIGBDUkMgdG9vIGJpZyBmb3IgaXRzIGJyaXRjaGVzICR7Y3JjU3RyfWApO1xucmV0dXJuIGNyY1N0cjtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuXG4vL1xuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBpbml0RHVyYWJsZUJvYXJkU3RhdGU9KFxuaW5pdFNlcXVlbmNlPTAsXG57cHJlZml4PURFRkFVTFRfUFJFRklYLGNyY0RpZ2l0cz1ERUZBVUxUX0NSQ19ESUdJVFN9PXt9KT0+XG57XG5jb25zdCBpbW11dGFibGU9e3ByZWZpeCxjcmNEaWdpdHN9O1xuXG5jb25zdCBsYXN0U2VxdWVuY2U9QmlnSW50KGluaXRTZXF1ZW5jZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpZFRvVmFsPW1ha2VTY2FsYXJCaWdNYXBTdG9yZSgnaWRUb1ZhbCcse1xuZHVyYWJsZTp0cnVlLFxua2V5U2hhcGU6SWRTaGFwZSxcbnZhbHVlU2hhcGU6VmFsU2hhcGV9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdmFsVG9JZD1tYWtlU2NhbGFyQmlnTWFwU3RvcmUoJ3ZhbFRvSWQnLHtcbmR1cmFibGU6dHJ1ZSxcbmtleVNoYXBlOlZhbFNoYXBlLFxudmFsdWVTaGFwZTpJZFNoYXBlfSk7XG5cblxuY29uc3QgbXV0YWJsZT17bGFzdFNlcXVlbmNlLGlkVG9WYWwsdmFsVG9JZH07XG5cbnJldHVybntcbi4uLmltbXV0YWJsZSxcbi4uLm11dGFibGV9O1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuICovXG5jb25zdCBnZXRJZD0odmFsdWUsc3RhdGUpPT57XG5jb25zdHtpZFRvVmFsLHZhbFRvSWQscHJlZml4LGNyY0RpZ2l0c309c3RhdGU7XG5pZighaXNSZW1vdGFibGUodmFsdWUpKXtcbkZhaWwgYEJvYXJkIGNhbm5vdCBjcmVhdGUgaWQgZm9yIG5vbi1yZW1vdGFibGVgO1xuIH1cblxuaWYodmFsVG9JZC5oYXModmFsdWUpKXtcbnJldHVybiB2YWxUb0lkLmdldCh2YWx1ZSk7XG4gfVxuXG5zdGF0ZS5sYXN0U2VxdWVuY2UrPTFuO1xuY29uc3Qgc2VxPXN0YXRlLmxhc3RTZXF1ZW5jZTtcblxuY29uc3QgY3JjSW5wdXQ9IGAke3ByZWZpeH0ke3NlcX1gO1xuY29uc3QgY3JjPWNhbGNDcmMoY3JjSW5wdXQsY3JjRGlnaXRzKTtcblxuY29uc3QgaWQ9IGAke3ByZWZpeH0ke2NyY30ke3NlcX1gO1xuXG52YWxUb0lkLmluaXQodmFsdWUsaWQpO1xuaWRUb1ZhbC5pbml0KGlkLHZhbHVlKTtcbnJldHVybiBpZDtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZ2V0VmFsdWU9KGlkLHtwcmVmaXgsY3JjRGlnaXRzLGlkVG9WYWx9KT0+e1xuaWQuc3RhcnRzV2l0aChwcmVmaXgpfHxGYWlsIGBpZCBtdXN0IHN0YXJ0IHdpdGggJHtxKHByZWZpeCl9OiAke2lkfWA7XG5jb25zdCBkaWdpdHM9aWQuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4vL1xuY29uc3QgRElHSVRTX1JFR0VYUD1uZXcgUmVnRXhwKCBgXlswLTldeyR7Y3JjRGlnaXRzKzF9LH0kYCk7XG5ESUdJVFNfUkVHRVhQLnRlc3QoZGlnaXRzKXx8XG5GYWlsIGBpZCBtdXN0IGVuZCBpbiBhdCBsZWFzdCAke3EoY3JjRGlnaXRzKzEpfSBkaWdpdHM6ICR7aWR9YDtcblxuaWYoaWRUb1ZhbC5oYXMoaWQpKXtcbnJldHVybiBpZFRvVmFsLmdldChpZCk7XG4gfVxuXG5jb25zdCBhbGxlZ2VkQ3JjPWRpZ2l0cy5zbGljZSgwLGNyY0RpZ2l0cyk7XG5cbmNvbnN0IHNlcT1kaWdpdHMuc2xpY2UoY3JjRGlnaXRzKTtcbmNvbnN0IGNyY0lucHV0PSBgJHtwcmVmaXh9JHtzZXF9YDtcbmNvbnN0IGNyYz1jYWxjQ3JjKGNyY0lucHV0LGNyY0RpZ2l0cyk7XG5cbmFsbGVnZWRDcmM9PT1jcmN8fEZhaWwgYGlkIGlzIHByb2JhYmx5IGEgdHlwbywgY2Fubm90IHZlcmlmeSBDUkM6ICR7aWR9YDtcbi8vXG50aHJvdyBGYWlsIGBib2FyZCBkb2VzIG5vdCBoYXZlIGlkOiAke2lkfWA7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1ha2VTbG90VG9WYWw9KHN0YXRlKT0+e1xuY29uc3QgaWZhY2VBbGxlZ2VkUHJlZml4PSdBbGxlZ2VkOiAnO1xuY29uc3QgaWZhY2VJbmFjY2Vzc2libGVQcmVmaXg9J1NFVkVSRUQ6ICc7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3Qgc2xvdFRvVmFsPShzbG90LGlmYWNlKT0+e1xuaWYoc2xvdCE9PW51bGwpe1xucmV0dXJuIGdldFZhbHVlKHNsb3Qsc3RhdGUpO1xuIH1cblxuLy9cbmlmKHR5cGVvZiBpZmFjZT09PSdzdHJpbmcnJiZpZmFjZS5zdGFydHNXaXRoKGlmYWNlQWxsZWdlZFByZWZpeCkpe1xuaWZhY2U9aWZhY2Uuc2xpY2UoaWZhY2VBbGxlZ2VkUHJlZml4Lmxlbmd0aCk7XG4gfVxucmV0dXJuIEZhciggYCR7aWZhY2VJbmFjY2Vzc2libGVQcmVmaXh9JHtpZmFjZX1gLHt9KTtcbiB9O1xucmV0dXJuIHNsb3RUb1ZhbDtcbiB9O1xuXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0IG1ha2VSZWFkb25seU1hcnNoYWxsZXI9KHN0YXRlKT0+e1xuY29uc3R7dmFsVG9JZH09c3RhdGU7XG5jb25zdCBzbG90VG9WYWw9bWFrZVNsb3RUb1ZhbChzdGF0ZSk7XG5jb25zdCB2YWxUb1Nsb3Q9KHZhbCk9PntcbmlmKCF2YWxUb0lkLmhhcyh2YWwpKXtcbi8vXG5yZXR1cm4gbnVsbDtcbiB9XG5cbi8vXG5yZXR1cm4gdmFsVG9JZC5nZXQodmFsKTtcbiB9O1xucmV0dXJuIG1ha2VNYXJzaGFsKHZhbFRvU2xvdCxzbG90VG9WYWwse1xuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pO1xuXG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1ha2VQdWJsaXNoaW5nTWFyc2hhbGxlcj0oc3RhdGUpPT57XG5jb25zdCBzbG90VG9WYWw9bWFrZVNsb3RUb1ZhbChzdGF0ZSk7XG4vL1xuY29uc3QgdmFsVG9TbG90PSh2YWwpPT5nZXRJZCh2YWwsc3RhdGUpO1xucmV0dXJuIG1ha2VNYXJzaGFsKHZhbFRvU2xvdCxzbG90VG9WYWwse1xuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pO1xuXG4gfTtcbi8vXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlQm9hcmRLaXQ9KGJhZ2dhZ2UpPT57XG5yZXR1cm4gcHJlcGFyZUV4b0NsYXNzS2l0KFxuYmFnZ2FnZSxcbidCb2FyZCcsXG5Cb2FyZEtpdElLaXQsXG5pbml0RHVyYWJsZUJvYXJkU3RhdGUsXG57XG5ib2FyZDp7XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5nZXRJZCh2YWx1ZSl7XG5yZXR1cm4gZ2V0SWQodmFsdWUsdGhpcy5zdGF0ZSk7XG4gfSxcbi8qXG5cblxuICAgICAgICAgKi9cbmdldFZhbHVlKGlkKXtcbnJldHVybiBnZXRWYWx1ZShpZCx0aGlzLnN0YXRlKTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuICAgICAgYXN5bmMgbG9va3VwKC4uLnBhdGgpe1xuY29uc3R7XG5mYWNldHM6e2JvYXJkfX09XG50aGlzO1xuaWYocGF0aC5sZW5ndGg9PT0wKXtcbnJldHVybiBib2FyZDtcbiB9XG5jb25zdFtmaXJzdCwuLi5yZXN0XT1wYXRoO1xuLyogICAgICAgICAgICAgICovXG5jb25zdCBmaXJzdFZhbHVlPWJvYXJkLmdldFZhbHVlKC8qICAgICAgICAgICAgICAgICAgKi9maXJzdCk7XG5pZihyZXN0Lmxlbmd0aD09PTApe1xucmV0dXJuIGZpcnN0VmFsdWU7XG4gfVxucmV0dXJuIEUoZmlyc3RWYWx1ZSkubG9va3VwKC4uLnJlc3QpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuaGFzKHZhbCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS52YWxUb0lkLmhhcyh2YWwpO1xuIH0sXG5pZHMoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIGhhcmRlbihbLi4uc3RhdGUuaWRUb1ZhbC5rZXlzKCldKTtcbiB9LFxuLypcblxuXG4gICAgICAgICAqL1xuZ2V0UHVibGlzaGluZ01hcnNoYWxsZXIoKXtcbnJldHVybiB0aGlzLmZhY2V0cy5wdWJsaXNoaW5nTWFyc2hhbGxlcjtcbiB9LFxuLypcblxuXG5cblxuXG5cbiAgICAgICAgICovXG5nZXRSZWFkb25seU1hcnNoYWxsZXIoKXtcbnJldHVybiB0aGlzLmZhY2V0cy5yZWFkb25seU1hcnNoYWxsZXI7XG4gfX0sXG5cbnJlYWRvbmx5TWFyc2hhbGxlcjp7XG50b0NhcERhdGEodmFsKXtcbmNvbnN0IHJlYWRvbmx5PW1ha2VSZWFkb25seU1hcnNoYWxsZXIodGhpcy5zdGF0ZSk7XG5yZXR1cm4gcmVhZG9ubHkudG9DYXBEYXRhKHZhbCk7XG4gfSxcbmZyb21DYXBEYXRhKGRhdGEpe1xuY29uc3QgcmVhZG9ubHk9bWFrZVJlYWRvbmx5TWFyc2hhbGxlcih0aGlzLnN0YXRlKTtcbnJldHVybiByZWFkb25seS5mcm9tQ2FwRGF0YShkYXRhKTtcbiB9LFxuc2VyaWFsaXplKGRhdGEpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnJlYWRvbmx5TWFyc2hhbGxlci50b0NhcERhdGEoZGF0YSk7XG4gfSxcbnVuc2VyaWFsaXplKGRhdGEpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnJlYWRvbmx5TWFyc2hhbGxlci5mcm9tQ2FwRGF0YShkYXRhKTtcbiB9fSxcblxucHVibGlzaGluZ01hcnNoYWxsZXI6e1xudG9DYXBEYXRhKHZhbCl7XG5jb25zdCBwdWJsaXNoaW5nPW1ha2VQdWJsaXNoaW5nTWFyc2hhbGxlcih0aGlzLnN0YXRlKTtcbnJldHVybiBwdWJsaXNoaW5nLnRvQ2FwRGF0YSh2YWwpO1xuIH0sXG5mcm9tQ2FwRGF0YShkYXRhKXtcbmNvbnN0IHB1Ymxpc2hpbmc9bWFrZVB1Ymxpc2hpbmdNYXJzaGFsbGVyKHRoaXMuc3RhdGUpO1xucmV0dXJuIHB1Ymxpc2hpbmcuZnJvbUNhcERhdGEoZGF0YSk7XG4gfSxcbnNlcmlhbGl6ZShkYXRhKXtcbnJldHVybiB0aGlzLmZhY2V0cy5wdWJsaXNoaW5nTWFyc2hhbGxlci50b0NhcERhdGEoZGF0YSk7XG4gfSxcbnVuc2VyaWFsaXplKGRhdGEpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnB1Ymxpc2hpbmdNYXJzaGFsbGVyLmZyb21DYXBEYXRhKGRhdGEpO1xuIH19fSk7XG5cblxuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjigI1fb25jZS5wcmVwYXJlQm9hcmRLaXQocHJlcGFyZUJvYXJkS2l0KTtcbmNvbnN0ICAgICAgICBwcmVwYXJlUmVjb3JkZXJGYWN0b3J5PSh6b25lKT0+e1xuY29uc3QgYmFnZ2FnZT16b25lLm1hcFN0b3JlKCBgUmVjb3JkZXIgQmFnZ2FnZWApO1xuY29uc3QgbWFrZUR1cmFibGVQdWJsaXNoS2l0PXByZXBhcmVEdXJhYmxlUHVibGlzaEtpdChcbmJhZ2dhZ2UsXG4nRHVyYWJsZVB1Ymxpc2hLaXQnKTtcblxuXG4vKlxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlUmVjb3JkZXJLaXQ9KGxhYmVsLG1hcnNoYWxsZXIpPT57XG5jb25zdCBteVpvbmU9em9uZS5zdWJab25lKGxhYmVsKTtcbmNvbnN0IG1ha2VSZWNvcmRlcj1wcmVwYXJlUmVjb3JkZXIoXG5teVpvbmUubWFwU3RvcmUoIGBSZWNvcmRlciBCYWdnYWdlOiAke2xhYmVsfWApLFxubWFyc2hhbGxlcik7XG5cbnJldHVybiBkZWZpbmVSZWNvcmRlcktpdCh7bWFrZVJlY29yZGVyLG1ha2VEdXJhYmxlUHVibGlzaEtpdH0pO1xuIH07XG5cbnJldHVybiBwcmVwYXJlUmVjb3JkZXJLaXQ7XG4gfTskaOKAjV9vbmNlLnByZXBhcmVSZWNvcmRlckZhY3RvcnkocHJlcGFyZVJlY29yZGVyRmFjdG9yeSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJERUZBVUxUX0NSQ19ESUdJVFMiOlsiREVGQVVMVF9DUkNfRElHSVRTIl0sIkRFRkFVTFRfUFJFRklYIjpbIkRFRkFVTFRfUFJFRklYIl0sInByZXBhcmVCb2FyZEtpdCI6WyJwcmVwYXJlQm9hcmRLaXQiXSwicHJlcGFyZVJlY29yZGVyRmFjdG9yeSI6WyJwcmVwYXJlUmVjb3JkZXJGYWN0b3J5Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAIux6PCCwAAwgsAADMAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE3LjEvc3JjL2FjdGlvbnMuanN7ImltcG9ydHMiOlsiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCJdLCJleHBvcnRzIjpbIm1ha2VQYXltZW50QWN0aW9ucyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVByb21pc2VLaXQsRmFyLEU7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuY29uc3QgICAgICAgIG1ha2VQYXltZW50QWN0aW9ucz0oe1xuZ2V0QnJhbmRSZWNvcmQsXG5nZXRQdXJzZUJ5UGV0bmFtZSxcbmdldFJlY29yZCxcbnVwZGF0ZVJlY29yZCxcbmdldEF1dG9EZXBvc2l0UHVyc2UsXG5nZXRJc3N1ZXJCb2FyZElkfSk9Plxue1xuY29uc3QgZGVwb3NpdGVkUEs9bWFrZVByb21pc2VLaXQoKTtcblxucmV0dXJuIEZhcigncGF5bWVudCBhY3Rpb25zJyx7XG5kZXBvc2l0OmFzeW5jKHB1cnNlT3JQZXRuYW1lPXVuZGVmaW5lZCk9PntcbmNvbnN0IG9sZFBheW1lbnRSZWNvcmQ9Z2V0UmVjb3JkKCk7XG5jb25zdHticmFuZCxwYXltZW50fT1vbGRQYXltZW50UmVjb3JkO1xuYXNzZXJ0KHBheW1lbnQpO1xuXG4vKiAgICAgICAgICAgICAgICAqL1xubGV0IHB1cnNlO1xuaWYocHVyc2VPclBldG5hbWU9PT11bmRlZmluZWQpe1xuY29uc3QgYXV0b0RlcG9zaXRQdXJzZT1nZXRBdXRvRGVwb3NpdFB1cnNlKGJyYW5kKTtcbmlmKCFhdXRvRGVwb3NpdFB1cnNlKXtcbi8vXG5yZXR1cm4gZGVwb3NpdGVkUEsucHJvbWlzZTtcbiB9XG4vL1xucHVyc2U9Z2V0QXV0b0RlcG9zaXRQdXJzZShicmFuZCk7XG4gfWVsc2UgaWYoXG5BcnJheS5pc0FycmF5KHB1cnNlT3JQZXRuYW1lKXx8XG50eXBlb2YgcHVyc2VPclBldG5hbWU9PT0nc3RyaW5nJylcbntcbnB1cnNlPWdldFB1cnNlQnlQZXRuYW1lKHB1cnNlT3JQZXRuYW1lKTtcbiB9ZWxzZXtcbnB1cnNlPXB1cnNlT3JQZXRuYW1lO1xuIH1cbmNvbnN0IGJyYW5kUmVjb3JkPWdldEJyYW5kUmVjb3JkKGJyYW5kKTtcbnVwZGF0ZVJlY29yZCh7Li4ub2xkUGF5bWVudFJlY29yZCxzdGF0dXM6J3BlbmRpbmcnfSxicmFuZFJlY29yZCk7XG4vL1xuRShwdXJzZSkuXG5kZXBvc2l0KHBheW1lbnQpLlxudGhlbihcbihkZXBvc2l0ZWRBbW91bnQpPT57XG51cGRhdGVSZWNvcmQoXG57XG4uLi5nZXRSZWNvcmQoKSxcbi8vXG5wYXltZW50OnVuZGVmaW5lZCxcbnN0YXR1czonZGVwb3NpdGVkJyxcbmRlcG9zaXRlZEFtb3VudH0sXG5cbmJyYW5kUmVjb3JkKTtcblxuZGVwb3NpdGVkUEsucmVzb2x2ZShkZXBvc2l0ZWRBbW91bnQpO1xuIH0sXG4oZSk9PntcbmNvbnNvbGUuZXJyb3IoXG4nRXJyb3IgZGVwb3NpdGluZyBwYXltZW50IGluJyxcbnB1cnNlT3JQZXRuYW1lfHwnZGVmYXVsdCBwdXJzZScsXG5lKTtcblxuaWYocHVyc2VPclBldG5hbWU9PT11bmRlZmluZWQpe1xuLy9cbi8vXG51cGRhdGVSZWNvcmQoe1xuLi4uZ2V0UmVjb3JkKCksXG5zdGF0dXM6dW5kZWZpbmVkfSk7XG5cbmRlcG9zaXRlZFBLLnJlamVjdChlKTtcbiB9ZWxzZXtcbi8vXG4vL1xuZGVwb3NpdGVkUEsucmVzb2x2ZShnZXRSZWNvcmQoKS5hY3Rpb25zLmRlcG9zaXQodW5kZWZpbmVkKSk7XG4gfVxuIH0pO1xuXG5yZXR1cm4gZGVwb3NpdGVkUEsucHJvbWlzZTtcbiB9LFxucmVmcmVzaDphc3luYygpPT57XG5jb25zdCBvbGRQYXltZW50UmVjb3JkPWdldFJlY29yZCgpO1xuY29uc3R7YnJhbmQsaXNzdWVyLHBheW1lbnR9PW9sZFBheW1lbnRSZWNvcmQ7XG5jb25zdCBicmFuZFJlY29yZD1nZXRCcmFuZFJlY29yZChicmFuZCk7XG5pZighYnJhbmRSZWNvcmQpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuaWYoIWlzc3Vlcil7XG51cGRhdGVSZWNvcmQoXG57XG4uLi5vbGRQYXltZW50UmVjb3JkLFxuaXNzdWVyQm9hcmRJZDpnZXRJc3N1ZXJCb2FyZElkKGJyYW5kUmVjb3JkLmlzc3Vlcil9LFxuXG5icmFuZFJlY29yZCk7XG5cbnJldHVybiB0cnVlO1xuIH1cblxuaWYoIXBheW1lbnQpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuY29uc3QgaXNMaXZlPWF3YWl0IEUoaXNzdWVyKS5pc0xpdmUocGF5bWVudCk7XG5pZihpc0xpdmUpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxudXBkYXRlUmVjb3JkKHtcbi4uLm9sZFBheW1lbnRSZWNvcmQsXG4vL1xucGF5bWVudDp1bmRlZmluZWQsXG5zdGF0dXM6J2V4cGlyZWQnfSk7XG5cbnJldHVybiB0cnVlO1xuIH0sXG5nZXRBbW91bnRPZjphc3luYygpPT57XG5jb25zdCBvbGRQYXltZW50UmVjb3JkPWdldFJlY29yZCgpO1xuY29uc3R7aXNzdWVyLHBheW1lbnR9PW9sZFBheW1lbnRSZWNvcmQ7XG5hc3NlcnQoaXNzdWVyKTtcbmFzc2VydChwYXltZW50KTtcblxuLy9cbmNvbnN0IGxhc3RBbW91bnQ9YXdhaXQgRShpc3N1ZXIpLmdldEFtb3VudE9mKHBheW1lbnQpO1xuXG51cGRhdGVSZWNvcmQoe1xuLi4ub2xkUGF5bWVudFJlY29yZCxcbmxhc3RBbW91bnR9KTtcblxucmV0dXJuIHRydWU7XG4gfX0pO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VQYXltZW50QWN0aW9ucyhtYWtlUGF5bWVudEFjdGlvbnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVBheW1lbnRBY3Rpb25zIjpbIm1ha2VQYXltZW50QWN0aW9ucyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACc4sY8rgIAAK4CAAA7AAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxNy4xL3NyYy9iaWdpbnRTdHJpbmdpZnkuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImJpZ2ludFN0cmluZ2lmeSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIGJpZ2ludFN0cmluZ2lmeT0oeCk9PlxuSlNPTi5zdHJpbmdpZnkoeCwoX2tleSx2YWx1ZSk9PntcbmlmKHR5cGVvZiB2YWx1ZSE9PSdiaWdpbnQnKXtcbi8vXG5yZXR1cm4gdmFsdWU7XG4gfVxuaWYodmFsdWU8PUJpZ0ludChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpe1xuLy9cbnJldHVybiBOdW1iZXIodmFsdWUpO1xuIH1cbi8vXG4vL1xucmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gfSk7JGjigI1fb25jZS5iaWdpbnRTdHJpbmdpZnkoYmlnaW50U3RyaW5naWZ5KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImJpZ2ludFN0cmluZ2lmeSI6WyJiaWdpbnRTdHJpbmdpZnkiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAOq6lOmkJAABpCQAANAAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTcuMS9zcmMvZGF0ZS1ub3cuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBhZ29yaWMvbm90aWZpZXIiLCJAZW5kby9wcm9taXNlLWtpdCJdLCJleHBvcnRzIjpbIkRFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFIiwiREVGQVVMVF9USU1FUl9TRVJWSUNFX1BPTExfSU5URVJWQUwiLCJtYWtlVGltZXJEZXZpY2VEYXRlTm93IiwibWFrZVRpbWVyU2VydmljZURhdGVOb3ciXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsb2JzZXJ2ZU5vdGlmaWVyLG1ha2VQcm9taXNlS2l0OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wib2JzZXJ2ZU5vdGlmaWVyXCIsIFskaOKAjV9hID0+IChvYnNlcnZlTm90aWZpZXIgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuY29uc3QgICAgICAgIERFRkFVTFRfVElNRVJfU0VSVklDRV9QT0xMX0lOVEVSVkFMPTYwXzAwMG47JGjigI1fb25jZS5ERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTChERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCk7XG5jb25zdCAgICAgICAgREVGQVVMVF9USU1FUl9ERVZJQ0VfU0NBTEU9MTtcblxuLy9cbi8vXG4kaOKAjV9vbmNlLkRFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFKERFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFKTtjb25zdCBtYWtlVGltZXJEZXZpY2VEYXRlTm93PVxuKEQsdGltZXJEZXZpY2UsdGltZXJEZXZpY2VTY2FsZT1ERUZBVUxUX1RJTUVSX0RFVklDRV9TQ0FMRSk9PlxuKCk9PntcbmNvbnN0IHN0YW1wPUQodGltZXJEZXZpY2UpLmdldExhc3RQb2xsZWQoKTtcbmNvbnN0IGxhc3RQb2xsZWRTdGFtcD1wYXJzZUludCggYCR7c3RhbXB9YCwxMCkqdGltZXJEZXZpY2VTY2FsZTtcbnJldHVybiBsYXN0UG9sbGVkU3RhbXA7XG4gfTtcblxuLy9cbi8vXG4kaOKAjV9vbmNlLm1ha2VUaW1lckRldmljZURhdGVOb3cobWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyk7Y29uc3QgbWFrZVRpbWVyU2VydmljZURhdGVOb3c9KFxudGltZXJTZXJ2aWNlLFxudGltZXJQb2xsSW50ZXJ2YWw9REVGQVVMVF9USU1FUl9TRVJWSUNFX1BPTExfSU5URVJWQUwpPT5cbntcbmxldCBsYXN0UG9sbGVkU3RhbXA9TmFOO1xuY29uc3QgZGF0ZU5vdz0oKT0+bGFzdFBvbGxlZFN0YW1wO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGF0ZU5vd1BLPW1ha2VQcm9taXNlS2l0KCk7XG5cbi8vXG5jb25zdCBvYnNlcnZlVGltZXI9YXN5bmMoKT0+e1xuY29uc3Qgb2JzZXJ2ZXI9e1xudXBkYXRlU3RhdGUoc3RhbXApe1xubGFzdFBvbGxlZFN0YW1wPXBhcnNlSW50KCBgJHtzdGFtcH1gLDEwKTtcbmRhdGVOb3dQSy5yZXNvbHZlKGRhdGVOb3cpO1xuIH19O1xuXG5cbi8vXG5jb25zdCBzdGFtcD1hd2FpdCBFKHRpbWVyU2VydmljZSkuZ2V0Q3VycmVudFRpbWVzdGFtcCgpO1xub2JzZXJ2ZXIudXBkYXRlU3RhdGUoc3RhbXApO1xuXG4vL1xuLy9cbmNvbnN0IHRpbWVyTm90aWZpZXI9RSh0aW1lclNlcnZpY2UpLm1ha2VOb3RpZmllcigwbix0aW1lclBvbGxJbnRlcnZhbCk7XG5cbi8vXG5hd2FpdCBvYnNlcnZlTm90aWZpZXIodGltZXJOb3RpZmllcixvYnNlcnZlcik7XG4gfTtcblxub2JzZXJ2ZVRpbWVyKCkuY2F0Y2goKGUpPT5kYXRlTm93UEsucmVqZWN0KGUpKTtcblxuLy9cbnJldHVybiBkYXRlTm93UEsucHJvbWlzZTtcbiB9OyRo4oCNX29uY2UubWFrZVRpbWVyU2VydmljZURhdGVOb3cobWFrZVRpbWVyU2VydmljZURhdGVOb3cpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiREVGQVVMVF9USU1FUl9TRVJWSUNFX1BPTExfSU5URVJWQUwiOlsiREVGQVVMVF9USU1FUl9TRVJWSUNFX1BPTExfSU5URVJWQUwiXSwiREVGQVVMVF9USU1FUl9ERVZJQ0VfU0NBTEUiOlsiREVGQVVMVF9USU1FUl9ERVZJQ0VfU0NBTEUiXSwibWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyI6WyJtYWtlVGltZXJEZXZpY2VEYXRlTm93Il0sIm1ha2VUaW1lclNlcnZpY2VEYXRlTm93IjpbIm1ha2VUaW1lclNlcnZpY2VEYXRlTm93Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJh1FSntEgAA7RIAAEAAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE3LjEvc3JjL2ZpbmRPck1ha2VJbnZpdGF0aW9uLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9lcnRwIl0sImV4cG9ydHMiOlsiZmluZE9yTWFrZUludml0YXRpb24iLCJtYWtlSWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxGYWlsLHEsRSxwYXNzU3R5bGVPZixBbW91bnRNYXRoOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaOKAjV9hID0+IChhc3NlcnQgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjigI1fYSA9PiAocGFzc1N0eWxlT2YgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaOKAjV9hID0+IChBbW91bnRNYXRoID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNvbnN0ICAgICAgICBtYWtlSWQ9KGRhcHBPcmlnaW4scmF3SWQpPT4gYCR7ZGFwcE9yaWdpbn0jJHtyYXdJZH1gOyRo4oCNX29uY2UubWFrZUlkKG1ha2VJZCk7XG5cbmNvbnN0IGFzc2VydEZpcnN0Q2FwQVNDSUk9KHN0cik9PntcbmFzc2VydC50eXBlb2Yoc3RyLCdzdHJpbmcnKTtcbmNvbnN0IGZpcnN0Q2FwQVNDSUk9L15bQS1aXVthLXpBLVowLTlfJF0qJC87XG5maXJzdENhcEFTQ0lJLnRlc3Qoc3RyKXx8XG5GYWlsIGBUaGUgc3RyaW5nICR7cShcbnN0cilcbiB9IG11c3QgYmUgYW4gYXNjaWkgaWRlbnRpZmllciBzdGFydGluZyB3aXRoIHVwcGVyIGNhc2UuYDtcbnN0ciE9PSdOYU4nJiZzdHIhPT0nSW5maW5pdHknfHxcbkZhaWwgYGtleXdvcmQgJHtxKHN0cil9IG11c3Qgbm90IGJlIGEgbnVtYmVyJ3MgbmFtZWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgZmluZEJ5Qm9hcmRJZD1hc3luYyhpbnZpdGF0aW9uUHVyc2VCYWxhbmNlLHtib2FyZCxib2FyZElkfSk9PntcbmFzc2VydC50eXBlb2YoYm9hcmRJZCwnc3RyaW5nJyk7XG5jb25zdCBpbnZpdGF0aW9uSGFuZGxlPWF3YWl0IEUoYm9hcmQpLmdldFZhbHVlKGJvYXJkSWQpO1xuY29uc3QgbWF0Y2g9KGVsZW1lbnQpPT5lbGVtZW50LmhhbmRsZT09PWludml0YXRpb25IYW5kbGU7XG5jb25zdCBtYXRjaGluZ1ZhbHVlPWludml0YXRpb25QdXJzZUJhbGFuY2UudmFsdWUuZmluZChtYXRjaCk7XG5tYXRjaGluZ1ZhbHVlfHxGYWlsIGBDYW5ub3QgZmluZCBpbnZpdGF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gJHtxKGJvYXJkSWQpfWA7XG5cbnJldHVybiBoYXJkZW4oW21hdGNoaW5nVmFsdWVdKTtcbiB9O1xuXG4vL1xuLy9cbi8qXG5cblxuICovXG5jb25zdCBmaW5kQnlLZXlWYWx1ZVBhaXJzPWFzeW5jKGludml0YXRpb25QdXJzZUJhbGFuY2Usa3ZzKT0+e1xuLy9cbi8vXG4vL1xuY29uc3QgbWF0Y2hlcz0oaW52aXRhdGlvbkRldGFpbCk9PlxuT2JqZWN0LmVudHJpZXMoa3ZzKS5ldmVyeShcbihba2V5LHZhbHVlXSk9Pmludml0YXRpb25EZXRhaWxba2V5XT09PXZhbHVlKTtcblxuXG5jb25zdCBtYXRjaGluZ1ZhbHVlPWludml0YXRpb25QdXJzZUJhbGFuY2UudmFsdWUuZmluZChtYXRjaGVzKTtcbm1hdGNoaW5nVmFsdWV8fEZhaWwgYENhbm5vdCBmaW5kIGludml0YXRpb24gY29ycmVzcG9uZGluZyB0byAke3Eoa3ZzKX1gO1xucmV0dXJuIGhhcmRlbihbbWF0Y2hpbmdWYWx1ZV0pO1xuIH07XG5cbmNvbnN0IG1ha2VGaW5kSW52aXRhdGlvbj0oaW52aXRhdGlvblB1cnNlLGludml0YXRpb25CcmFuZCk9PntcbmNvbnN0IGZpbmRJbnZpdGF0aW9uPWFzeW5jKHF1ZXJ5Rm4scXVlcnlQYXJhbXMpPT57XG5jb25zdCBwdXJzZUJhbGFuY2U9YXdhaXQgRShpbnZpdGF0aW9uUHVyc2UpLmdldEN1cnJlbnRBbW91bnQoKTtcbmNvbnN0IHZhbHVlPWF3YWl0IHF1ZXJ5Rm4ocHVyc2VCYWxhbmNlLHF1ZXJ5UGFyYW1zKTtcbmNvbnN0IGludml0YXRpb25BbW91bnQ9QW1vdW50TWF0aC5tYWtlKGludml0YXRpb25CcmFuZCx2YWx1ZSk7XG5jb25zdCBpbnZpdGF0aW9uUD1FKGludml0YXRpb25QdXJzZSkud2l0aGRyYXcoaW52aXRhdGlvbkFtb3VudCk7XG5yZXR1cm4gaW52aXRhdGlvblA7XG4gfTtcbnJldHVybiBmaW5kSW52aXRhdGlvbjtcbiB9O1xuXG5jb25zdCBtYWtlQ29udGludWluZ0ludml0YXRpb249YXN5bmMoXG5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LFxuZGFwcE9yaWdpbixcbntwcmlvck9mZmVySWQ6cmF3UHJpb3JPZmZlcklkLGRlc2NyaXB0aW9ufSk9Plxue1xuYXNzZXJ0Rmlyc3RDYXBBU0NJSShkZXNjcmlwdGlvbik7XG5cbmNvbnN0IHByaW9yT2ZmZXJJZD1tYWtlSWQoZGFwcE9yaWdpbixyYXdQcmlvck9mZmVySWQpO1xuY29uc3Qgb2ZmZXJSZXN1bHQ9YXdhaXQgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQocHJpb3JPZmZlcklkKS5wcm9taXNlO1xuYXNzZXJ0KFxucGFzc1N0eWxlT2Yob2ZmZXJSZXN1bHQpPT09J2NvcHlSZWNvcmQnLFxuIGBvZmZlclJlc3VsdCBtdXN0IGJlIGEgcmVjb3JkIHRvIGhhdmUgYW4gaW52aXRhdGlvbk1ha2VycyBwcm9wZXJ0eWApO1xuXG5hc3NlcnQoXG5vZmZlclJlc3VsdC5pbnZpdGF0aW9uTWFrZXJzLFxuIGBvZmZlclJlc3VsdCBkb2VzIG5vdCBoYXZlIGFuIGludml0YXRpb25NYWtlcnMgcHJvcGVydHlgKTtcblxuXG5jb25zdCBpbnZpdGF0aW9uUD1FKG9mZmVyUmVzdWx0Lmludml0YXRpb25NYWtlcnMpW2Rlc2NyaXB0aW9uXSgpO1xucmV0dXJuIGludml0YXRpb25QO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbnZpdGF0aW9uPWFzeW5jKFxuaW52aXRhdGlvbk1ha2VyLFxuaW5zdGFuY2VIYW5kbGVCb2FyZElkLFxuYm9hcmQsXG56b2UpPT5cbntcbmNvbnN0IGluc3RhbmNlPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5FKGJvYXJkKS5nZXRWYWx1ZShpbnN0YW5jZUhhbmRsZUJvYXJkSWQpO1xuXG5jb25zdCBwdWJsaWNGYWNldD1FKHpvZSkuZ2V0UHVibGljRmFjZXQoaW5zdGFuY2UpO1xuY29uc3R7bWV0aG9kLGFyZ3M9W119PWludml0YXRpb25NYWtlcjtcblxucmV0dXJuIEUocHVibGljRmFjZXQpW21ldGhvZF0oLi4uYXJncyk7XG4gfTtcblxuY29uc3QgICAgICAgIGZpbmRPck1ha2VJbnZpdGF0aW9uPWFzeW5jKFxuaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdCxcbmJvYXJkLFxuem9lLFxuaW52aXRhdGlvblB1cnNlLFxuaW52aXRhdGlvbkJyYW5kLFxub2ZmZXIpPT5cbntcbmlmKG9mZmVyLmludml0YXRpb24pe1xuLy9cbnJldHVybiBvZmZlci5pbnZpdGF0aW9uO1xuIH1cblxuY29uc3QgZmluZEludml0YXRpb249bWFrZUZpbmRJbnZpdGF0aW9uKGludml0YXRpb25QdXJzZSxpbnZpdGF0aW9uQnJhbmQpO1xuXG4vL1xuaWYob2ZmZXIuaW52aXRlSGFuZGxlQm9hcmRJZCl7XG5jb25zdCBxdWVyeVBhcmFtcz17XG5ib2FyZCxcbmJvYXJkSWQ6b2ZmZXIuaW52aXRlSGFuZGxlQm9hcmRJZH07XG5cbnJldHVybiBmaW5kSW52aXRhdGlvbihmaW5kQnlCb2FyZElkLHF1ZXJ5UGFyYW1zKTtcbiB9XG5cbi8vXG5pZihvZmZlci5pbnZpdGF0aW9uSGFuZGxlQm9hcmRJZCl7XG5jb25zdCBxdWVyeVBhcmFtcz17XG5ib2FyZCxcbmJvYXJkSWQ6b2ZmZXIuaW52aXRhdGlvbkhhbmRsZUJvYXJkSWR9O1xuXG5yZXR1cm4gZmluZEludml0YXRpb24oZmluZEJ5Qm9hcmRJZCxxdWVyeVBhcmFtcyk7XG4gfVxuXG5pZihvZmZlci5pbnZpdGF0aW9uTWFrZXIpe1xucmV0dXJuIG1ha2VJbnZpdGF0aW9uKFxub2ZmZXIuaW52aXRhdGlvbk1ha2VyLFxub2ZmZXIuaW5zdGFuY2VIYW5kbGVCb2FyZElkLFxuYm9hcmQsXG56b2UpO1xuXG4gfVxuXG5pZihvZmZlci5pbnZpdGF0aW9uUXVlcnkpe1xucmV0dXJuIGZpbmRJbnZpdGF0aW9uKGZpbmRCeUtleVZhbHVlUGFpcnMsb2ZmZXIuaW52aXRhdGlvblF1ZXJ5KTtcbiB9XG5cbmlmKG9mZmVyLmNvbnRpbnVpbmdJbnZpdGF0aW9uKXtcbmNvbnN0IGRhcHBPcmlnaW49XG5vZmZlci5yZXF1ZXN0Q29udGV4dCYmb2ZmZXIucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbj9cbm9mZmVyLnJlcXVlc3RDb250ZXh0LmRhcHBPcmlnaW46XG4gYHVua25vd25gO1xucmV0dXJuIG1ha2VDb250aW51aW5nSW52aXRhdGlvbihcbmlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQsXG5kYXBwT3JpZ2luLFxub2ZmZXIuY29udGludWluZ0ludml0YXRpb24pO1xuXG4gfVxuXG50aHJvdyBGYWlsIGBubyBpbnZpdGF0aW9uIHdhcyBmb3VuZCBvciBtYWRlIGZvciB0aGlzIG9mZmVyICR7b2ZmZXIuaWR9YDtcbiB9OyRo4oCNX29uY2UuZmluZE9yTWFrZUludml0YXRpb24oZmluZE9yTWFrZUludml0YXRpb24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUlkIjpbIm1ha2VJZCJdLCJmaW5kT3JNYWtlSW52aXRhdGlvbiI6WyJmaW5kT3JNYWtlSW52aXRhdGlvbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA8aU7GUAIAAFACAAA6AAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxNy4xL3NyYy9pbnRlcm5hbC10eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABV4Uy+oCAAAqAgAADcAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE3LjEvc3JjL2lzc3VlclRhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAYWdvcmljL3N0b3JlIiwiLi9pbnRlcm5hbC10eXBlcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VJc3N1ZXJUYWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEUsbWFrZVNjYWxhcldlYWtNYXBTdG9yZTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0ID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibWFrZVNjYWxhcldlYWtNYXBTdG9yZVwiLCBbJGjigI1fYSA9PiAobWFrZVNjYWxhcldlYWtNYXBTdG9yZSA9ICRo4oCNX2EpXV1dXSxbXCIuL2ludGVybmFsLXR5cGVzLmpzXCIsIFtdXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlzc3VlclRhYmxlPSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRUb0lzc3VlclJlY29yZD1tYWtlU2NhbGFyV2Vha01hcFN0b3JlKCdicmFuZCcpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpc3N1ZXJUb0lzc3VlclJlY29yZD1tYWtlU2NhbGFyV2Vha01hcFN0b3JlKCdpc3N1ZXInKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3VlclRhYmxlPXtcbmhhc0J5QnJhbmQ6YnJhbmRUb0lzc3VlclJlY29yZC5oYXMsXG5nZXRCeUJyYW5kOmJyYW5kVG9Jc3N1ZXJSZWNvcmQuZ2V0LFxuaGFzQnlJc3N1ZXI6aXNzdWVyVG9Jc3N1ZXJSZWNvcmQuaGFzLFxuZ2V0QnlJc3N1ZXI6aXNzdWVyVG9Jc3N1ZXJSZWNvcmQuZ2V0LFxuLy9cbi8vXG5pbml0SXNzdWVyOmFzeW5jKGlzc3VlclAsYWRkTWV0YT0oeCk9PngpPT57XG5jb25zdCBicmFuZFA9RShpc3N1ZXJQKS5nZXRCcmFuZCgpO1xuY29uc3QgYnJhbmRJc3N1ZXJNYXRjaFA9RShicmFuZFApLmlzTXlJc3N1ZXIoaXNzdWVyUCk7XG5jb25zdCBkaXNwbGF5SW5mb1A9RShicmFuZFApLmdldERpc3BsYXlJbmZvKCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdFtpc3N1ZXIsYnJhbmQsYnJhbmRJc3N1ZXJNYXRjaCxkaXNwbGF5SW5mb109YXdhaXQgUHJvbWlzZS5hbGwoW1xuaXNzdWVyUCxcbmJyYW5kUCxcbmJyYW5kSXNzdWVyTWF0Y2hQLFxuZGlzcGxheUluZm9QXSk7XG5cbi8vXG5cbmlmKGlzc3VlclRvSXNzdWVyUmVjb3JkLmhhcyhpc3N1ZXIpKXtcbnJldHVybiBpc3N1ZXJUb0lzc3VlclJlY29yZC5nZXQoaXNzdWVyKTtcbiB9XG5hc3NlcnQoXG5icmFuZElzc3Vlck1hdGNoLFxuIGBpc3N1ZXIgd2FzIHVzaW5nIGEgYnJhbmQgd2hpY2ggd2FzIG5vdCBpdHMgb3duYCk7XG5cbmlzc3VlclRhYmxlLmluaXRJc3N1ZXJCeVJlY29yZChcbmFkZE1ldGEoe1xuYnJhbmQsXG5pc3N1ZXIsXG5hc3NldEtpbmQ6ZGlzcGxheUluZm8uYXNzZXRLaW5kLFxuZGlzcGxheUluZm99KSk7XG5cblxucmV0dXJuIGlzc3VlclRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xuIH0sXG5pbml0SXNzdWVyQnlSZWNvcmQ6KGlzc3VlclJlY29yZCk9PntcbmNvbnN0e2JyYW5kLGlzc3Vlcn09aXNzdWVyUmVjb3JkO1xuYnJhbmRUb0lzc3VlclJlY29yZC5pbml0KGJyYW5kLGlzc3VlclJlY29yZCk7XG5pc3N1ZXJUb0lzc3VlclJlY29yZC5pbml0KGlzc3Vlcixpc3N1ZXJSZWNvcmQpO1xuIH19O1xuXG5cbnJldHVybiBpc3N1ZXJUYWJsZTtcbiB9OyRo4oCNX29uY2UubWFrZUlzc3VlclRhYmxlKG1ha2VJc3N1ZXJUYWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlSXNzdWVyVGFibGUiOlsibWFrZUlzc3VlclRhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKvdjZosHgAALB4AADkAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE3LjEvc3JjL2xpYi1kZWh5ZHJhdGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJpc1BhdGgiLCJtYWtlRGVoeWRyYXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEZhaWwscSxtYWtlTWFyc2hhbCxtYXBJdGVyYWJsZSxtYWtlTGVnYWN5TWFwLG1ha2VTY2FsYXJNYXBTdG9yZTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0ID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIm1ha2VNYXJzaGFsXCIsIFskaOKAjV9hID0+IChtYWtlTWFyc2hhbCA9ICRo4oCNX2EpXV0sW1wibWFwSXRlcmFibGVcIiwgWyRo4oCNX2EgPT4gKG1hcEl0ZXJhYmxlID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm1ha2VMZWdhY3lNYXBcIiwgWyRo4oCNX2EgPT4gKG1ha2VMZWdhY3lNYXAgPSAkaOKAjV9hKV1dLFtcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjigI1fYSA9PiAobWFrZVNjYWxhck1hcFN0b3JlID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQYXRoPSh4KT0+e1xuaWYoIUFycmF5LmlzQXJyYXkoeCkpe1xucmV0dXJuIGZhbHNlO1xuIH1cbngubGVuZ3RoPjB8fEZhaWwgYFBhdGggJHtxKHgpfSBtdXN0IG5vdCBiZSBlbXB0eWA7XG5mb3IoY29uc3QgbmFtZSBvZiB4KXtcbmlmKHR5cGVvZiBuYW1lIT09J3N0cmluZycpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9OyRo4oCNX29uY2UuaXNQYXRoKGlzUGF0aCk7XG5cbmNvbnN0IElNUExPREVfUFJFRklYPSdJRTonO1xuXG4vL1xuLy9cbi8vXG5jb25zdCAgICAgICAgbWFrZURlaHlkcmF0b3I9KGluaXRpYWxVbm5hbWVkQ291bnQ9MCk9PntcbmxldCB1bm5hbWVkQ291bnQ9aW5pdGlhbFVubmFtZWRDb3VudDtcblxuLy9cbmNvbnN0IHBldG5hbWVLaW5kVG9NYXBwaW5nPW1ha2VMZWdhY3lNYXAoJ3BldG5hbWVLaW5kJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzZWFyY2hPcmRlcj1bXTtcblxuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB2YWxUb1BhdGhzPW1ha2VTY2FsYXJNYXBTdG9yZSgndmFsdWUnKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgZXhwbG9kZT0oZGF0YSk9PntcbmRhdGEuc3RhcnRzV2l0aChJTVBMT0RFX1BSRUZJWCl8fFxuRmFpbCBgZXhwbG9kZWQgc3RyaW5nICR7ZGF0YX0gbXVzdCBzdGFydCB3aXRoICR7cShJTVBMT0RFX1BSRUZJWCl9YDtcbmNvbnN0IHN0cm9uZ25hbWU9SlNPTi5wYXJzZShkYXRhLnNsaWNlKElNUExPREVfUFJFRklYLmxlbmd0aCkpO1xuaWYoIWlzUGF0aChzdHJvbmduYW1lKSl7XG5yZXR1cm4gc3Ryb25nbmFtZTtcbiB9XG4vL1xuY29uc3R7dmFsVG9QZXRuYW1lOnJvb3RUb1BldG5hbWV9PWVkZ2VNYXBwaW5nO1xuY29uc3QgcGV0bmFtZT1yb290VG9QZXRuYW1lLmdldChzdHJvbmduYW1lWzBdKTtcbmFzc2VydCghaXNQYXRoKHBldG5hbWUpKTtcbnN0cm9uZ25hbWVbMF09cGV0bmFtZTtcbnJldHVybiBoYXJkZW4oc3Ryb25nbmFtZSk7XG4gfTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgaW1wbG9kZT0oc3Ryb25nbmFtZSk9PntcbmlmKCFpc1BhdGgoc3Ryb25nbmFtZSkpe1xucmV0dXJuIGAke0lNUExPREVfUFJFRklYfSR7SlNPTi5zdHJpbmdpZnkoc3Ryb25nbmFtZSl9YDtcbiB9XG5cbi8vXG5jb25zdCBwYXRoPVsuLi5zdHJvbmduYW1lXTtcbi8vXG5jb25zdHtwZXRuYW1lVG9WYWw6cGV0bmFtZVRvUm9vdH09ZWRnZU1hcHBpbmc7XG5pZighcGV0bmFtZVRvUm9vdC5oYXMocGF0aFswXSkpe1xuLy9cbkZhaWwgYEVkZ2VuYW1lIGZvciAke3EocGF0aFswXSl9IHBldG5hbWUgbm90IGZvdW5kYDtcbiB9XG5jb25zdCByb290PXBldG5hbWVUb1Jvb3QuZ2V0KHBhdGhbMF0pO1xucGF0aFswXT1yb290O1xuXG5yZXR1cm4gYCR7SU1QTE9ERV9QUkVGSVh9JHtKU09OLnN0cmluZ2lmeShwYXRoKX1gO1xuIH07XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZU1hcHBpbmc9KGtpbmQse3VzZUxlZ2FjeU1hcD1mYWxzZX09e30pPT57XG50eXBlb2Yga2luZD09PSdzdHJpbmcnfHwgYGtpbmQgJHtraW5kfSBtdXN0IGJlIGEgc3RyaW5nYDtcbmNvbnN0IG1ha2VNYXA9dXNlTGVnYWN5TWFwP21ha2VMZWdhY3lNYXA6bWFrZVNjYWxhck1hcFN0b3JlO1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmF3VmFsVG9QZXRuYW1lPW1ha2VNYXAoJ3ZhbHVlJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdmFsVG9QZXRuYW1lPXtcbi4uLnJhd1ZhbFRvUGV0bmFtZSxcbnNldChrZXksdmFsKXtcbnJhd1ZhbFRvUGV0bmFtZS5zZXQoa2V5LGltcGxvZGUodmFsKSk7XG4gfSxcbmluaXQoa2V5LHZhbCl7XG5yYXdWYWxUb1BldG5hbWUuaW5pdChrZXksaW1wbG9kZSh2YWwpKTtcbiB9LFxuZ2V0KGtleSl7XG5yZXR1cm4gZXhwbG9kZShyYXdWYWxUb1BldG5hbWUuZ2V0KGtleSkpO1xuIH0sXG5lbnRyaWVzKCl7XG5yZXR1cm4gbWFwSXRlcmFibGUocmF3VmFsVG9QZXRuYW1lLmVudHJpZXMoKSwoW2tleSx2YWxdKT0+W1xua2V5LFxuZXhwbG9kZSh2YWwpXSk7XG5cbiB9LFxudmFsdWVzKCl7XG5yZXR1cm4gbWFwSXRlcmFibGUocmF3VmFsVG9QZXRuYW1lLnZhbHVlcygpLCh2YWwpPT5leHBsb2RlKHZhbCkpO1xuIH19O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJhd1BldG5hbWVUb1ZhbD1tYWtlU2NhbGFyTWFwU3RvcmUoJ3BldG5hbWUnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBldG5hbWVUb1ZhbD17XG4uLi5yYXdQZXRuYW1lVG9WYWwsXG5pbml0KGtleSx2YWwpe1xucmV0dXJuIHJhd1BldG5hbWVUb1ZhbC5pbml0KGltcGxvZGUoa2V5KSx2YWwpO1xuIH0sXG5zZXQoa2V5LHZhbCl7XG5yZXR1cm4gcmF3UGV0bmFtZVRvVmFsLnNldChpbXBsb2RlKGtleSksdmFsKTtcbiB9LFxuaGFzKGtleSl7XG50cnl7XG5yZXR1cm4gcmF3UGV0bmFtZVRvVmFsLmhhcyhpbXBsb2RlKGtleSkpO1xuIH1jYXRjaChlKXtcbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH0sXG5nZXQoa2V5KXtcbnJldHVybiByYXdQZXRuYW1lVG9WYWwuZ2V0KGltcGxvZGUoa2V5KSk7XG4gfSxcbmRlbGV0ZShrZXkpe1xucmV0dXJuIHJhd1BldG5hbWVUb1ZhbC5kZWxldGUoaW1wbG9kZShrZXkpKTtcbiB9LFxua2V5cygpe1xucmV0dXJuIG1hcEl0ZXJhYmxlKHJhd1BldG5hbWVUb1ZhbC5rZXlzKCksKGtleSk9PmV4cGxvZGUoa2V5KSk7XG4gfSxcbmVudHJpZXMoKXtcbnJldHVybiBtYXBJdGVyYWJsZShyYXdQZXRuYW1lVG9WYWwuZW50cmllcygpLChba2V5LHZhbF0pPT5bXG5leHBsb2RlKGtleSksXG52YWxdKTtcblxuIH19O1xuXG5cbi8qXG5cblxuICAgICAqL1xuY29uc3QgYWRkUGF0aD0ocGF0aCx2YWwpPT57XG5pc1BhdGgocGF0aCl8fEZhaWwgYHBhdGggJHtxKHBhdGgpfSBtdXN0IGJlIGFuIGFycmF5IG9mIHN0cmluZ3NgO1xuXG5pZihcbiF2YWxUb1BldG5hbWUuaGFzKHZhbCkmJlxuLy9cbmVkZ2VNYXBwaW5nLnZhbFRvUGV0bmFtZS5oYXMocGF0aFswXSkpXG57XG4vL1xuLy9cbnZhbFRvUGV0bmFtZS5pbml0KHZhbCxwYXRoKTtcbiB9XG5cbi8vXG5pZighdmFsVG9QYXRocy5oYXModmFsKSl7XG52YWxUb1BhdGhzLmluaXQodmFsLGhhcmRlbihbcGF0aF0pKTtcbnJldHVybjtcbiB9XG5jb25zdCBwYXRocz12YWxUb1BhdGhzLmdldCh2YWwpO1xuXG4vL1xuY29uc3QgZm91bmQ9cGF0aHMuZmluZCgoZW5hbWUpPT57XG5pZihlbmFtZS5sZW5ndGghPT1wYXRoLmxlbmd0aCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuZm9yKGxldCBpPTA7aTxlbmFtZS5sZW5ndGg7aSs9MSl7XG5pZihlbmFtZVtpXSE9PXBhdGhbaV0pe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9KTtcblxuLy9cbmlmKCFmb3VuZCl7XG52YWxUb1BhdGhzLnNldCh2YWwsaGFyZGVuKFsuLi5wYXRocyxwYXRoXSkpO1xuIH1cbiB9O1xuXG5jb25zdCBhZGRQZXRuYW1lPShwZXRuYW1lLHZhbCk9PntcbmlmKHBldG5hbWVUb1ZhbC5oYXMocGV0bmFtZSkmJnBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSk9PT12YWwpe1xucmV0dXJuO1xuIH1cbiFwZXRuYW1lVG9WYWwuaGFzKHBldG5hbWUpfHxGYWlsIGBwZXRuYW1lICR7cGV0bmFtZX0gaXMgYWxyZWFkeSBpbiB1c2VgO1xuIXZhbFRvUGV0bmFtZS5oYXModmFsKXx8RmFpbCBgdmFsICR7dmFsfSBhbHJlYWR5IGhhcyBhIHBldG5hbWVgO1xucGV0bmFtZVRvVmFsLmluaXQocGV0bmFtZSx2YWwpO1xudmFsVG9QZXRuYW1lLmluaXQodmFsLHBldG5hbWUpO1xuXG5pZihpc1BhdGgocGV0bmFtZSkpe1xuYWRkUGF0aChwZXRuYW1lLHZhbCk7XG4gfVxuIH07XG5cbmNvbnN0IHJlbmFtZVBldG5hbWU9KHBldG5hbWUsdmFsKT0+e1xudmFsVG9QZXRuYW1lLmhhcyh2YWwpfHxcbkZhaWwgYHZhbCAke3ZhbH0gaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgbmFtZWQsIHdvdWxkIHlvdSBsaWtlIHRvIGFkZCBpdCBpbnN0ZWFkP2A7XG4hcGV0bmFtZVRvVmFsLmhhcyhwZXRuYW1lKXx8RmFpbCBgcGV0bmFtZSAke3BldG5hbWV9IGlzIGFscmVhZHkgaW4gdXNlYDtcbi8vXG5jb25zdCBvbGRQZXRuYW1lPXZhbFRvUGV0bmFtZS5nZXQodmFsKTtcbnBldG5hbWVUb1ZhbC5kZWxldGUob2xkUGV0bmFtZSk7XG52YWxUb1BldG5hbWUuZGVsZXRlKHZhbCk7XG5cbi8vXG5wZXRuYW1lVG9WYWwuaW5pdChwZXRuYW1lLHZhbCk7XG52YWxUb1BldG5hbWUuaW5pdCh2YWwscGV0bmFtZSk7XG4gfTtcblxuLypcblxuXG5cbiAgICAgKi9cbmNvbnN0IHN1Z2dlc3RQZXRuYW1lPShwZXRuYW1lLHZhbCk9PntcbmlmKHZhbFRvUGV0bmFtZS5oYXModmFsKSl7XG4vL1xucmV0dXJuIHZhbFRvUGV0bmFtZS5nZXQodmFsKTtcbiB9XG5cbi8vXG5sZXQgdW5pcXVlUGF0aD1wZXRuYW1lO1xubGV0IG5vbmNlPTI7XG53aGlsZShwZXRuYW1lVG9WYWwuaGFzKHVuaXF1ZVBhdGgpKXtcbi8vXG5pZihpc1BhdGgocGV0bmFtZSkpe1xudW5pcXVlUGF0aD1bLi4ucGV0bmFtZSwgYCR7bm9uY2V9YF07XG4gfWVsc2V7XG51bmlxdWVQYXRoPSBgJHtwZXRuYW1lfSR7bm9uY2V9YDtcbiB9XG5ub25jZSs9MTtcbiB9XG5cbi8vXG4vL1xuLy9cbmFkZFBldG5hbWUodW5pcXVlUGF0aCx2YWwpO1xucmV0dXJuIHVuaXF1ZVBhdGg7XG4gfTtcblxuY29uc3QgZGVsZXRlUGV0bmFtZT0ocGV0bmFtZSk9PntcbnBldG5hbWVUb1ZhbC5oYXMocGV0bmFtZSl8fFxuRmFpbCBgcGV0bmFtZSAke3EoXG5wZXRuYW1lKVxuIH0gaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgbmFtZWQsIHdvdWxkIHlvdSBsaWtlIHRvIGFkZCBpdCBpbnN0ZWFkP2A7XG5cbi8vXG5jb25zdCB2YWw9cGV0bmFtZVRvVmFsLmdldChwZXRuYW1lKTtcbnBldG5hbWVUb1ZhbC5kZWxldGUocGV0bmFtZSk7XG52YWxUb1BldG5hbWUuZGVsZXRlKHZhbCk7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWFwcGluZz1oYXJkZW4oe1xuaW1wbG9kZSxcbmV4cGxvZGUsXG52YWxUb1BldG5hbWUsXG52YWxUb1BhdGhzLFxucGV0bmFtZVRvVmFsLFxuYWRkUGV0bmFtZSxcbmFkZFBhdGgsXG5yZW5hbWVQZXRuYW1lLFxuZGVsZXRlUGV0bmFtZSxcbnN1Z2dlc3RQZXRuYW1lLFxua2luZH0pO1xuXG5wZXRuYW1lS2luZFRvTWFwcGluZy5pbml0KGtpbmQsbWFwcGluZyk7XG5yZXR1cm4gbWFwcGluZztcbiB9O1xuXG5jb25zdCBlZGdlTWFwcGluZz1tYWtlTWFwcGluZygnZWRnZScpO1xuY29uc3QgdW5uYW1lZE1hcHBpbmc9bWFrZU1hcHBpbmcoJ3VubmFtZWQnKTtcblxuY29uc3QgYWRkVG9Vbm5hbWVkPSh2YWwpPT57XG51bm5hbWVkQ291bnQrPTE7XG5jb25zdCBwbGFjZWhvbGRlcj0gYHVubmFtZWQtJHt1bm5hbWVkQ291bnR9YDtcbnVubmFtZWRNYXBwaW5nLmFkZFBldG5hbWUocGxhY2Vob2xkZXIsdmFsKTtcbmNvbnN0IHBsYWNlaG9sZGVyTmFtZT1oYXJkZW4oe1xua2luZDondW5uYW1lZCcsXG5wZXRuYW1lOnBsYWNlaG9sZGVyfSk7XG5cbnJldHVybiBwbGFjZWhvbGRlck5hbWU7XG4gfTtcblxuLy9cbi8vXG5jb25zdCBjb252ZXJ0VmFsVG9OYW1lPSh2YWwpPT57XG5mb3IobGV0IGk9MDtpPHNlYXJjaE9yZGVyLmxlbmd0aDtpKz0xKXtcbmNvbnN0IGtpbmQ9c2VhcmNoT3JkZXJbaV07XG5jb25zdHt2YWxUb1BldG5hbWV9PXBldG5hbWVLaW5kVG9NYXBwaW5nLmdldChraW5kKTtcbmlmKHZhbFRvUGV0bmFtZS5oYXModmFsKSl7XG5yZXR1cm4gaGFyZGVuKHtcbmtpbmQsXG5wZXRuYW1lOnZhbFRvUGV0bmFtZS5nZXQodmFsKX0pO1xuXG4gfVxuIH1cbi8vXG4vL1xuaWYodW5uYW1lZE1hcHBpbmcudmFsVG9QZXRuYW1lLmhhcyh2YWwpKXtcbnJldHVybiBoYXJkZW4oe1xua2luZDondW5uYW1lZCcsXG5wZXRuYW1lOnVubmFtZWRNYXBwaW5nLnZhbFRvUGV0bmFtZS5nZXQodmFsKX0pO1xuXG4gfVxuLy9cbmNvbnN0IHBsYWNlaG9sZGVyTmFtZT1hZGRUb1VubmFtZWQodmFsKTtcbnJldHVybiBwbGFjZWhvbGRlck5hbWU7XG4gfTtcblxuY29uc3QgY29udmVydE5hbWVUb1ZhbD0oe2tpbmQscGV0bmFtZX0sX2lmYWNlPXVuZGVmaW5lZCk9PntcbmNvbnN0e3BldG5hbWVUb1ZhbH09cGV0bmFtZUtpbmRUb01hcHBpbmcuZ2V0KGtpbmQpO1xucmV0dXJuIHBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSk7XG4gfTtcblxuY29uc3R7dG9DYXBEYXRhOmRlaHlkcmF0ZSxmcm9tQ2FwRGF0YTpoeWRyYXRlfT1tYWtlTWFyc2hhbChcbmNvbnZlcnRWYWxUb05hbWUsXG5jb252ZXJ0TmFtZVRvVmFsLFxue1xubWFyc2hhbE5hbWU6J2h5ZHJhdGlvbicsXG4vL1xuLy9cbmVycm9ySWROdW06MzBfMDAwLFxuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuaHlkcmF0ZSxcbmRlaHlkcmF0ZSxcbmVkZ2VNYXBwaW5nLFxuLypcblxuXG5cblxuICAgICAqL1xubWFrZU1hcHBpbmc6KGtpbmQsbGVnYWN5T3B0aW9ucz11bmRlZmluZWQpPT57XG5jb25zdCBtYXBwaW5nPW1ha2VNYXBwaW5nKGtpbmQsbGVnYWN5T3B0aW9ucyk7XG5zZWFyY2hPcmRlci5wdXNoKGtpbmQpO1xucmV0dXJuIG1hcHBpbmc7XG4gfX0pO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VEZWh5ZHJhdG9yKG1ha2VEZWh5ZHJhdG9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUGF0aCI6WyJpc1BhdGgiXSwibWFrZURlaHlkcmF0b3IiOlsibWFrZURlaHlkcmF0b3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAA0PqN5GlAACRpQAANgAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTcuMS9zcmMvbGliLXdhbGxldC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL2NhY2hlIiwiQGFnb3JpYy9pbnRlcm5hbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qcyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy9lcnRwIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9uYXQiLCJAYWdvcmljL25vdGlmaWVyIiwiQGVuZG8vcHJvbWlzZS1raXQiLCJAYWdvcmljL3NtYXJ0LXdhbGxldC9zcmMvbWFyc2hhbC1jb250ZXh0cy5qcyIsIi4vaXNzdWVyVGFibGUuanMiLCIuL2xpYi1kZWh5ZHJhdGUuanMiLCIuL2ZpbmRPck1ha2VJbnZpdGF0aW9uLmpzIiwiLi9iaWdpbnRTdHJpbmdpZnkuanMiLCIuL2FjdGlvbnMuanMiLCIuL2ludGVybmFsLXR5cGVzLmpzIl0sImV4cG9ydHMiOlsibWFrZVdhbGxldFJvb3QiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxxLEZhaWwsbWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3Isb2JqZWN0TWFwLFdhbGxldE5hbWUsc2xvdFN0cmluZ1Vuc2VyaWFsaXplLG1ha2VMZWdhY3lNYXAsbWFrZVNjYWxhck1hcFN0b3JlLG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUsbWFrZVNjYWxhckJpZ01hcFN0b3JlLEFtb3VudE1hdGgsRSxwYXNzU3R5bGVPZixGYXIsbWFwSXRlcmFibGUsTmF0LG1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyLG1ha2VOb3RpZmllcktpdCxvYnNlcnZlSXRlcmF0aW9uLG9ic2VydmVOb3RpZmllcixzdWJzY3JpYmVFYWNoLG1ha2VQcm9taXNlS2l0LG1ha2VFeHBvcnRDb250ZXh0LG1ha2VJc3N1ZXJUYWJsZSxtYWtlRGVoeWRyYXRvcixtYWtlSWQsZmluZE9yTWFrZUludml0YXRpb24sYmlnaW50U3RyaW5naWZ5LG1ha2VQYXltZW50QWN0aW9uczskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0ID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvY2FjaGVcIiwgW1tcIm1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvciA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRo4oCNX2EgPT4gKG9iamVjdE1hcCA9ICRo4oCNX2EpXV0sW1wiV2FsbGV0TmFtZVwiLCBbJGjigI1fYSA9PiAoV2FsbGV0TmFtZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanNcIiwgW1tcInNsb3RTdHJpbmdVbnNlcmlhbGl6ZVwiLCBbJGjigI1fYSA9PiAoc2xvdFN0cmluZ1Vuc2VyaWFsaXplID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm1ha2VMZWdhY3lNYXBcIiwgWyRo4oCNX2EgPT4gKG1ha2VMZWdhY3lNYXAgPSAkaOKAjV9hKV1dLFtcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjigI1fYSA9PiAobWFrZVNjYWxhck1hcFN0b3JlID0gJGjigI1fYSldXSxbXCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyV2Vha01hcFN0b3JlID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIm1ha2VTY2FsYXJCaWdNYXBTdG9yZVwiLCBbJGjigI1fYSA9PiAobWFrZVNjYWxhckJpZ01hcFN0b3JlID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvZXJ0cFwiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjigI1fYSA9PiAoQW1vdW50TWF0aCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaOKAjV9hID0+IChwYXNzU3R5bGVPZiA9ICRo4oCNX2EpXV0sW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dLFtcIm1hcEl0ZXJhYmxlXCIsIFskaOKAjV9hID0+IChtYXBJdGVyYWJsZSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjigI1fYSA9PiAoTmF0ID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyXCIsIFskaOKAjV9hID0+IChtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciA9ICRo4oCNX2EpXV0sW1wibWFrZU5vdGlmaWVyS2l0XCIsIFskaOKAjV9hID0+IChtYWtlTm90aWZpZXJLaXQgPSAkaOKAjV9hKV1dLFtcIm9ic2VydmVJdGVyYXRpb25cIiwgWyRo4oCNX2EgPT4gKG9ic2VydmVJdGVyYXRpb24gPSAkaOKAjV9hKV1dLFtcIm9ic2VydmVOb3RpZmllclwiLCBbJGjigI1fYSA9PiAob2JzZXJ2ZU5vdGlmaWVyID0gJGjigI1fYSldXSxbXCJzdWJzY3JpYmVFYWNoXCIsIFskaOKAjV9hID0+IChzdWJzY3JpYmVFYWNoID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjigI1fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zbWFydC13YWxsZXQvc3JjL21hcnNoYWwtY29udGV4dHMuanNcIiwgW1tcIm1ha2VFeHBvcnRDb250ZXh0XCIsIFskaOKAjV9hID0+IChtYWtlRXhwb3J0Q29udGV4dCA9ICRo4oCNX2EpXV1dXSxbXCIuL2lzc3VlclRhYmxlLmpzXCIsIFtbXCJtYWtlSXNzdWVyVGFibGVcIiwgWyRo4oCNX2EgPT4gKG1ha2VJc3N1ZXJUYWJsZSA9ICRo4oCNX2EpXV1dXSxbXCIuL2xpYi1kZWh5ZHJhdGUuanNcIiwgW1tcIm1ha2VEZWh5ZHJhdG9yXCIsIFskaOKAjV9hID0+IChtYWtlRGVoeWRyYXRvciA9ICRo4oCNX2EpXV1dXSxbXCIuL2ZpbmRPck1ha2VJbnZpdGF0aW9uLmpzXCIsIFtbXCJtYWtlSWRcIiwgWyRo4oCNX2EgPT4gKG1ha2VJZCA9ICRo4oCNX2EpXV0sW1wiZmluZE9yTWFrZUludml0YXRpb25cIiwgWyRo4oCNX2EgPT4gKGZpbmRPck1ha2VJbnZpdGF0aW9uID0gJGjigI1fYSldXV1dLFtcIi4vYmlnaW50U3RyaW5naWZ5LmpzXCIsIFtbXCJiaWdpbnRTdHJpbmdpZnlcIiwgWyRo4oCNX2EgPT4gKGJpZ2ludFN0cmluZ2lmeSA9ICRo4oCNX2EpXV1dXSxbXCIuL2FjdGlvbnMuanNcIiwgW1tcIm1ha2VQYXltZW50QWN0aW9uc1wiLCBbJGjigI1fYSA9PiAobWFrZVBheW1lbnRBY3Rpb25zID0gJGjigI1fYSldXV1dLFtcIi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VXYWxsZXRSb290LCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlV2FsbGV0Um9vdFwifSk7JGjigI1fb25jZS5tYWtlV2FsbGV0Um9vdChtYWtlV2FsbGV0Um9vdCk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vL1xuY29uc3Qgbm9BY3Rpb25TdGF0ZUNoYW5nZUhhbmRsZXI9KF9uZXdTdGF0ZSk9PnsgfTtcblxuY29uc3QgY21wPShhLGIpPT57XG5pZihhPmIpe1xucmV0dXJuIDE7XG4gfVxuaWYoYT09PWIpe1xucmV0dXJuIDA7XG4gfVxucmV0dXJuLTE7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIG1ha2VXYWxsZXRSb290KHtcbnpvZSxcbmJvYXJkLFxuYWdvcmljTmFtZXMsXG5uYW1lc0J5QWRkcmVzcyxcbm15QWRkcmVzc05hbWVBZG1pbixcbnB1cnNlc1N0YXRlQ2hhbmdlSGFuZGxlcj1ub0FjdGlvblN0YXRlQ2hhbmdlSGFuZGxlcixcbmluYm94U3RhdGVDaGFuZ2VIYW5kbGVyPW5vQWN0aW9uU3RhdGVDaGFuZ2VIYW5kbGVyLFxuZGF0ZU5vdz11bmRlZmluZWR9KVxue1xuYXNzZXJ0KG15QWRkcmVzc05hbWVBZG1pbiwnbWlzc2luZyBteUFkZHJlc3NOYW1lQWRtaW4nKTtcblxubGV0IGxhc3RJZD0wO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgYWRkTWV0YT0ocmVjb3JkKT0+e1xuY29uc3R7bWV0YTpvbGRNZXRhPXt9fT1yZWNvcmQ7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtZXRhPXsuLi5vbGRNZXRhfTtcbmlmKCFtZXRhLmlkKXtcbi8vXG5sYXN0SWQrPTE7XG5tZXRhLmlkPWxhc3RJZDtcbiB9XG5pZihkYXRlTm93KXtcbmNvbnN0IG5vd1N0YW1wPWRhdGVOb3coKTtcbmlmKCFtZXRhLmNyZWF0aW9uU3RhbXApe1xuLy9cbm1ldGEuY3JlYXRpb25TdGFtcD1ub3dTdGFtcDtcbiB9XG5tZXRhLnVwZGF0ZWRTdGFtcD1ub3dTdGFtcDtcbiB9XG5yZXR1cm57Li4ucmVjb3JkLG1ldGF9O1xuIH07XG5cbmNvbnN0IGNvbnRleHQ9bWFrZUV4cG9ydENvbnRleHQoKTtcblxuLy9cbi8vXG5jb25zdHttYWtlTWFwcGluZyxkZWh5ZHJhdGUsZWRnZU1hcHBpbmd9PW1ha2VEZWh5ZHJhdG9yKCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVyc2VNYXBwaW5nPW1ha2VNYXBwaW5nKCdwdXJzZScpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGJyYW5kTWFwcGluZz1tYWtlTWFwcGluZygnYnJhbmQnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbnRhY3RNYXBwaW5nPW1ha2VNYXBwaW5nKFxuJ2NvbnRhY3QnLFxue3VzZUxlZ2FjeU1hcDp0cnVlfS8vXG4pO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGluc3RhbmNlTWFwcGluZz1tYWtlTWFwcGluZygnaW5zdGFuY2UnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5zdGFsbGF0aW9uTWFwcGluZz1tYWtlTWFwcGluZygnaW5zdGFsbGF0aW9uJyk7XG5cbmNvbnN0IGJyYW5kVGFibGU9bWFrZUlzc3VlclRhYmxlKCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpc3N1ZXJUb0JvYXJkSWQ9bWFrZVNjYWxhcldlYWtNYXBTdG9yZSgnaXNzdWVyJyk7XG5cbi8vXG5jb25zdCBpbml0SXNzdWVyVG9Cb2FyZElkPWFzeW5jKGlzc3VlcixicmFuZCk9PntcbmlmKGlzc3VlclRvQm9hcmRJZC5oYXMoaXNzdWVyKSl7XG4vL1xucmV0dXJuIGlzc3VlclRvQm9hcmRJZC5nZXQoaXNzdWVyKTtcbiB9XG5cbi8vXG5jb25zdFtpc3N1ZXJCb2FyZElkLGJyYW5kQm9hcmRJZF09YXdhaXQgUHJvbWlzZS5hbGwoW1xuRShib2FyZCkuZ2V0SWQoaXNzdWVyKSxcbkUoYm9hcmQpLmdldElkKGJyYW5kKV0pO1xuXG5pZihpc3N1ZXJUb0JvYXJkSWQuaGFzKGlzc3Vlcikpe1xuLy9cbnJldHVybiBpc3N1ZXJUb0JvYXJkSWQuZ2V0KGlzc3Vlcik7XG4gfVxuXG4vL1xuLy9cbmNvbnRleHQuZW5zdXJlQm9hcmRJZChpc3N1ZXJCb2FyZElkLGlzc3Vlcik7XG5jb250ZXh0LmluaXRCb2FyZElkKGJyYW5kQm9hcmRJZCxicmFuZCk7XG5cbi8vXG5pc3N1ZXJUb0JvYXJkSWQuaW5pdChpc3N1ZXIsaXNzdWVyQm9hcmRJZCk7XG5yZXR1cm4gaXNzdWVyQm9hcmRJZDtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVyc2VUb0JyYW5kPW1ha2VTY2FsYXJXZWFrTWFwU3RvcmUoJ3B1cnNlJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRUb0RlcG9zaXRGYWNldElkPW1ha2VTY2FsYXJNYXBTdG9yZSgnYnJhbmQnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGJyYW5kVG9BdXRvRGVwb3NpdFB1cnNlPW1ha2VTY2FsYXJNYXBTdG9yZSgnYnJhbmQnKTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaWRUb09mZmVyPW1ha2VTY2FsYXJNYXBTdG9yZSgnb2ZmZXJJZCcpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQ9bWFrZUxlZ2FjeU1hcCgnaWQnKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnZpdGF0aW9uSGFuZGxlVG9PZmZlclJlc3VsdD1cbm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUoJ2ludml0YXRpb25IYW5kbGUnKTtcblxuLy9cbmNvbnN0IGlkVG9Db21waWxlZE9mZmVyUD1uZXcgTWFwKCk7XG5jb25zdCBpZFRvQ29tcGxldGU9bmV3IE1hcCgpO1xuY29uc3QgaWRUb1NlYXQ9bmV3IE1hcCgpO1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVyc2VzU3RhdGU9bmV3IE1hcCgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1cnNlc0Z1bGxTdGF0ZT1uZXcgTWFwKCk7XG5jb25zdCBpbmJveFN0YXRlPW5ldyBNYXAoKTtcblxuLypcblxuXG5cbiAgICovXG5sZXQgem9lSW52aXRlUHVyc2U7XG5cbmNvbnN0IFpPRV9JTlZJVEVfQlJBTkRfUEVUTkFNRT0nem9lIGludml0ZSc7XG5cbmZ1bmN0aW9uIGdldFNvcnRlZFZhbHVlcyhtYXApe1xuY29uc3QgZW50cmllcz1bLi4ubWFwLmVudHJpZXMoKV07XG4vL1xuY29uc3QgdmFsdWVzPWVudHJpZXMuXG5zb3J0KChbaWQxXSxbaWQyXSk9PmNtcChpZDEsaWQyKSkuXG5tYXAoKFtfaWQsdmFsdWVdKT0+dmFsdWUpO1xuXG5yZXR1cm4gYmlnaW50U3RyaW5naWZ5KGhhcmRlbih2YWx1ZXMpKTtcbiB9XG5cbmZ1bmN0aW9uIGdldFB1cnNlc1N0YXRlKCl7XG5yZXR1cm4gZ2V0U29ydGVkVmFsdWVzKHB1cnNlc1N0YXRlKTtcbiB9XG5cbmZ1bmN0aW9uIGdldEluYm94U3RhdGUoKXtcbnJldHVybiBnZXRTb3J0ZWRWYWx1ZXMoaW5ib3hTdGF0ZSk7XG4gfVxuXG4vL1xuLy9cbi8vXG5jb25zdCBmaWxsSW5TbG90cz1zbG90U3RyaW5nVW5zZXJpYWxpemU7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0e25vdGlmaWVyOm9mZmVyc05vdGlmaWVyLHVwZGF0ZXI6b2ZmZXJzVXBkYXRlcn09bWFrZU5vdGlmaWVyS2l0KFxuW10pO1xuXG5cbmNvbnN0e3B1cnNlc05vdGlmaWVyLGF0dGVudWF0ZWRQdXJzZXNOb3RpZmllcixwdXJzZXNVcGRhdGVyfT0oKCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3R7bm90aWZpZXI6aXBuLHVwZGF0ZXI6aXB1fT1tYWtlTm90aWZpZXJLaXQoW10pO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdHtub3RpZmllcjphcG4sdXBkYXRlcjphcHV9PW1ha2VOb3RpZmllcktpdChbXSk7XG4vL1xuLypcblxuXG4gICAgICovXG5jb25zdCBpbm5lckZpbHRlcj0oe1xuYnJhbmQsXG5icmFuZEJvYXJkSWQsXG5kZXBvc2l0Qm9hcmRJZCxcbmJyYW5kUGV0bmFtZSxcbnB1cnNlUGV0bmFtZSxcbmRpc3BsYXlJbmZvLFxudmFsdWUsXG5jdXJyZW50QW1vdW50U2xvdHMsXG5jdXJyZW50QW1vdW50fSk9PlxuXG5oYXJkZW4oe1xuYnJhbmQsXG5icmFuZEJvYXJkSWQsXG4uLi4oZGVwb3NpdEJvYXJkSWQmJntkZXBvc2l0Qm9hcmRJZH0pLFxuYnJhbmRQZXRuYW1lLFxucHVyc2VQZXRuYW1lLFxuLi4uKGRpc3BsYXlJbmZvJiZ7ZGlzcGxheUluZm99KSxcbnZhbHVlLFxuY3VycmVudEFtb3VudFNsb3RzLFxuY3VycmVudEFtb3VudH0pO1xuXG5jb25zdCBmaWx0ZXI9KHN0YXRlKT0+c3RhdGUubWFwKGlubmVyRmlsdGVyKTtcbmNvbnN0IHB1PUZhcigncHVyc2VzVXBkYXRlcicse1xudXBkYXRlU3RhdGU6KG5ld1N0YXRlKT0+e1xuaXB1LnVwZGF0ZVN0YXRlKG5ld1N0YXRlKTtcbmFwdS51cGRhdGVTdGF0ZShmaWx0ZXIobmV3U3RhdGUpKTtcbiB9LFxuZmluaXNoOihmaW5hbFN0YXRlKT0+e1xuaXB1LmZpbmlzaChmaW5hbFN0YXRlKTtcbmFwdS5maW5pc2goZmlsdGVyKGZpbmFsU3RhdGUpKTtcbiB9LFxuZmFpbDoocmVhc29uKT0+e1xuaXB1LmZhaWwocmVhc29uKTtcbmFwdS5mYWlsKHJlYXNvbik7XG4gfX0pO1xuXG5yZXR1cm4gaGFyZGVuKHtcbnB1cnNlc05vdGlmaWVyOmlwbixcbmF0dGVudWF0ZWRQdXJzZXNOb3RpZmllcjphcG4sXG5wdXJzZXNVcGRhdGVyOnB1fSk7XG5cbiB9KSgpO1xuXG4vKlxuXG5cbiAgICovXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVQdXJzZXNTdGF0ZShwdXJzZVBldG5hbWUscHVyc2Upe1xuY29uc3QgcHVyc2VLZXk9cHVyc2VNYXBwaW5nLmltcGxvZGUocHVyc2VQZXRuYW1lKTtcbmZvcihjb25zdCBrZXkgb2YgcHVyc2VzU3RhdGUua2V5cygpKXtcbmlmKCFwdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmhhcyhwdXJzZU1hcHBpbmcuZXhwbG9kZShrZXkpKSl7XG5wdXJzZXNTdGF0ZS5kZWxldGUoa2V5KTtcbiB9XG4gfVxuY29uc3QgY3VycmVudEFtb3VudD1hd2FpdCBFKHB1cnNlKS5nZXRDdXJyZW50QW1vdW50KCk7XG5jb25zdHt2YWx1ZSxicmFuZH09Y3VycmVudEFtb3VudDtcbmNvbnN0IGJyYW5kUGV0bmFtZT1icmFuZE1hcHBpbmcudmFsVG9QZXRuYW1lLmdldChicmFuZCk7XG5jb25zdCBkZWh5ZHJhdGVkQ3VycmVudEFtb3VudD1kZWh5ZHJhdGUoY3VycmVudEFtb3VudCk7XG5jb25zdCBicmFuZEJvYXJkSWQ9YXdhaXQgRShib2FyZCkuZ2V0SWQoYnJhbmQpO1xuXG5sZXQgZGVwb3NpdEJvYXJkSWQ7XG5pZihcbmJyYW5kVG9BdXRvRGVwb3NpdFB1cnNlLmhhcyhicmFuZCkmJlxuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuZ2V0KGJyYW5kKT09PXB1cnNlJiZcbmJyYW5kVG9EZXBvc2l0RmFjZXRJZC5oYXMoYnJhbmQpKVxue1xuLy9cbmRlcG9zaXRCb2FyZElkPWJyYW5kVG9EZXBvc2l0RmFjZXRJZC5nZXQoYnJhbmQpO1xuIH1cblxuY29uc3QgaXNzdWVyUmVjb3JkPVxuYnJhbmRUYWJsZS5oYXNCeUJyYW5kKGJyYW5kKSYmYnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcbi8qXG5cbiAgICAgKi9cbmNvbnN0IGpzdGF0ZT1hZGRNZXRhKHtcbi4uLnB1cnNlc1N0YXRlLmdldChwdXJzZUtleSksXG5icmFuZCxcbmJyYW5kQm9hcmRJZCxcbi4uLihkZXBvc2l0Qm9hcmRJZCYme2RlcG9zaXRCb2FyZElkfSksXG5icmFuZFBldG5hbWUsXG5wdXJzZVBldG5hbWUsXG5kaXNwbGF5SW5mbzppc3N1ZXJSZWNvcmQmJmlzc3VlclJlY29yZC5kaXNwbGF5SW5mbyxcbnZhbHVlLFxuY3VycmVudEFtb3VudFNsb3RzOmRlaHlkcmF0ZWRDdXJyZW50QW1vdW50LFxuY3VycmVudEFtb3VudDpmaWxsSW5TbG90cyhkZWh5ZHJhdGVkQ3VycmVudEFtb3VudCl9KTtcblxucHVyc2VzU3RhdGUuc2V0KHB1cnNlS2V5LGpzdGF0ZSk7XG5cbnB1cnNlc0Z1bGxTdGF0ZS5zZXQoXG5wdXJzZSxcbmhhcmRlbih7XG4uLi5qc3RhdGUsXG5wdXJzZSxcbmJyYW5kLFxuYWN0aW9uczpGYXIoJ3B1cnNlLmFjdGlvbnMnLHtcbi8vXG4gICAgICBhc3luYyBzZW5kKHJlY2VpdmVyUCxzZW5kVmFsdWUpe1xuY29uc3QgYW1vdW50PUFtb3VudE1hdGgubWFrZShicmFuZCxzZW5kVmFsdWUpO1xuY29uc3QgcGF5bWVudD1hd2FpdCBFKHB1cnNlKS53aXRoZHJhdyhhbW91bnQpO1xudHJ5e1xuYXdhaXQgRShyZWNlaXZlclApLnJlY2VpdmUocGF5bWVudCk7XG4gfWNhdGNoKGUpe1xuLy9cbmF3YWl0IEUocHVyc2UpLmRlcG9zaXQocGF5bWVudCk7XG50aHJvdyBlO1xuIH1cbiB9LFxuICAgICAgYXN5bmMgcmVjZWl2ZShwYXltZW50UCl7XG5jb25zdCBwYXltZW50PWF3YWl0IHBheW1lbnRQO1xucmV0dXJuIEUocHVyc2UpLmRlcG9zaXQocGF5bWVudCk7XG4gfSxcbmRlcG9zaXQocGF5bWVudCxhbW91bnQ9dW5kZWZpbmVkKXtcbnJldHVybiBFKHB1cnNlKS5kZXBvc2l0KHBheW1lbnQsYW1vdW50KTtcbiB9fSl9KSk7XG5cblxuXG5wdXJzZXNVcGRhdGVyLnVwZGF0ZVN0YXRlKFsuLi5wdXJzZXNGdWxsU3RhdGUudmFsdWVzKCldKTtcbnB1cnNlc1N0YXRlQ2hhbmdlSGFuZGxlcihnZXRQdXJzZXNTdGF0ZSgpKTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUFsbFB1cnNlU3RhdGUoKXtcbnJldHVybiBQcm9taXNlLmFsbChcbm1hcEl0ZXJhYmxlKHB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcygpLChbcGV0bmFtZSxwdXJzZV0pPT5cbnVwZGF0ZVB1cnNlc1N0YXRlKHBldG5hbWUscHVyc2UpKSk7XG5cblxuIH1cblxuY29uc3QgZGlzcGxheT0odmFsdWUpPT5maWxsSW5TbG90cyhkZWh5ZHJhdGUoaGFyZGVuKHZhbHVlKSkpO1xuXG5jb25zdCBleHBhbmRJbnZpdGF0aW9uQnJhbmRzPWFzeW5jKGludml0YXRpb25EZXRhaWxzKT0+e1xuLy9cbmNvbnN0e2ZlZX09aW52aXRhdGlvbkRldGFpbHM7XG5pZighZmVlKXtcbnJldHVybiBpbnZpdGF0aW9uRGV0YWlscztcbiB9XG5cbi8vXG5jb25zdCBkaXNwbGF5SW5mbz1hd2FpdCBFKEUoem9lKS5nZXRGZWVJc3N1ZXIoKSkuZ2V0RGlzcGxheUluZm8oKTtcbmNvbnN0IGF1Z21lbnRlZERldGFpbHM9e1xuLi4uaW52aXRhdGlvbkRldGFpbHMsXG5mZWU6ey4uLmZlZSxkaXNwbGF5SW5mb319O1xuXG5yZXR1cm4gZGlzcGxheShhdWdtZW50ZWREZXRhaWxzKTtcbiB9O1xuXG5jb25zdCBkaXNwbGF5UHJvcG9zYWw9KHByb3Bvc2FsVGVtcGxhdGUpPT57XG5jb25zdHtcbndhbnQsXG5naXZlLFxuZXhpdD17b25EZW1hbmQ6bnVsbH0sXG5hcmd1bWVudHM6YXJnc309XG5wcm9wb3NhbFRlbXBsYXRlO1xuY29uc3QgZGlzcGxheVJlY29yZD0ocHVyc2VQZXRuYW1lVmFsdWVLZXl3b3JkUmVjb3JkKT0+e1xuaWYocHVyc2VQZXRuYW1lVmFsdWVLZXl3b3JkUmVjb3JkPT09dW5kZWZpbmVkKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxucmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbk9iamVjdC5lbnRyaWVzKHB1cnNlUGV0bmFtZVZhbHVlS2V5d29yZFJlY29yZCkubWFwKFxuKFtrZXl3b3JkLHtwdXJzZVBldG5hbWUsdmFsdWUsYW1vdW50LHB1cnNlfV0pPT57XG5pZighYW1vdW50KXtcbi8vXG5wdXJzZT1nZXRQdXJzZShwdXJzZVBldG5hbWUpO1xuYW1vdW50PXt2YWx1ZX07XG4gfWVsc2V7XG5wdXJzZVBldG5hbWU9cHVyc2VNYXBwaW5nLnZhbFRvUGV0bmFtZS5nZXQocHVyc2UpO1xuIH1cblxuY29uc3QgYnJhbmQ9cHVyc2VUb0JyYW5kLmdldChwdXJzZSk7XG5jb25zdCBpc3N1ZXJSZWNvcmQ9XG5icmFuZFRhYmxlLmhhc0J5QnJhbmQoYnJhbmQpJiZicmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xuYW1vdW50PWhhcmRlbih7XG4uLi5hbW91bnQsXG5icmFuZCxcbmRpc3BsYXlJbmZvOmlzc3VlclJlY29yZCYmaXNzdWVyUmVjb3JkLmRpc3BsYXlJbmZvfSk7XG5cbmNvbnN0IGRpc3BsYXlBbW91bnQ9ZGlzcGxheShhbW91bnQpO1xucmV0dXJuW1xua2V5d29yZCxcbntcbnB1cnNlUGV0bmFtZSxcbnB1cnNlLFxuYW1vdW50OmRpc3BsYXlBbW91bnR9XTtcblxuXG4gfSkpO1xuXG5cbiB9O1xuY29uc3QgcHJvcG9zYWxGb3JEaXNwbGF5PXtcbndhbnQ6ZGlzcGxheVJlY29yZCh3YW50KSxcbmdpdmU6ZGlzcGxheVJlY29yZChnaXZlKSxcbmV4aXR9O1xuXG5pZihhcmdzIT09dW5kZWZpbmVkKXtcbnByb3Bvc2FsRm9yRGlzcGxheS5hcmd1bWVudHM9ZGlzcGxheShhcmdzKTtcbiB9XG5yZXR1cm4gcHJvcG9zYWxGb3JEaXNwbGF5O1xuIH07XG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHBydW5lT2ZmZXJXaGVuSW5hY3RpdmU9KGlkKT0+e1xuYXNzZXJ0KGluYm94U3RhdGUuaGFzKGlkKSk7XG5jb25zdCBvZmZlcj1pbmJveFN0YXRlLmdldChpZCk7XG5jb25zdHtzdGF0dXN9PW9mZmVyO1xuXG5zd2l0Y2goc3RhdHVzKXtcbmNhc2UnZGVjbGluZSc6XG5jYXNlJ2NhbmNlbCc6XG5jYXNlJ3JlamVjdGVkJzpcbmluYm94U3RhdGUuZGVsZXRlKGlkKTtcbnJldHVybjtcbmNhc2UnYWNjZXB0JzpcbmFzc2VydChpZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LmhhcyhpZCkpO1xudm9pZCBFLndoZW4oaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQoaWQpLnByb21pc2UsKHJlc3VsdCk9PntcbmNvbnN0IHN0eWxlPXBhc3NTdHlsZU9mKHJlc3VsdCk7XG5jb25zdCBhY3RpdmU9XG5zdHlsZT09PSdyZW1vdGFibGUnfHxcbnN0eWxlPT09J2NvcHlSZWNvcmQnJiYnaW52aXRhdGlvbk1ha2VycydpbiByZXN1bHQ7XG5pZighYWN0aXZlKXtcbmluYm94U3RhdGUuZGVsZXRlKGlkKTtcbiB9XG4gfSk7XG5icmVhaztcbmNhc2UncGVuZGluZyc6XG5jYXNlJ2NvbXBsZXRlJzpcbmRlZmF1bHQ6fVxuXG4gfTtcblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlSW5ib3hTdGF0ZShpZCxvZmZlcixkb1B1c2g9dHJ1ZSl7XG4vL1xuY29uc3R7cHJvcG9zYWxUZW1wbGF0ZX09b2ZmZXI7XG5jb25zdHtpbnN0YW5jZSxpbnN0YWxsYXRpb24saW52aXRhdGlvbkRldGFpbHN9PWlkVG9PZmZlci5nZXQoaWQpO1xuaWYoIWluc3RhbmNlfHwhaW5zdGFsbGF0aW9uKXtcbi8vXG4vL1xucmV0dXJuO1xuIH1cbmNvbnN0IGluc3RhbmNlRGlzcGxheT1kaXNwbGF5KGluc3RhbmNlKTtcbmNvbnN0IGluc3RhbGxhdGlvbkRpc3BsYXk9ZGlzcGxheShpbnN0YWxsYXRpb24pO1xuY29uc3QgYWxyZWFkeURpc3BsYXllZD1cbmluYm94U3RhdGUuaGFzKGlkKSYmaW5ib3hTdGF0ZS5nZXQoaWQpLnByb3Bvc2FsRm9yRGlzcGxheTtcblxuY29uc3QgYXVnbWVudGVkSW52aXRhdGlvbkRldGFpbHM9XG5hd2FpdCBleHBhbmRJbnZpdGF0aW9uQnJhbmRzKGludml0YXRpb25EZXRhaWxzKTtcblxuY29uc3Qgb2ZmZXJGb3JEaXNwbGF5PXtcbi4uLm9mZmVyLFxuLy9cbi8vXG4vL1xuYWN0aW9uczp1bmRlZmluZWQsXG5pbnN0YWxsYXRpb246dW5kZWZpbmVkLFxuaW5zdGFuY2U6dW5kZWZpbmVkLFxucHJvcG9zYWxUZW1wbGF0ZSxcbmludml0YXRpb25EZXRhaWxzOmRpc3BsYXkoYXVnbWVudGVkSW52aXRhdGlvbkRldGFpbHMpLFxuaW5zdGFuY2VQZXRuYW1lOmluc3RhbmNlRGlzcGxheS5wZXRuYW1lLFxuaW5zdGFsbGF0aW9uUGV0bmFtZTppbnN0YWxsYXRpb25EaXNwbGF5LnBldG5hbWUsXG5wcm9wb3NhbEZvckRpc3BsYXk6ZGlzcGxheVByb3Bvc2FsKGFscmVhZHlEaXNwbGF5ZWR8fHByb3Bvc2FsVGVtcGxhdGUpfTtcblxuXG5pbmJveFN0YXRlLnNldChpZCxvZmZlckZvckRpc3BsYXkpO1xuaWYoZG9QdXNoKXtcbi8vXG5vZmZlcnNVcGRhdGVyLnVwZGF0ZVN0YXRlKFtvZmZlckZvckRpc3BsYXldKTtcbmluYm94U3RhdGVDaGFuZ2VIYW5kbGVyKGdldEluYm94U3RhdGUoKSk7XG4gfVxucHJ1bmVPZmZlcldoZW5JbmFjdGl2ZShpZCk7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVBbGxJbmJveFN0YXRlKCl7XG5hd2FpdCBQcm9taXNlLmFsbChcbkFycmF5LmZyb20oaW5ib3hTdGF0ZS5lbnRyaWVzKCkpLm1hcCgoW2lkLG9mZmVyXSk9PlxuLy9cbnVwZGF0ZUluYm94U3RhdGUoaWQsb2ZmZXIsZmFsc2UpKSk7XG5cblxuLy9cbm9mZmVyc1VwZGF0ZXIudXBkYXRlU3RhdGUoWy4uLmluYm94U3RhdGUudmFsdWVzKCldKTtcbmluYm94U3RhdGVDaGFuZ2VIYW5kbGVyKGdldEluYm94U3RhdGUoKSk7XG4gfVxuXG5jb25zdHt1cGRhdGVyOmlzc3VlcnNVcGRhdGVyLG5vdGlmaWVyOmlzc3VlcnNOb3RpZmllcn09XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbm1ha2VOb3RpZmllcktpdChbXSk7XG5cblxuZnVuY3Rpb24gdXBkYXRlQWxsSXNzdWVyc1N0YXRlKCl7XG5pc3N1ZXJzVXBkYXRlci51cGRhdGVTdGF0ZShcblsuLi5icmFuZE1hcHBpbmcucGV0bmFtZVRvVmFsLmVudHJpZXMoKV0ubWFwKChbcGV0bmFtZSxicmFuZF0pPT57XG5jb25zdCBpc3N1ZXJSZWNvcmQ9YnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcbnJldHVybltcbnBldG5hbWUsXG57XG4uLi5pc3N1ZXJSZWNvcmQsXG5pc3N1ZXJCb2FyZElkOmlzc3VlclRvQm9hcmRJZC5nZXQoaXNzdWVyUmVjb3JkLmlzc3Vlcil9XTtcblxuXG4gfSkpO1xuXG4gfVxuXG4vL1xuLy9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUFsbFN0YXRlKCl7XG51cGRhdGVBbGxJc3N1ZXJzU3RhdGUoKTtcbmF3YWl0IHVwZGF0ZUFsbFB1cnNlU3RhdGUoKTtcbmF3YWl0IHVwZGF0ZUFsbEluYm94U3RhdGUoKTtcbiB9XG5cbi8vXG4vL1xuZnVuY3Rpb24gdXBkYXRlT3JSZXN1YnNjcmliZShpZCxzZWF0LHVwZGF0ZSl7XG5jb25zdHt1cGRhdGVDb3VudH09dXBkYXRlO1xuYXNzZXJ0KHVwZGF0ZUNvdW50PT09dW5kZWZpbmVkKTtcbmlkVG9TZWF0LmRlbGV0ZShpZCk7XG5cbmNvbnN0IG9mZmVyPWlkVG9PZmZlci5nZXQoaWQpO1xuY29uc3QgY29tcGxldGVkT2ZmZXI9YWRkTWV0YSh7XG4uLi5vZmZlcixcbnN0YXR1czonY29tcGxldGUnfSk7XG5cbmlkVG9PZmZlci5zZXQoaWQsY29tcGxldGVkT2ZmZXIpO1xudm9pZCB1cGRhdGVJbmJveFN0YXRlKGlkLGNvbXBsZXRlZE9mZmVyKTtcbiB9XG5cbi8qXG5cblxuXG5cbiAgICovXG5mdW5jdGlvbiBzdWJzY3JpYmVUb1VwZGF0ZXMoaWQsc2VhdCl7XG5yZXR1cm4gRShFKHNlYXQpLmdldEV4aXRTdWJzY3JpYmVyKCkpLlxuc3Vic2NyaWJlQWZ0ZXIoKS5cbnRoZW4oKHVwZGF0ZSk9PnVwZGF0ZU9yUmVzdWJzY3JpYmUoaWQsc2VhdCx1cGRhdGUpKTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGV4ZWN1dGVPZmZlcihjb21waWxlZE9mZmVyUCl7XG4vL1xuLy9cbi8vXG5jb25zdHtcbmludml0ZVAsXG5wdXJzZUtleXdvcmRSZWNvcmQsXG5wcm9wb3NhbCxcbmFyZ3VtZW50czphcmdzfT1cbmF3YWl0IGNvbXBpbGVkT2ZmZXJQO1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGF5bWVudFRvUHVyc2U9bmV3IE1hcCgpO1xuXG4vL1xuLy9cbmNvbnN0IGtleXdvcmRQYXltZW50UHM9T2JqZWN0LmVudHJpZXMocHJvcG9zYWwuZ2l2ZXx8aGFyZGVuKHt9KSkubWFwKFxuYXN5bmMoW2tleXdvcmQsYW1vdW50XSk9PntcbmNvbnN0IHB1cnNlPXB1cnNlS2V5d29yZFJlY29yZFtrZXl3b3JkXTtcbnB1cnNlIT09dW5kZWZpbmVkfHxcbkZhaWwgYHB1cnNlIHdhcyBub3QgZm91bmQgZm9yIGtleXdvcmQgJHtxKGtleXdvcmQpfWA7XG5cbmNvbnN0IHBheW1lbnQ9YXdhaXQgRShwdXJzZSkud2l0aGRyYXcoYW1vdW50KTtcbnBheW1lbnRUb1B1cnNlLnNldChwYXltZW50LHB1cnNlKTtcbnJldHVybltrZXl3b3JkLHBheW1lbnRdO1xuIH0pO1xuXG5cbi8vXG4vL1xuY29uc3QgdHJ5UmVjbGFpbWluZ1dpdGhkcmF3blBheW1lbnRzPSgpPT5cbi8vXG4vL1xuUHJvbWlzZS5hbGxTZXR0bGVkKFxua2V5d29yZFBheW1lbnRQcy5tYXAoYXN5bmMoa2V5d29yZFBheW1lbnRQKT0+e1xuLy9cbi8vXG5jb25zdFtfa2V5d29yZCxwYXltZW50XT1hd2FpdCBrZXl3b3JkUGF5bWVudFA7XG5cbi8vXG5jb25zdCBwdXJzZT1wYXltZW50VG9QdXJzZS5nZXQocGF5bWVudCk7XG5pZihwdXJzZT09PXVuZGVmaW5lZCl7XG4vL1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5cbi8vXG50cnl7XG4vL1xucmV0dXJuIGFkZFBheW1lbnQocGF5bWVudCxwdXJzZSk7XG4gfWZpbmFsbHl7XG4vL1xucGF5bWVudFRvUHVyc2UuZGVsZXRlKHBheW1lbnQpO1xuIH1cbiB9KSk7XG5cblxuLy9cbi8vXG5jb25zdCB3aXRoZHJhd0FsbFBheW1lbnRzPVByb21pc2UuYWxsKGtleXdvcmRQYXltZW50UHMpO1xud2l0aGRyYXdBbGxQYXltZW50cy5jYXRjaCh0cnlSZWNsYWltaW5nV2l0aGRyYXduUGF5bWVudHMpO1xuXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbmNvbnN0IHBheW1lbnRLZXl3b3Jkcz1hd2FpdCB3aXRoZHJhd0FsbFBheW1lbnRzO1xuXG5jb25zdCBwYXltZW50S2V5d29yZFJlY29yZD1oYXJkZW4oT2JqZWN0LmZyb21FbnRyaWVzKHBheW1lbnRLZXl3b3JkcykpO1xuXG5jb25zdCBzZWF0PUUoem9lKS5vZmZlcihcbmludml0ZVAsXG5oYXJkZW4ocHJvcG9zYWwpLFxucGF5bWVudEtleXdvcmRSZWNvcmQsXG5hcmdzKTtcblxuLy9cbi8vXG52b2lkIHNlYXQuZmluYWxseSh0cnlSZWNsYWltaW5nV2l0aGRyYXduUGF5bWVudHMpO1xuXG4vL1xuLy9cbmNvbnN0IGRlcG9zaXRlZFA9RShzZWF0KS5cbmdldFBheW91dHMoKS5cbnRoZW4oKHBheW91dE9iaik9PntcbnJldHVybiBQcm9taXNlLmFsbChcbk9iamVjdC5lbnRyaWVzKHBheW91dE9iaikubWFwKChba2V5d29yZCxwYXlvdXRQXSk9Pntcbi8vXG4vL1xuY29uc3QgcHVyc2VPclVuZGVmaW5lZD1wdXJzZUtleXdvcmRSZWNvcmRba2V5d29yZF07XG5cbi8vXG5yZXR1cm4gYWRkUGF5bWVudChwYXlvdXRQLHB1cnNlT3JVbmRlZmluZWQpO1xuIH0pKTtcblxuIH0pO1xuXG4vL1xuLy9cbi8vXG52b2lkIGRlcG9zaXRlZFAuZmluYWxseSh0cnlSZWNsYWltaW5nV2l0aGRyYXduUGF5bWVudHMpO1xuXG4vL1xuLy9cbnJldHVybntkZXBvc2l0ZWRQLHNlYXR9O1xuIH1cblxuLy9cblxuY29uc3QgYWRkSXNzdWVyPWFzeW5jKHBldG5hbWVGb3JCcmFuZCxpc3N1ZXJQLG1ha2VQdXJzZT1mYWxzZSk9PntcbmNvbnN0IGlzc3Vlcj1hd2FpdCBpc3N1ZXJQO1xuY29uc3QgcmVjUD1icmFuZFRhYmxlLmhhc0J5SXNzdWVyKGlzc3Vlcik/XG5icmFuZFRhYmxlLmdldEJ5SXNzdWVyKGlzc3Vlcik6XG5icmFuZFRhYmxlLmluaXRJc3N1ZXIoaXNzdWVyLGFkZE1ldGEpO1xuY29uc3R7YnJhbmR9PWF3YWl0IHJlY1A7XG5hd2FpdCBpbml0SXNzdWVyVG9Cb2FyZElkKGlzc3VlcixicmFuZCk7XG5jb25zdCBhZGRCcmFuZFBldG5hbWU9KCk9PntcbmxldCBwO1xuY29uc3QgYWxyZWFkeT1icmFuZE1hcHBpbmcudmFsVG9QZXRuYW1lLmhhcyhicmFuZCk7XG5wZXRuYW1lRm9yQnJhbmQ9YnJhbmRNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKHBldG5hbWVGb3JCcmFuZCxicmFuZCk7XG5pZighYWxyZWFkeSYmbWFrZVB1cnNlKXtcbi8vXG5wPW1ha2VFbXB0eVB1cnNlKHBldG5hbWVGb3JCcmFuZCxwZXRuYW1lRm9yQnJhbmQsdHJ1ZSk7XG4gfWVsc2V7XG5wPVByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpO1xuIH1cbnJldHVybiBFLndoZW4ocCwoXyk9PnBldG5hbWVGb3JCcmFuZCk7XG4gfTtcbnJldHVybiBhZGRCcmFuZFBldG5hbWUoKS50aGVuKGFzeW5jKGJyYW5kTmFtZSk9PntcbmF3YWl0IHVwZGF0ZUFsbElzc3VlcnNTdGF0ZSgpO1xucmV0dXJuIGJyYW5kTmFtZTtcbiB9KTtcbiB9O1xuXG5jb25zdCBwdWJsaXNoSXNzdWVyPWFzeW5jKGJyYW5kKT0+e1xuY29uc3R7aXNzdWVyfT1icmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xuY29uc3QgaXNzdWVyQm9hcmRJZD1hd2FpdCBpbml0SXNzdWVyVG9Cb2FyZElkKGlzc3VlcixicmFuZCk7XG51cGRhdGVBbGxJc3N1ZXJzU3RhdGUoKTtcbnJldHVybiBpc3N1ZXJCb2FyZElkO1xuIH07XG5cbmNvbnN0e3VwZGF0ZXI6Y29udGFjdHNVcGRhdGVyLG5vdGlmaWVyOmNvbnRhY3RzTm90aWZpZXJ9PVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbm1ha2VOb3RpZmllcktpdChbXSk7XG5cblxuLypcblxuXG5cbiAgICovXG5jb25zdCBhZGRDb250YWN0PWFzeW5jKHBldG5hbWUsYWN0aW9ucyxhZGRyZXNzPXVuZGVmaW5lZCk9Pntcbi8vXG5jb25zdCBhbHJlYWR5PWF3YWl0IEUoYm9hcmQpLmhhcyhhY3Rpb25zKTtcbi8qICAgICAgICAgICAgICAqL1xubGV0IGRlcG9zaXRGYWNldDtcbmlmKGFscmVhZHkpe1xuZGVwb3NpdEZhY2V0PWFjdGlvbnM7XG4gfWVsc2V7XG5kZXBvc2l0RmFjZXQ9RmFyKFdhbGxldE5hbWUuZGVwb3NpdEZhY2V0LHtcbnJlY2VpdmUocGF5bWVudFApe1xucmV0dXJuIEUoYWN0aW9ucykucmVjZWl2ZShwYXltZW50UCk7XG4gfX0pO1xuXG4gfVxuY29uc3QgZGVwb3NpdEJvYXJkSWQ9YXdhaXQgRShib2FyZCkuZ2V0SWQoZGVwb3NpdEZhY2V0KTtcbmNvbnN0IGZvdW5kPVsuLi5jb250YWN0TWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcygpXS5maW5kKFxuKFtfcG4se2RlcG9zaXRCb2FyZElkOmRiaWR9XSk9PmRlcG9zaXRCb2FyZElkPT09ZGJpZCk7XG5cbiFmb3VuZHx8XG5GYWlsIGAke3EoZm91bmQmJmZvdW5kWzBdKX0gaXMgYWxyZWFkeSB0aGUgcGV0bmFtZSBmb3IgYm9hcmQgSUQgJHtxKFxuZGVwb3NpdEJvYXJkSWQpXG4gfWA7XG5cbmNvbnN0IGNvbnRhY3Q9aGFyZGVuKFxuYWRkTWV0YSh7XG5hY3Rpb25zLFxuYWRkcmVzcyxcbmRlcG9zaXRCb2FyZElkfSkpO1xuXG5cblxuY29udGFjdE1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZSxjb250YWN0KTtcbmNvbnRhY3RzVXBkYXRlci51cGRhdGVTdGF0ZShbLi4uY29udGFjdE1hcHBpbmcucGV0bmFtZVRvVmFsLmVudHJpZXMoKV0pO1xucmV0dXJuIGNvbnRhY3Q7XG4gfTtcblxuY29uc3QgYWRkSW5zdGFuY2U9KHBldG5hbWUsaW5zdGFuY2VIYW5kbGUpPT57XG4vL1xuLy9cbi8vXG5wZXRuYW1lPWluc3RhbmNlTWFwcGluZy5zdWdnZXN0UGV0bmFtZShwZXRuYW1lLGluc3RhbmNlSGFuZGxlKTtcbi8vXG52b2lkIHVwZGF0ZUFsbFN0YXRlKCk7XG5yZXR1cm4gYGluc3RhbmNlICR7cShwZXRuYW1lKX0gc3VjY2Vzc2Z1bGx5IGFkZGVkIHRvIHdhbGxldGA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGludGVybmFsVW5zYWZlSW1wb3J0UHVyc2U9YXN5bmMoXG5icmFuZFBldG5hbWUsXG5wZXRuYW1lRm9yUHVyc2UsXG5kZWZhdWx0QXV0b0RlcG9zaXQsXG5wdXJzZVRvSW1wb3J0KT0+XG57XG5jb25zdCBicmFuZD1icmFuZE1hcHBpbmcucGV0bmFtZVRvVmFsLmdldChicmFuZFBldG5hbWUpO1xuY29uc3R7aXNzdWVyfT1icmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xuXG4vKiAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVyc2U9YXdhaXQocHVyc2VUb0ltcG9ydHx8RShpc3N1ZXIpLm1ha2VFbXB0eVB1cnNlKCkpO1xuXG5wdXJzZVRvQnJhbmQuaW5pdChwdXJzZSxicmFuZCk7XG5wZXRuYW1lRm9yUHVyc2U9cHVyc2VNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKHBldG5hbWVGb3JQdXJzZSxwdXJzZSk7XG5cbmlmKGRlZmF1bHRBdXRvRGVwb3NpdCYmIWJyYW5kVG9BdXRvRGVwb3NpdFB1cnNlLmhhcyhicmFuZCkpe1xuLy9cbi8vXG4vL1xuYXdhaXQgZG9FbmFibGVBdXRvRGVwb3NpdChwZXRuYW1lRm9yUHVyc2UsZmFsc2UpO1xuIH1cblxuYXdhaXQgdXBkYXRlUHVyc2VzU3RhdGUocGV0bmFtZUZvclB1cnNlLHB1cnNlKTtcblxuLy9cbnZvaWQgb2JzZXJ2ZU5vdGlmaWVyKEUocHVyc2UpLmdldEN1cnJlbnRBbW91bnROb3RpZmllcigpLHtcbnVwZGF0ZVN0YXRlKF9iYWxhbmNlKXtcbnVwZGF0ZVB1cnNlc1N0YXRlKHB1cnNlTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KHB1cnNlKSxwdXJzZSkuY2F0Y2goXG4oZSk9PmNvbnNvbGUuZXJyb3IoJ2Nhbm5vdCB1cGRhdGVTdGF0ZScsZSkpO1xuXG4gfSxcbmZhaWwocmVhc29uKXtcbmNvbnNvbGUuZXJyb3IoIGBmYWlsZWQgdXBkYXRlU3RhdGUgb2JzZXJ2ZXJgLHJlYXNvbik7XG4gfX0pO1xuXG5cbnJldHVybiBwZXRuYW1lRm9yUHVyc2U7XG4gfTtcblxuLy9cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZUVtcHR5UHVyc2U9KFxuYnJhbmRQZXRuYW1lLFxucGV0bmFtZUZvclB1cnNlLFxuZGVmYXVsdEF1dG9EZXBvc2l0PXRydWUpPT5cblxuaW50ZXJuYWxVbnNhZmVJbXBvcnRQdXJzZShcbmJyYW5kUGV0bmFtZSxcbnBldG5hbWVGb3JQdXJzZSxcbmRlZmF1bHRBdXRvRGVwb3NpdCxcbnVuZGVmaW5lZCk7XG5cblxuLypcblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gZGVwb3NpdChwdXJzZVBldG5hbWUscGF5bWVudCl7XG5jb25zdCBwdXJzZT1wdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldChwdXJzZVBldG5hbWUpO1xucmV0dXJuIEUocHVyc2UpLmRlcG9zaXQocGF5bWVudCk7XG4gfVxuXG5mdW5jdGlvbiBnZXRQdXJzZXMoKXtcbnJldHVyblsuLi5wdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmVudHJpZXMoKV07XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmZ1bmN0aW9uIGdldFB1cnNlKHB1cnNlUGV0bmFtZSl7XG5yZXR1cm4gcHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocHVyc2VQZXRuYW1lKTtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnVuY3Rpb24gZ2V0UHVyc2VJc3N1ZXIocHVyc2VQZXRuYW1lKXtcbmNvbnN0IHB1cnNlPXB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHB1cnNlUGV0bmFtZSk7XG5jb25zdCBicmFuZD1wdXJzZVRvQnJhbmQuZ2V0KHB1cnNlKTtcbmNvbnN0e2lzc3Vlcn09YnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcbnJldHVybiBpc3N1ZXI7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnVuY3Rpb24gZ2V0T2ZmZXJzKHtvcmlnaW49bnVsbH09e30pe1xuLy9cbnJldHVyblsuLi5pZFRvT2ZmZXIuZW50cmllcygpXS5cbmZpbHRlcihcbihbX2lkLG9mZmVyXSk9Plxub3JpZ2luPT09bnVsbHx8XG5vZmZlci5yZXF1ZXN0Q29udGV4dCYmb2ZmZXIucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbj09PW9yaWdpbikuXG5cbnNvcnQoKFtpZDFdLFtpZDJdKT0+Y21wKGlkMSxpZDIpKS5cbm1hcCgoW19pZCxvZmZlcl0pPT5oYXJkZW4ob2ZmZXIpKTtcbiB9XG5cbmNvbnN0IGNvbXBpbGVQcm9wb3NhbD0ocHJvcG9zYWxUZW1wbGF0ZSk9PntcbmNvbnN0e1xud2FudD1oYXJkZW4oe30pLFxuZ2l2ZT1oYXJkZW4oe30pLFxuZXhpdD17b25EZW1hbmQ6bnVsbH0sXG5hcmd1bWVudHM6YXJnc309XG5wcm9wb3NhbFRlbXBsYXRlO1xuXG5jb25zdCBwdXJzZUtleXdvcmRSZWNvcmQ9e307XG5cbmNvbnN0IGNvbXBpbGU9KGFtb3VudEtleXdvcmRSZWNvcmQpPT57XG5yZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuT2JqZWN0LmVudHJpZXMoYW1vdW50S2V5d29yZFJlY29yZCkubWFwKFxuKFtrZXl3b3JkLHtwdXJzZVBldG5hbWUsdmFsdWV9XSk9Pntcbi8vXG5pZih0eXBlb2YgdmFsdWU9PT0nbnVtYmVyJyl7XG52YWx1ZT1OYXQodmFsdWUpO1xuIH1cbmNvbnN0IHB1cnNlPWdldFB1cnNlKHB1cnNlUGV0bmFtZSk7XG5wdXJzZUtleXdvcmRSZWNvcmRba2V5d29yZF09cHVyc2U7XG5jb25zdCBicmFuZD1wdXJzZVRvQnJhbmQuZ2V0KHB1cnNlKTtcblxucmV0dXJuW2tleXdvcmQse2JyYW5kLHZhbHVlfV07XG4gfSkpO1xuXG5cbiB9O1xuXG5jb25zdCBwcm9wb3NhbD17XG53YW50OmNvbXBpbGUod2FudCksXG5naXZlOmNvbXBpbGUoZ2l2ZSksXG5leGl0fTtcblxuXG5yZXR1cm57cHJvcG9zYWwsYXJndW1lbnRzOmFyZ3MscHVyc2VLZXl3b3JkUmVjb3JkfTtcbiB9O1xuXG5jb25zdCBjb21waWxlT2ZmZXI9YXN5bmMob2ZmZXIpPT57XG5jb25zdHtcbnByb3Bvc2FsLFxucHVyc2VLZXl3b3JkUmVjb3JkLFxuYXJndW1lbnRzOmFyZ3N9PVxuY29tcGlsZVByb3Bvc2FsKG9mZmVyLnByb3Bvc2FsVGVtcGxhdGUpO1xuXG4vL1xuY29uc3Qgem9lSXNzdWVyPWlzc3Vlck1hbmFnZXIuZ2V0KFpPRV9JTlZJVEVfQlJBTkRfUEVUTkFNRSk7XG5jb25zdHticmFuZDppbnZpdGF0aW9uQnJhbmR9PWJyYW5kVGFibGUuZ2V0QnlJc3N1ZXIoem9lSXNzdWVyKTtcbmNvbnN0IGludml0YXRpb25QPWZpbmRPck1ha2VJbnZpdGF0aW9uKFxuaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdCxcbmJvYXJkLFxuem9lLFxuem9lSW52aXRlUHVyc2UsXG5pbnZpdGF0aW9uQnJhbmQsXG5vZmZlcik7XG5cblxuY29uc3QgaW52aXRhdGlvbkRldGFpbHM9YXdhaXQgRSh6b2UpLmdldEludml0YXRpb25EZXRhaWxzKGludml0YXRpb25QKTtcbmNvbnN0e2luc3RhbGxhdGlvbixpbnN0YW5jZX09aW52aXRhdGlvbkRldGFpbHM7XG5cbmNvbnN0IGNvbXBpbGVkPXtcbmFyZ3VtZW50czphcmdzLFxucHJvcG9zYWwsXG5pbnZpdGVQOmludml0YXRpb25QLFxucHVyc2VLZXl3b3JkUmVjb3JkLFxuaW52aXRhdGlvbkRldGFpbHMsXG5pbnN0YWxsYXRpb24sXG5pbnN0YW5jZX07XG5cbnJldHVybiBjb21waWxlZDtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkYXBwT3JpZ2lucz1tYWtlU2NhbGFyTWFwU3RvcmUoJ2RhcHBPcmlnaW4nKTtcbmNvbnN0e25vdGlmaWVyOmRhcHBzTm90aWZpZXIsdXBkYXRlcjpkYXBwc1VwZGF0ZXJ9PVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL21ha2VOb3RpZmllcktpdChbXSk7XG5cbmNvbnN0IHVwZGF0ZURhcHA9KGRhcHBSZWNvcmQpPT57XG5oYXJkZW4oYWRkTWV0YShkYXBwUmVjb3JkKSk7XG5kYXBwT3JpZ2lucy5zZXQoZGFwcFJlY29yZC5vcmlnaW4sZGFwcFJlY29yZCk7XG5kYXBwc1VwZGF0ZXIudXBkYXRlU3RhdGUoWy4uLmRhcHBPcmlnaW5zLnZhbHVlcygpXSk7XG4gfTtcblxuY29uc3QgZGVsZXRlRGFwcD0oe29yaWdpbn0pPT57XG5kYXBwT3JpZ2lucy5kZWxldGUob3JpZ2luKTtcbmRhcHBzVXBkYXRlci51cGRhdGVTdGF0ZShbLi4uZGFwcE9yaWdpbnMudmFsdWVzKCldKTtcbiB9O1xuXG5jb25zdCBzaGFyZWRDYWNoZUNvb3JkaW5hdG9yPW1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yKFxubWFrZVNjYWxhckJpZ01hcFN0b3JlKCBgc2hhcmVkIGNhY2hlYCkpO1xuXG5cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JEYXBwQXBwcm92YWwoXG5zdWdnZXN0ZWRQZXRuYW1lLFxub3JpZ2luLFxubm90WWV0RW5hYmxlZD0oKT0+eyB9KVxue1xubGV0IGRhcHBSZWNvcmQ7XG5pZihkYXBwT3JpZ2lucy5oYXMob3JpZ2luKSl7XG5kYXBwUmVjb3JkPWRhcHBPcmlnaW5zLmdldChvcmlnaW4pO1xuIH1lbHNle1xubGV0IHJlc29sdmU7XG5sZXQgcmVqZWN0O1xubGV0IGFwcHJvdmFsUDtcblxuY29uc3QgY2FjaGVDb29yZGluYXRvcj1tYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvcihcbm1ha2VTY2FsYXJCaWdNYXBTdG9yZSggYG9yaWdpbiAke29yaWdpbn0gY2FjaGVgKSk7XG5cbmRhcHBSZWNvcmQ9YWRkTWV0YSh7XG5zdWdnZXN0ZWRQZXRuYW1lLFxucGV0bmFtZTpzdWdnZXN0ZWRQZXRuYW1lLFxub3JpZ2luLFxuY2FjaGVDb29yZGluYXRvcixcbmFwcHJvdmFsUCxcbmVuYWJsZTpmYWxzZSxcbmFjdGlvbnM6RmFyKCdkYXBwLmFjdGlvbnMnLHtcbnNldFBldG5hbWUocGV0bmFtZSl7XG5pZihkYXBwUmVjb3JkLnBldG5hbWU9PT1wZXRuYW1lKXtcbnJldHVybiBkYXBwUmVjb3JkLmFjdGlvbnM7XG4gfVxuaWYoZWRnZU1hcHBpbmcudmFsVG9QZXRuYW1lLmhhcyhvcmlnaW4pKXtcbmVkZ2VNYXBwaW5nLnJlbmFtZVBldG5hbWUocGV0bmFtZSxvcmlnaW4pO1xuIH1lbHNle1xucGV0bmFtZT1lZGdlTWFwcGluZy5zdWdnZXN0UGV0bmFtZShwZXRuYW1lLG9yaWdpbik7XG4gfVxuZGFwcFJlY29yZD1hZGRNZXRhKHtcbi4uLmRhcHBSZWNvcmQsXG5wZXRuYW1lfSk7XG5cbnVwZGF0ZURhcHAoZGFwcFJlY29yZCk7XG52b2lkIHVwZGF0ZUFsbFN0YXRlKCk7XG5yZXR1cm4gZGFwcFJlY29yZC5hY3Rpb25zO1xuIH0sXG5lbmFibGUoKXtcbi8vXG5kYXBwUmVjb3JkPWFkZE1ldGEoe1xuLi4uZGFwcFJlY29yZCxcbmVuYWJsZTp0cnVlfSk7XG5cbmVkZ2VNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKGRhcHBSZWNvcmQucGV0bmFtZSxvcmlnaW4pO1xudXBkYXRlRGFwcChkYXBwUmVjb3JkKTtcblxuLy9cbnJlc29sdmUoKTtcbnJldHVybiBkYXBwUmVjb3JkLmFjdGlvbnM7XG4gfSxcbmRpc2FibGUocmVhc29uPXVuZGVmaW5lZCl7XG4vL1xuaWYocmVqZWN0KXtcbnJlamVjdChyZWFzb24pO1xuIH1cbi8vXG4oe3Jlc29sdmUscmVqZWN0LHByb21pc2U6YXBwcm92YWxQfT1tYWtlUHJvbWlzZUtpdCgpKTtcbmRhcHBSZWNvcmQ9YWRkTWV0YSh7XG4uLi5kYXBwUmVjb3JkLFxuZW5hYmxlOmZhbHNlLFxuYXBwcm92YWxQfSk7XG5cbnVwZGF0ZURhcHAoZGFwcFJlY29yZCk7XG5yZXR1cm4gZGFwcFJlY29yZC5hY3Rpb25zO1xuIH0sXG5kZWxldGUoKXtcbmlmKHJlamVjdCl7XG5yZWplY3QoJ0RhcHAgZGVsZXRlZCcpO1xuIH1cbmRlbGV0ZURhcHAoZGFwcFJlY29yZCk7XG4gfX0pfSk7XG5cblxuXG4vL1xuZGFwcE9yaWdpbnMuaW5pdChvcmlnaW4sZGFwcFJlY29yZCk7XG5cbi8vXG5kYXBwUmVjb3JkLmFjdGlvbnMuZGlzYWJsZSgpO1xuIH1cblxuaWYoIWRhcHBSZWNvcmQuZW5hYmxlKXtcbm5vdFlldEVuYWJsZWQoKTtcbiB9XG5hd2FpdCBkYXBwUmVjb3JkLmFwcHJvdmFsUDtcbi8vXG4vL1xucmV0dXJuIGRhcHBPcmlnaW5zLmdldChvcmlnaW4pO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gYWRkT2ZmZXIocmF3T2ZmZXIscmVxdWVzdENvbnRleHQ9e30pe1xuY29uc3QgZGFwcE9yaWdpbj1cbnJlcXVlc3RDb250ZXh0LmRhcHBPcmlnaW58fHJlcXVlc3RDb250ZXh0Lm9yaWdpbnx8J3Vua25vd24nO1xuY29uc3R7aWQ6cmF3SWR9PXJhd09mZmVyO1xuY29uc3QgaWQ9bWFrZUlkKGRhcHBPcmlnaW4scmF3SWQpO1xuY29uc3Qgb2ZmZXI9aGFyZGVuKFxuYWRkTWV0YSh7XG4uLi5yYXdPZmZlcixcbnJhd0lkLFxuaWQsXG5yZXF1ZXN0Q29udGV4dDp7Li4ucmVxdWVzdENvbnRleHQsZGFwcE9yaWdpbn0sXG5zdGF0dXM6dW5kZWZpbmVkfSkpO1xuXG5cbmlkVG9PZmZlci5pbml0KGlkLG9mZmVyKTtcbmlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQuaW5pdChpZCxtYWtlUHJvbWlzZUtpdCgpKTtcbmF3YWl0IHVwZGF0ZUluYm94U3RhdGUoaWQsb2ZmZXIpO1xuXG4vL1xuY29uc3QgY29tcGlsZWRPZmZlclA9Y29tcGlsZU9mZmVyKG9mZmVyKTtcbmlkVG9Db21waWxlZE9mZmVyUC5zZXQoaWQsY29tcGlsZWRPZmZlclApO1xuXG4vL1xuYXdhaXQgdXBkYXRlSW5ib3hTdGF0ZShpZCxpZFRvT2ZmZXIuZ2V0KGlkKSk7XG5jb25zdHtpbnN0YWxsYXRpb24saW5zdGFuY2UsaW52aXRhdGlvbkRldGFpbHN9PWF3YWl0IGNvbXBpbGVkT2ZmZXJQO1xuXG5pZighaWRUb09mZmVyLmhhcyhpZCkpe1xucmV0dXJuIHJhd0lkO1xuIH1cbmlkVG9PZmZlci5zZXQoXG5pZCxcbmhhcmRlbihcbmFkZE1ldGEoe1xuLi4uaWRUb09mZmVyLmdldChpZCksXG5pbnN0YWxsYXRpb24sXG5pbnN0YW5jZSxcbmludml0YXRpb25EZXRhaWxzfSkpKTtcblxuXG5cbmF3YWl0IHVwZGF0ZUluYm94U3RhdGUoaWQsaWRUb09mZmVyLmdldChpZCkpO1xucmV0dXJuIHJhd0lkO1xuIH1cblxuZnVuY3Rpb24gY29uc3VtbWF0ZWQob2ZmZXIpe1xuaWYob2ZmZXIuc3RhdHVzIT09dW5kZWZpbmVkKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKG9mZmVyLmFjdGlvbnMpe1xuRShvZmZlci5hY3Rpb25zKS5oYW5kbGVkKG9mZmVyKTtcbiB9XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBkZWNsaW5lT2ZmZXIoaWQpe1xuY29uc3Qgb2ZmZXI9aWRUb09mZmVyLmdldChpZCk7XG5pZihjb25zdW1tYXRlZChvZmZlcikpe1xucmV0dXJuO1xuIH1cblxuLy9cbmNvbnN0IGRlY2xpbmVkT2ZmZXI9YWRkTWV0YSh7XG4uLi5vZmZlcixcbnN0YXR1czonZGVjbGluZSd9KTtcblxuaWRUb09mZmVyLnNldChpZCxkZWNsaW5lZE9mZmVyKTtcbnZvaWQgdXBkYXRlSW5ib3hTdGF0ZShpZCxkZWNsaW5lZE9mZmVyKTtcblxuLy9cbmNvbnN0IGNvbXBpbGVkT2ZmZXJQPWlkVG9Db21waWxlZE9mZmVyUC5nZXQoaWQpO1xuaWYoIWNvbXBpbGVkT2ZmZXJQKXtcbnJldHVybjtcbiB9XG5cbi8vXG5hd2FpdCBhZGRQYXltZW50KEUuZ2V0KGNvbXBpbGVkT2ZmZXJQKS5pbnZpdGVQKS5jYXRjaChjb25zb2xlLmVycm9yKTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGNhbmNlbE9mZmVyKGlkKXtcbmNvbnN0IGNvbXBsZXRlRm49aWRUb0NvbXBsZXRlLmdldChpZCk7XG5pZighY29tcGxldGVGbil7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5jb21wbGV0ZUZuKCkuXG50aGVuKChfKT0+e1xuaWRUb0NvbXBsZXRlLmRlbGV0ZShpZCk7XG5jb25zdCBvZmZlcj1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmNvbnN0IGNhbmNlbGxlZE9mZmVyPWFkZE1ldGEoe1xuLi4ub2ZmZXIsXG5zdGF0dXM6J2NhbmNlbCd9KTtcblxuaWRUb09mZmVyLnNldChpZCxjYW5jZWxsZWRPZmZlcik7XG5yZXR1cm4gdXBkYXRlSW5ib3hTdGF0ZShpZCxjYW5jZWxsZWRPZmZlcik7XG4gfSkuXG5jYXRjaCgoZSk9PmNvbnNvbGUuZXJyb3IoIGBDYW5ub3QgY2FuY2VsIG9mZmVyICR7aWR9OmAsZSkpO1xuXG5yZXR1cm4gdHJ1ZTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGFjY2VwdE9mZmVyKGlkKXtcbmNvbnN0IG9mZmVyPWlkVG9PZmZlci5nZXQoaWQpO1xuaWYoY29uc3VtbWF0ZWQob2ZmZXIpKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHJldD17fTtcbmxldCBhbHJlYWR5UmVzb2x2ZWQ9ZmFsc2U7XG5jb25zdCByZWplY3RlZD0oZSk9PntcbmlmKGFscmVhZHlSZXNvbHZlZCl7XG5yZXR1cm47XG4gfVxuY29uc3QgcmVqZWN0T2ZmZXI9YWRkTWV0YSh7XG4uLi5vZmZlcixcbnN0YXR1czoncmVqZWN0ZWQnLFxuZXJyb3I6IGAke2V9YH0pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLHJlamVjdE9mZmVyKTtcbnZvaWQgdXBkYXRlSW5ib3hTdGF0ZShpZCxyZWplY3RPZmZlcik7XG4gfTtcblxuYXdhaXQgbnVsbDtcbnRyeXtcbmNvbnN0IHBlbmRpbmdPZmZlcj1hZGRNZXRhKHtcbi4uLm9mZmVyLFxuc3RhdHVzOidwZW5kaW5nJ30pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLHBlbmRpbmdPZmZlcik7XG52b2lkIHVwZGF0ZUluYm94U3RhdGUoaWQscGVuZGluZ09mZmVyKTtcbmNvbnN0IGNvbXBpbGVkT2ZmZXI9YXdhaXQgaWRUb0NvbXBpbGVkT2ZmZXJQLmdldChpZCk7XG5cbmNvbnN0e2RlcG9zaXRlZFAsc2VhdH09YXdhaXQgZXhlY3V0ZU9mZmVyKGNvbXBpbGVkT2ZmZXIpO1xuXG5pZFRvQ29tcGxldGUuc2V0KGlkLCgpPT57XG5hbHJlYWR5UmVzb2x2ZWQ9dHJ1ZTtcbnJldHVybiBFKHNlYXQpLnRyeUV4aXQoKTtcbiB9KTtcbmlkVG9TZWF0LnNldChpZCxzZWF0KTtcbi8vXG4vL1xudm9pZCBFKHNlYXQpLlxuaGFzRXhpdGVkKCkuXG50aGVuKChleGl0ZWQpPT57XG5pZighZXhpdGVkKXtcbnJldHVybiBzdWJzY3JpYmVUb1VwZGF0ZXMoaWQsc2VhdCk7XG4gfVxuIH0pO1xuXG5jb25zdCBvZmZlclJlc3VsdFA9RShzZWF0KS5nZXRPZmZlclJlc3VsdCgpO1xuaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQoaWQpLnJlc29sdmUob2ZmZXJSZXN1bHRQKTtcblxucmV0PXtcbmRlcG9zaXRlZFAsXG5kYXBwQ29udGV4dDpvZmZlci5kYXBwQ29udGV4dH07XG5cblxuLy9cbmRlcG9zaXRlZFAuXG50aGVuKChfKT0+e1xuLy9cbmlmKCFhbHJlYWR5UmVzb2x2ZWQpe1xuYWxyZWFkeVJlc29sdmVkPXRydWU7XG5jb25zdCBhY2NlcHRlZE9mZmVyPWFkZE1ldGEoe1xuLi4ucGVuZGluZ09mZmVyLFxuc3RhdHVzOidhY2NlcHQnfSk7XG5cbmlkVG9PZmZlci5zZXQoaWQsYWNjZXB0ZWRPZmZlcik7XG52b2lkIHVwZGF0ZUluYm94U3RhdGUoaWQsYWNjZXB0ZWRPZmZlcik7XG4gfVxuIH0pLlxuY2F0Y2gocmVqZWN0ZWQpO1xuIH1jYXRjaChlKXtcbmlmKG9mZmVyLmFjdGlvbnMpe1xuRShvZmZlci5hY3Rpb25zKS5lcnJvcihvZmZlcixlKTtcbiB9XG5yZWplY3RlZChlKTtcbnRocm93IGU7XG4gfVxucmV0dXJuIHJldDtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlkVG9QYXltZW50UmVjb3JkPW1ha2VTY2FsYXJNYXBTdG9yZSgncGF5bWVudElkJyk7XG5jb25zdHt1cGRhdGVyOnBheW1lbnRzVXBkYXRlcixub3RpZmllcjpwYXltZW50c05vdGlmaWVyfT1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9tYWtlTm90aWZpZXJLaXQoW10pO1xuLypcblxuICAgKi9cbmNvbnN0IHVwZGF0ZVBheW1lbnRSZWNvcmQ9KHthY3Rpb25zLC4uLnByZURpc3BsYXl9KT0+e1xuLy9cbi8vXG5kZWxldGUgcHJlRGlzcGxheS5kaXNwbGF5UGF5bWVudDtcbmNvbnN0IGRpc3BsYXlQYXltZW50PWZpbGxJblNsb3RzKGRlaHlkcmF0ZShoYXJkZW4ocHJlRGlzcGxheSkpKTtcbmNvbnN0IHBheW1lbnRSZWNvcmQ9YWRkTWV0YSh7XG4uLi5wcmVEaXNwbGF5LFxuYWN0aW9ucyxcbmRpc3BsYXlQYXltZW50fSk7XG5cbmNvbnN0e2lkfT1wYXltZW50UmVjb3JkLm1ldGE7XG5pZFRvUGF5bWVudFJlY29yZC5zZXQoaWQsaGFyZGVuKHBheW1lbnRSZWNvcmQpKTtcbnBheW1lbnRzVXBkYXRlci51cGRhdGVTdGF0ZShbcGF5bWVudFJlY29yZF0pO1xuIH07XG5cbmNvbnN0IG1ha2VQYXltZW50QWN0aW9uc0ZvcklkPShpZCk9PlxubWFrZVBheW1lbnRBY3Rpb25zKHtcbmdldFJlY29yZDooKT0+aWRUb1BheW1lbnRSZWNvcmQuZ2V0KGlkKSxcbnVwZGF0ZVJlY29yZDoocmVjb3JkLHdpdGhvdXRNZXRhPXt9KT0+e1xuLy9cbi8vXG51cGRhdGVQYXltZW50UmVjb3JkKHsuLi53aXRob3V0TWV0YSwuLi5hZGRNZXRhKHJlY29yZCl9KTtcbiB9LFxuZ2V0QnJhbmRSZWNvcmQ6KGJyYW5kKT0+XG5icmFuZFRhYmxlLmhhc0J5QnJhbmQoYnJhbmQpJiZicmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpLFxuZ2V0UHVyc2VCeVBldG5hbWU6KHBldG5hbWUpPT5wdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldChwZXRuYW1lKSxcbmdldEF1dG9EZXBvc2l0UHVyc2U6KGIpPT5cbmJyYW5kVG9BdXRvRGVwb3NpdFB1cnNlLmhhcyhiKT9cbmJyYW5kVG9BdXRvRGVwb3NpdFB1cnNlLmdldChiKTpcbnVuZGVmaW5lZCxcbmdldElzc3VlckJvYXJkSWQ6aXNzdWVyVG9Cb2FyZElkLmdldH0pO1xuXG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGFkZFBheW1lbnQ9YXN5bmMocGF5bWVudFAsZGVwb3NpdFRvPXVuZGVmaW5lZCk9Pntcbi8vXG5jb25zdFtwYXltZW50LGJyYW5kXT1hd2FpdCBQcm9taXNlLmFsbChbXG5wYXltZW50UCxcbkUocGF5bWVudFApLmdldEFsbGVnZWRCcmFuZCgpXSk7XG5cblxuY29uc3QgYmFzZVBheW1lbnRSZWNvcmQ9YWRkTWV0YSh7XG5wYXltZW50LFxuYnJhbmR9KTtcblxuY29uc3R7aWR9PWJhc2VQYXltZW50UmVjb3JkLm1ldGE7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBheW1lbnRSZWNvcmQ9e1xuLi4uYmFzZVBheW1lbnRSZWNvcmQsXG5hY3Rpb25zOm1ha2VQYXltZW50QWN0aW9uc0ZvcklkKGlkKX07XG5cbmlkVG9QYXltZW50UmVjb3JkLmluaXQoaWQsaGFyZGVuKHBheW1lbnRSZWNvcmQpKTtcblxuY29uc3QgcmVmcmVzaGVkPWF3YWl0IHBheW1lbnRSZWNvcmQuYWN0aW9ucy5yZWZyZXNoKCk7XG5pZighcmVmcmVzaGVkKXtcbi8vXG51cGRhdGVQYXltZW50UmVjb3JkKHBheW1lbnRSZWNvcmQpO1xuIH1cblxuLy9cbmF3YWl0IHBheW1lbnRSZWNvcmQuYWN0aW9ucy5kZXBvc2l0KGRlcG9zaXRUbyk7XG4gfTtcblxubGV0IHNlbGZDb250YWN0UDtcbmFzeW5jIGZ1bmN0aW9uIGdldERlcG9zaXRGYWNldElkKF9icmFuZEJvYXJkSWQpe1xuLy9cbnJldHVybiBFLmdldChzZWxmQ29udGFjdFApLmRlcG9zaXRCb2FyZElkO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gZGlzYWJsZUF1dG9EZXBvc2l0KHB1cnNlUGV0bmFtZSl7XG5jb25zdCBwdXJzZT1wdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldChwdXJzZVBldG5hbWUpO1xuY29uc3QgYnJhbmQ9cHVyc2VUb0JyYW5kLmdldChwdXJzZSk7XG5pZihcbiFicmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5oYXMoYnJhbmQpfHxcbmJyYW5kVG9BdXRvRGVwb3NpdFB1cnNlLmdldChicmFuZCkhPT1wdXJzZSlcbntcbnJldHVybjtcbiB9XG5cbmJyYW5kVG9BdXRvRGVwb3NpdFB1cnNlLmRlbGV0ZShicmFuZCk7XG5hd2FpdCB1cGRhdGVBbGxQdXJzZVN0YXRlKCk7XG4gfVxuXG5jb25zdCBwZW5kaW5nRW5hYmxlQXV0b0RlcG9zaXRzPW1ha2VTY2FsYXJNYXBTdG9yZSgnYnJhbmQnKTtcbmFzeW5jIGZ1bmN0aW9uIGRvRW5hYmxlQXV0b0RlcG9zaXQocHVyc2VQZXRuYW1lLHVwZGF0ZVN0YXRlKXtcbmNvbnN0IHB1cnNlPXB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHB1cnNlUGV0bmFtZSk7XG5jb25zdCBicmFuZD1wdXJzZVRvQnJhbmQuZ2V0KHB1cnNlKTtcbmlmKGJyYW5kVG9BdXRvRGVwb3NpdFB1cnNlLmhhcyhicmFuZCkpe1xuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2Uuc2V0KGJyYW5kLHB1cnNlKTtcbiB9ZWxzZXtcbmJyYW5kVG9BdXRvRGVwb3NpdFB1cnNlLmluaXQoYnJhbmQscHVyc2UpO1xuIH1cblxuYXdhaXQgbnVsbDtcbmlmKHVwZGF0ZVN0YXRlKXtcbmF3YWl0IHVwZGF0ZUFsbFB1cnNlU3RhdGUoKTtcbiB9XG5cbmNvbnN0IHBlbmRpbmdQPVxucGVuZGluZ0VuYWJsZUF1dG9EZXBvc2l0cy5oYXMoYnJhbmQpJiZcbnBlbmRpbmdFbmFibGVBdXRvRGVwb3NpdHMuZ2V0KGJyYW5kKTtcbmlmKHBlbmRpbmdQKXtcbnJldHVybiBwZW5kaW5nUDtcbiB9XG5cbmNvbnN0IGJvYXJkSWRQPUUuZ2V0KHNlbGZDb250YWN0UCkuZGVwb3NpdEJvYXJkSWQ7XG5wZW5kaW5nRW5hYmxlQXV0b0RlcG9zaXRzLmluaXQoYnJhbmQsYm9hcmRJZFApO1xuY29uc3QgYm9hcmRJZD1hd2FpdCBib2FyZElkUDtcbmJyYW5kVG9EZXBvc2l0RmFjZXRJZC5pbml0KGJyYW5kLGJvYXJkSWQpO1xuXG5pZih1cGRhdGVTdGF0ZSl7XG5hd2FpdCB1cGRhdGVBbGxQdXJzZVN0YXRlKCk7XG4gfVxucmV0dXJuIGJvYXJkSWRQO1xuIH1cblxuLypcblxuXG5cblxuICAgKi9cbmZ1bmN0aW9uIGFjY2VwdFBldG5hbWUoXG5hY2NlcHRGbixcbnN1Z2dlc3RlZFBldG5hbWUsXG5ib2FyZElkLFxuZGFwcE9yaWdpbj11bmRlZmluZWQpXG57XG4vKiAgICAgICAgICAgICAgICAgICovXG5sZXQgcGV0bmFtZTtcbmlmKGRhcHBPcmlnaW49PT11bmRlZmluZWQpe1xucGV0bmFtZT1zdWdnZXN0ZWRQZXRuYW1lO1xuIH1lbHNle1xuY29uc3QgZWRnZW5hbWU9ZWRnZU1hcHBpbmcudmFsVG9QZXRuYW1lLmdldChkYXBwT3JpZ2luKTtcbi8vXG5wZXRuYW1lPVtlZGdlbmFtZSxzdWdnZXN0ZWRQZXRuYW1lXTtcbiB9XG5cbnJldHVybiBFKGJvYXJkKS5cbmdldFZhbHVlKGJvYXJkSWQpLlxudGhlbigodmFsdWUpPT57XG5jb250ZXh0LmVuc3VyZUJvYXJkSWQoYm9hcmRJZCx2YWx1ZSk7XG5yZXR1cm4gYWNjZXB0Rm4ocGV0bmFtZSx2YWx1ZSk7XG4gfSk7XG4gfVxuXG4vKlxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIHN1Z2dlc3RJc3N1ZXIoXG5zdWdnZXN0ZWRQZXRuYW1lLFxuaXNzdWVyQm9hcmRJZCxcbmRhcHBPcmlnaW49dW5kZWZpbmVkKVxue1xuLy9cbi8vXG4vL1xucmV0dXJuIGFjY2VwdFBldG5hbWUoXG4vL1xuKHBldG5hbWUsdmFsdWUpPT5hZGRJc3N1ZXIocGV0bmFtZSx2YWx1ZSx0cnVlKSxcbnN1Z2dlc3RlZFBldG5hbWUsXG5pc3N1ZXJCb2FyZElkLFxuZGFwcE9yaWdpbik7XG5cbiB9XG5cbi8qXG5cblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gc3VnZ2VzdEluc3RhbmNlKFxuc3VnZ2VzdGVkUGV0bmFtZSxcbmluc3RhbmNlSGFuZGxlQm9hcmRJZCxcbmRhcHBPcmlnaW49dW5kZWZpbmVkKVxue1xuLy9cbi8vXG4vL1xuXG5yZXR1cm4gYWNjZXB0UGV0bmFtZShcbmFkZEluc3RhbmNlLFxuc3VnZ2VzdGVkUGV0bmFtZSxcbmluc3RhbmNlSGFuZGxlQm9hcmRJZCxcbmRhcHBPcmlnaW4pO1xuXG4gfVxuXG4vKlxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIHN1Z2dlc3RJbnN0YWxsYXRpb24oXG5zdWdnZXN0ZWRQZXRuYW1lLFxuaW5zdGFsbGF0aW9uSGFuZGxlQm9hcmRJZCxcbmRhcHBPcmlnaW49dW5kZWZpbmVkKVxue1xuLy9cbi8vXG4vL1xucmV0dXJuIGFjY2VwdFBldG5hbWUoXG4vL1xuaW5zdGFsbGF0aW9uTWFuYWdlci5hZGQsXG5zdWdnZXN0ZWRQZXRuYW1lLFxuaW5zdGFsbGF0aW9uSGFuZGxlQm9hcmRJZCxcbmRhcHBPcmlnaW4pO1xuXG4gfVxuXG5mdW5jdGlvbiBnZXRCcmFuZChwZXRuYW1lKXtcbmNvbnN0IGJyYW5kPWJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHBldG5hbWUpO1xucmV0dXJuIGJyYW5kO1xuIH1cblxuZnVuY3Rpb24gZ2V0QnJhbmRQZXRuYW1lcyhicmFuZHMpe1xucmV0dXJuIGJyYW5kcy5tYXAoYnJhbmRNYXBwaW5nLnZhbFRvUGV0bmFtZS5nZXQpO1xuIH1cblxuZnVuY3Rpb24gZ2V0U2VsZkNvbnRhY3QoKXtcbnJldHVybiBzZWxmQ29udGFjdFA7XG4gfVxuXG5jb25zdCBtYWtlTWFuYWdlcj0ocGV0bmFtZU1hcHBpbmcsbWFuYWdlclR5cGUpPT57XG5jb25zdCBtYW5hZ2VyPUZhcihtYW5hZ2VyVHlwZSx7XG5yZW5hbWU6YXN5bmMocGV0bmFtZSx0aGluZyk9PntcbnBldG5hbWVNYXBwaW5nLnJlbmFtZVBldG5hbWUocGV0bmFtZSx0aGluZyk7XG5hd2FpdCB1cGRhdGVBbGxTdGF0ZSgpO1xuIH0sXG5nZXQ6cGV0bmFtZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldCxcbmdldEFsbDpwZXRuYW1lTWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcyxcbmFkZDphc3luYyhwZXRuYW1lLHRoaW5nKT0+e1xucGV0bmFtZU1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZSx0aGluZyk7XG5hd2FpdCB1cGRhdGVBbGxTdGF0ZSgpO1xuIH19KTtcblxucmV0dXJuIG1hbmFnZXI7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5zdGFsbGF0aW9uTWFuYWdlcj1tYWtlTWFuYWdlcihcbmluc3RhbGxhdGlvbk1hcHBpbmcsXG4nSW5zdGFsbGF0aW9uTWFuYWdlcicpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5zdGFuY2VNYW5hZ2VyPW1ha2VNYW5hZ2VyKGluc3RhbmNlTWFwcGluZywnSW5zdGFuY2VNYW5hZ2VyJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3Vlck1hbmFnZXI9RmFyKCdJc3N1ZXJNYW5hZ2VyJyx7XG5yZW5hbWU6YXN5bmMocGV0bmFtZSxpc3N1ZXIpPT57XG5icmFuZFRhYmxlLmhhc0J5SXNzdWVyKGlzc3Vlcil8fFxuRmFpbCBgaXNzdWVyIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGFkZGVkYDtcbmNvbnN0IGJyYW5kUmVjb3JkPWJyYW5kVGFibGUuZ2V0QnlJc3N1ZXIoaXNzdWVyKTtcbmJyYW5kTWFwcGluZy5yZW5hbWVQZXRuYW1lKHBldG5hbWUsYnJhbmRSZWNvcmQuYnJhbmQpO1xuYXdhaXQgdXBkYXRlQWxsU3RhdGUoKTtcbiB9LFxuZ2V0OihwZXRuYW1lKT0+e1xuY29uc3QgYnJhbmQ9YnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSk7XG5yZXR1cm4gYnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKS5pc3N1ZXI7XG4gfSxcbmdldEFsbDooKT0+e1xucmV0dXJuWy4uLmJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcygpXS5tYXAoXG4oW3BldG5hbWUsYnJhbmRdKT0+e1xuY29uc3R7aXNzdWVyfT1icmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xucmV0dXJuW3BldG5hbWUsaXNzdWVyXTtcbiB9KTtcblxuIH0sXG5hZGQ6YXN5bmMocGV0bmFtZSxpc3N1ZXJQKT0+e1xuY29uc3R7YnJhbmQsaXNzdWVyfT1hd2FpdCBicmFuZFRhYmxlLmluaXRJc3N1ZXIoaXNzdWVyUCxhZGRNZXRhKTtcbmF3YWl0IGluaXRJc3N1ZXJUb0JvYXJkSWQoaXNzdWVyLGJyYW5kKTtcbmJyYW5kTWFwcGluZy5zdWdnZXN0UGV0bmFtZShwZXRuYW1lLGJyYW5kKTtcbmF3YWl0IHVwZGF0ZUFsbElzc3VlcnNTdGF0ZSgpO1xuIH19KTtcblxuXG5mdW5jdGlvbiBnZXRJbnN0YWxsYXRpb25NYW5hZ2VyKCl7XG5yZXR1cm4gaW5zdGFsbGF0aW9uTWFuYWdlcjtcbiB9XG5cbmZ1bmN0aW9uIGdldEluc3RhbmNlTWFuYWdlcigpe1xucmV0dXJuIGluc3RhbmNlTWFuYWdlcjtcbiB9XG5cbmZ1bmN0aW9uIGdldElzc3Vlck1hbmFnZXIoKXtcbnJldHVybiBpc3N1ZXJNYW5hZ2VyO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZU9mZmVyUmVzdWx0KGludml0YXRpb25IYW5kbGUsb2ZmZXJSZXN1bHQpe1xuaW52aXRhdGlvbkhhbmRsZVRvT2ZmZXJSZXN1bHQuaW5pdChpbnZpdGF0aW9uSGFuZGxlLG9mZmVyUmVzdWx0KTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE9mZmVyUmVzdWx0KGludml0YXRpb25IYW5kbGUpe1xucmV0dXJuIGludml0YXRpb25IYW5kbGVUb09mZmVyUmVzdWx0LmdldChpbnZpdGF0aW9uSGFuZGxlKTtcbiB9XG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFVJTm90aWZpZXIocmF3SWQsZGFwcE9yaWdpbj0ndW5rbm93bicpe1xuY29uc3QgaWQ9bWFrZUlkKGRhcHBPcmlnaW4scmF3SWQpO1xuY29uc3Qgb2ZmZXJSZXN1bHQ9YXdhaXQgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQoaWQpLnByb21pc2U7XG5hc3NlcnQoXG5wYXNzU3R5bGVPZihvZmZlclJlc3VsdCk9PT0nY29weVJlY29yZCcsXG4gYG9mZmVyUmVzdWx0IG11c3QgYmUgYSByZWNvcmQgdG8gaGF2ZSBhIHVpTm90aWZpZXJgKTtcblxub2ZmZXJSZXN1bHQudWlOb3RpZmllcnx8RmFpbCBgb2ZmZXJSZXN1bHQgZG9lcyBub3QgaGF2ZSBhIHVpTm90aWZpZXJgO1xucmV0dXJuIG9mZmVyUmVzdWx0LnVpTm90aWZpZXI7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFB1YmxpY1N1YnNjcmliZXJzKHJhd0lkLGRhcHBPcmlnaW49J3Vua25vd24nKXtcbmNvbnN0IGlkPW1ha2VJZChkYXBwT3JpZ2luLHJhd0lkKTtcblxuY29uc3Qgb2ZmZXJSZXN1bHQ9YXdhaXQgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQoaWQpLnByb21pc2U7XG5hc3NlcnQoXG5wYXNzU3R5bGVPZihvZmZlclJlc3VsdCk9PT0nY29weVJlY29yZCcsXG4gYG9mZmVyUmVzdWx0ICR7b2ZmZXJSZXN1bHR9IG11c3QgYmUgYSByZWNvcmQgdG8gaGF2ZSBwdWJsaWNTdWJzY3JpYmVyc2ApO1xuXG5cbmNvbnN0e3B1YmxpY1N1YnNjcmliZXJzfT1vZmZlclJlc3VsdDtcbnB1YmxpY1N1YnNjcmliZXJzfHxcbkZhaWwgYG9mZmVyUmVzdWx0ICR7b2ZmZXJSZXN1bHR9IGRvZXMgbm90IGhhdmUgcHVibGljU3Vic2NyaWJlcnNgO1xucGFzc1N0eWxlT2YocHVibGljU3Vic2NyaWJlcnMpPT09J2NvcHlSZWNvcmQnfHxcbkZhaWwgYHB1YmxpY1N1YnNjcmliZXJzICR7cHVibGljU3Vic2NyaWJlcnN9IG11c3QgYmUgYSByZWNvcmRgO1xuXG5yZXR1cm4gcHVibGljU3Vic2NyaWJlcnM7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFB1YmxpY05vdGlmaWVycyhyYXdJZCxkYXBwT3JpZ2luPSd1bmtub3duJyl7XG5jb25zdCBwdWJsaWNTdWJzY3JpYmVycz1hd2FpdCBnZXRQdWJsaWNTdWJzY3JpYmVycyhyYXdJZCxkYXBwT3JpZ2luKTtcbnJldHVybiBvYmplY3RNYXAocHVibGljU3Vic2NyaWJlcnMsbWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIpO1xuIH1cblxuLy9cbi8vXG5jb25zdCBjcmVhdGVSb290TG9va3Vwcz0oKT0+e1xuY29uc3Qgcm9vdFBhdGhUb0xvb2t1cD1tYWtlTGVnYWN5TWFwKCdsb29rdXBzJyk7XG5cbi8qXG5cblxuICAgICAqL1xuY29uc3QgbWFrZUxvb2t1cD0oa2luZCxsb29rdXApPT57XG5yb290UGF0aFRvTG9va3VwLmluaXQoXG5raW5kLFxuRmFyKCBgJHtraW5kfUxvb2t1cGAse1xubG9va3VwfSkpO1xuXG5cbiB9O1xuXG4vL1xuLy9cbmNvbnN0IHBldG5hbWVPclBhdGg9XG4obG9va3VwKT0+XG4oLi4ucGF0aCk9PntcbnRyeXtcbmlmKHBhdGgubGVuZ3RoPT09MSl7XG4vL1xucmV0dXJuIGxvb2t1cChwYXRoWzBdKTtcbiB9XG4gfWNhdGNoKGUpe1xuLy9cbiB9XG5yZXR1cm4gbG9va3VwKHBhdGgpO1xuIH07XG5cbm1ha2VMb29rdXAoJ2JyYW5kJyxwZXRuYW1lT3JQYXRoKGJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KSk7XG5tYWtlTG9va3VwKCdjb250YWN0JyxwZXRuYW1lT3JQYXRoKGNvbnRhY3RNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQpKTtcbm1ha2VMb29rdXAoJ2lzc3VlcicscGV0bmFtZU9yUGF0aChpc3N1ZXJNYW5hZ2VyLmdldCkpO1xubWFrZUxvb2t1cCgnaW5zdGFuY2UnLHBldG5hbWVPclBhdGgoaW5zdGFuY2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQpKTtcbm1ha2VMb29rdXAoXG4naW5zdGFsbGF0aW9uJyxcbnBldG5hbWVPclBhdGgoaW5zdGFsbGF0aW9uTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KSk7XG5cbm1ha2VMb29rdXAoJ3B1cnNlJyxwZXRuYW1lT3JQYXRoKHB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KSk7XG5cbi8vXG5jb25zdCBpZE9ubHk9XG4oa2luZCxsb29rdXApPT5cbiguLi5wYXRoKT0+e1xucGF0aC5sZW5ndGg9PT0xfHxcbkZhaWwgYCR7cShcbmtpbmQpXG4gfSBsb29rdXAgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHNpbmdsZSBvZmZlciBJRCwgbm90ICR7cGF0aH1gO1xucmV0dXJuIGxvb2t1cChwYXRoWzBdKTtcbiB9O1xubWFrZUxvb2t1cCgnb2ZmZXInLGlkT25seSgnb2ZmZXInLGlkVG9PZmZlci5nZXQpKTtcbm1ha2VMb29rdXAoXG4nb2ZmZXJSZXN1bHQnLFxuaWRPbmx5KCdvZmZlclJlc3VsdCcsKGlkKT0+aWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQoaWQpLnByb21pc2UpKTtcblxuXG5yZXR1cm4gcm9vdFBhdGhUb0xvb2t1cDtcbiB9O1xuXG5jb25zdCBmaXJzdFBhdGhUb0xvb2t1cD1jcmVhdGVSb290TG9va3VwcygpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hcnNoYWxsZXI9aGFyZGVuKHtcbmZyb21DYXBEYXRhOmNvbnRleHQuZnJvbUNhcERhdGEsXG50b0NhcERhdGE6Y29udGV4dC50b0NhcERhdGEsXG51bnNlcmlhbGl6ZTpjb250ZXh0LmZyb21DYXBEYXRhLFxuc2VyaWFsaXplOmNvbnRleHQudG9DYXBEYXRhfSk7XG5cblxuY29uc3QgaGFuZGxlQWNjZXB0T2ZmZXJBY3Rpb249YXN5bmMob2ZmZXIpPT57XG5jb25zdHtyZXF1ZXN0Q29udGV4dH09b2ZmZXI7XG5jb25zdCByYXdJZD1hd2FpdCBhZGRPZmZlcihvZmZlcixyZXF1ZXN0Q29udGV4dCk7XG5jb25zdCBkYXBwT3JpZ2luPVxucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbnx8cmVxdWVzdENvbnRleHQub3JpZ2lufHwndW5rbm93bic7XG5yZXR1cm4gYWNjZXB0T2ZmZXIoIGAke2RhcHBPcmlnaW59IyR7cmF3SWR9YCk7XG4gfTtcblxuY29uc3QgaGFuZGxlU3VnZ2VzdElzc3VlckFjdGlvbj0oe3BldG5hbWUsYm9hcmRJZH0pPT5cbnN1Z2dlc3RJc3N1ZXIocGV0bmFtZSxib2FyZElkKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLypcblxuXG4gICAqL1xuY29uc3QgcGVyZm9ybUFjdGlvbj0ob2JqKT0+e1xuY29uc3R7dHlwZSxkYXRhfT1KU09OLnBhcnNlKG9iai5zcGVuZEFjdGlvbik7XG5zd2l0Y2godHlwZSl7XG5jYXNlJ2FjY2VwdE9mZmVyJzpcbnJldHVybiBoYW5kbGVBY2NlcHRPZmZlckFjdGlvbihkYXRhKTtcbmNhc2Unc3VnZ2VzdElzc3Vlcic6XG5yZXR1cm4gaGFuZGxlU3VnZ2VzdElzc3VlckFjdGlvbihkYXRhKTtcbmRlZmF1bHQ6XG50aHJvdyBFcnJvciggYFVua25vd24gd2FsbGV0IGFjdGlvbiAke3R5cGV9YCk7fVxuXG4gfTtcblxuY29uc3Qgd2FsbGV0PUZhcignd2FsbGV0Jyx7XG5sb29rdXA6KC4uLnBhdGgpPT57XG4vL1xuaWYocGF0aC5sZW5ndGg9PT0wKXtcbnJldHVybiB3YWxsZXQ7XG4gfVxuY29uc3RbZmlyc3QsLi4ucmVtYWluaW5nXT1wYXRoO1xuY29uc3QgZmlyc3RWYWx1ZT1maXJzdFBhdGhUb0xvb2t1cC5nZXQoZmlyc3QpO1xuaWYocmVtYWluaW5nLmxlbmd0aD09PTApe1xucmV0dXJuIGZpcnN0VmFsdWU7XG4gfVxucmV0dXJuIEUoZmlyc3RWYWx1ZSkubG9va3VwKC4uLnJlbWFpbmluZyk7XG4gfSxcbmdldE1hcnNoYWxsZXI6KCk9Pm1hcnNoYWxsZXIsXG5nZXREYXBwQ2FjaGVDb29yZGluYXRvcjooZGFwcE9yaWdpbik9PlxuZGFwcE9yaWdpbnMuZ2V0KGRhcHBPcmlnaW4pLmNhY2hlQ29vcmRpbmF0b3IsXG5nZXRDYWNoZUNvb3JkaW5hdG9yOigpPT5zaGFyZWRDYWNoZUNvb3JkaW5hdG9yLFxuc2F2ZU9mZmVyUmVzdWx0LFxuZ2V0T2ZmZXJSZXN1bHQsXG53YWl0Rm9yRGFwcEFwcHJvdmFsLFxuZ2V0RGFwcHNOb3RpZmllcigpe1xucmV0dXJuIGRhcHBzTm90aWZpZXI7XG4gfSxcbmdldFB1cnNlc05vdGlmaWVyKCl7XG5yZXR1cm4gcHVyc2VzTm90aWZpZXI7XG4gfSxcbmdldEF0dGVudWF0ZWRQdXJzZXNOb3RpZmllcigpe1xucmV0dXJuIGF0dGVudWF0ZWRQdXJzZXNOb3RpZmllcjtcbiB9LFxuZ2V0SXNzdWVyc05vdGlmaWVyKCl7XG5yZXR1cm4gaXNzdWVyc05vdGlmaWVyO1xuIH0sXG5nZXRPZmZlcnNOb3RpZmllcigpe1xucmV0dXJuIG9mZmVyc05vdGlmaWVyO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmFkZElzc3Vlcjppc3N1ZXJNYW5hZ2VyLmFkZCxcbmdldEJyYW5kLFxuZ2V0QnJhbmRQZXRuYW1lcyxcbnB1Ymxpc2hJc3N1ZXIsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuYWRkSW5zdGFuY2U6aW5zdGFuY2VNYW5hZ2VyLmFkZCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuYWRkSW5zdGFsbGF0aW9uOmluc3RhbGxhdGlvbk1hbmFnZXIuYWRkLFxuZ2V0SW5zdGFsbGF0aW9uTWFuYWdlcixcbmdldEluc3RhbmNlTWFuYWdlcixcbmdldElzc3Vlck1hbmFnZXIsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJlbmFtZUlzc3Vlcjppc3N1ZXJNYW5hZ2VyLnJlbmFtZSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZW5hbWVJbnN0YW5jZTppbnN0YW5jZU1hbmFnZXIucmVuYW1lLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZW5hbWVJbnN0YWxsYXRpb246aW5zdGFsbGF0aW9uTWFuYWdlci5yZW5hbWUsXG5nZXRTZWxmQ29udGFjdCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRJbnN0YW5jZTppbnN0YW5jZU1hbmFnZXIuZ2V0LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRJbnN0YWxsYXRpb246aW5zdGFsbGF0aW9uTWFuYWdlci5nZXQsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldEluc3RhbGxhdGlvbnM6aW5zdGFsbGF0aW9uTWFuYWdlci5nZXRBbGwsXG5tYWtlRW1wdHlQdXJzZSxcbmRlcG9zaXQsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldElzc3Vlcjppc3N1ZXJNYW5hZ2VyLmdldCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0SXNzdWVyczppc3N1ZXJNYW5hZ2VyLmdldEFsbCxcbmdldFB1cnNlcyxcbmdldFB1cnNlLFxuZ2V0UHVyc2VJc3N1ZXIsXG5hZGRPZmZlcixcbmRlY2xpbmVPZmZlcixcbmNhbmNlbE9mZmVyLFxuYWNjZXB0T2ZmZXIsXG5nZXRPZmZlcnMsXG5nZXRTZWF0OihpZCk9PmlkVG9TZWF0LmdldChpZCksXG5nZXRTZWF0czooaWRzKT0+aWRzLm1hcCh3YWxsZXQuZ2V0U2VhdCksXG5lbmFibGVBdXRvRGVwb3NpdChwdXJzZVBldG5hbWUpe1xuLy9cbnJldHVybiBkb0VuYWJsZUF1dG9EZXBvc2l0KHB1cnNlUGV0bmFtZSx0cnVlKTtcbiB9LFxuZGlzYWJsZUF1dG9EZXBvc2l0LFxucGVyZm9ybUFjdGlvbixcbmdldERlcG9zaXRGYWNldElkLFxuc3VnZ2VzdElzc3VlcixcbnN1Z2dlc3RJbnN0YW5jZSxcbnN1Z2dlc3RJbnN0YWxsYXRpb24sXG5hZGRDb250YWN0LFxuZ2V0Q29udGFjdHNOb3RpZmllcigpe1xucmV0dXJuIGNvbnRhY3RzTm90aWZpZXI7XG4gfSxcbmFkZFBheW1lbnQsXG5nZXRQYXltZW50c05vdGlmaWVyKCl7XG5yZXR1cm4gcGF5bWVudHNOb3RpZmllcjtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRVSU5vdGlmaWVyLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRQdWJsaWNOb3RpZmllcnMsXG5nZXRQdWJsaWNTdWJzY3JpYmVycyxcbmdldFpvZSgpe1xucmV0dXJuIHpvZTtcbiB9LFxuZ2V0Qm9hcmQoKXtcbnJldHVybiBib2FyZDtcbiB9LFxuZ2V0QWdvcmljTmFtZXMoLi4ucGF0aCl7XG5pZighYWdvcmljTmFtZXMpe1xudGhyb3cgRmFpbCBgYWdvcmljTmFtZXMgd2FzIG5vdCBzdXBwbGllZCB0byB0aGUgd2FsbGV0IG1ha2VyYDtcbiB9XG5yZXR1cm4gRShhZ29yaWNOYW1lcykubG9va3VwKC4uLnBhdGgpO1xuIH0sXG5nZXROYW1lc0J5QWRkcmVzcyguLi5wYXRoKXtcbmlmKG5hbWVzQnlBZGRyZXNzPT09dW5kZWZpbmVkKXtcbi8vXG4vL1xudGhyb3cgRmFpbCBgbmFtZXNCeUFkZHJlc3Mgd2FzIG5vdCBzdXBwbGllZCB0byB0aGUgd2FsbGV0IG1ha2VyYDtcbiB9XG5yZXR1cm4gRShuYW1lc0J5QWRkcmVzcykubG9va3VwKC4uLnBhdGgpO1xuIH19KTtcblxuXG5jb25zdCBpbml0aWFsaXplPWFzeW5jKCk9Pntcbi8vXG5jb25zdCBzZWxmRGVwb3NpdEZhY2V0PUZhcignY29udGFjdCcse1xucmVjZWl2ZShwYXltZW50KXtcbnJldHVybiBhZGRQYXltZW50KHBheW1lbnQpO1xuIH19KTtcblxuXG5jb25zdCBhZGRyZXNzPWF3YWl0IEUobXlBZGRyZXNzTmFtZUFkbWluKS5nZXRNeUFkZHJlc3MoKTtcbi8vXG5zZWxmQ29udGFjdFA9YWRkQ29udGFjdCgnU2VsZicsc2VsZkRlcG9zaXRGYWNldCxhZGRyZXNzKTtcblxuLy9cbmNvbnN0IFpPRV9JTlZJVEVfUFVSU0VfUEVUTkFNRT0nRGVmYXVsdCBab2UgaW52aXRlIHB1cnNlJztcbmNvbnN0IGludml0ZUlzc3VlclA9RSh6b2UpLmdldEludml0YXRpb25Jc3N1ZXIoKTtcbmNvbnN0IGFkZFpvZUlzc3Vlcj0oaXNzdWVyUCk9PlxuaXNzdWVyTWFuYWdlci5hZGQoWk9FX0lOVklURV9CUkFORF9QRVROQU1FLGlzc3VlclApO1xuY29uc3QgbWFrZUludml0ZVB1cnNlPSgpPT5cbndhbGxldC5tYWtlRW1wdHlQdXJzZShaT0VfSU5WSVRFX0JSQU5EX1BFVE5BTUUsWk9FX0lOVklURV9QVVJTRV9QRVROQU1FKTtcbmNvbnN0IGFkZEludml0ZURlcG9zaXRGYWNldD0oKT0+XG5FKHdhbGxldCkuZW5hYmxlQXV0b0RlcG9zaXQoWk9FX0lOVklURV9QVVJTRV9QRVROQU1FKTtcblxuYXdhaXQgYWRkWm9lSXNzdWVyKGludml0ZUlzc3VlclApLlxudGhlbihtYWtlSW52aXRlUHVyc2UpLlxudGhlbihhZGRJbnZpdGVEZXBvc2l0RmFjZXQpO1xuem9lSW52aXRlUHVyc2U9d2FsbGV0LmdldFB1cnNlKFpPRV9JTlZJVEVfUFVSU0VfUEVUTkFNRSk7XG5cbmF3YWl0IEUobXlBZGRyZXNzTmFtZUFkbWluKS51cGRhdGUoXG5XYWxsZXROYW1lLmRlcG9zaXRGYWNldCxcbnNlbGZEZXBvc2l0RmFjZXQpO1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBpbXBvcnRCYW5rQXNzZXRzPWFzeW5jKGJhbmspPT57XG52b2lkIG9ic2VydmVJdGVyYXRpb24oXG5zdWJzY3JpYmVFYWNoKEUoYmFuaykuZ2V0QXNzZXRTdWJzY3JpcHRpb24oKSksXG5oYXJkZW4oe1xuICAgICAgYXN5bmMgdXBkYXRlU3RhdGUoe3Byb3Bvc2VkTmFtZSxpc3N1ZXJOYW1lLGlzc3VlcixicmFuZH0pe1xuYXdhaXQgbnVsbDtcbnRyeXtcbmlzc3Vlck5hbWU9YXdhaXQgYWRkSXNzdWVyKGlzc3Vlck5hbWUsaXNzdWVyKTtcbmNvbnN0IHB1cnNlPWF3YWl0IEUoYmFuaykuZ2V0UHVyc2UoYnJhbmQpO1xuLy9cbmF3YWl0IGludGVybmFsVW5zYWZlSW1wb3J0UHVyc2UoXG5pc3N1ZXJOYW1lLFxucHJvcG9zZWROYW1lLFxudHJ1ZSxcbnB1cnNlKTtcblxuIH1jYXRjaChlKXtcbmNvbnNvbGUuZXJyb3IoJy8vLyBjb3VsZCBub3QgYWRkIGJhbmsgYXNzZXQgcHVyc2UnLGUse1xuaXNzdWVyTmFtZSxcbnByb3Bvc2VkTmFtZSxcbmlzc3VlcixcbmJyYW5kfSk7XG5cbiB9XG4gfX0pKS5cblxuZmluYWxseSgoKT0+Y29uc29sZS5lcnJvcignLy8vIFRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgYmFuayBhc3NldHMnKSk7XG4gfTtcbnJldHVybntcbmFkbWluOndhbGxldCxcbmluaXRpYWxpemVkOmluaXRpYWxpemUoKSxcbmltcG9ydEJhbmtBc3NldHN9O1xuXG4gfVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VXYWxsZXRSb290IjpbIm1ha2VXYWxsZXRSb290Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFPgEuq/AgAAvwIAADIAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE3LjEvc3JjL3B1YnN1Yi5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICBmdW5jdGlvbiAgICAgICAgICAgICAgICBtYWtlUHVic3ViKEUpe1xubGV0IGxhc3RQdWJsaXNoZWQ7XG5jb25zdCBzdWJzY3JpYmVycz1bXTtcblxucmV0dXJuIGhhcmRlbih7XG5zdWJzY3JpYmUocyl7XG5zdWJzY3JpYmVycy5wdXNoKHMpO1xuaWYobGFzdFB1Ymxpc2hlZCE9PXVuZGVmaW5lZCl7XG5FKHMpLm5vdGlmeShsYXN0UHVibGlzaGVkKTtcbiB9XG4gfSxcbnB1Ymxpc2gobSl7XG5sYXN0UHVibGlzaGVkPW07XG5mb3IoY29uc3QgcyBvZiBzdWJzY3JpYmVycyl7XG5FKHMpLm5vdGlmeShtKTtcbiB9XG4gfX0pO1xuXG4gfSRo4oCNX29uY2UuZGVmYXVsdCggICAgIG1ha2VQdWJzdWIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALzF3h8UNQAAFDUAADIAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE3LjEvc3JjL3dhbGxldC5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGFnb3JpYy9ub3RpZmllciIsIkBlbmRvL21hcnNoYWwiLCIuL2xpYi13YWxsZXQuanMiLCIuL3B1YnN1Yi5qcyIsIi4vYmlnaW50U3RyaW5naWZ5LmpzIiwiLi9kYXRlLW5vdy5qcyIsIi4vaW50ZXJuYWwtdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJidWlsZFJvb3RPYmplY3QiLCJkZWZhdWx0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLG1ha2VOb3RpZmllcktpdCxvYnNlcnZlSXRlcmF0aW9uLEZhcixtYWtlV2FsbGV0Um9vdCxwdWJzdWIsYmlnaW50U3RyaW5naWZ5LG1ha2VUaW1lckRldmljZURhdGVOb3csbWFrZVRpbWVyU2VydmljZURhdGVOb3c7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyXCIsIFtbXCJtYWtlTm90aWZpZXJLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VOb3RpZmllcktpdCA9ICRo4oCNX2EpXV0sW1wib2JzZXJ2ZUl0ZXJhdGlvblwiLCBbJGjigI1fYSA9PiAob2JzZXJ2ZUl0ZXJhdGlvbiA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXSxbXCIuL2xpYi13YWxsZXQuanNcIiwgW1tcIm1ha2VXYWxsZXRSb290XCIsIFskaOKAjV9hID0+IChtYWtlV2FsbGV0Um9vdCA9ICRo4oCNX2EpXV1dXSxbXCIuL3B1YnN1Yi5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjigI1fYSA9PiAocHVic3ViID0gJGjigI1fYSldXV1dLFtcIi4vYmlnaW50U3RyaW5naWZ5LmpzXCIsIFtbXCJiaWdpbnRTdHJpbmdpZnlcIiwgWyRo4oCNX2EgPT4gKGJpZ2ludFN0cmluZ2lmeSA9ICRo4oCNX2EpXV1dXSxbXCIuL2RhdGUtbm93LmpzXCIsIFtbXCJtYWtlVGltZXJEZXZpY2VEYXRlTm93XCIsIFskaOKAjV9hID0+IChtYWtlVGltZXJEZXZpY2VEYXRlTm93ID0gJGjigI1fYSldXSxbXCJtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vd1wiLCBbJGjigI1fYSA9PiAobWFrZVRpbWVyU2VydmljZURhdGVOb3cgPSAkaOKAjV9hKV1dXV0sW1wiLi9pbnRlcm5hbC10eXBlcy5qc1wiLCBbXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVpbGRSb290T2JqZWN0LCAnbmFtZScsIHt2YWx1ZTogXCJidWlsZFJvb3RPYmplY3RcIn0pOyRo4oCNX29uY2UuYnVpbGRSb290T2JqZWN0KGJ1aWxkUm9vdE9iamVjdCk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuZnVuY3Rpb24gICAgICAgIGJ1aWxkUm9vdE9iamVjdCh2YXRQb3dlcnMpe1xuLy9cbmNvbnN0e0R9PXZhdFBvd2Vyc3x8e307XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHdhbGxldFJvb3Q7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgd2FsbGV0QWRtaW47XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcHVyc2VzU3RhdGU9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGluYm94U3RhdGU9W107XG5sZXQgaHR0cDtcblxuY29uc3QgYnJpZGdlSGFuZGxlcz1uZXcgU2V0KCk7XG5jb25zdCBvZmZlclN1YnNjcmlwdGlvbnM9bmV3IE1hcCgpO1xuXG5jb25zdCBodHRwU2VuZD0ob2JqLGNoYW5uZWxIYW5kbGVzKT0+XG5FKGh0dHApLnNlbmQoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKSxjaGFubmVsSGFuZGxlcyk7XG5cbmNvbnN0IHB1c2hPZmZlclN1YnNjcmlwdGlvbnM9KGNoYW5uZWxIYW5kbGUsb2ZmZXJzKT0+e1xuY29uc3Qgc3Vicz1vZmZlclN1YnNjcmlwdGlvbnMuZ2V0KGNoYW5uZWxIYW5kbGUpO1xuZm9yKGNvbnN0e29yaWdpbixzdGF0dXN9b2Ygc3Vic3x8W10pe1xuLy9cbmNvbnN0IHJlc3VsdD1oYXJkZW4oXG5vZmZlcnMuZmlsdGVyKFxuKG9mZmVyKT0+XG4oc3RhdHVzPT09bnVsbHx8b2ZmZXIuc3RhdHVzPT09c3RhdHVzKSYmXG5vZmZlci5yZXF1ZXN0Q29udGV4dCYmXG5vZmZlci5yZXF1ZXN0Q29udGV4dC5vcmlnaW49PT1vcmlnaW4pKTtcblxuXG5odHRwU2VuZChcbntcbnR5cGU6J3dhbGxldE9mZmVyRGVzY3JpcHRpb25zJyxcbmRhdGE6cmVzdWx0fSxcblxuW2NoYW5uZWxIYW5kbGVdKTtcblxuIH1cbiB9O1xuXG5jb25zdCBzdWJzY3JpYmVUb09mZmVycz0oY2hhbm5lbEhhbmRsZSx7b3JpZ2luLHN0YXR1cz1udWxsfSk9PntcbmxldCBzdWJzPW9mZmVyU3Vic2NyaXB0aW9ucy5nZXQoY2hhbm5lbEhhbmRsZSk7XG5pZighc3Vicyl7XG5zdWJzPVtdO1xub2ZmZXJTdWJzY3JpcHRpb25zLnNldChjaGFubmVsSGFuZGxlLHN1YnMpO1xuIH1cbnN1YnMucHVzaCh7b3JpZ2luLHN0YXR1c30pO1xucHVzaE9mZmVyU3Vic2NyaXB0aW9ucyhjaGFubmVsSGFuZGxlLGluYm94U3RhdGUpO1xuIH07XG5cbmNvbnN0e3B1Ymxpc2g6cHVyc2VzUHVibGlzaCxzdWJzY3JpYmU6cHVyc2VzU3Vic2NyaWJlfT1wdWJzdWIoRSk7XG5jb25zdHt1cGRhdGVyOmluYm94VXBkYXRlcixub3RpZmllcjpvZmZlck5vdGlmaWVyfT1cbm1ha2VOb3RpZmllcktpdChpbmJveFN0YXRlKTtcbmNvbnN0e3B1Ymxpc2g6aW5ib3hQdWJsaXNoLHN1YnNjcmliZTppbmJveFN1YnNjcmliZX09cHVic3ViKEUpO1xuXG5jb25zdCBub3RpZmllcnM9aGFyZGVuKHtcbmdldEluYm94Tm90aWZpZXIoKXtcbnJldHVybiBvZmZlck5vdGlmaWVyO1xuIH19KTtcblxuXG4vKlxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gc3RhcnR1cCh7XG56b2UsXG5ib2FyZCxcbmFnb3JpY05hbWVzLFxubmFtZXNCeUFkZHJlc3MsXG5teUFkZHJlc3NOYW1lQWRtaW4sXG50aW1lckRldmljZSxcbnRpbWVyRGV2aWNlU2NhbGUsXG5sb2NhbFRpbWVyU2VydmljZSxcbmxvY2FsVGltZXJQb2xsSW50ZXJ2YWx9KVxue1xuYXNzZXJ0KG15QWRkcmVzc05hbWVBZG1pbiwnbWlzc2luZyBteUFkZHJlc3NOYW1lQWRtaW4nKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZGF0ZU5vd1A7XG5pZih0aW1lckRldmljZSl7XG5kYXRlTm93UD1tYWtlVGltZXJEZXZpY2VEYXRlTm93KEQsdGltZXJEZXZpY2UsdGltZXJEZXZpY2VTY2FsZSk7XG4gfVxuaWYobG9jYWxUaW1lclNlcnZpY2Upe1xuZGF0ZU5vd1A9bWFrZVRpbWVyU2VydmljZURhdGVOb3coXG5sb2NhbFRpbWVyU2VydmljZSxcbmxvY2FsVGltZXJQb2xsSW50ZXJ2YWwpO1xuXG4gfVxuXG5jb25zdCBkYXRlTm93PWF3YWl0IGRhdGVOb3dQO1xuY29uc3Qgdz1tYWtlV2FsbGV0Um9vdCh7XG5hZ29yaWNOYW1lcyxcbm5hbWVzQnlBZGRyZXNzLFxubXlBZGRyZXNzTmFtZUFkbWluLFxuem9lLFxuYm9hcmQsXG5wdXJzZXNTdGF0ZUNoYW5nZUhhbmRsZXI6cHVyc2VzUHVibGlzaCxcbmluYm94U3RhdGVDaGFuZ2VIYW5kbGVyOmluYm94UHVibGlzaCxcbmRhdGVOb3d9KTtcblxuY29uc29sZS5kZWJ1Zygnd2FpdGluZyBmb3Igd2FsbGV0IHRvIGluaXRpYWxpemUnKTtcbmF3YWl0IHcuaW5pdGlhbGl6ZWQ7XG5jb25zb2xlLmRlYnVnKCd3YWxsZXQgaW5pdGlhbGl6ZWQnKTtcbndhbGxldEFkbWluPXcuYWRtaW47XG53YWxsZXRSb290PXc7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VCcmlkZ2U9KGFwcHJvdmUsZGFwcE9yaWdpbixtZXRhPXt9KT0+e1xuYXN5bmMgZnVuY3Rpb24qbWFrZUFwcHJvdmVkTm90aWZpZXIoc291cmNlTm90aWZpZXIpe1xuYXdhaXQgYXBwcm92ZSgpO1xuZm9yIGF3YWl0KGNvbnN0IHN0YXRlIG9mIHNvdXJjZU5vdGlmaWVyKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnlpZWxkIHN0YXRlO1xuIH1cbiB9XG5oYXJkZW4obWFrZUFwcHJvdmVkTm90aWZpZXIpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGJyaWRnZT1GYXIoJ2JyaWRnZScse1xuICAgICAgYXN5bmMgZ2V0UHVyc2VzTm90aWZpZXIoKXtcbmF3YWl0IGFwcHJvdmUoKTtcbmNvbnN0IHB1cnNlc05vdGlmaWVyPXdhbGxldEFkbWluLmdldEF0dGVudWF0ZWRQdXJzZXNOb3RpZmllcigpO1xuY29uc3R7bm90aWZpZXIsdXBkYXRlcn09bWFrZU5vdGlmaWVyS2l0KCk7XG52b2lkIG9ic2VydmVJdGVyYXRpb24obWFrZUFwcHJvdmVkTm90aWZpZXIocHVyc2VzTm90aWZpZXIpLHVwZGF0ZXIpO1xucmV0dXJuIG5vdGlmaWVyO1xuIH0sXG4gICAgICBhc3luYyBnZXRDYWNoZUNvb3JkaW5hdG9yKCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0RGFwcENhY2hlQ29vcmRpbmF0b3IoZGFwcE9yaWdpbik7XG4gfSxcbiAgICAgIGFzeW5jIGdldElzc3VlcnNOb3RpZmllcigpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldElzc3VlcnNOb3RpZmllcigpO1xuIH0sXG4gICAgICBhc3luYyBhZGRPZmZlcihvZmZlcil7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uYWRkT2ZmZXIob2ZmZXIsey4uLm1ldGEsZGFwcE9yaWdpbn0pO1xuIH0sXG4gICAgICBhc3luYyBnZXRPZmZlcnNOb3RpZmllcihzdGF0dXM9bnVsbCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5jb25zdHtub3RpZmllcix1cGRhdGVyfT1tYWtlTm90aWZpZXJLaXQoaW5ib3hTdGF0ZSk7XG5jb25zdCBmaWx0ZXI9KG9mZmVyKT0+XG4oc3RhdHVzPT09bnVsbHx8b2ZmZXIuc3RhdHVzPT09c3RhdHVzKSYmXG5vZmZlci5yZXF1ZXN0Q29udGV4dCYmXG5vZmZlci5yZXF1ZXN0Q29udGV4dC5kYXBwT3JpZ2luPT09ZGFwcE9yaWdpbjtcbmNvbnN0IGZpbHRlcmVkT2ZmZXJzPShvZmZlcnMpPT57XG5yZXR1cm4gb2ZmZXJzLmZpbHRlcihmaWx0ZXIpLm1hcCgoe3Jhd0lkLC4uLnZ9KT0+KHtcbi4uLnYsXG5pZDpyYXdJZH0pKTtcblxuIH07XG5cbnZvaWQgb2JzZXJ2ZUl0ZXJhdGlvbihtYWtlQXBwcm92ZWROb3RpZmllcihvZmZlck5vdGlmaWVyKSx7XG51cGRhdGVTdGF0ZShvZmZlcnMpe1xudXBkYXRlci51cGRhdGVTdGF0ZShmaWx0ZXJlZE9mZmVycyhvZmZlcnMpKTtcbiB9LFxuZmluaXNoKG9mZmVycyl7XG51cGRhdGVyLmZpbmlzaChmaWx0ZXJlZE9mZmVycyhvZmZlcnMpKTtcbiB9LFxuZmFpbChlKXtcbnVwZGF0ZXIuZmFpbChlKTtcbiB9fSk7XG5cbnJldHVybiBub3RpZmllcjtcbiB9LFxuICAgICAgYXN5bmMgZ2V0RGVwb3NpdEZhY2V0SWQoYnJhbmRCb2FyZElkKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXREZXBvc2l0RmFjZXRJZChicmFuZEJvYXJkSWQpO1xuIH0sXG4gICAgICBhc3luYyBzdWdnZXN0SXNzdWVyKHBldG5hbWUsYm9hcmRJZCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uc3VnZ2VzdElzc3VlcihwZXRuYW1lLGJvYXJkSWQsZGFwcE9yaWdpbik7XG4gfSxcbiAgICAgIGFzeW5jIHN1Z2dlc3RJbnN0YWxsYXRpb24ocGV0bmFtZSxib2FyZElkKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5zdWdnZXN0SW5zdGFsbGF0aW9uKHBldG5hbWUsYm9hcmRJZCxkYXBwT3JpZ2luKTtcbiB9LFxuICAgICAgYXN5bmMgc3VnZ2VzdEluc3RhbmNlKHBldG5hbWUsYm9hcmRJZCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uc3VnZ2VzdEluc3RhbmNlKHBldG5hbWUsYm9hcmRJZCxkYXBwT3JpZ2luKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0VUlOb3RpZmllcihyYXdJZCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0VUlOb3RpZmllcihyYXdJZCxkYXBwT3JpZ2luKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0UHVibGljTm90aWZpZXJzKHJhd0lkKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRQdWJsaWNOb3RpZmllcnMocmF3SWQsZGFwcE9yaWdpbik7XG4gfSxcbiAgICAgIGFzeW5jIGdldFpvZSgpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldFpvZSgpO1xuIH0sXG4gICAgICBhc3luYyBnZXRCb2FyZCgpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldEJvYXJkKCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldEFnb3JpY05hbWVzKC4uLnBhdGgpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldEFnb3JpY05hbWVzKC4uLnBhdGgpO1xuIH0sXG4gICAgICBhc3luYyBnZXROYW1lc0J5QWRkcmVzcyguLi5wYXRoKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXROYW1lc0J5QWRkcmVzcyguLi5wYXRoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0QnJhbmRQZXRuYW1lcyhicmFuZHMpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldEJyYW5kUGV0bmFtZXMoYnJhbmRzKTtcbiB9fSk7XG5cbnJldHVybiBicmlkZ2U7XG4gfTtcblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJlYXBwcm92ZWRCcmlkZ2U9RmFyKCdwcmVhcHByb3ZlZEJyaWRnZScse1xuLypcblxuXG4gICAgICovXG5hZGRPZmZlcihvZmZlcixtZXRhKXtcbnJldHVybiB3YWxsZXRBZG1pbi5hZGRPZmZlcihvZmZlcixtZXRhKTtcbiB9LFxuZ2V0RGVwb3NpdEZhY2V0SWQoYnJhbmRCb2FyZElkKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXREZXBvc2l0RmFjZXRJZChicmFuZEJvYXJkSWQpO1xuIH0sXG4gICAgICBhc3luYyBnZXRPZmZlcnNOb3RpZmllcigpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldE9mZmVyc05vdGlmaWVyKCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldFB1cnNlc05vdGlmaWVyKCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0QXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyKCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldElzc3VlcnNOb3RpZmllcigpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldElzc3VlcnNOb3RpZmllcigpO1xuIH0sXG4gICAgICBhc3luYyBnZXRDYWNoZUNvb3JkaW5hdG9yKCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0Q2FjaGVDb29yZGluYXRvcigpO1xuIH0sXG5zdWdnZXN0SW5zdGFsbGF0aW9uKHBldG5hbWUsaW5zdGFsbGF0aW9uQm9hcmRJZCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uc3VnZ2VzdEluc3RhbGxhdGlvbihwZXRuYW1lLGluc3RhbGxhdGlvbkJvYXJkSWQpO1xuIH0sXG5zdWdnZXN0SW5zdGFuY2UocGV0bmFtZSxpbnN0YW5jZUJvYXJkSWQpe1xucmV0dXJuIHdhbGxldEFkbWluLnN1Z2dlc3RJbnN0YW5jZShwZXRuYW1lLGluc3RhbmNlQm9hcmRJZCk7XG4gfSxcbnN1Z2dlc3RJc3N1ZXIocGV0bmFtZSxpc3N1ZXJCb2FyZElkKXtcbnJldHVybiB3YWxsZXRBZG1pbi5zdWdnZXN0SXNzdWVyKHBldG5hbWUsaXNzdWVyQm9hcmRJZCk7XG4gfSxcbmdldFVJTm90aWZpZXIocmF3SWQpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldFVJTm90aWZpZXIocmF3SWQpO1xuIH0sXG5nZXRQdWJsaWNOb3RpZmllcnMocmF3SWQpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldFB1YmxpY05vdGlmaWVycyhyYXdJZCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldFpvZSgpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldFpvZSgpO1xuIH0sXG4gICAgICBhc3luYyBnZXRCb2FyZCgpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldEJvYXJkKCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldEFnb3JpY05hbWVzKC4uLnBhdGgpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldEFnb3JpY05hbWVzKC4uLnBhdGgpO1xuIH0sXG4gICAgICBhc3luYyBnZXROYW1lc0J5QWRkcmVzcyguLi5wYXRoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXROYW1lc0J5QWRkcmVzcyguLi5wYXRoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0QnJhbmRQZXRuYW1lcyhicmFuZHMpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldEJyYW5kUGV0bmFtZXMoYnJhbmRzKTtcbiB9fSk7XG5cbmhhcmRlbihwcmVhcHByb3ZlZEJyaWRnZSk7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFdhbGxldChiYW5rKXtcbmF3YWl0IHdhbGxldFJvb3QuaW1wb3J0QmFua0Fzc2V0cyhiYW5rKTtcblxuLypcblxuICAgICAqL1xuY29uc3Qgd2FsbGV0PUZhcignd2FsbGV0Jyx7XG5hZGRQYXltZW50OndhbGxldEFkbWluLmFkZFBheW1lbnQsXG4gICAgICBhc3luYyBnZXRTY29wZWRCcmlkZ2Uoc3VnZ2VzdGVkRGFwcFBldG5hbWUsZGFwcE9yaWdpbil7XG5jb25zdCBhcHByb3ZlPWFzeW5jKCk9PntcbmF3YWl0IHdhbGxldEFkbWluLndhaXRGb3JEYXBwQXBwcm92YWwoXG5zdWdnZXN0ZWREYXBwUGV0bmFtZSxcbmRhcHBPcmlnaW4pO1xuXG4gfTtcblxucmV0dXJuIG1ha2VCcmlkZ2UoYXBwcm92ZSxkYXBwT3JpZ2luKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0QnJpZGdlKCl7XG5yZXR1cm4gcHJlYXBwcm92ZWRCcmlkZ2U7XG4gfSxcbmdldERlcG9zaXRGYWNldElkOndhbGxldEFkbWluLmdldERlcG9zaXRGYWNldElkLFxuZ2V0QWRtaW5GYWNldCgpe1xucmV0dXJuIEZhcignYWRtaW5GYWNldCcse1xuLi4ud2FsbGV0QWRtaW4sXG4uLi5ub3RpZmllcnMsXG5nZXRTY29wZWRCcmlkZ2U6d2FsbGV0LmdldFNjb3BlZEJyaWRnZX0pO1xuXG4gfSxcbmdldElzc3Vlcjp3YWxsZXRBZG1pbi5nZXRJc3N1ZXIsXG5nZXRJc3N1ZXJzOndhbGxldEFkbWluLmdldElzc3VlcnMsXG5nZXRQdXJzZTp3YWxsZXRBZG1pbi5nZXRQdXJzZSxcbmdldFB1cnNlczp3YWxsZXRBZG1pbi5nZXRQdXJzZXMsXG5cbmdldE1hcnNoYWxsZXI6d2FsbGV0QWRtaW4uZ2V0TWFyc2hhbGxlcixcblxubG9va3VwOndhbGxldEFkbWluLmxvb2t1cH0pO1xuXG5yZXR1cm4gaGFyZGVuKHdhbGxldCk7XG4gfVxuXG5mdW5jdGlvbiBzZXRIVFRQT2JqZWN0KG8pe1xuaHR0cD1vO1xuIH1cblxuZnVuY3Rpb24gc3RhcnRTdWJzY3JpcHRpb25zKCl7XG4vL1xuLy9cbnB1cnNlc1N1YnNjcmliZShcbmhhcmRlbih7XG5ub3RpZnkobSl7XG5wdXJzZXNTdGF0ZT1KU09OLnBhcnNlKG0pO1xuIH19KSk7XG5cblxuXG4vL1xuLy9cbmluYm94U3Vic2NyaWJlKFxuaGFyZGVuKHtcbm5vdGlmeShtKXtcbmluYm94U3RhdGU9SlNPTi5wYXJzZShtKTtcbmluYm94VXBkYXRlci51cGRhdGVTdGF0ZShpbmJveFN0YXRlKTtcbmlmKGh0dHApe1xuLy9cbmZvcihjb25zdCBjaGFubmVsSGFuZGxlIG9mIG9mZmVyU3Vic2NyaXB0aW9ucy5rZXlzKCkpe1xucHVzaE9mZmVyU3Vic2NyaXB0aW9ucyhjaGFubmVsSGFuZGxlLGluYm94U3RhdGUpO1xuIH1cbiB9XG4gfX0pKTtcblxuXG4gfVxuXG5mdW5jdGlvbiBnZXRCcmlkZ2VVUkxIYW5kbGVyKCl7XG5yZXR1cm4gRmFyKCdicmlkZ2VVUkxIYW5kbGVyJyx7XG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgZ2V0Qm9vdHN0cmFwKG90aGVyU2lkZSxtZXRhLG9iail7XG5jb25zdHtkYXBwT3JpZ2luPW1ldGEub3JpZ2lufT1vYmo7XG5jb25zdCBzdWdnZXN0ZWREYXBwUGV0bmFtZT1TdHJpbmcoXG5tZXRhLnF1ZXJ5JiZtZXRhLnF1ZXJ5LnN1Z2dlc3RlZERhcHBQZXRuYW1lfHxcbm1ldGEuZGFwcE9yaWdpbnx8XG5kYXBwT3JpZ2luKTtcblxuXG5jb25zdCBhcHByb3ZlPWFzeW5jKCk9PntcbmxldCBub3RZZXRFbmFibGVkPWZhbHNlO1xuYXdhaXQgd2FsbGV0QWRtaW4ud2FpdEZvckRhcHBBcHByb3ZhbChcbnN1Z2dlc3RlZERhcHBQZXRuYW1lLFxuZGFwcE9yaWdpbixcbigpPT57XG5ub3RZZXRFbmFibGVkPXRydWU7XG5FKG90aGVyU2lkZSkuXG5uZWVkRGFwcEFwcHJvdmFsKGRhcHBPcmlnaW4sc3VnZ2VzdGVkRGFwcFBldG5hbWUpLlxuY2F0Y2goKF8pPT57IH0pO1xuIH0pO1xuXG5pZihub3RZZXRFbmFibGVkKXtcbmF3YWl0IEUob3RoZXJTaWRlKS5kYXBwQXBwcm92ZWQoZGFwcE9yaWdpbik7XG4gfVxuIH07XG5cbnJldHVybiBtYWtlQnJpZGdlKGFwcHJvdmUsZGFwcE9yaWdpbixtZXRhKTtcbiB9LFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAgICAqL1xuZ2V0Q29tbWFuZEhhbmRsZXIoKXtcbnJldHVybiBGYXIoJ2NvbW1hbmRIYW5kbGVyJyx7XG5vbk9wZW4oX29iaixtZXRhKXtcbmJyaWRnZUhhbmRsZXMuYWRkKG1ldGEuY2hhbm5lbEhhbmRsZSk7XG4gfSxcbm9uQ2xvc2UoX29iaixtZXRhKXtcbmJyaWRnZUhhbmRsZXMuZGVsZXRlKG1ldGEuY2hhbm5lbEhhbmRsZSk7XG5vZmZlclN1YnNjcmlwdGlvbnMuZGVsZXRlKG1ldGEuY2hhbm5lbEhhbmRsZSk7XG4gfSxcblxuICAgICAgYXN5bmMgb25NZXNzYWdlKG9iaixtZXRhKXtcbmNvbnN0e1xudHlwZSxcbmRhcHBPcmlnaW49bWV0YS5vcmlnaW4sXG5zdWdnZXN0ZWREYXBwUGV0bmFtZT1tZXRhLnF1ZXJ5JiZcbm1ldGEucXVlcnkuc3VnZ2VzdGVkRGFwcFBldG5hbWV8fFxub2JqLmRhcHBPcmlnaW58fFxubWV0YS5vcmlnaW59PVxub2JqO1xuXG4vL1xubGV0IG5lZWRBcHByb3ZhbD1mYWxzZTtcbmF3YWl0IHdhbGxldEFkbWluLndhaXRGb3JEYXBwQXBwcm92YWwoXG5zdWdnZXN0ZWREYXBwUGV0bmFtZSxcbmRhcHBPcmlnaW4sXG4oKT0+e1xubmVlZEFwcHJvdmFsPXRydWU7XG5odHRwU2VuZChcbntcbnR5cGU6J3dhbGxldE5lZWREYXBwQXBwcm92YWwnLFxuZGF0YTp7XG5kYXBwT3JpZ2luLFxuc3VnZ2VzdGVkRGFwcFBldG5hbWV9fSxcblxuXG5bbWV0YS5jaGFubmVsSGFuZGxlXSk7XG5cbiB9KTtcblxuaWYobmVlZEFwcHJvdmFsKXtcbmh0dHBTZW5kKFxue1xudHlwZTond2FsbGV0SGF2ZURhcHBBcHByb3ZhbCcsXG5kYXRhOntcbmRhcHBPcmlnaW59fSxcblxuXG5bbWV0YS5jaGFubmVsSGFuZGxlXSk7XG5cbiB9XG5cbnN3aXRjaCh0eXBlKXtcbmNhc2Und2FsbGV0R2V0UHVyc2VzJzp7XG5yZXR1cm57XG50eXBlOid3YWxsZXRVcGRhdGVQdXJzZXMnLFxuZGF0YTpiaWdpbnRTdHJpbmdpZnkocHVyc2VzU3RhdGUpfTtcblxuIH1cbmNhc2Und2FsbGV0QWRkT2ZmZXInOntcbmxldCBoYW5kbGVkPWZhbHNlO1xuY29uc3QgYWN0aW9ucz1GYXIoJ2FjdGlvbnMnLHtcbmhhbmRsZWQob2ZmZXIpe1xuaWYoaGFuZGxlZCl7XG5yZXR1cm47XG4gfVxuaGFuZGxlZD10cnVlO1xuaHR0cFNlbmQoXG57XG50eXBlOid3YWxsZXRPZmZlckhhbmRsZWQnLFxuZGF0YTpvZmZlci5pZH0sXG5cblttZXRhLmNoYW5uZWxIYW5kbGVdKTtcblxuIH19KTtcblxucmV0dXJue1xudHlwZTond2FsbGV0T2ZmZXJBZGRlZCcsXG5kYXRhOmF3YWl0IHdhbGxldEFkbWluLmFkZE9mZmVyKFxuey4uLm9iai5kYXRhLGFjdGlvbnN9LFxuey4uLm1ldGEsZGFwcE9yaWdpbn0pfTtcblxuXG4gfVxuXG5jYXNlJ3dhbGxldFN1YnNjcmliZU9mZmVycyc6e1xuY29uc3R7c3RhdHVzPW51bGx9PW9iajtcbmNvbnN0e2NoYW5uZWxIYW5kbGV9PW1ldGE7XG5cbmlmKCFjaGFubmVsSGFuZGxlKXtcbnJldHVybntcbnR5cGU6J3dhbGxldFN1YnNjcmliZWRPZmZlcnMnLFxuZGF0YTpmYWxzZX07XG5cbiB9XG5cbi8vXG5zdWJzY3JpYmVUb09mZmVycyhjaGFubmVsSGFuZGxlLHtcbm9yaWdpbjpkYXBwT3JpZ2luLFxuc3RhdHVzfSk7XG5cbnJldHVybntcbnR5cGU6J3dhbGxldFN1YnNjcmliZWRPZmZlcnMnLFxuZGF0YTp0cnVlfTtcblxuIH1cblxuY2FzZSd3YWxsZXRHZXRPZmZlcnMnOntcbmNvbnN0e3N0YXR1cz1udWxsfT1vYmo7XG5cbi8vXG5sZXQgcmVzdWx0PWF3YWl0IHdhbGxldEFkbWluLmdldE9mZmVycyh7XG5vcmlnaW46ZGFwcE9yaWdpbn0pO1xuXG5pZihzdGF0dXMhPT1udWxsKXtcbi8vXG5yZXN1bHQ9aGFyZGVuKFxucmVzdWx0LmZpbHRlcigob2ZmZXIpPT5vZmZlci5zdGF0dXM9PT1zdGF0dXMpKTtcblxuIH1cblxucmV0dXJue1xudHlwZTond2FsbGV0T2ZmZXJEZXNjcmlwdGlvbnMnLFxuZGF0YTpyZXN1bHR9O1xuXG4gfVxuXG5jYXNlJ3dhbGxldEdldERlcG9zaXRGYWNldElkJzp7XG5jb25zdHticmFuZEJvYXJkSWR9PW9iajtcbmNvbnN0IHJlc3VsdD1cbmF3YWl0IHdhbGxldEFkbWluLmdldERlcG9zaXRGYWNldElkKGJyYW5kQm9hcmRJZCk7XG5yZXR1cm57XG50eXBlOid3YWxsZXREZXBvc2l0RmFjZXRJZFJlc3BvbnNlJyxcbmRhdGE6cmVzdWx0fTtcblxuIH1cblxuY2FzZSd3YWxsZXRTdWdnZXN0SXNzdWVyJzp7XG5jb25zdHtwZXRuYW1lLGJvYXJkSWR9PW9iajtcbmNvbnN0IHJlc3VsdD1hd2FpdCB3YWxsZXRBZG1pbi5zdWdnZXN0SXNzdWVyKFxucGV0bmFtZSxcbmJvYXJkSWQsXG5kYXBwT3JpZ2luKTtcblxucmV0dXJue1xudHlwZTond2FsbGV0U3VnZ2VzdElzc3VlclJlc3BvbnNlJyxcbmRhdGE6cmVzdWx0fTtcblxuIH1cblxuY2FzZSd3YWxsZXRTdWdnZXN0SW5zdGFuY2UnOntcbmNvbnN0e3BldG5hbWUsYm9hcmRJZH09b2JqO1xuY29uc3QgcmVzdWx0PWF3YWl0IHdhbGxldEFkbWluLnN1Z2dlc3RJbnN0YW5jZShcbnBldG5hbWUsXG5ib2FyZElkLFxuZGFwcE9yaWdpbik7XG5cbnJldHVybntcbnR5cGU6J3dhbGxldFN1Z2dlc3RJbnN0YW5jZVJlc3BvbnNlJyxcbmRhdGE6cmVzdWx0fTtcblxuIH1cblxuY2FzZSd3YWxsZXRTdWdnZXN0SW5zdGFsbGF0aW9uJzp7XG5jb25zdHtwZXRuYW1lLGJvYXJkSWR9PW9iajtcbmNvbnN0IHJlc3VsdD1hd2FpdCB3YWxsZXRBZG1pbi5zdWdnZXN0SW5zdGFsbGF0aW9uKFxucGV0bmFtZSxcbmJvYXJkSWQsXG5kYXBwT3JpZ2luKTtcblxucmV0dXJue1xudHlwZTond2FsbGV0U3VnZ2VzdEluc3RhbGxhdGlvblJlc3BvbnNlJyxcbmRhdGE6cmVzdWx0fTtcblxuIH1cblxuZGVmYXVsdDpcbnJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO31cblxuIH19KTtcblxuIH19KTtcblxuIH1cblxuc3RhcnRTdWJzY3JpcHRpb25zKCk7XG5cbmZ1bmN0aW9uIGdldENvbW1hbmRIYW5kbGVyKC4uLnBhcmFtcyl7XG5jb25zb2xlLmRlYnVnKFxuJ2dldENvbW1hbmRIYW5kbGVyIGNhbGxlZCBpbiB3YWxsZXQsIGJ1dCBkb2VzIG5vdCBleGlzdCcsXG5wYXJhbXMpO1xuXG4gfVxuXG5yZXR1cm4gRmFyKCdyb290Jyx7XG5zdGFydHVwLFxuZ2V0V2FsbGV0LFxuc2V0SFRUUE9iamVjdCxcbmdldEJyaWRnZVVSTEhhbmRsZXIsXG5nZXRDb21tYW5kSGFuZGxlcn0pO1xuXG4gfVxuXG4vKlxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgICAgICAgICAgc3Bhd24odGVybXMsX2ludml0ZU1ha2VyKXtcbmNvbnN0IHdhbGxldFZhdD1idWlsZFJvb3RPYmplY3QoKTtcbnJldHVybiB3YWxsZXRWYXQuc3RhcnR1cCh0ZXJtcykudGhlbigoXyk9PndhbGxldFZhdCk7XG4gfSRo4oCNX29uY2UuZGVmYXVsdCggICAgIHNwYXduKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmF1bHQiOlsiZGVmYXVsdCJdLCJidWlsZFJvb3RPYmplY3QiOlsiYnVpbGRSb290T2JqZWN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMoOlixwGAAAcBgAADkAAABAYWdvcmljL3pvZS12MC4yNi4zLXUxNy4xL3NyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9pbnRlcm5hbCIsIkBhZ29yaWMvbm90aWZpZXIiLCJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCJdLCJleHBvcnRzIjpbImRlZmluZUVSZWNvcmRlcktpdCIsImRlZmluZVJlY29yZGVyS2l0IiwicHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2VycyIsInByZXBhcmVSZWNvcmRlciIsInByZXBhcmVSZWNvcmRlcktpdCIsInByZXBhcmVSZWNvcmRlcktpdE1ha2VycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxTdG9yYWdlTm9kZVNoYXBlLHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCxtYWtlRmFrZU1hcnNoYWxsZXIsbWFrZUZha2VTdG9yYWdlLG11c3RNYXRjaCxNLG1ha2VTY2FsYXJCaWdNYXBTdG9yZSxwcmVwYXJlRXhvQ2xhc3MsRTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wiU3RvcmFnZU5vZGVTaGFwZVwiLCBbJGjigI1fYSA9PiAoU3RvcmFnZU5vZGVTaGFwZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyXCIsIFtbXCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXRcIiwgWyRo4oCNX2EgPT4gKHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qc1wiLCBbW1wibWFrZUZha2VNYXJzaGFsbGVyXCIsIFskaOKAjV9hID0+IChtYWtlRmFrZU1hcnNoYWxsZXIgPSAkaOKAjV9hKV1dLFtcIm1ha2VGYWtlU3RvcmFnZVwiLCBbJGjigI1fYSA9PiAobWFrZUZha2VTdG9yYWdlID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAobXVzdE1hdGNoID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIk1cIiwgWyRo4oCNX2EgPT4gKE0gPSAkaOKAjV9hKV1dLFtcIm1ha2VTY2FsYXJCaWdNYXBTdG9yZVwiLCBbJGjigI1fYSA9PiAobWFrZVNjYWxhckJpZ01hcFN0b3JlID0gJGjigI1fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NcIiwgWyRo4oCNX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVSZWNvcmRlcj0oYmFnZ2FnZSxtYXJzaGFsbGVyKT0+e1xuY29uc3QgbWFrZVJlY29yZGVyPXByZXBhcmVFeG9DbGFzcyhcbmJhZ2dhZ2UsXG4nUmVjb3JkZXInLFxuTS5pbnRlcmZhY2UoJ1JlY29yZGVyJyx7XG5nZXRTdG9yYWdlTm9kZTpNLmNhbGwoKS5yZXR1cm5zKFN0b3JhZ2VOb2RlU2hhcGUpLFxuZ2V0U3RvcmFnZVBhdGg6TS5jYWxsKCkucmV0dXJucyhNLnByb21pc2UoKSksXG53cml0ZTpNLmNhbGwoTS5hbnkoKSkucmV0dXJucyhNLnByb21pc2UoKSksXG53cml0ZUZpbmFsOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKX0pLFxuXG4vKlxuXG5cblxuXG4gICAgICovXG4oXG5wdWJsaXNoZXIsXG5zdG9yYWdlTm9kZSxcbnZhbHVlU2hhcGU9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9NLmFueSgpKT0+XG57XG5yZXR1cm57XG5jbG9zZWQ6ZmFsc2UsXG5wdWJsaXNoZXIsXG5zdG9yYWdlTm9kZSxcbnN0b3JhZ2VQYXRoOi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3VuZGVmaW5lZCxcbnZhbHVlU2hhcGV9O1xuXG4gfSxcbntcbmdldFN0b3JhZ2VOb2RlKCl7XG5yZXR1cm4gdGhpcy5zdGF0ZS5zdG9yYWdlTm9kZTtcbiB9LFxuLypcblxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgZ2V0U3RvcmFnZVBhdGgoKXtcbmNvbnN0e3N0b3JhZ2VQYXRoOmhlbGRQYXRofT10aGlzLnN0YXRlO1xuLy9cbmF3YWl0IG51bGw7XG5pZihoZWxkUGF0aCE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gaGVsZFBhdGg7XG4gfVxuY29uc3QgcGF0aD1hd2FpdCBFKHRoaXMuc3RhdGUuc3RvcmFnZU5vZGUpLmdldFBhdGgoKTtcbnRoaXMuc3RhdGUuc3RvcmFnZVBhdGg9cGF0aDtcbnJldHVybiBwYXRoO1xuIH0sXG4vKlxuXG5cblxuXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIHdyaXRlKHZhbHVlKXtcbmNvbnN0e2Nsb3NlZCxwdWJsaXNoZXIsc3RvcmFnZU5vZGUsdmFsdWVTaGFwZX09dGhpcy5zdGF0ZTtcbiFjbG9zZWR8fEZhaWwgYGNhbm5vdCB3cml0ZSB0byBjbG9zZWQgcmVjb3JkZXJgO1xubXVzdE1hdGNoKHZhbHVlLHZhbHVlU2hhcGUpO1xuY29uc3QgZW5jb2RlZD1hd2FpdCBFKG1hcnNoYWxsZXIpLnRvQ2FwRGF0YSh2YWx1ZSk7XG5jb25zdCBzZXJpYWxpemVkPUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xuYXdhaXQgRShzdG9yYWdlTm9kZSkuc2V0VmFsdWUoc2VyaWFsaXplZCk7XG5cbi8vXG5yZXR1cm4gcHVibGlzaGVyLnB1Ymxpc2godmFsdWUpO1xuIH0sXG4vKlxuXG5cblxuXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIHdyaXRlRmluYWwodmFsdWUpe1xuY29uc3R7Y2xvc2VkLHB1Ymxpc2hlcixzdG9yYWdlTm9kZSx2YWx1ZVNoYXBlfT10aGlzLnN0YXRlO1xuIWNsb3NlZHx8RmFpbCBgY2Fubm90IHdyaXRlIHRvIGNsb3NlZCByZWNvcmRlcmA7XG5tdXN0TWF0Y2godmFsdWUsdmFsdWVTaGFwZSk7XG5jb25zdCBlbmNvZGVkPWF3YWl0IEUobWFyc2hhbGxlcikudG9DYXBEYXRhKHZhbHVlKTtcbmNvbnN0IHNlcmlhbGl6ZWQ9SlNPTi5zdHJpbmdpZnkoZW5jb2RlZCk7XG5hd2FpdCBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShzZXJpYWxpemVkKTtcblxuLy9cbnRoaXMuc3RhdGUuY2xvc2VkPXRydWU7XG5yZXR1cm4gcHVibGlzaGVyLmZpbmlzaCh2YWx1ZSk7XG4gfX0pO1xuXG5cblxucmV0dXJuIG1ha2VSZWNvcmRlcjtcbiB9OyRo4oCNX29uY2UucHJlcGFyZVJlY29yZGVyKHByZXBhcmVSZWNvcmRlcik7XG5oYXJkZW4ocHJlcGFyZVJlY29yZGVyKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmaW5lUmVjb3JkZXJLaXQ9KHttYWtlUmVjb3JkZXIsbWFrZUR1cmFibGVQdWJsaXNoS2l0fSk9Pntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlUmVjb3JkZXJLaXQ9KHN0b3JhZ2VOb2RlLHZhbHVlU2hhcGUpPT57XG5jb25zdHtzdWJzY3JpYmVyLHB1Ymxpc2hlcn09bWFrZUR1cmFibGVQdWJsaXNoS2l0KCk7XG5jb25zdCByZWNvcmRlcj1tYWtlUmVjb3JkZXIoXG5wdWJsaXNoZXIsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuc3RvcmFnZU5vZGUsXG5cbnZhbHVlU2hhcGUpO1xuXG5yZXR1cm4gaGFyZGVuKHtzdWJzY3JpYmVyLHJlY29yZGVyfSk7XG4gfTtcbnJldHVybiBtYWtlUmVjb3JkZXJLaXQ7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmRlZmluZVJlY29yZGVyS2l0KGRlZmluZVJlY29yZGVyS2l0KTtcbmNvbnN0ICAgICAgICBkZWZpbmVFUmVjb3JkZXJLaXQ9KHttYWtlUmVjb3JkZXIsbWFrZUR1cmFibGVQdWJsaXNoS2l0fSk9Pntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlRVJlY29yZGVyS2l0PShzdG9yYWdlTm9kZVAsdmFsdWVTaGFwZSk9PntcbmNvbnN0e3B1Ymxpc2hlcixzdWJzY3JpYmVyfT1tYWtlRHVyYWJsZVB1Ymxpc2hLaXQoKTtcbmNvbnN0IHJlY29yZGVyUD1FLndoZW4oc3RvcmFnZU5vZGVQLChzdG9yYWdlTm9kZSk9PlxubWFrZVJlY29yZGVyKFxucHVibGlzaGVyLFxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovc3RvcmFnZU5vZGUsXG52YWx1ZVNoYXBlKSk7XG5cblxucmV0dXJue3N1YnNjcmliZXIscmVjb3JkZXJQfTtcbiB9O1xucmV0dXJuIG1ha2VFUmVjb3JkZXJLaXQ7XG4gfTskaOKAjV9vbmNlLmRlZmluZUVSZWNvcmRlcktpdChkZWZpbmVFUmVjb3JkZXJLaXQpO1xuaGFyZGVuKGRlZmluZUVSZWNvcmRlcktpdCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZVJlY29yZGVyS2l0PShiYWdnYWdlLG1hcnNoYWxsZXIpPT57XG5jb25zdCBtYWtlRHVyYWJsZVB1Ymxpc2hLaXQ9cHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KFxuYmFnZ2FnZSxcbidEdXJhYmxlIFB1Ymxpc2ggS2l0Jyk7XG5cbmNvbnN0IG1ha2VSZWNvcmRlcj1wcmVwYXJlUmVjb3JkZXIoYmFnZ2FnZSxtYXJzaGFsbGVyKTtcbnJldHVybiBkZWZpbmVSZWNvcmRlcktpdCh7bWFrZUR1cmFibGVQdWJsaXNoS2l0LG1ha2VSZWNvcmRlcn0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLnByZXBhcmVSZWNvcmRlcktpdChwcmVwYXJlUmVjb3JkZXJLaXQpO1xuY29uc3QgICAgICAgIHByZXBhcmVSZWNvcmRlcktpdE1ha2Vycz0oYmFnZ2FnZSxtYXJzaGFsbGVyKT0+e1xuY29uc3QgbWFrZUR1cmFibGVQdWJsaXNoS2l0PXByZXBhcmVEdXJhYmxlUHVibGlzaEtpdChcbmJhZ2dhZ2UsXG4nRHVyYWJsZSBQdWJsaXNoIEtpdCcpO1xuXG5jb25zdCBtYWtlUmVjb3JkZXI9cHJlcGFyZVJlY29yZGVyKGJhZ2dhZ2UsbWFyc2hhbGxlcik7XG5cbmNvbnN0IG1ha2VSZWNvcmRlcktpdD1kZWZpbmVSZWNvcmRlcktpdCh7XG5tYWtlUmVjb3JkZXIsXG5tYWtlRHVyYWJsZVB1Ymxpc2hLaXR9KTtcblxuY29uc3QgbWFrZUVSZWNvcmRlcktpdD1kZWZpbmVFUmVjb3JkZXJLaXQoe1xubWFrZVJlY29yZGVyLFxubWFrZUR1cmFibGVQdWJsaXNoS2l0fSk7XG5cblxucmV0dXJue1xubWFrZUR1cmFibGVQdWJsaXNoS2l0LFxubWFrZVJlY29yZGVyLFxubWFrZVJlY29yZGVyS2l0LFxubWFrZUVSZWNvcmRlcktpdH07XG5cbiB9O1xuXG4vKlxuXG4gKi8kaOKAjV9vbmNlLnByZXBhcmVSZWNvcmRlcktpdE1ha2VycyhwcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnMpO1xuY29uc3QgICAgICAgIHByZXBhcmVNb2NrUmVjb3JkZXJLaXRNYWtlcnM9KCk9PntcbmNvbnN0IGJhZ2dhZ2U9bWFrZVNjYWxhckJpZ01hcFN0b3JlKCdtb2NrIHJlY29yZGVyIGJhZ2dhZ2UnKTtcbmNvbnN0IG1hcnNoYWxsZXI9bWFrZUZha2VNYXJzaGFsbGVyKCk7XG5yZXR1cm57XG4uLi5wcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnMoYmFnZ2FnZSxtYXJzaGFsbGVyKSxcbnN0b3JhZ2VOb2RlOm1ha2VGYWtlU3RvcmFnZSgnbW9jayByZWNvcmRlciBzdG9yYWdlJyl9O1xuXG4gfTskaOKAjV9vbmNlLnByZXBhcmVNb2NrUmVjb3JkZXJLaXRNYWtlcnMocHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2Vycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwcmVwYXJlUmVjb3JkZXIiOlsicHJlcGFyZVJlY29yZGVyIl0sImRlZmluZVJlY29yZGVyS2l0IjpbImRlZmluZVJlY29yZGVyS2l0Il0sImRlZmluZUVSZWNvcmRlcktpdCI6WyJkZWZpbmVFUmVjb3JkZXJLaXQiXSwicHJlcGFyZVJlY29yZGVyS2l0IjpbInByZXBhcmVSZWNvcmRlcktpdCJdLCJwcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnMiOlsicHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzIl0sInByZXBhcmVNb2NrUmVjb3JkZXJLaXRNYWtlcnMiOlsicHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2VycyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADps8t8jQEAAI0BAAAkAAAAQGFnb3JpYy96b25lLXYwLjMuMC11MTcuMS9kdXJhYmxlLmpzeyJpbXBvcnRzIjpbIi4vc3JjL2R1cmFibGUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9kdXJhYmxlLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vc3JjL2R1cmFibGUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAarAlLjIRAAAyEQAAKAAAAEBhZ29yaWMvem9uZS12MC4zLjAtdTE3LjEvc3JjL2R1cmFibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL2Jhc2Utem9uZSJdLCJleHBvcnRzIjpbIm1ha2VEdXJhYmxlWm9uZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxGYXIsaXNQYXNzYWJsZSxjYW5CZUR1cmFibGUsbWFrZVNjYWxhck1hcFN0b3JlLHByZXBhcmVFeG8scHJlcGFyZUV4b0NsYXNzLHByZXBhcmVFeG9DbGFzc0tpdCxwcm92aWRlRHVyYWJsZU1hcFN0b3JlLHByb3ZpZGVEdXJhYmxlU2V0U3RvcmUscHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUscHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUsd2F0Y2hQcm9taXNlLGtleXMsbWFrZU9uY2VLaXQ7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXSxbXCJpc1Bhc3NhYmxlXCIsIFskaOKAjV9hID0+IChpc1Bhc3NhYmxlID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcImNhbkJlRHVyYWJsZVwiLCBbJGjigI1fYSA9PiAoY2FuQmVEdXJhYmxlID0gJGjigI1fYSldXSxbXCJtYWtlU2NhbGFyTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRo4oCNX2EpXV0sW1wicHJlcGFyZUV4b1wiLCBbJGjigI1fYSA9PiAocHJlcGFyZUV4byA9ICRo4oCNX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzXCIsIFskaOKAjV9hID0+IChwcmVwYXJlRXhvQ2xhc3MgPSAkaOKAjV9hKV1dLFtcInByZXBhcmVFeG9DbGFzc0tpdFwiLCBbJGjigI1fYSA9PiAocHJlcGFyZUV4b0NsYXNzS2l0ID0gJGjigI1fYSldXSxbXCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlXCIsIFskaOKAjV9hID0+IChwcm92aWRlRHVyYWJsZU1hcFN0b3JlID0gJGjigI1fYSldXSxbXCJwcm92aWRlRHVyYWJsZVNldFN0b3JlXCIsIFskaOKAjV9hID0+IChwcm92aWRlRHVyYWJsZVNldFN0b3JlID0gJGjigI1fYSldXSxbXCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZVwiLCBbJGjigI1fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUgPSAkaOKAjV9hKV1dLFtcInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlXCIsIFskaOKAjV9hID0+IChwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSA9ICRo4oCNX2EpXV0sW1wid2F0Y2hQcm9taXNlXCIsIFskaOKAjV9hID0+ICh3YXRjaFByb21pc2UgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9iYXNlLXpvbmVcIiwgW1tcImFnb3JpY1ZhdERhdGFLZXlzXCIsIFskaOKAjV9hID0+IChrZXlzID0gJGjigI1fYSldXSxbXCJtYWtlT25jZUtpdFwiLCBbJGjigI1fYSA9PiAobWFrZU9uY2VLaXQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzU3RvcmFibGU9KHNwZWNpbWVuKT0+aXNQYXNzYWJsZShzcGVjaW1lbikmJmNhbkJlRHVyYWJsZShzcGVjaW1lbik7XG5oYXJkZW4oaXNTdG9yYWJsZSk7XG5cbi8qXG5cbiAqL1xuY29uc3QgYXR0YWNoRHVyYWJsZVN0b3Jlcz0oZ2V0QmFnZ2FnZSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hcFN0b3JlPShsYWJlbCxvcHRpb25zKT0+e1xuY29uc3QgYmFnZ2FnZT1nZXRCYWdnYWdlKCk7XG5jb25zdCByZXQ9cHJvdmlkZUR1cmFibGVNYXBTdG9yZShiYWdnYWdlLGxhYmVsLG9wdGlvbnMpO1xucmV0dXJuIHJldDtcbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2V0U3RvcmU9KGxhYmVsLG9wdGlvbnMpPT5cbnByb3ZpZGVEdXJhYmxlU2V0U3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdlYWtTZXRTdG9yZT0obGFiZWwsb3B0aW9ucyk9PlxucHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdlYWtNYXBTdG9yZT0obGFiZWwsb3B0aW9ucyk9PlxucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJldHVybiBGYXIoJ2R1cmFibGVTdG9yZXMnLHtcbi8vXG5kZXRhY2hlZDooKT0+ZGV0YWNoZWREdXJhYmxlU3RvcmVzLFxuaXNTdG9yYWJsZSxcbm1hcFN0b3JlLFxuc2V0U3RvcmUsXG53ZWFrTWFwU3RvcmUsXG53ZWFrU2V0U3RvcmV9KTtcblxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGV0YWNoZWREdXJhYmxlU3RvcmVzPWF0dGFjaER1cmFibGVTdG9yZXMoKCk9PlxubWFrZVNjYWxhck1hcFN0b3JlKCdkZXRhY2hlZCcpKTtcblxuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEdXJhYmxlWm9uZT0oYmFnZ2FnZSxiYXNlTGFiZWw9J2R1cmFibGVab25lJyk9PntcbmJhZ2dhZ2V8fEZhaWwgYGJhZ2dhZ2UgcmVxdWlyZWRgO1xuXG5jb25zdCBhdHRhY2hlZFN0b3Jlcz1hdHRhY2hEdXJhYmxlU3RvcmVzKCgpPT5iYWdnYWdlKTtcblxuY29uc3R7bWFrZU9uY2Usd3JhcFByb3ZpZGVyfT1tYWtlT25jZUtpdChcbmJhc2VMYWJlbCxcbmF0dGFjaGVkU3RvcmVzLFxuYmFnZ2FnZSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZXhvQ2xhc3M9KC4uLmFyZ3MpPT5wcmVwYXJlRXhvQ2xhc3MoYmFnZ2FnZSwuLi5hcmdzKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG4vL1xuY29uc3QgZXhvQ2xhc3NLaXQ9KC4uLmFyZ3MpPT5wcmVwYXJlRXhvQ2xhc3NLaXQoYmFnZ2FnZSwuLi5hcmdzKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBleG89KC4uLmFyZ3MpPT5wcmVwYXJlRXhvKGJhZ2dhZ2UsLi4uYXJncyk7XG5cbmNvbnN0IHN1YlpvbmVTdG9yZT13cmFwUHJvdmlkZXIoYXR0YWNoZWRTdG9yZXMubWFwU3RvcmUsa2V5cy56b25lKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdWJab25lPShsYWJlbCxvcHRpb25zPXt9KT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN1YkJhZ2dhZ2U9c3ViWm9uZVN0b3JlKGxhYmVsLG9wdGlvbnMpO1xucmV0dXJuIG1ha2VEdXJhYmxlWm9uZShzdWJCYWdnYWdlLCBgJHtiYXNlTGFiZWx9LiR7bGFiZWx9YCk7XG4gfTtcblxucmV0dXJuIEZhcignZHVyYWJsZVpvbmUnLHtcbmV4bzp3cmFwUHJvdmlkZXIoZXhvLGtleXMuZXhvKSxcbmV4b0NsYXNzOndyYXBQcm92aWRlcihleG9DbGFzcyxrZXlzLmV4b0NsYXNzKSxcbmV4b0NsYXNzS2l0OndyYXBQcm92aWRlcihleG9DbGFzc0tpdCxrZXlzLmV4b0NsYXNzS2l0KSxcbnN1YlpvbmUsXG5cbm1ha2VPbmNlLFxud2F0Y2hQcm9taXNlLFxuZGV0YWNoZWQ6YXR0YWNoZWRTdG9yZXMuZGV0YWNoZWQsXG5pc1N0b3JhYmxlOmF0dGFjaGVkU3RvcmVzLmlzU3RvcmFibGUsXG5cbm1hcFN0b3JlOndyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy5tYXBTdG9yZSxrZXlzLnN0b3JlKSxcbnNldFN0b3JlOndyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy5zZXRTdG9yZSxrZXlzLnN0b3JlKSxcbndlYWtNYXBTdG9yZTp3cmFwUHJvdmlkZXIoYXR0YWNoZWRTdG9yZXMud2Vha01hcFN0b3JlLGtleXMuc3RvcmUpLFxud2Vha1NldFN0b3JlOndyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy53ZWFrU2V0U3RvcmUsa2V5cy5zdG9yZSl9KTtcblxuIH07JGjigI1fb25jZS5tYWtlRHVyYWJsZVpvbmUobWFrZUR1cmFibGVab25lKTtcbmhhcmRlbihtYWtlRHVyYWJsZVpvbmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUR1cmFibGVab25lIjpbIm1ha2VEdXJhYmxlWm9uZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA0kOSm0wQAANMEAAArAAAAQGVuZG8vY29tbW9uLXYxLjIuNS9hcHBseS1sYWJlbGluZy1lcnJvci5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcHJvbWlzZS1raXQiLCIuL3Rocm93LWxhYmVsZWQuanMiXSwiZXhwb3J0cyI6WyJhcHBseUxhYmVsaW5nRXJyb3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsaXNQcm9taXNlLHRocm93TGFiZWxlZDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRo4oCNX2EgPT4gKGlzUHJvbWlzZSA9ICRo4oCNX2EpXV1dXSxbXCIuL3Rocm93LWxhYmVsZWQuanNcIiwgW1tcInRocm93TGFiZWxlZFwiLCBbJGjigI1fYSA9PiAodGhyb3dMYWJlbGVkID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhcHBseUxhYmVsaW5nRXJyb3I9KGZ1bmMsYXJncyxsYWJlbD11bmRlZmluZWQpPT57XG5pZihsYWJlbD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gZnVuYyguLi5hcmdzKTtcbiB9XG5sZXQgcmVzdWx0O1xudHJ5e1xucmVzdWx0PWZ1bmMoLi4uYXJncyk7XG4gfWNhdGNoKGVycil7XG50aHJvd0xhYmVsZWQoZXJyLGxhYmVsKTtcbiB9XG5pZihpc1Byb21pc2UocmVzdWx0KSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gRS53aGVuKHJlc3VsdCx1bmRlZmluZWQsKHJlYXNvbik9PnRocm93TGFiZWxlZChyZWFzb24sbGFiZWwpKTtcbiB9ZWxzZXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH07JGjigI1fb25jZS5hcHBseUxhYmVsaW5nRXJyb3IoYXBwbHlMYWJlbGluZ0Vycm9yKTtcbmhhcmRlbihhcHBseUxhYmVsaW5nRXJyb3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXBwbHlMYWJlbGluZ0Vycm9yIjpbImFwcGx5TGFiZWxpbmdFcnJvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC3mQvAZgQAAGYEAAAqAAAAQGVuZG8vY29tbW9uLXYxLjIuNS9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImZyb21VbmlxdWVFbnRyaWVzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWw7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbmNvbnN0e2Zyb21FbnRyaWVzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmcm9tVW5pcXVlRW50cmllcz0oYWxsRW50cmllcyk9PntcbmNvbnN0IGVudHJpZXNBcnJheT1bLi4uYWxsRW50cmllc107XG5jb25zdCByZXN1bHQ9aGFyZGVuKGZyb21FbnRyaWVzKGVudHJpZXNBcnJheSkpO1xuaWYob3duS2V5cyhyZXN1bHQpLmxlbmd0aD09PWVudHJpZXNBcnJheS5sZW5ndGgpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7XG5mb3IoY29uc3RbbmFtZSxfXW9mIGVudHJpZXNBcnJheSl7XG5pZihuYW1lcy5oYXMobmFtZSkpe1xuRmFpbCBgY29sbGlzaW9uIG9uIHByb3BlcnR5IG5hbWUgJHtxKG5hbWUpfTogJHtlbnRyaWVzQXJyYXl9YDtcbiB9XG5uYW1lcy5hZGQobmFtZSk7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IGZhaWxlZCB0byBjcmVhdGUgb2JqZWN0IGZyb20gdW5pcXVlIGVudHJpZXNgO1xuIH07JGjigI1fb25jZS5mcm9tVW5pcXVlRW50cmllcyhmcm9tVW5pcXVlRW50cmllcyk7XG5oYXJkZW4oZnJvbVVuaXF1ZUVudHJpZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZnJvbVVuaXF1ZUVudHJpZXMiOlsiZnJvbVVuaXF1ZUVudHJpZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAACm/VKz0CAAA9AgAAJAAAAEBlbmRvL2NvbW1vbi12MS4yLjUvaWRlbnQtY2hlY2tlci5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiaWRlbnRDaGVja2VyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuLy9cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpZGVudENoZWNrZXI9KGNvbmQsX2RldGFpbHMpPT5jb25kOyRo4oCNX29uY2UuaWRlbnRDaGVja2VyKGlkZW50Q2hlY2tlcik7XG5oYXJkZW4oaWRlbnRDaGVja2VyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlkZW50Q2hlY2tlciI6WyJpZGVudENoZWNrZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAu0PmF34CAAB+AgAAJgAAAEBlbmRvL2NvbW1vbi12MS4yLjUvbGlzdC1kaWZmZXJlbmNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJsaXN0RGlmZmVyZW5jZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbGlzdERpZmZlcmVuY2U9KGxlZnRMaXN0LHJpZ2h0TGlzdCk9PntcbmNvbnN0IHJpZ2h0U2V0PW5ldyBTZXQocmlnaHRMaXN0KTtcbnJldHVybiBsZWZ0TGlzdC5maWx0ZXIoKGVsZW1lbnQpPT4hcmlnaHRTZXQuaGFzKGVsZW1lbnQpKTtcbiB9OyRo4oCNX29uY2UubGlzdERpZmZlcmVuY2UobGlzdERpZmZlcmVuY2UpO1xuaGFyZGVuKGxpc3REaWZmZXJlbmNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Imxpc3REaWZmZXJlbmNlIjpbImxpc3REaWZmZXJlbmNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPAoIjtlAwAAZQMAACoAAABAZW5kby9jb21tb24tdjEuMi41L21ha2UtYXJyYXktaXRlcmF0b3IuanN7ImltcG9ydHMiOlsiLi9tYWtlLWl0ZXJhdG9yLmpzIl0sImV4cG9ydHMiOlsibWFrZUFycmF5SXRlcmF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VJdGVyYXRvcjskaOKAjV9pbXBvcnRzKFtbXCIuL21ha2UtaXRlcmF0b3IuanNcIiwgW1tcIm1ha2VJdGVyYXRvclwiLCBbJGjigI1fYSA9PiAobWFrZUl0ZXJhdG9yID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUFycmF5SXRlcmF0b3I9KGFycik9PntcbmNvbnN0e2xlbmd0aH09YXJyO1xubGV0IGk9MDtcbnJldHVybiBtYWtlSXRlcmF0b3IoKCk9Pntcbi8qICAgICAgICAgICAgKi9cbmxldCB2YWx1ZTtcbmlmKGk8bGVuZ3RoKXtcbnZhbHVlPWFycltpXTtcbmkrPTE7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfVxuLy9cbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZX0pO1xuIH0pO1xuIH07JGjigI1fb25jZS5tYWtlQXJyYXlJdGVyYXRvcihtYWtlQXJyYXlJdGVyYXRvcik7XG5oYXJkZW4obWFrZUFycmF5SXRlcmF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUFycmF5SXRlcmF0b3IiOlsibWFrZUFycmF5SXRlcmF0b3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA43rZSj8CAAA/AgAAJAAAAEBlbmRvL2NvbW1vbi12MS4yLjUvbWFrZS1pdGVyYXRvci5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZUl0ZXJhdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUl0ZXJhdG9yPShuZXh0KT0+e1xuY29uc3QgaXRlcj1oYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9Pml0ZXIsXG5uZXh0fSk7XG5cbnJldHVybiBpdGVyO1xuIH07JGjigI1fb25jZS5tYWtlSXRlcmF0b3IobWFrZUl0ZXJhdG9yKTtcbmhhcmRlbihtYWtlSXRlcmF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUl0ZXJhdG9yIjpbIm1ha2VJdGVyYXRvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACpYlCKCAMAAAgDAAAhAAAAQGVuZG8vY29tbW9uLXYxLjIuNS9vYmplY3QtbWFwLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJvYmplY3RNYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgY29uc3R7ZW50cmllcyxmcm9tRW50cmllc309T2JqZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBvYmplY3RNYXA9KG9yaWdpbmFsLG1hcEZuKT0+e1xuY29uc3QgZW50cz1lbnRyaWVzKG9yaWdpbmFsKTtcbmNvbnN0IG1hcEVudHM9ZW50cy5tYXAoXG4oW2ssdl0pPT4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9bayxtYXBGbih2LGspXSk7XG5cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovaGFyZGVuKGZyb21FbnRyaWVzKG1hcEVudHMpKSk7XG4gfTskaOKAjV9vbmNlLm9iamVjdE1hcChvYmplY3RNYXApO1xuaGFyZGVuKG9iamVjdE1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJvYmplY3RNYXAiOlsib2JqZWN0TWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOFzK0znAwAA5wMAACYAAABAZW5kby9jb21tb24tdjEuMi41L29iamVjdC1tZXRhLW1hcC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsib2JqZWN0TWV0YU1hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICBjb25zdHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLGNyZWF0ZSxmcm9tRW50cmllc309T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBvYmplY3RNZXRhTWFwPShcbm9yaWdpbmFsLFxubWV0YU1hcEZuLFxucHJvdG89T2JqZWN0LnByb3RvdHlwZSk9Plxue1xuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvcmlnaW5hbCk7XG5jb25zdCBrZXlzPW93bktleXMob3JpZ2luYWwpO1xuXG5jb25zdCBkZXNjRW50cmllcz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5rZXlzLlxubWFwKChrZXkpPT5ba2V5LG1ldGFNYXBGbihkZXNjc1trZXldLGtleSldKS5cbmZpbHRlcigoW19rZXksb3B0RGVzY10pPT5vcHREZXNjIT09dW5kZWZpbmVkKTtcblxucmV0dXJuIGhhcmRlbihjcmVhdGUocHJvdG8sZnJvbUVudHJpZXMoZGVzY0VudHJpZXMpKSk7XG4gfTskaOKAjV9vbmNlLm9iamVjdE1ldGFNYXAob2JqZWN0TWV0YU1hcCk7XG5oYXJkZW4ob2JqZWN0TWV0YU1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJvYmplY3RNZXRhTWFwIjpbIm9iamVjdE1ldGFNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA7T4jse0DAADtAwAAJAAAAEBlbmRvL2NvbW1vbi12MS4yLjUvdGhyb3ctbGFiZWxlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJ0aHJvd0xhYmVsZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsbWFrZUVycm9yLGFubm90YXRlRXJyb3I7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaOKAjV9hID0+IChYID0gJGjigI1fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRo4oCNX2EgPT4gKG1ha2VFcnJvciA9ICRo4oCNX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjigI1fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdGhyb3dMYWJlbGVkPShcbmlubmVyRXJyLFxubGFiZWwsXG5lcnJDb25zdHJ1Y3Rvcj11bmRlZmluZWQsXG5vcHRpb25zPXVuZGVmaW5lZCk9Plxue1xuaWYodHlwZW9mIGxhYmVsPT09J251bWJlcicpe1xubGFiZWw9IGBbJHtsYWJlbH1dYDtcbiB9XG5jb25zdCBvdXRlckVycj1tYWtlRXJyb3IoXG4gYCR7bGFiZWx9OiAke2lubmVyRXJyLm1lc3NhZ2V9YCxcbmVyckNvbnN0cnVjdG9yLFxub3B0aW9ucyk7XG5cbmFubm90YXRlRXJyb3Iob3V0ZXJFcnIsWCBgQ2F1c2VkIGJ5ICR7aW5uZXJFcnJ9YCk7XG50aHJvdyBvdXRlckVycjtcbiB9OyRo4oCNX29uY2UudGhyb3dMYWJlbGVkKHRocm93TGFiZWxlZCk7XG5oYXJkZW4odGhyb3dMYWJlbGVkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InRocm93TGFiZWxlZCI6WyJ0aHJvd0xhYmVsZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAVJz8PJkBAACZAQAAIQAAAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNi9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9lbnYtb3B0aW9ucy5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vc3JjL2Vudi1vcHRpb25zLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vc3JjL2Vudi1vcHRpb25zLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAE3j+/z1DQAA9Q0AACsAAABAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYvc3JjL2Vudi1vcHRpb25zLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzIiwiZ2V0RW52aXJvbm1lbnRPcHRpb24iLCJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0IiwibWFrZUVudmlyb25tZW50Q2FwdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuXG5jb25zdHtmcmVlemV9PU9iamVjdDtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuXG4vL1xuLy9cbmNvbnN0IHVuY3VycnlUaGlzPVxuKGZuKT0+XG4ocmVjZWl2ZXIsLi4uYXJncyk9PlxuYXBwbHkoZm4scmVjZWl2ZXIsYXJncyk7XG5jb25zdCBhcnJheVB1c2g9dW5jdXJyeVRoaXMoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuY29uc3QgYXJyYXlJbmNsdWRlcz11bmN1cnJ5VGhpcyhBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMpO1xuY29uc3Qgc3RyaW5nU3BsaXQ9dW5jdXJyeVRoaXMoU3RyaW5nLnByb3RvdHlwZS5zcGxpdCk7XG5cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbmNvbnN0IEZhaWw9KGxpdGVyYWxzLC4uLmFyZ3MpPT57XG5sZXQgbXNnPWxpdGVyYWxzWzBdO1xuZm9yKGxldCBpPTA7aTxhcmdzLmxlbmd0aDtpKz0xKXtcbm1zZz0gYCR7bXNnfSR7YXJnc1tpXX0ke2xpdGVyYWxzW2krMV19YDtcbiB9XG50aHJvdyBFcnJvcihtc2cpO1xuIH07XG5cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW52aXJvbm1lbnRDYXB0b3I9KGFHbG9iYWwsZHJvcE5hbWVzPWZhbHNlKT0+e1xuY29uc3QgY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzPVtdO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBnZXRFbnZpcm9ubWVudE9wdGlvbj0oXG5vcHRpb25OYW1lLFxuZGVmYXVsdFNldHRpbmcsXG5vcHRPdGhlclZhbHVlcz11bmRlZmluZWQpPT5cbntcbnR5cGVvZiBvcHRpb25OYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIG5hbWUgJHtxKG9wdGlvbk5hbWUpfSBtdXN0IGJlIGEgc3RyaW5nLmA7XG50eXBlb2YgZGVmYXVsdFNldHRpbmc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gZGVmYXVsdCBzZXR0aW5nICR7cShcbmRlZmF1bHRTZXR0aW5nKVxuIH0gbXVzdCBiZSBhIHN0cmluZy5gO1xuXG4vKiAgICAgICAgICAgICAgICAgKi9cbmxldCBzZXR0aW5nPWRlZmF1bHRTZXR0aW5nO1xuY29uc3QgZ2xvYmFsUHJvY2Vzcz1hR2xvYmFsLnByb2Nlc3N8fHVuZGVmaW5lZDtcbmNvbnN0IGdsb2JhbEVudj1cbnR5cGVvZiBnbG9iYWxQcm9jZXNzPT09J29iamVjdCcmJmdsb2JhbFByb2Nlc3MuZW52fHx1bmRlZmluZWQ7XG5pZih0eXBlb2YgZ2xvYmFsRW52PT09J29iamVjdCcpe1xuaWYob3B0aW9uTmFtZSBpbiBnbG9iYWxFbnYpe1xuaWYoIWRyb3BOYW1lcyl7XG5hcnJheVB1c2goY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzLG9wdGlvbk5hbWUpO1xuIH1cbmNvbnN0IG9wdGlvblZhbHVlPWdsb2JhbEVudltvcHRpb25OYW1lXTtcbi8vXG50eXBlb2Ygb3B0aW9uVmFsdWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gbmFtZWQgJHtxKFxub3B0aW9uTmFtZSlcbiB9LCBpZiBwcmVzZW50LCBtdXN0IGhhdmUgYSBjb3JyZXNwb25kaW5nIHN0cmluZyB2YWx1ZSwgZ290ICR7cShcbm9wdGlvblZhbHVlKVxuIH1gO1xuc2V0dGluZz1vcHRpb25WYWx1ZTtcbiB9XG4gfVxub3B0T3RoZXJWYWx1ZXM9PT11bmRlZmluZWR8fFxuc2V0dGluZz09PWRlZmF1bHRTZXR0aW5nfHxcbmFycmF5SW5jbHVkZXMob3B0T3RoZXJWYWx1ZXMsc2V0dGluZyl8fFxuRmFpbCBgVW5yZWNvZ25pemVkICR7cShvcHRpb25OYW1lKX0gdmFsdWUgJHtxKFxuc2V0dGluZylcbiB9LiBFeHBlY3RlZCBvbmUgb2YgJHtxKFtkZWZhdWx0U2V0dGluZywuLi5vcHRPdGhlclZhbHVlc10pfWA7XG5yZXR1cm4gc2V0dGluZztcbiB9O1xuZnJlZXplKGdldEVudmlyb25tZW50T3B0aW9uKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdD0ob3B0aW9uTmFtZSk9PntcbmNvbnN0IG9wdGlvbj1nZXRFbnZpcm9ubWVudE9wdGlvbihvcHRpb25OYW1lLCcnKTtcbnJldHVybiBmcmVlemUob3B0aW9uPT09Jyc/W106c3RyaW5nU3BsaXQob3B0aW9uLCcsJykpO1xuIH07XG5mcmVlemUoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCk7XG5cbmNvbnN0IGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXM9KG9wdGlvbk5hbWUsZWxlbWVudCk9PlxuYXJyYXlJbmNsdWRlcyhnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KG9wdGlvbk5hbWUpLGVsZW1lbnQpO1xuXG5jb25zdCBnZXRDYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXM9KCk9PntcbnJldHVybiBmcmVlemUoWy4uLmNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lc10pO1xuIH07XG5mcmVlemUoZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzKTtcblxucmV0dXJuIGZyZWV6ZSh7XG5nZXRFbnZpcm9ubWVudE9wdGlvbixcbmdldEVudmlyb25tZW50T3B0aW9uc0xpc3QsXG5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzLFxuZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzfSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZUVudmlyb25tZW50Q2FwdG9yKG1ha2VFbnZpcm9ubWVudENhcHRvcik7XG5mcmVlemUobWFrZUVudmlyb25tZW50Q2FwdG9yKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgIHtcbmdldEVudmlyb25tZW50T3B0aW9uLFxuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCxcbmVudmlyb25tZW50T3B0aW9uc0xpc3RIYXN9PVxubWFrZUVudmlyb25tZW50Q2FwdG9yKGdsb2JhbFRoaXMsdHJ1ZSk7JGjigI1fb25jZS5nZXRFbnZpcm9ubWVudE9wdGlvbihnZXRFbnZpcm9ubWVudE9wdGlvbik7JGjigI1fb25jZS5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KGdldEVudmlyb25tZW50T3B0aW9uc0xpc3QpOyRo4oCNX29uY2UuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyhlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VFbnZpcm9ubWVudENhcHRvciI6WyJtYWtlRW52aXJvbm1lbnRDYXB0b3IiXSwiZ2V0RW52aXJvbm1lbnRPcHRpb24iOlsiZ2V0RW52aXJvbm1lbnRPcHRpb24iXSwiZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCI6WyJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0Il0sImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiOlsiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADX1j4G8QcAAPEHAAAcAAAAQGVuZG8vZXJyb3JzLXYxLjIuNS9pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiRmFpbCIsIlgiLCJhbm5vdGF0ZUVycm9yIiwiYXNzZXJ0IiwiYiIsImJhcmUiLCJtYWtlRXJyb3IiLCJub3RlIiwicSIsInF1b3RlIiwicmVkYWN0ZWQiLCJ0aHJvd1JlZGFjdGVkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG5cbmNvbnN0IGdsb2JhbEFzc2VydD1nbG9iYWxUaGlzLmFzc2VydDtcblxuaWYoZ2xvYmFsQXNzZXJ0PT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQsIGltcG9ydCAnc2VzJyBiZWZvcmUgJ0BlbmRvL2Vycm9ycydgKTtcblxuIH1cblxuY29uc3QgbWlzc2luZz0vKiAgICAgICAgICAgICAgICAqL1tcbid0eXBlb2YnLFxuJ2Vycm9yJyxcbidmYWlsJyxcbidlcXVhbCcsXG4nc3RyaW5nJyxcbidub3RlJyxcbidkZXRhaWxzJyxcbidGYWlsJyxcbidxdW90ZScsXG4vL1xuLy9cbi8vXG4vL1xuJ21ha2VBc3NlcnQnXS5cbmZpbHRlcigobmFtZSk9Pmdsb2JhbEFzc2VydFtuYW1lXT09PXVuZGVmaW5lZCk7XG5pZihtaXNzaW5nLmxlbmd0aD4wKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQgbWV0aG9kcyAke21pc3Npbmcuam9pbihcbicsICcpXG4gfWApO1xuXG4gfVxuXG4vL1xuLy9cbi8vXG5jb25zdHtcbmJhcmUsXG5kZXRhaWxzOnJlZGFjdGVkLFxuZXJyb3I6bWFrZUVycm9yLFxuRmFpbDp0aHJvd1JlZGFjdGVkLFxubWFrZUFzc2VydDpfb21pdHRlZE1ha2VBc3NlcnQsXG5ub3RlLFxucXVvdGUsXG4uLi5hc3NlcnRpb25zfT1cbmdsb2JhbEFzc2VydDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbiRo4oCNX29uY2UucmVkYWN0ZWQocmVkYWN0ZWQpOyRo4oCNX29uY2UubWFrZUVycm9yKG1ha2VFcnJvcik7JGjigI1fb25jZS50aHJvd1JlZGFjdGVkKHRocm93UmVkYWN0ZWQpOyRo4oCNX29uY2Uubm90ZShub3RlKTskaOKAjV9vbmNlLnF1b3RlKHF1b3RlKTtjb25zdCBhc3NlcnQ9KHZhbHVlLG9wdERldGFpbHMsZXJyQ29udHJ1Y3RvcixvcHRpb25zKT0+XG5nbG9iYWxBc3NlcnQodmFsdWUsb3B0RGV0YWlscyxlcnJDb250cnVjdG9yLG9wdGlvbnMpOyRo4oCNX29uY2UuYXNzZXJ0KGFzc2VydCk7XG5PYmplY3QuYXNzaWduKGFzc2VydCxhc3NlcnRpb25zKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgYmFyZU9yUXVvdGU9YmFyZXx8cXVvdGU7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaOKAjV9vbmNlLmJhcmVPclF1b3RlKGJhcmVPclF1b3RlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InJlZGFjdGVkIjpbInJlZGFjdGVkIl0sIlgiOlsicmVkYWN0ZWQiXSwibWFrZUVycm9yIjpbIm1ha2VFcnJvciJdLCJ0aHJvd1JlZGFjdGVkIjpbInRocm93UmVkYWN0ZWQiXSwiRmFpbCI6WyJ0aHJvd1JlZGFjdGVkIl0sIm5vdGUiOlsibm90ZSJdLCJhbm5vdGF0ZUVycm9yIjpbIm5vdGUiXSwicXVvdGUiOlsicXVvdGUiXSwicSI6WyJxdW90ZSJdLCJhc3NlcnQiOlsiYXNzZXJ0Il0sImJhcmUiOlsiYmFyZU9yUXVvdGUiXSwiYiI6WyJiYXJlT3JRdW90ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADGbf2bpBAAAKQQAAAjAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUvc3JjL0UuanN7ImltcG9ydHMiOlsiLi90cmFjay10dXJucy5qcyIsIi4vbWVzc2FnZS1icmVha3BvaW50cy5qcyJdLCJleHBvcnRzIjpbImRlZmF1bHQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHRyYWNrVHVybnMsbWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyOyRo4oCNX2ltcG9ydHMoW1tcIi4vdHJhY2stdHVybnMuanNcIiwgW1tcInRyYWNrVHVybnNcIiwgWyRo4oCNX2EgPT4gKHRyYWNrVHVybnMgPSAkaOKAjV9hKV1dXV0sW1wiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzXCIsIFtbXCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXJcIiwgWyRo4oCNX2EgPT4gKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cbmNvbnN0e2RldGFpbHM6WCxxdW90ZTpxLEZhaWwsZXJyb3I6bWFrZUVycm9yfT1hc3NlcnQ7XG5jb25zdHthc3NpZ24sY3JlYXRlfT1PYmplY3Q7XG5cbmNvbnN0IG9uU2VuZD1tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIoJ0VORE9fU0VORF9CUkVBS1BPSU5UUycpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcj17XG5zZXQoX3RhcmdldCxfcHJvcCxfdmFsdWUpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5pc0V4dGVuc2libGUoX3RhcmdldCl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbnNldFByb3RvdHlwZU9mKF90YXJnZXQsX3ZhbHVlKXtcbnJldHVybiBmYWxzZTtcbiB9LFxuZGVsZXRlUHJvcGVydHkoX3RhcmdldCxfcHJvcCl7XG5yZXR1cm4gZmFsc2U7XG4gfX07XG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRVByb3h5SGFuZGxlcj0ocmVjaXBpZW50LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmdldDooX3RhcmdldCxwcm9wZXJ0eUtleSxyZWNlaXZlcik9PntcbnJldHVybiBoYXJkZW4oXG57XG4vL1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bcHJvcGVydHlLZXldKC4uLmFyZ3Mpe1xuaWYodGhpcyE9PXJlY2VpdmVyKXtcbi8vXG5yZXR1cm4gSGFuZGxlZFByb21pc2UucmVqZWN0KFxubWFrZUVycm9yKFxuWCBgVW5leHBlY3RlZCByZWNlaXZlciBmb3IgXCIke3EocHJvcGVydHlLZXkpfVwiIG1ldGhvZCBvZiBFKCR7cShcbnJlY2lwaWVudClcbiB9KWApKTtcblxuXG4gfVxuXG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxwcm9wZXJ0eUtleSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5hcHBseU1ldGhvZChyZWNpcGllbnQscHJvcGVydHlLZXksYXJncyk7XG4gfVxuLy9cbn1bcHJvcGVydHlLZXldKTtcblxuIH0sXG5hcHBseTooX3RhcmdldCxfdGhpc0FyZyxhcmdBcnJheT1bXSk9PntcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4gfVxucmV0dXJuIEhhbmRsZWRQcm9taXNlLmFwcGx5RnVuY3Rpb24ocmVjaXBpZW50LGFyZ0FycmF5KTtcbiB9LFxuaGFzOihfdGFyZ2V0LF9wKT0+e1xuLy9cbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRVNlbmRPbmx5UHJveHlIYW5kbGVyPShyZWNpcGllbnQsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuZ2V0OihfdGFyZ2V0LHByb3BlcnR5S2V5LHJlY2VpdmVyKT0+e1xucmV0dXJuIGhhcmRlbihcbntcbi8vXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuW3Byb3BlcnR5S2V5XSguLi5hcmdzKXtcbi8vXG50aGlzPT09cmVjZWl2ZXJ8fFxuRmFpbCBgVW5leHBlY3RlZCByZWNlaXZlciBmb3IgXCIke3EoXG5wcm9wZXJ0eUtleSlcbiB9XCIgbWV0aG9kIG9mIEUuc2VuZE9ubHkoJHtxKHJlY2lwaWVudCl9KWA7XG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxwcm9wZXJ0eUtleSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbkhhbmRsZWRQcm9taXNlLmFwcGx5TWV0aG9kU2VuZE9ubHkocmVjaXBpZW50LHByb3BlcnR5S2V5LGFyZ3MpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4vL1xufVtwcm9wZXJ0eUtleV0pO1xuXG4gfSxcbmFwcGx5OihfdGFyZ2V0LF90aGlzQXJnLGFyZ3NBcnJheT1bXSk9PntcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4gfVxuSGFuZGxlZFByb21pc2UuYXBwbHlGdW5jdGlvblNlbmRPbmx5KHJlY2lwaWVudCxhcmdzQXJyYXkpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9LFxuaGFzOihfdGFyZ2V0LF9wKT0+e1xuLy9cbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRUdldFByb3h5SGFuZGxlcj0oeCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5oYXM6KF90YXJnZXQsX3Byb3ApPT50cnVlLFxuZ2V0OihfdGFyZ2V0LHByb3ApPT5IYW5kbGVkUHJvbWlzZS5nZXQoeCxwcm9wKX0pO1xuXG5cbi8qXG5cbiAqL1xuY29uc3QgbWFrZUU9KEhhbmRsZWRQcm9taXNlKT0+e1xucmV0dXJuIGhhcmRlbihcbmFzc2lnbihcbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAqL1xuLy9cbih4KT0+aGFyZGVuKG5ldyBQcm94eSgoKT0+eyB9LG1ha2VFUHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbmdldDooeCk9PlxuLy9cbmhhcmRlbihcbm5ldyBQcm94eShjcmVhdGUobnVsbCksbWFrZUVHZXRQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcblxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xucmVzb2x2ZTpIYW5kbGVkUHJvbWlzZS5yZXNvbHZlLFxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuc2VuZE9ubHk6KHgpPT5cbi8vXG5oYXJkZW4oXG5uZXcgUHJveHkoKCk9PnsgfSxtYWtlRVNlbmRPbmx5UHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbndoZW46KHgsb25mdWxmaWxsZWQsb25yZWplY3RlZCk9PlxuSGFuZGxlZFByb21pc2UucmVzb2x2ZSh4KS50aGVuKFxuLi4udHJhY2tUdXJucyhbb25mdWxmaWxsZWQsb25yZWplY3RlZF0pKX0pKTtcblxuXG5cblxuIH07XG5cbmNvbnN0e2RlZmF1bHQ6JGPigI1fZGVmYXVsdH09e2RlZmF1bHQ6bWFrZUV9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5kZWZhdWx0KCRj4oCNX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAACkAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvZXhwb3J0cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADO4rpotQwAALUMAAAnAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUvc3JjL2xvY2FsLmpzeyJpbXBvcnRzIjpbIi4vbWVzc2FnZS1icmVha3BvaW50cy5qcyJdLCJleHBvcnRzIjpbImdldE1ldGhvZE5hbWVzIiwibG9jYWxBcHBseUZ1bmN0aW9uIiwibG9jYWxBcHBseU1ldGhvZCIsImxvY2FsR2V0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI7JGjigI1faW1wb3J0cyhbW1wiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzXCIsIFtbXCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXJcIiwgWyRo4oCNX2EgPT4gKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtkZXRhaWxzOlgscXVvdGU6cSxGYWlsfT1hc3NlcnQ7XG5cbmNvbnN0e2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMsZ2V0UHJvdG90eXBlT2YsZnJlZXplfT1PYmplY3Q7XG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuXG5jb25zdCBudHlwZW9mPShzcGVjaW1lbik9PnNwZWNpbWVuPT09bnVsbD8nbnVsbCc6dHlwZW9mIHNwZWNpbWVuO1xuXG5jb25zdCBvbkRlbGl2ZXJ5PW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19ERUxJVkVSWV9CUkVBS1BPSU5UUycpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzT2JqZWN0PSh2YWwpPT5PYmplY3QodmFsKT09PXZhbDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbXBhcmVTdHJpbmdpZmllZD0oYSxiKT0+e1xuaWYodHlwZW9mIGE9PT10eXBlb2YgYil7XG5jb25zdCBsZWZ0PVN0cmluZyhhKTtcbmNvbnN0IHJpZ2h0PVN0cmluZyhiKTtcbi8vXG5yZXR1cm4gbGVmdDxyaWdodD8tMTpsZWZ0PnJpZ2h0PzE6MDtcbiB9XG5pZih0eXBlb2YgYT09PSdzeW1ib2wnKXtcbmFzc2VydCh0eXBlb2YgYj09PSdzdHJpbmcnKTtcbnJldHVybi0xO1xuIH1cbmFzc2VydCh0eXBlb2YgYT09PSdzdHJpbmcnKTtcbmFzc2VydCh0eXBlb2YgYj09PSdzeW1ib2wnKTtcbnJldHVybiAxO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kTmFtZXM9KHZhbCk9PntcbmxldCBsYXllcj12YWw7XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7Ly9cbndoaWxlKGxheWVyIT09bnVsbCYmbGF5ZXIhPT1PYmplY3QucHJvdG90eXBlKXtcbi8vXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGxheWVyKTtcbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoZGVzY3MpKXtcbi8vXG4vL1xuaWYodHlwZW9mIHZhbFtuYW1lXT09PSdmdW5jdGlvbicpe1xubmFtZXMuYWRkKG5hbWUpO1xuIH1cbiB9XG5pZighaXNPYmplY3QodmFsKSl7XG5icmVhaztcbiB9XG5sYXllcj1nZXRQcm90b3R5cGVPZihsYXllcik7XG4gfVxucmV0dXJuIGhhcmRlbihbLi4ubmFtZXNdLnNvcnQoY29tcGFyZVN0cmluZ2lmaWVkKSk7XG4gfTtcbi8vXG4vL1xuJGjigI1fb25jZS5nZXRNZXRob2ROYW1lcyhnZXRNZXRob2ROYW1lcyk7ZnJlZXplKGdldE1ldGhvZE5hbWVzKTtcblxuY29uc3QgICAgICAgIGxvY2FsQXBwbHlGdW5jdGlvbj0ocmVjaXBpZW50LGFyZ3MpPT57XG50eXBlb2YgcmVjaXBpZW50PT09J2Z1bmN0aW9uJ3x8XG5hc3NlcnQuZmFpbChcblggYENhbm5vdCBpbnZva2UgdGFyZ2V0IGFzIGEgZnVuY3Rpb247IHR5cGVvZiB0YXJnZXQgaXMgJHtxKFxubnR5cGVvZihyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuaWYob25EZWxpdmVyeSYmb25EZWxpdmVyeS5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCx1bmRlZmluZWQpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5jb25zdCByZXN1bHQ9YXBwbHkocmVjaXBpZW50LHVuZGVmaW5lZCxhcmdzKTtcbnJldHVybiByZXN1bHQ7XG4gfTskaOKAjV9vbmNlLmxvY2FsQXBwbHlGdW5jdGlvbihsb2NhbEFwcGx5RnVuY3Rpb24pO1xuXG5jb25zdCAgICAgICAgbG9jYWxBcHBseU1ldGhvZD0ocmVjaXBpZW50LG1ldGhvZE5hbWUsYXJncyk9PntcbmlmKG1ldGhvZE5hbWU9PT11bmRlZmluZWR8fG1ldGhvZE5hbWU9PT1udWxsKXtcbi8vXG5yZXR1cm4gbG9jYWxBcHBseUZ1bmN0aW9uKHJlY2lwaWVudCxhcmdzKTtcbiB9XG5pZihyZWNpcGllbnQ9PT11bmRlZmluZWR8fHJlY2lwaWVudD09PW51bGwpe1xuYXNzZXJ0LmZhaWwoXG5YIGBDYW5ub3QgZGVsaXZlciAke3EobWV0aG9kTmFtZSl9IHRvIHRhcmdldDsgdHlwZW9mIHRhcmdldCBpcyAke3EoXG5udHlwZW9mKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG4gfVxuY29uc3QgZm49cmVjaXBpZW50W21ldGhvZE5hbWVdO1xuaWYoZm49PT11bmRlZmluZWQpe1xuYXNzZXJ0LmZhaWwoXG5YIGB0YXJnZXQgaGFzIG5vIG1ldGhvZCAke3EobWV0aG9kTmFtZSl9LCBoYXMgJHtxKFxuZ2V0TWV0aG9kTmFtZXMocmVjaXBpZW50KSlcbiB9YCxcblR5cGVFcnJvcik7XG5cbiB9XG5jb25zdCBmdHlwZT1udHlwZW9mKGZuKTtcbnR5cGVvZiBmbj09PSdmdW5jdGlvbid8fFxuRmFpbCBgaW52b2tlZCBtZXRob2QgJHtxKG1ldGhvZE5hbWUpfSBpcyBub3QgYSBmdW5jdGlvbjsgaXQgaXMgYSAke3EoXG5mdHlwZSlcbiB9YDtcbmlmKG9uRGVsaXZlcnkmJm9uRGVsaXZlcnkuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsbWV0aG9kTmFtZSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbmNvbnN0IHJlc3VsdD1hcHBseShmbixyZWNpcGllbnQsYXJncyk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjigI1fb25jZS5sb2NhbEFwcGx5TWV0aG9kKGxvY2FsQXBwbHlNZXRob2QpO1xuXG5jb25zdCAgICAgICAgbG9jYWxHZXQ9KHQsa2V5KT0+dFtrZXldOyRo4oCNX29uY2UubG9jYWxHZXQobG9jYWxHZXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0TWV0aG9kTmFtZXMiOlsiZ2V0TWV0aG9kTmFtZXMiXSwibG9jYWxBcHBseUZ1bmN0aW9uIjpbImxvY2FsQXBwbHlGdW5jdGlvbiJdLCJsb2NhbEFwcGx5TWV0aG9kIjpbImxvY2FsQXBwbHlNZXRob2QiXSwibG9jYWxHZXQiOlsibG9jYWxHZXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAYbq8rPEMAADxDAAANQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41L3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vudi1vcHRpb25zIl0sImV4cG9ydHMiOlsibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZ2V0RW52aXJvbm1lbnRPcHRpb25cIiwgWyRo4oCNX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbmNvbnN0e3F1b3RlOnEsRmFpbH09YXNzZXJ0O1xuXG5jb25zdHtoYXNPd24sZnJlZXplLGVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuLypcblxuXG5cblxuXG4gKi9cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgaXNKU09OUmVjb3JkPSh2YWwpPT5cbnR5cGVvZiB2YWw9PT0nb2JqZWN0JyYmdmFsIT09bnVsbCYmIUFycmF5LmlzQXJyYXkodmFsKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc2ltcGxpZnlUYWc9KHRhZyk9PntcbmZvcihjb25zdCBwcmVmaXggb2ZbJ0FsbGVnZWQ6ICcsJ0RlYnVnTmFtZTogJ10pe1xuaWYodGFnLnN0YXJ0c1dpdGgocHJlZml4KSl7XG5yZXR1cm4gdGFnLnNsaWNlKHByZWZpeC5sZW5ndGgpO1xuIH1cbiB9XG5yZXR1cm4gdGFnO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyPShvcHRpb25OYW1lKT0+e1xubGV0IGJyZWFrcG9pbnRzPUpTT04ucGFyc2UoZ2V0RW52aXJvbm1lbnRPcHRpb24ob3B0aW9uTmFtZSwnbnVsbCcpKTtcblxuaWYoYnJlYWtwb2ludHM9PT1udWxsKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBicmVha3BvaW50c1RhYmxlO1xuXG5jb25zdCBnZXRCcmVha3BvaW50cz0oKT0+YnJlYWtwb2ludHM7XG5mcmVlemUoZ2V0QnJlYWtwb2ludHMpO1xuXG5jb25zdCBzZXRCcmVha3BvaW50cz0obmV3QnJlYWtwb2ludHM9YnJlYWtwb2ludHMpPT57XG5pc0pTT05SZWNvcmQobmV3QnJlYWtwb2ludHMpfHxcbkZhaWwgYEV4cGVjdGVkICR7cShvcHRpb25OYW1lKX0gb3B0aW9uIHRvIGJlIGEgSlNPTiBicmVha3BvaW50cyByZWNvcmRgO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBuZXdCcmVha3BvaW50c1RhYmxlPXtfX3Byb3RvX186bnVsbH07XG5cbmZvcihjb25zdFt0YWcsbWV0aG9kQlBzXW9mIGVudHJpZXMobmV3QnJlYWtwb2ludHMpKXtcbnRhZz09PXNpbXBsaWZ5VGFnKHRhZyl8fFxuRmFpbCBgSnVzdCB1c2Ugc2ltcGxlIHRhZyAke3Eoc2ltcGxpZnlUYWcodGFnKSl9IHJhdGhlciB0aGFuICR7cSh0YWcpfWA7XG5pc0pTT05SZWNvcmQobWV0aG9kQlBzKXx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbidzICR7cShcbnRhZylcbiB9IHRvIGJlIGEgSlNPTiBtZXRob2RzIGJyZWFrcG9pbnRzIHJlY29yZGA7XG5mb3IoY29uc3RbbWV0aG9kTmFtZSxjb3VudF1vZiBlbnRyaWVzKG1ldGhvZEJQcykpe1xuY291bnQ9PT0nKid8fFxudHlwZW9mIGNvdW50PT09J251bWJlcicmJlxuTnVtYmVyLmlzU2FmZUludGVnZXIoY291bnQpJiZcbmNvdW50Pj0wfHxcbkZhaWwgYEV4cGVjdGVkICR7cShvcHRpb25OYW1lKX0gb3B0aW9uJ3MgJHtxKHRhZyl9LiR7cShcbm1ldGhvZE5hbWUpXG4gfSB0byBiZSBcIipcIiBvciBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyYDtcblxuY29uc3QgY2xhc3NCUHM9aGFzT3duKG5ld0JyZWFrcG9pbnRzVGFibGUsbWV0aG9kTmFtZSk/XG5uZXdCcmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdOlxubmV3QnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXT17XG4vL1xuX19wcm90b19fOm51bGx9O1xuXG5jbGFzc0JQc1t0YWddPWNvdW50O1xuIH1cbiB9XG5icmVha3BvaW50cz1uZXdCcmVha3BvaW50cztcbmJyZWFrcG9pbnRzVGFibGU9bmV3QnJlYWtwb2ludHNUYWJsZTtcbiB9O1xuZnJlZXplKHNldEJyZWFrcG9pbnRzKTtcblxuY29uc3Qgc2hvdWxkQnJlYWtwb2ludD0ocmVjaXBpZW50LG1ldGhvZE5hbWUpPT57XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkfHxtZXRob2ROYW1lPT09bnVsbCl7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IGNsYXNzQlBzPWJyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV18fGJyZWFrcG9pbnRzVGFibGVbJyonXTtcbmlmKGNsYXNzQlBzPT09dW5kZWZpbmVkKXtcbnJldHVybiBmYWxzZTtcbiB9XG5sZXQgdGFnPXNpbXBsaWZ5VGFnKHJlY2lwaWVudFtTeW1ib2wudG9TdHJpbmdUYWddKTtcbmxldCBjb3VudD1jbGFzc0JQc1t0YWddO1xuaWYoY291bnQ9PT11bmRlZmluZWQpe1xudGFnPScqJztcbmNvdW50PWNsYXNzQlBzW3RhZ107XG5pZihjb3VudD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbmlmKGNvdW50PT09JyonKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKGNvdW50PT09MCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5hc3NlcnQodHlwZW9mIGNvdW50PT09J251bWJlcicmJmNvdW50Pj0xKTtcbmNsYXNzQlBzW3RhZ109Y291bnQtMTtcbnJldHVybiBmYWxzZTtcbiB9O1xuZnJlZXplKHNob3VsZEJyZWFrcG9pbnQpO1xuXG5jb25zdCBicmVha3BvaW50VGVzdGVyPWZyZWV6ZSh7XG5nZXRCcmVha3BvaW50cyxcbnNldEJyZWFrcG9pbnRzLFxuc2hvdWxkQnJlYWtwb2ludH0pO1xuXG5icmVha3BvaW50VGVzdGVyLnNldEJyZWFrcG9pbnRzKCk7XG5yZXR1cm4gYnJlYWtwb2ludFRlc3RlcjtcbiB9OyRo4oCNX29uY2UubWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcik7XG5mcmVlemUobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAn+/zEzwDAAA8AwAAKQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41L3NyYy9uby1zaGltLmpzeyJpbXBvcnRzIjpbIi4vRS5qcyIsIi4vZXhwb3J0cy5qcyJdLCJleHBvcnRzIjpbIkUiLCJIYW5kbGVkUHJvbWlzZSJdLCJyZWV4cG9ydHMiOlsiLi9leHBvcnRzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlRTskaOKAjV9pbXBvcnRzKFtbXCIuL0UuanNcIiwgW1tcImRlZmF1bHRcIiwgWyRo4oCNX2EgPT4gKG1ha2VFID0gJGjigI1fYSldXV1dLFtcIi4vZXhwb3J0cy5qc1wiLCBbXV1dKTsgICBcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0IGhwPUhhbmRsZWRQcm9taXNlOyRo4oCNX29uY2UuaHAoaHApO1xuY29uc3QgICAgICAgIEU9bWFrZUUoaHApOyRo4oCNX29uY2UuRShFKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkhhbmRsZWRQcm9taXNlIjpbImhwIl0sIkUiOlsiRSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABGMUZBaQkAAGkJAAAtAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUvc3JjL3RyYWNrLXR1cm5zLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vudi1vcHRpb25zIl0sImV4cG9ydHMiOlsidHJhY2tUdXJucyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb24sZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhczskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZ2V0RW52aXJvbm1lbnRPcHRpb25cIiwgWyRo4oCNX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjigI1fYSldXSxbXCJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzXCIsIFskaOKAjV9hID0+IChlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxubGV0IGhpZGRlblByaW9yRXJyb3I7XG5sZXQgaGlkZGVuQ3VycmVudFR1cm49MDtcbmxldCBoaWRkZW5DdXJyZW50RXZlbnQ9MDtcblxuLy9cbmNvbnN0IFZFUkJPU0U9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCd0cmFjay10dXJucycpO1xuXG4vL1xuLy9cbmNvbnN0IEVOQUJMRUQ9XG5nZXRFbnZpcm9ubWVudE9wdGlvbignVFJBQ0tfVFVSTlMnLCdkaXNhYmxlZCcsWydlbmFibGVkJ10pPT09J2VuYWJsZWQnO1xuXG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCBhZGRSZWplY3Rpb25Ob3RlPShkZXRhaWxzTm90ZSk9PihyZWFzb24pPT57XG5pZihyZWFzb24gaW5zdGFuY2VvZiBFcnJvcil7XG5nbG9iYWxUaGlzLmFzc2VydC5ub3RlKHJlYXNvbixkZXRhaWxzTm90ZSk7XG4gfVxuaWYoVkVSQk9TRSl7XG5jb25zb2xlLmxvZygnUkVKRUNURUQgYXQgdG9wIG9mIGV2ZW50IGxvb3AnLHJlYXNvbik7XG4gfVxuIH07XG5cbmNvbnN0IHdyYXBGdW5jdGlvbj1cbihmdW5jLHNlbmRpbmdFcnJvcixYKT0+XG4oLi4uYXJncyk9PntcbmhpZGRlblByaW9yRXJyb3I9c2VuZGluZ0Vycm9yO1xuaGlkZGVuQ3VycmVudFR1cm4rPTE7XG5oaWRkZW5DdXJyZW50RXZlbnQ9MDtcbnRyeXtcbmxldCByZXN1bHQ7XG50cnl7XG5yZXN1bHQ9ZnVuYyguLi5hcmdzKTtcbiB9Y2F0Y2goZXJyKXtcbmlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcbmdsb2JhbFRoaXMuYXNzZXJ0Lm5vdGUoXG5lcnIsXG5YIGBUaHJvd24gZnJvbTogJHtoaWRkZW5QcmlvckVycm9yfToke2hpZGRlbkN1cnJlbnRUdXJufS4ke2hpZGRlbkN1cnJlbnRFdmVudH1gKTtcblxuIH1cbmlmKFZFUkJPU0Upe1xuY29uc29sZS5sb2coJ1RIUk9XTiB0byB0b3Agb2YgZXZlbnQgbG9vcCcsZXJyKTtcbiB9XG50aHJvdyBlcnI7XG4gfVxuLy9cbmNvbnN0IGRldGFpbHNOb3RlPVggYFJlamVjdGlvbiBmcm9tOiAke2hpZGRlblByaW9yRXJyb3J9OiR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWA7XG5Qcm9taXNlLnJlc29sdmUocmVzdWx0KS5jYXRjaChhZGRSZWplY3Rpb25Ob3RlKGRldGFpbHNOb3RlKSk7XG5yZXR1cm4gcmVzdWx0O1xuIH1maW5hbGx5e1xuaGlkZGVuUHJpb3JFcnJvcj11bmRlZmluZWQ7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRyYWNrVHVybnM9KGZ1bmNzKT0+e1xuaWYoIUVOQUJMRUR8fHR5cGVvZiBnbG9iYWxUaGlzPT09J3VuZGVmaW5lZCd8fCFnbG9iYWxUaGlzLmFzc2VydCl7XG5yZXR1cm4gZnVuY3M7XG4gfVxuY29uc3R7ZGV0YWlsczpYLG5vdGU6YW5ub3RhdGVFcnJvcn09Z2xvYmFsVGhpcy5hc3NlcnQ7XG5cbmhpZGRlbkN1cnJlbnRFdmVudCs9MTtcbmNvbnN0IHNlbmRpbmdFcnJvcj1FcnJvcihcbiBgRXZlbnQ6ICR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWApO1xuXG5pZihoaWRkZW5QcmlvckVycm9yIT09dW5kZWZpbmVkKXtcbmFubm90YXRlRXJyb3Ioc2VuZGluZ0Vycm9yLFggYENhdXNlZCBieTogJHtoaWRkZW5QcmlvckVycm9yfWApO1xuIH1cblxucmV0dXJuICgvKiAgICAgICAgICAgICovXG5mdW5jcy5tYXAoKGZ1bmMpPT5mdW5jJiZ3cmFwRnVuY3Rpb24oZnVuYyxzZW5kaW5nRXJyb3IsWCkpKTtcblxuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRo4oCNX29uY2UudHJhY2tUdXJucyh0cmFja1R1cm5zKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InRyYWNrVHVybnMiOlsidHJhY2tUdXJucyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB72BcHWwIAAFsCAAAjAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUvdXRpbHMuanN7ImltcG9ydHMiOlsiLi9zcmMvbG9jYWwuanMiLCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOltudWxsLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtbXCIuL3NyYy9sb2NhbC5qc1wiLCBbXV0sW1wiLi9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2xvY2FsLmpzIjpbWyJnZXRNZXRob2ROYW1lcyIsImdldE1ldGhvZE5hbWVzIl1dLCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjpbWyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiLCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANwQVnZXAgAAVwIAABkAAABAZW5kby9leG8tdjEuNS4zL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2V4by1tYWtlcnMuanMiLCIuL3NyYy90eXBlcy5qcyIsIi4vc3JjL2dldC1pbnRlcmZhY2UuanMiXSwiZXhwb3J0cyI6W251bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZXhvLW1ha2Vycy5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vc3JjL2V4by1tYWtlcnMuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXSxbXCIuL3NyYy9nZXQtaW50ZXJmYWNlLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvZ2V0LWludGVyZmFjZS5qcyI6W1siR0VUX0lOVEVSRkFDRV9HVUFSRCIsIkdFVF9JTlRFUkZBQ0VfR1VBUkQiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABtWl5XuFAAA7hQAACIAAABAZW5kby9leG8tdjEuNS4zL3NyYy9leG8tbWFrZXJzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiQGVuZG8vZW52LW9wdGlvbnMiLCJAZW5kby9lcnJvcnMiLCIuL2V4by10b29scy5qcyJdLCJleHBvcnRzIjpbImRlZmluZUV4b0NsYXNzIiwiZGVmaW5lRXhvQ2xhc3NLaXQiLCJpbml0RW1wdHkiLCJtYWtlRXhvIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBvYmplY3RNYXAsZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyxGYWlsLHEsZGVmZW5kUHJvdG90eXBlLGRlZmVuZFByb3RvdHlwZUtpdDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaOKAjV9hID0+IChvYmplY3RNYXAgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRo4oCNX2EgPT4gKGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dLFtcIi4vZXhvLXRvb2xzLmpzXCIsIFtbXCJkZWZlbmRQcm90b3R5cGVcIiwgWyRo4oCNX2EgPT4gKGRlZmVuZFByb3RvdHlwZSA9ICRo4oCNX2EpXV0sW1wiZGVmZW5kUHJvdG90eXBlS2l0XCIsIFskaOKAjV9hID0+IChkZWZlbmRQcm90b3R5cGVLaXQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtjcmVhdGUsc2VhbCxmcmVlemUsZGVmaW5lUHJvcGVydHksdmFsdWVzfT1PYmplY3Q7XG5cbi8vXG5jb25zdCBMQUJFTF9JTlNUQU5DRVM9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCdsYWJlbC1pbnN0YW5jZXMnKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBtYWtlU2VsZj0ocHJvdG8saW5zdGFuY2VDb3VudCk9PntcbmNvbnN0IHNlbGY9Y3JlYXRlKHByb3RvKTtcbmlmKExBQkVMX0lOU1RBTkNFUyl7XG5kZWZpbmVQcm9wZXJ0eShzZWxmLFN5bWJvbC50b1N0cmluZ1RhZyx7XG52YWx1ZTogYCR7cHJvdG9bU3ltYm9sLnRvU3RyaW5nVGFnXX0jJHtpbnN0YW5jZUNvdW50fWAsXG53cml0YWJsZTpmYWxzZSxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2V9KTtcblxuIH1cbnJldHVybiBoYXJkZW4oc2VsZik7XG4gfTtcblxuY29uc3QgZW1wdHlSZWNvcmQ9aGFyZGVuKHt9KTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaW5pdEVtcHR5PSgpPT5lbXB0eVJlY29yZDtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmluaXRFbXB0eShpbml0RW1wdHkpO1xuY29uc3QgICAgICAgIGRlZmluZUV4b0NsYXNzPShcbnRhZyxcbmludGVyZmFjZUd1YXJkLFxuaW5pdCxcbm1ldGhvZHMsXG5vcHRpb25zPXt9KT0+XG57XG5oYXJkZW4obWV0aG9kcyk7XG5jb25zdHtcbmZpbmlzaD11bmRlZmluZWQsXG5yZWNlaXZlQW1wbGlmaWVyPXVuZGVmaW5lZCxcbnJlY2VpdmVJbnN0YW5jZVRlc3Rlcj11bmRlZmluZWR9PVxub3B0aW9ucztcbnJlY2VpdmVBbXBsaWZpZXI9PT11bmRlZmluZWR8fFxuRmFpbCBgT25seSBmYWNldHMgb2YgYW4gZXhvIGNsYXNzIGtpdCBjYW4gYmUgYW1wbGlmaWVkICR7cSh0YWcpfWA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29udGV4dE1hcD1uZXcgV2Vha01hcCgpO1xuY29uc3QgcHJvdG89ZGVmZW5kUHJvdG90eXBlKFxudGFnLFxuKHNlbGYpPT4vKiAgICAgICAgICAgICAgKi9jb250ZXh0TWFwLmdldChzZWxmKSxcbm1ldGhvZHMsXG50cnVlLFxuaW50ZXJmYWNlR3VhcmQpO1xuXG5sZXQgaW5zdGFuY2VDb3VudD0wO1xuLypcblxuICAgKi9cbmNvbnN0IG1ha2VJbnN0YW5jZT0oLi4uYXJncyk9Pntcbi8vXG5jb25zdCBzdGF0ZT1zZWFsKGluaXQoLi4uYXJncykpO1xuaW5zdGFuY2VDb3VudCs9MTtcbmNvbnN0IHNlbGY9bWFrZVNlbGYocHJvdG8saW5zdGFuY2VDb3VudCk7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29udGV4dD1mcmVlemUoe3N0YXRlLHNlbGZ9KTtcbmNvbnRleHRNYXAuc2V0KHNlbGYsY29udGV4dCk7XG5pZihmaW5pc2gpe1xuZmluaXNoKGNvbnRleHQpO1xuIH1cbnJldHVybiBzZWxmO1xuIH07XG5cbmlmKHJlY2VpdmVJbnN0YW5jZVRlc3Rlcil7XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpc0luc3RhbmNlPShleG8sZmFjZXROYW1lPXVuZGVmaW5lZCk9PntcbmZhY2V0TmFtZT09PXVuZGVmaW5lZHx8XG5GYWlsIGBmYWNldE5hbWUgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGFuIGV4byBjbGFzcyBraXQ6ICR7cShcbnRhZylcbiB9IGhhcyBubyBmYWNldCAke3EoZmFjZXROYW1lKX1gO1xucmV0dXJuIGNvbnRleHRNYXAuaGFzKGV4byk7XG4gfTtcbmhhcmRlbihpc0luc3RhbmNlKTtcbnJlY2VpdmVJbnN0YW5jZVRlc3Rlcihpc0luc3RhbmNlKTtcbiB9XG5cbnJldHVybiBoYXJkZW4obWFrZUluc3RhbmNlKTtcbiB9OyRo4oCNX29uY2UuZGVmaW5lRXhvQ2xhc3MoZGVmaW5lRXhvQ2xhc3MpO1xuaGFyZGVuKGRlZmluZUV4b0NsYXNzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZpbmVFeG9DbGFzc0tpdD0oXG50YWcsXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5tZXRob2RzS2l0LFxub3B0aW9ucz17fSk9Plxue1xuaGFyZGVuKG1ldGhvZHNLaXQpO1xuY29uc3R7XG5maW5pc2g9dW5kZWZpbmVkLFxucmVjZWl2ZUFtcGxpZmllcj11bmRlZmluZWQsXG5yZWNlaXZlSW5zdGFuY2VUZXN0ZXI9dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG5jb25zdCBjb250ZXh0TWFwS2l0PW9iamVjdE1hcChtZXRob2RzS2l0LCgpPT5uZXcgV2Vha01hcCgpKTtcbmNvbnN0IGdldENvbnRleHRLaXQ9b2JqZWN0TWFwKFxuY29udGV4dE1hcEtpdCxcbihjb250ZXh0TWFwKT0+KGZhY2V0KT0+Y29udGV4dE1hcC5nZXQoZmFjZXQpKTtcblxuY29uc3QgcHJvdG90eXBlS2l0PWRlZmVuZFByb3RvdHlwZUtpdChcbnRhZyxcbmdldENvbnRleHRLaXQsXG5tZXRob2RzS2l0LFxudHJ1ZSxcbmludGVyZmFjZUd1YXJkS2l0KTtcblxubGV0IGluc3RhbmNlQ291bnQ9MDtcbi8qXG5cbiAgICovXG5jb25zdCBtYWtlSW5zdGFuY2VLaXQ9KC4uLmFyZ3MpPT57XG4vL1xuY29uc3Qgc3RhdGU9c2VhbChpbml0KC4uLmFyZ3MpKTtcbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0PXtzdGF0ZSxmYWNldHM6bnVsbH07XG5pbnN0YW5jZUNvdW50Kz0xO1xuY29uc3QgZmFjZXRzPW9iamVjdE1hcChwcm90b3R5cGVLaXQsKHByb3RvLGZhY2V0TmFtZSk9PntcbmNvbnN0IHNlbGY9bWFrZVNlbGYocHJvdG8saW5zdGFuY2VDb3VudCk7XG5jb250ZXh0TWFwS2l0W2ZhY2V0TmFtZV0uc2V0KHNlbGYsY29udGV4dCk7XG5yZXR1cm4gc2VsZjtcbiB9KTtcbmNvbnRleHQuZmFjZXRzPWZhY2V0cztcbi8vXG5mcmVlemUoY29udGV4dCk7XG5pZihmaW5pc2gpe1xuZmluaXNoKGNvbnRleHQpO1xuIH1cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAqL2NvbnRleHQuZmFjZXRzKTtcbiB9O1xuXG5pZihyZWNlaXZlQW1wbGlmaWVyKXtcbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFtcGxpZnk9KGV4b0ZhY2V0KT0+e1xuZm9yKGNvbnN0IGNvbnRleHRNYXAgb2YgdmFsdWVzKGNvbnRleHRNYXBLaXQpKXtcbmlmKGNvbnRleHRNYXAuaGFzKGV4b0ZhY2V0KSl7XG5jb25zdHtmYWNldHN9PWNvbnRleHRNYXAuZ2V0KGV4b0ZhY2V0KTtcbnJldHVybiBmYWNldHM7XG4gfVxuIH1cbnRocm93IEZhaWwgYE11c3QgYmUgYSBmYWNldCBvZiAke3EodGFnKX06ICR7ZXhvRmFjZXR9YDtcbiB9O1xuaGFyZGVuKGFtcGxpZnkpO1xucmVjZWl2ZUFtcGxpZmllcihhbXBsaWZ5KTtcbiB9XG5cbmlmKHJlY2VpdmVJbnN0YW5jZVRlc3Rlcil7XG4vKiAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpc0luc3RhbmNlPShleG9GYWNldCxmYWNldE5hbWU9dW5kZWZpbmVkKT0+e1xuaWYoZmFjZXROYW1lPT09dW5kZWZpbmVkKXtcbnJldHVybiB2YWx1ZXMoY29udGV4dE1hcEtpdCkuc29tZSgoY29udGV4dE1hcCk9PlxuY29udGV4dE1hcC5oYXMoZXhvRmFjZXQpKTtcblxuIH1cbmFzc2VydC50eXBlb2YoZmFjZXROYW1lLCdzdHJpbmcnKTtcbmNvbnN0IGNvbnRleHRNYXA9Y29udGV4dE1hcEtpdFtmYWNldE5hbWVdO1xuY29udGV4dE1hcCE9PXVuZGVmaW5lZHx8XG5GYWlsIGBleG8gY2xhc3Mga2l0ICR7cSh0YWcpfSBoYXMgbm8gZmFjZXQgbmFtZWQgJHtxKGZhY2V0TmFtZSl9YDtcbnJldHVybiBjb250ZXh0TWFwLmhhcyhleG9GYWNldCk7XG4gfTtcbmhhcmRlbihpc0luc3RhbmNlKTtcbnJlY2VpdmVJbnN0YW5jZVRlc3Rlcihpc0luc3RhbmNlKTtcbiB9XG5cbnJldHVybiBoYXJkZW4obWFrZUluc3RhbmNlS2l0KTtcbiB9OyRo4oCNX29uY2UuZGVmaW5lRXhvQ2xhc3NLaXQoZGVmaW5lRXhvQ2xhc3NLaXQpO1xuaGFyZGVuKGRlZmluZUV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRXhvPSh0YWcsaW50ZXJmYWNlR3VhcmQsbWV0aG9kcyxvcHRpb25zPXVuZGVmaW5lZCk9PntcbmNvbnN0IG1ha2VJbnN0YW5jZT1kZWZpbmVFeG9DbGFzcyhcbnRhZyxcbmludGVyZmFjZUd1YXJkLFxuaW5pdEVtcHR5LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5yZXR1cm4gbWFrZUluc3RhbmNlKCk7XG4gfTskaOKAjV9vbmNlLm1ha2VFeG8obWFrZUV4byk7XG5oYXJkZW4obWFrZUV4byk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpbml0RW1wdHkiOlsiaW5pdEVtcHR5Il0sImRlZmluZUV4b0NsYXNzIjpbImRlZmluZUV4b0NsYXNzIl0sImRlZmluZUV4b0NsYXNzS2l0IjpbImRlZmluZUV4b0NsYXNzS2l0Il0sIm1ha2VFeG8iOlsibWFrZUV4byJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAxqkmWETAAABEwAAAhAAAAQGVuZG8vZXhvLXYxLjUuMy9zcmMvZXhvLXRvb2xzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZmFyIiwiQGVuZG8vcGF0dGVybnMiLCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCJAZW5kby9lcnJvcnMiLCIuL2dldC1pbnRlcmZhY2UuanMiXSwiZXhwb3J0cyI6WyJkZWZlbmRQcm90b3R5cGUiLCJkZWZlbmRQcm90b3R5cGVLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldE1ldGhvZE5hbWVzLGhhc093blByb3BlcnR5T2YsdG9UaHJvd2FibGUsRSxGYXIsbXVzdE1hdGNoLE0saXNBd2FpdEFyZ0d1YXJkLGlzUmF3R3VhcmQsZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQsZ2V0TWV0aG9kR3VhcmRQYXlsb2FkLGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCxnZXRDb3B5TWFwRW50cmllcyxsaXN0RGlmZmVyZW5jZSxvYmplY3RNYXAscSxGYWlsLEdFVF9JTlRFUkZBQ0VfR1VBUkQ7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qc1wiLCBbW1wiZ2V0TWV0aG9kTmFtZXNcIiwgWyRo4oCNX2EgPT4gKGdldE1ldGhvZE5hbWVzID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImhhc093blByb3BlcnR5T2ZcIiwgWyRo4oCNX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaOKAjV9hKV1dLFtcInRvVGhyb3dhYmxlXCIsIFskaOKAjV9hID0+ICh0b1Rocm93YWJsZSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dLFtcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRo4oCNX2EgPT4gKG11c3RNYXRjaCA9ICRo4oCNX2EpXV0sW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV0sW1wiaXNBd2FpdEFyZ0d1YXJkXCIsIFskaOKAjV9hID0+IChpc0F3YWl0QXJnR3VhcmQgPSAkaOKAjV9hKV1dLFtcImlzUmF3R3VhcmRcIiwgWyRo4oCNX2EgPT4gKGlzUmF3R3VhcmQgPSAkaOKAjV9hKV1dLFtcImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkXCIsIFskaOKAjV9hID0+IChnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCA9ICRo4oCNX2EpXV0sW1wiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkXCIsIFskaOKAjV9hID0+IChnZXRNZXRob2RHdWFyZFBheWxvYWQgPSAkaOKAjV9hKV1dLFtcImdldEludGVyZmFjZUd1YXJkUGF5bG9hZFwiLCBbJGjigI1fYSA9PiAoZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkID0gJGjigI1fYSldXSxbXCJnZXRDb3B5TWFwRW50cmllc1wiLCBbJGjigI1fYSA9PiAoZ2V0Q29weU1hcEVudHJpZXMgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qc1wiLCBbW1wibGlzdERpZmZlcmVuY2VcIiwgWyRo4oCNX2EgPT4gKGxpc3REaWZmZXJlbmNlID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRo4oCNX2EgPT4gKG9iamVjdE1hcCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiLi9nZXQtaW50ZXJmYWNlLmpzXCIsIFtbXCJHRVRfSU5URVJGQUNFX0dVQVJEXCIsIFskaOKAjV9hID0+IChHRVRfSU5URVJGQUNFX0dVQVJEID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3R7YXBwbHksb3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2RlZmluZVByb3BlcnRpZXMsZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG4gKi9cbmNvbnN0IFJhd01ldGhvZEd1YXJkPU0uY2FsbCgpLnJlc3QoTS5yYXcoKSkucmV0dXJucyhNLnJhdygpKTtcblxuY29uc3QgUkVEQUNURURfUkFXX0FSRz0nPHJlZGFjdGVkIHJhdyBhcmc+JztcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IFBhc3NhYmxlTWV0aG9kR3VhcmQ9TS5jYWxsKCkucmVzdChNLmFueSgpKS5yZXR1cm5zKE0uYW55KCkpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZFN5bmNBcmdzPShzeW5jQXJncyxtYXRjaENvbmZpZyxsYWJlbD11bmRlZmluZWQpPT57XG5jb25zdHtcbmRlY2xhcmVkTGVuLFxuaGFzUmVzdEFyZ0d1YXJkLFxucmVzdEFyZ0d1YXJkSXNSYXcsXG5wYXJhbXNQYXR0ZXJuLFxucmVkYWN0ZWRJbmRpY2VzfT1cbm1hdGNoQ29uZmlnO1xuXG4vL1xuLy9cbmxldCBtYXRjaGFibGVBcmdzPXN5bmNBcmdzO1xuaWYocmVzdEFyZ0d1YXJkSXNSYXcmJnN5bmNBcmdzLmxlbmd0aD5kZWNsYXJlZExlbil7XG5jb25zdCByZXN0TGVuPXN5bmNBcmdzLmxlbmd0aC1kZWNsYXJlZExlbjtcbmNvbnN0IHJlZGFjdGVkUmVzdD1BcnJheShyZXN0TGVuKS5maWxsKFJFREFDVEVEX1JBV19BUkcpO1xubWF0Y2hhYmxlQXJncz1bLi4uc3luY0FyZ3Muc2xpY2UoMCxkZWNsYXJlZExlbiksLi4ucmVkYWN0ZWRSZXN0XTtcbiB9ZWxzZSBpZihcbnJlZGFjdGVkSW5kaWNlcy5sZW5ndGg+MCYmXG5yZWRhY3RlZEluZGljZXNbMF08c3luY0FyZ3MubGVuZ3RoKVxue1xuLy9cbi8vXG5tYXRjaGFibGVBcmdzPVsuLi5zeW5jQXJnc107XG4gfVxuXG5mb3IoY29uc3QgaSBvZiByZWRhY3RlZEluZGljZXMpe1xuaWYoaT49bWF0Y2hhYmxlQXJncy5sZW5ndGgpe1xuYnJlYWs7XG4gfVxubWF0Y2hhYmxlQXJnc1tpXT1SRURBQ1RFRF9SQVdfQVJHO1xuIH1cblxubXVzdE1hdGNoKGhhcmRlbihtYXRjaGFibGVBcmdzKSxwYXJhbXNQYXR0ZXJuLGxhYmVsKTtcblxuaWYoaGFzUmVzdEFyZ0d1YXJkKXtcbnJldHVybiBzeW5jQXJncztcbiB9XG5zeW5jQXJncy5sZW5ndGg8PWRlY2xhcmVkTGVufHxcbkZhaWwgYCR7cShsYWJlbCl9IGFjY2VwdHMgYXQgbW9zdCAke3EoZGVjbGFyZWRMZW4pfSBhcmd1bWVudHMsIG5vdCAke3EoXG5zeW5jQXJncy5sZW5ndGgpXG4gfTogJHtzeW5jQXJnc31gO1xucmV0dXJuIHN5bmNBcmdzO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgYnVpbGRNYXRjaENvbmZpZz0obWV0aG9kR3VhcmRQYXlsb2FkKT0+e1xuY29uc3R7XG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcz1bXSxcbnJlc3RBcmdHdWFyZH09XG5tZXRob2RHdWFyZFBheWxvYWQ7XG5cbmNvbnN0IG1hdGNoYWJsZUFyZ0d1YXJkcz1bLi4uYXJnR3VhcmRzLC4uLm9wdGlvbmFsQXJnR3VhcmRzXTtcblxuY29uc3QgcmVkYWN0ZWRJbmRpY2VzPVtdO1xuZm9yKGxldCBpPTA7aTxtYXRjaGFibGVBcmdHdWFyZHMubGVuZ3RoO2krPTEpe1xuaWYoaXNSYXdHdWFyZChtYXRjaGFibGVBcmdHdWFyZHNbaV0pKXtcbm1hdGNoYWJsZUFyZ0d1YXJkc1tpXT1SRURBQ1RFRF9SQVdfQVJHO1xucmVkYWN0ZWRJbmRpY2VzLnB1c2goaSk7XG4gfVxuIH1cblxuLy9cbmxldCBtYXRjaGFibGVSZXN0QXJnR3VhcmQ9cmVzdEFyZ0d1YXJkO1xuaWYoaXNSYXdHdWFyZChtYXRjaGFibGVSZXN0QXJnR3VhcmQpKXtcbm1hdGNoYWJsZVJlc3RBcmdHdWFyZD1NLmFycmF5T2YoUkVEQUNURURfUkFXX0FSRyk7XG4gfVxuY29uc3QgbWF0Y2hhYmxlTWV0aG9kR3VhcmRQYXlsb2FkPWhhcmRlbih7XG4uLi5tZXRob2RHdWFyZFBheWxvYWQsXG5hcmdHdWFyZHM6bWF0Y2hhYmxlQXJnR3VhcmRzLnNsaWNlKDAsYXJnR3VhcmRzLmxlbmd0aCksXG5vcHRpb25hbEFyZ0d1YXJkczptYXRjaGFibGVBcmdHdWFyZHMuc2xpY2UoYXJnR3VhcmRzLmxlbmd0aCksXG5yZXN0QXJnR3VhcmQ6bWF0Y2hhYmxlUmVzdEFyZ0d1YXJkfSk7XG5cblxuY29uc3QgcGFyYW1zUGF0dGVybj1NLnNwbGl0QXJyYXkoXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQuYXJnR3VhcmRzLFxubWF0Y2hhYmxlTWV0aG9kR3VhcmRQYXlsb2FkLm9wdGlvbmFsQXJnR3VhcmRzLFxubWF0Y2hhYmxlTWV0aG9kR3VhcmRQYXlsb2FkLnJlc3RBcmdHdWFyZCk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5kZWNsYXJlZExlbjptYXRjaGFibGVBcmdHdWFyZHMubGVuZ3RoLFxuaGFzUmVzdEFyZ0d1YXJkOnJlc3RBcmdHdWFyZCE9PXVuZGVmaW5lZCxcbnJlc3RBcmdHdWFyZElzUmF3OnJlc3RBcmdHdWFyZCE9PW1hdGNoYWJsZVJlc3RBcmdHdWFyZCxcbnBhcmFtc1BhdHRlcm4sXG5yZWRhY3RlZEluZGljZXMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWR9KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRTeW5jTWV0aG9kPShcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKT0+XG57XG5jb25zdHtyZXR1cm5HdWFyZH09bWV0aG9kR3VhcmRQYXlsb2FkO1xuY29uc3QgaXNSYXdSZXR1cm49aXNSYXdHdWFyZChyZXR1cm5HdWFyZCk7XG5jb25zdCBtYXRjaENvbmZpZz1idWlsZE1hdGNoQ29uZmlnKG1ldGhvZEd1YXJkUGF5bG9hZCk7XG5jb25zdHtzeW5jTWV0aG9kfT17XG4vL1xuc3luY01ldGhvZCguLi5zeW5jQXJncyl7XG50cnl7XG5jb25zdCBjb250ZXh0PWdldENvbnRleHQodGhpcyk7XG4vL1xuY29uc3QgcmVhbEFyZ3M9ZGVmZW5kU3luY0FyZ3Moc3luY0FyZ3MsbWF0Y2hDb25maWcsbGFiZWwpO1xuY29uc3QgcmVzdWx0PWFwcGx5KGJlaGF2aW9yTWV0aG9kLGNvbnRleHQscmVhbEFyZ3MpO1xuaWYoIWlzUmF3UmV0dXJuKXtcbm11c3RNYXRjaChoYXJkZW4ocmVzdWx0KSxyZXR1cm5HdWFyZCwgYCR7bGFiZWx9OiByZXN1bHRgKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1jYXRjaCh0aHJvd25UaGluZyl7XG50aHJvdyB0b1Rocm93YWJsZSh0aHJvd25UaGluZyk7XG4gfVxuIH19O1xuXG5yZXR1cm4gc3luY01ldGhvZDtcbiB9O1xuXG4vKlxuXG4gKi9cbmNvbnN0IGRlc3luYz0obWV0aG9kR3VhcmRQYXlsb2FkKT0+e1xuY29uc3R7XG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcz1bXSxcbnJlc3RBcmdHdWFyZH09XG5tZXRob2RHdWFyZFBheWxvYWQ7XG4haXNBd2FpdEFyZ0d1YXJkKHJlc3RBcmdHdWFyZCl8fFxuRmFpbCBgUmVzdCBhcmdzIG1heSBub3QgYmUgYXdhaXRlZDogJHtyZXN0QXJnR3VhcmR9YDtcbmNvbnN0IHJhd0FyZ0d1YXJkcz1bLi4uYXJnR3VhcmRzLC4uLm9wdGlvbmFsQXJnR3VhcmRzXTtcblxuY29uc3QgYXdhaXRJbmRleGVzPVtdO1xuZm9yKGxldCBpPTA7aTxyYXdBcmdHdWFyZHMubGVuZ3RoO2krPTEpe1xuY29uc3QgYXJnR3VhcmQ9cmF3QXJnR3VhcmRzW2ldO1xuaWYoaXNBd2FpdEFyZ0d1YXJkKGFyZ0d1YXJkKSl7XG5yYXdBcmdHdWFyZHNbaV09Z2V0QXdhaXRBcmdHdWFyZFBheWxvYWQoYXJnR3VhcmQpLmFyZ0d1YXJkO1xuYXdhaXRJbmRleGVzLnB1c2goaSk7XG4gfVxuIH1cbnJldHVybntcbmF3YWl0SW5kZXhlcyxcbnJhd01ldGhvZEd1YXJkUGF5bG9hZDp7XG4uLi5tZXRob2RHdWFyZFBheWxvYWQsXG5hcmdHdWFyZHM6cmF3QXJnR3VhcmRzLnNsaWNlKDAsYXJnR3VhcmRzLmxlbmd0aCksXG5vcHRpb25hbEFyZ0d1YXJkczpyYXdBcmdHdWFyZHMuc2xpY2UoYXJnR3VhcmRzLmxlbmd0aCl9fTtcblxuXG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRBc3luY01ldGhvZD0oXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk9Plxue1xuY29uc3R7cmV0dXJuR3VhcmR9PW1ldGhvZEd1YXJkUGF5bG9hZDtcbmNvbnN0IGlzUmF3UmV0dXJuPWlzUmF3R3VhcmQocmV0dXJuR3VhcmQpO1xuXG5jb25zdHthd2FpdEluZGV4ZXMscmF3TWV0aG9kR3VhcmRQYXlsb2FkfT1kZXN5bmMobWV0aG9kR3VhcmRQYXlsb2FkKTtcbmNvbnN0IG1hdGNoQ29uZmlnPWJ1aWxkTWF0Y2hDb25maWcocmF3TWV0aG9kR3VhcmRQYXlsb2FkKTtcblxuY29uc3R7YXN5bmNNZXRob2R9PXtcbi8vXG5hc3luY01ldGhvZCguLi5hcmdzKXtcbmNvbnN0IGF3YWl0TGlzdD1bXTtcbmZvcihjb25zdCBpIG9mIGF3YWl0SW5kZXhlcyl7XG5pZihpPj1hcmdzLmxlbmd0aCl7XG5icmVhaztcbiB9XG5hd2FpdExpc3QucHVzaChhcmdzW2ldKTtcbiB9XG5jb25zdCBwPVByb21pc2UuYWxsKGF3YWl0TGlzdCk7XG5jb25zdCBzeW5jQXJncz1bLi4uYXJnc107XG5jb25zdCByZXN1bHRQPUUud2hlbihcbnAsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8oYXdhaXRlZEFyZ3MpPT57XG5mb3IobGV0IGo9MDtqPGF3YWl0ZWRBcmdzLmxlbmd0aDtqKz0xKXtcbnN5bmNBcmdzW2F3YWl0SW5kZXhlc1tqXV09YXdhaXRlZEFyZ3Nbal07XG4gfVxuLy9cbi8vXG5jb25zdCBjb250ZXh0PWdldENvbnRleHQodGhpcyk7XG5jb25zdCByZWFsQXJncz1kZWZlbmRTeW5jQXJncyhzeW5jQXJncyxtYXRjaENvbmZpZyxsYWJlbCk7XG5yZXR1cm4gYXBwbHkoYmVoYXZpb3JNZXRob2QsY29udGV4dCxyZWFsQXJncyk7XG4gfSk7XG5cbnJldHVybiBFLndoZW4ocmVzdWx0UCwoZnVsZmlsbG1lbnQpPT57XG5pZighaXNSYXdSZXR1cm4pe1xubXVzdE1hdGNoKGhhcmRlbihmdWxmaWxsbWVudCkscmV0dXJuR3VhcmQsIGAke2xhYmVsfTogcmVzdWx0YCk7XG4gfVxucmV0dXJuIGZ1bGZpbGxtZW50O1xuIH0pLmNhdGNoKChyZWFzb24pPT5cbi8vXG4vL1xuUHJvbWlzZS5yZWplY3QodG9UaHJvd2FibGUocmVhc29uKSkpO1xuXG4gfX07XG5cbnJldHVybiBhc3luY01ldGhvZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgZGVmZW5kTWV0aG9kPShnZXRDb250ZXh0LGJlaGF2aW9yTWV0aG9kLG1ldGhvZEd1YXJkLGxhYmVsKT0+e1xuY29uc3QgbWV0aG9kR3VhcmRQYXlsb2FkPWdldE1ldGhvZEd1YXJkUGF5bG9hZChtZXRob2RHdWFyZCk7XG5jb25zdHtjYWxsS2luZH09bWV0aG9kR3VhcmRQYXlsb2FkO1xuaWYoY2FsbEtpbmQ9PT0nc3luYycpe1xucmV0dXJuIGRlZmVuZFN5bmNNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk7XG5cbiB9ZWxzZXtcbmFzc2VydChjYWxsS2luZD09PSdhc3luYycpO1xucmV0dXJuIGRlZmVuZEFzeW5jTWV0aG9kKFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmRQYXlsb2FkLFxubGFiZWwpO1xuXG4gfVxuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgYmluZE1ldGhvZD0oXG5tZXRob2RUYWcsXG5jb250ZXh0UHJvdmlkZXIsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkKT0+XG57XG5hc3NlcnQudHlwZW9mKGJlaGF2aW9yTWV0aG9kLCdmdW5jdGlvbicpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBnZXRDb250ZXh0PShyZXByZXNlbnRhdGl2ZSk9PntcbnJlcHJlc2VudGF0aXZlfHxcbi8vXG5GYWlsIGBNZXRob2QgJHttZXRob2RUYWd9IGNhbGxlZCB3aXRob3V0ICd0aGlzJyBvYmplY3RgO1xuY29uc3QgY29udGV4dD1jb250ZXh0UHJvdmlkZXIocmVwcmVzZW50YXRpdmUpO1xuaWYoY29udGV4dD09PXVuZGVmaW5lZCl7XG50aHJvdyBGYWlsIGAke3EoXG5tZXRob2RUYWcpXG4gfSBtYXkgb25seSBiZSBhcHBsaWVkIHRvIGEgdmFsaWQgaW5zdGFuY2U6ICR7cmVwcmVzZW50YXRpdmV9YDtcbiB9XG5yZXR1cm4gY29udGV4dDtcbiB9O1xuXG5jb25zdCBtZXRob2Q9ZGVmZW5kTWV0aG9kKFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmQsXG5tZXRob2RUYWcpO1xuXG5cbmRlZmluZVByb3BlcnRpZXMobWV0aG9kLHtcbm5hbWU6e3ZhbHVlOm1ldGhvZFRhZ30sXG5sZW5ndGg6e3ZhbHVlOmJlaGF2aW9yTWV0aG9kLmxlbmd0aH19KTtcblxucmV0dXJuIG1ldGhvZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmZW5kUHJvdG90eXBlPShcbnRhZyxcbmNvbnRleHRQcm92aWRlcixcbmJlaGF2aW9yTWV0aG9kcyxcbnRoaXNmdWxNZXRob2RzPWZhbHNlLFxuaW50ZXJmYWNlR3VhcmQ9dW5kZWZpbmVkKT0+XG57XG5jb25zdCBwcm90b3R5cGU9e307XG5jb25zdCBtZXRob2ROYW1lcz1nZXRNZXRob2ROYW1lcyhiZWhhdmlvck1ldGhvZHMpLmZpbHRlcihcbi8vXG4vL1xuKGtleSk9PntcbmlmKGtleSE9PSdjb25zdHJ1Y3Rvcicpe1xucmV0dXJuIHRydWU7XG4gfVxuY29uc3QgY29uc3RydWN0b3I9YmVoYXZpb3JNZXRob2RzLmNvbnN0cnVjdG9yO1xucmV0dXJuIShcbmNvbnN0cnVjdG9yLnByb3RvdHlwZSYmXG5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3I9PT1jb25zdHJ1Y3Rvcik7XG5cbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBtZXRob2RHdWFyZHM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGRlZmF1bHRHdWFyZHM7XG5pZihpbnRlcmZhY2VHdWFyZCl7XG5jb25zdHtcbmludGVyZmFjZU5hbWUsXG5tZXRob2RHdWFyZHM6bWcsXG5zeW1ib2xNZXRob2RHdWFyZHMsXG5zbG9wcHksXG5kZWZhdWx0R3VhcmRzOmRnPXNsb3BweT8ncGFzc2FibGUnOmRlZmF1bHRHdWFyZHN9PVxuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKGludGVyZmFjZUd1YXJkKTtcbm1ldGhvZEd1YXJkcz1oYXJkZW4oe1xuLi4ubWcsXG4uLi4oc3ltYm9sTWV0aG9kR3VhcmRzJiZcbmZyb21FbnRyaWVzKGdldENvcHlNYXBFbnRyaWVzKHN5bWJvbE1ldGhvZEd1YXJkcykpKX0pO1xuXG5kZWZhdWx0R3VhcmRzPWRnO1xue1xuY29uc3QgbWV0aG9kR3VhcmROYW1lcz1vd25LZXlzKG1ldGhvZEd1YXJkcyk7XG5jb25zdCB1bmltcGxlbWVudGVkPWxpc3REaWZmZXJlbmNlKG1ldGhvZEd1YXJkTmFtZXMsbWV0aG9kTmFtZXMpO1xudW5pbXBsZW1lbnRlZC5sZW5ndGg9PT0wfHxcbkZhaWwgYG1ldGhvZHMgJHtxKHVuaW1wbGVtZW50ZWQpfSBub3QgaW1wbGVtZW50ZWQgYnkgJHtxKHRhZyl9YDtcbmlmKGRlZmF1bHRHdWFyZHM9PT11bmRlZmluZWQpe1xuY29uc3QgdW5ndWFyZGVkPWxpc3REaWZmZXJlbmNlKG1ldGhvZE5hbWVzLG1ldGhvZEd1YXJkTmFtZXMpO1xudW5ndWFyZGVkLmxlbmd0aD09PTB8fFxuRmFpbCBgbWV0aG9kcyAke3EodW5ndWFyZGVkKX0gbm90IGd1YXJkZWQgYnkgJHtxKGludGVyZmFjZU5hbWUpfWA7XG4gfVxuIH1cbiB9XG5cbmZvcihjb25zdCBwcm9wIG9mIG1ldGhvZE5hbWVzKXtcbmNvbnN0IG9yaWdpbmFsTWV0aG9kPWJlaGF2aW9yTWV0aG9kc1twcm9wXTtcbmNvbnN0e3NoaWZ0ZWRNZXRob2R9PXtcbnNoaWZ0ZWRNZXRob2QoLi4uYXJncyl7XG5yZXR1cm4gb3JpZ2luYWxNZXRob2QodGhpcywuLi5hcmdzKTtcbiB9fTtcblxuY29uc3QgYmVoYXZpb3JNZXRob2Q9dGhpc2Z1bE1ldGhvZHM/b3JpZ2luYWxNZXRob2Q6c2hpZnRlZE1ldGhvZDtcbi8vXG4vL1xubGV0IG1ldGhvZEd1YXJkPW1ldGhvZEd1YXJkcyYmbWV0aG9kR3VhcmRzW3Byb3BdO1xuaWYoIW1ldGhvZEd1YXJkKXtcbnN3aXRjaChkZWZhdWx0R3VhcmRzKXtcbmNhc2UgdW5kZWZpbmVkOntcbmlmKHRoaXNmdWxNZXRob2RzKXtcbm1ldGhvZEd1YXJkPVBhc3NhYmxlTWV0aG9kR3VhcmQ7XG4gfWVsc2V7XG5tZXRob2RHdWFyZD1SYXdNZXRob2RHdWFyZDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3Bhc3NhYmxlJzp7XG5tZXRob2RHdWFyZD1QYXNzYWJsZU1ldGhvZEd1YXJkO1xuYnJlYWs7XG4gfVxuY2FzZSdyYXcnOntcbm1ldGhvZEd1YXJkPVJhd01ldGhvZEd1YXJkO1xuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgZGVmYXVsdEd1YXJkcyAke3EoZGVmYXVsdEd1YXJkcyl9YDtcbiB9fVxuXG4gfVxucHJvdG90eXBlW3Byb3BdPWJpbmRNZXRob2QoXG4gYEluICR7cShwcm9wKX0gbWV0aG9kIG9mICgke3RhZ30pYCxcbmNvbnRleHRQcm92aWRlcixcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmQpO1xuXG4gfVxuXG5pZighaGFzT3duUHJvcGVydHlPZihwcm90b3R5cGUsR0VUX0lOVEVSRkFDRV9HVUFSRCkpe1xuY29uc3QgZ2V0SW50ZXJmYWNlR3VhcmRNZXRob2Q9e1xuW0dFVF9JTlRFUkZBQ0VfR1VBUkRdKCl7XG4vL1xucmV0dXJuIGludGVyZmFjZUd1YXJkO1xuIH19W1xuR0VUX0lOVEVSRkFDRV9HVUFSRF07XG5wcm90b3R5cGVbR0VUX0lOVEVSRkFDRV9HVUFSRF09YmluZE1ldGhvZChcbiBgSW4gJHtxKEdFVF9JTlRFUkZBQ0VfR1VBUkQpfSBtZXRob2Qgb2YgKCR7dGFnfSlgLFxuY29udGV4dFByb3ZpZGVyLFxuZ2V0SW50ZXJmYWNlR3VhcmRNZXRob2QsXG5QYXNzYWJsZU1ldGhvZEd1YXJkKTtcblxuIH1cblxucmV0dXJuIEZhcihcbnRhZyxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wcm90b3R5cGUpO1xuXG5cbiB9OyRo4oCNX29uY2UuZGVmZW5kUHJvdG90eXBlKGRlZmVuZFByb3RvdHlwZSk7XG5oYXJkZW4oZGVmZW5kUHJvdG90eXBlKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmVuZFByb3RvdHlwZUtpdD0oXG50YWcsXG5jb250ZXh0UHJvdmlkZXJLaXQsXG5iZWhhdmlvck1ldGhvZHNLaXQsXG50aGlzZnVsTWV0aG9kcz1mYWxzZSxcbmludGVyZmFjZUd1YXJkS2l0PXVuZGVmaW5lZCk9Plxue1xuY29uc3QgZmFjZXROYW1lcz1vd25LZXlzKGJlaGF2aW9yTWV0aG9kc0tpdCkuc29ydCgpO1xuZmFjZXROYW1lcy5sZW5ndGg+MXx8RmFpbCBgQSBtdWx0aS1mYWNldCBvYmplY3QgbXVzdCBoYXZlIG11bHRpcGxlIGZhY2V0c2A7XG5pZihpbnRlcmZhY2VHdWFyZEtpdCl7XG5jb25zdCBpbnRlcmZhY2VOYW1lcz1vd25LZXlzKGludGVyZmFjZUd1YXJkS2l0KTtcbmNvbnN0IGV4dHJhSW50ZXJmYWNlTmFtZXM9bGlzdERpZmZlcmVuY2UoZmFjZXROYW1lcyxpbnRlcmZhY2VOYW1lcyk7XG5leHRyYUludGVyZmFjZU5hbWVzLmxlbmd0aD09PTB8fFxuRmFpbCBgSW50ZXJmYWNlcyAke3EoZXh0cmFJbnRlcmZhY2VOYW1lcyl9IG5vdCBpbXBsZW1lbnRlZCBieSAke3EodGFnKX1gO1xuY29uc3QgZXh0cmFGYWNldE5hbWVzPWxpc3REaWZmZXJlbmNlKGludGVyZmFjZU5hbWVzLGZhY2V0TmFtZXMpO1xuZXh0cmFGYWNldE5hbWVzLmxlbmd0aD09PTB8fFxuRmFpbCBgRmFjZXRzICR7cShleHRyYUZhY2V0TmFtZXMpfSBvZiAke3EodGFnKX0gbm90IGd1YXJkZWQgYnkgaW50ZXJmYWNlc2A7XG4gfVxuY29uc3QgY29udGV4dE1hcE5hbWVzPW93bktleXMoY29udGV4dFByb3ZpZGVyS2l0KTtcbmNvbnN0IGV4dHJhQ29udGV4dE5hbWVzPWxpc3REaWZmZXJlbmNlKGZhY2V0TmFtZXMsY29udGV4dE1hcE5hbWVzKTtcbmV4dHJhQ29udGV4dE5hbWVzLmxlbmd0aD09PTB8fFxuRmFpbCBgQ29udGV4dHMgJHtxKGV4dHJhQ29udGV4dE5hbWVzKX0gbm90IGltcGxlbWVudGVkIGJ5ICR7cSh0YWcpfWA7XG5jb25zdCBleHRyYUZhY2V0TmFtZXM9bGlzdERpZmZlcmVuY2UoY29udGV4dE1hcE5hbWVzLGZhY2V0TmFtZXMpO1xuZXh0cmFGYWNldE5hbWVzLmxlbmd0aD09PTB8fFxuRmFpbCBgRmFjZXRzICR7cShleHRyYUZhY2V0TmFtZXMpfSBvZiAke3EodGFnKX0gbWlzc2luZyBjb250ZXh0c2A7XG5jb25zdCBwcm90b0tpdD1vYmplY3RNYXAoYmVoYXZpb3JNZXRob2RzS2l0LChiZWhhdmlvck1ldGhvZHMsZmFjZXROYW1lKT0+XG5kZWZlbmRQcm90b3R5cGUoXG4gYCR7dGFnfSAke1N0cmluZyhmYWNldE5hbWUpfWAsXG5jb250ZXh0UHJvdmlkZXJLaXRbZmFjZXROYW1lXSxcbmJlaGF2aW9yTWV0aG9kcyxcbnRoaXNmdWxNZXRob2RzLFxuaW50ZXJmYWNlR3VhcmRLaXQmJmludGVyZmFjZUd1YXJkS2l0W2ZhY2V0TmFtZV0pKTtcblxuXG5yZXR1cm4gcHJvdG9LaXQ7XG4gfTskaOKAjV9vbmNlLmRlZmVuZFByb3RvdHlwZUtpdChkZWZlbmRQcm90b3R5cGVLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmZW5kUHJvdG90eXBlIjpbImRlZmVuZFByb3RvdHlwZSJdLCJkZWZlbmRQcm90b3R5cGVLaXQiOlsiZGVmZW5kUHJvdG90eXBlS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHK1B888AgAAPAIAACUAAABAZW5kby9leG8tdjEuNS4zL3NyYy9nZXQtaW50ZXJmYWNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJHRVRfSU5URVJGQUNFX0dVQVJEIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgR0VUX0lOVEVSRkFDRV9HVUFSRD0nX19nZXRJbnRlcmZhY2VHdWFyZF9fJztcblxuLypcblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5HRVRfSU5URVJGQUNFX0dVQVJEKEdFVF9JTlRFUkZBQ0VfR1VBUkQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiR0VUX0lOVEVSRkFDRV9HVUFSRCI6WyJHRVRfSU5URVJGQUNFX0dVQVJEIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAAB0AAABAZW5kby9leG8tdjEuNS4zL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAANLyANWwIAAFsCAAAdAAAAQGVuZG8vZmFyLXYxLjEuNS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Bhc3Mtc3R5bGUiXSwiZXhwb3J0cyI6WyJnZXRJbnRlcmZhY2VPZiIsImdldEludGVyZmFjZU9mIixudWxsXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7IkBlbmRvL2V2ZW50dWFsLXNlbmQiOltbIkUiLCJFIl1dLCJAZW5kby9wYXNzLXN0eWxlIjpbWyJGYXIiLCJGYXIiXSxbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXSxbInBhc3NTdHlsZU9mIiwicGFzc1N0eWxlT2YiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIjgb/J5BwAAeQcAAB0AAABAZW5kby9tYXJzaGFsLXYxLjUuMy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiLCIuL3NyYy9tYXJzaGFsLmpzIiwiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiLCIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qcyIsIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzIiwiLi9zcmMvcmFua09yZGVyLmpzIiwiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9wYXNzLXN0eWxlIl0sImV4cG9ydHMiOlsiYXNzZXJ0UmFua1NvcnRlZCIsImFzc2VydFJhbmtTb3J0ZWQiLCJtYWtlRW5jb2RlUGFzc2FibGUiLCJtYWtlRW5jb2RlUGFzc2FibGUiLCJwYXJzZSIsInBhcnNlIixudWxsLG51bGwsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vc3JjL3R5cGVzLmpzIiwiQGVuZG8vcGFzcy1zdHlsZSJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtbXCIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzXCIsIFtdXSxbXCIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qc1wiLCBbXV0sW1wiLi9zcmMvZW5jb2RlUGFzc2FibGUuanNcIiwgW11dLFtcIi4vc3JjL3JhbmtPcmRlci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiOltbIlFDTEFTUyIsIlFDTEFTUyJdXSwiLi9zcmMvbWFyc2hhbC5qcyI6W1sibWFrZU1hcnNoYWwiLCJtYWtlTWFyc2hhbCJdXSwiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiOltbInN0cmluZ2lmeSIsInN0cmluZ2lmeSJdLFsicGFyc2UiLCJwYXJzZSJdXSwiLi9zcmMvbWFyc2hhbC1qdXN0aW4uanMiOltbImRlY29kZVRvSnVzdGluIiwiZGVjb2RlVG9KdXN0aW4iXV0sIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzIjpbWyJtYWtlUGFzc2FibGVLaXQiLCJtYWtlUGFzc2FibGVLaXQiXSxbIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSJdLFsibWFrZURlY29kZVBhc3NhYmxlIiwibWFrZURlY29kZVBhc3NhYmxlIl0sWyJpc0VuY29kZWRSZW1vdGFibGUiLCJpc0VuY29kZWRSZW1vdGFibGUiXSxbInplcm9QYWQiLCJ6ZXJvUGFkIl0sWyJyZWNvcmROYW1lcyIsInJlY29yZE5hbWVzIl0sWyJyZWNvcmRWYWx1ZXMiLCJyZWNvcmRWYWx1ZXMiXV0sIi4vc3JjL3JhbmtPcmRlci5qcyI6W1sidHJpdmlhbENvbXBhcmF0b3IiLCJ0cml2aWFsQ29tcGFyYXRvciJdLFsiYXNzZXJ0UmFua1NvcnRlZCIsImFzc2VydFJhbmtTb3J0ZWQiXSxbImNvbXBhcmVSYW5rIiwiY29tcGFyZVJhbmsiXSxbImlzUmFua1NvcnRlZCIsImlzUmFua1NvcnRlZCJdLFsic29ydEJ5UmFuayIsInNvcnRCeVJhbmsiXSxbImNvbXBhcmVBbnRpUmFuayIsImNvbXBhcmVBbnRpUmFuayJdLFsibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiLCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCJdLFsiZ2V0UGFzc1N0eWxlQ292ZXIiLCJnZXRQYXNzU3R5bGVDb3ZlciJdLFsiaW50ZXJzZWN0UmFua0NvdmVycyIsImludGVyc2VjdFJhbmtDb3ZlcnMiXSxbInVuaW9uUmFua0NvdmVycyIsInVuaW9uUmFua0NvdmVycyJdXSwiQGVuZG8vcGFzcy1zdHlsZSI6W1siZGVlcGx5RnVsZmlsbGVkIiwiZGVlcGx5RnVsZmlsbGVkIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABy5/BxbkMAAG5DAAAqAAAAQGVuZG8vbWFyc2hhbC12MS41LjMvc3JjL2VuY29kZVBhc3NhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJpc0VuY29kZWRSZW1vdGFibGUiLCJtYWtlRGVjb2RlUGFzc2FibGUiLCJtYWtlRW5jb2RlUGFzc2FibGUiLCJtYWtlUGFzc2FibGVLaXQiLCJwYXNzU3R5bGVQcmVmaXhlcyIsInJlY29yZE5hbWVzIiwicmVjb3JkVmFsdWVzIiwiemVyb1BhZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0VGFnLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsYXNzZXJ0UmVjb3JkLGlzRXJyb3JMaWtlLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsYixxLEZhaWw7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiZ2V0VGFnXCIsIFskaOKAjV9hID0+IChnZXRUYWcgPSAkaOKAjV9hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRo4oCNX2EgPT4gKG1ha2VUYWdnZWQgPSAkaOKAjV9hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaOKAjV9hID0+IChwYXNzU3R5bGVPZiA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0UmVjb3JkXCIsIFskaOKAjV9hID0+IChhc3NlcnRSZWNvcmQgPSAkaOKAjV9hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaOKAjV9hID0+IChpc0Vycm9yTGlrZSA9ICRo4oCNX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaOKAjV9hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaOKAjV9hKV1dLFtcInBhc3NhYmxlU3ltYm9sRm9yTmFtZVwiLCBbJGjigI1fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYlwiLCBbJGjigI1fYSA9PiAoYiA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e2Zyb21FbnRyaWVzLGlzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vL1xuY29uc3QgckMwPS9bXFx4MDAtXFx4MUZdLztcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBnZXRTdWZmaXg9KHN0cixpbmRleCk9PmluZGV4PT09MD9zdHI6c3RyLnN1YnN0cmluZyhpbmRleCk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHJlY29yZE5hbWVzPShyZWNvcmQpPT5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuaGFyZGVuKC8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhyZWNvcmQpLnNvcnQoKS5yZXZlcnNlKCkpOyRo4oCNX29uY2UucmVjb3JkTmFtZXMocmVjb3JkTmFtZXMpO1xuaGFyZGVuKHJlY29yZE5hbWVzKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcmVjb3JkVmFsdWVzPShyZWNvcmQsbmFtZXMpPT5cbmhhcmRlbihuYW1lcy5tYXAoKG5hbWUpPT5yZWNvcmRbbmFtZV0pKTskaOKAjV9vbmNlLnJlY29yZFZhbHVlcyhyZWNvcmRWYWx1ZXMpO1xuaGFyZGVuKHJlY29yZFZhbHVlcyk7XG5cbmNvbnN0IHplcm9lcz1BcnJheSgxNikuXG5maWxsKHVuZGVmaW5lZCkuXG5tYXAoKF8saSk9PicwJy5yZXBlYXQoaSkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgemVyb1BhZD0obixzaXplKT0+e1xuY29uc3QgblN0cj0gYCR7bn1gO1xuY29uc3QgZmlsbExlbj1zaXplLW5TdHIubGVuZ3RoO1xuaWYoZmlsbExlbj09PTApcmV0dXJuIG5TdHI7XG5hc3NlcnQoZmlsbExlbj4wJiZmaWxsTGVuPHplcm9lcy5sZW5ndGgpO1xucmV0dXJuIGAke3plcm9lc1tmaWxsTGVuXX0ke25TdHJ9YDtcbiB9OyRo4oCNX29uY2UuemVyb1BhZCh6ZXJvUGFkKTtcbmhhcmRlbih6ZXJvUGFkKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBhc051bWJlcj1uZXcgRmxvYXQ2NEFycmF5KDEpO1xuY29uc3QgYXNCaXRzPW5ldyBCaWdVaW50NjRBcnJheShhc051bWJlci5idWZmZXIpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG5jb25zdCBDYW5vbmljYWxOYU5CaXRzPSdmZmY4MDAwMDAwMDAwMDAwJztcblxuLypcblxuXG4gKi9cbmNvbnN0IGVuY29kZUJpbmFyeTY0PShuKT0+e1xuLy9cbmlmKGlzKG4sLTApKXtcbm49MDtcbiB9ZWxzZSBpZihpcyhuLE5hTikpe1xucmV0dXJuIGBmJHtDYW5vbmljYWxOYU5CaXRzfWA7XG4gfVxuYXNOdW1iZXJbMF09bjtcbmxldCBiaXRzPWFzQml0c1swXTtcbmlmKG48MCl7XG5iaXRzXj0weGZmZmZmZmZmZmZmZmZmZmZuO1xuIH1lbHNle1xuYml0c149MHg4MDAwMDAwMDAwMDAwMDAwbjtcbiB9XG5yZXR1cm4gYGYke3plcm9QYWQoYml0cy50b1N0cmluZygxNiksMTYpfWA7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQmluYXJ5NjQ9KGVuY29kZWQsc2tpcD0wKT0+e1xuZW5jb2RlZC5jaGFyQXQoc2tpcCk9PT0nZid8fEZhaWwgYEVuY29kZWQgbnVtYmVyIGV4cGVjdGVkOiAke2VuY29kZWR9YDtcbmxldCBiaXRzPUJpZ0ludCggYDB4JHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpfWApO1xuaWYoZW5jb2RlZC5jaGFyQXQoc2tpcCsxKTwnOCcpe1xuYml0c149MHhmZmZmZmZmZmZmZmZmZmZmbjtcbiB9ZWxzZXtcbmJpdHNePTB4ODAwMDAwMDAwMDAwMDAwMG47XG4gfVxuYXNCaXRzWzBdPWJpdHM7XG5jb25zdCByZXN1bHQ9YXNOdW1iZXJbMF07XG4haXMocmVzdWx0LC0wKXx8XG5GYWlsIGBVbmV4cGVjdGVkIG5lZ2F0aXZlIHplcm86ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQmlnSW50PShuKT0+e1xuY29uc3QgYWJzPW48MG4/LW46bjtcbmNvbnN0IG5EaWdpdHM9YWJzLnRvU3RyaW5nKCkubGVuZ3RoO1xuY29uc3QgbERpZ2l0cz1uRGlnaXRzLnRvU3RyaW5nKCkubGVuZ3RoO1xuaWYobjwwbil7XG5yZXR1cm4gYG4ke1xuLy9cbi8vXG4nIycucmVwZWF0KGxEaWdpdHMtMSlcbiB9JHtcbi8vXG4oMTAqKmxEaWdpdHMtbkRpZ2l0cykudG9TdHJpbmcoKS5wYWRTdGFydChsRGlnaXRzLCcwJylcbiB9OiR7XG4vL1xuKDEwbioqQmlnSW50KG5EaWdpdHMpK24pLnRvU3RyaW5nKCkucGFkU3RhcnQobkRpZ2l0cywnMCcpXG4gfWA7XG4gfWVsc2V7XG5yZXR1cm4gYHAke1xuLy9cbi8vXG4nficucmVwZWF0KGxEaWdpdHMtMSlcbiB9JHtcbi8vXG5uRGlnaXRzXG4gfToke1xuLy9cbm5cbiB9YDtcbiB9XG4gfTtcblxuY29uc3QgckJpZ0ludFBheWxvYWQ9LyhbMC05XSspKDooWzAtOV0rJHwpfCkvcztcblxuLypcblxuXG4gKi9cbmNvbnN0IGRlY29kZUJpZ0ludD0oZW5jb2RlZCk9PntcbmNvbnN0IHR5cGVQcmVmaXg9ZW5jb2RlZC5jaGFyQXQoMCk7Ly9cbnR5cGVQcmVmaXg9PT0ncCd8fFxudHlwZVByZWZpeD09PSduJ3x8XG5GYWlsIGBFbmNvZGVkIGJpZ2ludCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5cbmNvbnN0e1xuaW5kZXg6bERpZ2l0cyxcbjE6c25EaWdpdHMsXG4yOnRhaWwsXG4zOmRpZ2l0c309XG5lbmNvZGVkLm1hdGNoKHJCaWdJbnRQYXlsb2FkKXx8RmFpbCBgRGlnaXQgY291bnQgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xuXG5zbkRpZ2l0cy5sZW5ndGg9PT1sRGlnaXRzfHxcbkZhaWwgYFVuYXJ5LXByZWZpeGVkIGRlY2ltYWwgZGlnaXQgY291bnQgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IG5EaWdpdHM9cGFyc2VJbnQoc25EaWdpdHMsMTApO1xuaWYodHlwZVByZWZpeD09PSduJyl7XG4vL1xuLy9cbm5EaWdpdHM9MTAqKi8qICAgICAgICAgICAgICAgICAqL2xEaWdpdHMtbkRpZ2l0cztcbiB9XG5cbnRhaWwuY2hhckF0KDApPT09JzonfHxGYWlsIGBTZXBhcmF0b3IgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xuZGlnaXRzLmxlbmd0aD09PW5EaWdpdHN8fFxuRmFpbCBgRml4ZWQtbGVuZ3RoIGRpZ2l0IHNlcXVlbmNlIGV4cGVjdGVkOiAke2VuY29kZWR9YDtcbmxldCBuPUJpZ0ludChkaWdpdHMpO1xuaWYodHlwZVByZWZpeD09PSduJyl7XG4vL1xuLy9cbm49LSgxMG4qKkJpZ0ludChuRGlnaXRzKS1uKTtcbiB9XG5cbnJldHVybiBuO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc3RyaW5nRXNjYXBlcz1BcnJheSgweDIyKS5cbmZpbGwodW5kZWZpbmVkKS5cbm1hcCgoXyxjcCk9PntcbnN3aXRjaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKSl7XG5jYXNlJyAnOlxucmV0dXJuJyFfJztcbmNhc2UnISc6XG5yZXR1cm4nIXwnO1xuZGVmYXVsdDpcbnJldHVybiBgISR7U3RyaW5nLmZyb21DaGFyQ29kZShjcCsweDIxKX1gO31cblxuIH0pO1xuc3RyaW5nRXNjYXBlc1snXicuY2hhckNvZGVBdCgwKV09J19AJztcbnN0cmluZ0VzY2FwZXNbJ18nLmNoYXJDb2RlQXQoMCldPSdfXyc7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUNvbXBhY3RTdHJpbmdTdWZmaXg9KHN0cik9Plxuc3RyLnJlcGxhY2UoL1tcXDAtIV5fXS9nLChjaCk9PnN0cmluZ0VzY2FwZXNbY2guY2hhckNvZGVBdCgwKV0pO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVDb21wYWN0U3RyaW5nU3VmZml4PShlbmNvZGVkKT0+e1xucmV0dXJuIGVuY29kZWQucmVwbGFjZSgvKFtcXDAtIV9dKSgufFxcbik/L2csKGVzYyxwcmVmaXgsc3VmZml4KT0+e1xuc3dpdGNoKGVzYyl7XG5jYXNlJyFfJzpcbnJldHVybicgJztcbmNhc2UnIXwnOlxucmV0dXJuJyEnO1xuY2FzZSdfQCc6XG5yZXR1cm4nXic7XG5jYXNlJ19fJzpcbnJldHVybidfJztcbmRlZmF1bHQ6e1xuY29uc3QgY2g9LyogICAgICAgICAgICAgICAgICovc3VmZml4O1xuLy9cbi8vXG5wcmVmaXg9PT0nIScmJnN1ZmZpeCE9PXVuZGVmaW5lZCYmY2g+PSchJyYmY2g8PSdAJ3x8XG5GYWlsIGBpbnZhbGlkIHN0cmluZyBlc2NhcGU6ICR7cShlc2MpfWA7XG5yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaC5jaGFyQ29kZUF0KDApLTB4MjEpO1xuIH19XG5cbiB9KTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBlbmNvZGVMZWdhY3lTdHJpbmdTdWZmaXg9KHN0cik9PnN0cjtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlTGVnYWN5U3RyaW5nU3VmZml4PShlbmNvZGVkKT0+ZW5jb2RlZDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVDb21wYWN0QXJyYXk9KGFycmF5LGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgY2hhcnM9WydeJ107XG5mb3IoY29uc3QgZWxlbWVudCBvZiBhcnJheSl7XG5jb25zdCBlbmM9ZW5jb2RlUGFzc2FibGUoZWxlbWVudCk7XG5jaGFycy5wdXNoKGVuYywnICcpO1xuIH1cbnJldHVybiBjaGFycy5qb2luKCcnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUNvbXBhY3RBcnJheT0oZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwPTApPT57XG5jb25zdCBlbGVtZW50cz1bXTtcbmxldCBkZXB0aD0wO1xuLy9cbi8vXG5sZXQgbmV4dEluZGV4PXNraXArMTtcbmxldCBjdXJyZW50RWxlbWVudFN0YXJ0PXNraXArMTtcbmZvcihjb25zdHswOmNoLGluZGV4Oml9b2YgZW5jb2RlZC5tYXRjaEFsbCgvW1xcXiBdL2cpKXtcbmNvbnN0IGluZGV4PS8qICAgICAgICAgICAgICAgICAqL2k7XG5pZihpbmRleDw9c2tpcCl7XG5pZihpbmRleD09PXNraXApe1xuY2g9PT0nXid8fEZhaWwgYEVuY29kZWQgYXJyYXkgZXhwZWN0ZWQ6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9XG4gfWVsc2UgaWYoY2g9PT0nXicpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5kZXB0aCs9MTtcbiB9ZWxzZXtcbi8vXG5pZihpbmRleD09PW5leHRJbmRleCl7XG4vL1xuZGVwdGgtPTE7XG5kZXB0aD49MHx8XG4vL1xuRmFpbCBgdW5leHBlY3RlZCBhcnJheSBlbGVtZW50IHRlcm1pbmF0b3I6ICR7ZW5jb2RlZC5zbGljZShza2lwLGluZGV4KzIpfWA7XG4gfVxuaWYoZGVwdGg9PT0wKXtcbi8vXG5lbGVtZW50cy5wdXNoKFxuZGVjb2RlUGFzc2FibGUoZW5jb2RlZC5zbGljZShjdXJyZW50RWxlbWVudFN0YXJ0LGluZGV4KSkpO1xuXG5jdXJyZW50RWxlbWVudFN0YXJ0PWluZGV4KzE7XG4gfVxuIH1cbi8vXG5uZXh0SW5kZXg9aW5kZXgrMTtcbiB9XG5kZXB0aD09PTB8fEZhaWwgYHVudGVybWluYXRlZCBhcnJheTogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xubmV4dEluZGV4PT09ZW5jb2RlZC5sZW5ndGh8fFxuRmFpbCBgdW50ZXJtaW5hdGVkIGFycmF5IGVsZW1lbnQ6ICR7Z2V0U3VmZml4KFxuZW5jb2RlZCxcbmN1cnJlbnRFbGVtZW50U3RhcnQpXG4gfWA7XG5yZXR1cm4gaGFyZGVuKGVsZW1lbnRzKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVMZWdhY3lBcnJheT0oYXJyYXksZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBjaGFycz1bJ1snXTtcbmZvcihjb25zdCBlbGVtZW50IG9mIGFycmF5KXtcbmNvbnN0IGVuYz1lbmNvZGVQYXNzYWJsZShlbGVtZW50KTtcbmZvcihjb25zdCBjIG9mIGVuYyl7XG5pZihjPT09J1xcdTAwMDAnfHxjPT09J1xcdTAwMDEnKXtcbmNoYXJzLnB1c2goJ1xcdTAwMDEnKTtcbiB9XG5jaGFycy5wdXNoKGMpO1xuIH1cbmNoYXJzLnB1c2goJ1xcdTAwMDAnKTtcbiB9XG5yZXR1cm4gY2hhcnMuam9pbignJyk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWNvZGVMZWdhY3lBcnJheT0oZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwPTApPT57XG5jb25zdCBlbGVtZW50cz1bXTtcbmNvbnN0IGVsZW1DaGFycz1bXTtcbi8vXG4vL1xubGV0IHN0aWxsVG9Ta2lwPXNraXArMTtcbmxldCBpbkVzY2FwZT1mYWxzZTtcbmZvcihjb25zdCBjIG9mIGVuY29kZWQpe1xuaWYoc3RpbGxUb1NraXA+MCl7XG5zdGlsbFRvU2tpcC09MTtcbmlmKHN0aWxsVG9Ta2lwPT09MCl7XG5jPT09J1snfHxGYWlsIGBFbmNvZGVkIGFycmF5IGV4cGVjdGVkOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG4gfVxuIH1lbHNlIGlmKGluRXNjYXBlKXtcbmM9PT0nXFx1MDAwMCd8fFxuYz09PSdcXHUwMDAxJ3x8XG5GYWlsIGBVbmV4cGVjdGVkIGNoYXJhY3RlciBhZnRlciB1MDAwMSBlc2NhcGU6ICR7Y31gO1xuZWxlbUNoYXJzLnB1c2goYyk7XG4gfWVsc2UgaWYoYz09PSdcXHUwMDAwJyl7XG5jb25zdCBlbmNvZGVkRWxlbWVudD1lbGVtQ2hhcnMuam9pbignJyk7XG5lbGVtQ2hhcnMubGVuZ3RoPTA7XG5jb25zdCBlbGVtZW50PWRlY29kZVBhc3NhYmxlKGVuY29kZWRFbGVtZW50KTtcbmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gfWVsc2UgaWYoYz09PSdcXHUwMDAxJyl7XG5pbkVzY2FwZT10cnVlO1xuLy9cbmNvbnRpbnVlO1xuIH1lbHNle1xuZWxlbUNoYXJzLnB1c2goYyk7XG4gfVxuaW5Fc2NhcGU9ZmFsc2U7XG4gfVxuIWluRXNjYXBlfHxGYWlsIGB1bmV4cGVjdGVkIGVuZCBvZiBlbmNvZGluZyAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5lbGVtQ2hhcnMubGVuZ3RoPT09MHx8XG5GYWlsIGBlbmNvZGluZyB0ZXJtaW5hdGVkIGVhcmx5OiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5yZXR1cm4gaGFyZGVuKGVsZW1lbnRzKTtcbiB9O1xuXG5jb25zdCBlbmNvZGVSZWNvcmQ9KHJlY29yZCxlbmNvZGVBcnJheSxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IG5hbWVzPXJlY29yZE5hbWVzKHJlY29yZCk7XG5jb25zdCB2YWx1ZXM9cmVjb3JkVmFsdWVzKHJlY29yZCxuYW1lcyk7XG5yZXR1cm4gYCgke2VuY29kZUFycmF5KGhhcmRlbihbbmFtZXMsdmFsdWVzXSksZW5jb2RlUGFzc2FibGUpfWA7XG4gfTtcblxuY29uc3QgZGVjb2RlUmVjb3JkPShlbmNvZGVkLGRlY29kZUFycmF5LGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmFzc2VydChlbmNvZGVkLmNoYXJBdChza2lwKT09PScoJyk7XG4vL1xuLy9cbmNvbnN0IHVuemlwcGVkRW50cmllcz1kZWNvZGVBcnJheShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXArMSk7XG51bnppcHBlZEVudHJpZXMubGVuZ3RoPT09Mnx8XG5GYWlsIGBleHBlY3RlZCBrZXlzLHZhbHVlcyBwYWlyOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5jb25zdFtrZXlzLHZhbHNdPXVuemlwcGVkRW50cmllcztcblxucGFzc1N0eWxlT2Yoa2V5cyk9PT0nY29weUFycmF5JyYmXG5wYXNzU3R5bGVPZih2YWxzKT09PSdjb3B5QXJyYXknJiZcbmtleXMubGVuZ3RoPT09dmFscy5sZW5ndGgmJlxua2V5cy5ldmVyeSgoa2V5KT0+dHlwZW9mIGtleT09PSdzdHJpbmcnKXx8XG5GYWlsIGBub3QgYSB2YWxpZCByZWNvcmQgZW5jb2Rpbmc6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0IG1hcEVudHJpZXM9a2V5cy5tYXAoKGtleSxpKT0+W2tleSx2YWxzW2ldXSk7XG5jb25zdCByZWNvcmQ9aGFyZGVuKGZyb21FbnRyaWVzKG1hcEVudHJpZXMpKTtcbmFzc2VydFJlY29yZChyZWNvcmQsJ2RlY29kZWQgcmVjb3JkJyk7XG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbmNvbnN0IGVuY29kZVRhZ2dlZD0odGFnZ2VkLGVuY29kZUFycmF5LGVuY29kZVBhc3NhYmxlKT0+XG4gYDoke2VuY29kZUFycmF5KGhhcmRlbihbZ2V0VGFnKHRhZ2dlZCksdGFnZ2VkLnBheWxvYWRdKSxlbmNvZGVQYXNzYWJsZSl9YDtcblxuY29uc3QgZGVjb2RlVGFnZ2VkPShlbmNvZGVkLGRlY29kZUFycmF5LGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmFzc2VydChlbmNvZGVkLmNoYXJBdChza2lwKT09PSc6Jyk7XG4vL1xuLy9cbmNvbnN0IHRhZ2dlZFBheWxvYWQ9ZGVjb2RlQXJyYXkoZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwKzEpO1xudGFnZ2VkUGF5bG9hZC5sZW5ndGg9PT0yfHxcbkZhaWwgYGV4cGVjdGVkIHRhZyxwYXlsb2FkIHBhaXI6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0W3RhZyxwYXlsb2FkXT10YWdnZWRQYXlsb2FkO1xucGFzc1N0eWxlT2YodGFnKT09PSdzdHJpbmcnfHxcbkZhaWwgYG5vdCBhIHZhbGlkIHRhZ2dlZCBlbmNvZGluZzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xucmV0dXJuIG1ha2VUYWdnZWQodGFnLHBheWxvYWQpO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVSZW1vdGFibGU9KHVuc2FmZUVuY29kZVJlbW90YWJsZSx2ZXJpZnlFbmNvZGluZyk9PntcbmNvbnN0IGVuY29kZVJlbW90YWJsZT0ocixpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZVJlbW90YWJsZShyLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0ncid8fFxuRmFpbCBgUmVtb3RhYmxlIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcInJcIjogJHtlbmNvZGluZ31gO1xudmVyaWZ5RW5jb2RpbmcoZW5jb2RpbmcsJ1JlbW90YWJsZScpO1xucmV0dXJuIGVuY29kaW5nO1xuIH07XG5yZXR1cm4gZW5jb2RlUmVtb3RhYmxlO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVQcm9taXNlPSh1bnNhZmVFbmNvZGVQcm9taXNlLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlUHJvbWlzZT0ocCxpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZVByb21pc2UocCxpbm5lckVuY29kZSk7XG50eXBlb2YgZW5jb2Rpbmc9PT0nc3RyaW5nJyYmZW5jb2RpbmcuY2hhckF0KDApPT09Jz8nfHxcbkZhaWwgYFByb21pc2UgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiP1wiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnUHJvbWlzZScpO1xucmV0dXJuIGVuY29kaW5nO1xuIH07XG5yZXR1cm4gZW5jb2RlUHJvbWlzZTtcbiB9O1xuXG5jb25zdCBtYWtlRW5jb2RlRXJyb3I9KHVuc2FmZUVuY29kZUVycm9yLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlRXJyb3I9KGVycixpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZUVycm9yKGVycixpbm5lckVuY29kZSk7XG50eXBlb2YgZW5jb2Rpbmc9PT0nc3RyaW5nJyYmZW5jb2RpbmcuY2hhckF0KDApPT09JyEnfHxcbkZhaWwgYEVycm9yIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcIiFcIjogJHtlbmNvZGluZ31gO1xudmVyaWZ5RW5jb2RpbmcoZW5jb2RpbmcsJ0Vycm9yJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVFcnJvcjtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbm5lckVuY29kZT0oZW5jb2RlU3RyaW5nU3VmZml4LGVuY29kZUFycmF5LG9wdGlvbnMpPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZTp1bnNhZmVFbmNvZGVSZW1vdGFibGUsXG5lbmNvZGVQcm9taXNlOnVuc2FmZUVuY29kZVByb21pc2UsXG5lbmNvZGVFcnJvcjp1bnNhZmVFbmNvZGVFcnJvcixcbnZlcmlmeUVuY29kaW5nPSgpPT57IH19PVxub3B0aW9ucztcbmNvbnN0IGVuY29kZVJlbW90YWJsZT1tYWtlRW5jb2RlUmVtb3RhYmxlKFxudW5zYWZlRW5jb2RlUmVtb3RhYmxlLFxudmVyaWZ5RW5jb2RpbmcpO1xuXG5jb25zdCBlbmNvZGVQcm9taXNlPW1ha2VFbmNvZGVQcm9taXNlKHVuc2FmZUVuY29kZVByb21pc2UsdmVyaWZ5RW5jb2RpbmcpO1xuY29uc3QgZW5jb2RlRXJyb3I9bWFrZUVuY29kZUVycm9yKHVuc2FmZUVuY29kZUVycm9yLHZlcmlmeUVuY29kaW5nKTtcblxuY29uc3QgaW5uZXJFbmNvZGU9KHBhc3NhYmxlKT0+e1xuaWYoaXNFcnJvckxpa2UocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gZW5jb2RlRXJyb3IocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihwYXNzYWJsZSk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnbnVsbCc6e1xucmV0dXJuJ3YnO1xuIH1cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4neic7XG4gfVxuY2FzZSdudW1iZXInOntcbnJldHVybiBlbmNvZGVCaW5hcnk2NChwYXNzYWJsZSk7XG4gfVxuY2FzZSdzdHJpbmcnOntcbnJldHVybiBgcyR7ZW5jb2RlU3RyaW5nU3VmZml4KHBhc3NhYmxlKX1gO1xuIH1cbmNhc2UnYm9vbGVhbic6e1xucmV0dXJuIGBiJHtwYXNzYWJsZX1gO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5yZXR1cm4gZW5jb2RlQmlnSW50KHBhc3NhYmxlKTtcbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xucmV0dXJuIGVuY29kZVJlbW90YWJsZShwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSdlcnJvcic6e1xucmV0dXJuIGVuY29kZUVycm9yKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBlbmNvZGVQcm9taXNlKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuLy9cbmNvbnN0IG5hbWU9bmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5yZXR1cm4gYHkke2VuY29kZVN0cmluZ1N1ZmZpeChuYW1lKX1gO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5yZXR1cm4gZW5jb2RlQXJyYXkocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xucmV0dXJuIGVuY29kZVJlY29yZChwYXNzYWJsZSxlbmNvZGVBcnJheSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybiBlbmNvZGVUYWdnZWQocGFzc2FibGUsZW5jb2RlQXJyYXksaW5uZXJFbmNvZGUpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgYSAke3EocGFzc1N0eWxlKX0gY2Fubm90IGJlIHVzZWQgYXMgYSBjb2xsZWN0aW9uIHBhc3NhYmxlYDtcbiB9fVxuXG4gfTtcbnJldHVybiBpbm5lckVuY29kZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgbGliZXJhbERlY29kZXJzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICove1xuZGVjb2RlUmVtb3RhYmxlOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkLFxuZGVjb2RlUHJvbWlzZTooX2VuY29kaW5nLF9pbm5lckRlY29kZSk9PnVuZGVmaW5lZCxcbmRlY29kZUVycm9yOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkfTtcblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlubmVyRGVjb2RlPShkZWNvZGVTdHJpbmdTdWZmaXgsZGVjb2RlQXJyYXksb3B0aW9ucyk9PntcbmNvbnN0e2RlY29kZVJlbW90YWJsZSxkZWNvZGVQcm9taXNlLGRlY29kZUVycm9yfT1vcHRpb25zO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlubmVyRGVjb2RlPShlbmNvZGVkLHNraXA9MCk9PntcbnN3aXRjaChlbmNvZGVkLmNoYXJBdChza2lwKSl7XG5jYXNlJ3YnOntcbnJldHVybiBudWxsO1xuIH1cbmNhc2Uneic6e1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jYXNlJ2YnOntcbnJldHVybiBkZWNvZGVCaW5hcnk2NChlbmNvZGVkLHNraXApO1xuIH1cbmNhc2Uncyc6e1xucmV0dXJuIGRlY29kZVN0cmluZ1N1ZmZpeChnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpKTtcbiB9XG5jYXNlJ2InOntcbmNvbnN0IHN1YnN0cmluZz1nZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpO1xuaWYoc3Vic3RyaW5nPT09J3RydWUnKXtcbnJldHVybiB0cnVlO1xuIH1lbHNlIGlmKHN1YnN0cmluZz09PSdmYWxzZScpe1xucmV0dXJuIGZhbHNlO1xuIH1cbnRocm93IEZhaWwgYGV4cGVjdGVkIGVuY29kZWQgYm9vbGVhbiB0byBiZSBcImJ0cnVlXCIgb3IgXCJiZmFsc2VcIjogJHtzdWJzdHJpbmd9YDtcbiB9XG5jYXNlJ24nOlxuY2FzZSdwJzp7XG5yZXR1cm4gZGVjb2RlQmlnSW50KGdldFN1ZmZpeChlbmNvZGVkLHNraXApKTtcbiB9XG5jYXNlJ3InOntcbnJldHVybiBkZWNvZGVSZW1vdGFibGUoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UnPyc6e1xucmV0dXJuIGRlY29kZVByb21pc2UoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UnISc6e1xucmV0dXJuIGRlY29kZUVycm9yKGdldFN1ZmZpeChlbmNvZGVkLHNraXApLGlubmVyRGVjb2RlKTtcbiB9XG5jYXNlJ3knOntcbi8vXG5jb25zdCBuYW1lPWRlY29kZVN0cmluZ1N1ZmZpeChnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpKTtcbnJldHVybiBwYXNzYWJsZVN5bWJvbEZvck5hbWUobmFtZSk7XG4gfVxuY2FzZSdbJzpcbmNhc2UnXic6e1xuLy9cbnJldHVybiBkZWNvZGVBcnJheShlbmNvZGVkLGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmNhc2UnKCc6e1xucmV0dXJuIGRlY29kZVJlY29yZChlbmNvZGVkLGRlY29kZUFycmF5LGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmNhc2UnOic6e1xucmV0dXJuIGRlY29kZVRhZ2dlZChlbmNvZGVkLGRlY29kZUFycmF5LGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgaW52YWxpZCBkYXRhYmFzZSBrZXk6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9fVxuXG4gfTtcbnJldHVybiBpbm5lckRlY29kZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVBhc3NhYmxlS2l0PShvcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGU9KHIsXyk9PkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke3J9YCxcbmVuY29kZVByb21pc2U9KHAsXyk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtwfWAsXG5lbmNvZGVFcnJvcj0oZXJyLF8pPT5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke2Vycn1gLFxuZm9ybWF0PSdsZWdhY3lPcmRlcmVkJyxcblxuZGVjb2RlUmVtb3RhYmxlPShlbmNvZGluZyxfKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YCxcbmRlY29kZVByb21pc2U9KGVuY29kaW5nLF8pPT5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YCxcbmRlY29kZUVycm9yPShlbmNvZGluZyxfKT0+RmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gfT1cbm9wdGlvbnM7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZW5jb2RlUGFzc2FibGU7XG5jb25zdCBlbmNvZGVPcHRpb25zPXtlbmNvZGVSZW1vdGFibGUsZW5jb2RlUHJvbWlzZSxlbmNvZGVFcnJvcixmb3JtYXR9O1xuaWYoZm9ybWF0PT09J2NvbXBhY3RPcmRlcmVkJyl7XG5jb25zdCBsaWJlcmFsRGVjb2RlPW1ha2VJbm5lckRlY29kZShcbmRlY29kZUNvbXBhY3RTdHJpbmdTdWZmaXgsXG5kZWNvZGVDb21wYWN0QXJyYXksXG5saWJlcmFsRGVjb2RlcnMpO1xuXG4vKlxuXG5cblxuICAgICAqL1xuY29uc3QgdmVyaWZ5RW5jb2Rpbmc9KGVuY29kaW5nLGxhYmVsKT0+e1xuIWVuY29kaW5nLm1hdGNoKHJDMCl8fFxuRmFpbCBgJHtiKFxubGFiZWwpXG4gfSBlbmNvZGluZyBtdXN0IG5vdCBjb250YWluIGEgQzAgY29udHJvbCBjaGFyYWN0ZXI6ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IGRlY29kZWQ9ZGVjb2RlQ29tcGFjdEFycmF5KCBgXnYgJHtlbmNvZGluZ30gdiBgLGxpYmVyYWxEZWNvZGUpO1xuaXNBcnJheShkZWNvZGVkKSYmXG5kZWNvZGVkLmxlbmd0aD09PTMmJlxuZGVjb2RlZFswXT09PW51bGwmJlxuZGVjb2RlZFsyXT09PW51bGx8fFxuRmFpbCBgJHtiKGxhYmVsKX0gZW5jb2RpbmcgbXVzdCBiZSBlbWJlZGRhYmxlOiAke2VuY29kaW5nfWA7XG4gfTtcbmNvbnN0IGVuY29kZUNvbXBhY3Q9bWFrZUlubmVyRW5jb2RlKFxuZW5jb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmVuY29kZUNvbXBhY3RBcnJheSxcbnsuLi5lbmNvZGVPcHRpb25zLHZlcmlmeUVuY29kaW5nfSk7XG5cbmVuY29kZVBhc3NhYmxlPShwYXNzYWJsZSk9PiBgfiR7ZW5jb2RlQ29tcGFjdChwYXNzYWJsZSl9YDtcbiB9ZWxzZSBpZihmb3JtYXQ9PT0nbGVnYWN5T3JkZXJlZCcpe1xuZW5jb2RlUGFzc2FibGU9bWFrZUlubmVyRW5jb2RlKFxuZW5jb2RlTGVnYWN5U3RyaW5nU3VmZml4LFxuZW5jb2RlTGVnYWN5QXJyYXksXG5lbmNvZGVPcHRpb25zKTtcblxuIH1lbHNle1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIGZvcm1hdDogJHtxKGZvcm1hdCl9YDtcbiB9XG5cbmNvbnN0IGRlY29kZU9wdGlvbnM9e2RlY29kZVJlbW90YWJsZSxkZWNvZGVQcm9taXNlLGRlY29kZUVycm9yfTtcbmNvbnN0IGRlY29kZUNvbXBhY3Q9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmRlY29kZUNvbXBhY3RBcnJheSxcbmRlY29kZU9wdGlvbnMpO1xuXG5jb25zdCBkZWNvZGVMZWdhY3k9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlTGVnYWN5U3RyaW5nU3VmZml4LFxuZGVjb2RlTGVnYWN5QXJyYXksXG5kZWNvZGVPcHRpb25zKTtcblxuY29uc3QgZGVjb2RlUGFzc2FibGU9KGVuY29kZWQpPT57XG4vL1xuLy9cbi8vXG5pZihlbmNvZGVkLmNoYXJBdCgwKT09PSd+Jyl7XG5yZXR1cm4gZGVjb2RlQ29tcGFjdChlbmNvZGVkLDEpO1xuIH1cbnJldHVybiBkZWNvZGVMZWdhY3koZW5jb2RlZCk7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7ZW5jb2RlUGFzc2FibGUsZGVjb2RlUGFzc2FibGV9KTtcbiB9OyRo4oCNX29uY2UubWFrZVBhc3NhYmxlS2l0KG1ha2VQYXNzYWJsZUtpdCk7XG5oYXJkZW4obWFrZVBhc3NhYmxlS2l0KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW5jb2RlUGFzc2FibGU9KGVuY29kZU9wdGlvbnMpPT57XG5jb25zdHtlbmNvZGVQYXNzYWJsZX09bWFrZVBhc3NhYmxlS2l0KGVuY29kZU9wdGlvbnMpO1xucmV0dXJuIGVuY29kZVBhc3NhYmxlO1xuIH07JGjigI1fb25jZS5tYWtlRW5jb2RlUGFzc2FibGUobWFrZUVuY29kZVBhc3NhYmxlKTtcbmhhcmRlbihtYWtlRW5jb2RlUGFzc2FibGUpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVQYXNzYWJsZT0oZGVjb2RlT3B0aW9ucyk9PntcbmNvbnN0e2RlY29kZVBhc3NhYmxlfT1tYWtlUGFzc2FibGVLaXQoZGVjb2RlT3B0aW9ucyk7XG5yZXR1cm4gZGVjb2RlUGFzc2FibGU7XG4gfTskaOKAjV9vbmNlLm1ha2VEZWNvZGVQYXNzYWJsZShtYWtlRGVjb2RlUGFzc2FibGUpO1xuaGFyZGVuKG1ha2VEZWNvZGVQYXNzYWJsZSk7XG5cbmNvbnN0ICAgICAgICBpc0VuY29kZWRSZW1vdGFibGU9KGVuY29kZWQpPT5lbmNvZGVkLmNoYXJBdCgwKT09PSdyJzskaOKAjV9vbmNlLmlzRW5jb2RlZFJlbW90YWJsZShpc0VuY29kZWRSZW1vdGFibGUpO1xuaGFyZGVuKGlzRW5jb2RlZFJlbW90YWJsZSk7XG5cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXNzU3R5bGVQcmVmaXhlcz17XG5lcnJvcjonIScsXG5jb3B5UmVjb3JkOicoJyxcbnRhZ2dlZDonOicsXG5wcm9taXNlOic/JyxcbmNvcHlBcnJheTonW14nLFxuYm9vbGVhbjonYicsXG5udW1iZXI6J2YnLFxuYmlnaW50OiducCcsXG5yZW1vdGFibGU6J3InLFxuc3RyaW5nOidzJyxcbm51bGw6J3YnLFxuc3ltYm9sOid5JyxcbnVuZGVmaW5lZDoneid9OyRo4oCNX29uY2UucGFzc1N0eWxlUHJlZml4ZXMocGFzc1N0eWxlUHJlZml4ZXMpO1xuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YocGFzc1N0eWxlUHJlZml4ZXMsbnVsbCk7XG5oYXJkZW4ocGFzc1N0eWxlUHJlZml4ZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVjb3JkTmFtZXMiOlsicmVjb3JkTmFtZXMiXSwicmVjb3JkVmFsdWVzIjpbInJlY29yZFZhbHVlcyJdLCJ6ZXJvUGFkIjpbInplcm9QYWQiXSwibWFrZVBhc3NhYmxlS2l0IjpbIm1ha2VQYXNzYWJsZUtpdCJdLCJtYWtlRW5jb2RlUGFzc2FibGUiOlsibWFrZUVuY29kZVBhc3NhYmxlIl0sIm1ha2VEZWNvZGVQYXNzYWJsZSI6WyJtYWtlRGVjb2RlUGFzc2FibGUiXSwiaXNFbmNvZGVkUmVtb3RhYmxlIjpbImlzRW5jb2RlZFJlbW90YWJsZSJdLCJwYXNzU3R5bGVQcmVmaXhlcyI6WyJwYXNzU3R5bGVQcmVmaXhlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAwjHTXciIAAHIiAAArAAAAQGVuZG8vbWFyc2hhbC12MS41LjMvc3JjL2VuY29kZVRvQ2FwRGF0YS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiUUNMQVNTIiwibWFrZURlY29kZUZyb21DYXBEYXRhIiwibWFrZUVuY29kZVRvQ2FwRGF0YSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFzc1N0eWxlT2YsaXNFcnJvckxpa2UsbWFrZVRhZ2dlZCxpc09iamVjdCxnZXRUYWcsaGFzT3duUHJvcGVydHlPZixhc3NlcnRQYXNzYWJsZVN5bWJvbCxuYW1lRm9yUGFzc2FibGVTeW1ib2wscGFzc2FibGVTeW1ib2xGb3JOYW1lLFgsRmFpbCxxOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaOKAjV9hID0+IChwYXNzU3R5bGVPZiA9ICRo4oCNX2EpXV0sW1wiaXNFcnJvckxpa2VcIiwgWyRo4oCNX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjigI1fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaOKAjV9hID0+IChtYWtlVGFnZ2VkID0gJGjigI1fYSldXSxbXCJpc09iamVjdFwiLCBbJGjigI1fYSA9PiAoaXNPYmplY3QgPSAkaOKAjV9hKV1dLFtcImdldFRhZ1wiLCBbJGjigI1fYSA9PiAoZ2V0VGFnID0gJGjigI1fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaOKAjV9hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjigI1fYSldXSxbXCJhc3NlcnRQYXNzYWJsZVN5bWJvbFwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaOKAjV9hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjigI1fYSA9PiAobmFtZUZvclBhc3NhYmxlU3ltYm9sID0gJGjigI1fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRo4oCNX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7XG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLFxuZGVmaW5lUHJvcGVydGllcyxcbmlzLFxuZW50cmllcyxcbmZyb21FbnRyaWVzLFxuZnJlZXplfT1cbk9iamVjdDtcblxuLypcblxuXG4gKi9cbmNvbnN0IFFDTEFTUz0nQHFjbGFzcyc7JGjigI1fb25jZS5RQ0xBU1MoUUNMQVNTKTtcblxuXG4vKlxuXG5cbiAqL1xuY29uc3QgaGFzUUNsYXNzPShlbmNvZGVkKT0+aGFzT3duUHJvcGVydHlPZihlbmNvZGVkLFFDTEFTUyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IHFjbGFzc01hdGNoZXM9KGVuY29kZWQscWNsYXNzKT0+XG5pc09iamVjdChlbmNvZGVkKSYmXG4haXNBcnJheShlbmNvZGVkKSYmXG5oYXNRQ2xhc3MoZW5jb2RlZCkmJlxuZW5jb2RlZFtRQ0xBU1NdPT09cWNsYXNzO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YT0ocmVtKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cmVtfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9tKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Byb219YDtcblxuY29uc3QgZG9udEVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIpPT5GYWlsIGBlcnJvciBvYmplY3QgdW5leHBlY3RlZDogJHtlcnJ9YDtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW5jb2RlVG9DYXBEYXRhPShlbmNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9ZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YSxcbmVuY29kZVByb21pc2VUb0NhcERhdGE9ZG9udEVuY29kZVByb21pc2VUb0NhcERhdGEsXG5lbmNvZGVFcnJvclRvQ2FwRGF0YT1kb250RW5jb2RlRXJyb3JUb0NhcERhdGF9PVxuZW5jb2RlT3B0aW9ucztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGVuY29kZVRvQ2FwRGF0YVJlY3VyPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ3N0cmluZyc6e1xuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJue1tRQ0xBU1NdOid1bmRlZmluZWQnfTtcbiB9XG5jYXNlJ251bWJlcic6e1xuLy9cbmlmKE51bWJlci5pc05hTihwYXNzYWJsZSkpe1xucmV0dXJue1tRQ0xBU1NdOidOYU4nfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PUluZmluaXR5KXtcbnJldHVybntbUUNMQVNTXTonSW5maW5pdHknfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PS1JbmZpbml0eSl7XG5yZXR1cm57W1FDTEFTU106Jy1JbmZpbml0eSd9O1xuIH1cbi8vXG5yZXR1cm4gaXMocGFzc2FibGUsLTApPzA6cGFzc2FibGU7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybntcbltRQ0xBU1NdOidiaWdpbnQnLFxuZGlnaXRzOlN0cmluZyhwYXNzYWJsZSl9O1xuXG4gfVxuY2FzZSdzeW1ib2wnOntcbmFzc2VydFBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmNvbnN0IG5hbWU9LyogICAgICAgICAgICAgICAgICovbmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbnJldHVybntcbltRQ0xBU1NdOidzeW1ib2wnLFxubmFtZX07XG5cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmlmKGhhc093blByb3BlcnR5T2YocGFzc2FibGUsUUNMQVNTKSl7XG4vL1xuY29uc3R7W1FDTEFTU106cWNsYXNzVmFsdWUsLi4ucmVzdH09cGFzc2FibGU7XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PXtcbltRQ0xBU1NdOidoaWxiZXJ0Jyxcbm9yaWdpbmFsOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHFjbGFzc1ZhbHVlKX07XG5cbmlmKG93bktleXMocmVzdCkubGVuZ3RoPj0xKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJlc3VsdC5yZXN0PWVuY29kZVRvQ2FwRGF0YVJlY3VyKGZyZWV6ZShyZXN0KSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCBuYW1lcz1vd25LZXlzKHBhc3NhYmxlKS5zb3J0KCk7XG5yZXR1cm4gZnJvbUVudHJpZXMoXG5uYW1lcy5tYXAoKG5hbWUpPT5bbmFtZSxlbmNvZGVUb0NhcERhdGFSZWN1cihwYXNzYWJsZVtuYW1lXSldKSk7XG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xucmV0dXJuIHBhc3NhYmxlLm1hcChlbmNvZGVUb0NhcERhdGFSZWN1cik7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybntcbltRQ0xBU1NdOid0YWdnZWQnLFxudGFnOmdldFRhZyhwYXNzYWJsZSksXG5wYXlsb2FkOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlLnBheWxvYWQpfTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YShcbnBhc3NhYmxlLFxuZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuXG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ3Nsb3QnKSl7XG5yZXR1cm4gZW5jb2RlZDtcbiB9XG4vL1xudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFJlbW90YWJsZSBlbmNvZGluZyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoICR7cShcblFDTEFTUylcbiB9ICR7cSgnc2xvdCcpfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVByb21pc2VUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuaWYocWNsYXNzTWF0Y2hlcyhlbmNvZGVkLCdzbG90Jykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFByb21pc2UgZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCAke3EoXG5RQ0xBU1MsXG4nc2xvdCcpXG4gfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZW5jb2RlZD1lbmNvZGVFcnJvclRvQ2FwRGF0YShwYXNzYWJsZSxlbmNvZGVUb0NhcERhdGFSZWN1cik7XG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ2Vycm9yJykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggJHtxKFxuUUNMQVNTLFxuJ2Vycm9yJylcbiB9OiAke2VuY29kZWR9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IFVucmVjb2duaXplZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfTtcbmNvbnN0IGVuY29kZVRvQ2FwRGF0YT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oZW5jb2RlRXJyb3JUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpKTtcbiB9XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlKSk7XG4gfTtcbnJldHVybiBoYXJkZW4oZW5jb2RlVG9DYXBEYXRhKTtcbiB9OyRo4oCNX29uY2UubWFrZUVuY29kZVRvQ2FwRGF0YShtYWtlRW5jb2RlVG9DYXBEYXRhKTtcbmhhcmRlbihtYWtlRW5jb2RlVG9DYXBEYXRhKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnREZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YT0oc2xvdEVuY29kaW5nKT0+XG5GYWlsIGByZW1vdGFibGUgb3IgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Nsb3RFbmNvZGluZ31gO1xuY29uc3QgZG9udERlY29kZUVycm9yRnJvbUNhcERhdGE9KGVycm9yRW5jb2RpbmcpPT5cbkZhaWwgYGVycm9yIHVuZXhwZWN0ZWQ6ICR7ZXJyb3JFbmNvZGluZ31gO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVGcm9tQ2FwRGF0YT0oZGVjb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGE9ZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhLFxuZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhPWRvbnREZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZUVycm9yRnJvbUNhcERhdGE9ZG9udERlY29kZUVycm9yRnJvbUNhcERhdGF9PVxuZGVjb2RlT3B0aW9ucztcblxuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGE9PT1kZWNvZGVQcm9taXNlRnJvbUNhcERhdGF8fFxuRmFpbCBgQW4gaW1wbGVtZW50YXRpb24gcmVzdHJpY3Rpb24gZm9yIG5vdzogSWYgZWl0aGVyIGRlY29kZVJlbW90YWJsZUZyb21DYXBEYXRhIG9yIGRlY29kZVByb21pc2VGcm9tQ2FwRGF0YSBpcyBwcm92aWRlZCwgYm90aCBtdXN0IGJlIHByb3ZpZGVkIGFuZCB0aGV5IG11c3QgYmUgdGhlIHNhbWU6ICR7cShcbmRlY29kZVJlbW90YWJsZUZyb21DYXBEYXRhKVxuIH0gdnMgJHtxKGRlY29kZVByb21pc2VGcm9tQ2FwRGF0YSl9YDtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVjb2RlRnJvbUNhcERhdGE9KGpzb25FbmNvZGVkKT0+e1xuaWYoIWlzT2JqZWN0KGpzb25FbmNvZGVkKSl7XG4vL1xucmV0dXJuIGpzb25FbmNvZGVkO1xuIH1cbmlmKGlzQXJyYXkoanNvbkVuY29kZWQpKXtcbnJldHVybiBqc29uRW5jb2RlZC5tYXAoKGVuY29kZWRWYWwpPT5kZWNvZGVGcm9tQ2FwRGF0YShlbmNvZGVkVmFsKSk7XG4gfWVsc2UgaWYoaGFzUUNsYXNzKGpzb25FbmNvZGVkKSl7XG5jb25zdCBxY2xhc3M9anNvbkVuY29kZWRbUUNMQVNTXTtcbnR5cGVvZiBxY2xhc3M9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkICR7cShRQ0xBU1MpfSB0eXBlb2YgJHtxKHR5cGVvZiBxY2xhc3MpfWA7XG5zd2l0Y2gocWNsYXNzKXtcbi8vXG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jYXNlJ05hTic6e1xucmV0dXJuIE5hTjtcbiB9XG5jYXNlJ0luZmluaXR5Jzp7XG5yZXR1cm4gSW5maW5pdHk7XG4gfVxuY2FzZSctSW5maW5pdHknOntcbnJldHVybi1JbmZpbml0eTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3R7ZGlnaXRzfT1qc29uRW5jb2RlZDtcbnR5cGVvZiBkaWdpdHM9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIGRpZ2l0cyB0eXBlb2YgJHtxKHR5cGVvZiBkaWdpdHMpfWA7XG5yZXR1cm4gQmlnSW50KGRpZ2l0cyk7XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3I7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PWpzb25FbmNvZGVkO1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3R7dGFnLHBheWxvYWR9PWpzb25FbmNvZGVkO1xucmV0dXJuIG1ha2VUYWdnZWQodGFnLGRlY29kZUZyb21DYXBEYXRhKHBheWxvYWQpKTtcbiB9XG5jYXNlJ3Nsb3QnOntcbi8vXG4vL1xuLy9cbmNvbnN0IGRlY29kZWQ9ZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEoXG5qc29uRW5jb2RlZCxcbmRlY29kZUZyb21DYXBEYXRhKTtcblxuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBkZWNvZGVkO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IGRlY29kZWQ9ZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YShcbmpzb25FbmNvZGVkLFxuZGVjb2RlRnJvbUNhcERhdGEpO1xuXG5pZihwYXNzU3R5bGVPZihkZWNvZGVkKT09PSdlcnJvcicpe1xucmV0dXJuIGRlY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IGRlY29kZUVycm9yRnJvbUNhcERhdGEgb3B0aW9uIG11c3QgcmV0dXJuIGFuIGVycm9yOiAke2RlY29kZWR9YDtcbiB9XG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PWpzb25FbmNvZGVkO1xuaGFzT3duUHJvcGVydHlPZihqc29uRW5jb2RlZCwnb3JpZ2luYWwnKXx8XG5GYWlsIGBJbnZhbGlkIEhpbGJlcnQgSG90ZWwgZW5jb2RpbmcgJHtqc29uRW5jb2RlZH1gO1xuLy9cbmNvbnN0IHJlc3VsdD17W1FDTEFTU106ZGVjb2RlRnJvbUNhcERhdGEob3JpZ2luYWwpfTtcbmlmKGhhc093blByb3BlcnR5T2YoanNvbkVuY29kZWQsJ3Jlc3QnKSl7XG5jb25zdCBpc05vbkVtcHR5T2JqZWN0PVxudHlwZW9mIHJlc3Q9PT0nb2JqZWN0JyYmXG5yZXN0IT09bnVsbCYmXG5vd25LZXlzKHJlc3QpLmxlbmd0aD49MTtcbmlmKCFpc05vbkVtcHR5T2JqZWN0KXtcbnRocm93IEZhaWwgYFJlc3QgZW5jb2RpbmcgbXVzdCBiZSBhIG5vbi1lbXB0eSBvYmplY3Q6ICR7cmVzdH1gO1xuIH1cbmNvbnN0IHJlc3RPYmo9ZGVjb2RlRnJvbUNhcERhdGEocmVzdCk7XG4vL1xuLy9cbi8vXG4haGFzT3duUHJvcGVydHlPZihyZXN0T2JqLFFDTEFTUyl8fFxuRmFpbCBgUmVzdCBtdXN0IG5vdCBjb250YWluIGl0cyBvd24gZGVmaW5pdGlvbiBvZiAke3EoUUNMQVNTKX1gO1xuZGVmaW5lUHJvcGVydGllcyhyZXN1bHQsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyZXN0T2JqKSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xuY2FzZSdpYmlkJzp7XG50aHJvdyBGYWlsIGBUaGUgY2FwRGF0YSBwcm90b2NvbCBubyBsb25nZXIgc3VwcG9ydHMgJHtxKFFDTEFTUyl9ICR7cShcbnFjbGFzcylcbiB9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgdW5yZWNvZ25pemVkICR7cShRQ0xBU1MpfSAke3EocWNsYXNzKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9ZWxzZXtcbmFzc2VydCh0eXBlb2YganNvbkVuY29kZWQ9PT0nb2JqZWN0JyYmanNvbkVuY29kZWQhPT1udWxsKTtcbmNvbnN0IGRlY29kZUVudHJ5PShbbmFtZSxlbmNvZGVkVmFsXSk9PntcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgJHtxKG5hbWUpfSBvZiAke2pzb25FbmNvZGVkfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnJldHVybltuYW1lLGRlY29kZUZyb21DYXBEYXRhKGVuY29kZWRWYWwpXTtcbiB9O1xuY29uc3QgZGVjb2RlZEVudHJpZXM9ZW50cmllcyhqc29uRW5jb2RlZCkubWFwKGRlY29kZUVudHJ5KTtcbnJldHVybiBmcm9tRW50cmllcyhkZWNvZGVkRW50cmllcyk7XG4gfVxuIH07XG5yZXR1cm4gaGFyZGVuKGRlY29kZUZyb21DYXBEYXRhKTtcbiB9OyRo4oCNX29uY2UubWFrZURlY29kZUZyb21DYXBEYXRhKG1ha2VEZWNvZGVGcm9tQ2FwRGF0YSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJRQ0xBU1MiOlsiUUNMQVNTIl0sIm1ha2VFbmNvZGVUb0NhcERhdGEiOlsibWFrZUVuY29kZVRvQ2FwRGF0YSJdLCJtYWtlRGVjb2RlRnJvbUNhcERhdGEiOlsibWFrZURlY29kZUZyb21DYXBEYXRhIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAeEjUlLIgAASyIAAC0AAABAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvZW5jb2RlVG9TbWFsbGNhcHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIiwibWFrZUVuY29kZVRvU21hbGxjYXBzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjigI1fYSA9PiAoaXNFcnJvckxpa2UgPSAkaOKAjV9hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRo4oCNX2EgPT4gKG1ha2VUYWdnZWQgPSAkaOKAjV9hKV1dLFtcImdldFRhZ1wiLCBbJGjigI1fYSA9PiAoZ2V0VGFnID0gJGjigI1fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaOKAjV9hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjigI1fYSldXSxbXCJhc3NlcnRQYXNzYWJsZVN5bWJvbFwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaOKAjV9hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjigI1fYSA9PiAobmFtZUZvclBhc3NhYmxlU3ltYm9sID0gJGjigI1fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRo4oCNX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e2lzLGVudHJpZXMsZnJvbUVudHJpZXN9PU9iamVjdDtcblxuY29uc3QgQkFORz0nIScuY2hhckNvZGVBdCgwKTtcbmNvbnN0IERBU0g9Jy0nLmNoYXJDb2RlQXQoMCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHN0YXJ0c1NwZWNpYWw9KGVuY29kZWRTdHIpPT57XG5pZihlbmNvZGVkU3RyPT09Jycpe1xucmV0dXJuIGZhbHNlO1xuIH1cbi8vXG5jb25zdCBjb2RlPWVuY29kZWRTdHIuY2hhckNvZGVBdCgwKTtcbi8vXG5yZXR1cm4gQkFORzw9Y29kZSYmY29kZTw9REFTSDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udEVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPShyZW0pPT5cbkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke3JlbX1gO1xuXG5jb25zdCBkb250RW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPShwcm9tKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Byb219YDtcblxuY29uc3QgZG9udEVuY29kZUVycm9yVG9TbWFsbGNhcHM9KGVycik9PlxuRmFpbCBgZXJyb3Igb2JqZWN0IHVuZXhwZWN0ZWQ6ICR7cShlcnIpfWA7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVuY29kZVRvU21hbGxjYXBzPShlbmNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGVUb1NtYWxsY2Fwcz1kb250RW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHMsXG5lbmNvZGVQcm9taXNlVG9TbWFsbGNhcHM9ZG9udEVuY29kZVByb21pc2VUb1NtYWxsY2FwcyxcbmVuY29kZUVycm9yVG9TbWFsbGNhcHM9ZG9udEVuY29kZUVycm9yVG9TbWFsbGNhcHN9PVxuZW5jb2RlT3B0aW9ucztcblxuY29uc3QgYXNzZXJ0RW5jb2RlZEVycm9yPShlbmNvZGluZyk9PntcbnR5cGVvZiBlbmNvZGluZz09PSdvYmplY3QnJiZoYXNPd25Qcm9wZXJ0eU9mKGVuY29kaW5nLCcjZXJyb3InKXx8XG5GYWlsIGBpbnRlcm5hbDogRXJyb3IgZW5jb2RpbmcgbXVzdCBoYXZlIFwiI2Vycm9yXCIgcHJvcGVydHk6ICR7cShcbmVuY29kaW5nKVxuIH1gO1xuLy9cbmNvbnN0IG1lc3NhZ2U9ZW5jb2RpbmdbJyNlcnJvciddO1xudHlwZW9mIG1lc3NhZ2U9PT0nc3RyaW5nJyYmKFxuIXN0YXJ0c1NwZWNpYWwobWVzc2FnZSl8fG1lc3NhZ2UuY2hhckF0KDApPT09JyEnKXx8XG5GYWlsIGBpbnRlcm5hbDogRXJyb3IgZW5jb2RpbmcgbXVzdCBoYXZlIHN0cmluZyBtZXNzYWdlOiAke3EobWVzc2FnZSl9YDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHNSZWN1cj0ocGFzc2FibGUpPT57XG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihwYXNzYWJsZSk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOntcbi8vXG5yZXR1cm4gcGFzc2FibGU7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmlmKHN0YXJ0c1NwZWNpYWwocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGAhJHtwYXNzYWJsZX1gO1xuIH1cbi8vXG5yZXR1cm4gcGFzc2FibGU7XG4gfVxuY2FzZSd1bmRlZmluZWQnOntcbnJldHVybicjdW5kZWZpbmVkJztcbiB9XG5jYXNlJ251bWJlcic6e1xuLy9cbmlmKE51bWJlci5pc05hTihwYXNzYWJsZSkpe1xucmV0dXJuJyNOYU4nO1xuIH1lbHNlIGlmKHBhc3NhYmxlPT09SW5maW5pdHkpe1xucmV0dXJuJyNJbmZpbml0eSc7XG4gfWVsc2UgaWYocGFzc2FibGU9PT0tSW5maW5pdHkpe1xucmV0dXJuJyMtSW5maW5pdHknO1xuIH1cbi8vXG5yZXR1cm4gaXMocGFzc2FibGUsLTApPzA6cGFzc2FibGU7XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0IHN0cj1TdHJpbmcocGFzc2FibGUpO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgKi9wYXNzYWJsZTwwbj9zdHI6YCske3N0cn1gKTtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuYXNzZXJ0UGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xuY29uc3QgbmFtZT0vKiAgICAgICAgICAgICAgICAgKi9uYW1lRm9yUGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xucmV0dXJuIGAlJHtuYW1lfWA7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbi8vXG5jb25zdCBuYW1lcz1vd25LZXlzKHBhc3NhYmxlKS5zb3J0KCk7XG5yZXR1cm4gZnJvbUVudHJpZXMoXG5uYW1lcy5tYXAoKG5hbWUpPT5bXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKG5hbWUpLFxuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihwYXNzYWJsZVtuYW1lXSldKSk7XG5cblxuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5yZXR1cm4gcGFzc2FibGUubWFwKGVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5yZXR1cm57XG4nI3RhZyc6ZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihnZXRUYWcocGFzc2FibGUpKSxcbnBheWxvYWQ6ZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihwYXNzYWJsZS5wYXlsb2FkKX07XG5cbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xuY29uc3QgcmVzdWx0PWVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzKFxucGFzc2FibGUsXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcblxuaWYodHlwZW9mIHJlc3VsdD09PSdzdHJpbmcnJiZyZXN1bHQuY2hhckF0KDApPT09JyQnKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuLy9cbnRocm93IEZhaWwgYGludGVybmFsOiBSZW1vdGFibGUgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiJFwiOiAke3Jlc3VsdH1gO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xuY29uc3QgcmVzdWx0PWVuY29kZVByb21pc2VUb1NtYWxsY2FwcyhcbnBhc3NhYmxlLFxuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG5cbmlmKHR5cGVvZiByZXN1bHQ9PT0nc3RyaW5nJyYmcmVzdWx0LmNoYXJBdCgwKT09PScmJyl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbnRocm93IEZhaWwgYGludGVybmFsOiBQcm9taXNlIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcIiZcIjogJHtyZXN1bHR9YDtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdCByZXN1bHQ9ZW5jb2RlRXJyb3JUb1NtYWxsY2FwcyhwYXNzYWJsZSxlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcbmFzc2VydEVuY29kZWRFcnJvcihyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IFVucmVjb2duaXplZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfTtcbmNvbnN0IGVuY29kZVRvU21hbGxjYXBzPShwYXNzYWJsZSk9PntcbmlmKGlzRXJyb3JMaWtlKHBhc3NhYmxlKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgcmVzdWx0PWhhcmRlbihcbmVuY29kZUVycm9yVG9TbWFsbGNhcHMocGFzc2FibGUsZW5jb2RlVG9TbWFsbGNhcHNSZWN1cikpO1xuXG5hc3NlcnRFbmNvZGVkRXJyb3IocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfVxucmV0dXJuIGhhcmRlbihlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKHBhc3NhYmxlKSk7XG4gfTtcbnJldHVybiBoYXJkZW4oZW5jb2RlVG9TbWFsbGNhcHMpO1xuIH07JGjigI1fb25jZS5tYWtlRW5jb2RlVG9TbWFsbGNhcHMobWFrZUVuY29kZVRvU21hbGxjYXBzKTtcbmhhcmRlbihtYWtlRW5jb2RlVG9TbWFsbGNhcHMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+XG5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gO1xuY29uc3QgZG9udERlY29kZVByb21pc2VGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtxKGVuY29kaW5nKX1gO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzLFxuZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9ZG9udERlY29kZVByb21pc2VGcm9tU21hbGxjYXBzLFxuZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVFcnJvckZyb21TbWFsbGNhcHN9PVxuZGVjb2RlT3B0aW9ucztcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVjb2RlRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT57XG5zd2l0Y2godHlwZW9mIGVuY29kaW5nKXtcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6e1xucmV0dXJuIGVuY29kaW5nO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5pZighc3RhcnRzU3BlY2lhbChlbmNvZGluZykpe1xucmV0dXJuIGVuY29kaW5nO1xuIH1cbmNvbnN0IGM9ZW5jb2RpbmcuY2hhckF0KDApO1xuc3dpdGNoKGMpe1xuY2FzZSchJzp7XG4vL1xucmV0dXJuIGVuY29kaW5nLnNsaWNlKDEpO1xuIH1cbmNhc2UnJSc6e1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShlbmNvZGluZy5zbGljZSgxKSk7XG4gfVxuY2FzZScjJzp7XG5zd2l0Y2goZW5jb2Rpbmcpe1xuY2FzZScjdW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnI05hTic6e1xucmV0dXJuIE5hTjtcbiB9XG5jYXNlJyNJbmZpbml0eSc6e1xucmV0dXJuIEluZmluaXR5O1xuIH1cbmNhc2UnIy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bmtub3duIGNvbnN0YW50IFwiJHtxKGVuY29kaW5nKX1cImAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1cbmNhc2UnKyc6XG5jYXNlJy0nOntcbnJldHVybiBCaWdJbnQoZW5jb2RpbmcpO1xuIH1cbmNhc2UnJCc6e1xuY29uc3QgcmVzdWx0PWRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG4vL1xuaWYocGFzc1N0eWxlT2YocmVzdWx0KSE9PSdyZW1vdGFibGUnKXtcbkZhaWwgYGludGVybmFsOiBkZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhIHJlbW90YWJsZTogJHtyZXN1bHR9YDtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNhc2UnJic6e1xuY29uc3QgcmVzdWx0PWRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzKFxuZW5jb2RpbmcsXG5kZWNvZGVGcm9tU21hbGxjYXBzKTtcblxuaWYocGFzc1N0eWxlT2YocmVzdWx0KSE9PSdwcm9taXNlJyl7XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMgb3B0aW9uIG11c3QgcmV0dXJuIGEgcHJvbWlzZTogJHtyZXN1bHR9YDtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgU3BlY2lhbCBjaGFyICR7cShcbmMpXG4gfSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZTogJHtlbmNvZGluZ31gO1xuIH19XG5cbiB9XG5jYXNlJ29iamVjdCc6e1xuaWYoZW5jb2Rpbmc9PT1udWxsKXtcbnJldHVybiBlbmNvZGluZztcbiB9XG5cbmlmKGlzQXJyYXkoZW5jb2RpbmcpKXtcbnJldHVybiBlbmNvZGluZy5tYXAoKHZhbCk9PmRlY29kZUZyb21TbWFsbGNhcHModmFsKSk7XG4gfVxuXG5pZihoYXNPd25Qcm9wZXJ0eU9mKGVuY29kaW5nLCcjdGFnJykpe1xuY29uc3R7JyN0YWcnOnRhZyxwYXlsb2FkLC4uLnJlc3R9PWVuY29kaW5nO1xudHlwZW9mIHRhZz09PSdzdHJpbmcnfHxcbkZhaWwgYFZhbHVlIG9mIFwiI3RhZ1wiLCB0aGUgdGFnLCBtdXN0IGJlIGEgc3RyaW5nOiAke2VuY29kaW5nfWA7XG5vd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuRmFpbCBgI3RhZyByZWNvcmQgdW5leHBlY3RlZCBwcm9wZXJ0aWVzOiAke3Eob3duS2V5cyhyZXN0KSl9YDtcbnJldHVybiBtYWtlVGFnZ2VkKFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyh0YWcpLFxuZGVjb2RlRnJvbVNtYWxsY2FwcyhwYXlsb2FkKSk7XG5cbiB9XG5cbmlmKGhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyNlcnJvcicpKXtcbmNvbnN0IHJlc3VsdD1kZWNvZGVFcnJvckZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG5wYXNzU3R5bGVPZihyZXN1bHQpPT09J2Vycm9yJ3x8XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhbiBlcnJvcjogJHtyZXN1bHR9YDtcbnJldHVybiByZXN1bHQ7XG4gfVxuXG5jb25zdCBkZWNvZGVFbnRyeT0oW2VuY29kZWROYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIGVuY29kZWROYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgbmFtZSAke3EoXG5lbmNvZGVkTmFtZSlcbiB9IG9mICR7ZW5jb2Rpbmd9IG11c3QgYmUgYSBzdHJpbmdgO1xuZW5jb2RlZE5hbWUuY2hhckF0KDApIT09JyMnfHxcbkZhaWwgYFVucmVjb2duaXplZCByZWNvcmQgdHlwZSAke3EoZW5jb2RlZE5hbWUpfTogJHtlbmNvZGluZ31gO1xuY29uc3QgbmFtZT1kZWNvZGVGcm9tU21hbGxjYXBzKGVuY29kZWROYW1lKTtcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgRGVjb2RlZCBwcm9wZXJ0eSBuYW1lICR7bmFtZX0gZnJvbSAke2VuY29kaW5nfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnJldHVybltuYW1lLGRlY29kZUZyb21TbWFsbGNhcHMoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGVuY29kaW5nKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IHVucmVjb2duaXplZCBKU09OIHR5cGVvZiAke3EoXG50eXBlb2YgZW5jb2RpbmcpXG4gfTogJHtlbmNvZGluZ31gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9O1xucmV0dXJuIGhhcmRlbihkZWNvZGVGcm9tU21hbGxjYXBzKTtcbiB9OyRo4oCNX29uY2UubWFrZURlY29kZUZyb21TbWFsbGNhcHMobWFrZURlY29kZUZyb21TbWFsbGNhcHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUVuY29kZVRvU21hbGxjYXBzIjpbIm1ha2VFbmNvZGVUb1NtYWxsY2FwcyJdLCJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyI6WyJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADcHLoAJiMAACYjAAAqAAAAQGVuZG8vbWFyc2hhbC12MS41LjMvc3JjL21hcnNoYWwtanVzdGluLmpzeyJpbXBvcnRzIjpbIkBlbmRvL25hdCIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiLCIuL2VuY29kZVRvQ2FwRGF0YS5qcyJdLCJleHBvcnRzIjpbImRlY29kZVRvSnVzdGluIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBOYXQsZ2V0RXJyb3JDb25zdHJ1Y3Rvcixpc09iamVjdCxwYXNzYWJsZVN5bWJvbEZvck5hbWUscSxYLEZhaWwsUUNMQVNTOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaOKAjV9hID0+IChOYXQgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjigI1fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRo4oCNX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRo4oCNX2EgPT4gKGlzT2JqZWN0ID0gJGjigI1fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRo4oCNX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiLi9lbmNvZGVUb0NhcERhdGEuanNcIiwgW1tcIlFDTEFTU1wiLCBbJGjigI1fYSA9PiAoUUNMQVNTID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7c3RyaW5naWZ5OnF1b3RlfT1KU09OO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VZZXNJbmRlbnRlcj0oKT0+e1xuY29uc3Qgc3RyaW5ncz1bXTtcbmxldCBsZXZlbD0wO1xubGV0IG5lZWRTcGFjZT1mYWxzZTtcbmNvbnN0IGxpbmU9KCk9Pntcbm5lZWRTcGFjZT1mYWxzZTtcbnJldHVybiBzdHJpbmdzLnB1c2goJ1xcbicsJyAgJy5yZXBlYXQobGV2ZWwpKTtcbiB9O1xucmV0dXJuIGhhcmRlbih7XG5vcGVuOihvcGVuQnJhY2tldCk9PntcbmxldmVsKz0xO1xuaWYobmVlZFNwYWNlKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbm5lZWRTcGFjZT1mYWxzZTtcbnJldHVybiBzdHJpbmdzLnB1c2gob3BlbkJyYWNrZXQpO1xuIH0sXG5saW5lLFxubmV4dDoodG9rZW4pPT57XG5pZihuZWVkU3BhY2UmJnRva2VuIT09JywnKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbm5lZWRTcGFjZT10cnVlO1xucmV0dXJuIHN0cmluZ3MucHVzaCh0b2tlbik7XG4gfSxcbmNsb3NlOihjbG9zZUJyYWNrZXQpPT57XG5hc3NlcnQobGV2ZWw+PTEpO1xubGV2ZWwtPTE7XG5saW5lKCk7XG5yZXR1cm4gc3RyaW5ncy5wdXNoKGNsb3NlQnJhY2tldCk7XG4gfSxcbmRvbmU6KCk9PntcbmFzc2VydC5lcXVhbChsZXZlbCwwKTtcbnJldHVybiBzdHJpbmdzLmpvaW4oJycpO1xuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBiYWRQYWlyUGF0dGVybj0vXig/Olxcd1xcd3w8PHw+PnxcXCtcXCt8LS18PCF8LT4pJC87XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VOb0luZGVudGVyPSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RyaW5ncz1bXTtcbnJldHVybiBoYXJkZW4oe1xub3Blbjoob3BlbkJyYWNrZXQpPT5zdHJpbmdzLnB1c2gob3BlbkJyYWNrZXQpLFxubGluZTooKT0+c3RyaW5ncy5sZW5ndGgsXG5uZXh0Oih0b2tlbik9PntcbmlmKHN0cmluZ3MubGVuZ3RoPj0xKXtcbmNvbnN0IGxhc3Q9c3RyaW5nc1tzdHJpbmdzLmxlbmd0aC0xXTtcbi8vXG5pZihsYXN0Lmxlbmd0aD49MSYmdG9rZW4ubGVuZ3RoPj0xKXtcbmNvbnN0IHBhaXI9IGAke2xhc3RbbGFzdC5sZW5ndGgtMV19JHt0b2tlblswXX1gO1xuaWYoYmFkUGFpclBhdHRlcm4udGVzdChwYWlyKSl7XG5zdHJpbmdzLnB1c2goJyAnKTtcbiB9XG4gfVxuIH1cbnJldHVybiBzdHJpbmdzLnB1c2godG9rZW4pO1xuIH0sXG5jbG9zZTooY2xvc2VCcmFja2V0KT0+e1xuaWYoc3RyaW5ncy5sZW5ndGg+PTEmJnN0cmluZ3Nbc3RyaW5ncy5sZW5ndGgtMV09PT0nLCcpe1xuc3RyaW5ncy5wb3AoKTtcbiB9XG5yZXR1cm4gc3RyaW5ncy5wdXNoKGNsb3NlQnJhY2tldCk7XG4gfSxcbmRvbmU6KCk9PnN0cmluZ3Muam9pbignJyl9KTtcblxuIH07XG5cbmNvbnN0IGlkZW50UGF0dGVybj0vXlthLXpBLVpdXFx3KiQvO1xuaGFyZGVuKGlkZW50UGF0dGVybik7XG5jb25zdCBBdEF0UHJlZml4UGF0dGVybj0vXkBAKC4qKSQvO1xuaGFyZGVuKEF0QXRQcmVmaXhQYXR0ZXJuKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWNvZGVUb0p1c3Rpbj0oZW5jb2Rpbmcsc2hvdWxkSW5kZW50PWZhbHNlLHNsb3RzPVtdKT0+e1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmU9KHJhd1RyZWUpPT57XG5pZighaXNPYmplY3QocmF3VHJlZSkpe1xucmV0dXJuO1xuIH1cbi8vXG5hc3NlcnQudHlwZW9mKHJhd1RyZWUsJ29iamVjdCcpO1xuYXNzZXJ0KHJhd1RyZWUhPT1udWxsKTtcbmlmKFFDTEFTUyBpbiByYXdUcmVlKXtcbmNvbnN0IHFjbGFzcz1yYXdUcmVlW1FDTEFTU107XG50eXBlb2YgcWNsYXNzPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBxY2xhc3MgdHlwZW9mICR7cSh0eXBlb2YgcWNsYXNzKX1gO1xuYXNzZXJ0KCFpc0FycmF5KHJhd1RyZWUpKTtcbnN3aXRjaChyYXdUcmVlWydAcWNsYXNzJ10pe1xuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdOYU4nOlxuY2FzZSdJbmZpbml0eSc6XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PXJhd1RyZWU7XG50eXBlb2YgZGlnaXRzPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBkaWdpdHMgdHlwZW9mICR7cSh0eXBlb2YgZGlnaXRzKX1gO1xucmV0dXJuO1xuIH1cbmNhc2UnQEBhc3luY0l0ZXJhdG9yJzp7XG5yZXR1cm47XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuY29uc3Qgc3ltPXBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbmFzc2VydC50eXBlb2Yoc3ltLCdzeW1ib2wnKTtcbnJldHVybjtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3R7dGFnLHBheWxvYWR9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKHRhZywnc3RyaW5nJyk7XG5wcmVwYXJlKHBheWxvYWQpO1xucmV0dXJuO1xuIH1cbmNhc2Unc2xvdCc6e1xuY29uc3R7aW5kZXgsaWZhY2V9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcbk5hdChpbmRleCk7XG5pZihpZmFjZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnQudHlwZW9mKGlmYWNlLCdzdHJpbmcnKTtcbiB9XG5yZXR1cm47XG4gfVxuY2FzZSdoaWxiZXJ0Jzp7XG5jb25zdHtvcmlnaW5hbCxyZXN0fT1yYXdUcmVlO1xuJ29yaWdpbmFsJ2luIHJhd1RyZWV8fFxuRmFpbCBgSW52YWxpZCBIaWxiZXJ0IEhvdGVsIGVuY29kaW5nICR7cmF3VHJlZX1gO1xucHJlcGFyZShvcmlnaW5hbCk7XG5pZigncmVzdCdpbiByYXdUcmVlKXtcbmlmKHR5cGVvZiByZXN0IT09J29iamVjdCcpe1xudGhyb3cgRmFpbCBgUmVzdCAke3Jlc3R9IGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0YDtcbiB9XG5pZihyZXN0PT09bnVsbCl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBub3QgYmUgbnVsbGA7XG4gfVxuaWYoaXNBcnJheShyZXN0KSl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBub3QgYmUgYW4gYXJyYXlgO1xuIH1cbmlmKFFDTEFTUyBpbiByZXN0KXtcbnRocm93IEZhaWwgYFJlc3QgZW5jb2RpbmcgJHtyZXN0fSBtdXN0IG5vdCBjb250YWluICR7cShRQ0xBU1MpfWA7XG4gfVxuY29uc3QgbmFtZXM9b3duS2V5cyhyZXN0KTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgbmFtZSAke25hbWV9IG9mICR7cmF3VHJlZX0gbXVzdCBiZSBhIHN0cmluZ2A7XG5wcmVwYXJlKHJlc3RbbmFtZV0pO1xuIH1cbiB9XG5yZXR1cm47XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3R7bmFtZSxtZXNzYWdlfT1yYXdUcmVlO1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGVycm9yIG5hbWUgdHlwZW9mICR7cSh0eXBlb2YgbmFtZSl9YDtcbiB9XG5nZXRFcnJvckNvbnN0cnVjdG9yKG5hbWUpIT09dW5kZWZpbmVkfHxcbkZhaWwgYE11c3QgYmUgdGhlIG5hbWUgb2YgYW4gRXJyb3IgY29uc3RydWN0b3IgJHtuYW1lfWA7XG50eXBlb2YgbWVzc2FnZT09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZXJyb3IgbWVzc2FnZSB0eXBlb2YgJHtxKHR5cGVvZiBtZXNzYWdlKX1gO1xucmV0dXJuO1xuIH1cblxuZGVmYXVsdDp7XG5hc3NlcnQuZmFpbChYIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfWVsc2UgaWYoaXNBcnJheShyYXdUcmVlKSl7XG5jb25zdHtsZW5ndGh9PXJhd1RyZWU7XG5mb3IobGV0IGk9MDtpPGxlbmd0aDtpKz0xKXtcbnByZXBhcmUocmF3VHJlZVtpXSk7XG4gfVxuIH1lbHNle1xuY29uc3QgbmFtZXM9b3duS2V5cyhyYXdUcmVlKTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbmlmKHR5cGVvZiBuYW1lIT09J3N0cmluZycpe1xudGhyb3cgRmFpbCBgUHJvcGVydHkgbmFtZSAke25hbWV9IG9mICR7cmF3VHJlZX0gbXVzdCBiZSBhIHN0cmluZ2A7XG4gfVxucHJlcGFyZShyYXdUcmVlW25hbWVdKTtcbiB9XG4gfVxuIH07XG5cbmNvbnN0IG1ha2VJbmRlbnRlcj1zaG91bGRJbmRlbnQ/bWFrZVllc0luZGVudGVyOm1ha2VOb0luZGVudGVyO1xubGV0IG91dD1tYWtlSW5kZW50ZXIoKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGU9KHJhd1RyZWUpPT57XG4vL1xucmV0dXJuIHJlY3VyKHJhd1RyZWUpO1xuIH07XG5cbmNvbnN0IGRlY29kZVByb3BlcnR5PShuYW1lLHZhbHVlKT0+e1xub3V0LmxpbmUoKTtcbmlmKG5hbWU9PT0nX19wcm90b19fJyl7XG4vL1xuLy9cbi8vXG4vL1xub3V0Lm5leHQoIGBbXCJfX3Byb3RvX19cIl06YCk7XG4gfWVsc2UgaWYoaWRlbnRQYXR0ZXJuLnRlc3QobmFtZSkpe1xub3V0Lm5leHQoIGAke25hbWV9OmApO1xuIH1lbHNle1xub3V0Lm5leHQoIGAke3F1b3RlKG5hbWUpfTpgKTtcbiB9XG5kZWNvZGUodmFsdWUpO1xub3V0Lm5leHQoJywnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgcmVjdXI9KHJhd1RyZWUpPT57XG5pZighaXNPYmplY3QocmF3VHJlZSkpe1xuLy9cbnJldHVybiBvdXQubmV4dChxdW90ZShyYXdUcmVlKSk7XG4gfVxuLy9cbmFzc2VydC50eXBlb2YocmF3VHJlZSwnb2JqZWN0Jyk7XG5hc3NlcnQocmF3VHJlZSE9PW51bGwpO1xuaWYoUUNMQVNTIGluIHJhd1RyZWUpe1xuY29uc3QgcWNsYXNzPXJhd1RyZWVbUUNMQVNTXTtcbmFzc2VydC50eXBlb2YocWNsYXNzLCdzdHJpbmcnKTtcbmFzc2VydCghaXNBcnJheShyYXdUcmVlKSk7XG4vL1xuLy9cbi8vXG5zd2l0Y2gocmF3VHJlZVsnQHFjbGFzcyddKXtcbi8vXG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ05hTic6XG5jYXNlJ0luZmluaXR5JzpcbmNhc2UnLUluZmluaXR5Jzp7XG4vL1xucmV0dXJuIG91dC5uZXh0KHFjbGFzcyk7XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0e2RpZ2l0c309cmF3VHJlZTtcbmFzc2VydC50eXBlb2YoZGlnaXRzLCdzdHJpbmcnKTtcbnJldHVybiBvdXQubmV4dCggYCR7QmlnSW50KGRpZ2l0cyl9bmApO1xuIH1cbmNhc2UnQEBhc3luY0l0ZXJhdG9yJzp7XG4vL1xucmV0dXJuIG91dC5uZXh0KCdTeW1ib2wuYXN5bmNJdGVyYXRvcicpO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5jb25zdHtuYW1lfT1yYXdUcmVlO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbmNvbnN0IHN5bT1wYXNzYWJsZVN5bWJvbEZvck5hbWUobmFtZSk7XG5hc3NlcnQudHlwZW9mKHN5bSwnc3ltYm9sJyk7XG5jb25zdCByZWdpc3RlcmVkTmFtZT1TeW1ib2wua2V5Rm9yKHN5bSk7XG5pZihyZWdpc3RlcmVkTmFtZT09PXVuZGVmaW5lZCl7XG5jb25zdCBtYXRjaD1BdEF0UHJlZml4UGF0dGVybi5leGVjKG5hbWUpO1xuYXNzZXJ0KG1hdGNoIT09bnVsbCk7XG5jb25zdCBzdWZmaXg9bWF0Y2hbMV07XG5hc3NlcnQoU3ltYm9sW3N1ZmZpeF09PT1zeW0pO1xuYXNzZXJ0KGlkZW50UGF0dGVybi50ZXN0KHN1ZmZpeCkpO1xucmV0dXJuIG91dC5uZXh0KCBgU3ltYm9sLiR7c3VmZml4fWApO1xuIH1cbnJldHVybiBvdXQubmV4dCggYFN5bWJvbC5mb3IoJHtxdW90ZShyZWdpc3RlcmVkTmFtZSl9KWApO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09cmF3VHJlZTtcbm91dC5uZXh0KCBgbWFrZVRhZ2dlZCgke3F1b3RlKHRhZyl9LGApO1xuZGVjb2RlKHBheWxvYWQpO1xucmV0dXJuIG91dC5uZXh0KCcpJyk7XG4gfVxuXG5jYXNlJ3Nsb3QnOntcbmxldHtpZmFjZX09cmF3VHJlZTtcbmNvbnN0IGluZGV4PU51bWJlcihOYXQocmF3VHJlZS5pbmRleCkpO1xuY29uc3QgbmVzdGVkUmVuZGVyPShhcmcpPT57XG5jb25zdCBvbGRPdXQ9b3V0O1xudHJ5e1xub3V0PW1ha2VOb0luZGVudGVyKCk7XG5kZWNvZGUoYXJnKTtcbnJldHVybiBvdXQuZG9uZSgpO1xuIH1maW5hbGx5e1xub3V0PW9sZE91dDtcbiB9XG4gfTtcbmlmKGluZGV4PHNsb3RzLmxlbmd0aCl7XG5jb25zdCBzbG90PW5lc3RlZFJlbmRlcihzbG90c1tpbmRleF0pO1xuaWYoaWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdFRvVmFsKCR7c2xvdH0pYCk7XG4gfVxuaWZhY2U9bmVzdGVkUmVuZGVyKGlmYWNlKTtcbnJldHVybiBvdXQubmV4dCggYHNsb3RUb1ZhbCgke3Nsb3R9LCR7aWZhY2V9KWApO1xuIH1lbHNlIGlmKGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBvdXQubmV4dCggYHNsb3QoJHtpbmRleH0pYCk7XG4gfVxuaWZhY2U9bmVzdGVkUmVuZGVyKGlmYWNlKTtcbnJldHVybiBvdXQubmV4dCggYHNsb3QoJHtpbmRleH0sJHtpZmFjZX0pYCk7XG4gfVxuXG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PXJhd1RyZWU7XG5vdXQub3BlbigneycpO1xuZGVjb2RlUHJvcGVydHkoUUNMQVNTLG9yaWdpbmFsKTtcbmlmKCdyZXN0J2luIHJhd1RyZWUpe1xuYXNzZXJ0LnR5cGVvZihyZXN0LCdvYmplY3QnKTtcbmFzc2VydChyZXN0IT09bnVsbCk7XG5jb25zdCBuYW1lcz1vd25LZXlzKHJlc3QpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBQcm9wZXJ0eSBuYW1lICR7cShcbm5hbWUpXG4gfSBvZiAke3Jlc3R9IG11c3QgYmUgYSBzdHJpbmdgO1xuIH1cbmRlY29kZVByb3BlcnR5KG5hbWUscmVzdFtuYW1lXSk7XG4gfVxuIH1cbnJldHVybiBvdXQuY2xvc2UoJ30nKTtcbiB9XG5cbmNhc2UnZXJyb3InOntcbmNvbnN0e1xubmFtZSxcbm1lc3NhZ2UsXG5jYXVzZT11bmRlZmluZWQsXG5lcnJvcnM9dW5kZWZpbmVkfT1cbnJhd1RyZWU7XG5jYXVzZT09PXVuZGVmaW5lZHx8XG5GYWlsIGBlcnJvciBjYXVzZSBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbm5hbWUhPT0gYEFnZ3JlZ2F0ZUVycm9yYHx8XG5GYWlsIGBBZ2dyZWdhdGVFcnJvciBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbmVycm9ycz09PXVuZGVmaW5lZHx8XG5GYWlsIGBlcnJvciBlcnJvcnMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiBtYXJzaGFsLWp1c3RpbmA7XG5yZXR1cm4gb3V0Lm5leHQoIGAke25hbWV9KCR7cXVvdGUobWVzc2FnZSl9KWApO1xuIH1cblxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYHVucmVjb2duaXplZCAke3EoUUNMQVNTKX0gJHtxKHFjbGFzcyl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfWVsc2UgaWYoaXNBcnJheShyYXdUcmVlKSl7XG5jb25zdHtsZW5ndGh9PXJhd1RyZWU7XG5pZihsZW5ndGg9PT0wKXtcbnJldHVybiBvdXQubmV4dCgnW10nKTtcbiB9ZWxzZXtcbm91dC5vcGVuKCdbJyk7XG5mb3IobGV0IGk9MDtpPGxlbmd0aDtpKz0xKXtcbm91dC5saW5lKCk7XG5kZWNvZGUocmF3VHJlZVtpXSk7XG5vdXQubmV4dCgnLCcpO1xuIH1cbnJldHVybiBvdXQuY2xvc2UoJ10nKTtcbiB9XG4gfWVsc2V7XG4vL1xuLy9cbmNvbnN0IG5hbWVzPS8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhyYXdUcmVlKTtcbmlmKG5hbWVzLmxlbmd0aD09PTApe1xucmV0dXJuIG91dC5uZXh0KCd7fScpO1xuIH1lbHNle1xub3V0Lm9wZW4oJ3snKTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbmRlY29kZVByb3BlcnR5KG5hbWUscmF3VHJlZVtuYW1lXSk7XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnfScpO1xuIH1cbiB9XG4gfTtcbnByZXBhcmUoZW5jb2RpbmcpO1xuZGVjb2RlKGVuY29kaW5nKTtcbnJldHVybiBvdXQuZG9uZSgpO1xuIH07JGjigI1fb25jZS5kZWNvZGVUb0p1c3RpbihkZWNvZGVUb0p1c3Rpbik7XG5oYXJkZW4oZGVjb2RlVG9KdXN0aW4pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVjb2RlVG9KdXN0aW4iOlsiZGVjb2RlVG9KdXN0aW4iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAbcoZY2cGAABnBgAALQAAAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL21hcnNoYWwuanMiXSwiZXhwb3J0cyI6WyJwYXJzZSIsInN0cmluZ2lmeSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtYWtlTWFyc2hhbDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiLi9tYXJzaGFsLmpzXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjigI1fYSA9PiAobWFrZU1hcnNoYWwgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRvTm90Q29udmVydFZhbFRvU2xvdD0odmFsKT0+XG5GYWlsIGBNYXJzaGFsJ3Mgc3RyaW5naWZ5IHJlamVjdHMgcHJlc2VuY2VzIGFuZCBwcm9taXNlcyAke3ZhbH1gO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRvTm90Q29udmVydFNsb3RUb1ZhbD0oc2xvdCxfaWZhY2UpPT5cbkZhaWwgYE1hcnNoYWwncyBwYXJzZSBtdXN0IG5vdCBlbmNvZGUgYW55IHNsb3RzICR7c2xvdH1gO1xuXG5jb25zdCBiYWRBcnJheUhhbmRsZXI9aGFyZGVuKHtcbmdldDooX3RhcmdldCxuYW1lLF9yZWNlaXZlcik9PntcbmlmKG5hbWU9PT0nbGVuZ3RoJyl7XG5yZXR1cm4gMDtcbiB9XG4vL1xudGhyb3cgRmFpbCBgTWFyc2hhbCdzIHBhcnNlIG11c3Qgbm90IGVuY29kZSBhbnkgc2xvdCBwb3NpdGlvbnMgJHtuYW1lfWA7XG4gfX0pO1xuXG5cbmNvbnN0IGJhZEFycmF5PWhhcmRlbihuZXcgUHJveHkoaGFyZGVuKFtdKSxiYWRBcnJheUhhbmRsZXIpKTtcblxuY29uc3R7c2VyaWFsaXplLHVuc2VyaWFsaXplfT1tYWtlTWFyc2hhbChcbmRvTm90Q29udmVydFZhbFRvU2xvdCxcbmRvTm90Q29udmVydFNsb3RUb1ZhbCxcbntcbmVycm9yVGFnZ2luZzonb2ZmJyxcbi8vXG5zZXJpYWxpemVCb2R5Rm9ybWF0OidjYXBkYXRhJ30pO1xuXG5cblxuLypcblxuXG4gKi9cbmNvbnN0IHN0cmluZ2lmeT0odmFsKT0+c2VyaWFsaXplKHZhbCkuYm9keTskaOKAjV9vbmNlLnN0cmluZ2lmeShzdHJpbmdpZnkpO1xuaGFyZGVuKHN0cmluZ2lmeSk7XG5cbi8qXG5cblxuICovXG5jb25zdCBwYXJzZT0oc3RyKT0+XG51bnNlcmlhbGl6ZShcbmhhcmRlbih7XG5ib2R5OnN0cixcbnNsb3RzOmJhZEFycmF5fSkpOyRo4oCNX29uY2UucGFyc2UocGFyc2UpO1xuXG5cbmhhcmRlbihwYXJzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzdHJpbmdpZnkiOlsic3RyaW5naWZ5Il0sInBhcnNlIjpbInBhcnNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFcTv9dSJwAAUicAACMAAABAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvbWFyc2hhbC5qc3siaW1wb3J0cyI6WyJAZW5kby9uYXQiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCIuL2VuY29kZVRvQ2FwRGF0YS5qcyIsIi4vZW5jb2RlVG9TbWFsbGNhcHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlTWFyc2hhbCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTmF0LGFzc2VydFBhc3NhYmxlLGdldEludGVyZmFjZU9mLGdldEVycm9yQ29uc3RydWN0b3IsaGFzT3duUHJvcGVydHlPZix0b1Bhc3NhYmxlRXJyb3IsWCxGYWlsLHEsbWFrZUVycm9yLGFubm90YXRlRXJyb3Isb2JqZWN0TWFwLFFDTEFTUyxtYWtlRW5jb2RlVG9DYXBEYXRhLG1ha2VEZWNvZGVGcm9tQ2FwRGF0YSxtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyxtYWtlRW5jb2RlVG9TbWFsbGNhcHM7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRo4oCNX2EgPT4gKE5hdCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaOKAjV9hKV1dLFtcImdldEludGVyZmFjZU9mXCIsIFskaOKAjV9hID0+IChnZXRJbnRlcmZhY2VPZiA9ICRo4oCNX2EpXV0sW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjigI1fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRo4oCNX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjigI1fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRo4oCNX2EpXV0sW1widG9QYXNzYWJsZUVycm9yXCIsIFskaOKAjV9hID0+ICh0b1Bhc3NhYmxlRXJyb3IgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaOKAjV9hID0+IChYID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRo4oCNX2EgPT4gKG1ha2VFcnJvciA9ICRo4oCNX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjigI1fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaOKAjV9hID0+IChvYmplY3RNYXAgPSAkaOKAjV9hKV1dXV0sW1wiLi9lbmNvZGVUb0NhcERhdGEuanNcIiwgW1tcIlFDTEFTU1wiLCBbJGjigI1fYSA9PiAoUUNMQVNTID0gJGjigI1fYSldXSxbXCJtYWtlRW5jb2RlVG9DYXBEYXRhXCIsIFskaOKAjV9hID0+IChtYWtlRW5jb2RlVG9DYXBEYXRhID0gJGjigI1fYSldXSxbXCJtYWtlRGVjb2RlRnJvbUNhcERhdGFcIiwgWyRo4oCNX2EgPT4gKG1ha2VEZWNvZGVGcm9tQ2FwRGF0YSA9ICRo4oCNX2EpXV1dXSxbXCIuL2VuY29kZVRvU21hbGxjYXBzLmpzXCIsIFtbXCJtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwc1wiLCBbJGjigI1fYSA9PiAobWFrZURlY29kZUZyb21TbWFsbGNhcHMgPSAkaOKAjV9hKV1dLFtcIm1ha2VFbmNvZGVUb1NtYWxsY2Fwc1wiLCBbJGjigI1fYSA9PiAobWFrZUVuY29kZVRvU21hbGxjYXBzID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG5jb25zdHtkZWZpbmVQcm9wZXJ0aWVzfT1PYmplY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdFZhbFRvU2xvdEZuPSh4KT0+eDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdFNsb3RUb1ZhbEZuPSh4LF8pPT54O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWFyc2hhbD0oXG5jb252ZXJ0VmFsVG9TbG90PWRlZmF1bHRWYWxUb1Nsb3RGbixcbmNvbnZlcnRTbG90VG9WYWw9ZGVmYXVsdFNsb3RUb1ZhbEZuLFxue1xuZXJyb3JUYWdnaW5nPSdvbicsXG5tYXJzaGFsTmFtZT0nYW5vbi1tYXJzaGFsJyxcbi8vXG4vL1xuZXJyb3JJZE51bT0xMDAwMCxcbi8vXG4vL1xubWFyc2hhbFNhdmVFcnJvcj0oZXJyKT0+XG5jb25zb2xlLmxvZygnVGVtcG9yYXJ5IGxvZ2dpbmcgb2Ygc2VudCBlcnJvcicsZXJyKSxcbi8vXG4vL1xuc2VyaWFsaXplQm9keUZvcm1hdD0nY2FwZGF0YSd9PVxue30pPT5cbntcbmFzc2VydC50eXBlb2YobWFyc2hhbE5hbWUsJ3N0cmluZycpO1xuZXJyb3JUYWdnaW5nPT09J29uJ3x8XG5lcnJvclRhZ2dpbmc9PT0nb2ZmJ3x8XG5GYWlsIGBUaGUgZXJyb3JUYWdnaW5nIG9wdGlvbiBjYW4gb25seSBiZSBcIm9uXCIgb3IgXCJvZmZcIiAke2Vycm9yVGFnZ2luZ31gO1xuY29uc3QgbmV4dEVycm9ySWQ9KCk9PntcbmVycm9ySWROdW0rPTE7XG5yZXR1cm4gYGVycm9yOiR7bWFyc2hhbE5hbWV9IyR7ZXJyb3JJZE51bX1gO1xuIH07XG5cbi8qXG5cbiAgICovXG5jb25zdCB0b0NhcERhdGE9KHJvb3QpPT57XG5jb25zdCBzbG90cz1bXTtcbi8vXG5jb25zdCBzbG90TWFwPW5ldyBNYXAoKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBlbmNvZGVTbG90Q29tbW9uPShwYXNzYWJsZSk9PntcbmxldCBpbmRleD1zbG90TWFwLmdldChwYXNzYWJsZSk7XG5pZihpbmRleCE9PXVuZGVmaW5lZCl7XG4vL1xuYXNzZXJ0LnR5cGVvZihpbmRleCwnbnVtYmVyJyk7XG5yZXR1cm4gaGFyZGVuKHtpbmRleCxyZXBlYXQ6dHJ1ZX0pO1xuIH1cblxuaW5kZXg9c2xvdHMubGVuZ3RoO1xuY29uc3Qgc2xvdD1jb252ZXJ0VmFsVG9TbG90KHBhc3NhYmxlKTtcbnNsb3RzLnB1c2goc2xvdCk7XG5zbG90TWFwLnNldChwYXNzYWJsZSxpbmRleCk7XG5yZXR1cm4gaGFyZGVuKHtpbmRleCxyZXBlYXQ6ZmFsc2V9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmNvbnN0IGVuY29kZUVycm9yQ29tbW9uPShlcnIsZW5jb2RlUmVjdXIpPT57XG5jb25zdCBtZXNzYWdlPWVuY29kZVJlY3VyKCBgJHtlcnIubWVzc2FnZX1gKTtcbmFzc2VydC50eXBlb2YobWVzc2FnZSwnc3RyaW5nJyk7XG5jb25zdCBuYW1lPWVuY29kZVJlY3VyKCBgJHtlcnIubmFtZX1gKTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG4vL1xuLy9cbi8vXG5pZihlcnJvclRhZ2dpbmc9PT0nb24nKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBlcnJvcklkPWVuY29kZVJlY3VyKG5leHRFcnJvcklkKCkpO1xuYXNzZXJ0LnR5cGVvZihlcnJvcklkLCdzdHJpbmcnKTtcbmFubm90YXRlRXJyb3IoZXJyLFggYFNlbnQgYXMgJHtlcnJvcklkfWApO1xubWFyc2hhbFNhdmVFcnJvcihlcnIpO1xucmV0dXJuIGhhcmRlbih7ZXJyb3JJZCxtZXNzYWdlLG5hbWV9KTtcbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe21lc3NhZ2UsbmFtZX0pO1xuIH1cbiB9O1xuXG5pZihzZXJpYWxpemVCb2R5Rm9ybWF0PT09J2NhcGRhdGEnKXtcbi8qXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RUb0NhcERhdGE9KHBhc3NhYmxlLGlmYWNlPXVuZGVmaW5lZCk9PntcbmNvbnN0e2luZGV4LHJlcGVhdH09ZW5jb2RlU2xvdENvbW1vbihwYXNzYWJsZSk7XG5cbmlmKHJlcGVhdD09PXRydWV8fGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBoYXJkZW4oe1tRQ0xBU1NdOidzbG90JyxpbmRleH0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J3Nsb3QnLGlmYWNlLGluZGV4fSk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhPSh2YWwsX2VuY29kZVJlY3VyKT0+XG5lbmNvZGVTbG90VG9DYXBEYXRhKHZhbCxnZXRJbnRlcmZhY2VPZih2YWwpKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YT0ocHJvbWlzZSxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb0NhcERhdGEocHJvbWlzZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAgICovXG5jb25zdCBlbmNvZGVFcnJvclRvQ2FwRGF0YT0oZXJyLGVuY29kZVJlY3VyKT0+e1xuY29uc3QgZXJyRGF0YT1lbmNvZGVFcnJvckNvbW1vbihlcnIsZW5jb2RlUmVjdXIpO1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J2Vycm9yJywuLi5lcnJEYXRhfSk7XG4gfTtcblxuY29uc3QgZW5jb2RlVG9DYXBEYXRhPW1ha2VFbmNvZGVUb0NhcERhdGEoe1xuZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhLFxuZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YSxcbmVuY29kZUVycm9yVG9DYXBEYXRhfSk7XG5cblxuY29uc3QgZW5jb2RlZD1lbmNvZGVUb0NhcERhdGEocm9vdCk7XG5jb25zdCBib2R5PUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xucmV0dXJuIGhhcmRlbih7XG5ib2R5LFxuc2xvdHN9KTtcblxuIH1lbHNlIGlmKHNlcmlhbGl6ZUJvZHlGb3JtYXQ9PT0nc21hbGxjYXBzJyl7XG4vKlxuXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RUb1NtYWxsY2Fwcz0ocHJlZml4LHBhc3NhYmxlLGlmYWNlPXVuZGVmaW5lZCk9PntcbmNvbnN0e2luZGV4LHJlcGVhdH09ZW5jb2RlU2xvdENvbW1vbihwYXNzYWJsZSk7XG5cbi8vXG5pZihyZXBlYXQ9PT10cnVlfHxpZmFjZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gYCR7cHJlZml4fSR7aW5kZXh9YDtcbiB9XG5yZXR1cm4gYCR7cHJlZml4fSR7aW5kZXh9LiR7aWZhY2V9YDtcbiB9O1xuXG5jb25zdCBlbmNvZGVSZW1vdGFibGVUb1NtYWxsY2Fwcz0ocmVtb3RhYmxlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvU21hbGxjYXBzKCckJyxyZW1vdGFibGUsZ2V0SW50ZXJmYWNlT2YocmVtb3RhYmxlKSk7XG5cbmNvbnN0IGVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz0ocHJvbWlzZSxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb1NtYWxsY2FwcygnJicscHJvbWlzZSk7XG5cbmNvbnN0IGVuY29kZUVycm9yVG9TbWFsbGNhcHM9KGVycixlbmNvZGVSZWN1cik9PntcbmNvbnN0IGVyckRhdGE9ZW5jb2RlRXJyb3JDb21tb24oZXJyLGVuY29kZVJlY3VyKTtcbmNvbnN0e21lc3NhZ2UsLi4ucmVzdH09ZXJyRGF0YTtcbnJldHVybiBoYXJkZW4oeycjZXJyb3InOm1lc3NhZ2UsLi4ucmVzdH0pO1xuIH07XG5cbmNvbnN0IGVuY29kZVRvU21hbGxjYXBzPW1ha2VFbmNvZGVUb1NtYWxsY2Fwcyh7XG5lbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyxcbmVuY29kZVByb21pc2VUb1NtYWxsY2FwcyxcbmVuY29kZUVycm9yVG9TbWFsbGNhcHN9KTtcblxuXG5jb25zdCBlbmNvZGVkPWVuY29kZVRvU21hbGxjYXBzKHJvb3QpO1xuY29uc3Qgc21hbGxjYXBzQm9keT1KU09OLnN0cmluZ2lmeShlbmNvZGVkKTtcbnJldHVybiBoYXJkZW4oe1xuLy9cbi8vXG5ib2R5OiBgIyR7c21hbGxjYXBzQm9keX1gLFxuc2xvdHN9KTtcblxuIH1lbHNle1xuLy9cbnRocm93IEZhaWwgYFVucmVjb2duaXplZCBzZXJpYWxpemVCb2R5Rm9ybWF0OiAke3Eoc2VyaWFsaXplQm9keUZvcm1hdCl9YDtcbiB9XG4gfTtcblxuY29uc3QgbWFrZUZ1bGxSZXZpdmU9KHNsb3RzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHZhbE1hcD1uZXcgTWFwKCk7XG5cbi8qXG5cblxuICAgICAqL1xuY29uc3QgZGVjb2RlU2xvdENvbW1vbj0oc2xvdERhdGEpPT57XG5jb25zdHtpZmFjZT11bmRlZmluZWQsaW5kZXgsLi4ucmVzdH09c2xvdERhdGE7XG5vd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuRmFpbCBgdW5leHBlY3RlZCBlbmNvZGVkIHNsb3QgcHJvcGVydGllcyAke3Eob3duS2V5cyhyZXN0KSl9YDtcbmNvbnN0IGV4dGFudD12YWxNYXAuZ2V0KGluZGV4KTtcbmlmKGV4dGFudCl7XG5yZXR1cm4gZXh0YW50O1xuIH1cbi8vXG4vL1xuY29uc3Qgc2xvdD1zbG90c1tOdW1iZXIoTmF0KGluZGV4KSldO1xuY29uc3QgdmFsPWNvbnZlcnRTbG90VG9WYWwoc2xvdCxpZmFjZSk7XG52YWxNYXAuc2V0KGluZGV4LHZhbCk7XG5yZXR1cm4gdmFsO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAgICovXG5jb25zdCBkZWNvZGVFcnJvckNvbW1vbj0oZXJyRGF0YSxkZWNvZGVSZWN1cik9PntcbmNvbnN0e1xuZXJyb3JJZD11bmRlZmluZWQsXG5tZXNzYWdlLFxubmFtZSxcbmNhdXNlPXVuZGVmaW5lZCxcbmVycm9ycz11bmRlZmluZWQsXG4uLi5yZXN0fT1cbmVyckRhdGE7XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZE5hbWU9ZGVjb2RlUmVjdXIobmFtZSk7XG5jb25zdCBkTWVzc2FnZT1kZWNvZGVSZWN1cihtZXNzYWdlKTtcbi8vXG5jb25zdCBkRXJyb3JJZD0vKiAgICAgICAgICAgICAgICAgKi9lcnJvcklkJiZkZWNvZGVSZWN1cihlcnJvcklkKTtcbmlmKHR5cGVvZiBkTmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbmFtZSB0eXBlb2YgJHtxKHR5cGVvZiBkTmFtZSl9YDtcbiB9XG5pZih0eXBlb2YgZE1lc3NhZ2UhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGVycm9yIG1lc3NhZ2UgdHlwZW9mICR7cSh0eXBlb2YgZE1lc3NhZ2UpfWA7XG4gfVxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvcihkTmFtZSl8fEVycm9yO1xuY29uc3QgZXJyb3JOYW1lPVxuZEVycm9ySWQ9PT11bmRlZmluZWQ/XG4gYFJlbW90ZSR7ZXJyQ29uc3RydWN0b3IubmFtZX1gOlxuIGBSZW1vdGUke2VyckNvbnN0cnVjdG9yLm5hbWV9KCR7ZEVycm9ySWR9KWA7XG5jb25zdCBvcHRpb25zPXtcbmVycm9yTmFtZSxcbnNhbml0aXplOmZhbHNlfTtcblxuaWYoY2F1c2Upe1xub3B0aW9ucy5jYXVzZT1kZWNvZGVSZWN1cihjYXVzZSk7XG4gfVxuaWYoZXJyb3JzKXtcbm9wdGlvbnMuZXJyb3JzPWRlY29kZVJlY3VyKGVycm9ycyk7XG4gfVxuY29uc3QgcmF3RXJyb3I9bWFrZUVycm9yKGRNZXNzYWdlLGVyckNvbnN0cnVjdG9yLG9wdGlvbnMpO1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGRlc2NzPW9iamVjdE1hcChyZXN0LChkYXRhKT0+KHtcbnZhbHVlOmRlY29kZVJlY3VyKGRhdGEpLFxud3JpdGFibGU6ZmFsc2UsXG5lbnVtZXJhYmxlOmZhbHNlLFxuY29uZmlndXJhYmxlOmZhbHNlfSkpO1xuXG5kZWZpbmVQcm9wZXJ0aWVzKHJhd0Vycm9yLGRlc2NzKTtcbmhhcmRlbihyYXdFcnJvcik7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKHJhd0Vycm9yKTtcbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGRlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShyYXdUcmVlLF9kZWNvZGVSZWN1cik9PntcbmNvbnN0e1tRQ0xBU1NdOl8sLi4uc2xvdERhdGF9PXJhd1RyZWU7XG5yZXR1cm4gZGVjb2RlU2xvdENvbW1vbihzbG90RGF0YSk7XG4gfTtcblxuY29uc3QgZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0ocmF3VHJlZSxkZWNvZGVSZWN1cik9PntcbmNvbnN0e1tRQ0xBU1NdOl8sLi4uZXJyRGF0YX09cmF3VHJlZTtcbnJldHVybiBkZWNvZGVFcnJvckNvbW1vbihlcnJEYXRhLGRlY29kZVJlY3VyKTtcbiB9O1xuXG5jb25zdCByZXZpdmVGcm9tQ2FwRGF0YT1tYWtlRGVjb2RlRnJvbUNhcERhdGEoe1xuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGE6ZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE6ZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVFcnJvckZyb21DYXBEYXRhfSk7XG5cblxuY29uc3QgbWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzPShwcmVmaXgpPT57XG4vKlxuXG5cblxuICAgICAgICovXG5yZXR1cm4oc3RyaW5nRW5jb2RpbmcsX2RlY29kZVJlY3VyKT0+e1xuYXNzZXJ0KHN0cmluZ0VuY29kaW5nLmNoYXJBdCgwKT09PXByZWZpeCk7XG4vL1xuY29uc3QgaT1zdHJpbmdFbmNvZGluZy5pbmRleE9mKCcuJyk7XG5jb25zdCBpbmRleD1OdW1iZXIoc3RyaW5nRW5jb2Rpbmcuc2xpY2UoMSxpPDA/dW5kZWZpbmVkOmkpKTtcbi8vXG5jb25zdCBpZmFjZT1pPDA/dW5kZWZpbmVkOnN0cmluZ0VuY29kaW5nLnNsaWNlKGkrMSk7XG5yZXR1cm4gZGVjb2RlU2xvdENvbW1vbih7aWZhY2UsaW5kZXh9KTtcbiB9O1xuIH07XG5jb25zdCBkZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPW1ha2VEZWNvZGVTbG90RnJvbVNtYWxsY2FwcygnJCcpO1xuY29uc3QgZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzKCcmJyk7XG5cbmNvbnN0IGRlY29kZUVycm9yRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcsZGVjb2RlUmVjdXIpPT57XG5jb25zdHsnI2Vycm9yJzptZXNzYWdlLC4uLnJlc3RFcnJEYXRhfT1lbmNvZGluZztcbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RFcnJEYXRhLCdtZXNzYWdlJyl8fFxuRmFpbCBgdW5leHBlY3RlZCBlbmNvZGVkIGVycm9yIHByb3BlcnR5ICR7cSgnbWVzc2FnZScpfWA7XG5yZXR1cm4gZGVjb2RlRXJyb3JDb21tb24oe21lc3NhZ2UsLi4ucmVzdEVyckRhdGF9LGRlY29kZVJlY3VyKTtcbiB9O1xuXG5jb25zdCByZXZpdmVGcm9tU21hbGxjYXBzPW1ha2VEZWNvZGVGcm9tU21hbGxjYXBzKHtcbi8vXG5kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzLFxuLy9cbmRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzLFxuZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzfSk7XG5cblxucmV0dXJuIGhhcmRlbih7cmV2aXZlRnJvbUNhcERhdGEscmV2aXZlRnJvbVNtYWxsY2Fwc30pO1xuIH07XG5cbi8qXG5cbiAgICovXG5jb25zdCBmcm9tQ2FwRGF0YT0oZGF0YSk9PntcbmNvbnN0e2JvZHksc2xvdHN9PWRhdGE7XG50eXBlb2YgYm9keT09PSdzdHJpbmcnfHxcbkZhaWwgYHVuc2VyaWFsaXplKCkgZ2l2ZW4gbm9uLWNhcGRhdGEgKC5ib2R5IGlzICR7Ym9keX0sIG5vdCBzdHJpbmcpYDtcbmlzQXJyYXkoZGF0YS5zbG90cyl8fFxuRmFpbCBgdW5zZXJpYWxpemUoKSBnaXZlbiBub24tY2FwZGF0YSAoLnNsb3RzIGFyZSBub3QgQXJyYXkpYDtcbmNvbnN0e3Jldml2ZUZyb21DYXBEYXRhLHJldml2ZUZyb21TbWFsbGNhcHN9PW1ha2VGdWxsUmV2aXZlKHNsb3RzKTtcbmxldCByZXN1bHQ7XG4vL1xuaWYoYm9keS5jaGFyQXQoMCk9PT0nIycpe1xuY29uc3Qgc21hbGxjYXBzQm9keT1ib2R5LnNsaWNlKDEpO1xuY29uc3QgZW5jb2Rpbmc9aGFyZGVuKEpTT04ucGFyc2Uoc21hbGxjYXBzQm9keSkpO1xucmVzdWx0PWhhcmRlbihyZXZpdmVGcm9tU21hbGxjYXBzKGVuY29kaW5nKSk7XG4gfWVsc2V7XG5jb25zdCByYXdUcmVlPWhhcmRlbihKU09OLnBhcnNlKGJvZHkpKTtcbnJlc3VsdD1oYXJkZW4ocmV2aXZlRnJvbUNhcERhdGEocmF3VHJlZSkpO1xuIH1cbi8vXG4vL1xuLy9cbmFzc2VydFBhc3NhYmxlKHJlc3VsdCk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICovcmVzdWx0KTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtcbnRvQ2FwRGF0YSxcbmZyb21DYXBEYXRhLFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnNlcmlhbGl6ZTp0b0NhcERhdGEsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG51bnNlcmlhbGl6ZTpmcm9tQ2FwRGF0YX0pO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VNYXJzaGFsKG1ha2VNYXJzaGFsKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VNYXJzaGFsIjpbIm1ha2VNYXJzaGFsIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAK8iuY7sJQAA7CUAACUAAABAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvcmFua09yZGVyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiLCIuL2VuY29kZVBhc3NhYmxlLmpzIl0sImV4cG9ydHMiOlsiRnVsbFJhbmtDb3ZlciIsImFzc2VydFJhbmtTb3J0ZWQiLCJjb21wYXJhdG9yTWlycm9ySW1hZ2UiLCJjb21wYXJlQW50aVJhbmsiLCJjb21wYXJlUmFuayIsImNvdmVyZWRFbnRyaWVzIiwiZ2V0SW5kZXhDb3ZlciIsImdldFBhc3NTdHlsZUNvdmVyIiwiaW50ZXJzZWN0UmFua0NvdmVycyIsImlzUmFua1NvcnRlZCIsIm1ha2VDb21wYXJhdG9yS2l0IiwibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiLCJzb3J0QnlSYW5rIiwidHJpdmlhbENvbXBhcmF0b3IiLCJ1bmlvblJhbmtDb3ZlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldFRhZyxwYXNzU3R5bGVPZixuYW1lRm9yUGFzc2FibGVTeW1ib2wsRmFpbCxxLHBhc3NTdHlsZVByZWZpeGVzLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlczskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRUYWdcIiwgWyRo4oCNX2EgPT4gKGdldFRhZyA9ICRo4oCNX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJuYW1lRm9yUGFzc2FibGVTeW1ib2xcIiwgWyRo4oCNX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiLi9lbmNvZGVQYXNzYWJsZS5qc1wiLCBbW1wicGFzc1N0eWxlUHJlZml4ZXNcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZVByZWZpeGVzID0gJGjigI1fYSldXSxbXCJyZWNvcmROYW1lc1wiLCBbJGjigI1fYSA9PiAocmVjb3JkTmFtZXMgPSAkaOKAjV9hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjigI1fYSA9PiAocmVjb3JkVmFsdWVzID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0e2VudHJpZXMsZnJvbUVudHJpZXMsc2V0UHJvdG90eXBlT2YsaXN9PU9iamVjdDtcblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc2FtZVZhbHVlWmVybz0oeCx5KT0+eD09PXl8fGlzKHgseSk7XG5cbmNvbnN0ICAgICAgICB0cml2aWFsQ29tcGFyYXRvcj0obGVmdCxyaWdodCk9PlxuLy9cbmxlZnQ8cmlnaHQ/LTE6bGVmdD09PXJpZ2h0PzA6MTtcblxuLypcblxuICovJGjigI1fb25jZS50cml2aWFsQ29tcGFyYXRvcih0cml2aWFsQ29tcGFyYXRvcik7XG5cbmNvbnN0IHBhc3NTdHlsZVJhbmtzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5mcm9tRW50cmllcyhcbmVudHJpZXMocGFzc1N0eWxlUHJlZml4ZXMpXG4vL1xuLnNvcnQoKFtfbGVmdFN0eWxlLGxlZnRQcmVmaXhlc10sW19yaWdodFN0eWxlLHJpZ2h0UHJlZml4ZXNdKT0+e1xucmV0dXJuIHRyaXZpYWxDb21wYXJhdG9yKGxlZnRQcmVmaXhlcyxyaWdodFByZWZpeGVzKTtcbiB9KS5cbm1hcCgoW3Bhc3NTdHlsZSxwcmVmaXhlc10saW5kZXgpPT57XG4vL1xuLy9cbi8vXG5wcmVmaXhlcz09PVsuLi5wcmVmaXhlc10uc29ydCgpLmpvaW4oJycpfHxcbkZhaWwgYHVuc29ydGVkIHByZWZpeGVzIGZvciBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9OiAke3EocHJlZml4ZXMpfWA7XG5jb25zdCBjb3Zlcj1bXG5wcmVmaXhlcy5jaGFyQXQoMCksXG5TdHJpbmcuZnJvbUNoYXJDb2RlKHByZWZpeGVzLmNoYXJDb2RlQXQocHJlZml4ZXMubGVuZ3RoLTEpKzEpXTtcblxucmV0dXJuW3Bhc3NTdHlsZSx7aW5kZXgsY292ZXJ9XTtcbiB9KSk7XG5cblxuc2V0UHJvdG90eXBlT2YocGFzc1N0eWxlUmFua3MsbnVsbCk7XG5oYXJkZW4ocGFzc1N0eWxlUmFua3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0UGFzc1N0eWxlQ292ZXI9KHBhc3NTdHlsZSk9PnBhc3NTdHlsZVJhbmtzW3Bhc3NTdHlsZV0uY292ZXI7JGjigI1fb25jZS5nZXRQYXNzU3R5bGVDb3ZlcihnZXRQYXNzU3R5bGVDb3Zlcik7XG5oYXJkZW4oZ2V0UGFzc1N0eWxlQ292ZXIpO1xuXG4vKlxuXG4gKi9cbmNvbnN0IG1lbW9PZlNvcnRlZD1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG4gKi9cbmNvbnN0IGNvbXBhcmF0b3JNaXJyb3JJbWFnZXM9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb21wYXJhdG9yS2l0PShjb21wYXJlUmVtb3RhYmxlcz0oX3gsX3kpPT4wKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbXBhcmF0b3I9KGxlZnQscmlnaHQpPT57XG5pZihzYW1lVmFsdWVaZXJvKGxlZnQscmlnaHQpKXtcbnJldHVybiAwO1xuIH1cbmNvbnN0IGxlZnRTdHlsZT1wYXNzU3R5bGVPZihsZWZ0KTtcbmNvbnN0IHJpZ2h0U3R5bGU9cGFzc1N0eWxlT2YocmlnaHQpO1xuaWYobGVmdFN0eWxlIT09cmlnaHRTdHlsZSl7XG5yZXR1cm4gdHJpdmlhbENvbXBhcmF0b3IoXG5wYXNzU3R5bGVSYW5rc1tsZWZ0U3R5bGVdLmluZGV4LFxucGFzc1N0eWxlUmFua3NbcmlnaHRTdHlsZV0uaW5kZXgpO1xuXG4gfVxuLypcblxuICAgICAqL1xuc3dpdGNoKGxlZnRTdHlsZSl7XG5jYXNlJ3JlbW90YWJsZSc6e1xucmV0dXJuIGNvbXBhcmVSZW1vdGFibGVzKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xuLy9cbi8vXG5yZXR1cm4gMDtcbiB9XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOntcbi8vXG4vL1xuaWYobGVmdDxyaWdodCl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbmFzc2VydChsZWZ0PnJpZ2h0KTtcbnJldHVybiAxO1xuIH1cbiB9XG5jYXNlJ3N5bWJvbCc6e1xucmV0dXJuIGNvbXBhcmF0b3IoXG5uYW1lRm9yUGFzc2FibGVTeW1ib2wobGVmdCksXG5uYW1lRm9yUGFzc2FibGVTeW1ib2wocmlnaHQpKTtcblxuIH1cbmNhc2UnbnVtYmVyJzp7XG4vL1xuaWYoTnVtYmVyLmlzTmFOKGxlZnQpKXtcbmFzc2VydCghTnVtYmVyLmlzTmFOKHJpZ2h0KSk7XG5yZXR1cm4gMTtcbiB9ZWxzZSBpZihOdW1iZXIuaXNOYU4ocmlnaHQpKXtcbnJldHVybi0xO1xuIH1cbi8vXG4vL1xuaWYobGVmdDxyaWdodCl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbmFzc2VydChsZWZ0PnJpZ2h0KTtcbnJldHVybiAxO1xuIH1cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGxlZnROYW1lcz1yZWNvcmROYW1lcyhsZWZ0KTtcbmNvbnN0IHJpZ2h0TmFtZXM9cmVjb3JkTmFtZXMocmlnaHQpO1xuXG5jb25zdCByZXN1bHQ9Y29tcGFyYXRvcihsZWZ0TmFtZXMscmlnaHROYW1lcyk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxucmV0dXJuIGNvbXBhcmF0b3IoXG5yZWNvcmRWYWx1ZXMobGVmdCxsZWZ0TmFtZXMpLFxucmVjb3JkVmFsdWVzKHJpZ2h0LHJpZ2h0TmFtZXMpKTtcblxuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuY29uc3QgbGVuPU1hdGgubWluKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbmNvbnN0IHJlc3VsdD1jb21wYXJhdG9yKGxlZnRbaV0scmlnaHRbaV0pO1xuaWYocmVzdWx0IT09MCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG4vL1xuLy9cbnJldHVybiBjb21wYXJhdG9yKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbi8vXG5jb25zdCBsYWJlbENvbXA9Y29tcGFyYXRvcihnZXRUYWcobGVmdCksZ2V0VGFnKHJpZ2h0KSk7XG5pZihsYWJlbENvbXAhPT0wKXtcbnJldHVybiBsYWJlbENvbXA7XG4gfVxucmV0dXJuIGNvbXBhcmF0b3IobGVmdC5wYXlsb2FkLHJpZ2h0LnBheWxvYWQpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIHBhc3NTdHlsZTogJHtxKGxlZnRTdHlsZSl9YDtcbiB9fVxuXG4vKiAgICAgICAgICAgICAgICovXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFudGlDb21wYXJhdG9yPSh4LHkpPT5jb21wYXJhdG9yKHkseCk7XG5cbm1lbW9PZlNvcnRlZC5zZXQoY29tcGFyYXRvcixuZXcgV2Vha1NldCgpKTtcbm1lbW9PZlNvcnRlZC5zZXQoYW50aUNvbXBhcmF0b3IsbmV3IFdlYWtTZXQoKSk7XG5jb21wYXJhdG9yTWlycm9ySW1hZ2VzLnNldChjb21wYXJhdG9yLGFudGlDb21wYXJhdG9yKTtcbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuc2V0KGFudGlDb21wYXJhdG9yLGNvbXBhcmF0b3IpO1xuXG5yZXR1cm4gaGFyZGVuKHtjb21wYXJhdG9yLGFudGlDb21wYXJhdG9yfSk7XG4gfTtcbi8qXG5cblxuICovJGjigI1fb25jZS5tYWtlQ29tcGFyYXRvcktpdChtYWtlQ29tcGFyYXRvcktpdCk7XG5jb25zdCAgICAgICAgY29tcGFyYXRvck1pcnJvckltYWdlPShjb21wYXJhdG9yKT0+XG5jb21wYXJhdG9yTWlycm9ySW1hZ2VzLmdldChjb21wYXJhdG9yKTtcblxuLypcblxuXG5cbiAqLyRo4oCNX29uY2UuY29tcGFyYXRvck1pcnJvckltYWdlKGNvbXBhcmF0b3JNaXJyb3JJbWFnZSk7XG5jb25zdCAgICAgICAgaXNSYW5rU29ydGVkPShwYXNzYWJsZXMsY29tcGFyZSk9PntcbmNvbnN0IHN1Yk1lbW9PZlNvcnRlZD1tZW1vT2ZTb3J0ZWQuZ2V0KGNvbXBhcmUpO1xuYXNzZXJ0KHN1Yk1lbW9PZlNvcnRlZCE9PXVuZGVmaW5lZCk7XG5pZihzdWJNZW1vT2ZTb3J0ZWQuaGFzKHBhc3NhYmxlcykpe1xucmV0dXJuIHRydWU7XG4gfVxuYXNzZXJ0KHBhc3NTdHlsZU9mKHBhc3NhYmxlcyk9PT0nY29weUFycmF5Jyk7XG5mb3IobGV0IGk9MTtpPHBhc3NhYmxlcy5sZW5ndGg7aSs9MSl7XG5pZihjb21wYXJlKHBhc3NhYmxlc1tpLTFdLHBhc3NhYmxlc1tpXSk+PTEpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5zdWJNZW1vT2ZTb3J0ZWQuYWRkKHBhc3NhYmxlcyk7XG5yZXR1cm4gdHJ1ZTtcbiB9OyRo4oCNX29uY2UuaXNSYW5rU29ydGVkKGlzUmFua1NvcnRlZCk7XG5oYXJkZW4oaXNSYW5rU29ydGVkKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRSYW5rU29ydGVkPShzb3J0ZWQsY29tcGFyZSk9PlxuaXNSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKXx8XG4vL1xuLy9cbkZhaWwgYE11c3QgYmUgcmFuayBzb3J0ZWQ6ICR7c29ydGVkfSB2cyAke3NvcnRCeVJhbmsoc29ydGVkLGNvbXBhcmUpfWA7JGjigI1fb25jZS5hc3NlcnRSYW5rU29ydGVkKGFzc2VydFJhbmtTb3J0ZWQpO1xuaGFyZGVuKGFzc2VydFJhbmtTb3J0ZWQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzb3J0QnlSYW5rPShwYXNzYWJsZXMsY29tcGFyZSk9PntcbmlmKEFycmF5LmlzQXJyYXkocGFzc2FibGVzKSl7XG5oYXJkZW4ocGFzc2FibGVzKTtcbi8vXG4vL1xuLy9cbmlmKGlzUmFua1NvcnRlZChwYXNzYWJsZXMsY29tcGFyZSkpe1xucmV0dXJuIHBhc3NhYmxlcztcbiB9XG4gfVxuY29uc3QgdW5zb3J0ZWQ9Wy4uLnBhc3NhYmxlc107XG51bnNvcnRlZC5mb3JFYWNoKGhhcmRlbik7XG5jb25zdCBzb3J0ZWQ9aGFyZGVuKHVuc29ydGVkLnNvcnQoY29tcGFyZSkpO1xuY29uc3Qgc3ViTWVtb09mU29ydGVkPW1lbW9PZlNvcnRlZC5nZXQoY29tcGFyZSk7XG5hc3NlcnQoc3ViTWVtb09mU29ydGVkIT09dW5kZWZpbmVkKTtcbnN1Yk1lbW9PZlNvcnRlZC5hZGQoc29ydGVkKTtcbnJldHVybiBzb3J0ZWQ7XG4gfTskaOKAjV9vbmNlLnNvcnRCeVJhbmsoc29ydEJ5UmFuayk7XG5oYXJkZW4oc29ydEJ5UmFuayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCByYW5rU2VhcmNoPShzb3J0ZWQsY29tcGFyZSxrZXksYmlhcz0nbGVmdE1vc3QnKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChzb3J0ZWQsY29tcGFyZSk7XG5sZXQgbGVmdD0wO1xubGV0IHJpZ2h0PXNvcnRlZC5sZW5ndGg7XG53aGlsZShsZWZ0PHJpZ2h0KXtcbmNvbnN0IG09TWF0aC5mbG9vcigobGVmdCtyaWdodCkvMik7XG5jb25zdCBjb21wPWNvbXBhcmUoc29ydGVkW21dLGtleSk7XG5pZihjb21wPD0tMXx8Y29tcD09PTAmJmJpYXM9PT0ncmlnaHRNb3N0Jyl7XG5sZWZ0PW0rMTtcbiB9ZWxzZXtcbmFzc2VydChjb21wPj0xfHxjb21wPT09MCYmYmlhcz09PSdsZWZ0TW9zdCcpO1xucmlnaHQ9bTtcbiB9XG4gfVxucmV0dXJuIGJpYXM9PT0nbGVmdE1vc3QnP2xlZnQ6cmlnaHQtMTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbmRleENvdmVyPShzb3J0ZWQsY29tcGFyZSxbbGVmdEtleSxyaWdodEtleV0pPT57XG5hc3NlcnRSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKTtcbmNvbnN0IGxlZnRJbmRleD1yYW5rU2VhcmNoKHNvcnRlZCxjb21wYXJlLGxlZnRLZXksJ2xlZnRNb3N0Jyk7XG5jb25zdCByaWdodEluZGV4PXJhbmtTZWFyY2goc29ydGVkLGNvbXBhcmUscmlnaHRLZXksJ3JpZ2h0TW9zdCcpO1xucmV0dXJuW2xlZnRJbmRleCxyaWdodEluZGV4XTtcbiB9OyRo4oCNX29uY2UuZ2V0SW5kZXhDb3ZlcihnZXRJbmRleENvdmVyKTtcbmhhcmRlbihnZXRJbmRleENvdmVyKTtcblxuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgRnVsbFJhbmtDb3Zlcj1oYXJkZW4oWycnLCd7J10pO1xuXG4vKlxuXG5cblxuICovJGjigI1fb25jZS5GdWxsUmFua0NvdmVyKEZ1bGxSYW5rQ292ZXIpO1xuY29uc3QgICAgICAgIGNvdmVyZWRFbnRyaWVzPShzb3J0ZWQsW2xlZnRJbmRleCxyaWdodEluZGV4XSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGl0ZXJhYmxlPWhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xubGV0IGk9bGVmdEluZGV4O1xucmV0dXJuIGhhcmRlbih7XG5uZXh0OigpPT57XG5pZihpPD1yaWdodEluZGV4KXtcbmNvbnN0IGVsZW1lbnQ9c29ydGVkW2ldO1xuaSs9MTtcbnJldHVybiBoYXJkZW4oe3ZhbHVlOltpLGVsZW1lbnRdLGRvbmU6ZmFsc2V9KTtcbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe3ZhbHVlOnVuZGVmaW5lZCxkb25lOnRydWV9KTtcbiB9XG4gfX0pO1xuXG4gfX0pO1xuXG5yZXR1cm4gaXRlcmFibGU7XG4gfTskaOKAjV9vbmNlLmNvdmVyZWRFbnRyaWVzKGNvdmVyZWRFbnRyaWVzKTtcbmhhcmRlbihjb3ZlcmVkRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYXhSYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKT49MD9hOmI7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtaW5SYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKTw9MD9hOmI7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1bmlvblJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCB1bmlvblJhbmtDb3ZlclBhaXI9KFtsZWZ0QSxyaWdodEFdLFtsZWZ0QixyaWdodEJdKT0+W1xubWluUmFuayhjb21wYXJlLGxlZnRBLGxlZnRCKSxcbm1heFJhbmsoY29tcGFyZSxyaWdodEEscmlnaHRCKV07XG5cbnJldHVybiBjb3ZlcnMucmVkdWNlKHVuaW9uUmFua0NvdmVyUGFpcixbJ3snLCcnXSk7XG4gfTskaOKAjV9vbmNlLnVuaW9uUmFua0NvdmVycyh1bmlvblJhbmtDb3ZlcnMpO1xuaGFyZGVuKHVuaW9uUmFua0NvdmVycyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpbnRlcnNlY3RSYW5rQ292ZXJzPShjb21wYXJlLGNvdmVycyk9Pntcbi8qXG5cblxuXG4gICAqL1xuY29uc3QgaW50ZXJzZWN0UmFua0NvdmVyUGFpcj0oW2xlZnRBLHJpZ2h0QV0sW2xlZnRCLHJpZ2h0Ql0pPT5bXG5tYXhSYW5rKGNvbXBhcmUsbGVmdEEsbGVmdEIpLFxubWluUmFuayhjb21wYXJlLHJpZ2h0QSxyaWdodEIpXTtcblxucmV0dXJuIGNvdmVycy5yZWR1Y2UoaW50ZXJzZWN0UmFua0NvdmVyUGFpcixbJycsJ3snXSk7XG4gfTskaOKAjV9vbmNlLmludGVyc2VjdFJhbmtDb3ZlcnMoaW50ZXJzZWN0UmFua0NvdmVycyk7XG5cbmNvbnN0ICAgICAgIHtjb21wYXJhdG9yOmNvbXBhcmVSYW5rLGFudGlDb21wYXJhdG9yOmNvbXBhcmVBbnRpUmFua309XG5tYWtlQ29tcGFyYXRvcktpdCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5jb21wYXJlUmFuayhjb21wYXJlUmFuayk7JGjigI1fb25jZS5jb21wYXJlQW50aVJhbmsoY29tcGFyZUFudGlSYW5rKTtcbmNvbnN0ICAgICAgICBtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdD0obG9uZ0xpdmVkPWZhbHNlKT0+e1xubGV0IG51bVNlZW49MDtcbi8vXG4vL1xuLy9cbmNvbnN0IE1hcENvbnN0cnVjdG9yPWxvbmdMaXZlZD9XZWFrTWFwOk1hcDtcbmNvbnN0IHNlZW49bmV3IE1hcENvbnN0cnVjdG9yKCk7XG5jb25zdCB0YWc9KHIpPT57XG5pZihzZWVuLmhhcyhyKSl7XG5yZXR1cm4gc2Vlbi5nZXQocik7XG4gfVxubnVtU2Vlbis9MTtcbnNlZW4uc2V0KHIsbnVtU2Vlbik7XG5yZXR1cm4gbnVtU2VlbjtcbiB9O1xuY29uc3QgY29tcGFyZVJlbW90YWJsZXM9KHgseSk9PmNvbXBhcmVSYW5rKHRhZyh4KSx0YWcoeSkpO1xucmV0dXJuIG1ha2VDb21wYXJhdG9yS2l0KGNvbXBhcmVSZW1vdGFibGVzKTtcbiB9OyRo4oCNX29uY2UubWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQpO1xuaGFyZGVuKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InRyaXZpYWxDb21wYXJhdG9yIjpbInRyaXZpYWxDb21wYXJhdG9yIl0sImdldFBhc3NTdHlsZUNvdmVyIjpbImdldFBhc3NTdHlsZUNvdmVyIl0sIm1ha2VDb21wYXJhdG9yS2l0IjpbIm1ha2VDb21wYXJhdG9yS2l0Il0sImNvbXBhcmF0b3JNaXJyb3JJbWFnZSI6WyJjb21wYXJhdG9yTWlycm9ySW1hZ2UiXSwiaXNSYW5rU29ydGVkIjpbImlzUmFua1NvcnRlZCJdLCJhc3NlcnRSYW5rU29ydGVkIjpbImFzc2VydFJhbmtTb3J0ZWQiXSwic29ydEJ5UmFuayI6WyJzb3J0QnlSYW5rIl0sImdldEluZGV4Q292ZXIiOlsiZ2V0SW5kZXhDb3ZlciJdLCJGdWxsUmFua0NvdmVyIjpbIkZ1bGxSYW5rQ292ZXIiXSwiY292ZXJlZEVudHJpZXMiOlsiY292ZXJlZEVudHJpZXMiXSwidW5pb25SYW5rQ292ZXJzIjpbInVuaW9uUmFua0NvdmVycyJdLCJpbnRlcnNlY3RSYW5rQ292ZXJzIjpbImludGVyc2VjdFJhbmtDb3ZlcnMiXSwiY29tcGFyZVJhbmsiOlsiY29tcGFyZVJhbmsiXSwiY29tcGFyZUFudGlSYW5rIjpbImNvbXBhcmVBbnRpUmFuayJdLCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCI6WyJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACHklKnTwEAAE8BAAAhAAAAQGVuZG8vbWFyc2hhbC12MS41LjMvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALI5TcNgBQAAYAUAAB4AAABAZW5kby9uYXQtdjUuMC4xMC9zcmMvaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIk5hdCIsImlzTmF0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpc05hdCwgJ25hbWUnLCB7dmFsdWU6IFwiaXNOYXRcIn0pOyRo4oCNX29uY2UuaXNOYXQoaXNOYXQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXQsICduYW1lJywge3ZhbHVlOiBcIk5hdFwifSk7JGjigI1fb25jZS5OYXQoTmF0KTsgICAvL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gaXNOYXQoYWxsZWdlZE51bSl7XG5pZih0eXBlb2YgYWxsZWdlZE51bT09PSdiaWdpbnQnKXtcbnJldHVybiBhbGxlZ2VkTnVtPj0wO1xuIH1cbmlmKHR5cGVvZiBhbGxlZ2VkTnVtIT09J251bWJlcicpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxucmV0dXJuIE51bWJlci5pc1NhZmVJbnRlZ2VyKGFsbGVnZWROdW0pJiZhbGxlZ2VkTnVtPj0wO1xuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uIE5hdChhbGxlZ2VkTnVtKXtcbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J2JpZ2ludCcpe1xuaWYoYWxsZWdlZE51bTwwKXtcbnRocm93IFJhbmdlRXJyb3IoIGAke2FsbGVnZWROdW19IGlzIG5lZ2F0aXZlYCk7XG4gfVxucmV0dXJuIGFsbGVnZWROdW07XG4gfVxuXG5pZih0eXBlb2YgYWxsZWdlZE51bT09PSdudW1iZXInKXtcbmlmKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihhbGxlZ2VkTnVtKSl7XG50aHJvdyBSYW5nZUVycm9yKCBgJHthbGxlZ2VkTnVtfSBpcyBub3QgYSBzYWZlIGludGVnZXJgKTtcbiB9XG5pZihhbGxlZ2VkTnVtPDApe1xudGhyb3cgUmFuZ2VFcnJvciggYCR7YWxsZWdlZE51bX0gaXMgbmVnYXRpdmVgKTtcbiB9XG5yZXR1cm4gQmlnSW50KGFsbGVnZWROdW0pO1xuIH1cblxudGhyb3cgVHlwZUVycm9yKFxuIGAke2FsbGVnZWROdW19IGlzIGEgJHt0eXBlb2YgYWxsZWdlZE51bX0gYnV0IG11c3QgYmUgYSBiaWdpbnQgb3IgYSBudW1iZXJgKTtcblxuIH1cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzTmF0IjpbImlzTmF0Il0sIk5hdCI6WyJOYXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAALeKnmEQKAABECgAAIAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2l0ZXItaGVscGVycy5qcyIsIi4vc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9zcmMvZXJyb3IuanMiLCIuL3NyYy9yZW1vdGFibGUuanMiLCIuL3NyYy9zeW1ib2wuanMiLCIuL3NyYy9zdHJpbmcuanMiLCIuL3NyYy9wYXNzU3R5bGVPZi5qcyIsIi4vc3JjL21ha2VUYWdnZWQuanMiLCIuL3NyYy9tYWtlLWZhci5qcyIsIi4vc3JjL3R5cGVHdWFyZHMuanMiLCIuL3NyYy9kZWVwbHlGdWxmaWxsZWQuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJleHBvcnRzIjpbIkZhciIsIkZhciIsImFzc2VydENvcHlBcnJheSIsImFzc2VydENvcHlBcnJheSIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIiwiZmlsdGVySXRlcmFibGUiLCJmaWx0ZXJJdGVyYWJsZSIsImlzRXJyb3JMaWtlIiwiaXNFcnJvckxpa2UiLCJpc09iamVjdCIsImlzT2JqZWN0IiwiaXNQYXNzYWJsZSIsImlzUGFzc2FibGUiLCJpc1Bhc3NhYmxlU3ltYm9sIiwiaXNQYXNzYWJsZVN5bWJvbCIsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vc3JjL2l0ZXItaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW11dLFtcIi4vc3JjL2Vycm9yLmpzXCIsIFtdXSxbXCIuL3NyYy9yZW1vdGFibGUuanNcIiwgW11dLFtcIi4vc3JjL3N5bWJvbC5qc1wiLCBbXV0sW1wiLi9zcmMvc3RyaW5nLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGVPZi5qc1wiLCBbXV0sW1wiLi9zcmMvbWFrZVRhZ2dlZC5qc1wiLCBbXV0sW1wiLi9zcmMvbWFrZS1mYXIuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVHdWFyZHMuanNcIiwgW11dLFtcIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9pdGVyLWhlbHBlcnMuanMiOltbIm1hcEl0ZXJhYmxlIiwibWFwSXRlcmFibGUiXSxbImZpbHRlckl0ZXJhYmxlIiwiZmlsdGVySXRlcmFibGUiXV0sIi4vc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIjpbWyJQQVNTX1NUWUxFIiwiUEFTU19TVFlMRSJdLFsiaXNPYmplY3QiLCJpc09iamVjdCJdLFsiYXNzZXJ0Q2hlY2tlciIsImFzc2VydENoZWNrZXIiXSxbImdldFRhZyIsImdldFRhZyJdLFsiaGFzT3duUHJvcGVydHlPZiIsImhhc093blByb3BlcnR5T2YiXV0sIi4vc3JjL2Vycm9yLmpzIjpbWyJnZXRFcnJvckNvbnN0cnVjdG9yIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciJdLFsiaXNFcnJvckxpa2UiLCJpc0Vycm9yTGlrZSJdXSwiLi9zcmMvcmVtb3RhYmxlLmpzIjpbWyJnZXRJbnRlcmZhY2VPZiIsImdldEludGVyZmFjZU9mIl1dLCIuL3NyYy9zeW1ib2wuanMiOltbImFzc2VydFBhc3NhYmxlU3ltYm9sIiwiYXNzZXJ0UGFzc2FibGVTeW1ib2wiXSxbImlzUGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIl0sWyJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiXSxbInBhc3NhYmxlU3ltYm9sRm9yTmFtZSIsInBhc3NhYmxlU3ltYm9sRm9yTmFtZSJdXSwiLi9zcmMvc3RyaW5nLmpzIjpbWyJpc1dlbGxGb3JtZWRTdHJpbmciLCJpc1dlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIl0sWyJhc3NlcnRQYXNzYWJsZVN0cmluZyIsImFzc2VydFBhc3NhYmxlU3RyaW5nIl1dLCIuL3NyYy9wYXNzU3R5bGVPZi5qcyI6W1sicGFzc1N0eWxlT2YiLCJwYXNzU3R5bGVPZiJdLFsiaXNQYXNzYWJsZSIsImlzUGFzc2FibGUiXSxbImFzc2VydFBhc3NhYmxlIiwiYXNzZXJ0UGFzc2FibGUiXSxbInRvUGFzc2FibGVFcnJvciIsInRvUGFzc2FibGVFcnJvciJdLFsidG9UaHJvd2FibGUiLCJ0b1Rocm93YWJsZSJdXSwiLi9zcmMvbWFrZVRhZ2dlZC5qcyI6W1sibWFrZVRhZ2dlZCIsIm1ha2VUYWdnZWQiXV0sIi4vc3JjL21ha2UtZmFyLmpzIjpbWyJSZW1vdGFibGUiLCJSZW1vdGFibGUiXSxbIkZhciIsIkZhciJdLFsiVG9GYXJGdW5jdGlvbiIsIlRvRmFyRnVuY3Rpb24iXSxbIkdFVF9NRVRIT0RfTkFNRVMiLCJHRVRfTUVUSE9EX05BTUVTIl1dLCIuL3NyYy90eXBlR3VhcmRzLmpzIjpbWyJhc3NlcnRSZWNvcmQiLCJhc3NlcnRSZWNvcmQiXSxbImFzc2VydENvcHlBcnJheSIsImFzc2VydENvcHlBcnJheSJdLFsiYXNzZXJ0UmVtb3RhYmxlIiwiYXNzZXJ0UmVtb3RhYmxlIl0sWyJpc1JlbW90YWJsZSIsImlzUmVtb3RhYmxlIl0sWyJpc1JlY29yZCIsImlzUmVjb3JkIl0sWyJpc0NvcHlBcnJheSIsImlzQ29weUFycmF5Il1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD+FZ/rYAYAAGAGAAAoAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL2NvcHlBcnJheS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiQ29weUFycmF5SGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLGFzc2VydENoZWNrZXIsZ2V0T3duRGF0YURlc2NyaXB0b3I7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaOKAjV9hID0+IChYID0gJGjigI1fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaOKAjV9hKV1dLFtcImdldE93bkRhdGFEZXNjcmlwdG9yXCIsIFskaOKAjV9hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdHtnZXRQcm90b3R5cGVPZn09T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXkscHJvdG90eXBlOmFycmF5UHJvdG90eXBlfT1BcnJheTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2FuQmVWYWxpZD0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PlxuaXNBcnJheShjYW5kaWRhdGUpfHxcbiEhY2hlY2smJmNoZWNrKGZhbHNlLFggYEFycmF5IGV4cGVjdGVkOiAke2NhbmRpZGF0ZX1gKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBDb3B5QXJyYXlIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZTonY29weUFycmF5JyxcblxuY2FuQmVWYWxpZCxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09YXJyYXlQcm90b3R5cGV8fFxuYXNzZXJ0LmZhaWwoWCBgTWFsZm9ybWVkIGFycmF5OiAke2NhbmRpZGF0ZX1gLFR5cGVFcnJvcik7XG4vL1xuLy9cbmNvbnN0IGxlbj0vKiAgICAgICAgICAgICAgICAgKi9cbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSwnbGVuZ3RoJyxmYWxzZSxhc3NlcnRDaGVja2VyKS52YWx1ZTtcblxuLy9cbi8vXG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbnBhc3NTdHlsZU9mUmVjdXIoXG5nZXRPd25EYXRhRGVzY3JpcHRvcihjYW5kaWRhdGUsaSx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH1cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkubGVuZ3RoPT09bGVuKzF8fFxuYXNzZXJ0LmZhaWwoWCBgQXJyYXlzIG11c3Qgbm90IGhhdmUgbm9uLWluZGV4ZXM6ICR7Y2FuZGlkYXRlfWAsVHlwZUVycm9yKTtcbiB9fSk7JGjigI1fb25jZS5Db3B5QXJyYXlIZWxwZXIoQ29weUFycmF5SGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNvcHlBcnJheUhlbHBlciI6WyJDb3B5QXJyYXlIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAApKmN6zcIAAA3CAAAKQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9jb3B5UmVjb3JkLmpzeyJpbXBvcnRzIjpbIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5UmVjb3JkSGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLGNhbkJlTWV0aG9kLGdldE93bkRhdGFEZXNjcmlwdG9yLENYOyRo4oCNX2ltcG9ydHMoW1tcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaOKAjV9hKV1dLFtcImNhbkJlTWV0aG9kXCIsIFskaOKAjV9hID0+IChjYW5CZU1ldGhvZCA9ICRo4oCNX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRo4oCNX2EgPT4gKGdldE93bkRhdGFEZXNjcmlwdG9yID0gJGjigI1fYSldXSxbXCJDWFwiLCBbJGjigI1fYSA9PiAoQ1ggPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2dldFByb3RvdHlwZU9mLHByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PU9iamVjdDtcblxuLypcblxuXG4gKi9cbmNvbnN0IGNoZWNrT2JqZWN0UHJvdG90eXBlPShjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xucmV0dXJuKFxuZ2V0UHJvdG90eXBlT2YoY2FuZGlkYXRlKT09PW9iamVjdFByb3RvdHlwZXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUmVjb3JkcyBtdXN0IGluaGVyaXQgZnJvbSBPYmplY3QucHJvdG90eXBlOiAke2NhbmRpZGF0ZX1gKTtcblxuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tQcm9wZXJ0eUNhbkJlVmFsaWQ9KGNhbmRpZGF0ZSxrZXksdmFsdWUsY2hlY2s9dW5kZWZpbmVkKT0+e1xucmV0dXJuKFxuKHR5cGVvZiBrZXk9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFJlY29yZHMgY2FuIG9ubHkgaGF2ZSBzdHJpbmctbmFtZWQgcHJvcGVydGllczogJHtjYW5kaWRhdGV9YCkmJihcbiFjYW5CZU1ldGhvZCh2YWx1ZSl8fFxuISFjaGVjayYmXG4vL1xuQ1goXG5jaGVjaylcbiBgUmVjb3JkcyBjYW5ub3QgY29udGFpbiBub24tZmFyIGZ1bmN0aW9ucyBiZWNhdXNlIHRoZXkgbWF5IGJlIG1ldGhvZHMgb2YgYW4gaW1wbGljaXQgUmVtb3RhYmxlOiAke2NhbmRpZGF0ZX1gKSk7XG5cbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIENvcHlSZWNvcmRIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZTonY29weVJlY29yZCcsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG5jaGVja09iamVjdFByb3RvdHlwZShjYW5kaWRhdGUsY2hlY2spJiZcbi8vXG4vL1xub3duS2V5cyhjYW5kaWRhdGUpLmV2ZXJ5KChrZXkpPT5cbmNoZWNrUHJvcGVydHlDYW5CZVZhbGlkKGNhbmRpZGF0ZSxrZXksY2FuZGlkYXRlW2tleV0sY2hlY2spKSk7XG5cblxuIH0sXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cik9PntcbmNoZWNrT2JqZWN0UHJvdG90eXBlKGNhbmRpZGF0ZSxhc3NlcnRDaGVja2VyKTtcblxuLy9cbi8vXG5mb3IoY29uc3QgbmFtZSBvZiBvd25LZXlzKGNhbmRpZGF0ZSkpe1xuY29uc3R7dmFsdWV9PWdldE93bkRhdGFEZXNjcmlwdG9yKFxuY2FuZGlkYXRlLFxubmFtZSxcbnRydWUsXG5hc3NlcnRDaGVja2VyKTtcblxuY2hlY2tQcm9wZXJ0eUNhbkJlVmFsaWQoY2FuZGlkYXRlLG5hbWUsdmFsdWUsYXNzZXJ0Q2hlY2tlcik7XG5wYXNzU3R5bGVPZlJlY3VyKHZhbHVlKTtcbiB9XG4gfX0pOyRo4oCNX29uY2UuQ29weVJlY29yZEhlbHBlcihDb3B5UmVjb3JkSGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNvcHlSZWNvcmRIZWxwZXIiOlsiQ29weVJlY29yZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADGfQJdbAoAAGwKAAAuAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL2RlZXBseUZ1bGZpbGxlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcHJvbWlzZS1raXQiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyIsIi4vbWFrZVRhZ2dlZC5qcyJdLCJleHBvcnRzIjpbImRlZXBseUZ1bGZpbGxlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxxLEUsaXNQcm9taXNlLGdldFRhZyxpc09iamVjdCxwYXNzU3R5bGVPZixtYWtlVGFnZ2VkOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRo4oCNX2EgPT4gKGlzUHJvbWlzZSA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJnZXRUYWdcIiwgWyRo4oCNX2EgPT4gKGdldFRhZyA9ICRo4oCNX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRo4oCNX2EgPT4gKGlzT2JqZWN0ID0gJGjigI1fYSldXV1dLFtcIi4vcGFzc1N0eWxlT2YuanNcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaOKAjV9hID0+IChwYXNzU3R5bGVPZiA9ICRo4oCNX2EpXV1dXSxbXCIuL21ha2VUYWdnZWQuanNcIiwgW1tcIm1ha2VUYWdnZWRcIiwgWyRo4oCNX2EgPT4gKG1ha2VUYWdnZWQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcGx5RnVsZmlsbGVkPWFzeW5jKHZhbCk9Pntcbi8vXG4vL1xuLy9cblxuaWYoIWlzT2JqZWN0KHZhbCkpe1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovdmFsKTtcbiB9XG5pZihpc1Byb21pc2UodmFsKSl7XG5yZXR1cm4gRS53aGVuKHZhbCwobm9ucCk9PmRlZXBseUZ1bGZpbGxlZChub25wKSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCBuYW1lcz0vKiAgICAgICAgICAgICAgICAgICAqL293bktleXMocmVjKTtcbmNvbnN0IHZhbFBzPW5hbWVzLm1hcCgobmFtZSk9PmRlZXBseUZ1bGZpbGxlZChyZWNbbmFtZV0pKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PlxuaGFyZGVuKGZyb21FbnRyaWVzKHZhbHMubWFwKChjLGkpPT5bbmFtZXNbaV0sY10pKSkpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbmNvbnN0IGFycj0vKiAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCB2YWxQcz1hcnIubWFwKChwKT0+ZGVlcGx5RnVsZmlsbGVkKHApKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PmhhcmRlbih2YWxzKSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRnZD0vKiAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgdGFnPWdldFRhZyh0Z2QpO1xuLy9cbnJldHVybiBFLndoZW4oZGVlcGx5RnVsZmlsbGVkKHRnZC5wYXlsb2FkKSwocGF5bG9hZCk9PlxubWFrZVRhZ2dlZCh0YWcscGF5bG9hZCkpO1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IHJlbT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIHJlbTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdCBlcnI9LyogICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIGVycjtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IHByb209LyogICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdmFsO1xucmV0dXJuIEUud2hlbihwcm9tLChub25wKT0+ZGVlcGx5RnVsZmlsbGVkKG5vbnApKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTskaOKAjV9vbmNlLmRlZXBseUZ1bGZpbGxlZChkZWVwbHlGdWxmaWxsZWQpO1xuaGFyZGVuKGRlZXBseUZ1bGZpbGxlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWVwbHlGdWxmaWxsZWQiOlsiZGVlcGx5RnVsZmlsbGVkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKB19VxEEgAARBIAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvZXJyb3IuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIkVycm9ySGVscGVyIiwiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyIsImdldEVycm9yQ29uc3RydWN0b3IiLCJpc0Vycm9yTGlrZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxhc3NlcnRDaGVja2VyLENYOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaOKAjV9hID0+IChhc3NlcnRDaGVja2VyID0gJGjigI1fYSldXSxbXCJDWFwiLCBbJGjigI1fYSA9PiAoQ1ggPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtnZXRQcm90b3R5cGVPZixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLGhhc093bixlbnRyaWVzfT1PYmplY3Q7XG5cbi8vXG4vL1xuY29uc3QgZXJyb3JDb25zdHJ1Y3RvcnM9bmV3IE1hcChcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bXG5bJ0Vycm9yJyxFcnJvcl0sXG5bJ0V2YWxFcnJvcicsRXZhbEVycm9yXSxcblsnUmFuZ2VFcnJvcicsUmFuZ2VFcnJvcl0sXG5bJ1JlZmVyZW5jZUVycm9yJyxSZWZlcmVuY2VFcnJvcl0sXG5bJ1N5bnRheEVycm9yJyxTeW50YXhFcnJvcl0sXG5bJ1R5cGVFcnJvcicsVHlwZUVycm9yXSxcblsnVVJJRXJyb3InLFVSSUVycm9yXVxuXG4vL1xuLy9cbi8vXG4vL1xuXSk7XG5cblxuaWYodHlwZW9mIEFnZ3JlZ2F0ZUVycm9yIT09J3VuZGVmaW5lZCcpe1xuLy9cbmVycm9yQ29uc3RydWN0b3JzLnNldCgnQWdncmVnYXRlRXJyb3InLEFnZ3JlZ2F0ZUVycm9yKTtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0RXJyb3JDb25zdHJ1Y3Rvcj0obmFtZSk9PmVycm9yQ29uc3RydWN0b3JzLmdldChuYW1lKTskaOKAjV9vbmNlLmdldEVycm9yQ29uc3RydWN0b3IoZ2V0RXJyb3JDb25zdHJ1Y3Rvcik7XG5oYXJkZW4oZ2V0RXJyb3JDb25zdHJ1Y3Rvcik7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrRXJyb3JMaWtlPShjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xuLy9cbnJldHVybihcbmNhbmRpZGF0ZSBpbnN0YW5jZW9mIEVycm9yfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgRXJyb3IgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfTtcbmhhcmRlbihjaGVja0Vycm9yTGlrZSk7XG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0Vycm9yTGlrZT0oY2FuZGlkYXRlKT0+Y2hlY2tFcnJvckxpa2UoY2FuZGlkYXRlKTskaOKAjV9vbmNlLmlzRXJyb3JMaWtlKGlzRXJyb3JMaWtlKTtcbmhhcmRlbihpc0Vycm9yTGlrZSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2M9KFxucHJvcE5hbWUsXG5kZXNjLFxucGFzc1N0eWxlT2ZSZWN1cixcbmNoZWNrPXVuZGVmaW5lZCk9Plxue1xuaWYoZGVzYy5lbnVtZXJhYmxlKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IG5vdCBiZSBlbnVtZXJhYmxlOiAke2Rlc2N9YCk7XG5cbiB9XG5pZighaGFzT3duKGRlc2MsJ3ZhbHVlJykpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3QgYmUgYSBkYXRhIHByb3BlcnR5OiAke2Rlc2N9YCk7XG5cbiB9XG5jb25zdHt2YWx1ZX09ZGVzYztcbnN3aXRjaChwcm9wTmFtZSl7XG5jYXNlJ21lc3NhZ2UnOlxuY2FzZSdzdGFjayc6e1xucmV0dXJuKFxudHlwZW9mIHZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmc6ICR7dmFsdWV9YCk7XG5cbiB9XG5jYXNlJ2NhdXNlJzp7XG4vL1xucmV0dXJuIGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKHZhbHVlLHBhc3NTdHlsZU9mUmVjdXIsY2hlY2spO1xuIH1cbmNhc2UnZXJyb3JzJzp7XG5pZighQXJyYXkuaXNBcnJheSh2YWx1ZSl8fHBhc3NTdHlsZU9mUmVjdXIodmFsdWUpIT09J2NvcHlBcnJheScpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3QgYmUgYSBjb3B5QXJyYXk6ICR7dmFsdWV9YCk7XG5cbiB9XG5yZXR1cm4gdmFsdWUuZXZlcnkoKGVycik9PlxuLy9cbmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKGVycixwYXNzU3R5bGVPZlJlY3VyLGNoZWNrKSk7XG5cbiB9XG5kZWZhdWx0OntcbmJyZWFrO1xuIH19XG5cbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciBoYXMgZXh0cmEgdW5wYXNzZWQgcHJvcGVydHkgJHtxKHByb3BOYW1lKX1gKTtcblxuIH07JGjigI1fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyk7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcj0oXG5jYW5kaWRhdGUsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2s9dW5kZWZpbmVkKT0+XG57XG5pZighY2hlY2tFcnJvckxpa2UoY2FuZGlkYXRlLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgcHJvdG89Z2V0UHJvdG90eXBlT2YoY2FuZGlkYXRlKTtcbmNvbnN0e25hbWV9PXByb3RvO1xuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvcihuYW1lKTtcbmlmKGVyckNvbnN0cnVjdG9yPT09dW5kZWZpbmVkfHxlcnJDb25zdHJ1Y3Rvci5wcm90b3R5cGUhPT1wcm90byl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFBhc3NhYmxlIEVycm9yIG11c3QgaW5oZXJpdCBmcm9tIGFuIGVycm9yIGNsYXNzIC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfVxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYoISgnbWVzc2FnZSdpbiBkZXNjcykpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBQYXNzYWJsZSBFcnJvciBtdXN0IGhhdmUgYW4gb3duIFwibWVzc2FnZVwiIHN0cmluZyBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9XG5cbnJldHVybiBlbnRyaWVzKGRlc2NzKS5ldmVyeSgoW3Byb3BOYW1lLGRlc2NdKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhcbnByb3BOYW1lLFxuZGVzYyxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaykpO1xuXG5cbiB9OyRo4oCNX29uY2UuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IpO1xuaGFyZGVuKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKTtcblxuLypcblxuICovXG5jb25zdCAgICAgICAgRXJyb3JIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZTonZXJyb3InLFxuXG5jYW5CZVZhbGlkOmNoZWNrRXJyb3JMaWtlLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT5cbmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyLGFzc2VydENoZWNrZXIpfSk7JGjigI1fb25jZS5FcnJvckhlbHBlcihFcnJvckhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRFcnJvckNvbnN0cnVjdG9yIjpbImdldEVycm9yQ29uc3RydWN0b3IiXSwiaXNFcnJvckxpa2UiOlsiaXNFcnJvckxpa2UiXSwiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MiOlsiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MiXSwiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IiOlsiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IiXSwiRXJyb3JIZWxwZXIiOlsiRXJyb3JIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAVBiuKZgFAACYBQAAKwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9pdGVyLWhlbHBlcnMuanN7ImltcG9ydHMiOlsiLi9tYWtlLWZhci5qcyJdLCJleHBvcnRzIjpbImZpbHRlckl0ZXJhYmxlIiwibWFwSXRlcmFibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcjskaOKAjV9pbXBvcnRzKFtbXCIuL21ha2UtZmFyLmpzXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFwSXRlcmFibGU9KGJhc2VJdGVyYWJsZSxmdW5jKT0+XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuRmFyKCdtYXBwZWQgaXRlcmFibGUnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5jb25zdCBiYXNlSXRlcmF0b3I9YmFzZUl0ZXJhYmxlW1N5bWJvbC5pdGVyYXRvcl0oKTtcbnJldHVybiBGYXIoJ21hcHBlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuY29uc3R7dmFsdWU6YmFzZVZhbHVlLGRvbmV9PWJhc2VJdGVyYXRvci5uZXh0KCk7XG5jb25zdCB2YWx1ZT1kb25lP2Jhc2VWYWx1ZTpmdW5jKGJhc2VWYWx1ZSk7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZSxkb25lfSk7XG4gfX0pO1xuXG4gfX0pOyRo4oCNX29uY2UubWFwSXRlcmFibGUobWFwSXRlcmFibGUpO1xuXG5oYXJkZW4obWFwSXRlcmFibGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZmlsdGVySXRlcmFibGU9KGJhc2VJdGVyYWJsZSxwcmVkKT0+XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuRmFyKCdmaWx0ZXJlZCBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmNvbnN0IGJhc2VJdGVyYXRvcj1iYXNlSXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIEZhcignZmlsdGVyZWQgaXRlcmF0b3InLHtcbm5leHQ6KCk9PntcbmZvcig7Oyl7XG5jb25zdCByZXN1bHQ9YmFzZUl0ZXJhdG9yLm5leHQoKTtcbmNvbnN0e3ZhbHVlLGRvbmV9PXJlc3VsdDtcbmlmKGRvbmV8fHByZWQodmFsdWUpKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbiB9fSk7XG5cbiB9fSk7JGjigI1fb25jZS5maWx0ZXJJdGVyYWJsZShmaWx0ZXJJdGVyYWJsZSk7XG5cbmhhcmRlbihmaWx0ZXJJdGVyYWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYXBJdGVyYWJsZSI6WyJtYXBJdGVyYWJsZSJdLCJmaWx0ZXJJdGVyYWJsZSI6WyJmaWx0ZXJJdGVyYWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADlBje5WhEAAFoRAAAnAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL21ha2UtZmFyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiLCJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9yZW1vdGFibGUuanMiXSwiZXhwb3J0cyI6WyJGYXIiLCJHRVRfTUVUSE9EX05BTUVTIiwiUmVtb3RhYmxlIiwiVG9GYXJGdW5jdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0TWV0aG9kTmFtZXMscSxGYWlsLGFzc2VydENoZWNrZXIsUEFTU19TVFlMRSxhc3NlcnRJZmFjZSxnZXRJbnRlcmZhY2VPZixSZW1vdGFibGVIZWxwZXI7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qc1wiLCBbW1wiZ2V0TWV0aG9kTmFtZXNcIiwgWyRo4oCNX2EgPT4gKGdldE1ldGhvZE5hbWVzID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaOKAjV9hID0+IChhc3NlcnRDaGVja2VyID0gJGjigI1fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaOKAjV9hID0+IChQQVNTX1NUWUxFID0gJGjigI1fYSldXV1dLFtcIi4vcmVtb3RhYmxlLmpzXCIsIFtbXCJhc3NlcnRJZmFjZVwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0SWZhY2UgPSAkaOKAjV9hKV1dLFtcImdldEludGVyZmFjZU9mXCIsIFskaOKAjV9hID0+IChnZXRJbnRlcmZhY2VPZiA9ICRo4oCNX2EpXV0sW1wiUmVtb3RhYmxlSGVscGVyXCIsIFskaOKAjV9hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e3Byb3RvdHlwZTpmdW5jdGlvblByb3RvdHlwZX09RnVuY3Rpb247XG5jb25zdHtcbmdldFByb3RvdHlwZU9mLFxuc2V0UHJvdG90eXBlT2YsXG5jcmVhdGUsXG5pc0Zyb3plbixcbnByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PVxuT2JqZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VSZW1vdGFibGVQcm90bz0ocmVtb3RhYmxlLGlmYWNlKT0+e1xubGV0IG9sZFByb3RvPWdldFByb3RvdHlwZU9mKHJlbW90YWJsZSk7XG5pZih0eXBlb2YgcmVtb3RhYmxlPT09J29iamVjdCcpe1xuaWYob2xkUHJvdG89PT1udWxsKXtcbm9sZFByb3RvPW9iamVjdFByb3RvdHlwZTtcbiB9XG5vbGRQcm90bz09PW9iamVjdFByb3RvdHlwZXx8XG5GYWlsIGBGb3Igbm93LCByZW1vdGFibGVzIGNhbm5vdCBpbmhlcml0IGZyb20gYW55dGhpbmcgdW51c3VhbCwgaW4gJHtyZW1vdGFibGV9YDtcbiB9ZWxzZSBpZih0eXBlb2YgcmVtb3RhYmxlPT09J2Z1bmN0aW9uJyl7XG5vbGRQcm90byE9PW51bGx8fFxuRmFpbCBgT3JpZ2luYWwgZnVuY3Rpb24gbXVzdCBub3QgaW5oZXJpdCBmcm9tIG51bGw6ICR7cmVtb3RhYmxlfWA7XG5vbGRQcm90bz09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbmdldFByb3RvdHlwZU9mKG9sZFByb3RvKT09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbkZhaWwgYEZhciBmdW5jdGlvbnMgbXVzdCBvcmlnaW5hbGx5IGluaGVyaXQgZnJvbSBGdW5jdGlvbi5wcm90b3R5cGUsIGluICR7cmVtb3RhYmxlfWA7XG4gfWVsc2V7XG5GYWlsIGB1bnJlY29nbml6ZWQgdHlwZW9mICR7cmVtb3RhYmxlfWA7XG4gfVxucmV0dXJuIGhhcmRlbihcbmNyZWF0ZShvbGRQcm90byx7XG5bUEFTU19TVFlMRV06e3ZhbHVlOidyZW1vdGFibGUnfSxcbltTeW1ib2wudG9TdHJpbmdUYWddOnt2YWx1ZTppZmFjZX19KSk7XG5cblxuIH07XG5cbmNvbnN0IGFzc2VydENhbkJlUmVtb3RhYmxlPShjYW5kaWRhdGUpPT5cblJlbW90YWJsZUhlbHBlci5jYW5CZVZhbGlkKGNhbmRpZGF0ZSxhc3NlcnRDaGVja2VyKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIFJlbW90YWJsZT0oXG4vL1xuaWZhY2U9J1JlbW90YWJsZScsXG5wcm9wcz11bmRlZmluZWQsXG5yZW1vdGFibGU9LyogICAgICAgICAgICAqL3t9KT0+XG57XG5hc3NlcnRJZmFjZShpZmFjZSk7XG5hc3NlcnQoaWZhY2UpO1xuLy9cbi8vXG5wcm9wcz09PXVuZGVmaW5lZHx8RmFpbCBgUmVtb3RhYmxlIHByb3BzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgJHtwcm9wc31gO1xuXG4vL1xuYXNzZXJ0Q2FuQmVSZW1vdGFibGUocmVtb3RhYmxlKTtcblxuLy9cbiEoUEFTU19TVFlMRSBpbiByZW1vdGFibGUpfHxcbkZhaWwgYFJlbW90YWJsZSAke3JlbW90YWJsZX0gaXMgYWxyZWFkeSBtYXJrZWQgYXMgYSAke3EoXG5yZW1vdGFibGVbUEFTU19TVFlMRV0pXG4gfWA7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmhhcmRlbi5pc0Zha2V8fFxuLy9cbiFpc0Zyb3plbihyZW1vdGFibGUpfHxcbkZhaWwgYFJlbW90YWJsZSAke3JlbW90YWJsZX0gaXMgYWxyZWFkeSBmcm96ZW5gO1xuY29uc3QgcmVtb3RhYmxlUHJvdG89bWFrZVJlbW90YWJsZVByb3RvKHJlbW90YWJsZSxpZmFjZSk7XG5cbi8vXG4vL1xuY29uc3QgbXV0YXRlSGFyZGVuQW5kQ2hlY2s9KHRhcmdldCk9Pntcbi8vXG5zZXRQcm90b3R5cGVPZih0YXJnZXQscmVtb3RhYmxlUHJvdG8pO1xuaGFyZGVuKHRhcmdldCk7XG5hc3NlcnRDYW5CZVJlbW90YWJsZSh0YXJnZXQpO1xuIH07XG5cbi8vXG5tdXRhdGVIYXJkZW5BbmRDaGVjayh7fSk7XG5cbi8vXG5tdXRhdGVIYXJkZW5BbmRDaGVjayhyZW1vdGFibGUpO1xuXG4vL1xuLy9cbmFzc2VydChpZmFjZSE9PXVuZGVmaW5lZCk7Ly9cbnJldHVybiAoLyogICAgICAgICAgICAgICovcmVtb3RhYmxlKTtcbiB9OyRo4oCNX29uY2UuUmVtb3RhYmxlKFJlbW90YWJsZSk7XG5oYXJkZW4oUmVtb3RhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEdFVF9NRVRIT0RfTkFNRVM9J19fZ2V0TWV0aG9kTmFtZXNfXyc7XG5cbi8qXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuR0VUX01FVEhPRF9OQU1FUyhHRVRfTUVUSE9EX05BTUVTKTtcbmNvbnN0IGdldE1ldGhvZE5hbWVzTWV0aG9kPWhhcmRlbih7XG5bR0VUX01FVEhPRF9OQU1FU10oKXtcbnJldHVybiBnZXRNZXRob2ROYW1lcyh0aGlzKTtcbiB9fSlbXG5HRVRfTUVUSE9EX05BTUVTXTtcblxuY29uc3QgZ2V0TWV0aG9kTmFtZXNEZXNjcmlwdG9yPWhhcmRlbih7XG52YWx1ZTpnZXRNZXRob2ROYW1lc01ldGhvZCxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2UsXG53cml0YWJsZTpmYWxzZX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBGYXI9KGZhck5hbWUscmVtb3RhYmxlPXVuZGVmaW5lZCk9PntcbmNvbnN0IHI9cmVtb3RhYmxlPT09dW5kZWZpbmVkPy8qICAgICAgICAgICAgKi97fTpyZW1vdGFibGU7XG5pZih0eXBlb2Ygcj09PSdvYmplY3QnJiYhKEdFVF9NRVRIT0RfTkFNRVMgaW4gcikpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLEdFVF9NRVRIT0RfTkFNRVMsZ2V0TWV0aG9kTmFtZXNEZXNjcmlwdG9yKTtcbiB9XG5yZXR1cm4gUmVtb3RhYmxlKCBgQWxsZWdlZDogJHtmYXJOYW1lfWAsdW5kZWZpbmVkLHIpO1xuIH07JGjigI1fb25jZS5GYXIoRmFyKTtcbmhhcmRlbihGYXIpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgVG9GYXJGdW5jdGlvbj0oZmFyTmFtZSxmdW5jKT0+e1xuaWYoZ2V0SW50ZXJmYWNlT2YoZnVuYykhPT11bmRlZmluZWQpe1xuLy9cbnJldHVybiBmdW5jO1xuIH1cbi8vXG5yZXR1cm4gRmFyKGZhck5hbWUsKC4uLmFyZ3MpPT5mdW5jKC4uLmFyZ3MpKTtcbiB9OyRo4oCNX29uY2UuVG9GYXJGdW5jdGlvbihUb0ZhckZ1bmN0aW9uKTtcbmhhcmRlbihUb0ZhckZ1bmN0aW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlJlbW90YWJsZSI6WyJSZW1vdGFibGUiXSwiR0VUX01FVEhPRF9OQU1FUyI6WyJHRVRfTUVUSE9EX05BTUVTIl0sIkZhciI6WyJGYXIiXSwiVG9GYXJGdW5jdGlvbiI6WyJUb0ZhckZ1bmN0aW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAG5j4lmMBAAAjAQAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvbWFrZVRhZ2dlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbIm1ha2VUYWdnZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsUEFTU19TVFlMRSxhc3NlcnRQYXNzYWJsZTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiUEFTU19TVFlMRVwiLCBbJGjigI1fYSA9PiAoUEFTU19TVFlMRSA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5jb25zdHtjcmVhdGUscHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09T2JqZWN0O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VUYWdnZWQ9KHRhZyxwYXlsb2FkKT0+e1xudHlwZW9mIHRhZz09PSdzdHJpbmcnfHxcbkZhaWwgYFRoZSB0YWcgb2YgYSB0YWdnZWQgcmVjb3JkIG11c3QgYmUgYSBzdHJpbmc6ICR7dGFnfWA7XG5hc3NlcnRQYXNzYWJsZShoYXJkZW4ocGF5bG9hZCkpO1xucmV0dXJuIGhhcmRlbihcbmNyZWF0ZShvYmplY3RQcm90b3R5cGUse1xuW1BBU1NfU1RZTEVdOnt2YWx1ZTondGFnZ2VkJ30sXG5bU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6dGFnfSxcbnBheWxvYWQ6e3ZhbHVlOnBheWxvYWQsZW51bWVyYWJsZTp0cnVlfX0pKTtcblxuXG4gfTskaOKAjV9vbmNlLm1ha2VUYWdnZWQobWFrZVRhZ2dlZCk7XG5oYXJkZW4obWFrZVRhZ2dlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlVGFnZ2VkIjpbIm1ha2VUYWdnZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAee9zWSkVAAApFQAAMAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJDWCIsIlBBU1NfU1RZTEUiLCJhc3NlcnRDaGVja2VyIiwiY2FuQmVNZXRob2QiLCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIiwiY2hlY2tQYXNzU3R5bGUiLCJjaGVja1RhZ1JlY29yZCIsImdldE93bkRhdGFEZXNjcmlwdG9yIiwiZ2V0VGFnIiwiaGFzT3duUHJvcGVydHlPZiIsImlzT2JqZWN0IiwiaXNUeXBlZEFycmF5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHE7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaOKAjV9hID0+IChYID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e3Byb3RvdHlwZTpmdW5jdGlvblByb3RvdHlwZX09RnVuY3Rpb247XG5jb25zdHtcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcixcbmdldFByb3RvdHlwZU9mLFxuaGFzT3duUHJvcGVydHk6b2JqZWN0SGFzT3duUHJvcGVydHksXG5pc0Zyb3plbixcbnByb3RvdHlwZTpvYmplY3RQcm90b3R5cGV9PVxuT2JqZWN0O1xuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5jb25zdHt0b1N0cmluZ1RhZzp0b1N0cmluZ1RhZ1N5bWJvbH09U3ltYm9sO1xuXG5jb25zdCB0eXBlZEFycmF5UHJvdG90eXBlPWdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkucHJvdG90eXBlKTtcbmNvbnN0IHR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFxudHlwZWRBcnJheVByb3RvdHlwZSxcbnRvU3RyaW5nVGFnU3ltYm9sKTtcblxuYXNzZXJ0KHR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2MpO1xuY29uc3QgZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnPXR5cGVkQXJyYXlUb1N0cmluZ1RhZ0Rlc2MuZ2V0O1xuYXNzZXJ0KHR5cGVvZiBnZXRUeXBlZEFycmF5VG9TdHJpbmdUYWc9PT0nZnVuY3Rpb24nKTtcblxuY29uc3QgICAgICAgIGhhc093blByb3BlcnR5T2Y9KG9iaixwcm9wKT0+XG5hcHBseShvYmplY3RIYXNPd25Qcm9wZXJ0eSxvYmosW3Byb3BdKTskaOKAjV9vbmNlLmhhc093blByb3BlcnR5T2YoaGFzT3duUHJvcGVydHlPZik7XG5oYXJkZW4oaGFzT3duUHJvcGVydHlPZik7XG5cbi8vXG5jb25zdCAgICAgICAgaXNPYmplY3Q9KHZhbCk9Pk9iamVjdCh2YWwpPT09dmFsOyRo4oCNX29uY2UuaXNPYmplY3QoaXNPYmplY3QpO1xuaGFyZGVuKGlzT2JqZWN0KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzVHlwZWRBcnJheT0ob2JqZWN0KT0+e1xuLy9cbmNvbnN0IHRhZz1hcHBseShnZXRUeXBlZEFycmF5VG9TdHJpbmdUYWcsb2JqZWN0LFtdKTtcbnJldHVybiB0YWchPT11bmRlZmluZWQ7XG4gfTskaOKAjV9vbmNlLmlzVHlwZWRBcnJheShpc1R5cGVkQXJyYXkpO1xuaGFyZGVuKGlzVHlwZWRBcnJheSk7XG5cbmNvbnN0ICAgICAgICBQQVNTX1NUWUxFPVN5bWJvbC5mb3IoJ3Bhc3NTdHlsZScpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuUEFTU19TVFlMRShQQVNTX1NUWUxFKTtcbmNvbnN0ICAgICAgICBjYW5CZU1ldGhvZD0oZnVuYyk9PlxudHlwZW9mIGZ1bmM9PT0nZnVuY3Rpb24nJiYhKFBBU1NfU1RZTEUgaW4gZnVuYyk7JGjigI1fb25jZS5jYW5CZU1ldGhvZChjYW5CZU1ldGhvZCk7XG5oYXJkZW4oY2FuQmVNZXRob2QpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Q2hlY2tlcj0oY29uZCxkZXRhaWxzKT0+e1xuYXNzZXJ0KGNvbmQsZGV0YWlscyk7XG5yZXR1cm4gdHJ1ZTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0Q2hlY2tlcihhc3NlcnRDaGVja2VyKTtcbmhhcmRlbihhc3NlcnRDaGVja2VyKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQ1g9KGNoZWNrKT0+e1xuY29uc3QgcmVqZWN0PShULC4uLnN1YnMpPT5jaGVjayhmYWxzZSxYKFQsLi4uc3VicykpO1xucmV0dXJuIHJlamVjdDtcbiB9OyRo4oCNX29uY2UuQ1goQ1gpO1xuaGFyZGVuKENYKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRPd25EYXRhRGVzY3JpcHRvcj0oXG5jYW5kaWRhdGUsXG5wcm9wTmFtZSxcbnNob3VsZEJlRW51bWVyYWJsZSxcbmNoZWNrKT0+XG57XG5jb25zdCBkZXNjPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNhbmRpZGF0ZSxwcm9wTmFtZSk7XG5cbnJldHVybihkZXNjIT09dW5kZWZpbmVkfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgJHtxKHByb3BOYW1lKX0gcHJvcGVydHkgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApJiYoXG5oYXNPd25Qcm9wZXJ0eU9mKGRlc2MsJ3ZhbHVlJyl8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGAke3EocHJvcE5hbWUpfSBtdXN0IG5vdCBiZSBhbiBhY2Nlc3NvciBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YCkmJihcbnNob3VsZEJlRW51bWVyYWJsZT9cbmRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3QgYmUgYW4gZW51bWVyYWJsZSBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YDpcbiFkZXNjLmVudW1lcmFibGV8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGAke3EocHJvcE5hbWUpfSBtdXN0IG5vdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKT9cbmRlc2M6XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gLyogICAgICAgICAgICAgICAgICAqL3VuZGVmaW5lZDtcbiB9OyRo4oCNX29uY2UuZ2V0T3duRGF0YURlc2NyaXB0b3IoZ2V0T3duRGF0YURlc2NyaXB0b3IpO1xuaGFyZGVuKGdldE93bkRhdGFEZXNjcmlwdG9yKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldFRhZz0odGFnUmVjb3JkKT0+dGFnUmVjb3JkW1N5bWJvbC50b1N0cmluZ1RhZ107JGjigI1fb25jZS5nZXRUYWcoZ2V0VGFnKTtcbmhhcmRlbihnZXRUYWcpO1xuXG5jb25zdCAgICAgICAgY2hlY2tQYXNzU3R5bGU9KG9iaixwYXNzU3R5bGUsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG5wYXNzU3R5bGU9PT1leHBlY3RlZFBhc3NTdHlsZXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRXhwZWN0ZWQgJHtxKGV4cGVjdGVkUGFzc1N0eWxlKX0sIG5vdCAke3EocGFzc1N0eWxlKX06ICR7b2JqfWApO1xuXG4gfTskaOKAjV9vbmNlLmNoZWNrUGFzc1N0eWxlKGNoZWNrUGFzc1N0eWxlKTtcbmhhcmRlbihjaGVja1Bhc3NTdHlsZSk7XG5cbmNvbnN0IG1ha2VDaGVja1RhZ1JlY29yZD0oY2hlY2tQcm90byk9Pntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1RhZ1JlY29yZD0odGFnUmVjb3JkLGV4cGVjdGVkUGFzc1N0eWxlLGNoZWNrKT0+e1xucmV0dXJuKFxuKGlzT2JqZWN0KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgbm9uLW9iamVjdCBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiYoXG5pc0Zyb3plbih0YWdSZWNvcmQpfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgQSB0YWdSZWNvcmQgbXVzdCBiZSBmcm96ZW46ICR7dGFnUmVjb3JkfWApJiYoXG4haXNBcnJheSh0YWdSZWNvcmQpfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgQW4gYXJyYXkgY2Fubm90IGJlIGEgdGFnUmVjb3JkOiAke3RhZ1JlY29yZH1gKSYmXG5jaGVja1Bhc3NTdHlsZShcbnRhZ1JlY29yZCxcbmdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxQQVNTX1NUWUxFLGZhbHNlLGNoZWNrKS52YWx1ZSxcbmV4cGVjdGVkUGFzc1N0eWxlLFxuY2hlY2spJiYoXG5cbnR5cGVvZiBnZXRPd25EYXRhRGVzY3JpcHRvcih0YWdSZWNvcmQsU3ltYm9sLnRvU3RyaW5nVGFnLGZhbHNlLGNoZWNrKS5cbnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBBIFtTeW1ib2wudG9TdHJpbmdUYWddLW5hbWVkIHByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmc6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUHJvdG8odGFnUmVjb3JkLGdldFByb3RvdHlwZU9mKHRhZ1JlY29yZCksY2hlY2spKTtcblxuIH07XG5yZXR1cm4gaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcbiB9O1xuXG5jb25zdCAgICAgICAgY2hlY2tUYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuISFjaGVjayYmXG5jaGVjayhmYWxzZSxYIGBBIHRhZ1JlY29yZCBtdXN0IGluaGVyaXQgZnJvbSBPYmplY3QucHJvdG90eXBlOiAke3ZhbH1gKSk7JGjigI1fb25jZS5jaGVja1RhZ1JlY29yZChjaGVja1RhZ1JlY29yZCk7XG5cbmhhcmRlbihjaGVja1RhZ1JlY29yZCk7XG5cbmNvbnN0ICAgICAgICBjaGVja0Z1bmN0aW9uVGFnUmVjb3JkPW1ha2VDaGVja1RhZ1JlY29yZChcbih2YWwscHJvdG8sY2hlY2spPT5cbnByb3RvPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxucHJvdG8hPT1udWxsJiZnZXRQcm90b3R5cGVPZihwcm90byk9PT1mdW5jdGlvblByb3RvdHlwZXx8XG4hIWNoZWNrJiZcbmNoZWNrKFxuZmFsc2UsXG5YIGBGb3IgZnVuY3Rpb25zLCBhIHRhZ1JlY29yZCBtdXN0IGluaGVyaXQgZnJvbSBGdW5jdGlvbi5wcm90b3R5cGU6ICR7dmFsfWApKTskaOKAjV9vbmNlLmNoZWNrRnVuY3Rpb25UYWdSZWNvcmQoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCk7XG5cblxuaGFyZGVuKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaGFzT3duUHJvcGVydHlPZiI6WyJoYXNPd25Qcm9wZXJ0eU9mIl0sImlzT2JqZWN0IjpbImlzT2JqZWN0Il0sImlzVHlwZWRBcnJheSI6WyJpc1R5cGVkQXJyYXkiXSwiUEFTU19TVFlMRSI6WyJQQVNTX1NUWUxFIl0sImNhbkJlTWV0aG9kIjpbImNhbkJlTWV0aG9kIl0sImFzc2VydENoZWNrZXIiOlsiYXNzZXJ0Q2hlY2tlciJdLCJDWCI6WyJDWCJdLCJnZXRPd25EYXRhRGVzY3JpcHRvciI6WyJnZXRPd25EYXRhRGVzY3JpcHRvciJdLCJnZXRUYWciOlsiZ2V0VGFnIl0sImNoZWNrUGFzc1N0eWxlIjpbImNoZWNrUGFzc1N0eWxlIl0sImNoZWNrVGFnUmVjb3JkIjpbImNoZWNrVGFnUmVjb3JkIl0sImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiOlsiY2hlY2tGdW5jdGlvblRhZ1JlY29yZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA/mIlJ5SQAAOUkAAAqAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3Bhc3NTdHlsZU9mLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vY29weUFycmF5LmpzIiwiLi9jb3B5UmVjb3JkLmpzIiwiLi90YWdnZWQuanMiLCIuL2Vycm9yLmpzIiwiLi9yZW1vdGFibGUuanMiLCIuL3N5bWJvbC5qcyIsIi4vc2FmZS1wcm9taXNlLmpzIiwiLi9zdHJpbmcuanMiXSwiZXhwb3J0cyI6WyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCIsImFzc2VydFBhc3NhYmxlIiwiaXNQYXNzYWJsZSIsInBhc3NTdHlsZU9mIiwidG9QYXNzYWJsZUVycm9yIiwidG9UaHJvd2FibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGlzUHJvbWlzZSxYLEZhaWwscSxhbm5vdGF0ZUVycm9yLG1ha2VFcnJvcixpc09iamVjdCxpc1R5cGVkQXJyYXksUEFTU19TVFlMRSxDb3B5QXJyYXlIZWxwZXIsQ29weVJlY29yZEhlbHBlcixUYWdnZWRIZWxwZXIsRXJyb3JIZWxwZXIsY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MsY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IsZ2V0RXJyb3JDb25zdHJ1Y3Rvcixpc0Vycm9yTGlrZSxSZW1vdGFibGVIZWxwZXIsYXNzZXJ0UGFzc2FibGVTeW1ib2wsYXNzZXJ0U2FmZVByb21pc2UsYXNzZXJ0UGFzc2FibGVTdHJpbmc7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjigI1fYSA9PiAoaXNQcm9taXNlID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjigI1fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRo4oCNX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaOKAjV9hID0+IChtYWtlRXJyb3IgPSAkaOKAjV9hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiaXNPYmplY3RcIiwgWyRo4oCNX2EgPT4gKGlzT2JqZWN0ID0gJGjigI1fYSldXSxbXCJpc1R5cGVkQXJyYXlcIiwgWyRo4oCNX2EgPT4gKGlzVHlwZWRBcnJheSA9ICRo4oCNX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjigI1fYSA9PiAoUEFTU19TVFlMRSA9ICRo4oCNX2EpXV1dXSxbXCIuL2NvcHlBcnJheS5qc1wiLCBbW1wiQ29weUFycmF5SGVscGVyXCIsIFskaOKAjV9hID0+IChDb3B5QXJyYXlIZWxwZXIgPSAkaOKAjV9hKV1dXV0sW1wiLi9jb3B5UmVjb3JkLmpzXCIsIFtbXCJDb3B5UmVjb3JkSGVscGVyXCIsIFskaOKAjV9hID0+IChDb3B5UmVjb3JkSGVscGVyID0gJGjigI1fYSldXV1dLFtcIi4vdGFnZ2VkLmpzXCIsIFtbXCJUYWdnZWRIZWxwZXJcIiwgWyRo4oCNX2EgPT4gKFRhZ2dlZEhlbHBlciA9ICRo4oCNX2EpXV1dXSxbXCIuL2Vycm9yLmpzXCIsIFtbXCJFcnJvckhlbHBlclwiLCBbJGjigI1fYSA9PiAoRXJyb3JIZWxwZXIgPSAkaOKAjV9hKV1dLFtcImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjXCIsIFskaOKAjV9hID0+IChjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyA9ICRo4oCNX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JcIiwgWyRo4oCNX2EgPT4gKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yID0gJGjigI1fYSldXSxbXCJnZXRFcnJvckNvbnN0cnVjdG9yXCIsIFskaOKAjV9hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjigI1fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjigI1fYSA9PiAoaXNFcnJvckxpa2UgPSAkaOKAjV9hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcIlJlbW90YWJsZUhlbHBlclwiLCBbJGjigI1fYSA9PiAoUmVtb3RhYmxlSGVscGVyID0gJGjigI1fYSldXV1dLFtcIi4vc3ltYm9sLmpzXCIsIFtbXCJhc3NlcnRQYXNzYWJsZVN5bWJvbFwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaOKAjV9hKV1dXV0sW1wiLi9zYWZlLXByb21pc2UuanNcIiwgW1tcImFzc2VydFNhZmVQcm9taXNlXCIsIFskaOKAjV9hID0+IChhc3NlcnRTYWZlUHJvbWlzZSA9ICRo4oCNX2EpXV1dXSxbXCIuL3N0cmluZy5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTdHJpbmdcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFBhc3NhYmxlU3RyaW5nID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzRnJvemVuLGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMsdmFsdWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5cbmNvbnN0IG1ha2VIZWxwZXJUYWJsZT0ocGFzc1N0eWxlSGVscGVycyk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgSGVscGVyVGFibGU9e1xuX19wcm90b19fOm51bGwsXG5jb3B5QXJyYXk6dW5kZWZpbmVkLFxuY29weVJlY29yZDp1bmRlZmluZWQsXG50YWdnZWQ6dW5kZWZpbmVkLFxuZXJyb3I6dW5kZWZpbmVkLFxucmVtb3RhYmxlOnVuZGVmaW5lZH07XG5cbmZvcihjb25zdCBoZWxwZXIgb2YgcGFzc1N0eWxlSGVscGVycyl7XG5jb25zdHtzdHlsZU5hbWV9PWhlbHBlcjtcbnN0eWxlTmFtZSBpbiBIZWxwZXJUYWJsZXx8RmFpbCBgVW5yZWNvZ25pemVkIGhlbHBlcjogJHtxKHN0eWxlTmFtZSl9YDtcbkhlbHBlclRhYmxlW3N0eWxlTmFtZV09PT11bmRlZmluZWR8fFxuRmFpbCBgY29uZmxpY3RpbmcgaGVscGVycyBmb3IgJHtxKHN0eWxlTmFtZSl9YDtcbkhlbHBlclRhYmxlW3N0eWxlTmFtZV09aGVscGVyO1xuIH1cbmZvcihjb25zdCBzdHlsZU5hbWUgb2Ygb3duS2V5cyhIZWxwZXJUYWJsZSkpe1xuSGVscGVyVGFibGVbc3R5bGVOYW1lXSE9PXVuZGVmaW5lZHx8XG5GYWlsIGBtaXNzaW5nIGhlbHBlciBmb3IgJHtxKHN0eWxlTmFtZSl9YDtcbiB9XG5cbnJldHVybiBoYXJkZW4oSGVscGVyVGFibGUpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlUGFzc1N0eWxlT2Y9KHBhc3NTdHlsZUhlbHBlcnMpPT57XG5jb25zdCBIZWxwZXJUYWJsZT1tYWtlSGVscGVyVGFibGUocGFzc1N0eWxlSGVscGVycyk7XG5jb25zdCByZW1vdGFibGVIZWxwZXI9SGVscGVyVGFibGUucmVtb3RhYmxlO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwYXNzU3R5bGVNZW1vPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cbiAgICovXG4vL1xuY29uc3QgcGFzc1N0eWxlT2Y9KHBhc3NhYmxlKT0+e1xuLy9cbi8vXG4vL1xuY29uc3QgaW5Qcm9ncmVzcz1uZXcgU2V0KCk7XG5cbmNvbnN0IHBhc3NTdHlsZU9mUmVjdXI9KGlubmVyKT0+e1xuY29uc3QgaW5uZXJJc09iamVjdD1pc09iamVjdChpbm5lcik7XG5pZihpbm5lcklzT2JqZWN0KXtcbmNvbnN0IGlubmVyU3R5bGU9cGFzc1N0eWxlTWVtby5nZXQoaW5uZXIpO1xuaWYoaW5uZXJTdHlsZSl7XG5yZXR1cm4gaW5uZXJTdHlsZTtcbiB9XG4haW5Qcm9ncmVzcy5oYXMoaW5uZXIpfHxcbkZhaWwgYFBhc3MtYnktY29weSBkYXRhIGNhbm5vdCBiZSBjeWNsaWMgJHtpbm5lcn1gO1xuaW5Qcm9ncmVzcy5hZGQoaW5uZXIpO1xuIH1cbi8vXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2ZJbnRlcm5hbChpbm5lcik7XG5pZihpbm5lcklzT2JqZWN0KXtcbnBhc3NTdHlsZU1lbW8uc2V0KGlubmVyLHBhc3NTdHlsZSk7XG5pblByb2dyZXNzLmRlbGV0ZShpbm5lcik7XG4gfVxucmV0dXJuIHBhc3NTdHlsZTtcbiB9O1xuXG5jb25zdCBwYXNzU3R5bGVPZkludGVybmFsPShpbm5lcik9PntcbmNvbnN0IHR5cGVzdHI9dHlwZW9mIGlubmVyO1xuc3dpdGNoKHR5cGVzdHIpe1xuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdib29sZWFuJzpcbmNhc2UnbnVtYmVyJzpcbmNhc2UnYmlnaW50Jzp7XG5yZXR1cm4gdHlwZXN0cjtcbiB9XG5jYXNlJ3N0cmluZyc6e1xuYXNzZXJ0UGFzc2FibGVTdHJpbmcoaW5uZXIpO1xucmV0dXJuJ3N0cmluZyc7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmFzc2VydFBhc3NhYmxlU3ltYm9sKGlubmVyKTtcbnJldHVybidzeW1ib2wnO1xuIH1cbmNhc2Unb2JqZWN0Jzp7XG5pZihpbm5lcj09PW51bGwpe1xucmV0dXJuJ251bGwnO1xuIH1cbmlmKCFpc0Zyb3plbihpbm5lcikpe1xuYXNzZXJ0LmZhaWwoXG4vL1xuLy9cbmlzVHlwZWRBcnJheShpbm5lcik/XG5YIGBDYW5ub3QgcGFzcyBtdXRhYmxlIHR5cGVkIGFycmF5cyBsaWtlICR7aW5uZXJ9LmA6XG5YIGBDYW5ub3QgcGFzcyBub24tZnJvemVuIG9iamVjdHMgbGlrZSAke2lubmVyfS4gVXNlIGhhcmRlbigpYCk7XG5cbiB9XG5pZihpc1Byb21pc2UoaW5uZXIpKXtcbmFzc2VydFNhZmVQcm9taXNlKGlubmVyKTtcbnJldHVybidwcm9taXNlJztcbiB9XG50eXBlb2YgaW5uZXIudGhlbiE9PSdmdW5jdGlvbid8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLXByb21pc2UgdGhlbmFibGVzYDtcbmNvbnN0IHBhc3NTdHlsZVRhZz1pbm5lcltQQVNTX1NUWUxFXTtcbmlmKHBhc3NTdHlsZVRhZyE9PXVuZGVmaW5lZCl7XG5hc3NlcnQudHlwZW9mKHBhc3NTdHlsZVRhZywnc3RyaW5nJyk7XG5jb25zdCBoZWxwZXI9SGVscGVyVGFibGVbcGFzc1N0eWxlVGFnXTtcbmhlbHBlciE9PXVuZGVmaW5lZHx8XG5GYWlsIGBVbnJlY29nbml6ZWQgUGFzc1N0eWxlOiAke3EocGFzc1N0eWxlVGFnKX1gO1xuaGVscGVyLmFzc2VydFZhbGlkKGlubmVyLHBhc3NTdHlsZU9mUmVjdXIpO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgKi9wYXNzU3R5bGVUYWcpO1xuIH1cbmZvcihjb25zdCBoZWxwZXIgb2YgcGFzc1N0eWxlSGVscGVycyl7XG5pZihoZWxwZXIuY2FuQmVWYWxpZChpbm5lcikpe1xuaGVscGVyLmFzc2VydFZhbGlkKGlubmVyLHBhc3NTdHlsZU9mUmVjdXIpO1xucmV0dXJuIGhlbHBlci5zdHlsZU5hbWU7XG4gfVxuIH1cbnJlbW90YWJsZUhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybidyZW1vdGFibGUnO1xuIH1cbmNhc2UnZnVuY3Rpb24nOntcbmlzRnJvemVuKGlubmVyKXx8XG5GYWlsIGBDYW5ub3QgcGFzcyBub24tZnJvemVuIG9iamVjdHMgbGlrZSAke2lubmVyfS4gVXNlIGhhcmRlbigpYDtcbnR5cGVvZiBpbm5lci50aGVuIT09J2Z1bmN0aW9uJ3x8XG5GYWlsIGBDYW5ub3QgcGFzcyBub24tcHJvbWlzZSB0aGVuYWJsZXNgO1xucmVtb3RhYmxlSGVscGVyLmFzc2VydFZhbGlkKGlubmVyLHBhc3NTdHlsZU9mUmVjdXIpO1xucmV0dXJuJ3JlbW90YWJsZSc7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChYIGBVbnJlY29nbml6ZWQgdHlwZW9mICR7cSh0eXBlc3RyKX1gLFR5cGVFcnJvcik7XG4gfX1cblxuIH07XG5cbnJldHVybiBwYXNzU3R5bGVPZlJlY3VyKHBhc3NhYmxlKTtcbiB9O1xucmV0dXJuIGhhcmRlbihwYXNzU3R5bGVPZik7XG4gfTtcblxuY29uc3QgICAgICAgIFBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sPVN5bWJvbC5mb3IoJ0BlbmRvIHBhc3NTdHlsZU9mJyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2woUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wpO1xuY29uc3QgICAgICAgIHBhc3NTdHlsZU9mPVxuZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpc1tQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbF18fFxubWFrZVBhc3NTdHlsZU9mKFtcbkNvcHlBcnJheUhlbHBlcixcbkNvcHlSZWNvcmRIZWxwZXIsXG5UYWdnZWRIZWxwZXIsXG5FcnJvckhlbHBlcixcblJlbW90YWJsZUhlbHBlcl0pOyRo4oCNX29uY2UucGFzc1N0eWxlT2YocGFzc1N0eWxlT2YpO1xuXG5cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZT0odmFsKT0+e1xucGFzc1N0eWxlT2YodmFsKTsvL1xuIH07JGjigI1fb25jZS5hc3NlcnRQYXNzYWJsZShhc3NlcnRQYXNzYWJsZSk7XG5oYXJkZW4oYXNzZXJ0UGFzc2FibGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUGFzc2FibGU9KHNwZWNpbWVuKT0+e1xudHJ5e1xuLy9cbi8vXG5yZXR1cm4gcGFzc1N0eWxlT2Yoc3BlY2ltZW4pIT09dW5kZWZpbmVkO1xuIH1jYXRjaChfKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfTskaOKAjV9vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG5oYXJkZW4oaXNQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0obmFtZSxkZXNjKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhuYW1lLGRlc2MscGFzc1N0eWxlT2YpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRvUGFzc2FibGVFcnJvcj0oZXJyKT0+e1xuaGFyZGVuKGVycik7XG5pZihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2YpKXtcbnJldHVybiBlcnI7XG4gfVxuY29uc3R7bmFtZSxtZXNzYWdlfT1lcnI7XG5jb25zdHtjYXVzZTpjYXVzZURlc2MsZXJyb3JzOmVycm9yc0Rlc2N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlcnIpO1xubGV0IGNhdXNlO1xubGV0IGVycm9ycztcbmlmKGNhdXNlRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdjYXVzZScsY2F1c2VEZXNjKSl7XG5jYXVzZT1jYXVzZURlc2MudmFsdWU7XG4gfVxuaWYoZXJyb3JzRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdlcnJvcnMnLGVycm9yc0Rlc2MpKXtcbmVycm9ycz1lcnJvcnNEZXNjLnZhbHVlO1xuIH1cblxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvciggYCR7bmFtZX1gKXx8RXJyb3I7XG5jb25zdCBuZXdFcnJvcj1tYWtlRXJyb3IoIGAke21lc3NhZ2V9YCxlcnJDb25zdHJ1Y3Rvcix7XG4vL1xuY2F1c2UsXG5lcnJvcnN9KTtcblxuLy9cbmhhcmRlbihuZXdFcnJvcik7XG4vL1xuLy9cbi8vXG5hbm5vdGF0ZUVycm9yKG5ld0Vycm9yLFggYGNvcGllZCBmcm9tIGVycm9yICR7ZXJyfWApO1xucGFzc1N0eWxlT2YobmV3RXJyb3IpPT09J2Vycm9yJ3x8XG5GYWlsIGBFeHBlY3RlZCAke25ld0Vycm9yfSB0byBiZSBhIHBhc3NhYmxlIGVycm9yYDtcbnJldHVybiBuZXdFcnJvcjtcbiB9OyRo4oCNX29uY2UudG9QYXNzYWJsZUVycm9yKHRvUGFzc2FibGVFcnJvcik7XG5oYXJkZW4odG9QYXNzYWJsZUVycm9yKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRvVGhyb3dhYmxlPShzcGVjaW1lbik9PntcbmhhcmRlbihzcGVjaW1lbik7XG5pZihpc0Vycm9yTGlrZShzcGVjaW1lbikpe1xucmV0dXJuIHRvUGFzc2FibGVFcnJvcigvKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuKTtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2Yoc3BlY2ltZW4pO1xuaWYoaXNPYmplY3Qoc3BlY2ltZW4pKXtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdjb3B5QXJyYXknOntcbmNvbnN0IGVsZW1lbnRzPS8qICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuZm9yKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpe1xuZWxlbWVudD09PXRvVGhyb3dhYmxlKGVsZW1lbnQpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VsZW1lbnR9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmNvbnN0IHJlYz0vKiAgICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgdmFsIG9mIHZhbHVlcyhyZWMpKXtcbnZhbD09PXRvVGhyb3dhYmxlKHZhbCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7dmFsfWA7XG4gfVxuYnJlYWs7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRnPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmNvbnN0e3BheWxvYWR9PXRnO1xucGF5bG9hZD09PXRvVGhyb3dhYmxlKHBheWxvYWQpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke3BheWxvYWR9YDtcbmJyZWFrO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IGVyPS8qICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5lcj09PXRvVGhyb3dhYmxlKGVyKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHtlcn1gO1xuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBBICR7cShwYXNzU3R5bGUpfSBpcyBub3QgdGhyb3dhYmxlOiAke3NwZWNpbWVufWA7XG4gfX1cblxuIH1cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH07JGjigI1fb25jZS50b1Rocm93YWJsZSh0b1Rocm93YWJsZSk7XG5oYXJkZW4odG9UaHJvd2FibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wiOlsiUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wiXSwicGFzc1N0eWxlT2YiOlsicGFzc1N0eWxlT2YiXSwiYXNzZXJ0UGFzc2FibGUiOlsiYXNzZXJ0UGFzc2FibGUiXSwiaXNQYXNzYWJsZSI6WyJpc1Bhc3NhYmxlIl0sInRvUGFzc2FibGVFcnJvciI6WyJ0b1Bhc3NhYmxlRXJyb3IiXSwidG9UaHJvd2FibGUiOlsidG9UaHJvd2FibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAd9FSe8QXAADEFwAAKAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9yZW1vdGFibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIlJlbW90YWJsZUhlbHBlciIsImFzc2VydElmYWNlIiwiZ2V0SW50ZXJmYWNlT2YiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxhc3NlcnRDaGVja2VyLGNhbkJlTWV0aG9kLGhhc093blByb3BlcnR5T2YsUEFTU19TVFlMRSxjaGVja1RhZ1JlY29yZCxjaGVja0Z1bmN0aW9uVGFnUmVjb3JkLGlzT2JqZWN0LGdldFRhZyxDWDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRo4oCNX2EpXV0sW1wiY2FuQmVNZXRob2RcIiwgWyRo4oCNX2EgPT4gKGNhbkJlTWV0aG9kID0gJGjigI1fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaOKAjV9hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjigI1fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaOKAjV9hID0+IChQQVNTX1NUWUxFID0gJGjigI1fYSldXSxbXCJjaGVja1RhZ1JlY29yZFwiLCBbJGjigI1fYSA9PiAoY2hlY2tUYWdSZWNvcmQgPSAkaOKAjV9hKV1dLFtcImNoZWNrRnVuY3Rpb25UYWdSZWNvcmRcIiwgWyRo4oCNX2EgPT4gKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQgPSAkaOKAjV9hKV1dLFtcImlzT2JqZWN0XCIsIFskaOKAjV9hID0+IChpc09iamVjdCA9ICRo4oCNX2EpXV0sW1wiZ2V0VGFnXCIsIFskaOKAjV9hID0+IChnZXRUYWcgPSAkaOKAjV9hKV1dLFtcIkNYXCIsIFskaOKAjV9hID0+IChDWCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtcbmdldFByb3RvdHlwZU9mLFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlLFxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309XG5PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBjaGVja0lmYWNlPShpZmFjZSxjaGVjayk9PntcbnJldHVybihcbi8vXG4odHlwZW9mIGlmYWNlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGb3Igbm93LCBpbnRlcmZhY2UgJHtpZmFjZX0gbXVzdCBiZSBhIHN0cmluZzsgdW5pbXBsZW1lbnRlZGApJiYoXG5pZmFjZT09PSdSZW1vdGFibGUnfHxcbmlmYWNlLnN0YXJ0c1dpdGgoJ0FsbGVnZWQ6ICcpfHxcbmlmYWNlLnN0YXJ0c1dpdGgoJ0RlYnVnTmFtZTogJyl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEZvciBub3csIGlmYWNlICR7cShcbmlmYWNlKVxuIH0gbXVzdCBiZSBcIlJlbW90YWJsZVwiIG9yIGJlZ2luIHdpdGggXCJBbGxlZ2VkOiBcIiBvciBcIkRlYnVnTmFtZTogXCI7IHVuaW1wbGVtZW50ZWRgKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydElmYWNlPShpZmFjZSk9PmNoZWNrSWZhY2UoaWZhY2UsYXNzZXJ0Q2hlY2tlcik7JGjigI1fb25jZS5hc3NlcnRJZmFjZShhc3NlcnRJZmFjZSk7XG5oYXJkZW4oYXNzZXJ0SWZhY2UpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1JlbW90YWJsZVByb3RvT2Y9KG9yaWdpbmFsLGNoZWNrKT0+e1xuaXNPYmplY3Qob3JpZ2luYWwpfHxcbkZhaWwgYFJlbW90YWJsZXMgbXVzdCBiZSBvYmplY3RzIG9yIGZ1bmN0aW9uczogJHtvcmlnaW5hbH1gO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHByb3RvPWdldFByb3RvdHlwZU9mKG9yaWdpbmFsKTtcbmlmKFxucHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxucHJvdG89PT1udWxsfHxcbnByb3RvPT09RnVuY3Rpb24ucHJvdG90eXBlKVxue1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFJlbW90YWJsZXMgbXVzdCBiZSBleHBsaWNpdGx5IGRlY2xhcmVkOiAke3Eob3JpZ2luYWwpfWApO1xuXG4gfVxuXG5pZih0eXBlb2Ygb3JpZ2luYWw9PT0nb2JqZWN0Jyl7XG5jb25zdCBwcm90b1Byb3RvPWdldFByb3RvdHlwZU9mKHByb3RvKTtcbmlmKHByb3RvUHJvdG8hPT1vYmplY3RQcm90b3R5cGUmJnByb3RvUHJvdG8hPT1udWxsKXtcbi8vXG5yZXR1cm4gY2hlY2tSZW1vdGFibGUocHJvdG8sY2hlY2spO1xuIH1cbmlmKCFjaGVja1RhZ1JlY29yZChwcm90bywncmVtb3RhYmxlJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9ZWxzZSBpZih0eXBlb2Ygb3JpZ2luYWw9PT0nZnVuY3Rpb24nKXtcbmlmKCFjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKHByb3RvLCdyZW1vdGFibGUnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cblxuLy9cbmNvbnN0IHBhc3NTdHlsZUtleT0vKiAgICAgICAgICAgICAgICAgICovUEFTU19TVFlMRTtcbmNvbnN0IHRhZ0tleT0vKiAgICAgICAgICAgICAgICAgICovU3ltYm9sLnRvU3RyaW5nVGFnO1xuY29uc3R7XG4vL1xuWy8qICAgICAgICAgICAgICAgICAqL3Bhc3NTdHlsZUtleV06X3Bhc3NTdHlsZURlc2MsXG5bLyogICAgICAgICAgICAgICAgICovdGFnS2V5XTp7dmFsdWU6aWZhY2V9LFxuLi4ucmVzdERlc2NzfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMocHJvdG8pO1xuXG5yZXR1cm4oXG4ob3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBVbmV4cGVjdGVkIHByb3BlcnRpZXMgb24gUmVtb3RhYmxlIFByb3RvICR7b3duS2V5cyhyZXN0RGVzY3MpfWApJiZcbmNoZWNrSWZhY2UoaWZhY2UsY2hlY2spKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29uZmlybWVkUmVtb3RhYmxlcz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1JlbW90YWJsZT0odmFsLGNoZWNrKT0+e1xuaWYoY29uZmlybWVkUmVtb3RhYmxlcy5oYXModmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZighaXNGcm96ZW4odmFsKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZDWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHt2YWx9YCk7XG5cbiB9XG4vL1xuaWYoIVJlbW90YWJsZUhlbHBlci5jYW5CZVZhbGlkKHZhbCxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHJlc3VsdD1jaGVja1JlbW90YWJsZVByb3RvT2YodmFsLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb25maXJtZWRSZW1vdGFibGVzLmFkZCh2YWwpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlT2Y9KHZhbCk9PntcbmlmKFxuIWlzT2JqZWN0KHZhbCl8fFxudmFsW1BBU1NfU1RZTEVdIT09J3JlbW90YWJsZSd8fFxuIWNoZWNrUmVtb3RhYmxlKHZhbCkpXG57XG4vL1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4vL1xucmV0dXJuIGdldFRhZyh2YWwpO1xuIH07JGjigI1fb25jZS5nZXRJbnRlcmZhY2VPZihnZXRJbnRlcmZhY2VPZik7XG5oYXJkZW4oZ2V0SW50ZXJmYWNlT2YpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIFJlbW90YWJsZUhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidyZW1vdGFibGUnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xuY29uc3QgdmFsaWRUeXBlPVxuKGlzT2JqZWN0KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgbm9uLW9iamVjdHMgYXMgUmVtb3RhYmxlICR7Y2FuZGlkYXRlfWApJiYoXG4haXNBcnJheShjYW5kaWRhdGUpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIGFycmF5cyBhcyBSZW1vdGFibGUgJHtjYW5kaWRhdGV9YCk7XG5pZighdmFsaWRUeXBlKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbmlmKHR5cGVvZiBjYW5kaWRhdGU9PT0nb2JqZWN0Jyl7XG4vL1xuLy9cbnJldHVybiBvd25LZXlzKGRlc2NzKS5ldmVyeSgoa2V5KT0+e1xucmV0dXJuKFxuLy9cbihoYXNPd25Qcm9wZXJ0eU9mKGRlc2NzWy8qICAgICAgICAgICAgICAgICAqL2tleV0sJ3ZhbHVlJyl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgUmVtb3RhYmxlcyB3aXRoIGFjY2Vzc29ycyBsaWtlICR7cShcblN0cmluZyhrZXkpKVxuIH0gaW4gJHtjYW5kaWRhdGV9YCkmJihcbmtleT09PVN5bWJvbC50b1N0cmluZ1RhZyYmY2hlY2tJZmFjZShjYW5kaWRhdGVba2V5XSxjaGVjayl8fFxuKGNhbkJlTWV0aG9kKGNhbmRpZGF0ZVtrZXldKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBSZW1vdGFibGVzIHdpdGggbm9uLW1ldGhvZHMgbGlrZSAke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGluICR7Y2FuZGlkYXRlfWApJiYoXG5rZXkhPT1QQVNTX1NUWUxFfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBBIHBhc3MtYnktcmVtb3RlIGNhbm5vdCBzaGFkb3cgJHtxKFBBU1NfU1RZTEUpfWApKSk7XG5cbiB9KTtcbiB9ZWxzZSBpZih0eXBlb2YgY2FuZGlkYXRlPT09J2Z1bmN0aW9uJyl7XG4vL1xuLy9cbmNvbnN0e1xubmFtZTpuYW1lRGVzYyxcbmxlbmd0aDpsZW5ndGhEZXNjLFxuLy9cbltTeW1ib2wudG9TdHJpbmdUYWddOnRvU3RyaW5nVGFnRGVzYyxcbi4uLnJlc3REZXNjc309XG5kZXNjcztcbmNvbnN0IHJlc3RLZXlzPW93bktleXMocmVzdERlc2NzKTtcbnJldHVybihcbihuYW1lRGVzYyYmdHlwZW9mIG5hbWVEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEZhciBmdW5jdGlvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGluICR7Y2FuZGlkYXRlfWApJiYoXG5sZW5ndGhEZXNjJiZ0eXBlb2YgbGVuZ3RoRGVzYy52YWx1ZT09PSdudW1iZXInfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRmFyIGZ1bmN0aW9uIGxlbmd0aCBtdXN0IGJlIGEgbnVtYmVyLCBpbiAke2NhbmRpZGF0ZX1gKSYmKFxudG9TdHJpbmdUYWdEZXNjPT09dW5kZWZpbmVkfHxcbih0eXBlb2YgdG9TdHJpbmdUYWdEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb24gQEB0b1N0cmluZ1RhZyBtdXN0IGJlIGEgc3RyaW5nLCBpbiAke2NhbmRpZGF0ZX1gKSYmXG5jaGVja0lmYWNlKHRvU3RyaW5nVGFnRGVzYy52YWx1ZSxjaGVjaykpJiYoXG5yZXN0S2V5cy5sZW5ndGg9PT0wfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRmFyIGZ1bmN0aW9ucyB1bmV4cGVjdGVkIHByb3BlcnRpZXMgYmVzaWRlcyAubmFtZSBhbmQgLmxlbmd0aCAke3Jlc3RLZXlzfWApKTtcblxuIH1cbnJldHVybiEhY2hlY2smJkNYKGNoZWNrKSBgdW5yZWNvZ25pemVkIHR5cGVvZiAke2NhbmRpZGF0ZX1gO1xuIH0sXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUpPT5jaGVja1JlbW90YWJsZShjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlciksXG5cbmV2ZXJ5OihfcGFzc2FibGUsX2ZuKT0+dHJ1ZX0pOyRo4oCNX29uY2UuUmVtb3RhYmxlSGVscGVyKFJlbW90YWJsZUhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3NlcnRJZmFjZSI6WyJhc3NlcnRJZmFjZSJdLCJnZXRJbnRlcmZhY2VPZiI6WyJnZXRJbnRlcmZhY2VPZiJdLCJSZW1vdGFibGVIZWxwZXIiOlsiUmVtb3RhYmxlSGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJtoL6SXDAAAlwwAACsAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvc2FmZS1wcm9taXNlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbImFzc2VydFNhZmVQcm9taXNlIiwiaXNTYWZlUHJvbWlzZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLHEsYXNzZXJ0Q2hlY2tlcixoYXNPd25Qcm9wZXJ0eU9mLENYOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRo4oCNX2EgPT4gKGlzUHJvbWlzZSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRo4oCNX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjigI1fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRo4oCNX2EpXV0sW1wiQ1hcIiwgWyRo4oCNX2EgPT4gKENYID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e2lzRnJvemVuLGdldFByb3RvdHlwZU9mLGdldE93blByb3BlcnR5RGVzY3JpcHRvcn09T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e3RvU3RyaW5nVGFnfT1TeW1ib2w7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUHJvbWlzZU93bktleXM9KHByLGNoZWNrKT0+e1xuY29uc3Qga2V5cz1vd25LZXlzKHByKTtcblxuaWYoa2V5cy5sZW5ndGg9PT0wKXtcbnJldHVybiB0cnVlO1xuIH1cblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHVua25vd25LZXlzPWtleXMuZmlsdGVyKFxuKGtleSk9PnR5cGVvZiBrZXkhPT0nc3ltYm9sJ3x8IWhhc093blByb3BlcnR5T2YoUHJvbWlzZS5wcm90b3R5cGUsa2V5KSk7XG5cblxuaWYodW5rbm93bktleXMubGVuZ3RoIT09MCl7XG5yZXR1cm4gQ1goXG5jaGVjaylcbiBgJHtwcn0gLSBNdXN0IG5vdCBoYXZlIGFueSBvd24gcHJvcGVydGllczogJHtxKHVua25vd25LZXlzKX1gO1xuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrU2FmZU93bktleT0oa2V5KT0+e1xuaWYoa2V5PT09dG9TdHJpbmdUYWcpe1xuLy9cbi8vXG5jb25zdCB0YWdEZXNjPWdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcix0b1N0cmluZ1RhZyk7XG5hc3NlcnQodGFnRGVzYyE9PXVuZGVmaW5lZCk7XG5yZXR1cm4oXG4oaGFzT3duUHJvcGVydHlPZih0YWdEZXNjLCd2YWx1ZScpfHxcbkNYKFxuY2hlY2spXG4gYE93biBAQHRvU3RyaW5nVGFnIG11c3QgYmUgYSBkYXRhIHByb3BlcnR5LCBub3QgYW4gYWNjZXNzb3I6ICR7cSh0YWdEZXNjKX1gKSYmKFxudHlwZW9mIHRhZ0Rlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG5DWChcbmNoZWNrKVxuIGBPd24gQEB0b1N0cmluZ1RhZyB2YWx1ZSBtdXN0IGJlIGEgc3RyaW5nOiAke3EodGFnRGVzYy52YWx1ZSl9YCkmJihcbiF0YWdEZXNjLmVudW1lcmFibGV8fFxuQ1goY2hlY2spIGBPd24gQEB0b1N0cmluZ1RhZyBtdXN0IG5vdCBiZSBlbnVtZXJhYmxlOiAke3EodGFnRGVzYyl9YCkpO1xuXG4gfVxuY29uc3QgdmFsPXByW2tleV07XG5pZih2YWw9PT11bmRlZmluZWR8fHR5cGVvZiB2YWw9PT0nbnVtYmVyJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihcbnR5cGVvZiB2YWw9PT0nb2JqZWN0JyYmXG52YWwhPT1udWxsJiZcbmlzRnJvemVuKHZhbCkmJlxuZ2V0UHJvdG90eXBlT2YodmFsKT09PU9iamVjdC5wcm90b3R5cGUpXG57XG5jb25zdCBzdWJLZXlzPW93bktleXModmFsKTtcbmlmKHN1YktleXMubGVuZ3RoPT09MCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5cbmlmKFxuc3ViS2V5cy5sZW5ndGg9PT0xJiZcbnN1YktleXNbMF09PT0nZGVzdHJveWVkJyYmXG52YWwuZGVzdHJveWVkPT09ZmFsc2UpXG57XG5yZXR1cm4gdHJ1ZTtcbiB9XG4gfVxucmV0dXJuIENYKFxuY2hlY2spXG4gYFVuZXhwZWN0ZWQgTm9kZSBhc3luY19ob29rcyBhZGRpdGlvbnMgdG8gcHJvbWlzZTogJHtwcn0uJHtxKFxuU3RyaW5nKGtleSkpXG4gfSBpcyAke3ZhbH1gO1xuIH07XG5cbnJldHVybiBrZXlzLmV2ZXJ5KGNoZWNrU2FmZU93bktleSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrU2FmZVByb21pc2U9KHByLGNoZWNrKT0+e1xucmV0dXJuKFxuKGlzRnJvemVuKHByKXx8Q1goY2hlY2spIGAke3ByfSAtIE11c3QgYmUgZnJvemVuYCkmJihcbmlzUHJvbWlzZShwcil8fENYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGJlIGEgcHJvbWlzZWApJiYoXG5nZXRQcm90b3R5cGVPZihwcik9PT1Qcm9taXNlLnByb3RvdHlwZXx8XG5DWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBpbmhlcml0IGZyb20gUHJvbWlzZS5wcm90b3R5cGU6ICR7cShcbmdldFByb3RvdHlwZU9mKHByKSlcbiB9YCkmJlxuY2hlY2tQcm9taXNlT3duS2V5cygvKiAgICAgICAgICAgICAgICAgICovcHIsY2hlY2spKTtcblxuIH07XG5oYXJkZW4oY2hlY2tTYWZlUHJvbWlzZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzU2FmZVByb21pc2U9KHByKT0+Y2hlY2tTYWZlUHJvbWlzZShwciwoeCk9PngpOyRo4oCNX29uY2UuaXNTYWZlUHJvbWlzZShpc1NhZmVQcm9taXNlKTtcbmhhcmRlbihpc1NhZmVQcm9taXNlKTtcblxuY29uc3QgICAgICAgIGFzc2VydFNhZmVQcm9taXNlPShwcik9PmNoZWNrU2FmZVByb21pc2UocHIsYXNzZXJ0Q2hlY2tlcik7JGjigI1fb25jZS5hc3NlcnRTYWZlUHJvbWlzZShhc3NlcnRTYWZlUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1NhZmVQcm9taXNlIjpbImlzU2FmZVByb21pc2UiXSwiYXNzZXJ0U2FmZVByb21pc2UiOlsiYXNzZXJ0U2FmZVByb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGQibbb4HAAC+BwAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9zdHJpbmcuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJpc1dlbGxGb3JtZWRTdHJpbmciXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldEVudmlyb25tZW50T3B0aW9uLEZhaWw7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaOKAjV9hID0+IChnZXRFbnZpcm9ubWVudE9wdGlvbiA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG4vL1xuY29uc3QgaGFzV2VsbEZvcm1lZFN0cmluZ01ldGhvZD0hIVN0cmluZy5wcm90b3R5cGUuaXNXZWxsRm9ybWVkO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzV2VsbEZvcm1lZFN0cmluZz1oYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kP1xuKHN0cik9PnR5cGVvZiBzdHI9PT0nc3RyaW5nJyYmc3RyLmlzV2VsbEZvcm1lZCgpOlxuKHN0cik9PntcbmlmKHR5cGVvZiBzdHIhPT0nc3RyaW5nJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuZm9yKGNvbnN0IGNoIG9mIHN0cil7XG4vL1xuLy9cbi8vXG5jb25zdCBjcD0vKiAgICAgICAgICAgICAgICAgKi9jaC5jb2RlUG9pbnRBdCgwKTtcbmlmKGNwPj0weGQ4MDAmJmNwPD0weGRmZmYpe1xuLy9cbi8vXG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9OyRo4oCNX29uY2UuaXNXZWxsRm9ybWVkU3RyaW5nKGlzV2VsbEZvcm1lZFN0cmluZyk7XG5oYXJkZW4oaXNXZWxsRm9ybWVkU3RyaW5nKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRXZWxsRm9ybWVkU3RyaW5nPShzdHIpPT57XG5pc1dlbGxGb3JtZWRTdHJpbmcoc3RyKXx8RmFpbCBgRXhwZWN0ZWQgd2VsbC1mb3JtZWQgdW5pY29kZSBzdHJpbmc6ICR7c3RyfWA7XG4gfTskaOKAjV9vbmNlLmFzc2VydFdlbGxGb3JtZWRTdHJpbmcoYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5oYXJkZW4oYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5cbmNvbnN0IE9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRT1cbmdldEVudmlyb25tZW50T3B0aW9uKCdPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEUnLCdkaXNhYmxlZCcsW1xuJ2VuYWJsZWQnXSk9PT1cbidlbmFibGVkJztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3RyaW5nPShzdHIpPT57XG50eXBlb2Ygc3RyPT09J3N0cmluZyd8fEZhaWwgYEV4cGVjdGVkIHN0cmluZyAke3N0cn1gO1xuIU9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRXx8YXNzZXJ0V2VsbEZvcm1lZFN0cmluZyhzdHIpO1xuIH07JGjigI1fb25jZS5hc3NlcnRQYXNzYWJsZVN0cmluZyhhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG5oYXJkZW4oYXNzZXJ0UGFzc2FibGVTdHJpbmcpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNXZWxsRm9ybWVkU3RyaW5nIjpbImlzV2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIjpbImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSwiYXNzZXJ0UGFzc2FibGVTdHJpbmciOlsiYXNzZXJ0UGFzc2FibGVTdHJpbmciXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAQfcjRQkKAAAJCgAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9zeW1ib2wuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIiwibmFtZUZvclBhc3NhYmxlU3ltYm9sIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHE7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qXG5cbiAqL1xuY29uc3Qgd2VsbEtub3duU3ltYm9sTmFtZXM9bmV3IE1hcChcbm93bktleXMoU3ltYm9sKS5cbmZpbHRlcihcbihuYW1lKT0+dHlwZW9mIG5hbWU9PT0nc3RyaW5nJyYmdHlwZW9mIFN5bWJvbFtuYW1lXT09PSdzeW1ib2wnKS5cblxuZmlsdGVyKChuYW1lKT0+e1xuLy9cbiFuYW1lLnN0YXJ0c1dpdGgoJ0BAJyl8fFxuRmFpbCBgRGlkIG5vdCBleHBlY3QgU3ltYm9sIHRvIGhhdmUgYSBzeW1ib2wtdmFsdWVkIHByb3BlcnR5IG5hbWUgc3RhcnRpbmcgd2l0aCBcIkBAXCIgJHtxKFxubmFtZSlcbiB9YDtcbnJldHVybiB0cnVlO1xuIH0pXG4vL1xuLm1hcCgobmFtZSk9PltTeW1ib2xbbmFtZV0sIGBAQCR7bmFtZX1gXSkpO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlU3ltYm9sPShzeW0pPT5cbnR5cGVvZiBzeW09PT0nc3ltYm9sJyYmKFxudHlwZW9mIFN5bWJvbC5rZXlGb3Ioc3ltKT09PSdzdHJpbmcnfHx3ZWxsS25vd25TeW1ib2xOYW1lcy5oYXMoc3ltKSk7JGjigI1fb25jZS5pc1Bhc3NhYmxlU3ltYm9sKGlzUGFzc2FibGVTeW1ib2wpO1xuaGFyZGVuKGlzUGFzc2FibGVTeW1ib2wpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0UGFzc2FibGVTeW1ib2w9KHN5bSk9PlxuaXNQYXNzYWJsZVN5bWJvbChzeW0pfHxcbkZhaWwgYE9ubHkgcmVnaXN0ZXJlZCBzeW1ib2xzIG9yIHdlbGwta25vd24gc3ltYm9scyBhcmUgcGFzc2FibGU6ICR7cShzeW0pfWA7JGjigI1fb25jZS5hc3NlcnRQYXNzYWJsZVN5bWJvbChhc3NlcnRQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4oYXNzZXJ0UGFzc2FibGVTeW1ib2wpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBuYW1lRm9yUGFzc2FibGVTeW1ib2w9KHN5bSk9PntcbmNvbnN0IG5hbWU9U3ltYm9sLmtleUZvcihzeW0pO1xuaWYobmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gd2VsbEtub3duU3ltYm9sTmFtZXMuZ2V0KHN5bSk7XG4gfVxuaWYobmFtZS5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBgQEAke25hbWV9YDtcbiB9XG5yZXR1cm4gbmFtZTtcbiB9OyRo4oCNX29uY2UubmFtZUZvclBhc3NhYmxlU3ltYm9sKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4obmFtZUZvclBhc3NhYmxlU3ltYm9sKTtcblxuY29uc3QgQXRBdFByZWZpeFBhdHRlcm49L15AQCguKikkLztcbmhhcmRlbihBdEF0UHJlZml4UGF0dGVybik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFzc2FibGVTeW1ib2xGb3JOYW1lPShuYW1lKT0+e1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNvbnN0IG1hdGNoPUF0QXRQcmVmaXhQYXR0ZXJuLmV4ZWMobmFtZSk7XG5pZihtYXRjaCl7XG5jb25zdCBzdWZmaXg9bWF0Y2hbMV07XG5pZihzdWZmaXguc3RhcnRzV2l0aCgnQEAnKSl7XG5yZXR1cm4gU3ltYm9sLmZvcihzdWZmaXgpO1xuIH1lbHNle1xuY29uc3Qgc3ltPVN5bWJvbFtzdWZmaXhdO1xuaWYodHlwZW9mIHN5bT09PSdzeW1ib2wnKXtcbnJldHVybiBzeW07XG4gfVxuRmFpbCBgUmVzZXJ2ZWQgZm9yIHdlbGwga25vd24gc3ltYm9sICR7cShzdWZmaXgpfTogJHtxKG5hbWUpfWA7XG4gfVxuIH1cbnJldHVybiBTeW1ib2wuZm9yKG5hbWUpO1xuIH07JGjigI1fb25jZS5wYXNzYWJsZVN5bWJvbEZvck5hbWUocGFzc2FibGVTeW1ib2xGb3JOYW1lKTtcbmhhcmRlbihwYXNzYWJsZVN5bWJvbEZvck5hbWUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQYXNzYWJsZVN5bWJvbCI6WyJpc1Bhc3NhYmxlU3ltYm9sIl0sImFzc2VydFBhc3NhYmxlU3ltYm9sIjpbImFzc2VydFBhc3NhYmxlU3ltYm9sIl0sIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCI6WyJuYW1lRm9yUGFzc2FibGVTeW1ib2wiXSwicGFzc2FibGVTeW1ib2xGb3JOYW1lIjpbInBhc3NhYmxlU3ltYm9sRm9yTmFtZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA6ytL1JgcAACYHAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3RhZ2dlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiVGFnZ2VkSGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLGFzc2VydENoZWNrZXIsY2hlY2tUYWdSZWNvcmQsUEFTU19TVFlMRSxnZXRPd25EYXRhRGVzY3JpcHRvcixjaGVja1Bhc3NTdHlsZTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRo4oCNX2EpXV0sW1wiY2hlY2tUYWdSZWNvcmRcIiwgWyRo4oCNX2EgPT4gKGNoZWNrVGFnUmVjb3JkID0gJGjigI1fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaOKAjV9hID0+IChQQVNTX1NUWUxFID0gJGjigI1fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjigI1fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaOKAjV9hKV1dLFtcImNoZWNrUGFzc1N0eWxlXCIsIFskaOKAjV9hID0+IChjaGVja1Bhc3NTdHlsZSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRhZ2dlZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOid0YWdnZWQnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+XG5jaGVja1Bhc3NTdHlsZShjYW5kaWRhdGUsY2FuZGlkYXRlW1BBU1NfU1RZTEVdLCd0YWdnZWQnLGNoZWNrKSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tUYWdSZWNvcmQoY2FuZGlkYXRlLCd0YWdnZWQnLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuY29uc3QgcGFzc1N0eWxlS2V5PS8qICAgICAgICAgICAgICAgICAgKi9QQVNTX1NUWUxFO1xuY29uc3QgdGFnS2V5PS8qICAgICAgICAgICAgICAgICAgKi9TeW1ib2wudG9TdHJpbmdUYWc7XG5jb25zdHtcbi8vXG5bLyogICAgICAgICAgICAgICAgICovcGFzc1N0eWxlS2V5XTpfcGFzc1N0eWxlRGVzYyxcblsvKiAgICAgICAgICAgICAgICAgKi90YWdLZXldOl9sYWJlbERlc2MsXG5wYXlsb2FkOl9wYXlsb2FkRGVzYywvL1xuLi4ucmVzdERlc2NzfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbm93bktleXMocmVzdERlc2NzKS5sZW5ndGg9PT0wfHxcbkZhaWwgYFVuZXhwZWN0ZWQgcHJvcGVydGllcyBvbiB0YWdnZWQgcmVjb3JkICR7b3duS2V5cyhyZXN0RGVzY3MpfWA7XG5cbi8vXG4vL1xucGFzc1N0eWxlT2ZSZWN1cihcbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSwncGF5bG9hZCcsdHJ1ZSxhc3NlcnRDaGVja2VyKS52YWx1ZSk7XG5cbiB9fSk7JGjigI1fb25jZS5UYWdnZWRIZWxwZXIoVGFnZ2VkSGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlRhZ2dlZEhlbHBlciI6WyJUYWdnZWRIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAsfTy+A8JAAAPCQAAKQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy90eXBlR3VhcmRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlT2YuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRDb3B5QXJyYXkiLCJhc3NlcnRSZWNvcmQiLCJhc3NlcnRSZW1vdGFibGUiLCJpc0NvcHlBcnJheSIsImlzUmVjb3JkIiwiaXNSZW1vdGFibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxwYXNzU3R5bGVPZjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiLi9wYXNzU3R5bGVPZi5qc1wiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzQ29weUFycmF5PShhcnIpPT5wYXNzU3R5bGVPZihhcnIpPT09J2NvcHlBcnJheSc7JGjigI1fb25jZS5pc0NvcHlBcnJheShpc0NvcHlBcnJheSk7XG5oYXJkZW4oaXNDb3B5QXJyYXkpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgaXNSZWNvcmQ9KHJlY29yZCk9PnBhc3NTdHlsZU9mKHJlY29yZCk9PT0nY29weVJlY29yZCc7JGjigI1fb25jZS5pc1JlY29yZChpc1JlY29yZCk7XG5oYXJkZW4oaXNSZWNvcmQpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVtb3RhYmxlPShyZW1vdGFibGUpPT5wYXNzU3R5bGVPZihyZW1vdGFibGUpPT09J3JlbW90YWJsZSc7JGjigI1fb25jZS5pc1JlbW90YWJsZShpc1JlbW90YWJsZSk7XG5oYXJkZW4oaXNSZW1vdGFibGUpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRDb3B5QXJyYXk9KGFycmF5LG9wdE5hbWVPZkFycmF5PSdBbGxlZ2VkIGFycmF5Jyk9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihhcnJheSk7XG5wYXNzU3R5bGU9PT0nY29weUFycmF5J3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mQXJyYXkpfSAke2FycmF5fSBtdXN0IGJlIGEgcGFzcy1ieS1jb3B5IGFycmF5LCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjigI1fb25jZS5hc3NlcnRDb3B5QXJyYXkoYXNzZXJ0Q29weUFycmF5KTtcbmhhcmRlbihhc3NlcnRDb3B5QXJyYXkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRSZWNvcmQ9KHJlY29yZCxvcHROYW1lT2ZSZWNvcmQ9J0FsbGVnZWQgcmVjb3JkJyk9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihyZWNvcmQpO1xucGFzc1N0eWxlPT09J2NvcHlSZWNvcmQnfHxcbkZhaWwgYCR7cShvcHROYW1lT2ZSZWNvcmQpfSAke3JlY29yZH0gbXVzdCBiZSBhIHBhc3MtYnktY29weSByZWNvcmQsIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaOKAjV9vbmNlLmFzc2VydFJlY29yZChhc3NlcnRSZWNvcmQpO1xuaGFyZGVuKGFzc2VydFJlY29yZCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlbW90YWJsZT0oXG5yZW1vdGFibGUsXG5vcHROYW1lT2ZSZW1vdGFibGU9J0FsbGVnZWQgcmVtb3RhYmxlJyk9Plxue1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlbW90YWJsZSk7XG5wYXNzU3R5bGU9PT0ncmVtb3RhYmxlJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVtb3RhYmxlKX0gJHtyZW1vdGFibGV9IG11c3QgYmUgYSByZW1vdGFibGUsIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaOKAjV9vbmNlLmFzc2VydFJlbW90YWJsZShhc3NlcnRSZW1vdGFibGUpO1xuaGFyZGVuKGFzc2VydFJlbW90YWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc0NvcHlBcnJheSI6WyJpc0NvcHlBcnJheSJdLCJpc1JlY29yZCI6WyJpc1JlY29yZCJdLCJpc1JlbW90YWJsZSI6WyJpc1JlbW90YWJsZSJdLCJhc3NlcnRDb3B5QXJyYXkiOlsiYXNzZXJ0Q29weUFycmF5Il0sImFzc2VydFJlY29yZCI6WyJhc3NlcnRSZWNvcmQiXSwiYXNzZXJ0UmVtb3RhYmxlIjpbImFzc2VydFJlbW90YWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACHklKnTwEAAE8BAAAkAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABVUaQy8DgAAvA4AAB4AAABAZW5kby9wYXR0ZXJucy12MS40LjMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMva2V5cy9jaGVja0tleS5qcyIsIi4vc3JjL2tleXMvY29weVNldC5qcyIsIi4vc3JjL2tleXMvY29weUJhZy5qcyIsIi4vc3JjL2tleXMvY29tcGFyZUtleXMuanMiLCIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiLCIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanMiLCIuL3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiLCIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIiwiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRLZXkiLCJhc3NlcnRLZXkiLCJiYWdVbmlvbiIsImJhZ1VuaW9uIiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIiwiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIiwic2V0Q29tcGFyZSIsInNldENvbXBhcmUiLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9zcmMva2V5cy9jaGVja0tleS5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9jb3B5U2V0LmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL2NvcHlCYWcuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvY29tcGFyZUtleXMuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanNcIiwgW11dLFtcIi4vc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXSxbXCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzXCIsIFtdXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2tleXMvY2hlY2tLZXkuanMiOltbImlzS2V5IiwiaXNLZXkiXSxbImFzc2VydEtleSIsImFzc2VydEtleSJdLFsiYXNzZXJ0U2NhbGFyS2V5IiwiYXNzZXJ0U2NhbGFyS2V5Il0sWyJpc0NvcHlTZXQiLCJpc0NvcHlTZXQiXSxbImFzc2VydENvcHlTZXQiLCJhc3NlcnRDb3B5U2V0Il0sWyJtYWtlQ29weVNldCIsIm1ha2VDb3B5U2V0Il0sWyJnZXRDb3B5U2V0S2V5cyIsImdldENvcHlTZXRLZXlzIl0sWyJpc0NvcHlCYWciLCJpc0NvcHlCYWciXSxbImFzc2VydENvcHlCYWciLCJhc3NlcnRDb3B5QmFnIl0sWyJtYWtlQ29weUJhZyIsIm1ha2VDb3B5QmFnIl0sWyJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyIsIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIl0sWyJnZXRDb3B5QmFnRW50cmllcyIsImdldENvcHlCYWdFbnRyaWVzIl0sWyJpc0NvcHlNYXAiLCJpc0NvcHlNYXAiXSxbImFzc2VydENvcHlNYXAiLCJhc3NlcnRDb3B5TWFwIl0sWyJtYWtlQ29weU1hcCIsIm1ha2VDb3B5TWFwIl0sWyJnZXRDb3B5TWFwRW50cmllcyIsImdldENvcHlNYXBFbnRyaWVzIl1dLCIuL3NyYy9rZXlzL2NvcHlTZXQuanMiOltbImNvZXJjZVRvRWxlbWVudHMiLCJjb2VyY2VUb0VsZW1lbnRzIl1dLCIuL3NyYy9rZXlzL2NvcHlCYWcuanMiOltbImNvZXJjZVRvQmFnRW50cmllcyIsImNvZXJjZVRvQmFnRW50cmllcyJdXSwiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qcyI6W1siYmFnQ29tcGFyZSIsImJhZ0NvbXBhcmUiXSxbInNldENvbXBhcmUiLCJzZXRDb21wYXJlIl0sWyJjb21wYXJlS2V5cyIsImNvbXBhcmVLZXlzIl0sWyJrZXlMVCIsImtleUxUIl0sWyJrZXlMVEUiLCJrZXlMVEUiXSxbImtleUVRIiwia2V5RVEiXSxbImtleUdURSIsImtleUdURSJdLFsia2V5R1QiLCJrZXlHVCJdXSwiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzIjpbWyJlbGVtZW50c0lzU3VwZXJzZXQiLCJlbGVtZW50c0lzU3VwZXJzZXQiXSxbImVsZW1lbnRzSXNEaXNqb2ludCIsImVsZW1lbnRzSXNEaXNqb2ludCJdLFsiZWxlbWVudHNDb21wYXJlIiwiZWxlbWVudHNDb21wYXJlIl0sWyJlbGVtZW50c1VuaW9uIiwiZWxlbWVudHNVbmlvbiJdLFsiZWxlbWVudHNEaXNqb2ludFVuaW9uIiwiZWxlbWVudHNEaXNqb2ludFVuaW9uIl0sWyJlbGVtZW50c0ludGVyc2VjdGlvbiIsImVsZW1lbnRzSW50ZXJzZWN0aW9uIl0sWyJlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QiLCJlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QiXSxbInNldElzU3VwZXJzZXQiLCJzZXRJc1N1cGVyc2V0Il0sWyJzZXRJc0Rpc2pvaW50Iiwic2V0SXNEaXNqb2ludCJdLFsic2V0VW5pb24iLCJzZXRVbmlvbiJdLFsic2V0RGlzam9pbnRVbmlvbiIsInNldERpc2pvaW50VW5pb24iXSxbInNldEludGVyc2VjdGlvbiIsInNldEludGVyc2VjdGlvbiJdLFsic2V0RGlzam9pbnRTdWJ0cmFjdCIsInNldERpc2pvaW50U3VidHJhY3QiXV0sIi4vc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qcyI6W1siYmFnSXNTdXBlcmJhZyIsImJhZ0lzU3VwZXJiYWciXSxbImJhZ1VuaW9uIiwiYmFnVW5pb24iXSxbImJhZ0ludGVyc2VjdGlvbiIsImJhZ0ludGVyc2VjdGlvbiJdLFsiYmFnRGlzam9pbnRTdWJ0cmFjdCIsImJhZ0Rpc2pvaW50U3VidHJhY3QiXV0sIi4vc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qcyI6W1siTSIsIk0iXSxbImdldFJhbmtDb3ZlciIsImdldFJhbmtDb3ZlciJdLFsiaXNQYXR0ZXJuIiwiaXNQYXR0ZXJuIl0sWyJhc3NlcnRQYXR0ZXJuIiwiYXNzZXJ0UGF0dGVybiJdLFsibWF0Y2hlcyIsIm1hdGNoZXMiXSxbIm11c3RNYXRjaCIsIm11c3RNYXRjaCJdLFsiaXNBd2FpdEFyZ0d1YXJkIiwiaXNBd2FpdEFyZ0d1YXJkIl0sWyJhc3NlcnRBd2FpdEFyZ0d1YXJkIiwiYXNzZXJ0QXdhaXRBcmdHdWFyZCJdLFsiaXNSYXdHdWFyZCIsImlzUmF3R3VhcmQiXSxbImFzc2VydFJhd0d1YXJkIiwiYXNzZXJ0UmF3R3VhcmQiXSxbImFzc2VydE1ldGhvZEd1YXJkIiwiYXNzZXJ0TWV0aG9kR3VhcmQiXSxbImFzc2VydEludGVyZmFjZUd1YXJkIiwiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiXSxbImtpbmRPZiIsImtpbmRPZiJdXSwiLi9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qcyI6W1siZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiLCJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCJdLFsiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIl0sWyJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQiLCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQiXSxbImdldEludGVyZmFjZU1ldGhvZEtleXMiLCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIl1dLCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjpbWyJsaXN0RGlmZmVyZW5jZSIsImxpc3REaWZmZXJlbmNlIl1dLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6W1sib2JqZWN0TWFwIiwib2JqZWN0TWFwIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD4v8XfgjIAAIIyAAAqAAAAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL2NoZWNrS2V5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vY29weVNldC5qcyIsIi4vY29weUJhZy5qcyJdLCJleHBvcnRzIjpbImFzc2VydENvcHlCYWciLCJhc3NlcnRDb3B5TWFwIiwiYXNzZXJ0Q29weVNldCIsImFzc2VydEtleSIsImFzc2VydFByaW1pdGl2ZUtleSIsImFzc2VydFNjYWxhcktleSIsImNoZWNrQ29weUJhZyIsImNoZWNrQ29weU1hcCIsImNoZWNrQ29weVNldCIsImNoZWNrS2V5IiwiY2hlY2tTY2FsYXJLZXkiLCJjb3B5TWFwS2V5U2V0IiwiZXZlcnlDb3B5QmFnRW50cnkiLCJldmVyeUNvcHlNYXBLZXkiLCJldmVyeUNvcHlNYXBWYWx1ZSIsImV2ZXJ5Q29weVNldEtleSIsImdldENvcHlCYWdFbnRyaWVzIiwiZ2V0Q29weU1hcEVudHJpZXMiLCJnZXRDb3B5TWFwRW50cnlBcnJheSIsImdldENvcHlNYXBLZXlzIiwiZ2V0Q29weU1hcFZhbHVlcyIsImdldENvcHlTZXRLZXlzIiwiaXNDb3B5QmFnIiwiaXNDb3B5TWFwIiwiaXNDb3B5U2V0IiwiaXNLZXkiLCJpc1ByaW1pdGl2ZUtleSIsImlzU2NhbGFyS2V5IiwibWFrZUNvcHlCYWciLCJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyIsIm1ha2VDb3B5TWFwIiwibWFrZUNvcHlTZXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsYXNzZXJ0UGFzc2FibGUsRmFyLGdldFRhZyxpc09iamVjdCxtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLGlkZW50Q2hlY2tlcixYLHEsRmFpbCxjaGVja0VsZW1lbnRzLG1ha2VTZXRPZkVsZW1lbnRzLGNoZWNrQmFnRW50cmllcyxtYWtlQmFnT2ZFbnRyaWVzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaOKAjV9hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRo4oCNX2EpXV0sW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dLFtcImdldFRhZ1wiLCBbJGjigI1fYSA9PiAoZ2V0VGFnID0gJGjigI1fYSldXSxbXCJpc09iamVjdFwiLCBbJGjigI1fYSA9PiAoaXNPYmplY3QgPSAkaOKAjV9hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRo4oCNX2EgPT4gKG1ha2VUYWdnZWQgPSAkaOKAjV9hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaOKAjV9hID0+IChwYXNzU3R5bGVPZiA9ICRo4oCNX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaOKAjV9hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaOKAjV9hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaOKAjV9hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRo4oCNX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjigI1fYSA9PiAoc29ydEJ5UmFuayA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qc1wiLCBbW1wiaWRlbnRDaGVja2VyXCIsIFskaOKAjV9hID0+IChpZGVudENoZWNrZXIgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaOKAjV9hID0+IChYID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIi4vY29weVNldC5qc1wiLCBbW1wiY2hlY2tFbGVtZW50c1wiLCBbJGjigI1fYSA9PiAoY2hlY2tFbGVtZW50cyA9ICRo4oCNX2EpXV0sW1wibWFrZVNldE9mRWxlbWVudHNcIiwgWyRo4oCNX2EgPT4gKG1ha2VTZXRPZkVsZW1lbnRzID0gJGjigI1fYSldXV1dLFtcIi4vY29weUJhZy5qc1wiLCBbW1wiY2hlY2tCYWdFbnRyaWVzXCIsIFskaOKAjV9hID0+IChjaGVja0JhZ0VudHJpZXMgPSAkaOKAjV9hKV1dLFtcIm1ha2VCYWdPZkVudHJpZXNcIiwgWyRo4oCNX2EgPT4gKG1ha2VCYWdPZkVudHJpZXMgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuXG5cbiAqL1xuXG4vL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1ByaW1pdGl2ZUtleT0odmFsLGNoZWNrKT0+e1xuaWYoaXNPYmplY3QodmFsKSl7XG5yZXR1cm4oXG5jaGVjayE9PWlkZW50Q2hlY2tlciYmXG5jaGVjayhmYWxzZSxYIGBBICR7cSh0eXBlb2YgdmFsKX0gY2Fubm90IGJlIGEgcHJpbWl0aXZlOiAke3ZhbH1gKSk7XG5cbiB9XG4vL1xuLy9cbmFzc2VydFBhc3NhYmxlKHZhbCk7XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUHJpbWl0aXZlS2V5PSh2YWwpPT5jaGVja1ByaW1pdGl2ZUtleSh2YWwsaWRlbnRDaGVja2VyKTskaOKAjV9vbmNlLmlzUHJpbWl0aXZlS2V5KGlzUHJpbWl0aXZlS2V5KTtcbmhhcmRlbihpc1ByaW1pdGl2ZUtleSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0UHJpbWl0aXZlS2V5PSh2YWwpPT57XG5jaGVja1ByaW1pdGl2ZUtleSh2YWwsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaOKAjV9vbmNlLmFzc2VydFByaW1pdGl2ZUtleShhc3NlcnRQcmltaXRpdmVLZXkpO1xuaGFyZGVuKGFzc2VydFByaW1pdGl2ZUtleSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1NjYWxhcktleT0odmFsLGNoZWNrKT0+e1xuaWYoaXNQcmltaXRpdmVLZXkodmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsKTtcbmlmKHBhc3NTdHlsZT09PSdyZW1vdGFibGUnKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBjaGVjayhmYWxzZSxYIGBBICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgYSBzY2FsYXIga2V5OiAke3ZhbH1gKTtcbiB9O1xuXG4vKlxuXG5cbiAqLyRo4oCNX29uY2UuY2hlY2tTY2FsYXJLZXkoY2hlY2tTY2FsYXJLZXkpO1xuY29uc3QgICAgICAgIGlzU2NhbGFyS2V5PSh2YWwpPT5jaGVja1NjYWxhcktleSh2YWwsaWRlbnRDaGVja2VyKTskaOKAjV9vbmNlLmlzU2NhbGFyS2V5KGlzU2NhbGFyS2V5KTtcbmhhcmRlbihpc1NjYWxhcktleSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0U2NhbGFyS2V5PSh2YWwpPT57XG5jaGVja1NjYWxhcktleSh2YWwsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaOKAjV9vbmNlLmFzc2VydFNjYWxhcktleShhc3NlcnRTY2FsYXJLZXkpO1xuaGFyZGVuKGFzc2VydFNjYWxhcktleSk7XG5cbi8vXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBrZXlNZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja0tleT0odmFsLGNoZWNrKT0+e1xuaWYoIWlzT2JqZWN0KHZhbCkpe1xuLy9cbi8vXG5hc3NlcnRQYXNzYWJsZSh2YWwpO1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmlmKGtleU1lbW8uaGFzKHZhbCkpe1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmNvbnN0IHJlc3VsdD1jaGVja0tleUludGVybmFsKHZhbCxjaGVjayk7XG5pZihyZXN1bHQpe1xuLy9cbi8vXG4vL1xua2V5TWVtby5hZGQodmFsKTtcbiB9XG4vL1xuLy9cbnJldHVybiByZXN1bHQ7XG4gfTskaOKAjV9vbmNlLmNoZWNrS2V5KGNoZWNrS2V5KTtcbmhhcmRlbihjaGVja0tleSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzS2V5PSh2YWwpPT5jaGVja0tleSh2YWwsaWRlbnRDaGVja2VyKTskaOKAjV9vbmNlLmlzS2V5KGlzS2V5KTtcbmhhcmRlbihpc0tleSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0S2V5PSh2YWwpPT57XG5jaGVja0tleSh2YWwsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaOKAjV9vbmNlLmFzc2VydEtleShhc3NlcnRLZXkpO1xuaGFyZGVuKGFzc2VydEtleSk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5U2V0TWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5U2V0PShzLGNoZWNrKT0+e1xuaWYoY29weVNldE1lbW8uaGFzKHMpKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IHJlc3VsdD1cbihwYXNzU3R5bGVPZihzKT09PSd0YWdnZWQnJiZnZXRUYWcocyk9PT0nY29weVNldCd8fFxuY2hlY2soZmFsc2UsWCBgTm90IGEgY29weVNldDogJHtzfWApKSYmXG5jaGVja0VsZW1lbnRzKHMucGF5bG9hZCxjaGVjaykmJlxuY2hlY2tLZXkocy5wYXlsb2FkLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb3B5U2V0TWVtby5hZGQocyk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9OyRo4oCNX29uY2UuY2hlY2tDb3B5U2V0KGNoZWNrQ29weVNldCk7XG5oYXJkZW4oY2hlY2tDb3B5U2V0KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NvcHlTZXQ9KHMpPT5jaGVja0NvcHlTZXQocyxpZGVudENoZWNrZXIpOyRo4oCNX29uY2UuaXNDb3B5U2V0KGlzQ29weVNldCk7XG5oYXJkZW4oaXNDb3B5U2V0KTtcblxuLypcblxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgYXNzZXJ0Q29weVNldD0ocyk9PntcbmNoZWNrQ29weVNldChzLGFzc2VydENoZWNrZXIpO1xuIH07JGjigI1fb25jZS5hc3NlcnRDb3B5U2V0KGFzc2VydENvcHlTZXQpO1xuaGFyZGVuKGFzc2VydENvcHlTZXQpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weVNldEtleXM9KHMpPT57XG5hc3NlcnRDb3B5U2V0KHMpO1xucmV0dXJuIHMucGF5bG9hZDtcbiB9OyRo4oCNX29uY2UuZ2V0Q29weVNldEtleXMoZ2V0Q29weVNldEtleXMpO1xuaGFyZGVuKGdldENvcHlTZXRLZXlzKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5U2V0S2V5PShzLGZuKT0+XG5nZXRDb3B5U2V0S2V5cyhzKS5ldmVyeSgoa2V5LGluZGV4KT0+Zm4oa2V5LGluZGV4KSk7JGjigI1fb25jZS5ldmVyeUNvcHlTZXRLZXkoZXZlcnlDb3B5U2V0S2V5KTtcbmhhcmRlbihldmVyeUNvcHlTZXRLZXkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvcHlTZXQ9KGVsZW1lbnRJdGVyKT0+e1xuY29uc3QgcmVzdWx0PW1ha2VTZXRPZkVsZW1lbnRzKGVsZW1lbnRJdGVyKTtcbmFzc2VydENvcHlTZXQocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfTskaOKAjV9vbmNlLm1ha2VDb3B5U2V0KG1ha2VDb3B5U2V0KTtcbmhhcmRlbihtYWtlQ29weVNldCk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5QmFnTWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5QmFnPShiLGNoZWNrKT0+e1xuaWYoY29weUJhZ01lbW8uaGFzKGIpKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IHJlc3VsdD1cbihwYXNzU3R5bGVPZihiKT09PSd0YWdnZWQnJiZnZXRUYWcoYik9PT0nY29weUJhZyd8fFxuY2hlY2soZmFsc2UsWCBgTm90IGEgY29weUJhZzogJHtifWApKSYmXG5jaGVja0JhZ0VudHJpZXMoYi5wYXlsb2FkLGNoZWNrKSYmXG5jaGVja0tleShiLnBheWxvYWQsY2hlY2spO1xuaWYocmVzdWx0KXtcbmNvcHlCYWdNZW1vLmFkZChiKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjigI1fb25jZS5jaGVja0NvcHlCYWcoY2hlY2tDb3B5QmFnKTtcbmhhcmRlbihjaGVja0NvcHlCYWcpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weUJhZz0oYik9PmNoZWNrQ29weUJhZyhiLGlkZW50Q2hlY2tlcik7JGjigI1fb25jZS5pc0NvcHlCYWcoaXNDb3B5QmFnKTtcbmhhcmRlbihpc0NvcHlCYWcpO1xuXG4vKlxuXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDb3B5QmFnPShiKT0+e1xuY2hlY2tDb3B5QmFnKGIsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaOKAjV9vbmNlLmFzc2VydENvcHlCYWcoYXNzZXJ0Q29weUJhZyk7XG5oYXJkZW4oYXNzZXJ0Q29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5QmFnRW50cmllcz0oYik9PntcbmFzc2VydENvcHlCYWcoYik7XG5yZXR1cm4gYi5wYXlsb2FkO1xuIH07JGjigI1fb25jZS5nZXRDb3B5QmFnRW50cmllcyhnZXRDb3B5QmFnRW50cmllcyk7XG5oYXJkZW4oZ2V0Q29weUJhZ0VudHJpZXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVyeUNvcHlCYWdFbnRyeT0oYixmbik9PlxuZ2V0Q29weUJhZ0VudHJpZXMoYikuZXZlcnkoKGVudHJ5LGluZGV4KT0+Zm4oZW50cnksaW5kZXgpKTskaOKAjV9vbmNlLmV2ZXJ5Q29weUJhZ0VudHJ5KGV2ZXJ5Q29weUJhZ0VudHJ5KTtcbmhhcmRlbihldmVyeUNvcHlCYWdFbnRyeSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29weUJhZz0oYmFnRW50cnlJdGVyKT0+e1xuY29uc3QgcmVzdWx0PW1ha2VCYWdPZkVudHJpZXMoYmFnRW50cnlJdGVyKTtcbmFzc2VydENvcHlCYWcocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfTskaOKAjV9vbmNlLm1ha2VDb3B5QmFnKG1ha2VDb3B5QmFnKTtcbmhhcmRlbihtYWtlQ29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29weUJhZ0Zyb21FbGVtZW50cz0oZWxlbWVudEl0ZXIpPT57XG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5jb25zdCBzb3J0ZWQ9c29ydEJ5UmFuayhlbGVtZW50SXRlcixmdWxsQ29tcGFyZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVudHJpZXM9W107XG5mb3IobGV0IGk9MDtpPHNvcnRlZC5sZW5ndGg7KXtcbmNvbnN0IGs9c29ydGVkW2ldO1xubGV0IGo9aSsxO1xud2hpbGUoajxzb3J0ZWQubGVuZ3RoJiZmdWxsQ29tcGFyZShrLHNvcnRlZFtqXSk9PT0wKXtcbmorPTE7XG4gfVxuZW50cmllcy5wdXNoKFtrLEJpZ0ludChqLWkpXSk7XG5pPWo7XG4gfVxucmV0dXJuIG1ha2VDb3B5QmFnKGVudHJpZXMpO1xuIH07JGjigI1fb25jZS5tYWtlQ29weUJhZ0Zyb21FbGVtZW50cyhtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyk7XG5oYXJkZW4obWFrZUNvcHlCYWdGcm9tRWxlbWVudHMpO1xuXG4vL1xuXG4vL1xuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29weU1hcE1lbW89bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrQ29weU1hcD0obSxjaGVjayk9PntcbmlmKGNvcHlNYXBNZW1vLmhhcyhtKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZighKHBhc3NTdHlsZU9mKG0pPT09J3RhZ2dlZCcmJmdldFRhZyhtKT09PSdjb3B5TWFwJykpe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYE5vdCBhIGNvcHlNYXA6ICR7bX1gKTtcbiB9XG5jb25zdHtwYXlsb2FkfT1tO1xuaWYocGFzc1N0eWxlT2YocGF5bG9hZCkhPT0nY29weVJlY29yZCcpe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgY29weU1hcCdzIHBheWxvYWQgbXVzdCBiZSBhIHJlY29yZDogJHttfWApO1xuIH1cbmNvbnN0e2tleXMsdmFsdWVzLC4uLnJlc3R9PXBheWxvYWQ7XG5jb25zdCByZXN1bHQ9XG4ob3duS2V5cyhyZXN0KS5sZW5ndGg9PT0wfHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBBIGNvcHlNYXAncyBwYXlsb2FkIG11c3Qgb25seSBoYXZlIC5rZXlzIGFuZCAudmFsdWVzOiAke219YCkpJiZcblxuY2hlY2tFbGVtZW50cyhrZXlzLGNoZWNrKSYmXG5jaGVja0tleShrZXlzLGNoZWNrKSYmKFxucGFzc1N0eWxlT2YodmFsdWVzKT09PSdjb3B5QXJyYXknfHxcbmNoZWNrKGZhbHNlLFggYEEgY29weU1hcCdzIC52YWx1ZXMgbXVzdCBiZSBhIGNvcHlBcnJheTogJHttfWApKSYmKFxua2V5cy5sZW5ndGg9PT12YWx1ZXMubGVuZ3RofHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBBIGNvcHlNYXAgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBrZXlzIGFuZCB2YWx1ZXM6ICR7bX1gKSk7XG5cbmlmKHJlc3VsdCl7XG5jb3B5TWFwTWVtby5hZGQobSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9OyRo4oCNX29uY2UuY2hlY2tDb3B5TWFwKGNoZWNrQ29weU1hcCk7XG5oYXJkZW4oY2hlY2tDb3B5TWFwKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NvcHlNYXA9KG0pPT5jaGVja0NvcHlNYXAobSxpZGVudENoZWNrZXIpOyRo4oCNX29uY2UuaXNDb3B5TWFwKGlzQ29weU1hcCk7XG5oYXJkZW4oaXNDb3B5TWFwKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDb3B5TWFwPShtKT0+e1xuY2hlY2tDb3B5TWFwKG0sYXNzZXJ0Q2hlY2tlcik7XG4gfTskaOKAjV9vbmNlLmFzc2VydENvcHlNYXAoYXNzZXJ0Q29weU1hcCk7XG5oYXJkZW4oYXNzZXJ0Q29weU1hcCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBLZXlzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbnJldHVybiBtLnBheWxvYWQua2V5cztcbiB9OyRo4oCNX29uY2UuZ2V0Q29weU1hcEtleXMoZ2V0Q29weU1hcEtleXMpO1xuaGFyZGVuKGdldENvcHlNYXBLZXlzKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weU1hcFZhbHVlcz0obSk9PntcbmFzc2VydENvcHlNYXAobSk7XG5yZXR1cm4gbS5wYXlsb2FkLnZhbHVlcztcbiB9OyRo4oCNX29uY2UuZ2V0Q29weU1hcFZhbHVlcyhnZXRDb3B5TWFwVmFsdWVzKTtcbmhhcmRlbihnZXRDb3B5TWFwVmFsdWVzKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBFbnRyeUFycmF5PShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbmNvbnN0e1xucGF5bG9hZDp7a2V5cyx2YWx1ZXN9fT1cbm07XG5yZXR1cm4gaGFyZGVuKGtleXMubWFwKChrZXksaSk9PltrZXksdmFsdWVzW2ldXSkpO1xuIH07JGjigI1fb25jZS5nZXRDb3B5TWFwRW50cnlBcnJheShnZXRDb3B5TWFwRW50cnlBcnJheSk7XG5oYXJkZW4oZ2V0Q29weU1hcEVudHJ5QXJyYXkpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5TWFwRW50cmllcz0obSk9PntcbmFzc2VydENvcHlNYXAobSk7XG5jb25zdHtcbnBheWxvYWQ6e2tleXMsdmFsdWVzfX09XG5tO1xuY29uc3R7bGVuZ3RofT0vKiAgICAgICAgICAgICAgICAqL2tleXM7XG5yZXR1cm4gRmFyKCdDb3B5TWFwIGVudHJpZXMgaXRlcmFibGUnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5sZXQgaT0wO1xucmV0dXJuIEZhcignQ29weU1hcCBlbnRyaWVzIGl0ZXJhdG9yJyx7XG5uZXh0OigpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHJlc3VsdDtcbmlmKGk8bGVuZ3RoKXtcbnJlc3VsdD1oYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6W2tleXNbaV0sdmFsdWVzW2ldXX0pO1xuaSs9MTtcbnJldHVybiByZXN1bHQ7XG4gfWVsc2V7XG5yZXN1bHQ9aGFyZGVuKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9OyRo4oCNX29uY2UuZ2V0Q29weU1hcEVudHJpZXMoZ2V0Q29weU1hcEVudHJpZXMpO1xuaGFyZGVuKGdldENvcHlNYXBFbnRyaWVzKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVyeUNvcHlNYXBLZXk9KG0sZm4pPT5cbmdldENvcHlNYXBLZXlzKG0pLmV2ZXJ5KChrZXksaW5kZXgpPT5mbihrZXksaW5kZXgpKTskaOKAjV9vbmNlLmV2ZXJ5Q29weU1hcEtleShldmVyeUNvcHlNYXBLZXkpO1xuaGFyZGVuKGV2ZXJ5Q29weU1hcEtleSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5TWFwVmFsdWU9KG0sZm4pPT5cbmdldENvcHlNYXBWYWx1ZXMobSkuZXZlcnkoKHZhbHVlLGluZGV4KT0+Zm4odmFsdWUsaW5kZXgpKTskaOKAjV9vbmNlLmV2ZXJ5Q29weU1hcFZhbHVlKGV2ZXJ5Q29weU1hcFZhbHVlKTtcbmhhcmRlbihldmVyeUNvcHlNYXBWYWx1ZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvcHlNYXBLZXlTZXQ9KG0pPT5cbi8vXG5tYWtlVGFnZ2VkKCdjb3B5U2V0JyxtLnBheWxvYWQua2V5cyk7JGjigI1fb25jZS5jb3B5TWFwS2V5U2V0KGNvcHlNYXBLZXlTZXQpO1xuaGFyZGVuKGNvcHlNYXBLZXlTZXQpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29weU1hcD0oZW50cmllcyk9Pntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3Qgc29ydGVkRW50cmllcz1zb3J0QnlSYW5rKGVudHJpZXMsY29tcGFyZUFudGlSYW5rKTtcbmNvbnN0IGtleXM9c29ydGVkRW50cmllcy5tYXAoKFtrLF92XSk9PmspO1xuY29uc3QgdmFsdWVzPXNvcnRlZEVudHJpZXMubWFwKChbX2ssdl0pPT52KTtcbmNvbnN0IHJlc3VsdD1tYWtlVGFnZ2VkKCdjb3B5TWFwJyx7a2V5cyx2YWx1ZXN9KTtcbmFzc2VydENvcHlNYXAocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfTskaOKAjV9vbmNlLm1ha2VDb3B5TWFwKG1ha2VDb3B5TWFwKTtcbmhhcmRlbihtYWtlQ29weU1hcCk7XG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrS2V5SW50ZXJuYWw9KHZhbCxjaGVjayk9PntcbmNvbnN0IGNoZWNrSXQ9KGNoaWxkKT0+Y2hlY2tLZXkoY2hpbGQsY2hlY2spO1xuXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xucmV0dXJuIE9iamVjdC52YWx1ZXModmFsKS5ldmVyeShjaGVja0l0KTtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbnJldHVybiB2YWwuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRhZz1nZXRUYWcodmFsKTtcbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG5yZXR1cm4gY2hlY2tDb3B5U2V0KHZhbCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG5yZXR1cm4gY2hlY2tDb3B5QmFnKHZhbCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5yZXR1cm4oXG5jaGVja0NvcHlNYXAodmFsLGNoZWNrKSYmXG4vL1xuLy9cbi8vXG5ldmVyeUNvcHlNYXBWYWx1ZSh2YWwsY2hlY2tJdCkpO1xuXG4gfVxuZGVmYXVsdDp7XG5yZXR1cm4oXG5jaGVjayE9PWlkZW50Q2hlY2tlciYmXG5jaGVjayhmYWxzZSxYIGBBIHBhc3NhYmxlIHRhZ2dlZCAke3EodGFnKX0gaXMgbm90IGEga2V5OiAke3ZhbH1gKSk7XG5cbiB9fVxuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgJHtxKHBhc3NTdHlsZSl9IGNhbm5vdCBiZSBhIGtleWApO1xuIH1cbmRlZmF1bHQ6e1xuLy9cbi8vXG50aHJvdyBGYWlsIGB1bmV4cGVjdGVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX06ICR7dmFsfWA7XG4gfX1cblxuIH07XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1ByaW1pdGl2ZUtleSI6WyJpc1ByaW1pdGl2ZUtleSJdLCJhc3NlcnRQcmltaXRpdmVLZXkiOlsiYXNzZXJ0UHJpbWl0aXZlS2V5Il0sImNoZWNrU2NhbGFyS2V5IjpbImNoZWNrU2NhbGFyS2V5Il0sImlzU2NhbGFyS2V5IjpbImlzU2NhbGFyS2V5Il0sImFzc2VydFNjYWxhcktleSI6WyJhc3NlcnRTY2FsYXJLZXkiXSwiY2hlY2tLZXkiOlsiY2hlY2tLZXkiXSwiaXNLZXkiOlsiaXNLZXkiXSwiYXNzZXJ0S2V5IjpbImFzc2VydEtleSJdLCJjaGVja0NvcHlTZXQiOlsiY2hlY2tDb3B5U2V0Il0sImlzQ29weVNldCI6WyJpc0NvcHlTZXQiXSwiYXNzZXJ0Q29weVNldCI6WyJhc3NlcnRDb3B5U2V0Il0sImdldENvcHlTZXRLZXlzIjpbImdldENvcHlTZXRLZXlzIl0sImV2ZXJ5Q29weVNldEtleSI6WyJldmVyeUNvcHlTZXRLZXkiXSwibWFrZUNvcHlTZXQiOlsibWFrZUNvcHlTZXQiXSwiY2hlY2tDb3B5QmFnIjpbImNoZWNrQ29weUJhZyJdLCJpc0NvcHlCYWciOlsiaXNDb3B5QmFnIl0sImFzc2VydENvcHlCYWciOlsiYXNzZXJ0Q29weUJhZyJdLCJnZXRDb3B5QmFnRW50cmllcyI6WyJnZXRDb3B5QmFnRW50cmllcyJdLCJldmVyeUNvcHlCYWdFbnRyeSI6WyJldmVyeUNvcHlCYWdFbnRyeSJdLCJtYWtlQ29weUJhZyI6WyJtYWtlQ29weUJhZyJdLCJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyI6WyJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyJdLCJjaGVja0NvcHlNYXAiOlsiY2hlY2tDb3B5TWFwIl0sImlzQ29weU1hcCI6WyJpc0NvcHlNYXAiXSwiYXNzZXJ0Q29weU1hcCI6WyJhc3NlcnRDb3B5TWFwIl0sImdldENvcHlNYXBLZXlzIjpbImdldENvcHlNYXBLZXlzIl0sImdldENvcHlNYXBWYWx1ZXMiOlsiZ2V0Q29weU1hcFZhbHVlcyJdLCJnZXRDb3B5TWFwRW50cnlBcnJheSI6WyJnZXRDb3B5TWFwRW50cnlBcnJheSJdLCJnZXRDb3B5TWFwRW50cmllcyI6WyJnZXRDb3B5TWFwRW50cmllcyJdLCJldmVyeUNvcHlNYXBLZXkiOlsiZXZlcnlDb3B5TWFwS2V5Il0sImV2ZXJ5Q29weU1hcFZhbHVlIjpbImV2ZXJ5Q29weU1hcFZhbHVlIl0sImNvcHlNYXBLZXlTZXQiOlsiY29weU1hcEtleVNldCJdLCJtYWtlQ29weU1hcCI6WyJtYWtlQ29weU1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADS/rx1OhUAADoVAAAtAAAAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiLCIuL2NoZWNrS2V5LmpzIiwiLi9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyJdLCJleHBvcnRzIjpbImJhZ0NvbXBhcmUiLCJjb21wYXJlS2V5cyIsImtleUVRIiwia2V5R1QiLCJrZXlHVEUiLCJrZXlMVCIsImtleUxURSIsInNldENvbXBhcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhc3NTdHlsZU9mLGdldFRhZyxjb21wYXJlUmFuayxyZWNvcmROYW1lcyxyZWNvcmRWYWx1ZXMsdHJpdmlhbENvbXBhcmF0b3IscSxGYWlsLGFzc2VydEtleSxnZXRDb3B5QmFnRW50cmllcyxnZXRDb3B5TWFwRW50cnlBcnJheSxnZXRDb3B5U2V0S2V5cyxtYWtlQ29tcGFyZUNvbGxlY3Rpb247JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJnZXRUYWdcIiwgWyRo4oCNX2EgPT4gKGdldFRhZyA9ICRo4oCNX2EpXV0sW1wiY29tcGFyZVJhbmtcIiwgWyRo4oCNX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjigI1fYSldXSxbXCJyZWNvcmROYW1lc1wiLCBbJGjigI1fYSA9PiAocmVjb3JkTmFtZXMgPSAkaOKAjV9hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjigI1fYSA9PiAocmVjb3JkVmFsdWVzID0gJGjigI1fYSldXSxbXCJ0cml2aWFsQ29tcGFyYXRvclwiLCBbJGjigI1fYSA9PiAodHJpdmlhbENvbXBhcmF0b3IgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIi4vY2hlY2tLZXkuanNcIiwgW1tcImFzc2VydEtleVwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0S2V5ID0gJGjigI1fYSldXSxbXCJnZXRDb3B5QmFnRW50cmllc1wiLCBbJGjigI1fYSA9PiAoZ2V0Q29weUJhZ0VudHJpZXMgPSAkaOKAjV9hKV1dLFtcImdldENvcHlNYXBFbnRyeUFycmF5XCIsIFskaOKAjV9hID0+IChnZXRDb3B5TWFwRW50cnlBcnJheSA9ICRo4oCNX2EpXV0sW1wiZ2V0Q29weVNldEtleXNcIiwgWyRo4oCNX2EgPT4gKGdldENvcHlTZXRLZXlzID0gJGjigI1fYSldXV1dLFtcIi4va2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanNcIiwgW1tcIm1ha2VDb21wYXJlQ29sbGVjdGlvblwiLCBbJGjigI1fYSA9PiAobWFrZUNvbXBhcmVDb2xsZWN0aW9uID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzZXRDb21wYXJlPW1ha2VDb21wYXJlQ29sbGVjdGlvbihcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4ocyk9PmhhcmRlbihnZXRDb3B5U2V0S2V5cyhzKS5tYXAoKGtleSk9PltrZXksMV0pKSxcblxuMCxcbnRyaXZpYWxDb21wYXJhdG9yKTskaOKAjV9vbmNlLnNldENvbXBhcmUoc2V0Q29tcGFyZSk7XG5cbmhhcmRlbihzZXRDb21wYXJlKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGJhZ0NvbXBhcmU9bWFrZUNvbXBhcmVDb2xsZWN0aW9uKFxuZ2V0Q29weUJhZ0VudHJpZXMsXG4wbixcbnRyaXZpYWxDb21wYXJhdG9yKTskaOKAjV9vbmNlLmJhZ0NvbXBhcmUoYmFnQ29tcGFyZSk7XG5cbmhhcmRlbihiYWdDb21wYXJlKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8qXG5cblxuICovXG5jb25zdCBBQlNFTlQ9U3ltYm9sKCdhYnNlbnQnKTtcbi8qXG5cblxuXG5cblxuXG4gKi9cbi8vXG5jb25zdCBfbWFwQ29tcGFyZT1tYWtlQ29tcGFyZUNvbGxlY3Rpb24oXG5nZXRDb3B5TWFwRW50cnlBcnJheSxcbkFCU0VOVCxcbihsZWZ0VmFsdWUscmlnaHRWYWx1ZSk9PntcbmlmKGxlZnRWYWx1ZT09PUFCU0VOVCYmcmlnaHRWYWx1ZT09PUFCU0VOVCl7XG50aHJvdyBGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBhYnNlbnQgZW50cnkgcGFpcmA7XG4gfWVsc2UgaWYobGVmdFZhbHVlPT09QUJTRU5UKXtcbnJldHVybi0xO1xuIH1lbHNlIGlmKHJpZ2h0VmFsdWU9PT1BQlNFTlQpe1xucmV0dXJuIDE7XG4gfWVsc2V7XG4vL1xucmV0dXJuIGNvbXBhcmVLZXlzKGxlZnRWYWx1ZSxyaWdodFZhbHVlKTtcbiB9XG4gfSk7XG5cbmhhcmRlbihfbWFwQ29tcGFyZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb21wYXJlS2V5cz0obGVmdCxyaWdodCk9PntcbmFzc2VydEtleShsZWZ0KTtcbmFzc2VydEtleShyaWdodCk7XG5jb25zdCBsZWZ0U3R5bGU9cGFzc1N0eWxlT2YobGVmdCk7XG5jb25zdCByaWdodFN0eWxlPXBhc3NTdHlsZU9mKHJpZ2h0KTtcbmlmKGxlZnRTdHlsZSE9PXJpZ2h0U3R5bGUpe1xuLy9cbnJldHVybiBOYU47XG4gfVxuc3dpdGNoKGxlZnRTdHlsZSl7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ251bGwnOlxuY2FzZSdib29sZWFuJzpcbmNhc2UnYmlnaW50JzpcbmNhc2Unc3RyaW5nJzpcbmNhc2Unc3ltYm9sJzp7XG4vL1xucmV0dXJuIGNvbXBhcmVSYW5rKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UnbnVtYmVyJzp7XG5jb25zdCByYW5rQ29tcD1jb21wYXJlUmFuayhsZWZ0LHJpZ2h0KTtcbmlmKHJhbmtDb21wPT09MCl7XG5yZXR1cm4gMDtcbiB9XG5pZihOdW1iZXIuaXNOYU4obGVmdCl8fE51bWJlci5pc05hTihyaWdodCkpe1xuLy9cbmFzc2VydCghTnVtYmVyLmlzTmFOKGxlZnQpfHwhTnVtYmVyLmlzTmFOKHJpZ2h0KSk7XG5yZXR1cm4gTmFOO1xuIH1cbi8vXG4vL1xucmV0dXJuIHJhbmtDb21wO1xuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5pZihsZWZ0PT09cmlnaHQpe1xucmV0dXJuIDA7XG4gfVxuLy9cbi8vXG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGxlbj1NYXRoLm1pbihsZWZ0Lmxlbmd0aCxyaWdodC5sZW5ndGgpO1xuZm9yKGxldCBpPTA7aTxsZW47aSs9MSl7XG4vL1xuY29uc3QgcmVzdWx0PWNvbXBhcmVLZXlzKGxlZnRbaV0scmlnaHRbaV0pO1xuaWYocmVzdWx0IT09MCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG4vL1xuLy9cbi8vXG5yZXR1cm4gY29tcGFyZVJhbmsobGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuY29uc3QgbGVmdE5hbWVzPXJlY29yZE5hbWVzKGxlZnQpO1xuLy9cbmNvbnN0IHJpZ2h0TmFtZXM9cmVjb3JkTmFtZXMocmlnaHQpO1xuXG4vL1xuaWYoIWtleUVRKGxlZnROYW1lcyxyaWdodE5hbWVzKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBOYU47XG4gfVxuLy9cbmNvbnN0IGxlZnRWYWx1ZXM9cmVjb3JkVmFsdWVzKGxlZnQsbGVmdE5hbWVzKTtcbi8vXG5jb25zdCByaWdodFZhbHVlcz1yZWNvcmRWYWx1ZXMocmlnaHQscmlnaHROYW1lcyk7XG4vL1xuLy9cbmxldCByZXN1bHQ9MDtcbmZvcihsZXQgaT0wO2k8bGVmdFZhbHVlcy5sZW5ndGg7aSs9MSl7XG5jb25zdCBjb21wPWNvbXBhcmVLZXlzKGxlZnRWYWx1ZXNbaV0scmlnaHRWYWx1ZXNbaV0pO1xuaWYoTnVtYmVyLmlzTmFOKGNvbXApKXtcbnJldHVybiBOYU47XG4gfVxuaWYocmVzdWx0IT09Y29tcCYmY29tcCE9PTApe1xuaWYocmVzdWx0PT09MCl7XG5yZXN1bHQ9Y29tcDtcbiB9ZWxzZXtcbmFzc2VydChcbnJlc3VsdD09PS0xJiZjb21wPT09MXx8cmVzdWx0PT09MSYmY29tcD09PS0xKTtcblxucmV0dXJuIE5hTjtcbiB9XG4gfVxuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNhc2UndGFnZ2VkJzp7XG4vL1xuY29uc3QgbGVmdFRhZz1nZXRUYWcobGVmdCk7XG4vL1xuY29uc3QgcmlnaHRUYWc9Z2V0VGFnKHJpZ2h0KTtcbmlmKGxlZnRUYWchPT1yaWdodFRhZyl7XG4vL1xucmV0dXJuIE5hTjtcbiB9XG5zd2l0Y2gobGVmdFRhZyl7XG5jYXNlJ2NvcHlTZXQnOntcbi8vXG5yZXR1cm4gc2V0Q29tcGFyZShsZWZ0LHJpZ2h0KTtcbiB9XG5jYXNlJ2NvcHlCYWcnOntcbi8vXG5yZXR1cm4gYmFnQ29tcGFyZShsZWZ0LHJpZ2h0KTtcbiB9XG5jYXNlJ2NvcHlNYXAnOntcbi8vXG4vL1xudGhyb3cgRmFpbCBgTWFwIGNvbXBhcmlzb24gbm90IHlldCBpbXBsZW1lbnRlZDogJHtsZWZ0fSB2cyAke3JpZ2h0fWA7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGB1bmV4cGVjdGVkIHRhZyAke3EobGVmdFRhZyl9OiAke2xlZnR9YDtcbiB9fVxuXG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGB1bmV4cGVjdGVkIHBhc3NTdHlsZSAke3EobGVmdFN0eWxlKX06ICR7bGVmdH1gO1xuIH19XG5cbiB9OyRo4oCNX29uY2UuY29tcGFyZUtleXMoY29tcGFyZUtleXMpO1xuaGFyZGVuKGNvbXBhcmVLZXlzKTtcblxuY29uc3QgICAgICAgIGtleUxUPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk8MDskaOKAjV9vbmNlLmtleUxUKGtleUxUKTtcbmhhcmRlbihrZXlMVCk7XG5cbmNvbnN0ICAgICAgICBrZXlMVEU9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KTw9MDskaOKAjV9vbmNlLmtleUxURShrZXlMVEUpO1xuaGFyZGVuKGtleUxURSk7XG5cbmNvbnN0ICAgICAgICBrZXlFUT0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPT09MDskaOKAjV9vbmNlLmtleUVRKGtleUVRKTtcbmhhcmRlbihrZXlFUSk7XG5cbmNvbnN0ICAgICAgICBrZXlHVEU9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KT49MDskaOKAjV9vbmNlLmtleUdURShrZXlHVEUpO1xuaGFyZGVuKGtleUdURSk7XG5cbmNvbnN0ICAgICAgICBrZXlHVD0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPjA7JGjigI1fb25jZS5rZXlHVChrZXlHVCk7XG5oYXJkZW4oa2V5R1QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2V0Q29tcGFyZSI6WyJzZXRDb21wYXJlIl0sImJhZ0NvbXBhcmUiOlsiYmFnQ29tcGFyZSJdLCJjb21wYXJlS2V5cyI6WyJjb21wYXJlS2V5cyJdLCJrZXlMVCI6WyJrZXlMVCJdLCJrZXlMVEUiOlsia2V5TFRFIl0sImtleUVRIjpbImtleUVRIl0sImtleUdURSI6WyJrZXlHVEUiXSwia2V5R1QiOlsia2V5R1QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAfWdXJOENAADhDQAAKQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMva2V5cy9jb3B5QmFnLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRCYWdFbnRyaWVzIiwiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzIiwiY2hlY2tCYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIiwibWFrZUJhZ09mRW50cmllcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGNvbXBhcmVBbnRpUmFuayxpc1JhbmtTb3J0ZWQsbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxYOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaOKAjV9hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRo4oCNX2EgPT4gKG1ha2VUYWdnZWQgPSAkaOKAjV9hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaOKAjV9hID0+IChwYXNzU3R5bGVPZiA9ICRo4oCNX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaOKAjV9hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaOKAjV9hKV1dLFtcImlzUmFua1NvcnRlZFwiLCBbJGjigI1fYSA9PiAoaXNSYW5rU29ydGVkID0gJGjigI1fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjigI1fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaOKAjV9hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRo4oCNX2EgPT4gKHNvcnRCeVJhbmsgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaOKAjV9hID0+IChYID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tOb0R1cGxpY2F0ZUtleXM9KGJhZ0VudHJpZXMsZnVsbENvbXBhcmUsY2hlY2spPT57XG4vL1xuLy9cbi8vXG4vL1xuZnVsbENvbXBhcmU9ZnVsbENvbXBhcmV8fG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbi8vXG4vL1xuLy9cbmJhZ0VudHJpZXM9c29ydEJ5UmFuayhiYWdFbnRyaWVzLGZ1bGxDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09YmFnRW50cmllcztcbmZvcihsZXQgaT0xO2k8bGVuZ3RoO2krPTEpe1xuY29uc3QgazA9YmFnRW50cmllc1tpLTFdWzBdO1xuY29uc3QgazE9YmFnRW50cmllc1tpXVswXTtcbmlmKGZ1bGxDb21wYXJlKGswLGsxKT09PTApe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYHZhbHVlIGhhcyBkdXBsaWNhdGUga2V5czogJHtrMH1gKTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzPShiYWdFbnRyaWVzLGZ1bGxDb21wYXJlPXVuZGVmaW5lZCk9PntcbmNoZWNrTm9EdXBsaWNhdGVLZXlzKGJhZ0VudHJpZXMsZnVsbENvbXBhcmUsYXNzZXJ0Q2hlY2tlcik7XG4gfTtcblxuLypcblxuXG5cbiAqLyRo4oCNX29uY2UuYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKGFzc2VydE5vRHVwbGljYXRlS2V5cyk7XG5jb25zdCAgICAgICAgY2hlY2tCYWdFbnRyaWVzPShiYWdFbnRyaWVzLGNoZWNrKT0+e1xuaWYocGFzc1N0eWxlT2YoYmFnRW50cmllcykhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBlbnRyaWVzIG9mIGEgY29weUJhZyBtdXN0IGJlIGEgY29weUFycmF5OiAke2JhZ0VudHJpZXN9YCk7XG5cbiB9XG5pZighaXNSYW5rU29ydGVkKGJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rKSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBlbnRyaWVzIG9mIGEgY29weUJhZyBtdXN0IGJlIHNvcnRlZCBpbiByZXZlcnNlIHJhbmsgb3JkZXI6ICR7YmFnRW50cmllc31gKTtcblxuIH1cbmZvcihjb25zdCBlbnRyeSBvZiBiYWdFbnRyaWVzKXtcbmlmKFxucGFzc1N0eWxlT2YoZW50cnkpIT09J2NvcHlBcnJheSd8fFxuZW50cnkubGVuZ3RoIT09Mnx8XG50eXBlb2YgZW50cnlbMV0hPT0nYmlnaW50JylcbntcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgRWFjaCBlbnRyeSBvZiBhIGNvcHlCYWcgbXVzdCBiZSBwYWlyIG9mIGEga2V5IGFuZCBhIGJpZ2ludCByZXByZXNlbnRpbmcgYSBjb3VudDogJHtlbnRyeX1gKTtcblxuIH1cbmlmKGVudHJ5WzFdPDEpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBFYWNoIGVudHJ5IG9mIGEgY29weUJhZyBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBjb3VudDogJHtlbnRyeX1gKTtcblxuIH1cbiB9XG4vL1xucmV0dXJuIGNoZWNrTm9EdXBsaWNhdGVLZXlzKGJhZ0VudHJpZXMsdW5kZWZpbmVkLGNoZWNrKTtcbiB9OyRo4oCNX29uY2UuY2hlY2tCYWdFbnRyaWVzKGNoZWNrQmFnRW50cmllcyk7XG5oYXJkZW4oY2hlY2tCYWdFbnRyaWVzKTtcblxuLy9cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0QmFnRW50cmllcz0oYmFnRW50cmllcyk9PntcbmNoZWNrQmFnRW50cmllcyhiYWdFbnRyaWVzLGFzc2VydENoZWNrZXIpO1xuIH07JGjigI1fb25jZS5hc3NlcnRCYWdFbnRyaWVzKGFzc2VydEJhZ0VudHJpZXMpO1xuaGFyZGVuKGFzc2VydEJhZ0VudHJpZXMpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvZXJjZVRvQmFnRW50cmllcz0oYmFnRW50cmllc0xpc3QpPT57XG5jb25zdCBiYWdFbnRyaWVzPXNvcnRCeVJhbmsoYmFnRW50cmllc0xpc3QsY29tcGFyZUFudGlSYW5rKTtcbmFzc2VydEJhZ0VudHJpZXMoYmFnRW50cmllcyk7XG5yZXR1cm4gYmFnRW50cmllcztcbiB9OyRo4oCNX29uY2UuY29lcmNlVG9CYWdFbnRyaWVzKGNvZXJjZVRvQmFnRW50cmllcyk7XG5oYXJkZW4oY29lcmNlVG9CYWdFbnRyaWVzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VCYWdPZkVudHJpZXM9KGJhZ0VudHJ5SXRlcik9PlxubWFrZVRhZ2dlZCgnY29weUJhZycsY29lcmNlVG9CYWdFbnRyaWVzKGJhZ0VudHJ5SXRlcikpOyRo4oCNX29uY2UubWFrZUJhZ09mRW50cmllcyhtYWtlQmFnT2ZFbnRyaWVzKTtcbmhhcmRlbihtYWtlQmFnT2ZFbnRyaWVzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzc2VydE5vRHVwbGljYXRlS2V5cyI6WyJhc3NlcnROb0R1cGxpY2F0ZUtleXMiXSwiY2hlY2tCYWdFbnRyaWVzIjpbImNoZWNrQmFnRW50cmllcyJdLCJhc3NlcnRCYWdFbnRyaWVzIjpbImFzc2VydEJhZ0VudHJpZXMiXSwiY29lcmNlVG9CYWdFbnRyaWVzIjpbImNvZXJjZVRvQmFnRW50cmllcyJdLCJtYWtlQmFnT2ZFbnRyaWVzIjpbIm1ha2VCYWdPZkVudHJpZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkwx4AegLAADoCwAAKQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMva2V5cy9jb3B5U2V0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRFbGVtZW50cyIsImFzc2VydE5vRHVwbGljYXRlcyIsImNoZWNrRWxlbWVudHMiLCJjb2VyY2VUb0VsZW1lbnRzIiwibWFrZVNldE9mRWxlbWVudHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixjb21wYXJlQW50aVJhbmssaXNSYW5rU29ydGVkLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmssWDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaOKAjV9hID0+IChhc3NlcnRDaGVja2VyID0gJGjigI1fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaOKAjV9hID0+IChtYWtlVGFnZ2VkID0gJGjigI1fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjigI1fYSA9PiAocGFzc1N0eWxlT2YgPSAkaOKAjV9hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjigI1fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjigI1fYSldXSxbXCJpc1JhbmtTb3J0ZWRcIiwgWyRo4oCNX2EgPT4gKGlzUmFua1NvcnRlZCA9ICRo4oCNX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjigI1fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaOKAjV9hID0+IChzb3J0QnlSYW5rID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrTm9EdXBsaWNhdGVzPShlbGVtZW50cyxmdWxsQ29tcGFyZSxjaGVjayk9Pntcbi8vXG4vL1xuLy9cbi8vXG5mdWxsQ29tcGFyZT1mdWxsQ29tcGFyZXx8bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcblxuZWxlbWVudHM9c29ydEJ5UmFuayhlbGVtZW50cyxmdWxsQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWVsZW1lbnRzO1xuZm9yKGxldCBpPTE7aTxsZW5ndGg7aSs9MSl7XG5jb25zdCBrMD1lbGVtZW50c1tpLTFdO1xuY29uc3QgazE9ZWxlbWVudHNbaV07XG5pZihmdWxsQ29tcGFyZShrMCxrMSk9PT0wKXtcbnJldHVybiBjaGVjayhmYWxzZSxYIGB2YWx1ZSBoYXMgZHVwbGljYXRlIGtleXM6ICR7azB9YCk7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydE5vRHVwbGljYXRlcz0oZWxlbWVudHMsZnVsbENvbXBhcmU9dW5kZWZpbmVkKT0+e1xuY2hlY2tOb0R1cGxpY2F0ZXMoZWxlbWVudHMsZnVsbENvbXBhcmUsYXNzZXJ0Q2hlY2tlcik7XG4gfTtcblxuLypcblxuXG5cbiAqLyRo4oCNX29uY2UuYXNzZXJ0Tm9EdXBsaWNhdGVzKGFzc2VydE5vRHVwbGljYXRlcyk7XG5jb25zdCAgICAgICAgY2hlY2tFbGVtZW50cz0oZWxlbWVudHMsY2hlY2spPT57XG5pZihwYXNzU3R5bGVPZihlbGVtZW50cykhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBrZXlzIG9mIGEgY29weVNldCBvciBjb3B5TWFwIG11c3QgYmUgYSBjb3B5QXJyYXk6ICR7ZWxlbWVudHN9YCk7XG5cbiB9XG5pZighaXNSYW5rU29ydGVkKGVsZW1lbnRzLGNvbXBhcmVBbnRpUmFuaykpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBUaGUga2V5cyBvZiBhIGNvcHlTZXQgb3IgY29weU1hcCBtdXN0IGJlIHNvcnRlZCBpbiByZXZlcnNlIHJhbmsgb3JkZXI6ICR7ZWxlbWVudHN9YCk7XG5cbiB9XG5yZXR1cm4gY2hlY2tOb0R1cGxpY2F0ZXMoZWxlbWVudHMsdW5kZWZpbmVkLGNoZWNrKTtcbiB9OyRo4oCNX29uY2UuY2hlY2tFbGVtZW50cyhjaGVja0VsZW1lbnRzKTtcbmhhcmRlbihjaGVja0VsZW1lbnRzKTtcblxuY29uc3QgICAgICAgIGFzc2VydEVsZW1lbnRzPShlbGVtZW50cyk9PntcbmNoZWNrRWxlbWVudHMoZWxlbWVudHMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaOKAjV9vbmNlLmFzc2VydEVsZW1lbnRzKGFzc2VydEVsZW1lbnRzKTtcbmhhcmRlbihhc3NlcnRFbGVtZW50cyk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgY29lcmNlVG9FbGVtZW50cz0oZWxlbWVudHNMaXN0KT0+e1xuY29uc3QgZWxlbWVudHM9c29ydEJ5UmFuayhlbGVtZW50c0xpc3QsY29tcGFyZUFudGlSYW5rKTtcbmFzc2VydEVsZW1lbnRzKGVsZW1lbnRzKTtcbnJldHVybiBlbGVtZW50cztcbiB9OyRo4oCNX29uY2UuY29lcmNlVG9FbGVtZW50cyhjb2VyY2VUb0VsZW1lbnRzKTtcbmhhcmRlbihjb2VyY2VUb0VsZW1lbnRzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTZXRPZkVsZW1lbnRzPShlbGVtZW50SXRlcik9PlxubWFrZVRhZ2dlZCgnY29weVNldCcsY29lcmNlVG9FbGVtZW50cyhlbGVtZW50SXRlcikpOyRo4oCNX29uY2UubWFrZVNldE9mRWxlbWVudHMobWFrZVNldE9mRWxlbWVudHMpO1xuaGFyZGVuKG1ha2VTZXRPZkVsZW1lbnRzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzc2VydE5vRHVwbGljYXRlcyI6WyJhc3NlcnROb0R1cGxpY2F0ZXMiXSwiY2hlY2tFbGVtZW50cyI6WyJjaGVja0VsZW1lbnRzIl0sImFzc2VydEVsZW1lbnRzIjpbImFzc2VydEVsZW1lbnRzIl0sImNvZXJjZVRvRWxlbWVudHMiOlsiY29lcmNlVG9FbGVtZW50cyJdLCJtYWtlU2V0T2ZFbGVtZW50cyI6WyJtYWtlU2V0T2ZFbGVtZW50cyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABsEyht9xIAAPcSAAA5AAAAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyIsIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMiLCJtYWtlQ29tcGFyZUNvbGxlY3Rpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydFJhbmtTb3J0ZWQsY29tcGFyZUFudGlSYW5rLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmssbWFrZUl0ZXJhdG9yLG1ha2VBcnJheUl0ZXJhdG9yLHEsRmFpbDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaOKAjV9hID0+IChhc3NlcnRSYW5rU29ydGVkID0gJGjigI1fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRo4oCNX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRo4oCNX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjigI1fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaOKAjV9hID0+IChzb3J0QnlSYW5rID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzXCIsIFtbXCJtYWtlSXRlcmF0b3JcIiwgWyRo4oCNX2EgPT4gKG1ha2VJdGVyYXRvciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qc1wiLCBbW1wibWFrZUFycmF5SXRlcmF0b3JcIiwgWyRo4oCNX2EgPT4gKG1ha2VBcnJheUl0ZXJhdG9yID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBnZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzPShlbnRyaWVzLHJhbmtDb21wYXJlLGZ1bGxDb21wYXJlKT0+e1xuLy9cbmFzc2VydFJhbmtTb3J0ZWQoZW50cmllcyxyYW5rQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWVudHJpZXM7XG5sZXQgaT0wO1xubGV0IHNhbWVSYW5rSXRlcmF0b3I7XG5yZXR1cm4gbWFrZUl0ZXJhdG9yKCgpPT57XG5pZihzYW1lUmFua0l0ZXJhdG9yKXtcbmNvbnN0IHJlc3VsdD1zYW1lUmFua0l0ZXJhdG9yLm5leHQoKTtcbmlmKCFyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbnNhbWVSYW5rSXRlcmF0b3I9dW5kZWZpbmVkO1xuIH1cbmlmKGk8bGVuZ3RoKXtcbmNvbnN0IGVudHJ5PWVudHJpZXNbaV07XG4vL1xubGV0IGo9aSsxO1xud2hpbGUoajxsZW5ndGgmJnJhbmtDb21wYXJlKGVudHJ5WzBdLGVudHJpZXNbal1bMF0pPT09MCl7XG5qKz0xO1xuIH1cbmlmKGo9PT1pKzEpe1xuLy9cbmk9ajtcbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6ZW50cnl9KTtcbiB9XG5jb25zdCB0aWVzPWVudHJpZXMuc2xpY2UoaSxqKTtcbmk9ajtcblxuLy9cbi8vXG4vL1xuY29uc3Qgc29ydGVkVGllcz1zb3J0QnlSYW5rKHRpZXMsZnVsbENvbXBhcmUpO1xuZm9yKGxldCBrPTE7azxzb3J0ZWRUaWVzLmxlbmd0aDtrKz0xKXtcbi8vXG5jb25zdFtrZXkwXT1zb3J0ZWRUaWVzW2stMV07XG5jb25zdFtrZXkxXT1zb3J0ZWRUaWVzW2tdO1xuTWF0aC5zaWduKGZ1bGxDb21wYXJlKGtleTAsa2V5MSkpfHxcbkZhaWwgYER1cGxpY2F0ZSBlbnRyeSBrZXk6ICR7a2V5MH1gO1xuIH1cbnNhbWVSYW5rSXRlcmF0b3I9bWFrZUFycmF5SXRlcmF0b3Ioc29ydGVkVGllcyk7XG5yZXR1cm4gc2FtZVJhbmtJdGVyYXRvci5uZXh0KCk7XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuIH0pO1xuIH07XG5oYXJkZW4oZ2VuZXJhdGVGdWxsU29ydGVkRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcz0oXG5jMSxcbmMyLFxuZ2V0RW50cmllcyxcbmFic2VudFZhbHVlKT0+XG57XG5jb25zdCBlMT1nZXRFbnRyaWVzKGMxKTtcbmNvbnN0IGUyPWdldEVudHJpZXMoYzIpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBmdWxsQ29tcGFyZT1tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuY29uc3QgeD1nZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzKGUxLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5jb25zdCB5PWdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXMoZTIsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcblxuLy9cbi8vXG5sZXQgeERvbmU7XG5sZXQgeEtleTtcbmxldCB4VmFsdWU7XG5sZXQgeURvbmU7XG5sZXQgeUtleTtcbmxldCB5VmFsdWU7XG5jb25zdCBub25FbnRyeT1bdW5kZWZpbmVkLHVuZGVmaW5lZF07XG5jb25zdCBuZXh0WD0oKT0+e1xuIXhEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFggbXVzdCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG5jb25zdCByZXN1bHQ9eFZhbHVlO1xuKHtkb25lOnhEb25lLHZhbHVlOlt4S2V5LHhWYWx1ZV09bm9uRW50cnl9PXgubmV4dCgpKTtcbnJldHVybiByZXN1bHQ7XG4gfTtcbm5leHRYKCk7XG5jb25zdCBuZXh0WT0oKT0+e1xuIXlEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFkgbXVzdCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG5jb25zdCByZXN1bHQ9eVZhbHVlO1xuKHtkb25lOnlEb25lLHZhbHVlOlt5S2V5LHlWYWx1ZV09bm9uRW50cnl9PXkubmV4dCgpKTtcbnJldHVybiByZXN1bHQ7XG4gfTtcbm5leHRZKCk7XG5yZXR1cm4gbWFrZUl0ZXJhdG9yKCgpPT57XG5sZXQgZG9uZT1mYWxzZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoeERvbmUmJnlEb25lKXtcbmRvbmU9dHJ1ZTtcbnZhbHVlPVt1bmRlZmluZWQsYWJzZW50VmFsdWUsYWJzZW50VmFsdWVdO1xuIH1lbHNlIGlmKHhEb25lKXtcbnZhbHVlPVt5S2V5LGFic2VudFZhbHVlLG5leHRZKCldO1xuIH1lbHNlIGlmKHlEb25lKXtcbnZhbHVlPVt4S2V5LG5leHRYKCksYWJzZW50VmFsdWVdO1xuIH1lbHNle1xuLy9cbi8vXG5jb25zdCBjb21wPWZ1bGxDb21wYXJlKHhLZXkseUtleSk7XG5pZihjb21wPT09MCl7XG52YWx1ZT1beEtleSxuZXh0WCgpLG5leHRZKCldO1xuIH1lbHNlIGlmKGNvbXA8MCl7XG52YWx1ZT1beEtleSxuZXh0WCgpLGFic2VudFZhbHVlXTtcbiB9ZWxzZSBpZihjb21wPjApe1xudmFsdWU9W3lLZXksYWJzZW50VmFsdWUsbmV4dFkoKV07XG4gfWVsc2V7XG50aHJvdyBGYWlsIGBVbmV4cGVjdGVkIGtleSBjb21wYXJpc29uICR7cShjb21wKX0gZm9yICR7eEtleX0gdnMgJHt5S2V5fWA7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2RvbmUsdmFsdWV9KTtcbiB9KTtcbiB9OyRo4oCNX29uY2UuZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMoZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMpO1xuaGFyZGVuKGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29tcGFyZUNvbGxlY3Rpb249KGdldEVudHJpZXMsYWJzZW50VmFsdWUsY29tcGFyZVZhbHVlcyk9PlxuaGFyZGVuKChsZWZ0LHJpZ2h0KT0+e1xuY29uc3QgbWVyZ2VkPWdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzKFxubGVmdCxcbnJpZ2h0LFxuZ2V0RW50cmllcyxcbmFic2VudFZhbHVlKTtcblxubGV0IGxlZnRJc0JpZ2dlcj1mYWxzZTtcbmxldCByaWdodElzQmlnZ2VyPWZhbHNlO1xuZm9yKGNvbnN0W19rZXksbGVmdFZhbHVlLHJpZ2h0VmFsdWVdb2YgbWVyZ2VkKXtcbmNvbnN0IGNvbXA9Y29tcGFyZVZhbHVlcyhsZWZ0VmFsdWUscmlnaHRWYWx1ZSk7XG5pZihjb21wPT09MCl7XG4vL1xuY29udGludWU7XG4gfWVsc2UgaWYoY29tcDwwKXtcbi8vXG5yaWdodElzQmlnZ2VyPXRydWU7XG4gfWVsc2UgaWYoY29tcD4wKXtcbi8vXG5sZWZ0SXNCaWdnZXI9dHJ1ZTtcbiB9ZWxzZXtcbk51bWJlci5pc05hTihjb21wKXx8XG4vL1xuRmFpbCBgVW5leHBlY3RlZCB2YWx1ZSBjb21wYXJpc29uICR7cShjb21wKX0gZm9yICR7bGVmdFZhbHVlfSB2cyAke3JpZ2h0VmFsdWV9YDtcbnJldHVybiBOYU47XG4gfVxuaWYobGVmdElzQmlnZ2VyJiZyaWdodElzQmlnZ2VyKXtcbnJldHVybiBOYU47XG4gfVxuIH1cbi8vXG5yZXR1cm4gbGVmdElzQmlnZ2VyPzE6cmlnaHRJc0JpZ2dlcj8tMTowO1xuIH0pOyRo4oCNX29uY2UubWFrZUNvbXBhcmVDb2xsZWN0aW9uKG1ha2VDb21wYXJlQ29sbGVjdGlvbik7XG5oYXJkZW4obWFrZUNvbXBhcmVDb2xsZWN0aW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzIjpbImdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzIl0sIm1ha2VDb21wYXJlQ29sbGVjdGlvbiI6WyJtYWtlQ29tcGFyZUNvbGxlY3Rpb24iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAvjyHBGwWAABsFgAANQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiLCIuL2NvcHlCYWcuanMiXSwiZXhwb3J0cyI6WyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSXNEaXNqb2ludCIsImJhZ0lzU3VwZXJiYWciLCJiYWdVbmlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UmFua1NvcnRlZCxjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxxLEZhaWwsYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzLG1ha2VCYWdPZkVudHJpZXM7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0UmFua1NvcnRlZFwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UmFua1NvcnRlZCA9ICRo4oCNX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaOKAjV9hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaOKAjV9hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaOKAjV9hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRo4oCNX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjigI1fYSA9PiAoc29ydEJ5UmFuayA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiLi9jb3B5QmFnLmpzXCIsIFtbXCJhc3NlcnROb0R1cGxpY2F0ZUtleXNcIiwgWyRo4oCNX2EgPT4gKGFzc2VydE5vRHVwbGljYXRlS2V5cyA9ICRo4oCNX2EpXV0sW1wibWFrZUJhZ09mRW50cmllc1wiLCBbJGjigI1fYSA9PiAobWFrZUJhZ09mRW50cmllcyA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGJhZ1dpbmRvd1Jlc29ydD0oYmFnRW50cmllcyxyYW5rQ29tcGFyZSxmdWxsQ29tcGFyZSk9PntcbmFzc2VydFJhbmtTb3J0ZWQoYmFnRW50cmllcyxyYW5rQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWJhZ0VudHJpZXM7XG5sZXQgaT0wO1xubGV0IG9wdElubmVySXRlcmF0b3I7XG5yZXR1cm4gaGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT5cbmhhcmRlbih7XG5uZXh0OigpPT57XG5pZihvcHRJbm5lckl0ZXJhdG9yKXtcbmNvbnN0IHJlc3VsdD1vcHRJbm5lckl0ZXJhdG9yLm5leHQoKTtcbmlmKHJlc3VsdC5kb25lKXtcbm9wdElubmVySXRlcmF0b3I9dW5kZWZpbmVkO1xuLy9cbiB9ZWxzZXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbmlmKGk8bGVuZ3RoKXtcbmNvbnN0IGVudHJ5PWJhZ0VudHJpZXNbaV07XG5sZXQgaj1pKzE7XG53aGlsZShcbmo8bGVuZ3RoJiZcbnJhbmtDb21wYXJlKGVudHJ5WzBdLGJhZ0VudHJpZXNbal1bMF0pPT09MClcbntcbmorPTE7XG4gfVxuaWYoaj09PWkrMSl7XG5pPWo7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlOmVudHJ5fSk7XG4gfVxuY29uc3Qgc2ltaWxhclJ1bj1iYWdFbnRyaWVzLnNsaWNlKGksaik7XG5pPWo7XG5jb25zdCByZXNvcnRlZD1zb3J0QnlSYW5rKHNpbWlsYXJSdW4sZnVsbENvbXBhcmUpO1xuLy9cbi8vXG4vL1xuYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKHJlc29ydGVkLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbi8vXG4vL1xub3B0SW5uZXJJdGVyYXRvcj1yZXNvcnRlZFtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gb3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWU6W251bGwsMG5dfSk7XG4gfVxuIH19KX0pO1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWVyZ2U9KHhiYWdFbnRyaWVzLHliYWdFbnRyaWVzKT0+e1xuLy9cbi8vXG5jb25zdCBmdWxsQ29tcGFyZT1tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG5jb25zdCB4cz1iYWdXaW5kb3dSZXNvcnQoeGJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbmNvbnN0IHlzPWJhZ1dpbmRvd1Jlc29ydCh5YmFnRW50cmllcyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAqL1xubGV0IHg7XG5sZXQgeGM7XG5sZXQgeERvbmU7XG4vKiAgICAgICAgICAgICovXG5sZXQgeTtcbmxldCB5YztcbmxldCB5RG9uZTtcblxuY29uc3QgeGk9eHNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFg9KCk9PntcbiF4RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRYIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe1xuZG9uZTp4RG9uZSxcbnZhbHVlOlt4LHhjXX09XG54aS5uZXh0KCkpO1xuIH07XG5uZXh0WCgpO1xuXG5jb25zdCB5aT15c1tTeW1ib2wuaXRlcmF0b3JdKCk7XG5jb25zdCBuZXh0WT0oKT0+e1xuIXlEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFkgc2hvdWxkIG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbih7XG5kb25lOnlEb25lLFxudmFsdWU6W3kseWNdfT1cbnlpLm5leHQoKSk7XG4gfTtcbm5leHRZKCk7XG5cbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IGRvbmU9ZmFsc2U7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoeERvbmUmJnlEb25lKXtcbmRvbmU9dHJ1ZTtcbi8vXG52YWx1ZT1bbnVsbCwwbiwwbl07XG4gfWVsc2UgaWYoeERvbmUpe1xuLy9cbnZhbHVlPVt5LDBuLHljXTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoeURvbmUpe1xuLy9cbnZhbHVlPVt4LHhjLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG5jb25zdCBjb21wPWZ1bGxDb21wYXJlKHgseSk7XG5pZihjb21wPT09MCl7XG4vL1xudmFsdWU9W3gseGMseWNdO1xubmV4dFgoKTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoY29tcDwwKXtcbi8vXG52YWx1ZT1beCx4Yywwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuLy9cbmNvbXA+MHx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY29tcCAke3EoY29tcCl9YDtcbnZhbHVlPVt5LDBuLHljXTtcbm5leHRZKCk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2RvbmUsdmFsdWV9KTtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9O1xuaGFyZGVuKG1lcmdlKTtcblxuLy9cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVySXNTdXBlcmJhZz0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yzx5Yyl7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vL1xuLy9cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJJc0Rpc2pvaW50PSh4eWkpPT57XG5mb3IoY29uc3RbX20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0xbiYmeWM+PTFuKXtcbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJVbmlvbj0oeHlpKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xucmVzdWx0LnB1c2goW20seGMreWNdKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJJbnRlcnNlY3Rpb249KHh5aSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmNvbnN0IG1jPXhjPD15Yz94Yzp5YztcbnJlc3VsdC5wdXNoKFttLG1jXSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVyRGlzam9pbnRTdWJ0cmFjdD0oeHlpKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xuY29uc3QgbWM9eGMteWM7XG5tYz49MG58fEZhaWwgYHJpZ2h0IGVsZW1lbnQgJHttfSB3YXMgbm90IGluIGxlZnRgO1xuaWYobWM+PTFuKXtcbi8vXG5yZXN1bHQucHVzaChbbSxtY10pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbmNvbnN0IG1lcmdlaWZ5PShiYWdJdGVyT3ApPT4oeGJhZ0VudHJpZXMseWJhZ0VudHJpZXMpPT5cbmJhZ0l0ZXJPcChtZXJnZSh4YmFnRW50cmllcyx5YmFnRW50cmllcykpO1xuXG5jb25zdCBiYWdFbnRyaWVzSXNTdXBlcmJhZz1tZXJnZWlmeShiYWdJdGVySXNTdXBlcmJhZyk7XG5jb25zdCBiYWdFbnRyaWVzSXNEaXNqb2ludD1tZXJnZWlmeShiYWdJdGVySXNEaXNqb2ludCk7XG5jb25zdCBiYWdFbnRyaWVzVW5pb249bWVyZ2VpZnkoYmFnSXRlclVuaW9uKTtcbmNvbnN0IGJhZ0VudHJpZXNJbnRlcnNlY3Rpb249bWVyZ2VpZnkoYmFnSXRlckludGVyc2VjdGlvbik7XG5jb25zdCBiYWdFbnRyaWVzRGlzam9pbnRTdWJ0cmFjdD1tZXJnZWlmeShiYWdJdGVyRGlzam9pbnRTdWJ0cmFjdCk7XG5cbmNvbnN0IHJhd0JhZ2lmeT0oYmFnRW50cmllc09wKT0+KHhiYWcseWJhZyk9PlxuYmFnRW50cmllc09wKHhiYWcucGF5bG9hZCx5YmFnLnBheWxvYWQpO1xuXG5jb25zdCBiYWdpZnk9KGJhZ0VudHJpZXNPcCk9Pih4YmFnLHliYWcpPT5cbm1ha2VCYWdPZkVudHJpZXMoYmFnRW50cmllc09wKHhiYWcucGF5bG9hZCx5YmFnLnBheWxvYWQpKTtcblxuY29uc3QgICAgICAgIGJhZ0lzU3VwZXJiYWc9cmF3QmFnaWZ5KGJhZ0VudHJpZXNJc1N1cGVyYmFnKTskaOKAjV9vbmNlLmJhZ0lzU3VwZXJiYWcoYmFnSXNTdXBlcmJhZyk7XG5jb25zdCAgICAgICAgYmFnSXNEaXNqb2ludD1yYXdCYWdpZnkoYmFnRW50cmllc0lzRGlzam9pbnQpOyRo4oCNX29uY2UuYmFnSXNEaXNqb2ludChiYWdJc0Rpc2pvaW50KTtcbmNvbnN0ICAgICAgICBiYWdVbmlvbj1iYWdpZnkoYmFnRW50cmllc1VuaW9uKTskaOKAjV9vbmNlLmJhZ1VuaW9uKGJhZ1VuaW9uKTtcbmNvbnN0ICAgICAgICBiYWdJbnRlcnNlY3Rpb249YmFnaWZ5KGJhZ0VudHJpZXNJbnRlcnNlY3Rpb24pOyRo4oCNX29uY2UuYmFnSW50ZXJzZWN0aW9uKGJhZ0ludGVyc2VjdGlvbik7XG5jb25zdCAgICAgICAgYmFnRGlzam9pbnRTdWJ0cmFjdD1iYWdpZnkoYmFnRW50cmllc0Rpc2pvaW50U3VidHJhY3QpOyRo4oCNX29uY2UuYmFnRGlzam9pbnRTdWJ0cmFjdChiYWdEaXNqb2ludFN1YnRyYWN0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImJhZ0lzU3VwZXJiYWciOlsiYmFnSXNTdXBlcmJhZyJdLCJiYWdJc0Rpc2pvaW50IjpbImJhZ0lzRGlzam9pbnQiXSwiYmFnVW5pb24iOlsiYmFnVW5pb24iXSwiYmFnSW50ZXJzZWN0aW9uIjpbImJhZ0ludGVyc2VjdGlvbiJdLCJiYWdEaXNqb2ludFN1YnRyYWN0IjpbImJhZ0Rpc2pvaW50U3VidHJhY3QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA0g0Dya0cAACtHAAANQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiLCIuL2NvcHlTZXQuanMiXSwiZXhwb3J0cyI6WyJlbGVtZW50c0NvbXBhcmUiLCJlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QiLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iLCJlbGVtZW50c0ludGVyc2VjdGlvbiIsImVsZW1lbnRzSXNEaXNqb2ludCIsImVsZW1lbnRzSXNTdXBlcnNldCIsImVsZW1lbnRzVW5pb24iLCJzZXREaXNqb2ludFN1YnRyYWN0Iiwic2V0RGlzam9pbnRVbmlvbiIsInNldEludGVyc2VjdGlvbiIsInNldElzRGlzam9pbnQiLCJzZXRJc1N1cGVyc2V0Iiwic2V0VW5pb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydFJhbmtTb3J0ZWQsY29tcGFyZUFudGlSYW5rLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmsscSxGYWlsLGFzc2VydE5vRHVwbGljYXRlcyxtYWtlU2V0T2ZFbGVtZW50czskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaOKAjV9hID0+IChhc3NlcnRSYW5rU29ydGVkID0gJGjigI1fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRo4oCNX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRo4oCNX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjigI1fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaOKAjV9hID0+IChzb3J0QnlSYW5rID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCIuL2NvcHlTZXQuanNcIiwgW1tcImFzc2VydE5vRHVwbGljYXRlc1wiLCBbJGjigI1fYSA9PiAoYXNzZXJ0Tm9EdXBsaWNhdGVzID0gJGjigI1fYSldXSxbXCJtYWtlU2V0T2ZFbGVtZW50c1wiLCBbJGjigI1fYSA9PiAobWFrZVNldE9mRWxlbWVudHMgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHdpbmRvd1Jlc29ydD0oZWxlbWVudHMscmFua0NvbXBhcmUsZnVsbENvbXBhcmUpPT57XG5hc3NlcnRSYW5rU29ydGVkKGVsZW1lbnRzLHJhbmtDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09ZWxlbWVudHM7XG5sZXQgaT0wO1xubGV0IG9wdElubmVySXRlcmF0b3I7XG5yZXR1cm4gaGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT5cbmhhcmRlbih7XG5uZXh0OigpPT57XG5pZihvcHRJbm5lckl0ZXJhdG9yKXtcbmNvbnN0IHJlc3VsdD1vcHRJbm5lckl0ZXJhdG9yLm5leHQoKTtcbmlmKHJlc3VsdC5kb25lKXtcbm9wdElubmVySXRlcmF0b3I9dW5kZWZpbmVkO1xuLy9cbiB9ZWxzZXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbmlmKGk8bGVuZ3RoKXtcbmNvbnN0IHZhbHVlPWVsZW1lbnRzW2ldO1xubGV0IGo9aSsxO1xud2hpbGUoajxsZW5ndGgmJnJhbmtDb21wYXJlKHZhbHVlLGVsZW1lbnRzW2pdKT09PTApe1xuais9MTtcbiB9XG5pZihqPT09aSsxKXtcbmk9ajtcbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWV9KTtcbiB9XG5jb25zdCBzaW1pbGFyUnVuPWVsZW1lbnRzLnNsaWNlKGksaik7XG5pPWo7XG5jb25zdCByZXNvcnRlZD1zb3J0QnlSYW5rKHNpbWlsYXJSdW4sZnVsbENvbXBhcmUpO1xuLy9cbi8vXG4vL1xuYXNzZXJ0Tm9EdXBsaWNhdGVzKHJlc29ydGVkLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbi8vXG4vL1xub3B0SW5uZXJJdGVyYXRvcj1yZXNvcnRlZFtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gb3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWU6bnVsbH0pO1xuIH1cbiB9fSl9KTtcblxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1lcmdlPSh4ZWxlbWVudHMseWVsZW1lbnRzKT0+e1xuLy9cbi8vXG5jb25zdCBmdWxsQ29tcGFyZT1tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG5jb25zdCB4cz13aW5kb3dSZXNvcnQoeGVsZW1lbnRzLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5jb25zdCB5cz13aW5kb3dSZXNvcnQoeWVsZW1lbnRzLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5yZXR1cm4gaGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICovXG5sZXQgeDtcbmxldCB4RG9uZTtcbi8qICAgICAgICAgICAgKi9cbmxldCB5O1xubGV0IHlEb25lO1xuXG5jb25zdCB4aT14c1tTeW1ib2wuaXRlcmF0b3JdKCk7XG5jb25zdCBuZXh0WD0oKT0+e1xuIXhEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFggc2hvdWxkIG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbih7ZG9uZTp4RG9uZSx2YWx1ZTp4fT14aS5uZXh0KCkpO1xuIH07XG5uZXh0WCgpO1xuXG5jb25zdCB5aT15c1tTeW1ib2wuaXRlcmF0b3JdKCk7XG5jb25zdCBuZXh0WT0oKT0+e1xuIXlEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFkgc2hvdWxkIG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbih7ZG9uZTp5RG9uZSx2YWx1ZTp5fT15aS5uZXh0KCkpO1xuIH07XG5uZXh0WSgpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbm5leHQ6KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgKi9cbmxldCBkb25lPWZhbHNlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB2YWx1ZTtcbmlmKHhEb25lJiZ5RG9uZSl7XG5kb25lPXRydWU7XG4vL1xudmFsdWU9W251bGwsMG4sMG5dO1xuIH1lbHNlIGlmKHhEb25lKXtcbi8vXG52YWx1ZT1beSwwbiwxbl07XG5uZXh0WSgpO1xuIH1lbHNlIGlmKHlEb25lKXtcbi8vXG52YWx1ZT1beCwxbiwwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuY29uc3QgY29tcD1mdWxsQ29tcGFyZSh4LHkpO1xuaWYoY29tcD09PTApe1xuLy9cbnZhbHVlPVt4LDFuLDFuXTtcbm5leHRYKCk7XG5uZXh0WSgpO1xuIH1lbHNlIGlmKGNvbXA8MCl7XG4vL1xudmFsdWU9W3gsMW4sMG5dO1xubmV4dFgoKTtcbiB9ZWxzZXtcbi8vXG5jb21wPjB8fEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGNvbXAgJHtxKGNvbXApfWA7XG52YWx1ZT1beSwwbiwxbl07XG5uZXh0WSgpO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lLHZhbHVlfSk7XG4gfX0pO1xuXG4gfX0pO1xuXG4gfTtcbmhhcmRlbihtZXJnZSk7XG5cbmNvbnN0IGl0ZXJJc1N1cGVyc2V0PSh4eWkpPT57XG5mb3IoY29uc3RbX20seGMsX3ljXW9mIHh5aSl7XG5pZih4Yz09PTBuKXtcbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGl0ZXJJc0Rpc2pvaW50PSh4eWkpPT57XG5mb3IoY29uc3RbX20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0xbiYmeWM+PTFuKXtcbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGl0ZXJDb21wYXJlPSh4eWkpPT57XG5sZXQgbG9uZVk9ZmFsc2U7XG5sZXQgbG9uZVg9ZmFsc2U7XG5mb3IoY29uc3RbX20seGMseWNdb2YgeHlpKXtcbmlmKHhjPT09MG4pe1xuLy9cbmxvbmVZPXRydWU7XG4gfVxuaWYoeWM9PT0wbil7XG4vL1xubG9uZVg9dHJ1ZTtcbiB9XG5pZihsb25lWCYmbG9uZVkpe1xucmV0dXJuIE5hTjtcbiB9XG4gfVxuaWYobG9uZVgpe1xucmV0dXJuIDE7XG4gfWVsc2UgaWYobG9uZVkpe1xucmV0dXJuLTE7XG4gfWVsc2V7XG4hbG9uZVgmJiFsb25lWXx8XG5GYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBsb25lIHBhaXIgJHtxKFtsb25lWCxsb25lWV0pfWA7XG5yZXR1cm4gMDtcbiB9XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlclVuaW9uPSh4eWkpPT57XG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM+PTBuKXtcbnJlc3VsdC5wdXNoKG0pO1xuIH1lbHNle1xueWM+PTBufHxGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBjb3VudCAke3EoeWMpfWA7XG4vL1xuLy9cbnJlc3VsdC5wdXNoKG0pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGl0ZXJEaXNqb2ludFVuaW9uPSh4eWkpPT57XG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xueGM9PT0wbnx8eWM9PT0wbnx8RmFpbCBgU2V0cyBtdXN0IG5vdCBoYXZlIGNvbW1vbiBlbGVtZW50czogJHttfWA7XG5pZih4Yz49MW4pe1xucmVzdWx0LnB1c2gobSk7XG4gfWVsc2V7XG55Yz49MW58fEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGNvdW50ICR7cSh5Yyl9YDtcbnJlc3VsdC5wdXNoKG0pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGl0ZXJJbnRlcnNlY3Rpb249KHh5aSk9PntcbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MW4mJnljPj0xbil7XG4vL1xucmVzdWx0LnB1c2gobSk7XG4gfVxuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckRpc2pvaW50U3VidHJhY3Q9KHh5aSk9PntcbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG54Yz49MW58fEZhaWwgYHJpZ2h0IGVsZW1lbnQgJHttfSB3YXMgbm90IGluIGxlZnRgO1xuaWYoeWM9PT0wbil7XG4vL1xucmVzdWx0LnB1c2gobSk7XG4gfVxuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuY29uc3QgbWVyZ2VpZnk9KGl0ZXJPcCk9Pih4ZWxlbWVudHMseWVsZW1lbnRzKT0+XG5pdGVyT3AobWVyZ2UoeGVsZW1lbnRzLHllbGVtZW50cykpO1xuXG5jb25zdCAgICAgICAgZWxlbWVudHNJc1N1cGVyc2V0PW1lcmdlaWZ5KGl0ZXJJc1N1cGVyc2V0KTskaOKAjV9vbmNlLmVsZW1lbnRzSXNTdXBlcnNldChlbGVtZW50c0lzU3VwZXJzZXQpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzSXNEaXNqb2ludD1tZXJnZWlmeShpdGVySXNEaXNqb2ludCk7JGjigI1fb25jZS5lbGVtZW50c0lzRGlzam9pbnQoZWxlbWVudHNJc0Rpc2pvaW50KTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0NvbXBhcmU9bWVyZ2VpZnkoaXRlckNvbXBhcmUpOyRo4oCNX29uY2UuZWxlbWVudHNDb21wYXJlKGVsZW1lbnRzQ29tcGFyZSk7XG5jb25zdCAgICAgICAgZWxlbWVudHNVbmlvbj1tZXJnZWlmeShpdGVyVW5pb24pOyRo4oCNX29uY2UuZWxlbWVudHNVbmlvbihlbGVtZW50c1VuaW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0Rpc2pvaW50VW5pb249bWVyZ2VpZnkoaXRlckRpc2pvaW50VW5pb24pOyRo4oCNX29uY2UuZWxlbWVudHNEaXNqb2ludFVuaW9uKGVsZW1lbnRzRGlzam9pbnRVbmlvbik7XG5jb25zdCAgICAgICAgZWxlbWVudHNJbnRlcnNlY3Rpb249bWVyZ2VpZnkoaXRlckludGVyc2VjdGlvbik7JGjigI1fb25jZS5lbGVtZW50c0ludGVyc2VjdGlvbihlbGVtZW50c0ludGVyc2VjdGlvbik7XG5jb25zdCAgICAgICAgZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0PW1lcmdlaWZ5KGl0ZXJEaXNqb2ludFN1YnRyYWN0KTskaOKAjV9vbmNlLmVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdChlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QpO1xuXG5jb25zdCByYXdTZXRpZnk9KGVsZW1lbnRzT3ApPT4oeHNldCx5c2V0KT0+XG5lbGVtZW50c09wKHhzZXQucGF5bG9hZCx5c2V0LnBheWxvYWQpO1xuXG5jb25zdCBzZXRpZnk9KGVsZW1lbnRzT3ApPT4oeHNldCx5c2V0KT0+XG5tYWtlU2V0T2ZFbGVtZW50cyhlbGVtZW50c09wKHhzZXQucGF5bG9hZCx5c2V0LnBheWxvYWQpKTtcblxuY29uc3QgICAgICAgIHNldElzU3VwZXJzZXQ9cmF3U2V0aWZ5KGVsZW1lbnRzSXNTdXBlcnNldCk7JGjigI1fb25jZS5zZXRJc1N1cGVyc2V0KHNldElzU3VwZXJzZXQpO1xuY29uc3QgICAgICAgIHNldElzRGlzam9pbnQ9cmF3U2V0aWZ5KGVsZW1lbnRzSXNEaXNqb2ludCk7JGjigI1fb25jZS5zZXRJc0Rpc2pvaW50KHNldElzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIHNldFVuaW9uPXNldGlmeShlbGVtZW50c1VuaW9uKTskaOKAjV9vbmNlLnNldFVuaW9uKHNldFVuaW9uKTtcbmNvbnN0ICAgICAgICBzZXREaXNqb2ludFVuaW9uPXNldGlmeShlbGVtZW50c0Rpc2pvaW50VW5pb24pOyRo4oCNX29uY2Uuc2V0RGlzam9pbnRVbmlvbihzZXREaXNqb2ludFVuaW9uKTtcbmNvbnN0ICAgICAgICBzZXRJbnRlcnNlY3Rpb249c2V0aWZ5KGVsZW1lbnRzSW50ZXJzZWN0aW9uKTskaOKAjV9vbmNlLnNldEludGVyc2VjdGlvbihzZXRJbnRlcnNlY3Rpb24pO1xuY29uc3QgICAgICAgIHNldERpc2pvaW50U3VidHJhY3Q9c2V0aWZ5KGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCk7JGjigI1fb25jZS5zZXREaXNqb2ludFN1YnRyYWN0KHNldERpc2pvaW50U3VidHJhY3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZWxlbWVudHNJc1N1cGVyc2V0IjpbImVsZW1lbnRzSXNTdXBlcnNldCJdLCJlbGVtZW50c0lzRGlzam9pbnQiOlsiZWxlbWVudHNJc0Rpc2pvaW50Il0sImVsZW1lbnRzQ29tcGFyZSI6WyJlbGVtZW50c0NvbXBhcmUiXSwiZWxlbWVudHNVbmlvbiI6WyJlbGVtZW50c1VuaW9uIl0sImVsZW1lbnRzRGlzam9pbnRVbmlvbiI6WyJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSwiZWxlbWVudHNJbnRlcnNlY3Rpb24iOlsiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IjpbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLCJzZXRJc1N1cGVyc2V0IjpbInNldElzU3VwZXJzZXQiXSwic2V0SXNEaXNqb2ludCI6WyJzZXRJc0Rpc2pvaW50Il0sInNldFVuaW9uIjpbInNldFVuaW9uIl0sInNldERpc2pvaW50VW5pb24iOlsic2V0RGlzam9pbnRVbmlvbiJdLCJzZXRJbnRlcnNlY3Rpb24iOlsic2V0SW50ZXJzZWN0aW9uIl0sInNldERpc2pvaW50U3VidHJhY3QiOlsic2V0RGlzam9pbnRTdWJ0cmFjdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACxt5A1FhkAABYZAAA2AAAAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiLi9wYXR0ZXJuTWF0Y2hlcnMuanMiLCIuLi9rZXlzL2NoZWNrS2V5LmpzIl0sImV4cG9ydHMiOlsiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiLCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQiLCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBvYmplY3RNYXAsQXJnR3VhcmRMaXN0U2hhcGUsQXdhaXRBcmdHdWFyZFNoYXBlLEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlLEludGVyZmFjZUd1YXJkU2hhcGUsTSxNZXRob2RHdWFyZFBheWxvYWRTaGFwZSxNZXRob2RHdWFyZFNoYXBlLFJhd0d1YXJkU2hhcGUsU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsU3luY1ZhbHVlR3VhcmRTaGFwZSxhc3NlcnRBd2FpdEFyZ0d1YXJkLG1hdGNoZXMsbXVzdE1hdGNoLGdldENvcHlNYXBLZXlzLG1ha2VDb3B5TWFwOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRo4oCNX2EgPT4gKG9iamVjdE1hcCA9ICRo4oCNX2EpXV1dXSxbXCIuL3BhdHRlcm5NYXRjaGVycy5qc1wiLCBbW1wiQXJnR3VhcmRMaXN0U2hhcGVcIiwgWyRo4oCNX2EgPT4gKEFyZ0d1YXJkTGlzdFNoYXBlID0gJGjigI1fYSldXSxbXCJBd2FpdEFyZ0d1YXJkU2hhcGVcIiwgWyRo4oCNX2EgPT4gKEF3YWl0QXJnR3VhcmRTaGFwZSA9ICRo4oCNX2EpXV0sW1wiSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGVcIiwgWyRo4oCNX2EgPT4gKEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlID0gJGjigI1fYSldXSxbXCJJbnRlcmZhY2VHdWFyZFNoYXBlXCIsIFskaOKAjV9hID0+IChJbnRlcmZhY2VHdWFyZFNoYXBlID0gJGjigI1fYSldXSxbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJNZXRob2RHdWFyZFBheWxvYWRTaGFwZVwiLCBbJGjigI1fYSA9PiAoTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUgPSAkaOKAjV9hKV1dLFtcIk1ldGhvZEd1YXJkU2hhcGVcIiwgWyRo4oCNX2EgPT4gKE1ldGhvZEd1YXJkU2hhcGUgPSAkaOKAjV9hKV1dLFtcIlJhd0d1YXJkU2hhcGVcIiwgWyRo4oCNX2EgPT4gKFJhd0d1YXJkU2hhcGUgPSAkaOKAjV9hKV1dLFtcIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlXCIsIFskaOKAjV9hID0+IChTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSA9ICRo4oCNX2EpXV0sW1wiU3luY1ZhbHVlR3VhcmRTaGFwZVwiLCBbJGjigI1fYSA9PiAoU3luY1ZhbHVlR3VhcmRTaGFwZSA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0QXdhaXRBcmdHdWFyZFwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0QXdhaXRBcmdHdWFyZCA9ICRo4oCNX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjigI1fYSA9PiAobWF0Y2hlcyA9ICRo4oCNX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaOKAjV9hID0+IChtdXN0TWF0Y2ggPSAkaOKAjV9hKV1dXV0sW1wiLi4va2V5cy9jaGVja0tleS5qc1wiLCBbW1wiZ2V0Q29weU1hcEtleXNcIiwgWyRo4oCNX2EgPT4gKGdldENvcHlNYXBLZXlzID0gJGjigI1fYSldXSxbXCJtYWtlQ29weU1hcFwiLCBbJGjigI1fYSA9PiAobWFrZUNvcHlNYXAgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlPWhhcmRlbih7XG5rbGFzczonYXdhaXRBcmcnLFxuYXJnR3VhcmQ6TS5wYXR0ZXJuKCl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQ9KGF3YWl0QXJnR3VhcmQpPT57XG5pZihtYXRjaGVzKGF3YWl0QXJnR3VhcmQsTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlKSl7XG4vL1xuY29uc3R7a2xhc3M6XywuLi5wYXlsb2FkfT1hd2FpdEFyZ0d1YXJkO1xuLy9cbnJldHVybiBwYXlsb2FkO1xuIH1cbmFzc2VydEF3YWl0QXJnR3VhcmQoYXdhaXRBcmdHdWFyZCk7XG5yZXR1cm4gYXdhaXRBcmdHdWFyZC5wYXlsb2FkO1xuIH07JGjigI1fb25jZS5nZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZChnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCk7XG5oYXJkZW4oZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lTeW5jTWV0aG9kR3VhcmRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xua2xhc3M6J21ldGhvZEd1YXJkJyxcbmNhbGxLaW5kOidzeW5jJyxcbmFyZ0d1YXJkczpTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9LFxuXG57XG5vcHRpb25hbEFyZ0d1YXJkczpTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxcbnJlc3RBcmdHdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSk7XG5cblxuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lBcmdHdWFyZFNoYXBlPU0ub3IoXG5SYXdHdWFyZFNoYXBlLFxuQXdhaXRBcmdHdWFyZFNoYXBlLFxuTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlLFxuTS5wYXR0ZXJuKCkpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lBcmdHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoTGVnYWN5QXJnR3VhcmRTaGFwZSk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUFzeW5jTWV0aG9kR3VhcmRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xua2xhc3M6J21ldGhvZEd1YXJkJyxcbmNhbGxLaW5kOidhc3luYycsXG5hcmdHdWFyZHM6TGVnYWN5QXJnR3VhcmRMaXN0U2hhcGUsXG5yZXR1cm5HdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSxcblxue1xub3B0aW9uYWxBcmdHdWFyZHM6QXJnR3VhcmRMaXN0U2hhcGUsXG5yZXN0QXJnR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0pO1xuXG5cblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5TWV0aG9kR3VhcmRTaGFwZT1NLm9yKFxuTGVnYWN5U3luY01ldGhvZEd1YXJkU2hhcGUsXG5MZWdhY3lBc3luY01ldGhvZEd1YXJkU2hhcGUpO1xuXG5cbmNvbnN0IGFkYXB0TGVnYWN5QXJnR3VhcmQ9KGFyZ0d1YXJkKT0+XG5tYXRjaGVzKGFyZ0d1YXJkLExlZ2FjeUF3YWl0QXJnR3VhcmRTaGFwZSk/XG5NLmF3YWl0KGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKGFyZ0d1YXJkKS5hcmdHdWFyZCk6XG5hcmdHdWFyZDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRNZXRob2RHdWFyZFBheWxvYWQ9KG1ldGhvZEd1YXJkKT0+e1xuaWYobWF0Y2hlcyhtZXRob2RHdWFyZCxNZXRob2RHdWFyZFNoYXBlKSl7XG5yZXR1cm4gbWV0aG9kR3VhcmQucGF5bG9hZDtcbiB9XG5tdXN0TWF0Y2gobWV0aG9kR3VhcmQsTGVnYWN5TWV0aG9kR3VhcmRTaGFwZSwnbGVnYWN5TWV0aG9kR3VhcmQnKTtcbmNvbnN0e1xuLy9cbmtsYXNzOl8sXG4vL1xuY2FsbEtpbmQsXG4vL1xucmV0dXJuR3VhcmQsXG4vL1xucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkO1xubGV0e1xuLy9cbmFyZ0d1YXJkcyxcbi8vXG5vcHRpb25hbEFyZ0d1YXJkc309XG5tZXRob2RHdWFyZDtcbmlmKGNhbGxLaW5kPT09J2FzeW5jJyl7XG5hcmdHdWFyZHM9YXJnR3VhcmRzLm1hcChhZGFwdExlZ2FjeUFyZ0d1YXJkKTtcbm9wdGlvbmFsQXJnR3VhcmRzPVxub3B0aW9uYWxBcmdHdWFyZHMmJm9wdGlvbmFsQXJnR3VhcmRzLm1hcChhZGFwdExlZ2FjeUFyZ0d1YXJkKTtcbiB9XG5jb25zdCBwYXlsb2FkPWhhcmRlbih7XG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzLFxucmVzdEFyZ0d1YXJkLFxucmV0dXJuR3VhcmR9KTtcblxuLy9cbm11c3RNYXRjaChwYXlsb2FkLE1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLCdpbnRlcm5hbE1ldGhvZEd1YXJkQWRhcHRvcicpO1xucmV0dXJuIHBheWxvYWQ7XG4gfTskaOKAjV9vbmNlLmdldE1ldGhvZEd1YXJkUGF5bG9hZChnZXRNZXRob2RHdWFyZFBheWxvYWQpO1xuaGFyZGVuKGdldE1ldGhvZEd1YXJkUGF5bG9hZCk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUludGVyZmFjZUd1YXJkU2hhcGU9TS5zcGxpdFJlY29yZChcbntcbmtsYXNzOidJbnRlcmZhY2UnLFxuaW50ZXJmYWNlTmFtZTpNLnN0cmluZygpLFxubWV0aG9kR3VhcmRzOk0ucmVjb3JkT2YoXG5NLnN0cmluZygpLFxuTS5vcihNZXRob2RHdWFyZFNoYXBlLExlZ2FjeU1ldGhvZEd1YXJkU2hhcGUpKX0sXG5cblxue1xuZGVmYXVsdEd1YXJkczpNLm9yKE0udW5kZWZpbmVkKCksJ3Bhc3NhYmxlJywncmF3JyksXG5zbG9wcHk6TS5ib29sZWFuKCksXG4vL1xuLy9cbi8vXG5zeW1ib2xNZXRob2RHdWFyZHM6TS5tYXBPZihNLnN5bWJvbCgpLE1ldGhvZEd1YXJkU2hhcGUpfSk7XG5cblxuXG5jb25zdCBhZGFwdE1ldGhvZEd1YXJkPShtZXRob2RHdWFyZCk9PntcbmlmKG1hdGNoZXMobWV0aG9kR3VhcmQsTGVnYWN5TWV0aG9kR3VhcmRTaGFwZSkpe1xuY29uc3R7XG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkPU0uYW55KCksXG5yZXR1cm5HdWFyZH09XG5nZXRNZXRob2RHdWFyZFBheWxvYWQobWV0aG9kR3VhcmQpO1xuY29uc3QgbUNhbGw9Y2FsbEtpbmQ9PT0nc3luYyc/TS5jYWxsOk0uY2FsbFdoZW47XG5yZXR1cm4gbUNhbGwoLi4uYXJnR3VhcmRzKS5cbm9wdGlvbmFsKC4uLm9wdGlvbmFsQXJnR3VhcmRzKS5cbnJlc3QocmVzdEFyZ0d1YXJkKS5cbnJldHVybnMocmV0dXJuR3VhcmQpO1xuIH1cbnJldHVybiBtZXRob2RHdWFyZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkPShpbnRlcmZhY2VHdWFyZCk9PntcbmlmKG1hdGNoZXMoaW50ZXJmYWNlR3VhcmQsSW50ZXJmYWNlR3VhcmRTaGFwZSkpe1xucmV0dXJuIGludGVyZmFjZUd1YXJkLnBheWxvYWQ7XG4gfVxubXVzdE1hdGNoKGludGVyZmFjZUd1YXJkLExlZ2FjeUludGVyZmFjZUd1YXJkU2hhcGUsJ2xlZ2FjeUludGVyZmFjZUd1YXJkJyk7XG4vL1xuLy9cbmxldHtrbGFzczpfLGludGVyZmFjZU5hbWUsbWV0aG9kR3VhcmRzLC4uLnJlc3R9PWludGVyZmFjZUd1YXJkO1xubWV0aG9kR3VhcmRzPW9iamVjdE1hcChtZXRob2RHdWFyZHMsYWRhcHRNZXRob2RHdWFyZCk7XG5jb25zdCBwYXlsb2FkPWhhcmRlbih7XG5pbnRlcmZhY2VOYW1lLFxubWV0aG9kR3VhcmRzLFxuLi4ucmVzdH0pO1xuXG5tdXN0TWF0Y2goXG5wYXlsb2FkLFxuSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUsXG4naW50ZXJuYWxJbnRlcmZhY2VHdWFyZEFkYXB0b3InKTtcblxucmV0dXJuIHBheWxvYWQ7XG4gfTskaOKAjV9vbmNlLmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQpO1xuaGFyZGVuKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCk7XG5cbmNvbnN0IGVtcHR5Q29weU1hcD1tYWtlQ29weU1hcChbXSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cz0oaW50ZXJmYWNlR3VhcmQpPT57XG5jb25zdHttZXRob2RHdWFyZHMsc3ltYm9sTWV0aG9kR3VhcmRzPWVtcHR5Q29weU1hcH09XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoaW50ZXJmYWNlR3VhcmQpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKFtcbi4uLlJlZmxlY3Qub3duS2V5cyhtZXRob2RHdWFyZHMpLFxuLi4uZ2V0Q29weU1hcEtleXMoc3ltYm9sTWV0aG9kR3VhcmRzKV0pO1xuXG4gfTskaOKAjV9vbmNlLmdldEludGVyZmFjZU1ldGhvZEtleXMoZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyk7XG5oYXJkZW4oZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCI6WyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCJdLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiOlsiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIl0sImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCI6WyJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQiXSwiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyI6WyJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMBhos8zrgAAM64AADUAAABAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiLCJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiLCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyIsIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiLCJAZW5kby9lcnJvcnMiLCIuLi9rZXlzL2NvbXBhcmVLZXlzLmpzIiwiLi4va2V5cy9jaGVja0tleS5qcyIsIi4uL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanMiXSwiZXhwb3J0cyI6WyJBcmdHdWFyZExpc3RTaGFwZSIsIkF3YWl0QXJnR3VhcmRTaGFwZSIsIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlIiwiSW50ZXJmYWNlR3VhcmRTaGFwZSIsIk0iLCJNZXRob2RHdWFyZFBheWxvYWRTaGFwZSIsIk1ldGhvZEd1YXJkU2hhcGUiLCJSYXdHdWFyZFNoYXBlIiwiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUiLCJTeW5jVmFsdWVHdWFyZFNoYXBlIiwiYXNzZXJ0QXdhaXRBcmdHdWFyZCIsImFzc2VydEludGVyZmFjZUd1YXJkIiwiYXNzZXJ0TWV0aG9kR3VhcmQiLCJhc3NlcnRQYXR0ZXJuIiwiYXNzZXJ0UmF3R3VhcmQiLCJjaGVja01hdGNoZXMiLCJkZWZhdWx0TGltaXRzIiwiZ2V0UmFua0NvdmVyIiwiaXNBd2FpdEFyZ0d1YXJkIiwiaXNQYXR0ZXJuIiwiaXNSYXdHdWFyZCIsImtpbmRPZiIsIm1hdGNoZXMiLCJtdXN0TWF0Y2giXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsRmFyLGdldFRhZyxtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGhhc093blByb3BlcnR5T2YsbmFtZUZvclBhc3NhYmxlU3ltYm9sLGNvbXBhcmVSYW5rLGdldFBhc3NTdHlsZUNvdmVyLGludGVyc2VjdFJhbmtDb3ZlcnMsdW5pb25SYW5rQ292ZXJzLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlcyxpZGVudENoZWNrZXIsYXBwbHlMYWJlbGluZ0Vycm9yLGZyb21VbmlxdWVFbnRyaWVzLGxpc3REaWZmZXJlbmNlLHEsYixYLEZhaWwsbWFrZUVycm9yLGFubm90YXRlRXJyb3Isa2V5RVEsa2V5R1Qsa2V5R1RFLGtleUxULGtleUxURSxhc3NlcnRLZXksY2hlY2tLZXksaXNLZXksY2hlY2tTY2FsYXJLZXksY2hlY2tDb3B5U2V0LGNoZWNrQ29weU1hcCxjb3B5TWFwS2V5U2V0LGNoZWNrQ29weUJhZyxnZXRDb3B5TWFwRW50cnlBcnJheSxtYWtlQ29weU1hcCxnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllczskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaOKAjV9hID0+IChhc3NlcnRDaGVja2VyID0gJGjigI1fYSldXSxbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV0sW1wiZ2V0VGFnXCIsIFskaOKAjV9hID0+IChnZXRUYWcgPSAkaOKAjV9hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRo4oCNX2EgPT4gKG1ha2VUYWdnZWQgPSAkaOKAjV9hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaOKAjV9hID0+IChwYXNzU3R5bGVPZiA9ICRo4oCNX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjigI1fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRo4oCNX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaOKAjV9hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaOKAjV9hKV1dLFtcImNvbXBhcmVSYW5rXCIsIFskaOKAjV9hID0+IChjb21wYXJlUmFuayA9ICRo4oCNX2EpXV0sW1wiZ2V0UGFzc1N0eWxlQ292ZXJcIiwgWyRo4oCNX2EgPT4gKGdldFBhc3NTdHlsZUNvdmVyID0gJGjigI1fYSldXSxbXCJpbnRlcnNlY3RSYW5rQ292ZXJzXCIsIFskaOKAjV9hID0+IChpbnRlcnNlY3RSYW5rQ292ZXJzID0gJGjigI1fYSldXSxbXCJ1bmlvblJhbmtDb3ZlcnNcIiwgWyRo4oCNX2EgPT4gKHVuaW9uUmFua0NvdmVycyA9ICRo4oCNX2EpXV0sW1wicmVjb3JkTmFtZXNcIiwgWyRo4oCNX2EgPT4gKHJlY29yZE5hbWVzID0gJGjigI1fYSldXSxbXCJyZWNvcmRWYWx1ZXNcIiwgWyRo4oCNX2EgPT4gKHJlY29yZFZhbHVlcyA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qc1wiLCBbW1wiaWRlbnRDaGVja2VyXCIsIFskaOKAjV9hID0+IChpZGVudENoZWNrZXIgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzXCIsIFtbXCJhcHBseUxhYmVsaW5nRXJyb3JcIiwgWyRo4oCNX2EgPT4gKGFwcGx5TGFiZWxpbmdFcnJvciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qc1wiLCBbW1wiZnJvbVVuaXF1ZUVudHJpZXNcIiwgWyRo4oCNX2EgPT4gKGZyb21VbmlxdWVFbnRyaWVzID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanNcIiwgW1tcImxpc3REaWZmZXJlbmNlXCIsIFskaOKAjV9hID0+IChsaXN0RGlmZmVyZW5jZSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcImJcIiwgWyRo4oCNX2EgPT4gKGIgPSAkaOKAjV9hKV1dLFtcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjigI1fYSA9PiAobWFrZUVycm9yID0gJGjigI1fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaOKAjV9hID0+IChhbm5vdGF0ZUVycm9yID0gJGjigI1fYSldXV1dLFtcIi4uL2tleXMvY29tcGFyZUtleXMuanNcIiwgW1tcImtleUVRXCIsIFskaOKAjV9hID0+IChrZXlFUSA9ICRo4oCNX2EpXV0sW1wia2V5R1RcIiwgWyRo4oCNX2EgPT4gKGtleUdUID0gJGjigI1fYSldXSxbXCJrZXlHVEVcIiwgWyRo4oCNX2EgPT4gKGtleUdURSA9ICRo4oCNX2EpXV0sW1wia2V5TFRcIiwgWyRo4oCNX2EgPT4gKGtleUxUID0gJGjigI1fYSldXSxbXCJrZXlMVEVcIiwgWyRo4oCNX2EgPT4gKGtleUxURSA9ICRo4oCNX2EpXV1dXSxbXCIuLi9rZXlzL2NoZWNrS2V5LmpzXCIsIFtbXCJhc3NlcnRLZXlcIiwgWyRo4oCNX2EgPT4gKGFzc2VydEtleSA9ICRo4oCNX2EpXV0sW1wiY2hlY2tLZXlcIiwgWyRo4oCNX2EgPT4gKGNoZWNrS2V5ID0gJGjigI1fYSldXSxbXCJpc0tleVwiLCBbJGjigI1fYSA9PiAoaXNLZXkgPSAkaOKAjV9hKV1dLFtcImNoZWNrU2NhbGFyS2V5XCIsIFskaOKAjV9hID0+IChjaGVja1NjYWxhcktleSA9ICRo4oCNX2EpXV0sW1wiY2hlY2tDb3B5U2V0XCIsIFskaOKAjV9hID0+IChjaGVja0NvcHlTZXQgPSAkaOKAjV9hKV1dLFtcImNoZWNrQ29weU1hcFwiLCBbJGjigI1fYSA9PiAoY2hlY2tDb3B5TWFwID0gJGjigI1fYSldXSxbXCJjb3B5TWFwS2V5U2V0XCIsIFskaOKAjV9hID0+IChjb3B5TWFwS2V5U2V0ID0gJGjigI1fYSldXSxbXCJjaGVja0NvcHlCYWdcIiwgWyRo4oCNX2EgPT4gKGNoZWNrQ29weUJhZyA9ICRo4oCNX2EpXV0sW1wiZ2V0Q29weU1hcEVudHJ5QXJyYXlcIiwgWyRo4oCNX2EgPT4gKGdldENvcHlNYXBFbnRyeUFycmF5ID0gJGjigI1fYSldXSxbXCJtYWtlQ29weU1hcFwiLCBbJGjigI1fYSA9PiAobWFrZUNvcHlNYXAgPSAkaOKAjV9hKV1dXV0sW1wiLi4va2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qc1wiLCBbW1wiZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXNcIiwgWyRo4oCNX2EgPT4gKGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuY29uc3R7ZW50cmllcyx2YWx1ZXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBhdHRlcm5NZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IE1NO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmF1bHRMaW1pdHM9aGFyZGVuKHtcbmRlY2ltYWxEaWdpdHNMaW1pdDoxMDAsXG5zdHJpbmdMZW5ndGhMaW1pdDoxMDBfMDAwLFxuc3ltYm9sTmFtZUxlbmd0aExpbWl0OjEwMCxcbm51bVByb3BlcnRpZXNMaW1pdDo4MCxcbnByb3BlcnR5TmFtZUxlbmd0aExpbWl0OjEwMCxcbmFycmF5TGVuZ3RoTGltaXQ6MTBfMDAwLFxubnVtU2V0RWxlbWVudHNMaW1pdDoxMF8wMDAsXG5udW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0OjEwXzAwMCxcbm51bU1hcEVudHJpZXNMaW1pdDo1MDAwfSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuZGVmYXVsdExpbWl0cyhkZWZhdWx0TGltaXRzKTtcbmNvbnN0IGxpbWl0PShsaW1pdHM9e30pPT5cbi8qICAgICAgICAgICAgICAgICAgICAqL2hhcmRlbih7X19wcm90b19fOmRlZmF1bHRMaW1pdHMsLi4ubGltaXRzfSk7XG5cbmNvbnN0IGNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0PShcbnBheWxvYWQsXG5tYWluUGF5bG9hZFNoYXBlLFxuY2hlY2ssXG5sYWJlbCk9Plxue1xuYXNzZXJ0KEFycmF5LmlzQXJyYXkobWFpblBheWxvYWRTaGFwZSkpO1xuaWYoIUFycmF5LmlzQXJyYXkocGF5bG9hZCkpe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYCR7cShsYWJlbCl9IHBheWxvYWQgbXVzdCBiZSBhbiBhcnJheTogJHtwYXlsb2FkfWApO1xuIH1cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbmNvbnN0IG1haW5MZW5ndGg9bWFpblBheWxvYWRTaGFwZS5sZW5ndGg7XG5pZighKHBheWxvYWQubGVuZ3RoPT09bWFpbkxlbmd0aHx8cGF5bG9hZC5sZW5ndGg9PT1tYWluTGVuZ3RoKzEpKXtcbnJldHVybiBjaGVjayhmYWxzZSxYIGAke3EobGFiZWwpfSBwYXlsb2FkIHVuZXhwZWN0ZWQgc2l6ZTogJHtwYXlsb2FkfWApO1xuIH1cbmNvbnN0IGxpbWl0cz1wYXlsb2FkW21haW5MZW5ndGhdO1xucGF5bG9hZD1oYXJkZW4ocGF5bG9hZC5zbGljZSgwLG1haW5MZW5ndGgpKTtcbi8vXG5pZighY2hlY2tNYXRjaGVzKHBheWxvYWQsbWFpblBheWxvYWRTaGFwZSxjaGVjayxsYWJlbCkpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmlmKGxpbWl0cz09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4oXG4ocGFzc1N0eWxlT2YobGltaXRzKT09PSdjb3B5UmVjb3JkJ3x8XG5jaGVjayhmYWxzZSxYIGBMaW1pdHMgbXVzdCBiZSBhIHJlY29yZDogJHtxKGxpbWl0cyl9YCkpJiZcbmVudHJpZXMobGltaXRzKS5ldmVyeShcbihba2V5LHZhbHVlXSk9PlxucGFzc1N0eWxlT2YodmFsdWUpPT09J251bWJlcid8fFxuY2hlY2soZmFsc2UsWCBgVmFsdWUgb2YgbGltaXQgJHtxKGtleSl9IGJ1dCBiZSBhIG51bWJlcjogJHtxKHZhbHVlKX1gKSkpO1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja0RlY2ltYWxEaWdpdHNMaW1pdD0oc3BlY2ltZW4sZGVjaW1hbERpZ2l0c0xpbWl0LGNoZWNrKT0+e1xuaWYoXG5NYXRoLmZsb29yKE1hdGgubG9nMTAoTWF0aC5hYnMoTnVtYmVyKHNwZWNpbWVuKSkpKSsxPD1cbmRlY2ltYWxEaWdpdHNMaW1pdClcbntcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgYmlnaW50ICR7c3BlY2ltZW59IG11c3Qgbm90IGhhdmUgbW9yZSB0aGFuICR7ZGVjaW1hbERpZ2l0c0xpbWl0fSBkaWdpdHNgKTtcblxuIH07XG5cbi8qXG5cbiAqL1xuY29uc3QgbWFrZVBhdHRlcm5LaXQ9KCk9Pntcbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1heWJlTWF0Y2hIZWxwZXI9KHRhZyk9PlxuLy9cbkhlbHBlcnNCeU1hdGNoVGFnW3RhZ107XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWF5YmVQYXlsb2FkU2hhcGU9KHRhZyk9PlxuLy9cbkd1YXJkUGF5bG9hZFNoYXBlc1t0YWddO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNpbmdsZXRvbktpbmRzPW5ldyBNYXAoW1xuWydudWxsJyxudWxsXSxcblsndW5kZWZpbmVkJyx1bmRlZmluZWRdXSk7XG5cblxuLypcblxuXG5cbiAgICovXG5jb25zdCB0YWdNZW1vPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1RhZ2dlZD0odGFnZ2VkLHRhZyxjaGVjayk9PntcbmNvbnN0IG1hdGNoSGVscGVyPW1heWJlTWF0Y2hIZWxwZXIodGFnKTtcbmlmKG1hdGNoSGVscGVyKXtcbi8vXG4vL1xucmV0dXJuIG1hdGNoSGVscGVyLmNoZWNrSXNXZWxsRm9ybWVkKHRhZ2dlZC5wYXlsb2FkLGNoZWNrKTtcbiB9ZWxzZXtcbmNvbnN0IHBheWxvYWRTaGFwZT1tYXliZVBheWxvYWRTaGFwZSh0YWcpO1xuaWYocGF5bG9hZFNoYXBlIT09dW5kZWZpbmVkKXtcbi8vXG5yZXR1cm4gY2hlY2tNYXRjaGVzKHRhZ2dlZC5wYXlsb2FkLHBheWxvYWRTaGFwZSxjaGVjayx0YWcpO1xuIH1cbiB9XG5zd2l0Y2godGFnKXtcbmNhc2UnY29weVNldCc6e1xucmV0dXJuIGNoZWNrQ29weVNldCh0YWdnZWQsY2hlY2spO1xuIH1cbmNhc2UnY29weUJhZyc6e1xucmV0dXJuIGNoZWNrQ29weUJhZyh0YWdnZWQsY2hlY2spO1xuIH1cbmNhc2UnY29weU1hcCc6e1xucmV0dXJuIGNoZWNrQ29weU1hcCh0YWdnZWQsY2hlY2spO1xuIH1cbmRlZmF1bHQ6e1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBjYW5ub3QgY2hlY2sgdW5yZWNvZ25pemVkIHRhZyAke3EodGFnKX06ICR7dGFnZ2VkfWApO1xuXG4gfX1cblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBraW5kT2Y9KHNwZWNpbWVuLGNoZWNrPWlkZW50Q2hlY2tlcik9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihzcGVjaW1lbik7XG5pZihwYXNzU3R5bGUhPT0ndGFnZ2VkJyl7XG5yZXR1cm4gcGFzc1N0eWxlO1xuIH1cbi8vXG4vL1xuLy9cbmlmKHRhZ01lbW8uaGFzKHNwZWNpbWVuKSl7XG5yZXR1cm4gdGFnTWVtby5nZXQoc3BlY2ltZW4pO1xuIH1cbmNvbnN0IHRhZz1nZXRUYWcoc3BlY2ltZW4pO1xuaWYoY2hlY2tUYWdnZWQoc3BlY2ltZW4sdGFnLGNoZWNrKSl7XG50YWdNZW1vLnNldChzcGVjaW1lbix0YWcpO1xucmV0dXJuIHRhZztcbiB9XG5pZihjaGVjayE9PWlkZW50Q2hlY2tlcil7XG5jaGVjayhmYWxzZSxYIGBjYW5ub3QgY2hlY2sgdW5yZWNvZ25pemVkIHRhZyAke3EodGFnKX1gKTtcbiB9XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH07XG5oYXJkZW4oa2luZE9mKTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrS2luZD0oc3BlY2ltZW4sa2luZCxjaGVjayk9Pntcbi8vXG5pZihzaW5nbGV0b25LaW5kcy5oYXMoa2luZCkpe1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixzaW5nbGV0b25LaW5kcy5nZXQoa2luZCksY2hlY2spO1xuIH1cblxuY29uc3QgcmVhbEtpbmQ9a2luZE9mKHNwZWNpbWVuLGNoZWNrKTtcbmlmKGtpbmQ9PT1yZWFsS2luZCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihjaGVjayE9PWlkZW50Q2hlY2tlcil7XG4vL1xuLy9cbmNoZWNrKGZhbHNlLFggYCR7YihyZWFsS2luZCl9ICR7c3BlY2ltZW59IC0gTXVzdCBiZSBhICR7YihraW5kKX1gKTtcbiB9XG5yZXR1cm4gZmFsc2U7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBpc0tpbmQ9KHNwZWNpbWVuLGtpbmQpPT5jaGVja0tpbmQoc3BlY2ltZW4sa2luZCxpZGVudENoZWNrZXIpO1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tBc0tleVBhdHQ9KHNwZWNpbWVuLGtleUFzUGF0dGVybixjaGVjayk9PntcbmlmKGlzS2V5KHNwZWNpbWVuKSYma2V5RVEoc3BlY2ltZW4sa2V5QXNQYXR0ZXJuKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4oXG5jaGVjayE9PWlkZW50Q2hlY2tlciYmXG4vL1xuLy9cbmNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBiZTogJHtrZXlBc1BhdHRlcm59YCkpO1xuXG4gfTtcblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjaGVja1BhdHRlcm49KHBhdHQsY2hlY2spPT57XG5pZihpc0tleShwYXR0KSl7XG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIHRydWU7XG4gfVxuaWYocGF0dGVybk1lbW8uaGFzKHBhdHQpKXtcbnJldHVybiB0cnVlO1xuIH1cbi8vXG5jb25zdCByZXN1bHQ9Y2hlY2tQYXR0ZXJuSW50ZXJuYWwocGF0dCxjaGVjayk7XG5pZihyZXN1bHQpe1xucGF0dGVybk1lbW8uYWRkKHBhdHQpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrUGF0dGVybkludGVybmFsPShwYXR0LGNoZWNrKT0+e1xuLy9cbi8vXG4vL1xuY29uc3QgY2hlY2tJdD0oY2hpbGQpPT5jaGVja1BhdHRlcm4oY2hpbGQsY2hlY2spO1xuXG5jb25zdCBraW5kPWtpbmRPZihwYXR0LGNoZWNrKTtcbnN3aXRjaChraW5kKXtcbmNhc2UgdW5kZWZpbmVkOntcbnJldHVybiBmYWxzZTtcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xucmV0dXJuIHZhbHVlcyhwYXR0KS5ldmVyeShjaGVja0l0KTtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbi8vXG5yZXR1cm4gcGF0dC5ldmVyeShjaGVja0l0KTtcbiB9XG5jYXNlJ2NvcHlNYXAnOntcbi8vXG4vL1xuLy9cbnJldHVybiBjaGVja1BhdHRlcm4ocGF0dC52YWx1ZXMsY2hlY2spO1xuIH1cbmNhc2UnZXJyb3InOlxuY2FzZSdwcm9taXNlJzp7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgQSAke3Eoa2luZCl9IGNhbm5vdCBiZSBhIHBhdHRlcm5gKTtcbiB9XG5kZWZhdWx0OntcbmlmKG1heWJlTWF0Y2hIZWxwZXIoa2luZCkhPT11bmRlZmluZWQpe1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBBIHBhc3NhYmxlIG9mIGtpbmQgJHtxKGtpbmQpfSBpcyBub3QgYSBwYXR0ZXJuOiAke3BhdHR9YCk7XG5cbiB9fVxuXG4gfTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgaXNQYXR0ZXJuPShwYXR0KT0+Y2hlY2tQYXR0ZXJuKHBhdHQsaWRlbnRDaGVja2VyKTtcblxuLypcblxuICAgKi9cbmNvbnN0IGFzc2VydFBhdHRlcm49KHBhdHQpPT57XG5jaGVja1BhdHRlcm4ocGF0dCxhc3NlcnRDaGVja2VyKTtcbiB9O1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja01hdGNoZXM9KHNwZWNpbWVuLHBhdHRlcm4sY2hlY2ssbGFiZWw9dW5kZWZpbmVkKT0+XG4vL1xuYXBwbHlMYWJlbGluZ0Vycm9yKGNoZWNrTWF0Y2hlc0ludGVybmFsLFtzcGVjaW1lbixwYXR0ZXJuLGNoZWNrXSxsYWJlbCk7XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja01hdGNoZXNJbnRlcm5hbD0oc3BlY2ltZW4scGF0dCxjaGVjayk9Pntcbi8vXG5jb25zdCBwYXR0ZXJuS2luZD1raW5kT2YocGF0dCxjaGVjayk7XG5jb25zdCBzcGVjaW1lbktpbmQ9a2luZE9mKHNwZWNpbWVuKTsvL1xuc3dpdGNoKHBhdHRlcm5LaW5kKXtcbmNhc2UgdW5kZWZpbmVkOntcbnJldHVybiBGYWlsIGBwYXR0ZXJuIGV4cGVjdGVkOiAke3BhdHR9YDtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBGYWlsIGBwcm9taXNlcyBjYW5ub3QgYmUgcGF0dGVybnM6ICR7cGF0dH1gO1xuIH1cbmNhc2UnZXJyb3InOntcbnJldHVybiBGYWlsIGBlcnJvcnMgY2Fubm90IGJlIHBhdHRlcm5zOiAke3BhdHR9YDtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ251bGwnOlxuY2FzZSdib29sZWFuJzpcbmNhc2UnbnVtYmVyJzpcbmNhc2UnYmlnaW50JzpcbmNhc2Unc3RyaW5nJzpcbmNhc2Unc3ltYm9sJzpcbmNhc2UnY29weVNldCc6XG5jYXNlJ2NvcHlCYWcnOlxuY2FzZSdyZW1vdGFibGUnOntcbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4scGF0dCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbmlmKGlzS2V5KHBhdHQpKXtcbi8vXG4vL1xucmV0dXJuIGNoZWNrQXNLZXlQYXR0KHNwZWNpbWVuLHBhdHQsY2hlY2spO1xuIH1cbmlmKHNwZWNpbWVuS2luZCE9PSdjb3B5QXJyYXknKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgY29weUFycmF5IHRvIG1hdGNoIGEgY29weUFycmF5IHBhdHRlcm46ICR7cShcbnBhdHQpXG4gfWApO1xuXG4gfVxuY29uc3R7bGVuZ3RofT1wYXR0O1xuaWYoc3BlY2ltZW4ubGVuZ3RoIT09bGVuZ3RoKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgQXJyYXkgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGFzIGxvbmcgYXMgY29weUFycmF5IHBhdHRlcm46ICR7cShcbnBhdHQpXG4gfWApO1xuXG4gfVxucmV0dXJuIHBhdHQuZXZlcnkoKHAsaSk9PmNoZWNrTWF0Y2hlcyhzcGVjaW1lbltpXSxwLGNoZWNrLGkpKTtcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmlmKGlzS2V5KHBhdHQpKXtcbi8vXG4vL1xucmV0dXJuIGNoZWNrQXNLZXlQYXR0KHNwZWNpbWVuLHBhdHQsY2hlY2spO1xuIH1cbmlmKHNwZWNpbWVuS2luZCE9PSdjb3B5UmVjb3JkJyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSBhIGNvcHlSZWNvcmQgdG8gbWF0Y2ggYSBjb3B5UmVjb3JkIHBhdHRlcm46ICR7cShcbnBhdHQpXG4gfWApO1xuXG4gfVxuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBzcGVjaW1lbk5hbWVzPXJlY29yZE5hbWVzKHNwZWNpbWVuKTtcbmNvbnN0IHBhdHROYW1lcz1yZWNvcmROYW1lcyhwYXR0KTtcbmNvbnN0IG1pc3Npbmc9bGlzdERpZmZlcmVuY2UocGF0dE5hbWVzLHNwZWNpbWVuTmFtZXMpO1xuaWYobWlzc2luZy5sZW5ndGg+PTEpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgaGF2ZSBtaXNzaW5nIHByb3BlcnRpZXMgJHtxKG1pc3NpbmcpfWApO1xuXG4gfVxuY29uc3QgdW5leHBlY3RlZD1saXN0RGlmZmVyZW5jZShzcGVjaW1lbk5hbWVzLHBhdHROYW1lcyk7XG5pZih1bmV4cGVjdGVkLmxlbmd0aD49MSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBub3QgaGF2ZSB1bmV4cGVjdGVkIHByb3BlcnRpZXM6ICR7cShcbnVuZXhwZWN0ZWQpXG4gfWApO1xuXG4gfVxuY29uc3Qgc3BlY2ltZW5WYWx1ZXM9cmVjb3JkVmFsdWVzKHNwZWNpbWVuLHNwZWNpbWVuTmFtZXMpO1xuY29uc3QgcGF0dFZhbHVlcz1yZWNvcmRWYWx1ZXMocGF0dCxwYXR0TmFtZXMpO1xucmV0dXJuIHBhdHROYW1lcy5ldmVyeSgobGFiZWwsaSk9PlxuY2hlY2tNYXRjaGVzKHNwZWNpbWVuVmFsdWVzW2ldLHBhdHRWYWx1ZXNbaV0sY2hlY2ssbGFiZWwpKTtcblxuIH1cbmNhc2UnY29weU1hcCc6e1xuaWYoaXNLZXkocGF0dCkpe1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4scGF0dCxjaGVjayk7XG4gfVxuaWYoc3BlY2ltZW5LaW5kIT09J2NvcHlNYXAnKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgY29weU1hcCB0byBtYXRjaCBhIGNvcHlNYXAgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG4vL1xuY29uc3QgcGF0dEtleVNldD1jb3B5TWFwS2V5U2V0KHBhdHQpO1xuY29uc3Qgc3BlY2ltZW5LZXlTZXQ9Y29weU1hcEtleVNldChzcGVjaW1lbik7XG5pZighY2hlY2tNYXRjaGVzKHNwZWNpbWVuS2V5U2V0LHBhdHRLZXlTZXQsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCBwYXR0VmFsdWVzPVtdO1xuY29uc3Qgc3BlY2ltZW5WYWx1ZXM9W107XG5jb25zdCBlbnRyeVBhaXJzPWdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzKFxucGF0dCxcbnNwZWNpbWVuLFxuZ2V0Q29weU1hcEVudHJ5QXJyYXksXG51bmRlZmluZWQpO1xuXG5mb3IoY29uc3RbX2tleSxwYXR0VmFsdWUsc3BlY2ltZW5WYWx1ZV1vZiBlbnRyeVBhaXJzKXtcbnBhdHRWYWx1ZXMucHVzaChwYXR0VmFsdWUpO1xuc3BlY2ltZW5WYWx1ZXMucHVzaChzcGVjaW1lblZhbHVlKTtcbiB9XG5yZXR1cm4gY2hlY2tNYXRjaGVzKGhhcmRlbihzcGVjaW1lblZhbHVlcyksaGFyZGVuKHBhdHRWYWx1ZXMpLGNoZWNrKTtcbiB9XG5kZWZhdWx0OntcbmNvbnN0IG1hdGNoSGVscGVyPW1heWJlTWF0Y2hIZWxwZXIocGF0dGVybktpbmQpO1xuaWYobWF0Y2hIZWxwZXIpe1xucmV0dXJuIG1hdGNoSGVscGVyLmNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LnBheWxvYWQsY2hlY2spO1xuIH1cbnRocm93IEZhaWwgYGludGVybmFsOiBzaG91bGQgaGF2ZSByZWNvZ25pemVkICR7cShwYXR0ZXJuS2luZCl9IGA7XG4gfX1cblxuIH07XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgbWF0Y2hlcz0oc3BlY2ltZW4scGF0dCk9PlxuY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQsaWRlbnRDaGVja2VyKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtdXN0TWF0Y2g9KHNwZWNpbWVuLHBhdHQsbGFiZWw9dW5kZWZpbmVkKT0+e1xubGV0IGlubmVyRXJyb3I7XG50cnl7XG5pZihjaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dCxpZGVudENoZWNrZXIsdW5kZWZpbmVkKSl7XG5yZXR1cm47XG4gfVxuIH1jYXRjaChlcil7XG5pbm5lckVycm9yPWVyO1xuIH1cbi8vXG5jaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dCxhc3NlcnRDaGVja2VyLGxhYmVsKTtcbmNvbnN0IG91dGVyRXJyb3I9bWFrZUVycm9yKFxuWCBgaW50ZXJuYWw6ICR7bGFiZWx9OiBpbmNvbnNpc3RlbnQgcGF0dGVybiBtYXRjaDogJHtxKHBhdHQpfWApO1xuXG5pZihpbm5lckVycm9yIT09dW5kZWZpbmVkKXtcbmFubm90YXRlRXJyb3Iob3V0ZXJFcnJvcixYIGBjYXVzZWQgYnkgJHtpbm5lckVycm9yfWApO1xuIH1cbnRocm93IG91dGVyRXJyb3I7XG4gfTtcblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBnZXRSYW5rQ292ZXI9KHBhdHQsZW5jb2RlUGFzc2FibGUpPT57XG5pZihpc0tleShwYXR0KSl7XG5jb25zdCBlbmNvZGVkPWVuY29kZVBhc3NhYmxlKHBhdHQpO1xuaWYoZW5jb2RlZCE9PXVuZGVmaW5lZCl7XG5yZXR1cm5bZW5jb2RlZCwgYCR7ZW5jb2RlZH1+YF07XG4gfVxuIH1cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihwYXR0KTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdjb3B5QXJyYXknOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmJyZWFrO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYnJlYWs7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRhZz1nZXRUYWcocGF0dCk7XG5jb25zdCBtYXRjaEhlbHBlcj1tYXliZU1hdGNoSGVscGVyKHRhZyk7XG5pZihtYXRjaEhlbHBlcil7XG4vL1xuLy9cbnJldHVybiBtYXRjaEhlbHBlci5nZXRSYW5rQ292ZXIocGF0dC5wYXlsb2FkLGVuY29kZVBhc3NhYmxlKTtcbiB9XG5zd2l0Y2godGFnKXtcbmNhc2UnY29weVNldCc6e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmJyZWFrO1xuIH1cbmNhc2UnY29weU1hcCc6e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5icmVhaztcbiB9XG5kZWZhdWx0OntcbmJyZWFrOy8vXG4gfX1cblxuYnJlYWs7Ly9cbiB9XG5kZWZhdWx0OntcbmJyZWFrOy8vXG4gfX1cblxucmV0dXJuIGdldFBhc3NTdHlsZUNvdmVyKHBhc3NTdHlsZSk7XG4gfTtcblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgYXJyYXlFdmVyeU1hdGNoUGF0dGVybj0oYXJyYXkscGF0dCxjaGVjayxsYWJlbFByZWZpeD0nJyk9PntcbmlmKGlzS2luZChwYXR0LCdtYXRjaDphbnknKSl7XG4vL1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGFycmF5LmV2ZXJ5KChlbCxpKT0+XG5jaGVja01hdGNoZXMoZWwscGF0dCxjaGVjaywgYCR7bGFiZWxQcmVmaXh9WyR7aX1dYCkpO1xuXG4gfTtcblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoQW55SGVscGVyPUZhcignbWF0Y2g6YW55IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihfc3BlY2ltZW4sX21hdGNoZXJQYXlsb2FkLF9jaGVjayk9PnRydWUsXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihtYXRjaGVyUGF5bG9hZCxjaGVjayk9PlxubWF0Y2hlclBheWxvYWQ9PT11bmRlZmluZWR8fFxuY2hlY2soZmFsc2UsWCBgbWF0Y2g6YW55IHBheWxvYWQ6ICR7bWF0Y2hlclBheWxvYWR9IC0gTXVzdCBiZSB1bmRlZmluZWRgKSxcblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlsnJywneyddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoQW5kSGVscGVyPUZhcignbWF0Y2g6YW5kIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixwYXR0cyxjaGVjayk9PntcbnJldHVybiBwYXR0cy5ldmVyeSgocGF0dCk9PmNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LGNoZWNrKSk7XG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KGFsbGVnZWRQYXR0cyxjaGVjayk9PntcbmNvbnN0IGNoZWNrSXQ9KHBhdHQpPT5jaGVja1BhdHRlcm4ocGF0dCxjaGVjayk7XG5yZXR1cm4oXG4ocGFzc1N0eWxlT2YoYWxsZWdlZFBhdHRzKT09PSdjb3B5QXJyYXknfHxcbmNoZWNrKGZhbHNlLFggYE5lZWRzIGFycmF5IG9mIHN1Yi1wYXR0ZXJuczogJHtxKGFsbGVnZWRQYXR0cyl9YCkpJiZcbmFsbGVnZWRQYXR0cy5ldmVyeShjaGVja0l0KSk7XG5cbiB9LFxuXG5nZXRSYW5rQ292ZXI6KHBhdHRzLGVuY29kZVBhc3NhYmxlKT0+XG5pbnRlcnNlY3RSYW5rQ292ZXJzKFxuY29tcGFyZVJhbmssXG5wYXR0cy5tYXAoKHApPT5nZXRSYW5rQ292ZXIocCxlbmNvZGVQYXNzYWJsZSkpKX0pO1xuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoT3JIZWxwZXI9RmFyKCdtYXRjaDpvciBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4scGF0dHMsY2hlY2spPT57XG5jb25zdHtsZW5ndGh9PXBhdHRzO1xuaWYobGVuZ3RoPT09MCl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gbm8gcGF0dGVybiBkaXNqdW5jdHMgdG8gbWF0Y2g6ICR7cShwYXR0cyl9YCk7XG5cbiB9XG5pZihcbnBhdHRzLmxlbmd0aD09PTImJlxuIW1hdGNoZXMoc3BlY2ltZW4scGF0dHNbMF0pJiZcbmlzS2luZChwYXR0c1swXSwnbWF0Y2g6a2luZCcpJiZcbnBhdHRzWzBdLnBheWxvYWQ9PT0ndW5kZWZpbmVkJylcbntcbi8vXG4vL1xucmV0dXJuIGNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0c1sxXSxjaGVjayk7XG4gfVxuaWYocGF0dHMuc29tZSgocGF0dCk9Pm1hdGNoZXMoc3BlY2ltZW4scGF0dCkpKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBjaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgbWF0Y2ggb25lIG9mICR7cShwYXR0cyl9YCk7XG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbmRIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjoocGF0dHMsZW5jb2RlUGFzc2FibGUpPT5cbnVuaW9uUmFua0NvdmVycyhcbmNvbXBhcmVSYW5rLFxucGF0dHMubWFwKChwKT0+Z2V0UmFua0NvdmVyKHAsZW5jb2RlUGFzc2FibGUpKSl9KTtcblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaE5vdEhlbHBlcj1GYXIoJ21hdGNoOm5vdCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4scGF0dCxjaGVjayk9PntcbmlmKG1hdGNoZXMoc3BlY2ltZW4scGF0dCkpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgZmFpbCBuZWdhdGVkIHBhdHRlcm46ICR7cShwYXR0KX1gKTtcblxuIH1lbHNle1xucmV0dXJuIHRydWU7XG4gfVxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOmNoZWNrUGF0dGVybixcblxuZ2V0UmFua0NvdmVyOihfcGF0dCxfZW5jb2RlUGFzc2FibGUpPT5bJycsJ3snXX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFNjYWxhckhlbHBlcj1GYXIoJ21hdGNoOnNjYWxhciBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sX21hdGNoZXJQYXlsb2FkLGNoZWNrKT0+XG5jaGVja1NjYWxhcktleShzcGVjaW1lbixjaGVjayksXG5cbmNoZWNrSXNXZWxsRm9ybWVkOm1hdGNoQW55SGVscGVyLmNoZWNrSXNXZWxsRm9ybWVkLFxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+WydhJywnen4nXX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEtleUhlbHBlcj1GYXIoJ21hdGNoOmtleSBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sX21hdGNoZXJQYXlsb2FkLGNoZWNrKT0+XG5jaGVja0tleShzcGVjaW1lbixjaGVjayksXG5cbmNoZWNrSXNXZWxsRm9ybWVkOm1hdGNoQW55SGVscGVyLmNoZWNrSXNXZWxsRm9ybWVkLFxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+WydhJywnen4nXX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFBhdHRlcm5IZWxwZXI9RmFyKCdtYXRjaDpwYXR0ZXJuIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsY2hlY2spPT5cbmNoZWNrUGF0dGVybihzcGVjaW1lbixjaGVjayksXG5cbmNoZWNrSXNXZWxsRm9ybWVkOm1hdGNoQW55SGVscGVyLmNoZWNrSXNXZWxsRm9ybWVkLFxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+WydhJywnen4nXX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEtpbmRIZWxwZXI9RmFyKCdtYXRjaDpraW5kIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOmNoZWNrS2luZCxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KGFsbGVnZWRLZXlLaW5kLGNoZWNrKT0+XG50eXBlb2YgYWxsZWdlZEtleUtpbmQ9PT0nc3RyaW5nJ3x8XG5jaGVjayhcbmZhbHNlLFxuWCBgbWF0Y2g6a2luZDogcGF5bG9hZDogJHthbGxlZ2VkS2V5S2luZH0gLSBBIGtpbmQgbmFtZSBtdXN0IGJlIGEgc3RyaW5nYCksXG5cblxuZ2V0UmFua0NvdmVyOihraW5kLF9lbmNvZGVQYXNzYWJsZSk9PntcbmxldCBzdHlsZTtcbnN3aXRjaChraW5kKXtcbmNhc2UnY29weVNldCc6XG5jYXNlJ2NvcHlNYXAnOntcbnN0eWxlPSd0YWdnZWQnO1xuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG5zdHlsZT1raW5kO1xuYnJlYWs7XG4gfX1cblxucmV0dXJuIGdldFBhc3NTdHlsZUNvdmVyKHN0eWxlKTtcbiB9fSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoVGFnZ2VkSGVscGVyPUZhcignbWF0Y2g6dGFnZ2VkIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbdGFnUGF0dCxwYXlsb2FkUGF0dF0sY2hlY2spPT57XG5pZihwYXNzU3R5bGVPZihzcGVjaW1lbikhPT0ndGFnZ2VkJyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYEV4cGVjdGVkIHRhZ2dlZCBvYmplY3QsIG5vdCAke3EoXG5wYXNzU3R5bGVPZihzcGVjaW1lbikpXG4gfTogJHtzcGVjaW1lbn1gKTtcblxuIH1cbnJldHVybihcbmNoZWNrTWF0Y2hlcyhnZXRUYWcoc3BlY2ltZW4pLHRhZ1BhdHQsY2hlY2ssJ3RhZycpJiZcbmNoZWNrTWF0Y2hlcyhzcGVjaW1lbi5wYXlsb2FkLHBheWxvYWRQYXR0LGNoZWNrLCdwYXlsb2FkJykpO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrTWF0Y2hlcyhcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKSxNTS5wYXR0ZXJuKCldKSxcbmNoZWNrLFxuJ21hdGNoOnRhZ2dlZCBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfa2luZCxfZW5jb2RlUGFzc2FibGUpPT5nZXRQYXNzU3R5bGVDb3ZlcigndGFnZ2VkJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hCaWdpbnRIZWxwZXI9RmFyKCdtYXRjaDpiaWdpbnQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFtsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e2RlY2ltYWxEaWdpdHNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnYmlnaW50JyxjaGVjaykmJlxuY2hlY2tEZWNpbWFsRGlnaXRzTGltaXQoc3BlY2ltZW4sZGVjaW1hbERpZ2l0c0xpbWl0LGNoZWNrKSk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtdKSxcbmNoZWNrLFxuJ21hdGNoOmJpZ2ludCBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlxuZ2V0UGFzc1N0eWxlQ292ZXIoJ2JpZ2ludCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoTmF0SGVscGVyPUZhcignbWF0Y2g6bmF0IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtkZWNpbWFsRGlnaXRzTGltaXR9PWxpbWl0KGxpbWl0cyk7XG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ2JpZ2ludCcsY2hlY2spJiZcbmNoZWNrKFxuLyogICAgICAgICAgICAgICAgICovc3BlY2ltZW4+PTBuLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIG5vbi1uZWdhdGl2ZWApJiZcblxuY2hlY2tEZWNpbWFsRGlnaXRzTGltaXQoc3BlY2ltZW4sZGVjaW1hbERpZ2l0c0xpbWl0LGNoZWNrKSk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtdKSxcbmNoZWNrLFxuJ21hdGNoOm5hdCBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlxuLy9cbmdldFBhc3NTdHlsZUNvdmVyKCdiaWdpbnQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFN0cmluZ0hlbHBlcj1GYXIoJ21hdGNoOnN0cmluZyBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2xpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7c3RyaW5nTGVuZ3RoTGltaXR9PWxpbWl0KGxpbWl0cyk7XG4vL1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdzdHJpbmcnLGNoZWNrKSYmKFxuLy9cbi8qICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLmxlbmd0aDw9c3RyaW5nTGVuZ3RoTGltaXR8fFxuY2hlY2soXG5mYWxzZSxcblggYHN0cmluZyAke3NwZWNpbWVufSBtdXN0IG5vdCBiZSBiaWdnZXIgdGhhbiAke3N0cmluZ0xlbmd0aExpbWl0fWApKSk7XG5cblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW10pLFxuY2hlY2ssXG4nbWF0Y2g6c3RyaW5nIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+XG5nZXRQYXNzU3R5bGVDb3Zlcignc3RyaW5nJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTeW1ib2xIZWxwZXI9RmFyKCdtYXRjaDpzeW1ib2wgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFtsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e3N5bWJvbE5hbWVMZW5ndGhMaW1pdH09bGltaXQobGltaXRzKTtcbmlmKCFjaGVja0tpbmQoc3BlY2ltZW4sJ3N5bWJvbCcsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCBzeW1ib2xOYW1lPW5hbWVGb3JQYXNzYWJsZVN5bWJvbChzcGVjaW1lbik7XG5cbmlmKHR5cGVvZiBzeW1ib2xOYW1lIT09J3N0cmluZycpe1xudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFBhc3NhYmxlIHN5bWJvbCAke3NwZWNpbWVufSBtdXN0IGhhdmUgYSBwYXNzYWJsZSBuYW1lYDtcbiB9XG5yZXR1cm4gY2hlY2soXG5zeW1ib2xOYW1lLmxlbmd0aDw9c3ltYm9sTmFtZUxlbmd0aExpbWl0LFxuWCBgU3ltYm9sIG5hbWUgJHtxKFxuc3ltYm9sTmFtZSlcbiB9IG11c3Qgbm90IGJlIGJpZ2dlciB0aGFuICR7c3ltYm9sTmFtZUxlbmd0aExpbWl0fWApO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbXSksXG5jaGVjayxcbidtYXRjaDpzeW1ib2wgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdzeW1ib2wnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFJlbW90YWJsZUhlbHBlcj1GYXIoJ21hdGNoOnJlbW90YWJsZSBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4scmVtb3RhYmxlRGVzYyxjaGVjayk9PntcbmlmKGlzS2luZChzcGVjaW1lbiwncmVtb3RhYmxlJykpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoY2hlY2s9PT1pZGVudENoZWNrZXIpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0e2xhYmVsfT1yZW1vdGFibGVEZXNjO1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHNwZWNpbWVuKTtcbmNvbnN0IGtpbmREZXRhaWxzPVxucGFzc1N0eWxlIT09J3RhZ2dlZCc/XG4vL1xuYihwYXNzU3R5bGUpOlxuLy9cbi8vXG5xKGdldFRhZyhzcGVjaW1lbikpO1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG4vL1xuLy9cblggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSBhIHJlbW90YWJsZSAke2IobGFiZWwpfSwgbm90ICR7a2luZERldGFpbHN9YCk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDooYWxsZWdlZFJlbW90YWJsZURlc2MsY2hlY2spPT5cbmNoZWNrTWF0Y2hlcyhcbmFsbGVnZWRSZW1vdGFibGVEZXNjLFxuaGFyZGVuKHtsYWJlbDpNTS5zdHJpbmcoKX0pLFxuY2hlY2ssXG4nbWF0Y2g6cmVtb3RhYmxlIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9yZW1vdGFibGVEZXNjLF9lbmNvZGVQYXNzYWJsZSk9PlxuZ2V0UGFzc1N0eWxlQ292ZXIoJ3JlbW90YWJsZScpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoTFRFSGVscGVyPUZhcignbWF0Y2g6bHRlIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyaWdodE9wZXJhbmQsY2hlY2spPT5cbmtleUxURShzcGVjaW1lbixyaWdodE9wZXJhbmQpfHxcbmNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSA8PSAke3JpZ2h0T3BlcmFuZH1gKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tLZXksXG5cbmdldFJhbmtDb3ZlcjoocmlnaHRPcGVyYW5kLGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJpZ2h0T3BlcmFuZCk7XG4vL1xuLy9cbi8vXG5sZXRbbGVmdEJvdW5kLHJpZ2h0Qm91bmRdPWdldFBhc3NTdHlsZUNvdmVyKHBhc3NTdHlsZSk7XG5jb25zdCBuZXdSaWdodEJvdW5kPSBgJHtlbmNvZGVQYXNzYWJsZShyaWdodE9wZXJhbmQpfX5gO1xuaWYobmV3UmlnaHRCb3VuZCE9PXVuZGVmaW5lZCl7XG5yaWdodEJvdW5kPW5ld1JpZ2h0Qm91bmQ7XG4gfVxucmV0dXJuW2xlZnRCb3VuZCxyaWdodEJvdW5kXTtcbiB9fSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoTFRIZWxwZXI9RmFyKCdtYXRjaDpsdCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4scmlnaHRPcGVyYW5kLGNoZWNrKT0+XG5rZXlMVChzcGVjaW1lbixyaWdodE9wZXJhbmQpfHxcbmNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSA8ICR7cmlnaHRPcGVyYW5kfWApLFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja0tleSxcblxuZ2V0UmFua0NvdmVyOm1hdGNoTFRFSGVscGVyLmdldFJhbmtDb3Zlcn0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEdURUhlbHBlcj1GYXIoJ21hdGNoOmd0ZSBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4scmlnaHRPcGVyYW5kLGNoZWNrKT0+XG5rZXlHVEUoc3BlY2ltZW4scmlnaHRPcGVyYW5kKXx8XG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmUgPj0gJHtyaWdodE9wZXJhbmR9YCksXG5cbmNoZWNrSXNXZWxsRm9ybWVkOmNoZWNrS2V5LFxuXG5nZXRSYW5rQ292ZXI6KHJpZ2h0T3BlcmFuZCxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihyaWdodE9wZXJhbmQpO1xuLy9cbi8vXG4vL1xubGV0W2xlZnRCb3VuZCxyaWdodEJvdW5kXT1nZXRQYXNzU3R5bGVDb3ZlcihwYXNzU3R5bGUpO1xuY29uc3QgbmV3TGVmdEJvdW5kPWVuY29kZVBhc3NhYmxlKHJpZ2h0T3BlcmFuZCk7XG5pZihuZXdMZWZ0Qm91bmQhPT11bmRlZmluZWQpe1xubGVmdEJvdW5kPW5ld0xlZnRCb3VuZDtcbiB9XG5yZXR1cm5bbGVmdEJvdW5kLHJpZ2h0Qm91bmRdO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hHVEhlbHBlcj1GYXIoJ21hdGNoOmd0IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyaWdodE9wZXJhbmQsY2hlY2spPT5cbmtleUdUKHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCl8fFxuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlID4gJHtyaWdodE9wZXJhbmR9YCksXG5cbmNoZWNrSXNXZWxsRm9ybWVkOmNoZWNrS2V5LFxuXG5nZXRSYW5rQ292ZXI6bWF0Y2hHVEVIZWxwZXIuZ2V0UmFua0NvdmVyfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoUmVjb3JkT2ZIZWxwZXI9RmFyKCdtYXRjaDpyZWNvcmRPZiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltrZXlQYXR0LHZhbHVlUGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxcbmNoZWNrKT0+XG57XG5jb25zdHtudW1Qcm9wZXJ0aWVzTGltaXQscHJvcGVydHlOYW1lTGVuZ3RoTGltaXR9PWxpbWl0KGxpbWl0cyk7XG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ2NvcHlSZWNvcmQnLGNoZWNrKSYmXG5jaGVjayhcbm93bktleXMoc3BlY2ltZW4pLmxlbmd0aDw9bnVtUHJvcGVydGllc0xpbWl0LFxuWCBgTXVzdCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtxKFxubnVtUHJvcGVydGllc0xpbWl0KVxuIH0gcHJvcGVydGllczogJHtzcGVjaW1lbn1gKSYmXG5cbmVudHJpZXMoc3BlY2ltZW4pLmV2ZXJ5KFxuKFtrZXksdmFsdWVdKT0+XG5hcHBseUxhYmVsaW5nRXJyb3IoXG5jaGVjayxcbltcbmtleS5sZW5ndGg8PXByb3BlcnR5TmFtZUxlbmd0aExpbWl0LFxuWCBgUHJvcGVydHkgbmFtZSBtdXN0IG5vdCBiZSBsb25nZXIgdGhhbiAke3EoXG5wcm9wZXJ0eU5hbWVMZW5ndGhMaW1pdClcbiB9YF0sXG5cbmtleSkmJlxuXG5jaGVja01hdGNoZXMoXG5oYXJkZW4oW2tleSx2YWx1ZV0pLFxuaGFyZGVuKFtrZXlQYXR0LHZhbHVlUGF0dF0pLFxuY2hlY2ssXG5rZXkpKSk7XG5cblxuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpLE1NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6cmVjb3JkT2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX2VudHJ5UGF0dCk9PmdldFBhc3NTdHlsZUNvdmVyKCdjb3B5UmVjb3JkJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hBcnJheU9mSGVscGVyPUZhcignbWF0Y2g6YXJyYXlPZiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW3N1YlBhdHQsbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHthcnJheUxlbmd0aExpbWl0fT1saW1pdChsaW1pdHMpO1xuLy9cbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weUFycmF5JyxjaGVjaykmJihcbi8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4ubGVuZ3RoPD1hcnJheUxlbmd0aExpbWl0fHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBBcnJheSBsZW5ndGggJHtzcGVjaW1lbi5sZW5ndGh9IG11c3QgYmUgPD0gbGltaXQgJHthcnJheUxlbmd0aExpbWl0fWApKSYmXG5cbmFycmF5RXZlcnlNYXRjaFBhdHRlcm4oc3BlY2ltZW4sc3ViUGF0dCxjaGVjaykpO1xuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDphcnJheU9mIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KCk9PmdldFBhc3NTdHlsZUNvdmVyKCdjb3B5QXJyYXknKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFNldE9mSGVscGVyPUZhcignbWF0Y2g6c2V0T2YgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFtrZXlQYXR0LGxpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7bnVtU2V0RWxlbWVudHNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weVNldCcsY2hlY2spJiZcbmNoZWNrKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5wYXlsb2FkLmxlbmd0aDxudW1TZXRFbGVtZW50c0xpbWl0LFxuWCBgU2V0IG11c3Qgbm90IGhhdmUgbW9yZSB0aGFuICR7cShudW1TZXRFbGVtZW50c0xpbWl0KX0gZWxlbWVudHM6ICR7XG5zcGVjaW1lbi5wYXlsb2FkLmxlbmd0aFxuIH1gKSYmXG5cbmFycmF5RXZlcnlNYXRjaFBhdHRlcm4oc3BlY2ltZW4ucGF5bG9hZCxrZXlQYXR0LGNoZWNrLCdzZXQgZWxlbWVudHMnKSk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCldKSxcbmNoZWNrLFxuJ21hdGNoOnNldE9mIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KCk9PmdldFBhc3NTdHlsZUNvdmVyKCd0YWdnZWQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEJhZ09mSGVscGVyPUZhcignbWF0Y2g6YmFnT2YgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KFxuc3BlY2ltZW4sXG5ba2V5UGF0dCxjb3VudFBhdHQsbGltaXRzPXVuZGVmaW5lZF0sXG5jaGVjayk9Plxue1xuY29uc3R7bnVtVW5pcXVlQmFnRWxlbWVudHNMaW1pdCxkZWNpbWFsRGlnaXRzTGltaXR9PWxpbWl0KGxpbWl0cyk7XG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ2NvcHlCYWcnLGNoZWNrKSYmXG5jaGVjayhcbi8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4ucGF5bG9hZC5sZW5ndGg8PVxubnVtVW5pcXVlQmFnRWxlbWVudHNMaW1pdCxcblggYEJhZyBtdXN0IG5vdCBoYXZlIG1vcmUgdGhhbiAke3EoXG5udW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0KVxuIH0gdW5pcXVlIGVsZW1lbnRzOiAke3NwZWNpbWVufWApJiZcblxuc3BlY2ltZW4ucGF5bG9hZC5ldmVyeShcbihba2V5LGNvdW50XSxpKT0+XG5jaGVja01hdGNoZXMoa2V5LGtleVBhdHQsY2hlY2ssIGBiYWcga2V5c1ske2l9XWApJiZcbmFwcGx5TGFiZWxpbmdFcnJvcihcbmNoZWNrRGVjaW1hbERpZ2l0c0xpbWl0LFxuW2NvdW50LGRlY2ltYWxEaWdpdHNMaW1pdCxjaGVja10sXG4gYGJhZyBjb3VudHNbJHtpfV1gKSYmXG5cbmNoZWNrTWF0Y2hlcyhjb3VudCxjb3VudFBhdHQsY2hlY2ssIGBiYWcgY291bnRzWyR7aX1dYCkpKTtcblxuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpLE1NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6YmFnT2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooKT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ3RhZ2dlZCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoTWFwT2ZIZWxwZXI9RmFyKCdtYXRjaDptYXBPZiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltrZXlQYXR0LHZhbHVlUGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxcbmNoZWNrKT0+XG57XG5jb25zdHtudW1NYXBFbnRyaWVzTGltaXR9PWxpbWl0KGxpbWl0cyk7XG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ2NvcHlNYXAnLGNoZWNrKSYmXG5jaGVjayhcbi8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4ucGF5bG9hZC5rZXlzLmxlbmd0aDw9XG5udW1NYXBFbnRyaWVzTGltaXQsXG5YIGBDb3B5TWFwIG11c3QgaGF2ZSBubyBtb3JlIHRoYW4gJHtxKFxubnVtTWFwRW50cmllc0xpbWl0KVxuIH0gZW50cmllczogJHtzcGVjaW1lbn1gKSYmXG5cbmFycmF5RXZlcnlNYXRjaFBhdHRlcm4oXG5zcGVjaW1lbi5wYXlsb2FkLmtleXMsXG5rZXlQYXR0LFxuY2hlY2ssXG4nbWFwIGtleXMnKSYmXG5cbmFycmF5RXZlcnlNYXRjaFBhdHRlcm4oXG5zcGVjaW1lbi5wYXlsb2FkLnZhbHVlcyxcbnZhbHVlUGF0dCxcbmNoZWNrLFxuJ21hcCB2YWx1ZXMnKSk7XG5cblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKSxNTS5wYXR0ZXJuKCldKSxcbmNoZWNrLFxuJ21hdGNoOm1hcE9mIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9lbnRyeVBhdHQpPT5nZXRQYXNzU3R5bGVDb3ZlcigndGFnZ2VkJyl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBzcGxpdEFycmF5UGFydHM9KHNwZWNpbWVuLHJlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQpPT57XG5jb25zdCBudW1SZXF1aXJlZD1yZXF1aXJlZFBhdHQubGVuZ3RoO1xuY29uc3QgbnVtT3B0aW9uYWw9b3B0aW9uYWxQYXR0Lmxlbmd0aDtcbmNvbnN0IHJlcXVpcmVkU3BlY2ltZW49c3BlY2ltZW4uc2xpY2UoMCxudW1SZXF1aXJlZCk7XG5jb25zdCBvcHRpb25hbFNwZWNpbWVuPXNwZWNpbWVuLnNsaWNlKFxubnVtUmVxdWlyZWQsXG5udW1SZXF1aXJlZCtudW1PcHRpb25hbCk7XG5cbmNvbnN0IHJlc3RTcGVjaW1lbj1zcGVjaW1lbi5zbGljZShudW1SZXF1aXJlZCtudW1PcHRpb25hbCk7XG5yZXR1cm4gaGFyZGVuKHtyZXF1aXJlZFNwZWNpbWVuLG9wdGlvbmFsU3BlY2ltZW4scmVzdFNwZWNpbWVufSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGFkYXB0QXJyYXlQYXR0ZXJuPShvcHRpb25hbFBhdHQsbGVuZ3RoKT0+XG5oYXJkZW4ob3B0aW9uYWxQYXR0LnNsaWNlKDAsbGVuZ3RoKS5tYXAoKHBhdHQpPT5NTS5vcHQocGF0dCkpKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU3BsaXRBcnJheUhlbHBlcj1GYXIoJ21hdGNoOnNwbGl0QXJyYXkgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KFxuc3BlY2ltZW4sXG5bcmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dD1bXSxyZXN0UGF0dD1NTS5hbnkoKV0sXG5jaGVjayk9Plxue1xuaWYoIWNoZWNrS2luZChzcGVjaW1lbiwnY29weUFycmF5JyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0e3JlcXVpcmVkU3BlY2ltZW4sb3B0aW9uYWxTcGVjaW1lbixyZXN0U3BlY2ltZW59PVxuc3BsaXRBcnJheVBhcnRzKHNwZWNpbWVuLHJlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQpO1xuY29uc3QgcGFydGlhbFBhdHQ9YWRhcHRBcnJheVBhdHRlcm4oXG5vcHRpb25hbFBhdHQsXG5vcHRpb25hbFNwZWNpbWVuLmxlbmd0aCk7XG5cbmxldCBhcmdOdW09MDtcbnJldHVybihcbihyZXF1aXJlZFNwZWNpbWVuLmxlbmd0aD09PXJlcXVpcmVkUGF0dC5sZW5ndGh8fFxuY2hlY2soXG5mYWxzZSxcblggYEV4cGVjdGVkIGF0IGxlYXN0ICR7cShcbnJlcXVpcmVkUGF0dC5sZW5ndGgpXG4gfSBhcmd1bWVudHM6ICR7c3BlY2ltZW59YCkpJiZcblxucmVxdWlyZWRQYXR0LmV2ZXJ5KChwLGkpPT5cbi8vXG5jaGVja01hdGNoZXMocmVxdWlyZWRTcGVjaW1lbltpXSxwLGNoZWNrLCBgYXJnICR7YXJnTnVtKyt9YCkpJiZcblxucGFydGlhbFBhdHQuZXZlcnkoKHAsaSk9PlxuLy9cbmNoZWNrTWF0Y2hlcyhvcHRpb25hbFNwZWNpbWVuW2ldLHAsY2hlY2ssIGBhcmcgJHthcmdOdW0rK30/YCkpJiZcblxuY2hlY2tNYXRjaGVzKHJlc3RTcGVjaW1lbixyZXN0UGF0dCxjaGVjaywnLi4ucmVzdCcpKTtcblxuIH0sXG5cbi8qXG5cblxuICAgICAqL1xuY2hlY2tJc1dlbGxGb3JtZWQ6KHNwbGl0QXJyYXksY2hlY2spPT57XG5pZihcbnBhc3NTdHlsZU9mKHNwbGl0QXJyYXkpPT09J2NvcHlBcnJheScmJihcbnNwbGl0QXJyYXkubGVuZ3RoPj0xfHxzcGxpdEFycmF5Lmxlbmd0aDw9MykpXG57XG5jb25zdFtyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0PXVuZGVmaW5lZCxyZXN0UGF0dD11bmRlZmluZWRdPVxuc3BsaXRBcnJheTtcbmlmKFxuaXNQYXR0ZXJuKHJlcXVpcmVkUGF0dCkmJlxucGFzc1N0eWxlT2YocmVxdWlyZWRQYXR0KT09PSdjb3B5QXJyYXknJiYoXG5vcHRpb25hbFBhdHQ9PT11bmRlZmluZWR8fFxuaXNQYXR0ZXJuKG9wdGlvbmFsUGF0dCkmJlxucGFzc1N0eWxlT2Yob3B0aW9uYWxQYXR0KT09PSdjb3B5QXJyYXknKSYmKFxucmVzdFBhdHQ9PT11bmRlZmluZWR8fGlzUGF0dGVybihyZXN0UGF0dCkpKVxue1xucmV0dXJuIHRydWU7XG4gfVxuIH1cbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgTXVzdCBiZSBhbiBhcnJheSBvZiBhIHJlcXVpcmVkUGF0dCBhcnJheSwgYW4gb3B0aW9uYWwgb3B0aW9uYWxQYXR0IGFycmF5LCBhbmQgYW4gb3B0aW9uYWwgcmVzdFBhdHQ6ICR7cShcbnNwbGl0QXJyYXkpXG4gfWApO1xuXG4gfSxcblxuZ2V0UmFua0NvdmVyOihbXG5fcmVxdWlyZWRQYXR0LFxuX29wdGlvbmFsUGF0dD11bmRlZmluZWQsXG5fcmVzdFBhdHQ9dW5kZWZpbmVkXSk9PlxuZ2V0UGFzc1N0eWxlQ292ZXIoJ2NvcHlBcnJheScpfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgc3BsaXRSZWNvcmRQYXJ0cz0oc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk9Pntcbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVxdWlyZWRFbnRyaWVzPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9wdGlvbmFsRW50cmllcz1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN0RW50cmllcz1bXTtcbmZvcihjb25zdFtuYW1lLHZhbHVlXW9mIGVudHJpZXMoc3BlY2ltZW4pKXtcbmlmKGhhc093blByb3BlcnR5T2YocmVxdWlyZWRQYXR0LG5hbWUpKXtcbnJlcXVpcmVkRW50cmllcy5wdXNoKFtuYW1lLHZhbHVlXSk7XG4gfWVsc2UgaWYoaGFzT3duUHJvcGVydHlPZihvcHRpb25hbFBhdHQsbmFtZSkpe1xub3B0aW9uYWxFbnRyaWVzLnB1c2goW25hbWUsdmFsdWVdKTtcbiB9ZWxzZXtcbnJlc3RFbnRyaWVzLnB1c2goW25hbWUsdmFsdWVdKTtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7XG5yZXF1aXJlZFNwZWNpbWVuOmZyb21VbmlxdWVFbnRyaWVzKHJlcXVpcmVkRW50cmllcyksXG5vcHRpb25hbFNwZWNpbWVuOmZyb21VbmlxdWVFbnRyaWVzKG9wdGlvbmFsRW50cmllcyksXG5yZXN0U3BlY2ltZW46ZnJvbVVuaXF1ZUVudHJpZXMocmVzdEVudHJpZXMpfSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgYWRhcHRSZWNvcmRQYXR0ZXJuPShvcHRpb25hbFBhdHQsbmFtZXMpPT5cbmZyb21VbmlxdWVFbnRyaWVzKG5hbWVzLm1hcCgobmFtZSk9PltuYW1lLE1NLm9wdChvcHRpb25hbFBhdHRbbmFtZV0pXSkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTcGxpdFJlY29yZEhlbHBlcj1GYXIoJ21hdGNoOnNwbGl0UmVjb3JkIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW3JlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQ9e30scmVzdFBhdHQ9TU0uYW55KCldLFxuY2hlY2spPT5cbntcbmlmKCFjaGVja0tpbmQoc3BlY2ltZW4sJ2NvcHlSZWNvcmQnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7cmVxdWlyZWRTcGVjaW1lbixvcHRpb25hbFNwZWNpbWVuLHJlc3RTcGVjaW1lbn09XG5zcGxpdFJlY29yZFBhcnRzKHNwZWNpbWVuLHJlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQpO1xuXG5jb25zdCBwYXJ0aWFsTmFtZXM9LyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKG9wdGlvbmFsU3BlY2ltZW4pO1xuY29uc3QgcGFydGlhbFBhdHQ9YWRhcHRSZWNvcmRQYXR0ZXJuKG9wdGlvbmFsUGF0dCxwYXJ0aWFsTmFtZXMpO1xucmV0dXJuKFxuY2hlY2tNYXRjaGVzKHJlcXVpcmVkU3BlY2ltZW4scmVxdWlyZWRQYXR0LGNoZWNrKSYmXG5wYXJ0aWFsTmFtZXMuZXZlcnkoKG5hbWUpPT5cbmNoZWNrTWF0Y2hlcyhcbm9wdGlvbmFsU3BlY2ltZW5bbmFtZV0sXG5wYXJ0aWFsUGF0dFtuYW1lXSxcbmNoZWNrLFxuIGAke25hbWV9P2ApKSYmXG5cblxuY2hlY2tNYXRjaGVzKHJlc3RTcGVjaW1lbixyZXN0UGF0dCxjaGVjaywnLi4ucmVzdCcpKTtcblxuIH0sXG5cbi8qXG5cblxuICAgICAqL1xuY2hlY2tJc1dlbGxGb3JtZWQ6KHNwbGl0QXJyYXksY2hlY2spPT57XG5pZihcbnBhc3NTdHlsZU9mKHNwbGl0QXJyYXkpPT09J2NvcHlBcnJheScmJihcbnNwbGl0QXJyYXkubGVuZ3RoPj0xfHxzcGxpdEFycmF5Lmxlbmd0aDw9MykpXG57XG5jb25zdFtyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0PXVuZGVmaW5lZCxyZXN0UGF0dD11bmRlZmluZWRdPVxuc3BsaXRBcnJheTtcbmlmKFxuaXNQYXR0ZXJuKHJlcXVpcmVkUGF0dCkmJlxucGFzc1N0eWxlT2YocmVxdWlyZWRQYXR0KT09PSdjb3B5UmVjb3JkJyYmKFxub3B0aW9uYWxQYXR0PT09dW5kZWZpbmVkfHxcbmlzUGF0dGVybihvcHRpb25hbFBhdHQpJiZcbnBhc3NTdHlsZU9mKG9wdGlvbmFsUGF0dCk9PT0nY29weVJlY29yZCcpJiYoXG5yZXN0UGF0dD09PXVuZGVmaW5lZHx8aXNQYXR0ZXJuKHJlc3RQYXR0KSkpXG57XG5yZXR1cm4gdHJ1ZTtcbiB9XG4gfVxucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBNdXN0IGJlIGFuIGFycmF5IG9mIGEgcmVxdWlyZWRQYXR0IHJlY29yZCwgYW4gb3B0aW9uYWwgb3B0aW9uYWxQYXR0IHJlY29yZCwgYW5kIGFuIG9wdGlvbmFsIHJlc3RQYXR0OiAke3EoXG5zcGxpdEFycmF5KVxuIH1gKTtcblxuIH0sXG5cbmdldFJhbmtDb3ZlcjooW1xucmVxdWlyZWRQYXR0LFxuX29wdGlvbmFsUGF0dD11bmRlZmluZWQsXG5fcmVzdFBhdHQ9dW5kZWZpbmVkXSk9PlxuZ2V0UGFzc1N0eWxlQ292ZXIocGFzc1N0eWxlT2YocmVxdWlyZWRQYXR0KSl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEhlbHBlcnNCeU1hdGNoVGFnPWhhcmRlbih7XG4nbWF0Y2g6YW55JzptYXRjaEFueUhlbHBlcixcbidtYXRjaDphbmQnOm1hdGNoQW5kSGVscGVyLFxuJ21hdGNoOm9yJzptYXRjaE9ySGVscGVyLFxuJ21hdGNoOm5vdCc6bWF0Y2hOb3RIZWxwZXIsXG5cbidtYXRjaDpzY2FsYXInOm1hdGNoU2NhbGFySGVscGVyLFxuJ21hdGNoOmtleSc6bWF0Y2hLZXlIZWxwZXIsXG4nbWF0Y2g6cGF0dGVybic6bWF0Y2hQYXR0ZXJuSGVscGVyLFxuJ21hdGNoOmtpbmQnOm1hdGNoS2luZEhlbHBlcixcbidtYXRjaDp0YWdnZWQnOm1hdGNoVGFnZ2VkSGVscGVyLFxuJ21hdGNoOmJpZ2ludCc6bWF0Y2hCaWdpbnRIZWxwZXIsXG4nbWF0Y2g6bmF0JzptYXRjaE5hdEhlbHBlcixcbidtYXRjaDpzdHJpbmcnOm1hdGNoU3RyaW5nSGVscGVyLFxuJ21hdGNoOnN5bWJvbCc6bWF0Y2hTeW1ib2xIZWxwZXIsXG4nbWF0Y2g6cmVtb3RhYmxlJzptYXRjaFJlbW90YWJsZUhlbHBlcixcblxuJ21hdGNoOmx0JzptYXRjaExUSGVscGVyLFxuJ21hdGNoOmx0ZSc6bWF0Y2hMVEVIZWxwZXIsXG4nbWF0Y2g6Z3RlJzptYXRjaEdURUhlbHBlcixcbidtYXRjaDpndCc6bWF0Y2hHVEhlbHBlcixcblxuJ21hdGNoOmFycmF5T2YnOm1hdGNoQXJyYXlPZkhlbHBlcixcbidtYXRjaDpyZWNvcmRPZic6bWF0Y2hSZWNvcmRPZkhlbHBlcixcbidtYXRjaDpzZXRPZic6bWF0Y2hTZXRPZkhlbHBlcixcbidtYXRjaDpiYWdPZic6bWF0Y2hCYWdPZkhlbHBlcixcbidtYXRjaDptYXBPZic6bWF0Y2hNYXBPZkhlbHBlcixcbidtYXRjaDpzcGxpdEFycmF5JzptYXRjaFNwbGl0QXJyYXlIZWxwZXIsXG4nbWF0Y2g6c3BsaXRSZWNvcmQnOm1hdGNoU3BsaXRSZWNvcmRIZWxwZXJ9KTtcblxuXG5jb25zdCBtYWtlTWF0Y2hlcj0odGFnLHBheWxvYWQpPT57XG5jb25zdCBtYXRjaGVyPW1ha2VUYWdnZWQodGFnLHBheWxvYWQpO1xuYXNzZXJ0UGF0dGVybihtYXRjaGVyKTtcbnJldHVybiBtYXRjaGVyO1xuIH07XG5cbmNvbnN0IG1ha2VLaW5kTWF0Y2hlcj0oa2luZCk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpraW5kJyxraW5kKTtcblxuY29uc3QgQW55U2hhcGU9bWFrZU1hdGNoZXIoJ21hdGNoOmFueScsdW5kZWZpbmVkKTtcbmNvbnN0IFNjYWxhclNoYXBlPW1ha2VNYXRjaGVyKCdtYXRjaDpzY2FsYXInLHVuZGVmaW5lZCk7XG5jb25zdCBLZXlTaGFwZT1tYWtlTWF0Y2hlcignbWF0Y2g6a2V5Jyx1bmRlZmluZWQpO1xuY29uc3QgUGF0dGVyblNoYXBlPW1ha2VNYXRjaGVyKCdtYXRjaDpwYXR0ZXJuJyx1bmRlZmluZWQpO1xuY29uc3QgQm9vbGVhblNoYXBlPW1ha2VLaW5kTWF0Y2hlcignYm9vbGVhbicpO1xuY29uc3QgTnVtYmVyU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdudW1iZXInKTtcbmNvbnN0IEJpZ0ludFNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOmJpZ2ludCcsW10pO1xuY29uc3QgTmF0U2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6bmF0JyxbXSk7XG5jb25zdCBTdHJpbmdTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpzdHJpbmcnLFtdKTtcbmNvbnN0IFN5bWJvbFNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOnN5bWJvbCcsW10pO1xuY29uc3QgUmVjb3JkU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6cmVjb3JkT2YnLFtBbnlTaGFwZSxBbnlTaGFwZV0pO1xuY29uc3QgQXJyYXlTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDphcnJheU9mJyxbQW55U2hhcGVdKTtcbmNvbnN0IFNldFNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOnNldE9mJyxbQW55U2hhcGVdKTtcbmNvbnN0IEJhZ1NoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOmJhZ09mJyxbQW55U2hhcGUsQW55U2hhcGVdKTtcbmNvbnN0IE1hcFNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOm1hcE9mJyxbQW55U2hhcGUsQW55U2hhcGVdKTtcbmNvbnN0IFJlbW90YWJsZVNoYXBlPW1ha2VLaW5kTWF0Y2hlcigncmVtb3RhYmxlJyk7XG5jb25zdCBFcnJvclNoYXBlPW1ha2VLaW5kTWF0Y2hlcignZXJyb3InKTtcbmNvbnN0IFByb21pc2VTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ3Byb21pc2UnKTtcbmNvbnN0IFVuZGVmaW5lZFNoYXBlPW1ha2VLaW5kTWF0Y2hlcigndW5kZWZpbmVkJyk7XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZUxpbWl0c01hdGNoZXI9KHRhZyxwYXlsb2FkKT0+e1xuaWYocGF5bG9hZFtwYXlsb2FkLmxlbmd0aC0xXT09PXVuZGVmaW5lZCl7XG5wYXlsb2FkPWhhcmRlbihwYXlsb2FkLnNsaWNlKDAscGF5bG9hZC5sZW5ndGgtMSkpO1xuIH1cbnJldHVybiBtYWtlTWF0Y2hlcih0YWcscGF5bG9hZCk7XG4gfTtcblxuY29uc3QgbWFrZVJlbW90YWJsZU1hdGNoZXI9KGxhYmVsPXVuZGVmaW5lZCk9PlxubGFiZWw9PT11bmRlZmluZWQ/XG5SZW1vdGFibGVTaGFwZTpcbm1ha2VNYXRjaGVyKCdtYXRjaDpyZW1vdGFibGUnLGhhcmRlbih7bGFiZWx9KSk7XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZVNwbGl0UGF5bG9hZD0oXG5lbXB0eSxcbmJhc2UsXG5vcHRpb25hbD11bmRlZmluZWQsXG5yZXN0PXVuZGVmaW5lZCk9Plxue1xuaWYocmVzdCl7XG5yZXR1cm5bYmFzZSxvcHRpb25hbHx8ZW1wdHkscmVzdF07XG4gfVxuaWYob3B0aW9uYWwpe1xucmV0dXJuW2Jhc2Usb3B0aW9uYWxdO1xuIH1cbnJldHVybltiYXNlXTtcbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBNPWhhcmRlbih7XG5hbnk6KCk9PkFueVNoYXBlLFxuYW5kOiguLi5wYXR0cyk9Pm1ha2VNYXRjaGVyKCdtYXRjaDphbmQnLHBhdHRzKSxcbm9yOiguLi5wYXR0cyk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpvcicscGF0dHMpLFxubm90OihzdWJQYXR0KT0+bWFrZU1hdGNoZXIoJ21hdGNoOm5vdCcsc3ViUGF0dCksXG5cbnNjYWxhcjooKT0+U2NhbGFyU2hhcGUsXG5rZXk6KCk9PktleVNoYXBlLFxucGF0dGVybjooKT0+UGF0dGVyblNoYXBlLFxua2luZDptYWtlS2luZE1hdGNoZXIsXG50YWdnZWQ6KHRhZ1BhdHQ9TS5zdHJpbmcoKSxwYXlsb2FkUGF0dD1NLmFueSgpKT0+XG5tYWtlTWF0Y2hlcignbWF0Y2g6dGFnZ2VkJyxoYXJkZW4oW3RhZ1BhdHQscGF5bG9hZFBhdHRdKSksXG5ib29sZWFuOigpPT5Cb29sZWFuU2hhcGUsXG5udW1iZXI6KCk9Pk51bWJlclNoYXBlLFxuYmlnaW50OihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/bWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOmJpZ2ludCcsW2xpbWl0c10pOkJpZ0ludFNoYXBlLFxubmF0OihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/bWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOm5hdCcsW2xpbWl0c10pOk5hdFNoYXBlLFxuc3RyaW5nOihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/bWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOnN0cmluZycsW2xpbWl0c10pOlN0cmluZ1NoYXBlLFxuc3ltYm9sOihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/bWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOnN5bWJvbCcsW2xpbWl0c10pOlN5bWJvbFNoYXBlLFxucmVjb3JkOihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/TS5yZWNvcmRPZihNLmFueSgpLE0uYW55KCksbGltaXRzKTpSZWNvcmRTaGFwZSxcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5hcnJheToobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP00uYXJyYXlPZihNLmFueSgpLGxpbWl0cyk6QXJyYXlTaGFwZSxcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnNldDoobGltaXRzPXVuZGVmaW5lZCk9PmxpbWl0cz9NLnNldE9mKE0uYW55KCksbGltaXRzKTpTZXRTaGFwZSxcbmJhZzoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP00uYmFnT2YoTS5hbnkoKSxNLmFueSgpLGxpbWl0cyk6QmFnU2hhcGUsXG5tYXA6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9NLm1hcE9mKE0uYW55KCksTS5hbnkoKSxsaW1pdHMpOk1hcFNoYXBlLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJlbW90YWJsZTptYWtlUmVtb3RhYmxlTWF0Y2hlcixcbmVycm9yOigpPT5FcnJvclNoYXBlLFxucHJvbWlzZTooKT0+UHJvbWlzZVNoYXBlLFxudW5kZWZpbmVkOigpPT5VbmRlZmluZWRTaGFwZSxcbm51bGw6KCk9Pm51bGwsXG5cbmx0OihyaWdodE9wZXJhbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6bHQnLHJpZ2h0T3BlcmFuZCksXG5sdGU6KHJpZ2h0T3BlcmFuZCk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpsdGUnLHJpZ2h0T3BlcmFuZCksXG5lcTooa2V5KT0+e1xuYXNzZXJ0S2V5KGtleSk7XG5yZXR1cm4ga2V5PT09dW5kZWZpbmVkP00udW5kZWZpbmVkKCk6a2V5O1xuIH0sXG5uZXE6KGtleSk9Pk0ubm90KE0uZXEoa2V5KSksXG5ndGU6KHJpZ2h0T3BlcmFuZCk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpndGUnLHJpZ2h0T3BlcmFuZCksXG5ndDoocmlnaHRPcGVyYW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmd0JyxyaWdodE9wZXJhbmQpLFxuXG5yZWNvcmRPZjooa2V5UGF0dD1NLmFueSgpLHZhbHVlUGF0dD1NLmFueSgpLGxpbWl0cz11bmRlZmluZWQpPT5cbm1ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDpyZWNvcmRPZicsW2tleVBhdHQsdmFsdWVQYXR0LGxpbWl0c10pLFxuYXJyYXlPZjooc3ViUGF0dD1NLmFueSgpLGxpbWl0cz11bmRlZmluZWQpPT5cbm1ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDphcnJheU9mJyxbc3ViUGF0dCxsaW1pdHNdKSxcbnNldE9mOihrZXlQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOnNldE9mJyxba2V5UGF0dCxsaW1pdHNdKSxcbmJhZ09mOihrZXlQYXR0PU0uYW55KCksY291bnRQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOmJhZ09mJyxba2V5UGF0dCxjb3VudFBhdHQsbGltaXRzXSksXG5tYXBPZjooa2V5UGF0dD1NLmFueSgpLHZhbHVlUGF0dD1NLmFueSgpLGxpbWl0cz11bmRlZmluZWQpPT5cbm1ha2VMaW1pdHNNYXRjaGVyKCdtYXRjaDptYXBPZicsW2tleVBhdHQsdmFsdWVQYXR0LGxpbWl0c10pLFxuc3BsaXRBcnJheTooYmFzZSxvcHRpb25hbD11bmRlZmluZWQscmVzdD11bmRlZmluZWQpPT5cbm1ha2VNYXRjaGVyKFxuJ21hdGNoOnNwbGl0QXJyYXknLFxubWFrZVNwbGl0UGF5bG9hZChbXSxiYXNlLG9wdGlvbmFsLHJlc3QpKSxcblxuc3BsaXRSZWNvcmQ6KGJhc2Usb3B0aW9uYWw9dW5kZWZpbmVkLHJlc3Q9dW5kZWZpbmVkKT0+XG5tYWtlTWF0Y2hlcihcbidtYXRjaDpzcGxpdFJlY29yZCcsXG5tYWtlU3BsaXRQYXlsb2FkKHt9LGJhc2Usb3B0aW9uYWwscmVzdCkpLFxuXG5zcGxpdDooYmFzZSxyZXN0PXVuZGVmaW5lZCk9PntcbmlmKHBhc3NTdHlsZU9mKGhhcmRlbihiYXNlKSk9PT0nY29weUFycmF5Jyl7XG4vL1xuLy9cbnJldHVybiBNLnNwbGl0QXJyYXkoYmFzZSxyZXN0JiZbXSxyZXN0KTtcbiB9ZWxzZXtcbnJldHVybiBNLnNwbGl0UmVjb3JkKGJhc2UscmVzdCYme30scmVzdCk7XG4gfVxuIH0sXG5wYXJ0aWFsOihiYXNlLHJlc3Q9dW5kZWZpbmVkKT0+e1xuaWYocGFzc1N0eWxlT2YoaGFyZGVuKGJhc2UpKT09PSdjb3B5QXJyYXknKXtcbi8vXG4vL1xucmV0dXJuIE0uc3BsaXRBcnJheShbXSxiYXNlLHJlc3QpO1xuIH1lbHNle1xucmV0dXJuIE0uc3BsaXRSZWNvcmQoe30sYmFzZSxyZXN0KTtcbiB9XG4gfSxcblxuZXJlZjoodCk9Pk0ub3IodCxNLnByb21pc2UoKSksXG5vcHQ6KHQpPT5NLm9yKE0udW5kZWZpbmVkKCksdCksXG5cbmludGVyZmFjZTooaW50ZXJmYWNlTmFtZSxtZXRob2RHdWFyZHMsb3B0aW9ucyk9PlxuLy9cbm1ha2VJbnRlcmZhY2VHdWFyZChpbnRlcmZhY2VOYW1lLG1ldGhvZEd1YXJkcyxvcHRpb25zKSxcbmNhbGw6KC4uLmFyZ1BhdHRlcm5zKT0+XG4vL1xubWFrZU1ldGhvZEd1YXJkTWFrZXIoJ3N5bmMnLGFyZ1BhdHRlcm5zKSxcbmNhbGxXaGVuOiguLi5hcmdHdWFyZHMpPT5cbi8vXG5tYWtlTWV0aG9kR3VhcmRNYWtlcignYXN5bmMnLGFyZ0d1YXJkcyksXG5cbmF3YWl0OihhcmdQYXR0ZXJuKT0+XG4vL1xubWFrZUF3YWl0QXJnR3VhcmQoYXJnUGF0dGVybiksXG5yYXc6KCk9PlxuLy9cbm1ha2VSYXdHdWFyZCgpfSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5jaGVja01hdGNoZXMsXG5tYXRjaGVzLFxubXVzdE1hdGNoLFxuYXNzZXJ0UGF0dGVybixcbmlzUGF0dGVybixcbmdldFJhbmtDb3Zlcixcbk0sXG5raW5kT2Z9KTtcblxuIH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0ICAgICAgIHtcbmNoZWNrTWF0Y2hlcyxcbm1hdGNoZXMsXG5tdXN0TWF0Y2gsXG5hc3NlcnRQYXR0ZXJuLFxuaXNQYXR0ZXJuLFxuZ2V0UmFua0NvdmVyLFxuTSxcbmtpbmRPZn09XG5tYWtlUGF0dGVybktpdCgpOyRo4oCNX29uY2UuY2hlY2tNYXRjaGVzKGNoZWNrTWF0Y2hlcyk7JGjigI1fb25jZS5tYXRjaGVzKG1hdGNoZXMpOyRo4oCNX29uY2UubXVzdE1hdGNoKG11c3RNYXRjaCk7JGjigI1fb25jZS5hc3NlcnRQYXR0ZXJuKGFzc2VydFBhdHRlcm4pOyRo4oCNX29uY2UuaXNQYXR0ZXJuKGlzUGF0dGVybik7JGjigI1fb25jZS5nZXRSYW5rQ292ZXIoZ2V0UmFua0NvdmVyKTskaOKAjV9vbmNlLk0oTSk7JGjigI1fb25jZS5raW5kT2Yoa2luZE9mKTtcblxuTU09TTtcblxuLy9cblxuLy9cbmNvbnN0IEF3YWl0QXJnR3VhcmRQYXlsb2FkU2hhcGU9aGFyZGVuKHtcbmFyZ0d1YXJkOk0ucGF0dGVybigpfSk7XG5cblxuY29uc3QgICAgICAgIEF3YWl0QXJnR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOmF3YWl0QXJnR3VhcmQnKTtcblxuLypcblxuXG4gKi8kaOKAjV9vbmNlLkF3YWl0QXJnR3VhcmRTaGFwZShBd2FpdEFyZ0d1YXJkU2hhcGUpO1xuY29uc3QgICAgICAgIGlzQXdhaXRBcmdHdWFyZD0oc3BlY2ltZW4pPT5cbm1hdGNoZXMoc3BlY2ltZW4sQXdhaXRBcmdHdWFyZFNoYXBlKTskaOKAjV9vbmNlLmlzQXdhaXRBcmdHdWFyZChpc0F3YWl0QXJnR3VhcmQpO1xuaGFyZGVuKGlzQXdhaXRBcmdHdWFyZCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0QXdhaXRBcmdHdWFyZD0oc3BlY2ltZW4pPT57XG5tdXN0TWF0Y2goc3BlY2ltZW4sQXdhaXRBcmdHdWFyZFNoYXBlLCdhd2FpdEFyZ0d1YXJkJyk7XG4gfTskaOKAjV9vbmNlLmFzc2VydEF3YWl0QXJnR3VhcmQoYXNzZXJ0QXdhaXRBcmdHdWFyZCk7XG5oYXJkZW4oYXNzZXJ0QXdhaXRBcmdHdWFyZCk7XG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlQXdhaXRBcmdHdWFyZD0oYXJnUGF0dGVybik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1tYWtlVGFnZ2VkKCdndWFyZDphd2FpdEFyZ0d1YXJkJyx7XG5hcmdHdWFyZDphcmdQYXR0ZXJufSk7XG5cbmFzc2VydEF3YWl0QXJnR3VhcmQocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLy9cblxuY29uc3QgUmF3R3VhcmRQYXlsb2FkU2hhcGU9TS5yZWNvcmQoKTtcblxuY29uc3QgICAgICAgIFJhd0d1YXJkU2hhcGU9TS5raW5kKCdndWFyZDpyYXdHdWFyZCcpOyRo4oCNX29uY2UuUmF3R3VhcmRTaGFwZShSYXdHdWFyZFNoYXBlKTtcblxuY29uc3QgICAgICAgIGlzUmF3R3VhcmQ9KHNwZWNpbWVuKT0+bWF0Y2hlcyhzcGVjaW1lbixSYXdHdWFyZFNoYXBlKTskaOKAjV9vbmNlLmlzUmF3R3VhcmQoaXNSYXdHdWFyZCk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRSYXdHdWFyZD0oc3BlY2ltZW4pPT5cbm11c3RNYXRjaChzcGVjaW1lbixSYXdHdWFyZFNoYXBlLCdyYXdHdWFyZCcpO1xuXG4vKlxuXG4gKi8kaOKAjV9vbmNlLmFzc2VydFJhd0d1YXJkKGFzc2VydFJhd0d1YXJkKTtcbmNvbnN0IG1ha2VSYXdHdWFyZD0oKT0+bWFrZVRhZ2dlZCgnZ3VhcmQ6cmF3R3VhcmQnLHt9KTtcblxuLy9cbi8vXG5cbmNvbnN0ICAgICAgICBTeW5jVmFsdWVHdWFyZFNoYXBlPU0ub3IoUmF3R3VhcmRTaGFwZSxNLnBhdHRlcm4oKSk7JGjigI1fb25jZS5TeW5jVmFsdWVHdWFyZFNoYXBlKFN5bmNWYWx1ZUd1YXJkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGU9TS5hcnJheU9mKFN5bmNWYWx1ZUd1YXJkU2hhcGUpOyRo4oCNX29uY2UuU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUoU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUpO1xuXG5jb25zdCBBcmdHdWFyZFNoYXBlPU0ub3IoUmF3R3VhcmRTaGFwZSxBd2FpdEFyZ0d1YXJkU2hhcGUsTS5wYXR0ZXJuKCkpO1xuY29uc3QgICAgICAgIEFyZ0d1YXJkTGlzdFNoYXBlPU0uYXJyYXlPZihBcmdHdWFyZFNoYXBlKTskaOKAjV9vbmNlLkFyZ0d1YXJkTGlzdFNoYXBlKEFyZ0d1YXJkTGlzdFNoYXBlKTtcblxuY29uc3QgU3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlPWhhcmRlbih7XG5jYWxsS2luZDonc3luYycsXG5hcmdHdWFyZHM6U3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsXG5vcHRpb25hbEFyZ0d1YXJkczpNLm9wdChTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSksXG5yZXN0QXJnR3VhcmQ6TS5vcHQoU3luY1ZhbHVlR3VhcmRTaGFwZSksXG5yZXR1cm5HdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSk7XG5cblxuY29uc3QgQXN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZT1oYXJkZW4oe1xuY2FsbEtpbmQ6J2FzeW5jJyxcbmFyZ0d1YXJkczpBcmdHdWFyZExpc3RTaGFwZSxcbm9wdGlvbmFsQXJnR3VhcmRzOk0ub3B0KEFyZ0d1YXJkTGlzdFNoYXBlKSxcbnJlc3RBcmdHdWFyZDpNLm9wdChTeW5jVmFsdWVHdWFyZFNoYXBlKSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5jb25zdCAgICAgICAgTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGU9TS5vcihcblN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZSxcbkFzeW5jTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUpOyRo4oCNX29uY2UuTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUoTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBNZXRob2RHdWFyZFNoYXBlPU0ua2luZCgnZ3VhcmQ6bWV0aG9kR3VhcmQnKTtcblxuLypcblxuXG4gKi8kaOKAjV9vbmNlLk1ldGhvZEd1YXJkU2hhcGUoTWV0aG9kR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgYXNzZXJ0TWV0aG9kR3VhcmQ9KHNwZWNpbWVuKT0+e1xubXVzdE1hdGNoKHNwZWNpbWVuLE1ldGhvZEd1YXJkU2hhcGUsJ21ldGhvZEd1YXJkJyk7XG4gfTskaOKAjV9vbmNlLmFzc2VydE1ldGhvZEd1YXJkKGFzc2VydE1ldGhvZEd1YXJkKTtcbmhhcmRlbihhc3NlcnRNZXRob2RHdWFyZCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlTWV0aG9kR3VhcmRNYWtlcj0oXG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPXVuZGVmaW5lZCxcbnJlc3RBcmdHdWFyZD11bmRlZmluZWQpPT5cblxuaGFyZGVuKHtcbm9wdGlvbmFsOiguLi5vcHRBcmdHdWFyZHMpPT57XG5vcHRpb25hbEFyZ0d1YXJkcz09PXVuZGVmaW5lZHx8XG5GYWlsIGBDYW4gb25seSBoYXZlIG9uZSBzZXQgb2Ygb3B0aW9uYWwgZ3VhcmRzYDtcbnJlc3RBcmdHdWFyZD09PXVuZGVmaW5lZHx8XG5GYWlsIGBvcHRpb25hbCBhcmcgZ3VhcmRzIG11c3QgY29tZSBiZWZvcmUgcmVzdCBhcmdgO1xucmV0dXJuIG1ha2VNZXRob2RHdWFyZE1ha2VyKGNhbGxLaW5kLGFyZ0d1YXJkcyxvcHRBcmdHdWFyZHMpO1xuIH0sXG5yZXN0OihyQXJnR3VhcmQpPT57XG5yZXN0QXJnR3VhcmQ9PT11bmRlZmluZWR8fEZhaWwgYENhbiBvbmx5IGhhdmUgb25lIHJlc3QgYXJnYDtcbnJldHVybiBtYWtlTWV0aG9kR3VhcmRNYWtlcihcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yQXJnR3VhcmQpO1xuXG4gfSxcbnJldHVybnM6KHJldHVybkd1YXJkPU0udW5kZWZpbmVkKCkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOm1ldGhvZEd1YXJkJyx7XG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzLFxucmVzdEFyZ0d1YXJkLFxucmV0dXJuR3VhcmR9KTtcblxuYXNzZXJ0TWV0aG9kR3VhcmQocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfX0pO1xuXG5cbmNvbnN0ICAgICAgICBJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xuaW50ZXJmYWNlTmFtZTpNLnN0cmluZygpLFxubWV0aG9kR3VhcmRzOk0ucmVjb3JkT2YoTS5zdHJpbmcoKSxNZXRob2RHdWFyZFNoYXBlKX0sXG5cbntcbmRlZmF1bHRHdWFyZHM6TS5vcihNLnVuZGVmaW5lZCgpLCdwYXNzYWJsZScsJ3JhdycpLFxuc2xvcHB5Ok0uYm9vbGVhbigpLFxuc3ltYm9sTWV0aG9kR3VhcmRzOk0ubWFwT2YoTS5zeW1ib2woKSxNZXRob2RHdWFyZFNoYXBlKX0pOyRo4oCNX29uY2UuSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUoSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUpO1xuXG5cblxuY29uc3QgICAgICAgIEludGVyZmFjZUd1YXJkU2hhcGU9TS5raW5kKCdndWFyZDppbnRlcmZhY2VHdWFyZCcpO1xuXG4vKlxuXG5cbiAqLyRo4oCNX29uY2UuSW50ZXJmYWNlR3VhcmRTaGFwZShJbnRlcmZhY2VHdWFyZFNoYXBlKTtcbmNvbnN0ICAgICAgICBhc3NlcnRJbnRlcmZhY2VHdWFyZD0oc3BlY2ltZW4pPT57XG5tdXN0TWF0Y2goc3BlY2ltZW4sSW50ZXJmYWNlR3VhcmRTaGFwZSwnaW50ZXJmYWNlR3VhcmQnKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0SW50ZXJmYWNlR3VhcmQoYXNzZXJ0SW50ZXJmYWNlR3VhcmQpO1xuaGFyZGVuKGFzc2VydEludGVyZmFjZUd1YXJkKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbnRlcmZhY2VHdWFyZD0oaW50ZXJmYWNlTmFtZSxtZXRob2RHdWFyZHMsb3B0aW9ucz17fSk9PntcbmNvbnN0e3Nsb3BweT1mYWxzZSxkZWZhdWx0R3VhcmRzPXNsb3BweT8ncGFzc2FibGUnOnVuZGVmaW5lZH09XG5vcHRpb25zO1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdNZXRob2RHdWFyZHM9e307XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzPVtdO1xuZm9yKGNvbnN0IGtleSBvZiBvd25LZXlzKG1ldGhvZEd1YXJkcykpe1xuY29uc3QgdmFsdWU9bWV0aG9kR3VhcmRzWy8qICAgICAgICAgICAgICAgICAqL2tleV07XG5pZih0eXBlb2Yga2V5PT09J3N5bWJvbCcpe1xuc3ltYm9sTWV0aG9kR3VhcmRzRW50cmllcy5wdXNoKFtrZXksdmFsdWVdKTtcbiB9ZWxzZXtcbnN0cmluZ01ldGhvZEd1YXJkc1trZXldPXZhbHVlO1xuIH1cbiB9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOmludGVyZmFjZUd1YXJkJyx7XG5pbnRlcmZhY2VOYW1lLFxubWV0aG9kR3VhcmRzOnN0cmluZ01ldGhvZEd1YXJkcyxcbi4uLihzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzLmxlbmd0aD9cbntzeW1ib2xNZXRob2RHdWFyZHM6bWFrZUNvcHlNYXAoc3ltYm9sTWV0aG9kR3VhcmRzRW50cmllcyl9Olxue30pLFxuZGVmYXVsdEd1YXJkc30pO1xuXG5hc3NlcnRJbnRlcmZhY2VHdWFyZChyZXN1bHQpO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3Jlc3VsdCk7XG4gfTtcblxuY29uc3QgR3VhcmRQYXlsb2FkU2hhcGVzPWhhcmRlbih7XG4nZ3VhcmQ6YXdhaXRBcmdHdWFyZCc6QXdhaXRBcmdHdWFyZFBheWxvYWRTaGFwZSxcbidndWFyZDpyYXdHdWFyZCc6UmF3R3VhcmRQYXlsb2FkU2hhcGUsXG4nZ3VhcmQ6bWV0aG9kR3VhcmQnOk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLFxuJ2d1YXJkOmludGVyZmFjZUd1YXJkJzpJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZX0pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdExpbWl0cyI6WyJkZWZhdWx0TGltaXRzIl0sImNoZWNrTWF0Y2hlcyI6WyJjaGVja01hdGNoZXMiXSwibWF0Y2hlcyI6WyJtYXRjaGVzIl0sIm11c3RNYXRjaCI6WyJtdXN0TWF0Y2giXSwiYXNzZXJ0UGF0dGVybiI6WyJhc3NlcnRQYXR0ZXJuIl0sImlzUGF0dGVybiI6WyJpc1BhdHRlcm4iXSwiZ2V0UmFua0NvdmVyIjpbImdldFJhbmtDb3ZlciJdLCJNIjpbIk0iXSwia2luZE9mIjpbImtpbmRPZiJdLCJBd2FpdEFyZ0d1YXJkU2hhcGUiOlsiQXdhaXRBcmdHdWFyZFNoYXBlIl0sImlzQXdhaXRBcmdHdWFyZCI6WyJpc0F3YWl0QXJnR3VhcmQiXSwiYXNzZXJ0QXdhaXRBcmdHdWFyZCI6WyJhc3NlcnRBd2FpdEFyZ0d1YXJkIl0sIlJhd0d1YXJkU2hhcGUiOlsiUmF3R3VhcmRTaGFwZSJdLCJpc1Jhd0d1YXJkIjpbImlzUmF3R3VhcmQiXSwiYXNzZXJ0UmF3R3VhcmQiOlsiYXNzZXJ0UmF3R3VhcmQiXSwiU3luY1ZhbHVlR3VhcmRTaGFwZSI6WyJTeW5jVmFsdWVHdWFyZFNoYXBlIl0sIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIjpbIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIl0sIkFyZ0d1YXJkTGlzdFNoYXBlIjpbIkFyZ0d1YXJkTGlzdFNoYXBlIl0sIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIjpbIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIl0sIk1ldGhvZEd1YXJkU2hhcGUiOlsiTWV0aG9kR3VhcmRTaGFwZSJdLCJhc3NlcnRNZXRob2RHdWFyZCI6WyJhc3NlcnRNZXRob2RHdWFyZCJdLCJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSI6WyJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSJdLCJJbnRlcmZhY2VHdWFyZFNoYXBlIjpbIkludGVyZmFjZUd1YXJkU2hhcGUiXSwiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiOlsiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh5JSp08BAABPAQAAIgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA5KbFhFEGAABRBgAAIQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNS9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsIi4vc3JjL21lbW8tcmFjZS5qcyIsIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VQcm9taXNlS2l0IiwicmFjZVByb21pc2VzIl0sInJlZXhwb3J0cyI6WyIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCxtZW1vUmFjZTskaOKAjV9pbXBvcnRzKFtbXCIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc1wiLCBbW1wibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQgPSAkaOKAjV9hKV1dXV0sW1wiLi9zcmMvbWVtby1yYWNlLmpzXCIsIFtbXCJtZW1vUmFjZVwiLCBbJGjigI1fYSA9PiAobWVtb1JhY2UgPSAkaOKAjV9hKV1dXV0sW1wiLi9zcmMvaXMtcHJvbWlzZS5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VQcm9taXNlS2l0LCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlUHJvbWlzZUtpdFwifSk7JGjigI1fb25jZS5tYWtlUHJvbWlzZUtpdChtYWtlUHJvbWlzZUtpdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJhY2VQcm9taXNlcywgJ25hbWUnLCB7dmFsdWU6IFwicmFjZVByb21pc2VzXCJ9KTskaOKAjV9vbmNlLnJhY2VQcm9taXNlcyhyYWNlUHJvbWlzZXMpOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEJlc3RQaXBlbGluYWJsZVByb21pc2U9Z2xvYmFsVGhpcy5IYW5kbGVkUHJvbWlzZXx8UHJvbWlzZTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIG1ha2VQcm9taXNlS2l0KCl7XG5jb25zdHtyZXNvbHZlLHJlamVjdCxleGVjdXRvcn09bWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KCk7XG5cbmNvbnN0IHByb21pc2U9bmV3IEJlc3RQaXBlbGluYWJsZVByb21pc2UoZXhlY3V0b3IpO1xuXG5yZXR1cm4gaGFyZGVuKHtwcm9taXNlLHJlc29sdmUscmVqZWN0fSk7XG4gfVxuaGFyZGVuKG1ha2VQcm9taXNlS2l0KTtcblxuLy9cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgcmFjZVByb21pc2VzKHZhbHVlcyl7XG5yZXR1cm4gaGFyZGVuKG1lbW9SYWNlLmNhbGwoQmVzdFBpcGVsaW5hYmxlUHJvbWlzZSx2YWx1ZXMpKTtcbiB9XG5oYXJkZW4ocmFjZVByb21pc2VzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VQcm9taXNlS2l0IjpbIm1ha2VQcm9taXNlS2l0Il0sInJhY2VQcm9taXNlcyI6WyJyYWNlUHJvbWlzZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAwCh5yVsCAABbAgAAKgAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNS9zcmMvaXMtcHJvbWlzZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiaXNQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShpc1Byb21pc2UsICduYW1lJywge3ZhbHVlOiBcImlzUHJvbWlzZVwifSk7JGjigI1fb25jZS5pc1Byb21pc2UoaXNQcm9taXNlKTsgICAvKlxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBpc1Byb21pc2UobWF5YmVQcm9taXNlKXtcbnJldHVybiBQcm9taXNlLnJlc29sdmUobWF5YmVQcm9taXNlKT09PW1heWJlUHJvbWlzZTtcbiB9XG5oYXJkZW4oaXNQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUHJvbWlzZSI6WyJpc1Byb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAbS8BOKIHAACiBwAAKQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNS9zcmMvbWVtby1yYWNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtZW1vUmFjZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuKi9cblxuY29uc3QgaXNPYmplY3Q9KHZhbHVlKT0+T2JqZWN0KHZhbHVlKT09PXZhbHVlO1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qga25vd25Qcm9taXNlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFya1NldHRsZWQ9KHJlY29yZCk9PntcbmlmKCFyZWNvcmR8fHJlY29yZC5zZXR0bGVkKXtcbnJldHVybiBuZXcgU2V0KCk7XG4gfVxuXG5jb25zdHtkZWZlcnJlZHN9PXJlY29yZDtcbk9iamVjdC5hc3NpZ24ocmVjb3JkLHtcbmRlZmVycmVkczp1bmRlZmluZWQsXG5zZXR0bGVkOnRydWV9KTtcblxuT2JqZWN0LmZyZWV6ZShyZWNvcmQpO1xucmV0dXJuIGRlZmVycmVkcztcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBnZXRNZW1vUmVjb3JkPSh2YWx1ZSk9PntcbmlmKCFpc09iamVjdCh2YWx1ZSkpe1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oe3NldHRsZWQ6dHJ1ZX0pO1xuIH1cblxubGV0IHJlY29yZD1rbm93blByb21pc2VzLmdldCh2YWx1ZSk7XG5cbmlmKCFyZWNvcmQpe1xucmVjb3JkPXtkZWZlcnJlZHM6bmV3IFNldCgpLHNldHRsZWQ6ZmFsc2V9O1xua25vd25Qcm9taXNlcy5zZXQodmFsdWUscmVjb3JkKTtcbi8vXG5Qcm9taXNlLnJlc29sdmUodmFsdWUpLnRoZW4oXG4odmFsKT0+e1xuZm9yKGNvbnN0e3Jlc29sdmV9b2YgbWFya1NldHRsZWQocmVjb3JkKSl7XG5yZXNvbHZlKHZhbCk7XG4gfVxuIH0sXG4oZXJyKT0+e1xuZm9yKGNvbnN0e3JlamVjdH1vZiBtYXJrU2V0dGxlZChyZWNvcmQpKXtcbnJlamVjdChlcnIpO1xuIH1cbiB9KTtcblxuIH1cbnJldHVybiByZWNvcmQ7XG4gfTtcblxuY29uc3R7cmFjZX09e1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xucmFjZSh2YWx1ZXMpe1xubGV0IGRlZmVycmVkO1xuLyogICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgY2FjaGVkVmFsdWVzPVtdO1xuY29uc3QgQz10aGlzO1xuY29uc3QgcmVzdWx0PW5ldyBDKChyZXNvbHZlLHJlamVjdCk9PntcbmRlZmVycmVkPXtyZXNvbHZlLHJlamVjdH07XG5mb3IoY29uc3QgdmFsdWUgb2YgdmFsdWVzKXtcbmNhY2hlZFZhbHVlcy5wdXNoKHZhbHVlKTtcbmNvbnN0e3NldHRsZWQsZGVmZXJyZWRzfT1nZXRNZW1vUmVjb3JkKHZhbHVlKTtcbmlmKHNldHRsZWQpe1xuLy9cbi8vXG5DLnJlc29sdmUodmFsdWUpLnRoZW4ocmVzb2x2ZSxyZWplY3QpO1xuIH1lbHNle1xuZGVmZXJyZWRzLmFkZChkZWZlcnJlZCk7XG4gfVxuIH1cbiB9KTtcblxuLy9cbi8vXG5yZXR1cm4gcmVzdWx0LmZpbmFsbHkoKCk9PntcbmZvcihjb25zdCB2YWx1ZSBvZiBjYWNoZWRWYWx1ZXMpe1xuY29uc3R7ZGVmZXJyZWRzfT1nZXRNZW1vUmVjb3JkKHZhbHVlKTtcbmlmKGRlZmVycmVkcyl7XG5kZWZlcnJlZHMuZGVsZXRlKGRlZmVycmVkKTtcbiB9XG4gfVxuIH0pO1xuIH19OyRo4oCNX29uY2UucmFjZShyYWNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1lbW9SYWNlIjpbInJhY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA+HAxxIIFAACCBQAANAAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNS9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdD0oKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZXNvbHZlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGludGVybmFsUmVqZWN0O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzb2x2ZT0odmFsdWUpPT57XG5pZihpbnRlcm5hbFJlc29sdmUpe1xuaW50ZXJuYWxSZXNvbHZlKHZhbHVlKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT1udWxsKTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWplY3Q9KHJlYXNvbik9PntcbmlmKGludGVybmFsUmVqZWN0KXtcbmludGVybmFsUmVqZWN0KHJlYXNvbik7XG5pbnRlcm5hbFJlc29sdmU9bnVsbDtcbmludGVybmFsUmVqZWN0PW51bGw7XG4gfWVsc2V7XG5hc3NlcnQoaW50ZXJuYWxSZWplY3Q9PT1udWxsKTtcbiB9XG4gfTtcblxuY29uc3QgZXhlY3V0b3I9KHJlcyxyZWopPT57XG5hc3NlcnQoaW50ZXJuYWxSZXNvbHZlPT09dW5kZWZpbmVkJiZpbnRlcm5hbFJlamVjdD09PXVuZGVmaW5lZCk7XG5pbnRlcm5hbFJlc29sdmU9cmVzO1xuaW50ZXJuYWxSZWplY3Q9cmVqO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfSk7XG4gfTskaOKAjV9vbmNlLm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdChtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQpO1xuaGFyZGVuKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiOlsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAACUAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjUvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADTfnpWgEQAAoBEAABwAAABAZW5kby9zdHJlYW0tdjEuMi41L2luZGV4LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9wcm9taXNlLWtpdCJdLCJleHBvcnRzIjpbIm1ha2VQaXBlIiwibWFrZVF1ZXVlIiwibWFrZVN0cmVhbSIsIm1hcFJlYWRlciIsIm1hcFdyaXRlciIsInByaW1lIiwicHVtcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxtYWtlUHJvbWlzZUtpdDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjigI1fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG4vL1xuLy9cbmNvbnN0IGZyZWV6ZT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovT2JqZWN0LmZyZWV6ZTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUXVldWU9KCk9PntcbmxldHtwcm9taXNlOnRhaWxQcm9taXNlLHJlc29sdmU6dGFpbFJlc29sdmV9PW1ha2VQcm9taXNlS2l0KCk7XG5yZXR1cm57XG5wdXQodmFsdWUpe1xuY29uc3R7cmVzb2x2ZSxwcm9taXNlfT1tYWtlUHJvbWlzZUtpdCgpO1xudGFpbFJlc29sdmUoZnJlZXplKHt2YWx1ZSxwcm9taXNlfSkpO1xudGFpbFJlc29sdmU9cmVzb2x2ZTtcbiB9LFxuZ2V0KCl7XG5jb25zdCBwcm9taXNlPXRhaWxQcm9taXNlLnRoZW4oKG5leHQpPT5uZXh0LnZhbHVlKTtcbnRhaWxQcm9taXNlPXRhaWxQcm9taXNlLnRoZW4oKG5leHQpPT5uZXh0LnByb21pc2UpO1xucmV0dXJuIGhhcmRlbihwcm9taXNlKTtcbiB9fTtcblxuIH07JGjigI1fb25jZS5tYWtlUXVldWUobWFrZVF1ZXVlKTtcbmhhcmRlbihtYWtlUXVldWUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN0cmVhbT0oYWNrcyxkYXRhKT0+e1xuY29uc3Qgc3RyZWFtPWhhcmRlbih7XG4vKlxuXG4gICAgICovXG5uZXh0KHZhbHVlKXtcbi8vXG4vL1xuZGF0YS5wdXQoZnJlZXplKHt2YWx1ZSxkb25lOmZhbHNlfSkpO1xucmV0dXJuIGFja3MuZ2V0KCk7XG4gfSxcbi8qXG5cbiAgICAgKi9cbnJldHVybih2YWx1ZSl7XG5kYXRhLnB1dChmcmVlemUoe3ZhbHVlLGRvbmU6dHJ1ZX0pKTtcbnJldHVybiBhY2tzLmdldCgpO1xuIH0sXG4vKlxuXG4gICAgICovXG50aHJvdyhlcnJvcil7XG5kYXRhLnB1dChoYXJkZW4oUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG5yZXR1cm4gYWNrcy5nZXQoKTtcbiB9LFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe1xucmV0dXJuIHN0cmVhbTtcbiB9fSk7XG5cbnJldHVybiBzdHJlYW07XG4gfTskaOKAjV9vbmNlLm1ha2VTdHJlYW0obWFrZVN0cmVhbSk7XG5oYXJkZW4obWFrZVN0cmVhbSk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0ICAgICAgICBtYWtlUGlwZT0oKT0+e1xuY29uc3QgZGF0YT1tYWtlUXVldWUoKTtcbmNvbnN0IGFja3M9bWFrZVF1ZXVlKCk7XG5jb25zdCByZWFkZXI9bWFrZVN0cmVhbShhY2tzLGRhdGEpO1xuY29uc3Qgd3JpdGVyPW1ha2VTdHJlYW0oZGF0YSxhY2tzKTtcbnJldHVybiBoYXJkZW4oW3dyaXRlcixyZWFkZXJdKTtcbiB9OyRo4oCNX29uY2UubWFrZVBpcGUobWFrZVBpcGUpO1xuaGFyZGVuKG1ha2VQaXBlKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHVtcD1hc3luYyh3cml0ZXIscmVhZGVyLHByaW1lcik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHRpY2s9KHByb21pc2UpPT5cbkUud2hlbihcbnByb21pc2UsXG4ocmVzdWx0KT0+e1xuaWYocmVzdWx0LmRvbmUpe1xucmV0dXJuIHdyaXRlci5yZXR1cm4ocmVzdWx0LnZhbHVlKTtcbiB9ZWxzZXtcbi8vXG4vL1xucmV0dXJuIHRvY2sod3JpdGVyLm5leHQocmVzdWx0LnZhbHVlKSk7XG4gfVxuIH0sXG4oLyogICAgICAgICAgICAgICAgKi9lcnJvcik9PntcbnJldHVybiB3cml0ZXIudGhyb3coZXJyb3IpO1xuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHRvY2s9KHByb21pc2UpPT5cbkUud2hlbihcbnByb21pc2UsXG4ocmVzdWx0KT0+e1xuaWYocmVzdWx0LmRvbmUpe1xucmV0dXJuIHJlYWRlci5yZXR1cm4ocmVzdWx0LnZhbHVlKTtcbiB9ZWxzZXtcbnJldHVybiB0aWNrKHJlYWRlci5uZXh0KHJlc3VsdC52YWx1ZSkpO1xuIH1cbiB9LFxuKC8qICAgICAgICAgICAgICAgICovZXJyb3IpPT57XG5yZXR1cm4gcmVhZGVyLnRocm93KGVycm9yKTtcbiB9KTtcblxuYXdhaXQgdGljayhyZWFkZXIubmV4dChwcmltZXIpKTtcbnJldHVybiB1bmRlZmluZWQ7XG4gfTskaOKAjV9vbmNlLnB1bXAocHVtcCk7XG5oYXJkZW4ocHVtcCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJpbWU9KGdlbmVyYXRvcixwcmltZXIpPT57XG4vL1xuY29uc3QgZmlyc3Q9Z2VuZXJhdG9yLm5leHQocHJpbWVyKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZXN1bHQ7XG5jb25zdCBwcmltZWQ9aGFyZGVuKHtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIG5leHQodmFsdWUpe1xuaWYocmVzdWx0PT09dW5kZWZpbmVkKXtcbi8vXG5yZXN1bHQ9YXdhaXQgZmlyc3Q7XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5yZXR1cm4gZ2VuZXJhdG9yLm5leHQodmFsdWUpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgcmV0dXJuKHZhbHVlKXtcbmlmKHJlc3VsdD09PXVuZGVmaW5lZCl7XG4vL1xucmVzdWx0PWF3YWl0IGZpcnN0O1xuaWYocmVzdWx0LmRvbmUpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxucmV0dXJuIGdlbmVyYXRvci5yZXR1cm4odmFsdWUpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIHRocm93KGVycm9yKXtcbmlmKHJlc3VsdD09PXVuZGVmaW5lZCl7XG4vL1xucmVzdWx0PWF3YWl0IGZpcnN0O1xuaWYocmVzdWx0LmRvbmUpe1xudGhyb3cgZXJyb3I7XG4gfVxuIH1cbnJldHVybiBnZW5lcmF0b3IudGhyb3coZXJyb3IpO1xuIH19KTtcblxucmV0dXJuIHByaW1lZDtcbiB9OyRo4oCNX29uY2UucHJpbWUocHJpbWUpO1xuaGFyZGVuKHByaW1lKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYXBSZWFkZXI9KHJlYWRlcix0cmFuc2Zvcm0pPT57XG5hc3luYyBmdW5jdGlvbip0cmFuc2Zvcm1HZW5lcmF0b3IoKXtcbmZvciBhd2FpdChjb25zdCB2YWx1ZSBvZiByZWFkZXIpe1xueWllbGQgdHJhbnNmb3JtKHZhbHVlKTtcbiB9XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmhhcmRlbih0cmFuc2Zvcm1HZW5lcmF0b3IpO1xucmV0dXJuIGhhcmRlbih0cmFuc2Zvcm1HZW5lcmF0b3IoKSk7XG4gfTskaOKAjV9vbmNlLm1hcFJlYWRlcihtYXBSZWFkZXIpO1xuaGFyZGVuKG1hcFJlYWRlcik7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFwV3JpdGVyPSh3cml0ZXIsdHJhbnNmb3JtKT0+e1xuY29uc3QgdHJhbnNmb3JtZWRXcml0ZXI9aGFyZGVuKHtcbi8qXG5cbiAgICAgKi9cbiAgICAgIGFzeW5jIG5leHQodmFsdWUpe1xucmV0dXJuIHdyaXRlci5uZXh0KHRyYW5zZm9ybSh2YWx1ZSkpO1xuIH0sXG4vKlxuXG4gICAgICovXG4gICAgICBhc3luYyB0aHJvdyhlcnJvcil7XG5yZXR1cm4gd3JpdGVyLnRocm93KGVycm9yKTtcbiB9LFxuLypcblxuICAgICAqL1xuICAgICAgYXN5bmMgcmV0dXJuKHZhbHVlKXtcbnJldHVybiB3cml0ZXIucmV0dXJuKHZhbHVlKTtcbiB9LFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe1xucmV0dXJuIHRyYW5zZm9ybWVkV3JpdGVyO1xuIH19KTtcblxucmV0dXJuIHRyYW5zZm9ybWVkV3JpdGVyO1xuIH07JGjigI1fb25jZS5tYXBXcml0ZXIobWFwV3JpdGVyKTtcbmhhcmRlbihtYXBXcml0ZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVF1ZXVlIjpbIm1ha2VRdWV1ZSJdLCJtYWtlU3RyZWFtIjpbIm1ha2VTdHJlYW0iXSwibWFrZVBpcGUiOlsibWFrZVBpcGUiXSwicHVtcCI6WyJwdW1wIl0sInByaW1lIjpbInByaW1lIl0sIm1hcFJlYWRlciI6WyJtYXBSZWFkZXIiXSwibWFwV3JpdGVyIjpbIm1hcFdyaXRlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABqoyJQyAEAAMgBAAAcAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvbWFpbi5qc3siaW1wb3J0cyI6WyIuL3JpbmcwL21haW4uanMiLCIuL3JpbmcxL21haW4uanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3JpbmcwL21haW4uanMiLCIuL3JpbmcxL21haW4uanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9yaW5nMC9tYWluLmpzXCIsIFtdXSxbXCIuL3JpbmcxL21haW4uanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAexheGXgBAAB4AQAAHwAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL0UuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiQGVuZG8vZmFyIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC6f6LrdQIAAHUCAAAsAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImFzeW5jR2VuZXJhdGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzeW5jR2VuZXJhdGU9KG5leHQpPT57XG5yZXR1cm4gaGFyZGVuKHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PntcbnJldHVybiBoYXJkZW4oe1xubmV4dDphc3luYygpPT5oYXJkZW4obmV4dCgpKX0pO1xuXG4gfX0pO1xuXG4gfTskaOKAjV9vbmNlLmFzeW5jR2VuZXJhdGUoYXN5bmNHZW5lcmF0ZSk7XG5oYXJkZW4oYXN5bmNHZW5lcmF0ZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3luY0dlbmVyYXRlIjpbImFzeW5jR2VuZXJhdGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA6FQve+sBAADrAQAAIgAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL21haW4uanN7ImltcG9ydHMiOlsiLi9FLmpzIiwiLi9tYWtlcnMuanMiLCIuL2FzeW5jLWdlbmVyYXRlLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9FLmpzIiwiLi9hc3luYy1nZW5lcmF0ZS5qcyIsIi4vbWFrZXJzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vRS5qc1wiLCBbXV0sW1wiLi9tYWtlcnMuanNcIiwgW11dLFtcIi4vYXN5bmMtZ2VuZXJhdGUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAl0Dzy9YHAADWBwAAJAAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL21ha2Vycy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZU1hcCIsIm1ha2VQcm9taXNlIiwibWFrZVNldCIsIm1ha2VXZWFrTWFwIiwibWFrZVdlYWtTZXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLy9cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUHJvbWlzZT0oZXhlY3V0b3IpPT5oYXJkZW4obmV3IFByb21pc2UoZXhlY3V0b3IpKTskaOKAjV9vbmNlLm1ha2VQcm9taXNlKG1ha2VQcm9taXNlKTtcbmhhcmRlbihtYWtlUHJvbWlzZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlTWFwPShlbnRyaWVzT3JJdGVyYWJsZSk9PmhhcmRlbihuZXcgTWFwKGVudHJpZXNPckl0ZXJhYmxlKSk7JGjigI1fb25jZS5tYWtlTWFwKG1ha2VNYXApO1xuaGFyZGVuKG1ha2VNYXApO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VTZXQ9KHZhbHVlcyk9PmhhcmRlbihuZXcgU2V0KHZhbHVlcykpOyRo4oCNX29uY2UubWFrZVNldChtYWtlU2V0KTtcbmhhcmRlbihtYWtlU2V0KTtcblxuLypcblxuXG5cbiAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrTWFwPShlbnRyaWVzKT0+aGFyZGVuKG5ldyBXZWFrTWFwKGVudHJpZXMpKTskaOKAjV9vbmNlLm1ha2VXZWFrTWFwKG1ha2VXZWFrTWFwKTtcbmhhcmRlbihtYWtlV2Vha01hcCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrU2V0PSh2YWx1ZXMpPT5oYXJkZW4obmV3IFdlYWtTZXQodmFsdWVzKSk7JGjigI1fb25jZS5tYWtlV2Vha1NldChtYWtlV2Vha1NldCk7XG5oYXJkZW4obWFrZVdlYWtTZXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVByb21pc2UiOlsibWFrZVByb21pc2UiXSwibWFrZU1hcCI6WyJtYWtlTWFwIl0sIm1ha2VTZXQiOlsibWFrZVNldCJdLCJtYWtlV2Vha01hcCI6WyJtYWtlV2Vha01hcCJdLCJtYWtlV2Vha1NldCI6WyJtYWtlV2Vha1NldCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABa4786UQMAAFEDAAApAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanN7ImltcG9ydHMiOlsiLi4vcmluZzAvbWFpbi5qcyJdLCJleHBvcnRzIjpbImFzeW5jRG9XaGlsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVByb21pc2U7JGjigI1faW1wb3J0cyhbW1wiLi4vcmluZzAvbWFpbi5qc1wiLCBbW1wibWFrZVByb21pc2VcIiwgWyRo4oCNX2EgPT4gKG1ha2VQcm9taXNlID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzeW5jRG9XaGlsZT0oYm9keSk9PntcbnJldHVybiBtYWtlUHJvbWlzZSgocmVzb2x2ZSxyZWplY3QpPT57XG5jb25zdCBsb29wPWFzeW5jKCk9PntcbmNvbnN0IGRvQ29udGludWU9YXdhaXQgYm9keSgpO1xuaWYoIWRvQ29udGludWUpe1xuLy9cbnJlc29sdmUodW5kZWZpbmVkKTtcbnJldHVybjtcbiB9XG5cbi8vXG4vL1xubG9vcCgpLmNhdGNoKHJlamVjdCk7XG4gfTtcblxubG9vcCgpLmNhdGNoKHJlamVjdCk7XG4gfSk7XG4gfTskaOKAjV9vbmNlLmFzeW5jRG9XaGlsZShhc3luY0RvV2hpbGUpO1xuaGFyZGVuKGFzeW5jRG9XaGlsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3luY0RvV2hpbGUiOlsiYXN5bmNEb1doaWxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFpCIVWNAQAAjQEAACIAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9tYWluLmpzeyJpbXBvcnRzIjpbIi4vYXN5bmMtdG9vbHMuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2FzeW5jLXRvb2xzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vYXN5bmMtdG9vbHMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAQIeAwoAAAAAAAAAAAAaqbb/++cBAPvnAQAUAAAAAAAAAAAAAACkgQAAAABjb21wYXJ0bWVudC1tYXAuanNvblBLAQIeAwoAAAAAAAAAAACngO0dhAEAAIQBAAAmAAAAAAAAAAAAAACkgS3oAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEvaGVhcC5qc1BLAQIeAwoAAAAAAAAAAACHklKnTwEAAE8BAAAtAAAAAAAAAAAAAACkgfXpAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEvc3JjL2V4cG9ydHMuanNQSwECHgMKAAAAAAAAAAAAm0GGYHcKAAB3CgAAKgAAAAAAAAAAAAAApIGP6wEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxNy4xL3NyYy9oZWFwLmpzUEsBAh4DCgAAAAAAAAAAABE3TlxwAgAAcAIAACsAAAAAAAAAAAAAAKSBTvYBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTcuMS9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAKi20+WACAABgAgAAMQAAAAAAAAAAAAAApIEH+QEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxNy4xL3NyYy9pcy1wYXNzYWJsZS5qc1BLAQIeAwoAAAAAAAAAAACGn8koewMAAHsDAAAqAAAAAAAAAAAAAACkgbb7AQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE3LjEvc3JjL2tleXMuanNQSwECHgMKAAAAAAAAAAAApX0TfuoGAADqBgAALwAAAAAAAAAAAAAApIF5/wEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxNy4xL3NyYy9tYWtlLW9uY2UuanNQSwECHgMKAAAAAAAAAAAAaHPLgW8JAABvCQAAMwAAAAAAAAAAAAAApIGwBgIAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxNy4xL3NyYy93YXRjaC1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAJ0BrSMFBQAABQUAACcAAAAAAAAAAAAAAKSBcBACAEBhZ29yaWMvY2FjaGUtdjAuMy4zLXUxNy4xL3NyYy9jYWNoZS5qc1BLAQIeAwoAAAAAAAAAAAB58JFOCAIAAAgCAAAmAAAAAAAAAAAAAACkgboVAgBAYWdvcmljL2NhY2hlLXYwLjMuMy11MTcuMS9zcmMvbWFpbi5qc1BLAQIeAwoAAAAAAAAAAAAKdenDFAQAABQEAAAnAAAAAAAAAAAAAACkgQYYAgBAYWdvcmljL2NhY2hlLXYwLjMuMy11MTcuMS9zcmMvc3RhdGUuanNQSwECHgMKAAAAAAAAAAAA9bduiZ0XAACdFwAAJwAAAAAAAAAAAAAApIFfHAIAQGFnb3JpYy9jYWNoZS12MC4zLjMtdTE3LjEvc3JjL3N0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACcAAAAAAAAAAAAAAKSBQTQCAEBhZ29yaWMvY2FjaGUtdjAuMy4zLXUxNy4xL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADhfIU76hwAAOocAAAsAAAAAAAAAAAAAACkgdU1AgBAYWdvcmljL2VydHAtdjAuMTYuMy11MTcuMS9zcmMvYW1vdW50TWF0aC5qc1BLAQIeAwoAAAAAAAAAAADok/8vIwQAACMEAAAtAAAAAAAAAAAAAACkgQlTAgBAYWdvcmljL2VydHAtdjAuMTYuMy11MTcuMS9zcmMvYW1vdW50U3RvcmUuanNQSwECHgMKAAAAAAAAAAAAyxDGxtMFAADTBQAALQAAAAAAAAAAAAAApIF3VwIAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE3LjEvc3JjL2Rpc3BsYXlJbmZvLmpzUEsBAh4DCgAAAAAAAAAAAFHwcpYDAgAAAwIAACcAAAAAAAAAAAAAAKSBlV0CAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABWDYVFhhYAAIYWAAArAAAAAAAAAAAAAACkgd1fAgBAYWdvcmljL2VydHAtdjAuMTYuMy11MTcuMS9zcmMvaXNzdWVyS2l0LmpzUEsBAh4DCgAAAAAAAAAAAO9heav3BQAA9wUAAEAAAAAAAAAAAAAAAKSBrHYCAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xL3NyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAE07tPrUFAAC1BQAAQAAAAAAAAAAAAAAApIEBfQIAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE3LjEvc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAABDk+AWcwQAAHMEAAA8AAAAAAAAAAAAAACkgRSDAgBAYWdvcmljL2VydHAtdjAuMTYuMy11MTcuMS9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAA/JGylwGAABcBgAAPAAAAAAAAAAAAAAApIHhhwIAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE3LjEvc3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAKodbz+HAwAAhwMAACkAAAAAAAAAAAAAAKSBl44CAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xL3NyYy9wYXltZW50LmpzUEsBAh4DCgAAAAAAAAAAACH5x/cNIAAADSAAAC8AAAAAAAAAAAAAAKSBZZICAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xL3NyYy9wYXltZW50TGVkZ2VyLmpzUEsBAh4DCgAAAAAAAAAAANnHN3H0EAAA9BAAACcAAAAAAAAAAAAAAKSBv7ICAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxNy4xL3NyYy9wdXJzZS5qc1BLAQIeAwoAAAAAAAAAAAC7Qwwc4gUAAOIFAAAzAAAAAAAAAAAAAACkgfjDAgBAYWdvcmljL2VydHAtdjAuMTYuMy11MTcuMS9zcmMvdHJhbnNpZW50Tm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAAct1qsfgYAAD4GAAALAAAAAAAAAAAAAAApIErygIAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE3LjEvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAA/v5WjgUaAAAFGgAALQAAAAAAAAAAAAAApIFt4wIAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEvc3JjL2NhbGxiYWNrLmpzUEsBAh4DCgAAAAAAAAAAABI+V8UcBgAAHAYAACsAAAAAAAAAAAAAAKSBvf0CAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xL3NyYy9jb25maWcuanNQSwECHgMKAAAAAAAAAAAA0N+uT04EAABOBAAAKgAAAAAAAAAAAAAApIEiBAMAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEvc3JjL2RlYnVnLmpzUEsBAh4DCgAAAAAAAAAAACZplWaWAgAAlgIAACsAAAAAAAAAAAAAAKSBuAgDAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xL3NyYy9lcnJvcnMuanNQSwECHgMKAAAAAAAAAAAA8H455boEAAC6BAAAKgAAAAAAAAAAAAAApIGXCwMAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAOe2ujykFQAApBUAADUAAAAAAAAAAAAAAKSBmRADAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzUEsBAh4DCgAAAAAAAAAAAAk6qcmwDgAAsA4AACwAAAAAAAAAAAAAAKSBkCYDAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xL3NyYy9tYXJzaGFsLmpzUEsBAh4DCgAAAAAAAAAAAJXsqr11CAAAdQgAADEAAAAAAAAAAAAAAKSBijUDAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xL3NyYy9tZXRob2QtdG9vbHMuanNQSwECHgMKAAAAAAAAAAAA5oecrxYdAAAWHQAANwAAAAAAAAAAAAAApIFOPgMAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEvc3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qc1BLAQIeAwoAAAAAAAAAAAAAtRo2KAYAACgGAAAyAAAAAAAAAAAAAACkgblbAwBAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTcuMS9zcmMvdGVzdGluZy11dGlscy5qc1BLAQIeAwoAAAAAAAAAAAD0Su0eBgMAAAYDAAAuAAAAAAAAAAAAAACkgTFiAwBAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTcuMS9zcmMvdHlwZUNoZWNrLmpzUEsBAh4DCgAAAAAAAAAAAK1YvglXAwAAVwMAAC8AAAAAAAAAAAAAAKSBg2UDAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xL3NyYy90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACoAAAAAAAAAAAAAAKSBJ2kDAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxNy4xL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAA5/q0qzQUAAM0FAAAwAAAAAAAAAAAAAACkgb5qAwBAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTcuMS9zcmMvdXBncmFkZS1hcGkuanNQSwECHgMKAAAAAAAAAAAAm1O9/+IiAADiIgAAKgAAAAAAAAAAAAAApIHZcAMAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE3LjEvc3JjL3V0aWxzLmpzUEsBAh4DCgAAAAAAAAAAACCVasgUCAAAFAgAADkAAAAAAAAAAAAAAKSBA5QDAEBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xL3NyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc1BLAQIeAwoAAAAAAAAAAABZsA/30AcAANAHAAAqAAAAAAAAAAAAAACkgW6cAwBAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMS9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAA8UEO4IQQAACEEAAALQAAAAAAAAAAAAAApIGGpAMAQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEvc3JjL25vdGlmaWVyLmpzUEsBAh4DCgAAAAAAAAAAAJUEawxOKwAATisAADAAAAAAAAAAAAAAAKSBVbUDAEBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xL3NyYy9wdWJsaXNoLWtpdC5qc1BLAQIeAwoAAAAAAAAAAAA0GfPRIQgAACEIAAA0AAAAAAAAAAAAAACkgfHgAwBAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMS9zcmMvc3RvcmVkLW5vdGlmaWVyLmpzUEsBAh4DCgAAAAAAAAAAAJ2NKpAJFgAACRYAAC0AAAAAAAAAAAAAAKSBZOkDAEBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xL3NyYy9zdG9yZXN1Yi5qc1BLAQIeAwoAAAAAAAAAAACDPI2zNxIAADcSAAAuAAAAAAAAAAAAAACkgbj/AwBAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMS9zcmMvc3Vic2NyaWJlLmpzUEsBAh4DCgAAAAAAAAAAABCtad7iBwAA4gcAAC8AAAAAAAAAAAAAAKSBOxIEAEBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xL3NyYy9zdWJzY3JpYmVyLmpzUEsBAh4DCgAAAAAAAAAAAF9oHjX1AwAA9QMAACoAAAAAAAAAAAAAAKSBahoEAEBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxNy4xL3NyYy90b3BpYy5qc1BLAQIeAwoAAAAAAAAAAACHklKnTwEAAE8BAAAqAAAAAAAAAAAAAACkgaceBABAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTcuMS9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAAU1jQy40GAACNBgAAMwAAAAAAAAAAAAAApIE+IAQAQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE3LjEvdG9vbHMvdGVzdFN1cHBvcnRzLmpzUEsBAh4DCgAAAAAAAAAAABo5eZ2jHQAAox0AADkAAAAAAAAAAAAAAKSBHCcEAEBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuNC11MTcuMS9zcmMvbWFyc2hhbC1jb250ZXh0cy5qc1BLAQIeAwoAAAAAAAAAAACpKdbAnA0AAJwNAAAnAAAAAAAAAAAAAACkgRZFBABAYWdvcmljL3N0b3JlLXYwLjkuMy11MTcuMS9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAA17Osfj8FAAA/BQAAMgAAAAAAAAAAAAAApIH3UgQAQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEvc3JjL2xlZ2FjeS9sZWdhY3lNYXAuanNQSwECHgMKAAAAAAAAAAAAMgFV9gEFAAABBQAANgAAAAAAAAAAAAAApIGGWAQAQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEvc3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzUEsBAh4DCgAAAAAAAAAAAJeOlzu9EAAAvRAAADcAAAAAAAAAAAAAAKSB210EAEBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxNy4xL3NyYy9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanNQSwECHgMKAAAAAAAAAAAAjUlIqOoLAADqCwAANwAAAAAAAAAAAAAApIHtbgQAQGFnb3JpYy9zdG9yZS12MC45LjMtdTE3LjEvc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAABKkRf1yQ0AAMkNAAA7AAAAAAAAAAAAAACkgSx7BABAYWdvcmljL3N0b3JlLXYwLjkuMy11MTcuMS9zcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAAAreXenigoAAIoKAAA7AAAAAAAAAAAAAACkgU6JBABAYWdvcmljL3N0b3JlLXYwLjkuMy11MTcuMS9zcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAACtViviwA4AAMAOAAA0AAAAAAAAAAAAAACkgTGUBABAYWdvcmljL3N0b3JlLXYwLjkuMy11MTcuMS9zcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACcAAAAAAAAAAAAAAKSBQ6MEAEBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxNy4xL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAACHQFzcshYAALIWAAAuAAAAAAAAAAAAAACkgdekBABAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy11MTcuMS9zcmMvZXhvLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAN1zog6tCAAArQgAACoAAAAAAAAAAAAAAKSB1bsEAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLXUxNy4xL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABllqYkyhYAAMoWAAA2AAAAAAAAAAAAAACkgcrEBABAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy11MTcuMS9zcmMvdmF0LWRhdGEtYmluZGluZ3MuanNQSwECHgMKAAAAAAAAAAAALJUcSUURAABFEQAAJQAAAAAAAAAAAAAApIHo2wQAQGFnb3JpYy92YXRzLXYwLjE2LjAtdTE3LjEvc3JjL2NyYy5qc1BLAQIeAwoAAAAAAAAAAAAUJb1vWSEAAFkhAAArAAAAAAAAAAAAAACkgXDtBABAYWdvcmljL3ZhdHMtdjAuMTYuMC11MTcuMS9zcmMvbGliLWJvYXJkLmpzUEsBAh4DCgAAAAAAAAAAAAIux6PCCwAAwgsAADMAAAAAAAAAAAAAAKSBEg8FAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTcuMS9zcmMvYWN0aW9ucy5qc1BLAQIeAwoAAAAAAAAAAACc4sY8rgIAAK4CAAA7AAAAAAAAAAAAAACkgSUbBQBAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE3LjEvc3JjL2JpZ2ludFN0cmluZ2lmeS5qc1BLAQIeAwoAAAAAAAAAAAA6rqU6aQkAAGkJAAA0AAAAAAAAAAAAAACkgSweBQBAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE3LjEvc3JjL2RhdGUtbm93LmpzUEsBAh4DCgAAAAAAAAAAAJh1FSntEgAA7RIAAEAAAAAAAAAAAAAAAKSB5ycFAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTcuMS9zcmMvZmluZE9yTWFrZUludml0YXRpb24uanNQSwECHgMKAAAAAAAAAAAAPGlOxlACAABQAgAAOgAAAAAAAAAAAAAApIEyOwUAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxNy4xL3NyYy9pbnRlcm5hbC10eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAAVeFMvqAgAAKgIAAA3AAAAAAAAAAAAAACkgdo9BQBAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE3LjEvc3JjL2lzc3VlclRhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAKvdjZosHgAALB4AADkAAAAAAAAAAAAAAKSB10YFAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTcuMS9zcmMvbGliLWRlaHlkcmF0ZS5qc1BLAQIeAwoAAAAAAAAAAAADQ+o3kaUAAJGlAAA2AAAAAAAAAAAAAACkgVplBQBAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE3LjEvc3JjL2xpYi13YWxsZXQuanNQSwECHgMKAAAAAAAAAAAAU+AS6r8CAAC/AgAAMgAAAAAAAAAAAAAApIE/CwYAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxNy4xL3NyYy9wdWJzdWIuanNQSwECHgMKAAAAAAAAAAAAvMXeHxQ1AAAUNQAAMgAAAAAAAAAAAAAApIFODgYAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxNy4xL3NyYy93YWxsZXQuanNQSwECHgMKAAAAAAAAAAAAyg6WLHAYAABwGAAAOQAAAAAAAAAAAAAApIGyQwYAQGFnb3JpYy96b2UtdjAuMjYuMy11MTcuMS9zcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzUEsBAh4DCgAAAAAAAAAAAOmzy3yNAQAAjQEAACQAAAAAAAAAAAAAAKSBeVwGAEBhZ29yaWMvem9uZS12MC4zLjAtdTE3LjEvZHVyYWJsZS5qc1BLAQIeAwoAAAAAAAAAAABqsCUuMhEAADIRAAAoAAAAAAAAAAAAAACkgUheBgBAYWdvcmljL3pvbmUtdjAuMy4wLXUxNy4xL3NyYy9kdXJhYmxlLmpzUEsBAh4DCgAAAAAAAAAAADSQ5KbTBAAA0wQAACsAAAAAAAAAAAAAAKSBwG8GAEBlbmRvL2NvbW1vbi12MS4yLjUvYXBwbHktbGFiZWxpbmctZXJyb3IuanNQSwECHgMKAAAAAAAAAAAAt5kLwGYEAABmBAAAKgAAAAAAAAAAAAAApIHcdAYAQGVuZG8vY29tbW9uLXYxLjIuNS9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzUEsBAh4DCgAAAAAAAAAAAApv1Ss9AgAAPQIAACQAAAAAAAAAAAAAAKSBinkGAEBlbmRvL2NvbW1vbi12MS4yLjUvaWRlbnQtY2hlY2tlci5qc1BLAQIeAwoAAAAAAAAAAAC7Q+YXfgIAAH4CAAAmAAAAAAAAAAAAAACkgQl8BgBAZW5kby9jb21tb24tdjEuMi41L2xpc3QtZGlmZmVyZW5jZS5qc1BLAQIeAwoAAAAAAAAAAADwKCI7ZQMAAGUDAAAqAAAAAAAAAAAAAACkgct+BgBAZW5kby9jb21tb24tdjEuMi41L21ha2UtYXJyYXktaXRlcmF0b3IuanNQSwECHgMKAAAAAAAAAAAA43rZSj8CAAA/AgAAJAAAAAAAAAAAAAAApIF4ggYAQGVuZG8vY29tbW9uLXYxLjIuNS9tYWtlLWl0ZXJhdG9yLmpzUEsBAh4DCgAAAAAAAAAAAKliUIoIAwAACAMAACEAAAAAAAAAAAAAAKSB+YQGAEBlbmRvL2NvbW1vbi12MS4yLjUvb2JqZWN0LW1hcC5qc1BLAQIeAwoAAAAAAAAAAADhcytM5wMAAOcDAAAmAAAAAAAAAAAAAACkgUCIBgBAZW5kby9jb21tb24tdjEuMi41L29iamVjdC1tZXRhLW1hcC5qc1BLAQIeAwoAAAAAAAAAAADtPiOx7QMAAO0DAAAkAAAAAAAAAAAAAACkgWuMBgBAZW5kby9jb21tb24tdjEuMi41L3Rocm93LWxhYmVsZWQuanNQSwECHgMKAAAAAAAAAAAAVJz8PJkBAACZAQAAIQAAAAAAAAAAAAAApIGakAYAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAE3j+/z1DQAA9Q0AACsAAAAAAAAAAAAAAKSBcpIGAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNi9zcmMvZW52LW9wdGlvbnMuanNQSwECHgMKAAAAAAAAAAAA19Y+BvEHAADxBwAAHAAAAAAAAAAAAAAApIGwoAYAQGVuZG8vZXJyb3JzLXYxLjIuNS9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADGbf2bpBAAAKQQAAAjAAAAAAAAAAAAAACkgduoBgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvRS5qc1BLAQIeAwoAAAAAAAAAAACHklKnTwEAAE8BAAApAAAAAAAAAAAAAACkgcC5BgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvZXhwb3J0cy5qc1BLAQIeAwoAAAAAAAAAAADO4rpotQwAALUMAAAnAAAAAAAAAAAAAACkgVa7BgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvbG9jYWwuanNQSwECHgMKAAAAAAAAAAAAYbq8rPEMAADxDAAANQAAAAAAAAAAAAAApIFQyAYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanNQSwECHgMKAAAAAAAAAAAAn+/zEzwDAAA8AwAAKQAAAAAAAAAAAAAApIGU1QYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUvc3JjL25vLXNoaW0uanNQSwECHgMKAAAAAAAAAAAARjFGQWkJAABpCQAALQAAAAAAAAAAAAAApIEX2QYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUvc3JjL3RyYWNrLXR1cm5zLmpzUEsBAh4DCgAAAAAAAAAAAHvYFwdbAgAAWwIAACMAAAAAAAAAAAAAAKSBy+IGAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41L3V0aWxzLmpzUEsBAh4DCgAAAAAAAAAAANwQVnZXAgAAVwIAABkAAAAAAAAAAAAAAKSBZ+UGAEBlbmRvL2V4by12MS41LjMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAG1aXle4UAADuFAAAIgAAAAAAAAAAAAAApIH15wYAQGVuZG8vZXhvLXYxLjUuMy9zcmMvZXhvLW1ha2Vycy5qc1BLAQIeAwoAAAAAAAAAAAAxqkmWETAAABEwAAAhAAAAAAAAAAAAAACkgSP9BgBAZW5kby9leG8tdjEuNS4zL3NyYy9leG8tdG9vbHMuanNQSwECHgMKAAAAAAAAAAAAcrUHzzwCAAA8AgAAJQAAAAAAAAAAAAAApIFzLQcAQGVuZG8vZXhvLXYxLjUuMy9zcmMvZ2V0LWludGVyZmFjZS5qc1BLAQIeAwoAAAAAAAAAAACHklKnTwEAAE8BAAAdAAAAAAAAAAAAAACkgfIvBwBAZW5kby9leG8tdjEuNS4zL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAANLyANWwIAAFsCAAAdAAAAAAAAAAAAAACkgXwxBwBAZW5kby9mYXItdjEuMS41L3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACI4G/yeQcAAHkHAAAdAAAAAAAAAAAAAACkgRI0BwBAZW5kby9tYXJzaGFsLXYxLjUuMy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABy5/BxbkMAAG5DAAAqAAAAAAAAAAAAAACkgcY7BwBAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvZW5jb2RlUGFzc2FibGUuanNQSwECHgMKAAAAAAAAAAAAMIx013IiAAByIgAAKwAAAAAAAAAAAAAApIF8fwcAQGVuZG8vbWFyc2hhbC12MS41LjMvc3JjL2VuY29kZVRvQ2FwRGF0YS5qc1BLAQIeAwoAAAAAAAAAAAAHhI1JSyIAAEsiAAAtAAAAAAAAAAAAAACkgTeiBwBAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvZW5jb2RlVG9TbWFsbGNhcHMuanNQSwECHgMKAAAAAAAAAAAA3By6ACYjAAAmIwAAKgAAAAAAAAAAAAAApIHNxAcAQGVuZG8vbWFyc2hhbC12MS41LjMvc3JjL21hcnNoYWwtanVzdGluLmpzUEsBAh4DCgAAAAAAAAAAAG3KGWNnBgAAZwYAAC0AAAAAAAAAAAAAAKSBO+gHAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qc1BLAQIeAwoAAAAAAAAAAABXE7/XUicAAFInAAAjAAAAAAAAAAAAAACkge3uBwBAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvbWFyc2hhbC5qc1BLAQIeAwoAAAAAAAAAAACvIrmO7CUAAOwlAAAlAAAAAAAAAAAAAACkgYAWCABAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvcmFua09yZGVyLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACEAAAAAAAAAAAAAAKSBrzwIAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAACyOU3DYAUAAGAFAAAeAAAAAAAAAAAAAACkgT0+CABAZW5kby9uYXQtdjUuMC4xMC9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAALeKnmEQKAABECgAAIAAAAAAAAAAAAAAApIHZQwgAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAA/hWf62AGAABgBgAAKAAAAAAAAAAAAAAApIFbTggAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL2NvcHlBcnJheS5qc1BLAQIeAwoAAAAAAAAAAACkqY3rNwgAADcIAAApAAAAAAAAAAAAAACkgQFVCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvY29weVJlY29yZC5qc1BLAQIeAwoAAAAAAAAAAADGfQJdbAoAAGwKAAAuAAAAAAAAAAAAAACkgX9dCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzUEsBAh4DCgAAAAAAAAAAAKB19VxEEgAARBIAACQAAAAAAAAAAAAAAKSBN2gIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9lcnJvci5qc1BLAQIeAwoAAAAAAAAAAABUGK4pmAUAAJgFAAArAAAAAAAAAAAAAACkgb16CABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvaXRlci1oZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAOUGN7laEQAAWhEAACcAAAAAAAAAAAAAAKSBnoAIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9tYWtlLWZhci5qc1BLAQIeAwoAAAAAAAAAAABuY+JZjAQAAIwEAAApAAAAAAAAAAAAAACkgT2SCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvbWFrZVRhZ2dlZC5qc1BLAQIeAwoAAAAAAAAAAAB573NZKRUAACkVAAAwAAAAAAAAAAAAAACkgRCXCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAP5iJSeUkAADlJAAAKgAAAAAAAAAAAAAApIGHrAgAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3Bhc3NTdHlsZU9mLmpzUEsBAh4DCgAAAAAAAAAAAHfRUnvEFwAAxBcAACgAAAAAAAAAAAAAAKSBtNEIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9yZW1vdGFibGUuanNQSwECHgMKAAAAAAAAAAAAm2gvpJcMAACXDAAAKwAAAAAAAAAAAAAApIG+6QgAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3NhZmUtcHJvbWlzZS5qc1BLAQIeAwoAAAAAAAAAAAAZCJttvgcAAL4HAAAlAAAAAAAAAAAAAACkgZ72CABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvc3RyaW5nLmpzUEsBAh4DCgAAAAAAAAAAAEH3I0UJCgAACQoAACUAAAAAAAAAAAAAAKSBn/4IAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9zeW1ib2wuanNQSwECHgMKAAAAAAAAAAAAOsrS9SYHAAAmBwAAJQAAAAAAAAAAAAAApIHrCAkAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3RhZ2dlZC5qc1BLAQIeAwoAAAAAAAAAAACx9PL4DwkAAA8JAAApAAAAAAAAAAAAAACkgVQQCQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvdHlwZUd1YXJkcy5qc1BLAQIeAwoAAAAAAAAAAACHklKnTwEAAE8BAAAkAAAAAAAAAAAAAACkgaoZCQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAAFVRpDLwOAAC8DgAAHgAAAAAAAAAAAAAApIE7GwkAQGVuZG8vcGF0dGVybnMtdjEuNC4zL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAPi/xd+CMgAAgjIAACoAAAAAAAAAAAAAAKSBMyoJAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMva2V5cy9jaGVja0tleS5qc1BLAQIeAwoAAAAAAAAAAADS/rx1OhUAADoVAAAtAAAAAAAAAAAAAACkgf1cCQBAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL2tleXMvY29tcGFyZUtleXMuanNQSwECHgMKAAAAAAAAAAAAfWdXJOENAADhDQAAKQAAAAAAAAAAAAAApIGCcgkAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL2NvcHlCYWcuanNQSwECHgMKAAAAAAAAAAAAkwx4AegLAADoCwAAKQAAAAAAAAAAAAAApIGqgAkAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL2NvcHlTZXQuanNQSwECHgMKAAAAAAAAAAAAbBMobfcSAAD3EgAAOQAAAAAAAAAAAAAApIHZjAkAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzUEsBAh4DCgAAAAAAAAAAAL48hwRsFgAAbBYAADUAAAAAAAAAAAAAAKSBJ6AJAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzUEsBAh4DCgAAAAAAAAAAANINA8mtHAAArRwAADUAAAAAAAAAAAAAAKSB5rYJAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzUEsBAh4DCgAAAAAAAAAAALG3kDUWGQAAFhkAADYAAAAAAAAAAAAAAKSB5tMJAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qc1BLAQIeAwoAAAAAAAAAAADAYaLPM64AADOuAAA1AAAAAAAAAAAAAACkgVDtCQBAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qc1BLAQIeAwoAAAAAAAAAAACHklKnTwEAAE8BAAAiAAAAAAAAAAAAAACkgdabCgBAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAOSmxYRRBgAAUQYAACEAAAAAAAAAAAAAAKSBZZ0KAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNS9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADAKHnJWwIAAFsCAAAqAAAAAAAAAAAAAACkgfWjCgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjUvc3JjL2lzLXByb21pc2UuanNQSwECHgMKAAAAAAAAAAAAbS8BOKIHAACiBwAAKQAAAAAAAAAAAAAApIGYpgoAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41L3NyYy9tZW1vLXJhY2UuanNQSwECHgMKAAAAAAAAAAAA+HAxxIIFAACCBQAANAAAAAAAAAAAAAAApIGBrgoAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41L3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc1BLAQIeAwoAAAAAAAAAAACHklKnTwEAAE8BAAAlAAAAAAAAAAAAAACkgVW0CgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjUvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAADTfnpWgEQAAoBEAABwAAAAAAAAAAAAAAKSB57UKAEBlbmRvL3N0cmVhbS12MS4yLjUvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAaqMiUMgBAADIAQAAHAAAAAAAAAAAAAAApIHBxwoAamVzc2llLmpzLXYwLjMuNC9zcmMvbWFpbi5qc1BLAQIeAwoAAAAAAAAAAAB7GF4ZeAEAAHgBAAAfAAAAAAAAAAAAAACkgcPJCgBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9FLmpzUEsBAh4DCgAAAAAAAAAAALp/out1AgAAdQIAACwAAAAAAAAAAAAAAKSBeMsKAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL2FzeW5jLWdlbmVyYXRlLmpzUEsBAh4DCgAAAAAAAAAAAOhUL3vrAQAA6wEAACIAAAAAAAAAAAAAAKSBN84KAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL21haW4uanNQSwECHgMKAAAAAAAAAAAAl0Dzy9YHAADWBwAAJAAAAAAAAAAAAAAApIFi0AoAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFrZXJzLmpzUEsBAh4DCgAAAAAAAAAAAFrjvzpRAwAAUQMAACkAAAAAAAAAAAAAAKSBetgKAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcxL2FzeW5jLXRvb2xzLmpzUEsBAh4DCgAAAAAAAAAAAFpCIVWNAQAAjQEAACIAAAAAAAAAAAAAAKSBEtwKAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcxL21haW4uanNQSwUGAAAAAJ4AngAtNwAA390KAAAA","endoZipBase64Sha512":"965f5af61f39dfcbab2ead5619438c5798793b2b233db34a70d7a0b66e1f42fb98a36d4e4c7982a230ecce4c01e2246522838eebc1a4474cd28a2ab5fcee2b44"};
1
+ export default {"moduleFormat":"endoZipBase64","endoZipBase64":"UEsDBAoAAAAAAAAAAAAPsltjBfsAAAX7AAAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxOC41IiwKICAgICJtb2R1bGUiOiAiLi9zcmMvd2FsbGV0LmpzIgogIH0sCiAgImNvbXBhcnRtZW50cyI6IHsKICAgICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE4LjEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvYmFzZS16b25lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTguMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE4LjEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMy11MTguMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaGVhcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJoZWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2U0ZjMwMDAwMDgzMGIwZDQwYTQ1ZDFkNDUxM2RmODFlMTRiMzUzMWU0YjBiMWMzMzU2N2FkNGQ2YzFjMjI1NDQ0YjYyN2ViYjIzODQ5ZTIwYjgwNzM5ZDYyOTBiYTRmYTVlN2Y4NjgzNDc0Yzc4MGQxZGMzYmE1NDA3MDU2MDQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhwb3J0cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhwb3J0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2hlYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2hlYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhM2ZmMDZjMjY1YjM4NmU3YTBkOTBlMTdkZjQwZDc5OTU0YjFhMTE4N2U5ZDY0OGUxODg4NDdiYWJjNzZkYTM1ZWJkYzkzNjE0MWZlYWUzZTE4ZTNhZTMwYzc4YmQ5MmY3ZTgyMjZmYmNhMTRhZjhkM2Q3ODRlOWJiNjFkYjk2ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkMWJjYmRkYTQ3M2Y3ZmQ0MjVlNDdjMzMxODA5NTZkZjEzYmNjYzRjNWU4ZjhlODk5ZmQ0YjlmNWUyODg3YTcxZTg4ZTcxZGMwM2UwOWRmMTg5MGRiZWM0ODI5ODVkMjVhYjJhOTlhMjhmOWE5OWY0NmQzODU4Y2QyN2RiYjMzOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pcy1wYXNzYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXMtcGFzc2FibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0MWQyYTg1ZjliMjg5MDc3N2E4MTBjY2VhNzQyY2YzNTg4NmVlMDQ3NDdmMDJjZjRkNjM2NzU0MzU3MjRjYWRhMDBkMThmYWE1NjcxNTZiNmMzMWU5YWNkZjQwNzdlNzk1MDYwZjIyNzEzZDVjN2QwMDRiZGZhZWMxOTgxMDMzZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTA1ZTg3NTdjNzE1MDY5NmRjZjk0NTNiY2ZlNmI0MjM4MDk0MTQ0NDAzODQ2OTc2MzU1MjM4NDAxNjVhZDY2YWI2OTA2M2FhYmQ3NmQyNmNlMzc3MjBmNDFhZjE5N2FmNjE3NzgyYWIyMjMzZmIxZmQyMWMzNDhjZTNlNmY1Y2MiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZS1vbmNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlLW9uY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1ODM5ZGJmMTg0NjFlYmVlM2NjNzE0NjYzMmE3NDk3ZTYwNGMyMGI5Yjc1OGZhMGE2Zjc5NjZiNmMyNTVjODhmNDI1Y2IyZjIzNjIyNjM2ZDlkOWE2MGExM2E1ZmVmYTc3MjkzZGJiNzY4ODRhZjVkMDk4MDNhNzU3ZmRiOGYxMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy93YXRjaC1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy93YXRjaC1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDVlZDc3Yzc0ZTczYjM4ZjJkODBkYjYzMDIyZmI4NGM0NTVkNzI5YTI1YjI3ZTZjZjg4NWMxMzQwODkzYWU5YzFiNWFlN2U1NmIzYjZhYWZmNDIwMzk5MTAwMTgxMzVlMmQyOTYyOWYxYmRhNmI0ZTdiMGI0MzRlODE4ZTNmYWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvY2FjaGUtdjAuMy4zLXUxOC4xIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2NhY2hlIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvY2FjaGUtdjAuMy4zLXUxOC4xIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvY2FjaGUtdjAuMy4zLXUxOC4xIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE4LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxOC4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy11MTguMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY2FjaGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NhY2hlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2RmNWRkNDAxOWQ0MjgyNGRiODg2MWMwM2U4YWQ0OGVhZWYyMDk2ZDUxNDYxNjg5ZjRjZTRkZDE3MWJlM2E2NWIzOGEwYTBiMTViMGI5NDhmNDdhYWYxNmFhMTg0MmQ4MDlkZjc2NzdhNDBhZWRiOTI1ODMwYTlhMTdlNDkxOWUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjkxNGMwYWEwYmRjODljM2NiM2I2MDNhN2Q2NGNiNDA4MzkzZTk0ZGYwNjE3MDg1ZmVlY2U3NDAwMTcyMDUwMTY2NjIzYjczZjZjMGU1YzBhZTk0NDRkMDJmYzIxYjIzYzU4MjhlMzc3NjczYjRlOThhYmYxYmEyOTcxZDRiMjIwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0YXRlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdGF0ZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQ1MzU0ZmMzMWE3NDE3MWMxOTk3OGIxNjQwNmE0ZDY1N2EyZjRhOTAyYzkyM2M1MGM2ZTc1ODkyOWQzYjdhNTFlMjAyNTQ1OGMwOGQ5NWMzMzAyMzBjZjliNjY0OTBiMTg4NDUxY2I4MTQyMWYzMGNjNjcxYjk3YWY1Zjg2MWIyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3JlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY0MmQyY2JkMGY4YmQ4ZmEyZWVkYjFkYmE3NTA3YTI3ZTFiMGExM2M1ZmUzMTg2YjMwZDQzODk2YTFlMTBiNDI4OWM4NjUwYzVjY2FjMTRjNDczNjAyN2I0ZDY2YWE0MGM2NWU3NGUwYjBhMTcyZDVjY2ZiOGU0MTRmMjA1YjMwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL2VydHAtdjAuMTYuMy11MTguMSI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9lcnRwIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxOC4xIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxOC4xIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE4LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxOC4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy11MTguMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4zLjAtdTE4LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hbW91bnRNYXRoLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9hbW91bnRNYXRoLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzAyNzUxMTMwNzdhNTNiM2M2NWE4NmJlNzk0NzIxNWNmZWQ5YTBmNjUyMTY2OTVkODVkNTkxN2I2NTRkYmQyYTNhNTAwODA0YmY4YmY5YmNiYTM5NzIzZDhlNmQ3MDRkYzYwN2IzOTVlNGNjNTI4ZjY4NzczMDU0NjUxNGVmNGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYW1vdW50U3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Ftb3VudFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzA1OTNkOTg3ZTBhMGUzZTNlODRlZjAwN2I2MzJlMjkwMzNiMmExMWM4MDU0M2Q1Yjg4M2Q2NjNjMDRiY2Y1MDdiNGUxZDFhZjEyMTY3YTU3ODkzZGVjMzgxNzU0OGY0YzRmMGRiYjczMjBiMWM0MGY4N2ExMzVmNDA1NzNjY2EiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGlzcGxheUluZm8uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Rpc3BsYXlJbmZvLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmNlNmQ4YjM4NDUxM2E1MDUyZDI1YzRkYmI1YjIxZTBkNTc0MmZhYzhhOTQ4OTY4ODY2Zjc3YmI5MjE3Y2EzNzJmOWRiMTMyMjVlOTEyOTAyMGFmZGQ3YmU2OTMxYTNhZWQxNGMyNGE4MTE0YzI1NWNkNzc4YmQ0YWE5NTA5OTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMmJmNDAwZWNkZmE5YTBhYWI5OWVhZDgzZjRiMmJjMWJlNmJlMGE1ODI4MDc2ZGZmZGVkNWMxZjdhMDkwZDk4MmZjYjI5NWQ0MzU4ZTIzZWNmMDIyYWM0MDMxNDljYTdiMTgyMWZkMDRjNTY3NGMzNDNlMTc3ODI3OGQyNDdmMWUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXNzdWVyS2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pc3N1ZXJLaXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMTAxZjczMDA1YTA1M2Y2Njk4NGE3MDIwNDI2MzVmY2NlMjYxNmI4NmZkM2MxMTAxZGUxMWU5ZTcwNGE1OGEyMjU1NDdjYzFjZDUwNjk3NGMyYzM3MGQ0NmFlYTA1ZjJlMDg5ZTU1MDYzYjI2ZTRlMjhmZjg0OGFiNTEwMWQ4OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjJkZDBlZDBmZjdmMTBiYTU0N2E2MTQxMTI0ZGQyOWZhNzAxM2NkZmQ4ODQ2NTJkOGQzNWM0ZGY4OTQ5OTc2YjM2OWMzMmJjOWQwZmJmODc3NWRmM2E1YTU2ZTBhYzU2NWIyOTQ5ODVkOWU5ZGJiMmE4ODA1YzU0NTVlMGU5ZTQzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiY2NkNDAxZDUyZjc0YWQ1NTQ2YzY5YmVmNzE3OTU3N2ZmYzc4NGE5NzBhNzA0MmE2ZWQ1YmEwMDczNmUzMjgxNWExYzA0OTIzZDE2ZTI0ZWQ0NzgzYzExYzg2ZWYxMzE1NTA5MzdhZDdiNTExNDg5NDkwMDFmMDYzMmEwYjI0OTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjNlMGMyODc0MmEyNTE1OTBkNzE0ZWUzMjBiYzc4Y2FmMjI1NzVhNGZjMmI3MGQ3NjU3YWNmMDM2OTViOTUxZDJjNWEyYmE1YWZhNWQ4NjgyNGVmZmQ2ZTU1MzA3ZGJlN2NjZDlkOTQzZGY4MDA3Y2Q5ZDYxZDI1OTNlM2RhMTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMmYwMGUxYjdhODk3M2NlM2EzM2MzNTA1YTc5NTlmMjg1OTZhYjRiZmM1ODAyOTk5OWRhZDRjYzZiOWRhYmQyMjg4YmY2NzRjOWY5NTEwNTYwZWRmNzVkNjY2NjcyOTQzZWU0YjMyNDI4MWVjYzc2ZDNjZTcwMmU4YjQ4ZmY4M2UiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF5bWVudC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGF5bWVudC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM2ZjY3NDVlNzJkMzg0YjJmOTUyMjlmMmZmOTliMWFjM2UxNWQ1ODg1NzA1MTU0MTRlNjc5YzA0YTRkYmNlMDNiZWVhOGJkOWQ2NjhhNzA3MTlhYWRjZmI4ZTJjY2RiMGM5OGZkNjM1ZGU2NzRkMmVmNDc2ZGJlOTYyOTZhZWExIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BheW1lbnRMZWRnZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BheW1lbnRMZWRnZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5NmRiZTI2YjJkZjdlMjNlOTQ2NDA3MGU2Y2ZhNjYxODBlYzRmZDhjNmFjMjlkMGM2ZWJhZGRlMGIwMWEwNjE4Nzc2NDAzYjAyNzJiYWVhNzJkNDNjN2NiMTVlNTkyYjMxOGI0Njc2MTkxYjk3YThmYmVlOTEwZGYxMjc4YjU0YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdXJzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHVyc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyNDIyMDQwNzhmYjY4NDEzMTQwYzhmZjQ5ZTAyODAxMWQyMTBiMDhkNmFlZDc4NDZlYmVjOGU2ODlkYTE1YTdmZGFmM2FjMzk0ZDY2NDcwOWE4YjRlMTAyZjA5NDNmNDAyMWJlZWFiMDZlZjgwZmY0MDNhYjZkOGI2MDQ0YjQ0MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90cmFuc2llbnROb3RpZmllci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHJhbnNpZW50Tm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4OTU0NjZkNDg1ZGVmMTNlNjEzNDU5YzcxYmI5MGFiODZjMGFjNTJjN2NmYTkyMGI3ZTRjMDBiOTk0YjEzNzc1ZjNiZTA3MjA0YzgxM2Q4ZWQyYmNmYzFlMjEyNzgyMDY1YmFkZDE1ODk4NmYxYTI4ZDE0ODEzZmExMDFhZmI4MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDlkYmViY2JiN2VkOTkxZjk4YWE4NDgyMjA3NTlmMjU0MTI1YTY4OGEwMzgxZmRmNDYwM2FhOTQ5NzQ0ZThmYmNmZTNmNTk0Y2YzNjU5NGM5Yjg3MGFlYzRlMzkzYWU1MjUyNzNkYTY3OTZlNzkzNWUxYjdmMWZmYTdhOWMyNTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMtaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLWluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2ludGVybmFsIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxOC4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vc3RyZWFtIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3N0cmVhbS12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgImplc3NpZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJqZXNzaWUuanMtdjAuMy40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbWFpbi5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jYWxsYmFjay5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY2FsbGJhY2suanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhM2QwOGNjNjIzOGFmODczNmE3OGEzYTI2YzQ2OWIyYmYzMGZlNDE4ODA0YzU3ZTg5MGNlNmYzZWJkNDIzMWRmMjQ3ZGM4YjAwNWU3ZGRkMjM3ZWFhOGNiNWM1ODkxZDA5NWU3ODI0OWQzZjZjM2NlNWNiYmJhMTQzZjViYjM0ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb25maWcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbmZpZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk1YmI4NjhjMjQ1ZTUzN2RjNTIxZmI2Mjc4MGYwNGE5NjkzMmFkNWRjOGNjYTNmNDIyMTkzM2MyZmM2YmFlZmUzOWY2NTM0ZTc5NTFlODU4MzVmNTY2NTcxM2I5MzZmZDM2ZTA0YjFmNmU4ZTA4MjJkZDM1ZGE2YWU2YmU3MGZkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2RlYnVnLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kZWJ1Zy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImIyMmJhZTVjMzZkODM5MzFiM2RmN2RmZmQ5Y2NiMGEzM2IxZjIxYTk0NWFhOGI1ZWM3YzdmZGIyMjg4MTNkMGY4ODU4MmYyZTI5ZmFhOTY1NzEwMTk4MDE4ZDVlOWFmYTljMjkzMWUzYjIyYzcxNDE2YWQ0MTY4MzIwOTdhN2IwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Vycm9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXJyb3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjMzZDk1ZmY5M2JlN2FjNGJiN2RlZjFkNzNlMTA5YWY1OTE5ZjRkMmFlYjVhZjA4ZmIwNGQ0MGQ2Yzg3N2RlODBhMjdkNWJiMWE3MjJjZDcxMjk2ZTQ3ZDI2OWJjYWFiODA1NGJlZWNkZmFmMWZjNzBmNTRmMTVlYWFkODVlMTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGE0NWViN2Q3Mjk3NWFlZmNmYWU4M2FhMDQ5Y2E5ZWE0MjdmZjdlYzA1MzlhZTQxOGQ3YWIwZTEzMjM3ZTJiNTgwOTBkMzVkY2I3OTVkYjZhNTQ1ZjBiODhhY2Q3ZGNmZmI5YWYyNTM3ZTFjZWRlZDVkZjY3ZGY3MDQ1N2FiYTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvanMtdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2pzLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZWM5OTAzMjM0ZDM4YjRkYzQ4M2NmZTRmYWI4MDUzMDJmZTI1NDhlMmZmOGM0ZGQ4OGY2NzI1NzJmZWRiNWQwY2M1NTg5N2YyYzMwMjYxZTY3YjJiZDg5MzQxYzEzYzE4YWQ1YTQxMjlmMDEwNWYxNTEzY2FkZDcxYzczMmIxOTUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGliLWNoYWluU3RvcmFnZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjg3MzFmMWMzMDM2NjAyYWQ5MGQ1OTliMzVhNjA2ZmZiMTI4NjY4YjBmY2YyMDAzYzUzYThiNDgwNDE0YWRkNTFmNGU3YzE2MTFiNjhkM2M4M2Y1MTk1MTE5ZGY1YjQ2ZDVmMjlmNDQxMmI3Y2Q3YjY1ZjFmYzU1MmUwZDBhYzgyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2OWY5MDI4NDhlZTc0M2JjNmM2OWQxMDA1MmY5NGRmM2IzYTE3NGJlMzVjNDUxMmJiNzI4ZDQ2NjkxMzRjYjIwZWNiMTE5N2I0MWNhNmRhYTVmZjNmNDQ2NjQzMGVlM2IzNzBjNDRhYzIzZjQzYmJmZWJlM2QyYzkwNzczOGI1MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZXRob2QtdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ldGhvZC10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgwNDQ1NjlkYzc0YTYyZTQyMGRjOGUzOTE3YjVmYWYxZjdhYTBkZWRlYTA2MTczNDkzNTJiYmFhN2U5ZTA1ZGZhOTBmNmZlZDAwNTg5NjZiMTIxMTIxZWRhODM1YzQxNDA1YWMxNjMwNmRiZmIwNjI5MjUwMzIxOTQwOWFmMDAwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Nlcy11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc2VzLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmQyZjY4NzI3M2VjNTkxNjU3OTA2MjA1NmM2NWEzODZmMGM5OWNkY2E3YTU5Y2EyMTA4MmE3MDM1YTY0MzAwY2NmYzAzYTEyMzM2MjJiNWExYTMxZjM3MThjMGE4ZTVhZDYwNGJjNjFhZTgyNTE3YzcyOTc0NmE0YTJjYmJjMTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkYzBiYWEwZjkwZGY4NTliNGEyMDVjNjQ3NzY3MjFkODJmZDMwZGNhNzYyMTI1MjJlMjI2YTg1ZWViZWNmYjIxNGUxMWU3YmZlN2M0YWMzNzAxZTIxMjBlM2Q5NDQ5NjhmODI4YWJmMTRiYzRiNTEyYWJlZWY2NDg0NzYyYjhhNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90ZXN0aW5nLXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90ZXN0aW5nLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjI2NmYxMGEwYjlhNzMzYTcwZWVkM2NlMWY2YTE0NjcyODNhNjU3OGU5MTUxMzUxMDEyNmY2OGFiY2Q0MWQ4ZTFkNzQ0NDQ3NmI5ZWI5MGU0NzA5ZjU2MjQ0OTczODRhN2U3NDVkYTY4ODJmMTVkMWY2NDBkNGNhYmM4NmVjODQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUNoZWNrLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlQ2hlY2suanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3MWU1MjA1MGZkODlmZTc4MTVlZmVjNjI4ZWFhZWIyMDBiN2Y3Y2RkYTg0ZWU3Y2RiYzZmMjAzYzAzZWRlZjA2MTcxYmYyZWM2N2MyMDgxMmY4MzIxYTRlMjU5Y2Q5N2VkODUzNzdjZjU2NDVlNzMxMTQxYzljMjNmN2VlYjU3ZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODZmZjdjZDZiNmRkYWZmNTc5YTVhNjFmODIzMWM4NDVmZTM5NDA5YjJkODRmZmY0NzFmYmI3YzZmYzIxOWVhYzg4ZWEyZTY1YmRkODI4OWRkMWQ4YWQ4OWE4Nzc3OWI5MmFjYmJlNjc2NTkxMmI3ZWM3ZjI2OWM2YjMwMjdhNmIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMtaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLWluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdXBncmFkZS1hcGkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3VwZ3JhZGUtYXBpLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTBlYzJjNGQwZTU2OWUzM2ZmODdjM2YzNTQ1N2JjZDQ2NzY2OGJjZGQ5ZDJiM2Q3NTA5NWI4N2I5YWViM2IxMzFjOWQ5ZDgzOGM4OWU4MzQ3MzU2YzA3M2UwY2RhZTkzMDQwNDRhYzk1NjQ3OTZkYzk0NzI2NGUxNzZkNGI0YjQiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxOC4xIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL25vdGlmaWVyIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxOC4xIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxOC4xIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE4LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsL3NyYy90ZXN0aW5nLXV0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvdGVzdGluZy11dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsL3NyYy91cGdyYWRlLWFwaS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL3VwZ3JhZGUtYXBpLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjMtdTE4LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjliOWM1NDZmYzFiMzJkZDdlMTNjZjM4OGIxNWYwYWJkODk4OTU5ZWJlMTc4YTc3MWRjNzkyNWVlMWQzYWZmMDdiZDg2ZGFkYzAwMjUwNmQ5N2JiMmI5OTA1ZDIxYzNhNjQ5NjNkOGRkZDRjOTM4OGVhNDgzNmU4OWU4OTZiOGEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDAxMTAwYWQxZWMwY2MxNTQ1NWNmZmJhYTYwNDAzMDNiMWMzMWZjZDgxODRiOTQ0ZmI5YzdjYWU4NjIxNmMyMDA5ODBjYmY2ZTY4NmI0YjlkY2I0NTM0YmQ4MDQyMDViNzJlZDk3Zjc5ZmE2MTA1YTdmODA5YzZmZGZiNmVlNjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbm90aWZpZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL25vdGlmaWVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGUwYzY5ODIxNjljMTkyODk0MGFmNjY5NjFkZjlkNzdkZmExN2M4ZTkyNThjN2M3ZGIxYzViMjk3ZTU3MTM0YjhiNTQ3ZTM0M2RiZTZkNTU1YjYwN2YxYzg3M2JkZTJiZmVmMjUwNzI1NTM4Mzc0NmE5NmY4YWU2YTVmNzIzNjciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcHVibGlzaC1raXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3B1Ymxpc2gta2l0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTQyYmMwNDYxNGQ3ZWI5MjMxOTkxODIwYmRkYWQ5ODYxYzRkYTRlZmNhZTg3NGZmMGUxNTY2MGYwN2Y1YTc1ZTE1NDFjMjcxOWM0MTRiMDI0N2I0ZDBiZTJhNTllNDY4N2FlYzI0MWYzNzc4MTNlZTlkNWU1OGNiODBkNWI0MDQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVkLW5vdGlmaWVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZWQtbm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOWM4YTA3ZDc1OTdhNzU1ZjEzMjNiMTdhMzU3ZTJmZWM4ZjRmZGNkMTc3NTNlYjdiNWQyNDc0ODhkNDgxNzcwYmQ3OTU4ODdjZDc3OWMxZGIxN2UyODcwOGNlYWRlOGU3MjQ4N2IzMDVjYTYzZmE4NWNmNDc2ZGYwNDlmYzdjNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXN1Yi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzdWIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1MWU1ZmE4MWY1OWFmMmIzY2QxM2NhZDZjNTdmMjZjNjIxNTE1OGQ3MDQzODQ3NTQzZjIwMmUwZDZjM2NmNGJmNzJkZDNkZWNjYzNiMzMzYzliZGMzNWY0YWE5ODM5NGFhOWZkODU4MGJjOTdkOTQwYzI2YmE0NjdlYTJmZmRlNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N1YnNjcmliZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQ0Y2I4YmU2ZmNiOGEwMzMxYmYyOWQyYTk5NGQ4MmJjZjc1ZGYwODRjZDkyZGY3MzYwY2VkNGQ4NzUzYWRlMjg2YzYxMzZhN2ZkMjQzZThmMDVlZDZkYzlhZmIxMGZjYTc5YmM5OWU1MjEyZDA5ODZhZWRiNDE2YWJlMTg4OWYyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N1YnNjcmliZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N1YnNjcmliZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiOTY2MzFlNTc3NGU3NTQ1OWY1NjE4MGI0MjkxMzFmMzIwZjYxYmI3ODU0NDIzNzdhYTc4MGQ0Nzg1MGRkNWI3NDcwYTk0ODBmMDM5NjI5NDQyMTcwNzMyNWI5OTM1YjEzNTFjNjc3MmRlMzFmOTRjYWYwOWU0OGIxYzJmNTEwZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90b3BpYy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdG9waWMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4YTVhNDZkNzQ1YmMxZjVjMTAxNmFmNjI5NTRjODM0OTBkMTU2ZjVkZmY3MTU5NzU1ZjNjMjU5N2Y4YmFjYzVjMjJhNTBmN2JjY2NlYmVlODYyYmQ4N2Q0NDg0YzBiNjA2NzUzNDQ3NDI5MjczNDU2OTQ4MzE5NDYxMThmMWJiYiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy1pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMtaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9LAogICAgICAgICIuL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJ0b29scy90ZXN0U3VwcG9ydHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2OTcyZjA4YWZhMDcxYTY0YmU3MmZmNTIwNjZjMWUwOWJjMmY0NDAzNjgwZGZjM2JlN2YzMzJmMTFmYzQyYzc0ZmUzYTM0NTRjYmM1N2JlYjE1MDhmMWJhYWE0YWE2MTRmMzJiNmQwNGJmNGIzZjliMWJjNjliOGE1NTE1OGI2MCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9zbWFydC13YWxsZXQtdjAuNS40LXUxOC41IjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3NtYXJ0LXdhbGxldCIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3NtYXJ0LXdhbGxldC12MC41LjQtdTE4LjUiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9zbWFydC13YWxsZXQtdjAuNS40LXUxOC41IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjMtdTE4LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdHMvc3JjL2xpYi1ib2FyZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdHMtdjAuMTYuMC11MTguNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2xpYi1ib2FyZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFyc2hhbC1jb250ZXh0cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFyc2hhbC1jb250ZXh0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjE5ZDU1MDI4ZGFkODQyYmZhMzhhNDdkYzA4YTY1ZmFhYWIzMGQ1ZWUyYTQzYTc4Mzg1YjZmYjRlYTUyZDYzMmQ2NzMwYzY5NDU4MGQ1MTU2YmMzMjNjYzc0ZDA3YTE2MTI4ZTk4M2E4MDVmMmVkZGIxZjMwMjVkNjMyZGNmNzhiIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3N0b3JlLXYwLjkuMy11MTguMSI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9zdG9yZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMy11MTguMSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMy11MTguMSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYWE4YTFlYjNjNWI3MTNmYTkwZDk2NTFiNDY3NzNhNDQwMWNkNTE5MzYxZWJkMGRhNDZlMjAxMWZhYTA3NDI4YTI0ZmJlYjI5NjRhYzgzMmI0MmQ4MmNkMmQ5NGRlZWI4MjFmNTc1Y2ExM2ZhMWFlZDVjZDNmMGQwMTU3MzZjZTMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGVnYWN5L2xlZ2FjeU1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU4ODQ4NzMyYTI0OGJmM2Q4MjQxZDE5ZWFiOTQwNjZmZDI5MTEwYzVjYjM3YmJmOGE1YzE1YjZlNDRjN2NkOTEwMjVmMTNjOGJjMmRlOGE1NjYxZjhmMjlmMzRiMjE3YzZmMmJhNWIzYzE0OWU2ZGFiOGE0MWNmYWQ5NmE0YThkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImRiMGQzM2MxZDVkMWNjZTc4MjZiMzc5NmZmZmNmYjBmOGU5OWM1MzgwMzNhODNjM2I0ODc3ZTA4YmQ5Nzk2YzJhNGMxZmZmYWRjMzI4Y2EwNGVkZTExNjRkNDZjYjI1ZDliYzcwODQ4ZWFkNzVhMjk4MmZjNWIzNDg2ZWI1NTQyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDhiODZiMWMyYWM1ZGI2MWY1NjBiYzE1ZmYwNWZjYzUzNTViOTk5ZGYxMjhkMWM4MzQzODM5MzViYmY2ODM3OGVlYmEzZDE3YWUyZDM4ZjU2MjAxNDEzNzgxNzg1ODFlNzhjOGIxNGIwZGNiMzdkMDNiZWY3MTE4NGFlMzRhYjAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhNjMxMjBjYzE3NmUyMGE0M2NmOWNkOTg1OWZmMmQyNGJhZTdkZDkyMWMxZTBlODJkYTBkYThlMjVhOTk4NjE2NjA0MGIwYmYyZjYwNWZiYTEzNmU4Zjc3MmM1MmUwMzlhZjgyZTU4YTIyODJjMWNmNmY3ZjM3M2RjMzUyNmE5YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMTBjZmViMDFlOGYyOWExZWNlYWEyNDEzZDQ3NmRlMzA5NTEzODliNDk3YjM0MmZkNjRjNjJjNWU5Zjc2MGUyOTFmYjY2ZDk3ZWEzYzJhZWFlMjlhNzZkNDA0NDE1MWFkODU0MTU5ODM4MjdmMWUxODllNWI0NmI1ODY1M2E4ODkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNjMTg4NjVkZWU0YjlmMWUxMDU0YWNkNmQxZTRlZmY2ZGMwMGM3N2QxZDBlNTFmZWI3ZjAzM2RmZDQzM2E0MDY2YzA0NjkxNjUwMWJkYjEyZTQ1YjEwY2IwNDIzNTJkYmFlOWQwZWE3ZTU1ZjliMmFjZmJmZjI1MGI1MzNmMjFjIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zdG9yZS11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjU4OWE2ODFjMjYzNjFmMWE1MzZiMzMzYWY2NDU0ODcwOTcwM2EyYzgwN2EyNTY2MjdhODhjOTU0YTMzNGYwMzg3YmMzNGIyMWExM2Y2NGI0ZWYwYzUwZjAyN2UwYzdkNzM5MzMzN2MwNTdjMDA3OWZmM2FmNjUxMWYxMWNmMGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLXUxOC4xIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3ZhdC1kYXRhIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLXUxOC4xIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLXUxOC4xIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjMtdTE4LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhvLXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9leG8tdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4ZWZlMGU1ZWZmOWRkMjAyMDM2OTU0MTg5MzkwOWIyNWUwNWYwMjViNTJjMjU3ZGI4OTZjZDkwYjNhNDk5MzVlYTYzZjZkNjUyOWE1MTIxZjFjNzdiOGMwMGVkYjBhMTkwMmIwNWI3ZTk4YTk2NTFjN2NmZmYwMDVmOWUyNTczNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkNmU1ZGRjODI0NDIxOWM2OWFlNTdlOWUxMjFlMjQ2ZTJkMDVkYzM2ODhkOGRkM2RiOWViMmJkZTZmYWMwM2M3NDE5NDhlMWJkNTMwYmYxNGNjNjM5NjFiNzhjYzRjMjUwOWQyYWVkZmZkNzcwYTkwNzU4ODg2MzY4MTIzNTE1OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy92YXQtZGF0YS1iaW5kaW5ncy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdmF0LWRhdGEtYmluZGluZ3MuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2NDhkMWQ3OTI4Mjc0ZjFkNmJmOWQ5MzBjODI0MmFiZjNiZDYwNmIwNjEzZjUyMWQ3ZGY4MzYwZTkxZTYwYWM1ZmYyNzJlMDQwMzllYjRkZjFjYWY4NmY2Yjk3M2M4NjJlZDQ2OWNmMjgwOGJiMzBlMGY4OTNkN2UxMTJlNWZjOSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy92YXRzLXYwLjE2LjAtdTE4LjUiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvdmF0cyIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3ZhdHMtdjAuMTYuMC11MTguNSIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3ZhdHMtdjAuMTYuMC11MTguNSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxOC4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy11MTguMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9lL3NyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b2UtdjAuMjYuMy11MTguMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jcmMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NyYy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA0YTFjMTFlOGI0ODk5YzlhM2Y1NDAyOGQ5OWJjZjNmNmNkYjU2OTgxZmI0NWMzZmE4ODJhYzU1MGRkZjc0MjQwYjczYWFlYWUwZTU5ODdhNDQzYTM2ODJjODc4YWRkZjg0YjFlYTkxYjFkODRkMWJmYmU4OWY1NTJiNjJkNWQ1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xpYi1ib2FyZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGliLWJvYXJkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzQxMDM3MmRiNjk2YjkxZDVmNDUwOGRiNWQ3OGI3YmMyZjdjNzUzMDY1ZGExZWE0NmRjZWUzNDRmODUyYzM3ZTQzNTcxZjYzM2UxYTUyZTRlYjYwMDkxMzkwMDM3Y2U3MGIyNjUyZDlmOTc1OTlmN2RmNTMxOTVhYTlhNzQxMDAiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTguNSI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy93YWxsZXQtYmFja2VuZCIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE4LjUiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxOC41IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvY2FjaGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jYWNoZS12MC4zLjMtdTE4LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvZXJ0cCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2VydHAtdjAuMTYuMy11MTguMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE4LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsL3NyYy9qcy11dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2pzLXV0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxOC4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zbWFydC13YWxsZXQvc3JjL21hcnNoYWwtY29udGV4dHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zbWFydC13YWxsZXQtdjAuNS40LXUxOC41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbWFyc2hhbC1jb250ZXh0cy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxOC4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy11MTguMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9uYXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2FjdGlvbnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2FjdGlvbnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwMmIzZTNiM2ZjMjU4YTczMmNkMmExNTdmNjg5ZjMzNjc3ZjU1ZTVkN2Q5Y2I0YmFkZmQzNWMzMTZlNTM3YjAxODZmMmI0ZGJiOTQ4OWY5ZTU2ODk3ZmQ3NzhhOTk5MTc1MjY1MzI2OWEwODdlYTNlNTcwZTliNTBlZjg1YzRkNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9iaWdpbnRTdHJpbmdpZnkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2JpZ2ludFN0cmluZ2lmeS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNlYzJhOGE4NzZkODU4MmYwOTgxZjAzZjNmOTBhY2Q2NjM5NmFhZDY5ZDgyNDQ0ZDdjYjViZGRiMDJiNmIwZDcwZTc5YjE2NDY0ZDc5M2E3NTJiYzdmZjc2Y2U1OWM4ODc0YzhmYmZhYzBkMTU2OTc2ZmQ0NjYwYTE4ZDA0Mzg2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2RhdGUtbm93LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kYXRlLW5vdy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBmMTVjMzcwYzk5NTdkMjUyOWFmYWU5YzE5NmQxZTlmYzAwY2RlN2FjZTFkYjdkMTE3NDc4NGYyYzVlZDZmZjNjYmZiNDBlZjAyNDVlYmUxNDNhNmE1ZmQ2MWZjNGEyZTIyNTBiY2VkYTNjZWYyYjZkMjJmM2VjZjc1NTJjZjc4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2ZpbmRPck1ha2VJbnZpdGF0aW9uLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9maW5kT3JNYWtlSW52aXRhdGlvbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUxM2ZhOGU3Nzk2MjllZTkzMGUxOGYyYjQ0NzBiMzE5MjUyN2VjOTY3OTA2NGNiNzkwOTZjYzRkNDI0OWM4YmI2ZDUxMjBhMDIzZWMzM2RhNWUyMzRjN2JiOWFiNWIzN2ZmN2ZiNDIzMDRlMjdlMmZmNGFiZTI0NjdjYWExYjRkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2ludGVybmFsLXR5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbnRlcm5hbC10eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU3NmJlNGUyY2ZmODE4ZDhhMjI2MDUxMTQzNTVmYTNiMDUyYWQyN2Q1N2RlMjk5OTA1OTU1MjU1MmJlZDRhMzliMmIwNDRmOGRmM2RkMWI4MTFhMDI2ZmQ4ZjUyMzVkMmY2ZDE2OWRlNmU1MjdhODI0ZGI3OGI4ZWY0OWMxZWE4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2lzc3VlclRhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pc3N1ZXJUYWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjViOGU0ZmU0MjA3ODQwNWFiODAzYTk0ZDU1NzFhZjBhYzNjOTUzNGUxYzE3YWQ1YTcyYWUzOGQxNjI4ZTg1YTRmMzg0MTIzOWZiM2IwNTRkYzRmMjk3OTI4NjUxYWIzZmJkMjJmYmYxNzlhZGQyNDg0NThhZTVlMjc5MTQxYjllIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xpYi1kZWh5ZHJhdGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xpYi1kZWh5ZHJhdGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkMDUxNjk1NTNjNTlmYWIzNmI0ZjZkMTc5YWY2OGJmNmUwZjkzZGY1Mjk1Mjc0YWE0MDcxZjE4MDA3ZTM5YzZjYTlhOWIzZWNiODA1YTY1NmM1MWI0MzdhZGIyMmJjZGRjN2I1NjZlYjI2NGJiZDE0NGU0ZjlmN2RjNzljNGUxNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9saWItd2FsbGV0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9saWItd2FsbGV0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjFiZTZlYzc1NWRkNTRhOWRkN2QxM2M1OTExZmUyYjFmNGFiYjcwYjUzYTg5YjA5ZThlMWYwYWYzYmZjZTg5MmJlNmNmNGRhZDhlZjdhMWNkYzUwODAwNDZmYzMyOTlmNGY4YjE5MjE2M2Y2NWQ3MzNhNzMxYjI4OTVhYmMyODUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcHVic3ViLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wdWJzdWIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxNjY3NzNlOWQ2ZjAwOWQ0YWI2MWUyMWNiMTc2OWVhZDY1ODMwODM4YjYwM2RkMDE0Yzg5MTYxNjA4MGY4MWY0MWNmMTMxODFkMjBjYjg1ZWUwM2VjM2M2YTZhMjVkM2ZjMmU4NDQ2YTlhNzBmNmMzNDAyNjU1NmVjMmVmMzlkOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy93YWxsZXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3dhbGxldC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU1ZDI2MWNhMmIzMTc0YWRlZTE0NjRlOTk3ZTJjZDQ2NmYxMTMxZTIyZTMzOTVjNjE2M2Y5M2RkMjJjYWYxNWQzN2U0NTk3NmEwMWRjOTBkN2VmZjdmM2Q2MDhmNDA2NzNlNTliODg2YTQ5ZmZkNDliM2Q0Mzg1ZDYwODFlZmExIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3pvZS12MC4yNi4zLXUxOC4xIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3pvZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3pvZS12MC4yNi4zLXUxOC4xIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvem9lLXYwLjI2LjMtdTE4LjEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE4LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTguMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjMtdTE4LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLXUxOC4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODEwOTE3ODVmMmU2MTdhMWRmOTVmYjdiNTU0Njg4YTNmZDk2OTdhN2Q4YTViNzQ2OWMwNWI3ODVjNGI5N2Q2ZWZlYTU1OTUyNzdmNDQ2NWVkZTI4ODAzNWE0YzAyZWMwNmY2NGZiYjI5MTFlNGFkN2JmZDZlNTIyNjZlNDY1NTUiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvem9uZS12MC4zLjAtdTE4LjEiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvem9uZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3pvbmUtdjAuMy4wLXUxOC4xIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvem9uZS12MC4zLjAtdTE4LjEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxOC4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMy11MTguMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2R1cmFibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiZHVyYWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjM0ZGYyNjQ2NGIwZWQxYmZkMWVjMzAyMzUyM2EzMTgzYjc5YmM5ZTAzNzYwMmQ2YzE5MjI2ZGI3OWYyZDg5Y2MyOTBiMTRhNWY1Yjc1NzQzZmY5YThlYTE2MjQ1NDA2OTdjNzA4NTVkYjcwOGZhN2FiODQ5NDFiZGQzNTNlZmM0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2R1cmFibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2R1cmFibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2YWIxYTY4ZmE1OTJhZTU4ZTJlNmY0ODhlODhjMDExYTUyZWMyMGUwYjFhOWM4YTQ3ZTcwN2MzNzIwMmY0NTkxZjQxYjc5MmFjNzQ5ZGFkYzM2OTQ4NzE1NTRiOGU0ZWVhMWY1ZTJiNTk5NWJlYmY0YjRmNjU5MGE4ZTdlYmJiMyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vY29tbW9uLXYxLjIuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vY29tbW9uIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImFwcGx5LWxhYmVsaW5nLWVycm9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmJhNDdhODlkYmRlYWU0ZDBmY2I3Yzk0NGIyM2FlMTg5ZDU1MGJiMzZkNmFmNDZkMDM3YTA0NGY5NzgwMmFiZWViZjk0MzhkY2M5MTE0YTRmNmQxMjY5OGIwMmRkYTI4YzhjYzQxNzNkMDZhODZmMTZjMTc0OTE3N2RiODc1NGEiCiAgICAgICAgfSwKICAgICAgICAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImZyb20tdW5pcXVlLWVudHJpZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YTQwZmQwYzdiMjlkMmY0NjE3MTUxZTUwM2Y3MjBmZDU1NGI2NDFmMTgyYzFiM2NkNWRhNGY0ZTE3MTNlZjUyMTJiNTc2NThjZThjZjUzNmVhMDg0YjY0ZGExOTg5YTlkZmRhNTViMjQzOGIyYjZhMzA1MmFlYzFjMzM4ZWJmZCIKICAgICAgICB9LAogICAgICAgICIuL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaWRlbnQtY2hlY2tlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjEwMDZhM2U0MjEyZDgxNzM3OWI0ZjE3MDIwNzljYWQyODQzNWQ0OTBkOGM1YWIzYmRhMDYwYzE1N2QxOGNhYzAxYzFlMzE0NWY5NDdjYzRjMjQzNjMwOWQwODk1OTAxMTlmOWJkNWE1ZDQyMTE3MjAwYmM4OTc0ZDhiMGYyZDM3IgogICAgICAgIH0sCiAgICAgICAgIi4vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImxpc3QtZGlmZmVyZW5jZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjYxMzYzMWZjNGZhZjhiYWE2NzRiYjQ4Mjg4ZTZhNDZiN2RhYWUyZmRlNzg3YzVmMWEwNTFmOTZkMTFmZDg5YWJkMjVjZDZlODkwMDU1MDEyMWY1NmZlMWY1MTBkMzJmYzllNDQ3MzhjOGZmNzgxY2JhNjdiYmQxYWNlNjUxYjA4IgogICAgICAgIH0sCiAgICAgICAgIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJtYWtlLWFycmF5LWl0ZXJhdG9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTg5OGM2MjYxNmI0Y2RiM2ZjODFlOTcxMjkwOGEzN2RkYjU3YmVmNmIxZDU4MjNlMDRjZjI4MWNhOTVlODYwNjA1MTAyM2U1NDVkZDZiZGRjMjk2ZmVkZWJlNGU2NjU5NGU5OTg2OTk4MDVlMjA5ZWU3ZGE0MWE5MWFmODE3YzgiCiAgICAgICAgfSwKICAgICAgICAiLi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm1ha2UtaXRlcmF0b3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiNDM2ZWM0YzY2NmMyYTU1Njc0NWM1ZmE1NGVjODY0OGEzZWNkMGYzMTIwMTA5NmExNTEwY2ExNDMzNDk5ODk2NmE2NDZjMWQwNjNiNjEwMTljY2Y2NDU1MWIzY2I1ZjEyOTBlMDZhNTkxNGQ4YTFkNWYwM2VjNmIxNzFhMzFkZiIKICAgICAgICB9LAogICAgICAgICIuL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAib2JqZWN0LW1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhmNDM3YjVmM2UzM2I3NzNkZTZjYmVkMTBlNTBhOWUwYjk0OGM3M2E2YWUxNjQ2NjQwMTQ5Y2M4ZjBmODE2OTU4NWFhZjI1N2QxMDI2NmZjMjZiZTVlMWRjMzk0ZjVhMzUxZWM2YTZhZjg1ZDNiOTkyMjg4MTk5ZGI4ZDE2NmU4IgogICAgICAgIH0sCiAgICAgICAgIi4vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm9iamVjdC1tZXRhLW1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImFhZjA0NTFiMmU2ZDBlZTQxMzA1ODkxZWY2Y2Y1YTllYzRhMDM0NWYxODQ4ZmU5YjJkOWM1MTIzMjQzNjY5YzU0YWM1MWM1Mzg4MjRjMzAxOTBkMjA3ZTQ4ZjUwYzA4NDU2M2Y5MzhkYTVlNjQxZmI3OWJjNDY1MGVkMGVjZjE3IgogICAgICAgIH0sCiAgICAgICAgIi4vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJ0aHJvdy1sYWJlbGVkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiN2I1ZDM0MjZhMTRjMGY3NTYyNTA0ZmI3ODZhOWIwMjQwZGU0Y2I4NTI3OTRhMzhiMDYwMzMwMGE5OTBlNTEwMzlkNTM1ZTUzYWU2N2VjNzEwNWM5YTMyNTNkNDk2YWFmYzczMjA1NGI2YWMyNTUxNzYzYzkwZDc1M2Y1OWY2YmEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZW52LW9wdGlvbnMiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDE3NzZlZWIyMWIxYzU1MWRhM2Y5YjhkY2RmNWFiZDg4YmNiZjVmOGUzOGNiMDRlZGFiYzhjYjk2NGJiOTc1MThmZjRjYWNiNzQzZThhYmJhYWMyMjg2MTY4MTVmYmU0MGU4NmJlMmQ3ZDQyODE1Nzg5NTJmOGFhODY2YTFiOTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW52LW9wdGlvbnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vudi1vcHRpb25zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWRiMTVkNGI2NjkzMzI1ZDM0NTIzODBjYTYyZGQ5N2E3YWU0ZDAzM2JmNjc1M2FiZjQxNzViZjhmMmE0MDVkY2M5M2Q4NzdkZGRlYzEwYTdiZTViNGZjMzIzNjdkNzJlM2U3NjgwMGY3ZjQ4YzYwOGRhNDUzYzNkMmQxMTQ0ODUiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vycm9ycy12MS4yLjgiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2Vycm9ycyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQxZjhmNGY1N2Y0ZjZlMmM4YjVkMjk2NzM2N2ZmZTRkMDdjOWNiMTc2MWE3YzVjODg0ODZmNGIyN2E0ZTNmZTU3ZDI5ODRhNTkwODNjZjUyOTcxOTE4ZmY5OWViZmE2YjgyYThjMGQ5YzVkMzRlYzVkOTQ4YjE1Yzk5ZDJlYjEzIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL0UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL0UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5ZDNlOTEwNGI2ZTI1YjAyYTczNDk3OWFkNGYxOTc4NmJhODcxNjllODBmOGIwZDhhNTExNjc4MWQ5MTZjYTFjYWEwY2NhYWQ5ZWNiM2E0NWFmMTIwMTU2MmYwMDVlYThhMGEyZTBhZDI2MjJjMDdhOTU4ZWM4N2ZlNDU4MTA5YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leHBvcnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9leHBvcnRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbG9jYWwuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xvY2FsLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTk1ZGY0Y2EzMjgyMDk2OGYxMjAzYWI1ZWEyNzJiOTYxYWUzMTE2MzQwNzBjZjE1MjBlOGFhYTYyY2E4ZWEyMjI5NzA0NGFjNGU4ODkyNjc0ZmJiOTFhMzQzYTc2NTBkY2JhZjUzYjdjNzQ1MjFhZDVlNTU2YjhmMzNhMzNhNGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWVzc2FnZS1icmVha3BvaW50cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY5MTExNDZjOGUwNDUyMjcwMGUyM2M5MzhlNmJhNTcwYWM3ZWExZTkxNWQ5ZTdjNGRjYmM1M2ZjMGY3YWI4YWNiOGRkN2NmYzA3YzUyZTAyZjJjNjU3NDA0ZWU4OWVmNzMxMWEzMjc5NGE4NzExYWE3YWI0M2E1NDIwYjMyYzg4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL25vLXNoaW0uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL25vLXNoaW0uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwOTIwNTFmNjk0NDJkYjEzZjllMmI2YzE5ZGRkMTg5YzUxYWIyMWE4NDA0MjEwMzAxZjhkMjYxYjNiMzE5NDhiZDUwY2I2Zjg1MjNlMDM1YzRmM2RmNzYzMTE1ODI4ZmMyZWFkYzljMmIxMjcxN2ZhMzkzOGZkNGYxZDc4NGIxMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90cmFjay10dXJucy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHJhY2stdHVybnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4MGNiYTc1Nzk4YmRhMzkyMGQ3NWQ2ODVkZjM4M2E2YmJhMDcxNWUxMzI2NDg0YzYzYWY4MWViZGU3ZTg0YjM4NWYwN2E3Mzc3ZmM1MmZjM2M4MGU4MDMxYmE3ZjkxYjViZDI1Yzg3YzQ5OTQ2OWVhMWQxMzcwNzc3NzlhYjFlOCIKICAgICAgICB9LAogICAgICAgICIuL3V0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmVhMDQxMWIyMTZjNzE0MTUxNDM5NjY2NGY4ZjgyMTNhY2QxMTJlOTMwYzBmNGZhYzAzNDI3ZjU3MzdkNzM3ZDBlOTQ2YjZjYzRjNjA4ODRkMDQwNTdiNzdmODgwOGEzOTY3MzY4NTk1NTg4NzI0MzVlYWVlZWQyZjEzMjY0N2QiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2V4by12MS41LjciOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2V4byIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9leG8tdjEuNS43IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2V4by12MS41LjciLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjciLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQ0MjljODVjMmFmZjY3Njk5ZDA2ZDA3ZGQwYTk3MWFjMjBmNzcyNjM1ZTY5NjhhNmVhYzBhYWEzZDM3Yzc3ZDg5ODZhYjMyOTdmOTdjNjYyMTM3NDNlY2QyNTM4ZmQyYzVlODYxMmYxNWUyYmZjZDVkNmU1NjU2N2FjZjM3Y2IyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4by1tYWtlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by1tYWtlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhYjc5NDE1MTJlZGUwNTEyOWYzYjIwY2Q1MDgwN2Q1YWExMDUzOWIzMDg5ZGI0MGU0YmRlZGRkNjY0YjU3OWY3ZDY0ODkwMzI1N2YwYzE1ZWQwNjZiZGE5NWUzNmY4OTA4MDM4MmY2ZjZhOTMxMWNhNmYyZWUwODczZDA2OGE3YSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leG8tdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ1MGM2OGJhYWViMTA2NmE4YTVlMzIyNjBlNDJjZmE1NzVkNDkzOTA4MDc0YWZjYTM2ZWJmNjgyZjE4MGRkMDFmZjdiOWVkN2EyZDAwZjc3MzQwODRlMDg2ZmU2ZGUzNGVmN2QxYmRlZThhMDBjNWVkNTYxYjhjMzU4NDBlNjEyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2dldC1pbnRlcmZhY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2dldC1pbnRlcmZhY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMDAzMzc4MmQ1NzAyMzk2MzNhMTkxOTQ3OGI3OWI2ZDE0ZmFlNTM4YzEwZTY5MzdmZjAyZDJmNGFjNjY0Y2EwZWM2OWJiMjM0OTMxMDVkNjRjMDhjM2FmNjlkMGRmYTViZDUxYjcwODU0ZGNlY2M2YjA2MTUxOWU3M2NkYmMxNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZmFyLXYxLjEuOSI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZmFyIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2Zhci12MS4xLjkiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZmFyLXYxLjEuOSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhMDQzNTNjMWUyODJjN2YwOGE0OWQxNmFjMmVlYTA2OWExYzMyNTM0MDViZTYzZDg1NWE4MzliMDhiODBkOWJkM2MyNzQ0NWFlMWRhMmJjMzFiZjQ2MjEzZDViMmQ0MTQzOTExN2NmMWVjMGYxMWFmMDI0N2Q5NTVhNzYxNzc1NiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vbWFyc2hhbC12MS42LjIiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL21hcnNoYWwiLAogICAgICAibGFiZWwiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEzIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuNyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY5OTcxYTRiYWY5MmI1NDhlMjQ3NDg4MGMwN2RhYmYzNjFmMmZkMDM4YzQwMGRhNTFkMGE0NDY4MDkyZTM2NTU1NzY5N2M4ZWIxY2FlMzI1Y2ZkOWZhZjcyYWI4NmMxM2YwNDI0MGE2ZTE0NzNhN2UzOTM4NjJkZDA0MTFiNTRlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbmNvZGVQYXNzYWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjc5ZGQ2NGQ2ZmUyZTI1ODRhNjlhMDZmMzZiOTlkNmJmODAyZDQ2NDQzYzU3NTQ0ZjhlNWY0NDBhMjAyNjRjYjBmOGQ0YzQzNjJhZjNjNTk3NjAzZjI0N2ZkMTMzNGNlOTJiOWE4YTIxMGM4YzYwYzIzOWRiYmYzYjQzMmJhNjkzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW5jb2RlVG9DYXBEYXRhLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTMyYjQ4YzdiMGE3YzRhZjFmMDU4YzQ1MDMwY2M1MWEyMTYxMTYwNzVjMjRlNTA4ZGE5ZWNlZjZiZDZkNDFjNGRiMDgwYTJhODM4MzIyODdmZjYyMDg3M2U2N2YzMThlY2E0MjMxNTQxZDIxMGI5NGI0NDIxYzllMzRhMzk4OGMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW5jb2RlVG9TbWFsbGNhcHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZVRvU21hbGxjYXBzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZGNiZGY5YWFlMzE2YmMzZTM0MDVlZmRmNzAwM2NhYWUxODdhOTMyOTg5NGQ5MjkyZGFjNjZkNTk5MGNjNWRmYjgxMTJmNDMzYTg3ZGMzZDJkMWVjMDI2ZGQ4NTY2MGRkZmEzZDE5ZWRlNDlhZWJiYWEyODRkMWMwMDllZjgxZDkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFyc2hhbC1qdXN0aW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwtanVzdGluLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTBiOGMxYTljNWI2NmQ3ZGYwNjE4NDViYjczOGZlYWYzMGRlNzU0ODNkZGQ4NTNkMmI1NTdmYWJkODMyNzlkNDA0YWM0OWZmNTUzYjJlMzNhMTkwMDFmNTAxMTY0MjM1ODdhOWM0MmQzNjNkZDVlOWZjMTQ1MzEyMjhlYTk0NjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2MyYmQyNDFlMjI5M2JhMjFhZTZhYjJjNGZmZTM2MDQ3MWZkNWI5MTVhNDk3NmRhNDFmMTY4Zjk4MDAyNDAyZmQ0N2NlZWE4MThiOGQwYjM0Y2I4YzU3YWE5NTAyOTJmNzI5NzNhMTBiNDdjMDhiMDQxN2E0Y2NiM2YwNTgyYzciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFyc2hhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFyc2hhbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJlZWM2NTZkNWQ0ZmQyM2MyOWE1NGJhNjg1ZWZiYjA5MmRjZjJmOTRlMGNiY2M4ODE4YTExMjljYWM2ODE2YTkzZTE1MDRjNWFlZDBmZmMzMWU2NjJlZjQwNTQyMWJhNWM5ZTFiODRkOGQ0MzMwYzA2ODAzYWMyMmM1MDFhZDExIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JhbmtPcmRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmFua09yZGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzBkOGZjZmU0YzM3YmI1N2JhNjIzMGRiNjUxZjY4MzViNmVkNDI5MjQzNjFjMjg0YThmYzVlZGJhMjliZDcxZjkwMzBkMWU1Y2UwNmYxYjNhY2Q1ZTRjNzg3OTI3OTA5ODk4ZGRmNjkyYTNhNjE0MGRmYWU5NGJkMzJmYmJjZDciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQ2NTVlODU5MzE5ODg0NzBiZGRhYjFmZWY1NTZlZjhiZmI3ZTI2MjUwYjZlZWU0NTU2MGQ4MGVkMWUzZWY4ZDViYjhlNWQwNThiNjA4NWVjZTJlMTdhZjIxNmQ4M2FhOTM5MDcwZTRlMmMxOTUyNTg5ODZiNzM2MDk5ZmFkOWMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL25hdC12NS4wLjEzIjogewogICAgICAibmFtZSI6ICJAZW5kby9uYXQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vbmF0LXY1LjAuMTMiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vbmF0LXY1LjAuMTMiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjIwYTk0N2YxMmZkZDUyNjYxMDJjZjZlMjAwMzgzYTQyODk3ZTlkYjM5OWEyNzJiNmNjZGMwNTAyMzIzNTYzZTI5OWM5ZDYzZmZlYmQ3MDUxZTFjYzY4OGVmYTVmOTFkNjhlNDNlNjRjNWM5MzFmMGI3YTU0ODU1ZTQzYTA0NmQiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IjogewogICAgICAibmFtZSI6ICJAZW5kby9wYXNzLXN0eWxlIiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY5OTMyZDU0ZjViNDFhYzdiMjQxYjA0NDdkZWJiNWY3OTM1OWE0Y2FjNTJkN2NiNjg0NTU0ZDI1MTUxOTliOTlhNDVmMDFmZWM5MmFjYTQ3YWE1YjcxNTllNGVkYjk0YWM3Y2M0YjFiYTg2MTViMjM5NDQyODgxZWQ4OTBmZTE1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvcHlBcnJheS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29weUFycmF5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2YwN2FiOWQxNzNjNTAzODM4ZWM1YWM5MzA2MWI5N2JjMWUwMjc5YzZiZTNjNGQ3YmE0NmMxZTlhY2Y0MWMwYzk4MDBkYWRiOWEyNWJiOWU3OWJhNzIyYTBkNDM0NGJjY2ZiOTBiMjBlYjY3ZjFjZjkwODU4ODRmMmM3MmZiYWEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29weVJlY29yZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29weVJlY29yZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImYxYzQ5Y2M2ZDU3N2FhYjJiZWE3OGQ0NDNjZThkZTcxMzhhNDhhZGQwMThhMjIxNTY0ZmExNDQ0YjE1ZWFhNjliNjIyMTYxMTgwODVlZTI2NTU1MmVlNDhjNmVkZjZlYTU5YTAwMzhlODM3NWU1NDE0OTgyZTIxMmE4OTFmZTI4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODNjMGJjMGJlYzE5NGZkOTExYjQ5Yzg3OTM5OTg4NmRmNmQ2NmRiNzlmNzUwZDI0M2Q2NjVkOWJhZmExY2NjNDQ3MmY4NDMzODY0MWIwZTE4NGNhYzM5YzU3N2RmYTExNWU4YjNkYmJmNjkyN2Y5Yjc3YjBkNzI4Mzc0YzcwNmYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXJyb3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vycm9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmVjZDBlM2RlYTY0YTkxOTJjNTc4ZDA3OGJhZmRhNjhkMTVmM2JmOGM1ZjdmNzJkZWE1M2JmNjA0MmVkZTI2NjJhMWEzMGU1ZDVkYTRmMTYyNzY0ZTQxMTExZGIwNmRhOWI0YjI1YzQzYTkxNzlkYTI2MTJhYjA2ZDhhNWU4M2YiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXRlci1oZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pdGVyLWhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYThkN2NlMDUxYmVjODc1NjRlN2M0ZjZhZDEyMDM2MjY5ODJmNDFhMzIzOGE1MTAyNWZhYTUzMTAxZDYyN2E1MzAwY2JiNDA2NjFiMzhlOGRiMTIwMDAzMjJkN2FkZjk1OTJjZjBhNWJhN2NkNjMxNjljMjE3YjQwYmM0OGMzMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYWtlLWZhci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZS1mYXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4ZWRhYjU5NjhiNjkxYTI5YTJmZDg1NGNhMzMxYmQ0NzVlMGY0N2Y1NTRiZjFmOWRkNjdjYzE3Y2YyN2ExMmM5ZDc2NTQ2YWQ2ZmI2ZTI5ZWI5OTYxNWY0NGNiNWYwMTU1MTQyODZhOWFiMjNmNDQ4YmJjNDViMDg0MWMxZGFmOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYWtlVGFnZ2VkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlVGFnZ2VkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTAxZjgyZjliNDA2NDNmNTlhZGMyMDJkYTcxYTAxYTU3YWY2MDQ0ZmE1ZGU5ZjliZjg5M2I5MzI3OWNhMWExNWNiYTEwYmZkNTZjMGFkOTMwMDYzN2FlMmQ2MmQwOGViODNiYTcwNjNiYTgwNWRmZDFiZWFmMTI0YmMyZmVhMjEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2U1NTYwNDdlZjAzMWRiNDM2Yzg0ZmEzMjhiMzczZmI0OGJhOWU0NjZlYzI0MmQ0MGYxZmYyZmZiMmU2ZmUwZDI5MGNiY2NkMDkwNWQxZjI4MTA5NmRkZDUzN2I4MGNmYWQwMTY3Y2EyNjE5NTM1OTk3YTIzMjg4YjM2ODhjYzIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGFzc1N0eWxlT2YuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Bhc3NTdHlsZU9mLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTQyYTllZmJiMjg1NmU2ZmZjMGYzODljODVkZmRkYTg0ZTYxMWMzYmY0N2JhNDc4MGYyMDc4MWI5NjM3YjYwMjIxYmUxNDgwMzhhODA5ZjJkNmZiNzZlMmRlNjQ2OWZkYWU2M2MwMDUyNTZiYTU0ZTQ5NmU3NGZiZWQ1Mzk3YWUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmVtb3RhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yZW1vdGFibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjOTEwMDkzODc0NzVjYjk3MzdiYzhhZDUwZjk4YTQ4OGM4YTUxMTEwMzMyNmI1M2I0Mjk0OTE3YWQ2ODY4ODNhMGE0YmFkNmRiMDZhOTRjMDUwNmJlZjE0YWNiYWRmMzA4NTI4YjkxZGEyNGIyYTUwZTk1ODFhM2VjYTkyMDc1NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zYWZlLXByb21pc2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3NhZmUtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFkNmNiZmIzYzNmOWUxOGEwMDU2ODdjNTk3ZjFlZmI3Nzk1ZGIzYWMzNjk3NDQ3Y2FhMmIyODI0Y2MxYmFiMTRjYjFiOGExYTcwNmFkYTEyOWQ3OThiMGE5MmQwOWE5MTNmMDgzYmZjN2I2MzY3NmU3MTM4ZjVmYmZlOWMwYzg1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0cmluZy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RyaW5nLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzliMjEwMTcxZGZmMjk2ZjM4YjQ1NzcwNmFiMDIxZWFiYjc1NjBlMjU4ZDkzZmZmNjhiNTZlOTZjNmMyYTZjMmM5ZDk3MTZiOTY2MGVhOThjZWQ5ZmY0YWI2ZGYwMmFhMDFiOGY4MTg2YjcwNmU1ZjcwYmEyN2RmZTk1ZWQ4OWQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3ltYm9sLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zeW1ib2wuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2ODVjNGVhY2E3OWU4MWNlNzMwYzVjY2FjNDEyMGY5MmJmNDhiMzE3ZjM0ZDgzNWFkMjEzOWVjNzExMTU1OTNjZTRlOWY5YWM2OGQ3N2I5ZGQ2YjZiMzk3NWJmMTY2YmY0MWRlMzgyNGVlY2ZlNWJiMTY5ZTU3MWIzM2JhZmVjMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90YWdnZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RhZ2dlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNkZDBjZTkyZWU4YjVlNmQwMDk3YTU3ODgyNDJhODc5ZTcyNmM2N2M1NGZmYjBlM2JhNGVhZTM5OTY0MWRjNGQxYWM1ZTU2MTlmNWY1NjZlNmEzZWRkODQ2Y2Y4NzNiNWMxYzU5Nzg1YjI1MWZkMjA0ZTkwODliMTdhYzAxNDk2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzMjlmYzE1NDA1Mzc3MTVkZjg1NGEzOGE1ZTQ1YWU2ZDIyODZlOWZiMTUxYzUyODU2YzliOWRmYzFlMjJjZDYzMDllZDMyMjIzMGU2ZmVjYzZhMjQ4YTZiMzQ1MGEzZmYxNjRhNjc0ZWVmZjgyOGM5MTVlYzQ4MjAzYmRjNjY0NyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NDY1NWU4NTkzMTk4ODQ3MGJkZGFiMWZlZjU1NmVmOGJmYjdlMjYyNTBiNmVlZTQ1NTYwZDgwZWQxZTNlZjhkNWJiOGU1ZDA1OGI2MDg1ZWNlMmUxN2FmMjE2ZDgzYWE5MzkwNzBlNGUyYzE5NTI1ODk4NmI3MzYwOTlmYWQ5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vcGF0dGVybnMtdjEuNC43IjogewogICAgICAibmFtZSI6ICJAZW5kby9wYXR0ZXJucyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjciLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vcGF0dGVybnMtdjEuNC43IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2lkZW50LWNoZWNrZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NjllY2E5OTJhZTJjZjA5ZDQ2ZWFlN2VlYTAwN2U5NWJiNGM2NGFhYTM3YmE1ZTQ2NjI1ODZiOWZkZmNmMDk0NDhmOWYxZDVkYjlmNDE2N2UwYTdiNzk2ZmU5MjBhNWZkMGE5OGQwYzU0NjQ5ZTIxNzYzMDNkYWY3ZWE0NDk4ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2NoZWNrS2V5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTk3MmZhMDA0YmJjZGVjMzNkMmIxZTNiN2Q5MTgwNDBmNWY4MmE0OGZmN2UwY2MzYTI0YzYwNjYyMjZkNjExMWVjYzc0OTQ2NGM4ZGVkNWE4NThmODVkOWQ2ODk0ZDY3OTFmMWIyNTc3Y2U4NTQ2YTU5ZDk2ZDUyMzdiNDI5MjYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb21wYXJlS2V5cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjMxZDg1NDhiMzkwY2MyNjYxNzVjYzlmZTY3OTU4NjFhNDIzN2E5ZDk0MmEzZDg5Y2ZmNjI1OTQ2MjMwNDQ5MzQwZTQ2YzU3NWUzNmE3M2Y2YmEzODU1ZTBiZmU1OTJlMmE1ZGZiNjc1MmFjMDBlNjdlMTNhYzVkMDQwMzgxYjgyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29weUJhZy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb3B5QmFnLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjU1OTQ4NThkZTgzZDM1N2M1Y2U4ZGIwY2VlZDZmMWZlYmJmMzVhZGYwYWY3MWNiNjcwYTQ4ZGYxNDM4OTdkYmI5Y2Q5YWVjNmZmN2IxYmM2M2U2ZDNlMmQ3MzIwMTdhODA4OGQ5ZmRiNGQ3NTZmYjIwZGE5NjlkOGU0MmU0NzQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jb3B5U2V0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2NvcHlTZXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwYmIxM2JhMDZhYzg2Y2FlNTE4YmNiYjRiZmI3NTY4OTgwMTBjN2ZiZjA4MTgwZTU0ZDZiMWRkNTQ0NzU2N2M4ODNkNGU4MGY4NTVmODE2M2JiOTYzZGY5NzkzYzM0NWU5YzNmZjJiMzRhYzAzYzQzYmUyZTJkNTYwYzJjOTM0NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGQ4ZmRjNzAwMzQ0NTg4N2VkYjdkYTIzMTc4NzdlN2RmNTNjNjNiZmM4ODRmZDVjZGI1ODdiYjY2ZTg3Yzc4MGRmMzdmZGViZDMyM2Q2ZWJjMGNkNjEzODZjOTI1NTI1MTlkNGVkYTk3MGUyZjhjNTAyYTFiN2RlZmJiYjMwZjQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMWIzYTJmNDQ4ZjkwZjIzODI5YjQ2Yzk3M2NiNmM2OTZhOWZlMmMyMzRkNmYyZTBiZmNjZWUxZTdjOGU1MjdjNDg1MWY4YmQ1YmE4N2UwMGVlZWFhZjljYzQyNzNhZWRmNmZhMzcxNWRkMjc2NDA3ZTcyYjhjNjEzNDA2ZjA1MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNiODViODEwZTMzYTJjY2I5NTNhMDFmY2VhZjAwMzZiNjkxNDFhMWJlOWQ4MzI4ZWViNTkwYzk3MDk2ZGE2YzNmMTU3NDViYjAzNzgzOTFkZTJmNzkwMDg1YzBlYTZjZjU4MGFkOWQwZDA5NGEwMjQ0MjRiODJmYjhmY2E2Mjg3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMWI5ZTg1N2NlZTg4NGFiMDhiOGY5OGY4YzJmZDBlYzYyMDE5MmMyZjIxNDBlNzFhMmM5YzJhNGRiYWFkZDc4ZmRlZjc5YTY5NWQ3Zjk2MmNmOTE5YmQ2MDkxMTU0YmQ1Y2NiM2JjNDVkYjIzNGVlOTA1NTkwZjIzMWNkNTlmYiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQ1YzA3NWI3NGU3NGQ1YmIwODg4ODkxZTNjM2QyMWY0YjYzMjk1MTZmNDVhM2NjNThhYjQ3YzE0NDRmZDgxNjgyODUyY2JhOWI5MTJlOGQxOWFlNmNhMTM4ZDk5ZTA0MmFmNzk4ZWE0Njg5OTg1Mzc0MDZlMjE2NGU2MDNlYzEyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Byb21pc2Uta2l0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjgiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzNzY1MDVmNjhiZGMzY2I5NGU2NTc2NGUyZmUzMmVjZTkwMjZhMTM3N2U3MDQxZWVhZGM3NTAxODBhOTdlOTgyZjdjNGFiOGY3MzE4ODg0ODQyZGQyMjU4NTI5ZGI0MjU0NGY1OGJkMDk5MDkzOTQ4YjBjNWMzNDBiODZlZTlmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2lzLXByb21pc2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzLXByb21pc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3YzYyYjU4MDVjNDI1NTc2YmQxMWJhMzg3MTA2ZTcyYWQ2OTVhNzQyMjNmNThkNmY4OTFjYmYxOGE2NmNlNDI2ODExYjEyZjM4ZGIxMzg0ODc3MGM5MmZlOWE4MzQ3M2I0MmYxNzBkZjQ2Y2I4NmQyNTQ4OGI3ZjVmZDFkOWVhNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZW1vLXJhY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21lbW8tcmFjZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ2MjI1ZjFiNTNkZjFiMjhiMzllMzc3MjdiYTBkZjQ5MTU4YzEyNzJiZmMxMTUxZTNlZDk3OGRlNWU4MGJiNTM1ODBmOTA1YTM3MjU4NjIyYmFjM2ZjOGY4M2UwOTA0MWViZjc0MWQ4MDU2YWZmYjYxZDJiNjFkMmRiNGMzZWI5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdhOGM1MjM0NzVlZTA1ZGUyODAxYmQzNmQ5NzY3ZDY4MjVhYTYwZGRhMDRkNDdlNDQwNDllYzRmNDkwODYzNjFhMzllM2ZiMTk4ZmFjODQ4YzM1NjBmZjVmNTVjNzczNTIyNTUzNWVjYTU2M2VlYTI3Njc1YjE4YTRmOTQ3NmYxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU0NjU1ZTg1OTMxOTg4NDcwYmRkYWIxZmVmNTU2ZWY4YmZiN2UyNjI1MGI2ZWVlNDU1NjBkODBlZDFlM2VmOGQ1YmI4ZTVkMDU4YjYwODVlY2UyZTE3YWYyMTZkODNhYTkzOTA3MGU0ZTJjMTk1MjU4OTg2YjczNjA5OWZhZDljIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9zdHJlYW0tdjEuMi44IjogewogICAgICAibmFtZSI6ICJAZW5kby9zdHJlYW0iLAogICAgICAibGFiZWwiOiAiQGVuZG8vc3RyZWFtLXYxLjIuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9zdHJlYW0tdjEuMi44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjJkZGZhM2FlZmFkOTQ2YTJlMWE0ZTNhZGQ3Y2UxOGQxYzNlYzEzZmRjZjFkNWI3NGMxYzlmZGIzYTVkNWY4NmVhMDVmYmExYTQ3NGQ5MDBlN2VmOGEyYWZiNTM3YmU4ZmRjM2M4YmM0MjU0ZjA2MDdjYjQxNmYyZmQ1OTRmYzY5IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJqZXNzaWUuanMtdjAuMy40IjogewogICAgICAibmFtZSI6ICJqZXNzaWUuanMiLAogICAgICAibGFiZWwiOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICJsb2NhdGlvbiI6ICJqZXNzaWUuanMtdjAuMy40IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImUyN2Q3ZGQ2MjNlZmZhZGRlZTA3ZDVkYTA2YjIwMThlNjZjZjI4YWQwOTQ0NGYxZmE3MmRjMWUwZTY5MmUzYmIzNGQ5N2I4MDVmMzc0NjA0OWRlYzc4NTFhYmJiZWYxYjg1YjJmZjEwMGYxNjhlZGU0MGY0MWYxN2E5Mzc0ZDY2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcwL0UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcwL0UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlODkyNmFmZGI1OWM1ZTVhMDg2M2Q0NzEzMjQ5M2VhOGJlNjM5MjEzMTBlZTY3ZGE2ZmY0NzlkNTYzYzk1NTJkZDlhMjI0MjU1YTgxODc2NGYyNzgxMmI4Y2IzNDQ3YTFmYzljZGJjZTdjNzcxMThiZjAwYjcyZDkzMzYzMjNmOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMC9hc3luYy1nZW5lcmF0ZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkNmNlYjE5ODNmZTRkMTJhYzYyN2Q5ZjFiZDA1NjUwZGJhY2YxNDRiN2YzOWY2MWUwY2E3NDIzZjk4Y2Y5YjA2MTY1ZGZjZDg4ZjYxN2FmODY2YTBkMTU3MDcwYTk3NGU4ZjkyY2UxYzUwMTA5ZDAwNzc0ODhmNDI4YzJlMDc5ZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMC9tYWluLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMC9tYWluLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTZmZWUxNmRhYjM4YTIxZjBiNWM4YTBiMWYxMGMzYjczYTMxNTdmNmU5ZjU4OTM4MDk2YjRiODc5YjJhMDk5M2ZkN2M5ZGRkN2IzOTMwZTgwMjYwZTFhODdhYjFhNGFjNjc2MWNiNzU3OTg1OGZlMzllMDEwOWRjNWExNjA1M2YiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvbWFrZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMC9tYWtlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwOWE4ZTMzODQwZjUwYTdkYTIzMmM4ODM2YzZmYmEyNGIzZjc1MGVmMmIzMzFkYWIxNjVhZmVkNjA1MDhiZjczYTc4MThlMjc5OGMyZWVkYjNkMDRmM2Q2NzE3Zjk0M2ZiOTMwODg2ZmU2NGU4YTc4MzA0ODY1OTY3NGE5NDJhOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMS9hc3luYy10b29scy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzEvYXN5bmMtdG9vbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwZmYzMTg5NTk2MWYyYzlmZGYzMTQ0NWRkNjg4ZjNkY2Y3ZmY1MTUwNzJmODIyOWJlNDU1MTg1Njg0MjIyMmY3MWM2NWM4NTMzMWFiYmRhZDllM2Q1NTVkOTFkNWY5ZmI2ZmYxODE2YjkyYzZjZjA5N2NjOWYyYzhjY2NjYmRhMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMS9tYWluLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMS9tYWluLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOGVkMzljNDVkOTdjMGZkMmExNDFiZGExY2M1NDg0NDk0Y2Y1OWY2NjBiNDc4YzRkMzlhM2Y3MmJlMGQzNGFlMDAwOTIzZTc4M2Y2MGVjYjFlNzEzMjlhMzBkZTczMTUwNDg5NWE2ZDRjZjAyMmU2ZTFjNzI2Y2U5ZDlkZDZkM2QiCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9UEsDBAoAAAAAAAAAAAAFC72gfwEAAH8BAAAmAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxOC4xL2hlYXAuanN7ImltcG9ydHMiOlsiLi9zcmMvaGVhcC5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vc3JjL2hlYXAuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2hlYXAuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAALQAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTguMS9zcmMvZXhwb3J0cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAEtx/5FkKAABZCgAAKgAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTguMS9zcmMvaGVhcC5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXhvIiwiQGFnb3JpYy9zdG9yZSIsIi4vbWFrZS1vbmNlLmpzIiwiLi9rZXlzLmpzIiwiLi93YXRjaC1wcm9taXNlLmpzIl0sImV4cG9ydHMiOlsibWFrZUhlYXBab25lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcixpc1Bhc3NhYmxlLG1ha2VFeG8sZGVmaW5lRXhvQ2xhc3MsZGVmaW5lRXhvQ2xhc3NLaXQsbWFrZVNjYWxhck1hcFN0b3JlLG1ha2VTY2FsYXJTZXRTdG9yZSxtYWtlU2NhbGFyV2Vha01hcFN0b3JlLG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUsbWFrZU9uY2VLaXQsa2V5cyx3YXRjaFByb21pc2U7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImlzUGFzc2FibGVcIiwgWyRozY9fYSA9PiAoaXNQYXNzYWJsZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V4b1wiLCBbW1wibWFrZUV4b1wiLCBbJGjNj19hID0+IChtYWtlRXhvID0gJGjNj19hKV1dLFtcImRlZmluZUV4b0NsYXNzXCIsIFskaM2PX2EgPT4gKGRlZmluZUV4b0NsYXNzID0gJGjNj19hKV1dLFtcImRlZmluZUV4b0NsYXNzS2l0XCIsIFskaM2PX2EgPT4gKGRlZmluZUV4b0NsYXNzS2l0ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyU2V0U3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhclNldFN0b3JlID0gJGjNj19hKV1dLFtcIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhcldlYWtNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUgPSAkaM2PX2EpXV1dXSxbXCIuL21ha2Utb25jZS5qc1wiLCBbW1wibWFrZU9uY2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZU9uY2VLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL2tleXMuanNcIiwgW1tcImFnb3JpY1ZhdERhdGFLZXlzXCIsIFskaM2PX2EgPT4gKGtleXMgPSAkaM2PX2EpXV1dXSxbXCIuL3dhdGNoLXByb21pc2UuanNcIiwgW1tcIndhdGNoUHJvbWlzZVwiLCBbJGjNj19hID0+ICh3YXRjaFByb21pc2UgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5jb25zdCBkZXRhY2hlZEhlYXBTdG9yZXM9RmFyKCdoZWFwU3RvcmVzJyx7XG5kZXRhY2hlZDooKT0+ZGV0YWNoZWRIZWFwU3RvcmVzLFxuaXNTdG9yYWJsZTppc1Bhc3NhYmxlLFxuXG5zZXRTdG9yZTptYWtlU2NhbGFyU2V0U3RvcmUsXG5tYXBTdG9yZTptYWtlU2NhbGFyTWFwU3RvcmUsXG53ZWFrTWFwU3RvcmU6bWFrZVNjYWxhcldlYWtNYXBTdG9yZSxcbndlYWtTZXRTdG9yZTptYWtlU2NhbGFyV2Vha1NldFN0b3JlfSk7XG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUhlYXBab25lPShiYXNlTGFiZWw9J2hlYXBab25lJyk9PntcbmNvbnN0e21ha2VPbmNlLHdyYXBQcm92aWRlcn09bWFrZU9uY2VLaXQoYmFzZUxhYmVsLGRldGFjaGVkSGVhcFN0b3Jlcyk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IG1ha2VTdWJab25lPShsYWJlbCxfb3B0aW9ucyk9PlxubWFrZUhlYXBab25lKCBgJHtiYXNlTGFiZWx9LiR7bGFiZWx9YCk7XG5cbnJldHVybiBGYXIoJ2hlYXBab25lJyx7XG5leG86d3JhcFByb3ZpZGVyKG1ha2VFeG8sa2V5cy5leG8pLFxuZXhvQ2xhc3M6d3JhcFByb3ZpZGVyKGRlZmluZUV4b0NsYXNzLGtleXMuZXhvQ2xhc3MpLFxuZXhvQ2xhc3NLaXQ6d3JhcFByb3ZpZGVyKGRlZmluZUV4b0NsYXNzS2l0LGtleXMuZXhvQ2xhc3NLaXQpLFxuc3ViWm9uZTp3cmFwUHJvdmlkZXIobWFrZVN1YlpvbmUpLFxuXG5tYWtlT25jZSxcbndhdGNoUHJvbWlzZSxcbmRldGFjaGVkOmRldGFjaGVkSGVhcFN0b3Jlcy5kZXRhY2hlZCxcbmlzU3RvcmFibGU6ZGV0YWNoZWRIZWFwU3RvcmVzLmlzU3RvcmFibGUsXG5cbm1hcFN0b3JlOndyYXBQcm92aWRlcihkZXRhY2hlZEhlYXBTdG9yZXMubWFwU3RvcmUpLFxuc2V0U3RvcmU6d3JhcFByb3ZpZGVyKGRldGFjaGVkSGVhcFN0b3Jlcy5zZXRTdG9yZSksXG53ZWFrTWFwU3RvcmU6d3JhcFByb3ZpZGVyKGRldGFjaGVkSGVhcFN0b3Jlcy53ZWFrTWFwU3RvcmUpLFxud2Vha1NldFN0b3JlOndyYXBQcm92aWRlcihkZXRhY2hlZEhlYXBTdG9yZXMud2Vha1NldFN0b3JlKX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUhlYXBab25lKG1ha2VIZWFwWm9uZSk7XG5oYXJkZW4obWFrZUhlYXBab25lKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VIZWFwWm9uZSI6WyJtYWtlSGVhcFpvbmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA7lq3z2sCAABrAgAAKwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTguMS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9leHBvcnRzLmpzIiwiLi9tYWtlLW9uY2UuanMiLCIuL2tleXMuanMiLCIuL2lzLXBhc3NhYmxlLmpzIiwiLi93YXRjaC1wcm9taXNlLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9leHBvcnRzLmpzIiwiLi9pcy1wYXNzYWJsZS5qcyIsIi4va2V5cy5qcyIsIi4vbWFrZS1vbmNlLmpzIiwiLi93YXRjaC1wcm9taXNlLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL2V4cG9ydHMuanNcIiwgW11dLFtcIi4vbWFrZS1vbmNlLmpzXCIsIFtdXSxbXCIuL2tleXMuanNcIiwgW11dLFtcIi4vaXMtcGFzc2FibGUuanNcIiwgW11dLFtcIi4vd2F0Y2gtcHJvbWlzZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB16UGuWAIAAFgCAAAxAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxOC4xL3NyYy9pcy1wYXNzYWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIl0sImV4cG9ydHMiOlsiaXNQYXNzYWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCByZWFsSXNQYXNzYWJsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImlzUGFzc2FibGVcIiwgWyRozY9fYSA9PiAocmVhbElzUGFzc2FibGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQYXNzYWJsZT0oc3BlY2ltZW4pPT5yZWFsSXNQYXNzYWJsZShzcGVjaW1lbik7JGjNj19vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Bhc3NhYmxlIjpbImlzUGFzc2FibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAHmlMGXUDAAB1AwAAKgAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTguMS9zcmMva2V5cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYWdvcmljVmF0RGF0YUtleXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGtpbmQ9KGxhYmVsKT0+IGAke2xhYmVsfV9raW5kSGFuZGxlYDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2luZ2xldG9uPShsYWJlbCk9PiBgJHtsYWJlbH1fc2luZ2xldG9uYDtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFnb3JpY1ZhdERhdGFLZXlzPXtcbmV4b0NsYXNzOihsYWJlbCk9PmhhcmRlbihba2luZChsYWJlbCldKSxcbmV4b0NsYXNzS2l0OihsYWJlbCk9PmhhcmRlbihba2luZChsYWJlbCldKSxcbmV4bzoobGFiZWwpPT5oYXJkZW4oW2tpbmQobGFiZWwpLHNpbmdsZXRvbihsYWJlbCldKSxcbnN0b3JlOihsYWJlbCk9PmhhcmRlbihbbGFiZWxdKSxcbnpvbmU6KGxhYmVsKT0+aGFyZGVuKFtsYWJlbF0pfTskaM2PX29uY2UuYWdvcmljVmF0RGF0YUtleXMoYWdvcmljVmF0RGF0YUtleXMpO1xuXG5oYXJkZW4oYWdvcmljVmF0RGF0YUtleXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYWdvcmljVmF0RGF0YUtleXMiOlsiYWdvcmljVmF0RGF0YUtleXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAH0KGKeIGAADiBgAALwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTguMS9zcmMvbWFrZS1vbmNlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIm1ha2VPbmNlS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdExhYmVsVG9LZXlzPShsYWJlbCk9PmhhcmRlbihbbGFiZWxdKTtcbmhhcmRlbihkZWZhdWx0TGFiZWxUb0tleXMpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU9uY2VLaXQ9KGRlYnVnTmFtZSxzdG9yZXMsYmFja2luZ1N0b3JlPXVuZGVmaW5lZCk9Pntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgdXNlZEtleXM9c3RvcmVzLmRldGFjaGVkKCkuc2V0U3RvcmUoIGAke2RlYnVnTmFtZX0gdXNlZCBrZXlzYCk7XG5cbi8qXG5cbiAgICovXG5jb25zdCBhc3NlcnRPbmx5T25jZT0oa2V5KT0+e1xudHlwZW9mIGtleT09PSdzdHJpbmcnfHxGYWlsIGBrZXkgJHtrZXl9IG11c3QgYmUgYSBzdHJpbmdgO1xuIXVzZWRLZXlzLmhhcyhrZXkpfHxcbkZhaWwgYGtleSAke2tleX0gaGFzIGFscmVhZHkgYmVlbiB1c2VkIGluIHRoaXMgem9uZSBhbmQgaW5jYXJuYXRpb25gO1xuXG4vL1xuLy9cbnVzZWRLZXlzLmFkZChrZXkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCB3cmFwUHJvdmlkZXI9KHByb3ZpZGVyLGxhYmVsVG9LZXlzPWRlZmF1bHRMYWJlbFRvS2V5cyk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3cmFwcGVyPShsYWJlbCwuLi5yZXN0KT0+e1xuZm9yKGNvbnN0IGtleSBvZiBsYWJlbFRvS2V5cyhsYWJlbCkpe1xuYXNzZXJ0T25seU9uY2Uoa2V5KTtcbiB9XG5yZXR1cm4gcHJvdmlkZXIobGFiZWwsLi4ucmVzdCk7XG4gfTtcbnJldHVybiAoLyogICAgICAgICAgICAqL3dyYXBwZXIpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlT25jZT0oa2V5LG1ha2VyKT0+e1xuYXNzZXJ0T25seU9uY2Uoa2V5KTtcbmlmKGJhY2tpbmdTdG9yZSYmYmFja2luZ1N0b3JlLmhhcyhrZXkpKXtcbnJldHVybiBiYWNraW5nU3RvcmUuZ2V0KGtleSk7XG4gfVxuY29uc3QgdmFsdWU9bWFrZXIoa2V5KTtcbnN0b3Jlcy5pc1N0b3JhYmxlKHZhbHVlKXx8XG5GYWlsIGBtYWtlciByZXR1cm4gdmFsdWUgJHt2YWx1ZX0gaXMgbm90IHN0b3JhYmxlYDtcbmJhY2tpbmdTdG9yZSYmYmFja2luZ1N0b3JlLmluaXQoa2V5LHZhbHVlKTtcbnJldHVybiB2YWx1ZTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHttYWtlT25jZSx3cmFwUHJvdmlkZXJ9KTtcbiB9OyRozY9fb25jZS5tYWtlT25jZUtpdChtYWtlT25jZUtpdCk7XG5oYXJkZW4obWFrZU9uY2VLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU9uY2VLaXQiOlsibWFrZU9uY2VLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA72q0kl8JAABfCQAAMwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTguMS9zcmMvd2F0Y2gtcHJvbWlzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXR0ZXJucyIsIkBlbmRvL2ZhciJdLCJleHBvcnRzIjpbIlByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSIsIlByb21pc2VXYXRjaGVySGFuZGxlciIsIlByb21pc2VXYXRjaGVySSIsIlByb21pc2VXYXRjaGVyUmVqZWN0ZWRJIiwid2F0Y2hQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsTSxFOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdHthcHBseX09UmVmbGVjdDtcblxuLypcblxuICovXG5jb25zdCAgICAgICAgUHJvbWlzZVdhdGNoZXJIYW5kbGVyPU0uY2FsbChNLnJhdygpKS5yZXN0KE0ucmF3KCkpLnJldHVybnMoKTtcblxuLypcblxuICovJGjNj19vbmNlLlByb21pc2VXYXRjaGVySGFuZGxlcihQcm9taXNlV2F0Y2hlckhhbmRsZXIpO1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVyST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXInLHtcbm9uRnVsZmlsbGVkOlByb21pc2VXYXRjaGVySGFuZGxlcixcbm9uUmVqZWN0ZWQ6UHJvbWlzZVdhdGNoZXJIYW5kbGVyfSk7XG5cblxuLypcblxuICovJGjNj19vbmNlLlByb21pc2VXYXRjaGVySShQcm9taXNlV2F0Y2hlckkpO1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVyRnVsZmlsbGVkST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWQnLHtcbm9uRnVsZmlsbGVkOlByb21pc2VXYXRjaGVySGFuZGxlcn0pO1xuXG5cbi8qXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkoUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWRJKTtcbmNvbnN0ICAgICAgICBQcm9taXNlV2F0Y2hlclJlamVjdGVkST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXJSZWplY3RlZCcse1xub25SZWplY3RlZDpQcm9taXNlV2F0Y2hlckhhbmRsZXJ9KTtcblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlV2F0Y2hlclJlamVjdGVkSShQcm9taXNlV2F0Y2hlclJlamVjdGVkSSk7XG5jb25zdCBjYWxsTWVNYXliZT0odGhhdCxwcm9wLHBvc3RBcmdzKT0+e1xuY29uc3QgZm49dGhhdFtwcm9wXTtcbmlmKCFmbil7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmFzc2VydC50eXBlb2YoZm4sJ2Z1bmN0aW9uJyk7XG4vKlxuXG4gICAqL1xuY29uc3Qgd3JhcHBlZD0oYXJnKT0+e1xuLy9cbi8vXG5hcHBseShmbix0aGF0LFthcmcsLi4ucG9zdEFyZ3NdKTtcbiB9O1xucmV0dXJuIHdyYXBwZWQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHdhdGNoUHJvbWlzZT0ocCx3YXRjaGVyLC4uLndhdGNoZXJBcmdzKT0+e1xuUHJvbWlzZS5yZXNvbHZlKHApPT09cHx8RmFpbCBgd2F0Y2hQcm9taXNlIG9ubHkgd2F0Y2hlcyBwcm9taXNlc2A7XG5jb25zdCBvbkZ1bGZpbGxlZD1jYWxsTWVNYXliZSh3YXRjaGVyLCdvbkZ1bGZpbGxlZCcsd2F0Y2hlckFyZ3MpO1xuY29uc3Qgb25SZWplY3RlZD1jYWxsTWVNYXliZSh3YXRjaGVyLCdvblJlamVjdGVkJyx3YXRjaGVyQXJncyk7XG5vbkZ1bGZpbGxlZHx8XG5vblJlamVjdGVkfHxcbkZhaWwgYHByb21pc2Ugd2F0Y2hlciBtdXN0IGltcGxlbWVudCBhdCBsZWFzdCBvbmUgaGFuZGxlciBtZXRob2RgO1xudm9pZCBFLndoZW4ocCxvbkZ1bGZpbGxlZCxvblJlamVjdGVkKTtcbiB9OyRozY9fb25jZS53YXRjaFByb21pc2Uod2F0Y2hQcm9taXNlKTtcbmhhcmRlbih3YXRjaFByb21pc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUHJvbWlzZVdhdGNoZXJIYW5kbGVyIjpbIlByb21pc2VXYXRjaGVySGFuZGxlciJdLCJQcm9taXNlV2F0Y2hlckkiOlsiUHJvbWlzZVdhdGNoZXJJIl0sIlByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSI6WyJQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkiXSwiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiOlsiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiXSwid2F0Y2hQcm9taXNlIjpbIndhdGNoUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB19M2c+QQAAPkEAAAnAAAAQGFnb3JpYy9jYWNoZS12MC4zLjMtdTE4LjEvc3JjL2NhY2hlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIi4vc3RvcmUuanMiXSwiZXhwb3J0cyI6WyJtYWtlQ2FjaGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxGYXIsbWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3I7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiLi9zdG9yZS5qc1wiLCBbW1wibWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3JcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3IgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuICovXG5jb25zdCAgICAgICAgbWFrZUNhY2hlPShjb29yZGluYXRvcj1tYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvcigpKT0+e1xuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2FjaGU9KGtleSwuLi5vcHRVcGRhdGVHdWFyZFBhdHRlcm4pPT57XG5pZihvcHRVcGRhdGVHdWFyZFBhdHRlcm4ubGVuZ3RoPT09MCl7XG5yZXR1cm4gRShjb29yZGluYXRvcikuZ2V0UmVjZW50VmFsdWUoa2V5KTtcbiB9XG5cbmNvbnN0W3VwZGF0ZSxndWFyZFBhdHRlcm5dPW9wdFVwZGF0ZUd1YXJkUGF0dGVybjtcbmlmKHR5cGVvZiB1cGRhdGUhPT0nZnVuY3Rpb24nKXtcbnJldHVybiBFKGNvb3JkaW5hdG9yKS5zZXRDYWNoZVZhbHVlKGtleSx1cGRhdGUsZ3VhcmRQYXR0ZXJuKTtcbiB9XG5cbmNvbnN0IHVwZGF0ZXI9RmFyKCdjYWNoZSB1cGRhdGVyJyx7XG51cGRhdGU6KG9sZFZhbHVlKT0+e1xucmV0dXJuIHVwZGF0ZShvbGRWYWx1ZSk7XG4gfX0pO1xuXG5yZXR1cm4gRShjb29yZGluYXRvcikudXBkYXRlQ2FjaGVWYWx1ZShrZXksdXBkYXRlcixndWFyZFBhdHRlcm4pO1xuIH07XG5cbnJldHVybiBjYWNoZTtcbiB9OyRozY9fb25jZS5tYWtlQ2FjaGUobWFrZUNhY2hlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VDYWNoZSI6WyJtYWtlQ2FjaGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAvQC5yAMCAAADAgAAJgAAAEBhZ29yaWMvY2FjaGUtdjAuMy4zLXUxOC4xL3NyYy9tYWluLmpzeyJpbXBvcnRzIjpbIi4vdHlwZXMuanMiLCIuL3N0b3JlLmpzIiwiLi9jYWNoZS5qcyIsIi4vc3RhdGUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2NhY2hlLmpzIiwiLi9zdGF0ZS5qcyIsIi4vc3RvcmUuanMiLCIuL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3R5cGVzLmpzXCIsIFtdXSxbXCIuL3N0b3JlLmpzXCIsIFtdXSxbXCIuL2NhY2hlLmpzXCIsIFtdXSxbXCIuL3N0YXRlLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAB7Z1uwMBAAADAQAACcAAABAYWdvcmljL2NhY2hlLXYwLjMuMy11MTguMS9zcmMvc3RhdGUuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIkdST1VORF9TVEFURSIsIm1ha2VTdGF0ZSIsIndpdGhHcm91bmRTdGF0ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBHUk9VTkRfU1RBVEU9aGFyZGVuKHtnZW5lcmF0aW9uOjBuLHZhbHVlOnVuZGVmaW5lZH0pO1xuXG4vKlxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5HUk9VTkRfU1RBVEUoR1JPVU5EX1NUQVRFKTtcbmNvbnN0ICAgICAgICBtYWtlU3RhdGU9KHZhbHVlLHByaW9yU3RhdGU9R1JPVU5EX1NUQVRFKT0+XG5oYXJkZW4oe1xuZ2VuZXJhdGlvbjpwcmlvclN0YXRlLmdlbmVyYXRpb24rMW4sXG52YWx1ZX0pO1xuXG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVN0YXRlKG1ha2VTdGF0ZSk7XG5jb25zdCAgICAgICAgd2l0aEdyb3VuZFN0YXRlPShzdGF0ZVN0b3JlKT0+KHtcbi4uLnN0YXRlU3RvcmUsXG5nZXQ6KGtleSk9PntcbmlmKCFzdGF0ZVN0b3JlLmhhcyhrZXkpKXtcbnJldHVybiBHUk9VTkRfU1RBVEU7XG4gfVxucmV0dXJuIHN0YXRlU3RvcmUuZ2V0KGtleSk7XG4gfX0pOyRozY9fb25jZS53aXRoR3JvdW5kU3RhdGUod2l0aEdyb3VuZFN0YXRlKTtcblxuaGFyZGVuKHdpdGhHcm91bmRTdGF0ZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJHUk9VTkRfU1RBVEUiOlsiR1JPVU5EX1NUQVRFIl0sIm1ha2VTdGF0ZSI6WyJtYWtlU3RhdGUiXSwid2l0aEdyb3VuZFN0YXRlIjpbIndpdGhHcm91bmRTdGF0ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADte8F7ghcAAIIXAAAnAAAAQGFnb3JpYy9jYWNoZS12MC4zLjMtdTE4LjEvc3JjL3N0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBhZ29yaWMvaW50ZXJuYWwiLCIuL3N0YXRlLmpzIl0sImV4cG9ydHMiOlsibWFrZUNoYWluU3RvcmFnZUNvb3JkaW5hdG9yIiwibWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxGYXIsZGVlcGx5RnVsZmlsbGVkLG1ha2VNYXJzaGFsLG1hdGNoZXMsbWFrZVNjYWxhck1hcFN0b3JlLG1ha2VTY2FsYXJCaWdNYXBTdG9yZSx1bnRpbFRydWUsd2l0aEdyb3VuZFN0YXRlLG1ha2VTdGF0ZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJkZWVwbHlGdWxmaWxsZWRcIiwgWyRozY9fYSA9PiAoZGVlcGx5RnVsZmlsbGVkID0gJGjNj19hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dLFtcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ01hcFN0b3JlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1widW50aWxUcnVlXCIsIFskaM2PX2EgPT4gKHVudGlsVHJ1ZSA9ICRozY9fYSldXV1dLFtcIi4vc3RhdGUuanNcIiwgW1tcIndpdGhHcm91bmRTdGF0ZVwiLCBbJGjNj19hID0+ICh3aXRoR3JvdW5kU3RhdGUgPSAkaM2PX2EpXV0sW1wibWFrZVN0YXRlXCIsIFskaM2PX2EgPT4gKG1ha2VTdGF0ZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFrZUtleVRvU3RyaW5nPShzYW5pdGl6ZT0ob2JqKT0+b2JqKT0+e1xubGV0IGxhc3ROb25jZT0wO1xuY29uc3QgdmFsVG9Ob25jZT1uZXcgV2Vha01hcCgpO1xuY29uc3QgdmFsVG9TbG90PSh2YWwpPT57XG5sZXQgc2xvdD12YWxUb05vbmNlLmdldCh2YWwpO1xuaWYoIXNsb3Qpe1xubGFzdE5vbmNlKz0xO1xuc2xvdD1sYXN0Tm9uY2U7XG52YWxUb05vbmNlLnNldCh2YWwsc2xvdCk7XG4gfVxucmV0dXJuIHNsb3Q7XG4gfTtcblxuY29uc3R7dG9DYXBEYXRhOmtleVRvSnNvbmFibGV9PW1ha2VNYXJzaGFsKHZhbFRvU2xvdCx1bmRlZmluZWQse1xuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pO1xuXG5jb25zdCBrZXlUb1N0cmluZz1hc3luYyhrZXlQKT0+e1xuY29uc3Qga2V5PWF3YWl0IHNhbml0aXplKGtleVApO1xuY29uc3Qgb2JqPWtleVRvSnNvbmFibGUoa2V5KTtcbnJldHVybiBKU09OLnN0cmluZ2lmeShvYmopO1xuIH07XG5yZXR1cm4ga2V5VG9TdHJpbmc7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGFwcGx5Q2FjaGVUcmFuc2FjdGlvbj1hc3luYyhcbmtleVN0cixcbnR4bixcbmd1YXJkUGF0dGVybixcbnNhbml0aXplLFxuc3RhdGVTdG9yZSk9Plxue1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGdldFVwZGF0ZWRTdGF0ZT1hc3luYyhiYXNpc1N0YXRlKT0+e1xuY29uc3R7dmFsdWV9PWJhc2lzU3RhdGU7XG5pZighbWF0Y2hlcyh2YWx1ZSxndWFyZFBhdHRlcm4pKXtcbi8vXG5yZXR1cm4gbnVsbDtcbiB9XG5cbmNvbnN0IG5ld1ZhbHVlPWF3YWl0IHNhbml0aXplKHR4bih2YWx1ZSkpO1xucmV0dXJuIG1ha2VTdGF0ZShuZXdWYWx1ZSxiYXNpc1N0YXRlKTtcbiB9O1xuXG5sZXQgYmFzaXNTdGF0ZT1zdGF0ZVN0b3JlLmdldChrZXlTdHIpO1xubGV0IHVwZGF0ZWRTdGF0ZT1hd2FpdCBnZXRVcGRhdGVkU3RhdGUoYmFzaXNTdGF0ZSk7XG5cbi8vXG5cbi8vXG5iYXNpc1N0YXRlPXN0YXRlU3RvcmUuZ2V0KGtleVN0cik7XG5jb25zdCB1bnRpbFVwZGF0ZVN5bmNlZD11bnRpbFRydWUoXG4oKT0+IXVwZGF0ZWRTdGF0ZXx8dXBkYXRlZFN0YXRlLmdlbmVyYXRpb24+YmFzaXNTdGF0ZS5nZW5lcmF0aW9uKTtcblxuZm9yIGF3YWl0KGNvbnN0IF8gb2YgdW50aWxVcGRhdGVTeW5jZWQpe1xudXBkYXRlZFN0YXRlPWF3YWl0IGdldFVwZGF0ZWRTdGF0ZShiYXNpc1N0YXRlKTtcbi8vXG5iYXNpc1N0YXRlPXN0YXRlU3RvcmUuZ2V0KGtleVN0cik7XG4gfVxuXG5pZighdXBkYXRlZFN0YXRlKXtcbi8vXG4vL1xucmV0dXJuIGJhc2lzU3RhdGUudmFsdWU7XG4gfVxuXG4vL1xuLy9cbmlmKGJhc2lzU3RhdGUuZ2VuZXJhdGlvbjwxbil7XG4vL1xuc3RhdGVTdG9yZS5pbml0KGtleVN0cix1cGRhdGVkU3RhdGUpO1xuIH1lbHNle1xuc3RhdGVTdG9yZS5zZXQoa2V5U3RyLHVwZGF0ZWRTdGF0ZSk7XG4gfVxuXG4vL1xucmV0dXJuIHVwZGF0ZWRTdGF0ZS52YWx1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBzdHJpbmdpZnlTdGF0ZVN0b3JlPWFzeW5jKHN0YXRlU3RvcmUsbWFyc2hhbGxlcik9Pntcbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBvYmo9e307XG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mIHN0YXRlU3RvcmUuZW50cmllcygpKXtcbm9ialtrZXldPUUobWFyc2hhbGxlcikudG9DYXBEYXRhKHZhbHVlKTtcbiB9XG5yZXR1cm4gZGVlcGx5RnVsZmlsbGVkKGhhcmRlbihvYmopKS50aGVuKChmdWxmaWxsZWRPYmopPT5cbkpTT04uc3RyaW5naWZ5KGZ1bGZpbGxlZE9iaikpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yPShcbnN0YXRlU3RvcmU9bWFrZVNjYWxhck1hcFN0b3JlKCksXG5zYW5pdGl6ZT1kZWVwbHlGdWxmaWxsZWQpPT5cbntcbmNvbnN0IHNlcmlhbGl6ZVBhc3NhYmxlPW1ha2VLZXlUb1N0cmluZyhzYW5pdGl6ZSk7XG5cbmNvbnN0IGRlZmF1bHRTdGF0ZVN0b3JlPXdpdGhHcm91bmRTdGF0ZShzdGF0ZVN0b3JlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvb3JkPUZhcignc3RvcmUgY2FjaGUgY29vcmRpbmF0b3InLHtcbmdldFJlY2VudFZhbHVlOmFzeW5jKGtleSk9PntcbmNvbnN0IGtleVN0cj1hd2FpdCBzZXJpYWxpemVQYXNzYWJsZShrZXkpO1xucmV0dXJuIGRlZmF1bHRTdGF0ZVN0b3JlLmdldChrZXlTdHIpLnZhbHVlO1xuIH0sXG5zZXRDYWNoZVZhbHVlOmFzeW5jKGtleSxuZXdWYWx1ZSxndWFyZFBhdHRlcm4pPT57XG5jb25zdCBrZXlTdHI9YXdhaXQgc2VyaWFsaXplUGFzc2FibGUoa2V5KTtcbnJldHVybiBhcHBseUNhY2hlVHJhbnNhY3Rpb24oXG5rZXlTdHIsXG4oKT0+bmV3VmFsdWUsXG5ndWFyZFBhdHRlcm4sXG5zYW5pdGl6ZSxcbmRlZmF1bHRTdGF0ZVN0b3JlKTtcblxuIH0sXG51cGRhdGVDYWNoZVZhbHVlOmFzeW5jKGtleSx1cGRhdGVyLGd1YXJkUGF0dGVybik9PntcbmNvbnN0IGtleVN0cj1hd2FpdCBzZXJpYWxpemVQYXNzYWJsZShrZXkpO1xucmV0dXJuIGFwcGx5Q2FjaGVUcmFuc2FjdGlvbihcbmtleVN0cixcbihvbGRWYWx1ZSk9PkUodXBkYXRlcikudXBkYXRlKG9sZFZhbHVlKSxcbmd1YXJkUGF0dGVybixcbnNhbml0aXplLFxuZGVmYXVsdFN0YXRlU3RvcmUpO1xuXG4gfX0pO1xuXG5yZXR1cm4gY29vcmQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvcihtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvcik7XG5jb25zdCBtYWtlTGFzdFdpbnNVcGRhdGVyPShzdGF0ZVN0b3JlLG1hcnNoYWxsZXIsc3RvcmFnZU5vZGUpPT57XG5sZXQgbGFzdFByZXBhcmVUaWNrZXQ9MG47XG5sZXQgbGFzdENvbW1pdFRpY2tldD0wbjtcblxucmV0dXJuIGFzeW5jKHN0b3JlZFZhbHVlKT0+e1xuLy9cbi8vXG4vL1xubGFzdFByZXBhcmVUaWNrZXQrPTFuO1xuY29uc3QgbWFyc2hhbGxUaWNrZXQ9bGFzdFByZXBhcmVUaWNrZXQ7XG5jb25zdCBzZXJpYWxpemVkU3RvcmU9YXdhaXQgc3RyaW5naWZ5U3RhdGVTdG9yZShzdGF0ZVN0b3JlLG1hcnNoYWxsZXIpO1xuaWYobWFyc2hhbGxUaWNrZXQ8bGFzdENvbW1pdFRpY2tldCl7XG4vL1xucmV0dXJuIHN0b3JlZFZhbHVlO1xuIH1cbmF3YWl0IEUoc3RvcmFnZU5vZGUpLnNldFZhbHVlKHNlcmlhbGl6ZWRTdG9yZSk7XG5sYXN0Q29tbWl0VGlja2V0PW1hcnNoYWxsVGlja2V0O1xucmV0dXJuIHN0b3JlZFZhbHVlO1xuIH07XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ2hhaW5TdG9yYWdlQ29vcmRpbmF0b3I9KHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5jb25zdCBzdGF0ZVN0b3JlPW1ha2VTY2FsYXJCaWdNYXBTdG9yZSgnc3RhdGVLZXknKTtcblxuY29uc3Qgc2FuaXRpemU9ZGVlcGx5RnVsZmlsbGVkO1xuY29uc3Qgc2VyaWFsaXplUGFzc2FibGU9bWFrZUtleVRvU3RyaW5nKHNhbml0aXplKTtcblxuY29uc3QgZGVmYXVsdFN0YXRlU3RvcmU9d2l0aEdyb3VuZFN0YXRlKHN0YXRlU3RvcmUpO1xuXG5jb25zdCB1cGRhdGVTdG9yYWdlTm9kZT1tYWtlTGFzdFdpbnNVcGRhdGVyKFxuZGVmYXVsdFN0YXRlU3RvcmUsXG5tYXJzaGFsbGVyLFxuc3RvcmFnZU5vZGUpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb29yZD1GYXIoJ3N0b3JlIGNhY2hlIGNvb3JkaW5hdG9yJyx7XG5nZXRSZWNlbnRWYWx1ZTphc3luYyhrZXkpPT57XG5jb25zdCBrZXlTdHI9YXdhaXQgc2VyaWFsaXplUGFzc2FibGUoa2V5KTtcbnJldHVybiBkZWZhdWx0U3RhdGVTdG9yZS5nZXQoa2V5U3RyKS52YWx1ZTtcbiB9LFxuc2V0Q2FjaGVWYWx1ZTphc3luYyhrZXksbmV3VmFsdWUsZ3VhcmRQYXR0ZXJuKT0+e1xuY29uc3Qga2V5U3RyPWF3YWl0IHNlcmlhbGl6ZVBhc3NhYmxlKGtleSk7XG5jb25zdCBzdG9yZWRWYWx1ZT1hd2FpdCBhcHBseUNhY2hlVHJhbnNhY3Rpb24oXG5rZXlTdHIsXG4oKT0+bmV3VmFsdWUsXG5ndWFyZFBhdHRlcm4sXG5zYW5pdGl6ZSxcbmRlZmF1bHRTdGF0ZVN0b3JlKTtcblxucmV0dXJuIHVwZGF0ZVN0b3JhZ2VOb2RlKHN0b3JlZFZhbHVlKTtcbiB9LFxudXBkYXRlQ2FjaGVWYWx1ZTphc3luYyhrZXksdXBkYXRlcixndWFyZFBhdHRlcm4pPT57XG5jb25zdCBrZXlTdHI9YXdhaXQgc2VyaWFsaXplUGFzc2FibGUoa2V5KTtcbmNvbnN0IHN0b3JlZFZhbHVlPWF3YWl0IGFwcGx5Q2FjaGVUcmFuc2FjdGlvbihcbmtleVN0cixcbihvbGRWYWx1ZSk9PkUodXBkYXRlcikudXBkYXRlKG9sZFZhbHVlKSxcbmd1YXJkUGF0dGVybixcbnNhbml0aXplLFxuZGVmYXVsdFN0YXRlU3RvcmUpO1xuXG5yZXR1cm4gdXBkYXRlU3RvcmFnZU5vZGUoc3RvcmVkVmFsdWUpO1xuIH19KTtcblxucmV0dXJuIGNvb3JkO1xuIH07JGjNj19vbmNlLm1ha2VDaGFpblN0b3JhZ2VDb29yZGluYXRvcihtYWtlQ2hhaW5TdG9yYWdlQ29vcmRpbmF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3IiOlsibWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3IiXSwibWFrZUNoYWluU3RvcmFnZUNvb3JkaW5hdG9yIjpbIm1ha2VDaGFpblN0b3JhZ2VDb29yZGluYXRvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAnAAAAQGFnb3JpYy9jYWNoZS12MC4zLjMtdTE4LjEvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABczaqHAB0AAAAdAAAsAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE4LjEvc3JjL2Ftb3VudE1hdGguanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvc3RvcmUiLCIuL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzIiwiLi9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzIiwiLi9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJBbW91bnRNYXRoIiwiQXNzZXRLaW5kIiwiYXNzZXJ0QXNzZXRLaW5kIiwiYXNzZXJ0VmFsdWVHZXRIZWxwZXJzIiwiZ2V0QXNzZXRLaW5kIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxwYXNzU3R5bGVPZixhc3NlcnRSZW1vdGFibGUsYXNzZXJ0UmVjb3JkLE0sbWF0Y2hlcyxuYXRNYXRoSGVscGVycyxzZXRNYXRoSGVscGVycyxjb3B5U2V0TWF0aEhlbHBlcnMsY29weUJhZ01hdGhIZWxwZXJzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UmVtb3RhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFJlbW90YWJsZSA9ICRozY9fYSldXSxbXCJhc3NlcnRSZWNvcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVjb3JkID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanNcIiwgW1tcIm5hdE1hdGhIZWxwZXJzXCIsIFskaM2PX2EgPT4gKG5hdE1hdGhIZWxwZXJzID0gJGjNj19hKV1dXV0sW1wiLi9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qc1wiLCBbW1wic2V0TWF0aEhlbHBlcnNcIiwgWyRozY9fYSA9PiAoc2V0TWF0aEhlbHBlcnMgPSAkaM2PX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qc1wiLCBbW1wiY29weVNldE1hdGhIZWxwZXJzXCIsIFskaM2PX2EgPT4gKGNvcHlTZXRNYXRoSGVscGVycyA9ICRozY9fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzXCIsIFtbXCJjb3B5QmFnTWF0aEhlbHBlcnNcIiwgWyRozY9fYSA9PiAoY29weUJhZ01hdGhIZWxwZXJzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEFzc2V0S2luZD0vKiAgICAgICAgICAgICAgICAqL3tcbk5BVDonbmF0JyxcblNFVDonc2V0JyxcbkNPUFlfU0VUOidjb3B5U2V0JyxcbkNPUFlfQkFHOidjb3B5QmFnJ307JGjNj19vbmNlLkFzc2V0S2luZChBc3NldEtpbmQpO1xuXG5oYXJkZW4oQXNzZXRLaW5kKTtcbmNvbnN0IGFzc2V0S2luZE5hbWVzPWhhcmRlbihPYmplY3QudmFsdWVzKEFzc2V0S2luZCkuc29ydCgpKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRBc3NldEtpbmQ9KGFsbGVnZWRBSyk9PntcbmFzc2V0S2luZE5hbWVzLmluY2x1ZGVzKGFsbGVnZWRBSyl8fFxuRmFpbCBgVGhlIGFzc2V0S2luZCAke2FsbGVnZWRBS30gbXVzdCBiZSBvbmUgb2YgJHtxKGFzc2V0S2luZE5hbWVzKX1gO1xuIH07JGjNj19vbmNlLmFzc2VydEFzc2V0S2luZChhc3NlcnRBc3NldEtpbmQpO1xuaGFyZGVuKGFzc2VydEFzc2V0S2luZCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBoZWxwZXJzPXtcbm5hdDpuYXRNYXRoSGVscGVycyxcbnNldDpzZXRNYXRoSGVscGVycyxcbmNvcHlTZXQ6Y29weVNldE1hdGhIZWxwZXJzLFxuY29weUJhZzpjb3B5QmFnTWF0aEhlbHBlcnN9O1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhc3NlcnRWYWx1ZUdldEFzc2V0S2luZD0odmFsdWUpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsdWUpO1xuaWYocGFzc1N0eWxlPT09J2JpZ2ludCcpe1xucmV0dXJuJ25hdCc7XG4gfVxuaWYocGFzc1N0eWxlPT09J2NvcHlBcnJheScpe1xucmV0dXJuJ3NldCc7XG4gfVxuaWYobWF0Y2hlcyh2YWx1ZSxNLnNldCgpKSl7XG5yZXR1cm4nY29weVNldCc7XG4gfVxuaWYobWF0Y2hlcyh2YWx1ZSxNLmJhZygpKSl7XG5yZXR1cm4nY29weUJhZyc7XG4gfVxuLy9cbi8vXG4vL1xuLy9cbi8vXG50aHJvdyBGYWlsIGB2YWx1ZSAke3ZhbHVlfSBtdXN0IGJlIGEgYmlnaW50LCBjb3B5U2V0LCBjb3B5QmFnLCBvciBhbiBhcnJheSwgbm90ICR7cShcbnBhc3NTdHlsZSlcbiB9YDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRWYWx1ZUdldEhlbHBlcnM9KHZhbHVlKT0+XG4vL1xuaGVscGVyc1thc3NlcnRWYWx1ZUdldEFzc2V0S2luZCh2YWx1ZSldO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5hc3NlcnRWYWx1ZUdldEhlbHBlcnMoYXNzZXJ0VmFsdWVHZXRIZWxwZXJzKTtcbmNvbnN0IG9wdGlvbmFsQnJhbmRDaGVjaz0oYWxsZWdlZEJyYW5kLGJyYW5kKT0+e1xuaWYoYnJhbmQhPT11bmRlZmluZWQpe1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuYWxsZWdlZEJyYW5kPT09YnJhbmR8fFxuRmFpbCBgYW1vdW50J3MgYnJhbmQgJHtxKGFsbGVnZWRCcmFuZCl9IGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgYnJhbmQgJHtxKFxuYnJhbmQpXG4gfWA7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja0xSQW5kR2V0SGVscGVycz0obGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5hc3NlcnRSZWNvcmQobGVmdEFtb3VudCwnbGVmdEFtb3VudCcpO1xuYXNzZXJ0UmVjb3JkKHJpZ2h0QW1vdW50LCdyaWdodEFtb3VudCcpO1xuY29uc3R7dmFsdWU6bGVmdFZhbHVlLGJyYW5kOmxlZnRCcmFuZH09bGVmdEFtb3VudDtcbmNvbnN0e3ZhbHVlOnJpZ2h0VmFsdWUsYnJhbmQ6cmlnaHRCcmFuZH09cmlnaHRBbW91bnQ7XG5hc3NlcnRSZW1vdGFibGUobGVmdEJyYW5kLCdsZWZ0QnJhbmQnKTtcbmFzc2VydFJlbW90YWJsZShyaWdodEJyYW5kLCdyaWdodEJyYW5kJyk7XG5vcHRpb25hbEJyYW5kQ2hlY2sobGVmdEJyYW5kLGJyYW5kKTtcbm9wdGlvbmFsQnJhbmRDaGVjayhyaWdodEJyYW5kLGJyYW5kKTtcbmxlZnRCcmFuZD09PXJpZ2h0QnJhbmR8fFxuRmFpbCBgQnJhbmRzIGluIGxlZnQgJHtxKGxlZnRCcmFuZCl9IGFuZCByaWdodCAke3EoXG5yaWdodEJyYW5kKVxuIH0gc2hvdWxkIG1hdGNoIGJ1dCBkbyBub3RgO1xuY29uc3QgbGVmdEhlbHBlcnM9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKGxlZnRWYWx1ZSk7XG5jb25zdCByaWdodEhlbHBlcnM9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKHJpZ2h0VmFsdWUpO1xubGVmdEhlbHBlcnM9PT1yaWdodEhlbHBlcnN8fFxuRmFpbCBgVGhlIGxlZnQgJHtsZWZ0QW1vdW50fSBhbmQgcmlnaHQgYW1vdW50ICR7cmlnaHRBbW91bnR9IGhhZCBkaWZmZXJlbnQgYXNzZXRLaW5kc2A7XG5yZXR1cm4gbGVmdEhlbHBlcnM7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvZXJjZUxSPShoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpPT57XG4vL1xucmV0dXJuW2guZG9Db2VyY2UobGVmdEFtb3VudC52YWx1ZSksaC5kb0NvZXJjZShyaWdodEFtb3VudC52YWx1ZSldO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBpc0dURT0obGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xucmV0dXJuIGguZG9Jc0dURSguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQW1vdW50TWF0aD17XG4vL1xuLy9cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5tYWtlOihicmFuZCxhbGxlZ2VkVmFsdWUpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5jb25zdCBoPWFzc2VydFZhbHVlR2V0SGVscGVycyhhbGxlZ2VkVmFsdWUpO1xuY29uc3QgdmFsdWU9aC5kb0NvZXJjZShhbGxlZ2VkVmFsdWUpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb2VyY2U6KGJyYW5kLGFsbGVnZWRBbW91bnQpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5hc3NlcnRSZWNvcmQoYWxsZWdlZEFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHticmFuZDphbGxlZ2VkQnJhbmQsdmFsdWU6YWxsZWdlZFZhbHVlfT1hbGxlZ2VkQW1vdW50O1xuYnJhbmQ9PT1hbGxlZ2VkQnJhbmR8fFxuRmFpbCBgVGhlIGJyYW5kIGluIHRoZSBhbGxlZ2VkQW1vdW50ICR7YWxsZWdlZEFtb3VudH0gaW4gJ2NvZXJjZScgZGlkbid0IG1hdGNoIHRoZSBzcGVjaWZpZWQgYnJhbmQgJHticmFuZH0uYDtcbi8vXG4vL1xucmV0dXJuIEFtb3VudE1hdGgubWFrZShicmFuZCxhbGxlZ2VkVmFsdWUpO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmdldFZhbHVlOihicmFuZCxhbW91bnQpPT5BbW91bnRNYXRoLmNvZXJjZShicmFuZCxhbW91bnQpLnZhbHVlLFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1ha2VFbXB0eTooYnJhbmQsYXNzZXRLaW5kPS8qICAgICAgICAgICAgICAgICovJ25hdCcpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5hc3NlcnRBc3NldEtpbmQoYXNzZXRLaW5kKTtcbmNvbnN0IHZhbHVlPWhlbHBlcnNbYXNzZXRLaW5kXS5kb01ha2VFbXB0eSgpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG4gICAqL1xubWFrZUVtcHR5RnJvbUFtb3VudDooYW1vdW50KT0+e1xuYXNzZXJ0UmVjb3JkKGFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHticmFuZCx2YWx1ZX09YW1vdW50O1xuY29uc3QgYXNzZXRLaW5kPWFzc2VydFZhbHVlR2V0QXNzZXRLaW5kKHZhbHVlKTtcbi8vXG5yZXR1cm4gQW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcbiB9LFxuLypcblxuXG5cblxuXG4gICAqL1xuaXNFbXB0eTooYW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmFzc2VydFJlY29yZChhbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7YnJhbmQ6YWxsZWdlZEJyYW5kLHZhbHVlfT1hbW91bnQ7XG5hc3NlcnRSZW1vdGFibGUoYWxsZWdlZEJyYW5kLCdicmFuZCcpO1xub3B0aW9uYWxCcmFuZENoZWNrKGFsbGVnZWRCcmFuZCxicmFuZCk7XG5jb25zdCBoPWFzc2VydFZhbHVlR2V0SGVscGVycyh2YWx1ZSk7XG5yZXR1cm4gaC5kb0lzRW1wdHkoaC5kb0NvZXJjZSh2YWx1ZSkpO1xuIH0sXG5pc0dURSxcbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmlzRXF1YWw6KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuY29uc3QgaD1jaGVja0xSQW5kR2V0SGVscGVycyhsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kKTtcbnJldHVybiBoLmRvSXNFcXVhbCguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuYWRkOihsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmNvbnN0IGg9Y2hlY2tMUkFuZEdldEhlbHBlcnMobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZCk7XG5jb25zdCB2YWx1ZT1oLmRvQWRkKC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kOmxlZnRBbW91bnQuYnJhbmQsdmFsdWV9KTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5zdWJ0cmFjdDoobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xuY29uc3QgdmFsdWU9aC5kb1N1YnRyYWN0KC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kOmxlZnRBbW91bnQuYnJhbmQsdmFsdWV9KTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1pbjooeCx5LGJyYW5kPXVuZGVmaW5lZCk9PlxuLy9cbmlzR1RFKHgseSxicmFuZCk/XG55OlxuaXNHVEUoeSx4LGJyYW5kKT9cbng6XG5GYWlsIGAke3h9IGFuZCAke3l9IGFyZSBpbmNvbXBhcmFibGVgLFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1heDooeCx5LGJyYW5kPXVuZGVmaW5lZCk9PlxuLy9cbmlzR1RFKHgseSxicmFuZCk/XG54OlxuaXNHVEUoeSx4KT9cbnk6XG5GYWlsIGAke3h9IGFuZCAke3l9IGFyZSBpbmNvbXBhcmFibGVgfTskaM2PX29uY2UuQW1vdW50TWF0aChBbW91bnRNYXRoKTtcblxuaGFyZGVuKEFtb3VudE1hdGgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGdldEFzc2V0S2luZD0oYW1vdW50KT0+e1xuYXNzZXJ0UmVjb3JkKGFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHt2YWx1ZX09YW1vdW50O1xucmV0dXJuIGFzc2VydFZhbHVlR2V0QXNzZXRLaW5kKHZhbHVlKTtcbiB9OyRozY9fb25jZS5nZXRBc3NldEtpbmQoZ2V0QXNzZXRLaW5kKTtcbmhhcmRlbihnZXRBc3NldEtpbmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQXNzZXRLaW5kIjpbIkFzc2V0S2luZCJdLCJhc3NlcnRBc3NldEtpbmQiOlsiYXNzZXJ0QXNzZXRLaW5kIl0sImFzc2VydFZhbHVlR2V0SGVscGVycyI6WyJhc3NlcnRWYWx1ZUdldEhlbHBlcnMiXSwiQW1vdW50TWF0aCI6WyJBbW91bnRNYXRoIl0sImdldEFzc2V0S2luZCI6WyJnZXRBc3NldEtpbmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAgUbFhdQDAADUAwAALQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxOC4xL3NyYy9hbW91bnRTdG9yZS5qc3siaW1wb3J0cyI6WyIuL2Ftb3VudE1hdGguanMiXSwiZXhwb3J0cyI6WyJtYWtlQW1vdW50U3RvcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgQW1vdW50TWF0aDskaM2PX2ltcG9ydHMoW1tcIi4vYW1vdW50TWF0aC5qc1wiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV1dKTsgICBcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQW1vdW50U3RvcmU9KHN0YXRlLGtleSk9PntcbnJldHVybiBoYXJkZW4oe1xuZ2V0QW1vdW50OigpPT5zdGF0ZVtrZXldLFxuaW5jcmVtZW50OihkZWx0YSk9PntcbnN0YXRlW2tleV09QW1vdW50TWF0aC5hZGQoc3RhdGVba2V5XSxkZWx0YSk7XG4gfSxcbmRlY3JlbWVudDooZGVsdGEpPT57XG5pZihBbW91bnRNYXRoLmlzR1RFKHN0YXRlW2tleV0sZGVsdGEpKXtcbnN0YXRlW2tleV09QW1vdW50TWF0aC5zdWJ0cmFjdChzdGF0ZVtrZXldLGRlbHRhKTtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9fSk7XG5cbiB9OyRozY9fb25jZS5tYWtlQW1vdW50U3RvcmUobWFrZUFtb3VudFN0b3JlKTtcbmhhcmRlbihtYWtlQW1vdW50U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUFtb3VudFN0b3JlIjpbIm1ha2VBbW91bnRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADood0axwUAAMcFAAAtAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE4LjEvc3JjL2Rpc3BsYXlJbmZvLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCIuL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJjb2VyY2VEaXNwbGF5SW5mbyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLG11c3RNYXRjaCxEaXNwbGF5SW5mb1NoYXBlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJEaXNwbGF5SW5mb1NoYXBlXCIsIFskaM2PX2EgPT4gKERpc3BsYXlJbmZvU2hhcGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvZXJjZURpc3BsYXlJbmZvPShhbGxlZ2VkRGlzcGxheUluZm8sYXNzZXRLaW5kKT0+e1xubXVzdE1hdGNoKGFsbGVnZWREaXNwbGF5SW5mbyxEaXNwbGF5SW5mb1NoYXBlLCdkaXNwbGF5SW5mbycpO1xuXG5pZihhbGxlZ2VkRGlzcGxheUluZm8uYXNzZXRLaW5kIT09dW5kZWZpbmVkKXtcbmFsbGVnZWREaXNwbGF5SW5mby5hc3NldEtpbmQ9PT1hc3NldEtpbmR8fFxuRmFpbCBgZGlzcGxheUluZm8uYXNzZXRLaW5kIHdhcyBwcmVzZW50ICgke2FsbGVnZWREaXNwbGF5SW5mby5hc3NldEtpbmR9KSBhbmQgZGlkIG5vdCBtYXRjaCB0aGUgYXNzZXRLaW5kIGFyZ3VtZW50ICgke2Fzc2V0S2luZH0pYDtcbiB9XG5jb25zdCBkaXNwbGF5SW5mbz1oYXJkZW4oey4uLmFsbGVnZWREaXNwbGF5SW5mbyxhc3NldEtpbmR9KTtcblxuaWYoZGlzcGxheUluZm8uZGVjaW1hbFBsYWNlcyE9PXVuZGVmaW5lZCl7XG5OdW1iZXIuaXNTYWZlSW50ZWdlcihkaXNwbGF5SW5mby5kZWNpbWFsUGxhY2VzKXx8XG5GYWlsIGBkZWNpbWFsUGxhY2VzICR7ZGlzcGxheUluZm8uZGVjaW1hbFBsYWNlc30gaXMgbm90IGEgc2FmZSBpbnRlZ2VyYDtcbiB9XG5cbnJldHVybiBkaXNwbGF5SW5mbztcbiB9OyRozY9fb25jZS5jb2VyY2VEaXNwbGF5SW5mbyhjb2VyY2VEaXNwbGF5SW5mbyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb2VyY2VEaXNwbGF5SW5mbyI6WyJjb2VyY2VEaXNwbGF5SW5mbyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAjjjJqPwIAAD8CAAAnAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE4LjEvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vYW1vdW50TWF0aC5qcyIsIi4vaXNzdWVyS2l0LmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi90eXBlcy1pbmRleC5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vYW1vdW50TWF0aC5qcyIsIi4vaXNzdWVyS2l0LmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi90eXBlcy1pbmRleC5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtdXSxbXCIuL2lzc3VlcktpdC5qc1wiLCBbXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtdXSxbXCIuL3R5cGVzLWluZGV4LmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGiU08lqFgAAahYAACsAAABAYWdvcmljL2VydHAtdjAuMTYuMy11MTguMS9zcmMvaXNzdWVyS2l0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy96b25lL2R1cmFibGUuanMiLCIuL2Ftb3VudE1hdGguanMiLCIuL2Rpc3BsYXlJbmZvLmpzIiwiLi9wYXltZW50TGVkZ2VyLmpzIl0sImV4cG9ydHMiOlsiaGFzSXNzdWVyIiwibWFrZUR1cmFibGVJc3N1ZXJLaXQiLCJtYWtlSXNzdWVyS2l0IiwicHJlcGFyZUlzc3VlcktpdCIsInVwZ3JhZGVJc3N1ZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEZhaWwsYXNzZXJ0UGF0dGVybixtYWtlU2NhbGFyQmlnTWFwU3RvcmUsbWFrZUR1cmFibGVab25lLEFzc2V0S2luZCxhc3NlcnRBc3NldEtpbmQsY29lcmNlRGlzcGxheUluZm8scHJlcGFyZVBheW1lbnRMZWRnZXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzXCIsIFtbXCJtYWtlRHVyYWJsZVpvbmVcIiwgWyRozY9fYSA9PiAobWFrZUR1cmFibGVab25lID0gJGjNj19hKV1dXV0sW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBc3NldEtpbmRcIiwgWyRozY9fYSA9PiAoQXNzZXRLaW5kID0gJGjNj19hKV1dLFtcImFzc2VydEFzc2V0S2luZFwiLCBbJGjNj19hID0+IChhc3NlcnRBc3NldEtpbmQgPSAkaM2PX2EpXV1dXSxbXCIuL2Rpc3BsYXlJbmZvLmpzXCIsIFtbXCJjb2VyY2VEaXNwbGF5SW5mb1wiLCBbJGjNj19hID0+IChjb2VyY2VEaXNwbGF5SW5mbyA9ICRozY9fYSldXV1dLFtcIi4vcGF5bWVudExlZGdlci5qc1wiLCBbW1wicHJlcGFyZVBheW1lbnRMZWRnZXJcIiwgWyRozY9fYSA9PiAocHJlcGFyZVBheW1lbnRMZWRnZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzZXR1cElzc3VlcktpdD0oXG57bmFtZSxhc3NldEtpbmQsZGlzcGxheUluZm8sZWxlbWVudFNoYXBlfSxcbmlzc3VlclpvbmUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkKT0+XG57XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuYXNzZXJ0QXNzZXRLaW5kKGFzc2V0S2luZCk7XG5cbi8vXG5jb25zdCBjbGVhbkRpc3BsYXlJbmZvPWNvZXJjZURpc3BsYXlJbmZvKGRpc3BsYXlJbmZvLGFzc2V0S2luZCk7XG5pZihvcHRTaHV0ZG93bldpdGhGYWlsdXJlIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2Yob3B0U2h1dGRvd25XaXRoRmFpbHVyZSwnZnVuY3Rpb24nKTtcbiB9XG5cbmlmKGVsZW1lbnRTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGVsZW1lbnRTaGFwZSk7XG4gfVxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0e2lzc3VlcixtaW50LGJyYW5kLG1pbnRSZWNvdmVyeVB1cnNlfT1wcmVwYXJlUGF5bWVudExlZGdlcihcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuY2xlYW5EaXNwbGF5SW5mbyxcbmVsZW1lbnRTaGFwZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5icmFuZCxcbmlzc3Vlcixcbm1pbnQsXG5taW50UmVjb3ZlcnlQdXJzZSxcbmRpc3BsYXlJbmZvOmNsZWFuRGlzcGxheUluZm99KTtcblxuIH07XG5oYXJkZW4oc2V0dXBJc3N1ZXJLaXQpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBJTlNUQU5DRV9LRVk9J2lzc3Vlcic7XG4vKlxuXG5cblxuICovXG5jb25zdCBSRUNPVkVSWV9TRVRTX1NUQVRFPSdyZWNvdmVyeVNldHNTdGF0ZSc7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1cGdyYWRlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbnJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWQpPT5cbntcbmNvbnN0IGlzc3VlclJlY29yZD1pc3N1ZXJCYWdnYWdlLmdldChJTlNUQU5DRV9LRVkpO1xuY29uc3QgaXNzdWVyWm9uZT1tYWtlRHVyYWJsZVpvbmUoaXNzdWVyQmFnZ2FnZSk7XG5jb25zdCBvbGRSZWNvdmVyeVNldHNTdGF0ZT1pc3N1ZXJCYWdnYWdlLmhhcyhSRUNPVkVSWV9TRVRTX1NUQVRFKT9cbmlzc3VlckJhZ2dhZ2UuZ2V0KFJFQ09WRVJZX1NFVFNfU1RBVEUpOlxuJ2hhc1JlY292ZXJ5U2V0cyc7XG5pZihcbm9sZFJlY292ZXJ5U2V0c1N0YXRlPT09J25vUmVjb3ZlcnlTZXRzJyYmXG5yZWNvdmVyeVNldHNPcHRpb249PT0naGFzUmVjb3ZlcnlTZXRzJylcbntcbkZhaWwgYENhbm5vdCAoeWV0PykgdXBncmFkZSBmcm9tICdub1JlY292ZXJ5U2V0cycgdG8gJ2hhc1JlY292ZXJ5U2V0cydgO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHJlY292ZXJ5U2V0c1N0YXRlPXJlY292ZXJ5U2V0c09wdGlvbnx8b2xkUmVjb3ZlcnlTZXRzU3RhdGU7XG5yZXR1cm4gc2V0dXBJc3N1ZXJLaXQoXG5pc3N1ZXJSZWNvcmQsXG5pc3N1ZXJab25lLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKTtcblxuIH07JGjNj19vbmNlLnVwZ3JhZGVJc3N1ZXJLaXQodXBncmFkZUlzc3VlcktpdCk7XG5oYXJkZW4odXBncmFkZUlzc3VlcktpdCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBoYXNJc3N1ZXI9KGJhZ2dhZ2UpPT5iYWdnYWdlLmhhcyhJTlNUQU5DRV9LRVkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaGFzSXNzdWVyKGhhc0lzc3Vlcik7XG5jb25zdCAgICAgICAgbWFrZUR1cmFibGVJc3N1ZXJLaXQ9KFxuaXNzdWVyQmFnZ2FnZSxcbm5hbWUsXG4vL1xuYXNzZXRLaW5kPUFzc2V0S2luZC5OQVQsXG5kaXNwbGF5SW5mbz1oYXJkZW4oe30pLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQsXG57ZWxlbWVudFNoYXBlPXVuZGVmaW5lZCxyZWNvdmVyeVNldHNPcHRpb249dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QgaXNzdWVyRGF0YT1oYXJkZW4oe1xubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxuZWxlbWVudFNoYXBlfSk7XG5cbmlzc3VlckJhZ2dhZ2UuaW5pdChJTlNUQU5DRV9LRVksaXNzdWVyRGF0YSk7XG5jb25zdCBpc3N1ZXJab25lPW1ha2VEdXJhYmxlWm9uZShpc3N1ZXJCYWdnYWdlKTtcbmNvbnN0IHJlY292ZXJ5U2V0c1N0YXRlPXJlY292ZXJ5U2V0c09wdGlvbnx8J2hhc1JlY292ZXJ5U2V0cyc7XG5pc3N1ZXJCYWdnYWdlLmluaXQoUkVDT1ZFUllfU0VUU19TVEFURSxyZWNvdmVyeVNldHNTdGF0ZSk7XG5yZXR1cm4gc2V0dXBJc3N1ZXJLaXQoXG5pc3N1ZXJEYXRhLFxuaXNzdWVyWm9uZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSk7XG5cbiB9OyRozY9fb25jZS5tYWtlRHVyYWJsZUlzc3VlcktpdChtYWtlRHVyYWJsZUlzc3VlcktpdCk7XG5oYXJkZW4obWFrZUR1cmFibGVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5uYW1lLFxuLy9cbmFzc2V0S2luZD1Bc3NldEtpbmQuTkFULFxuZGlzcGxheUluZm89aGFyZGVuKHt9KSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkLFxub3B0aW9ucz17fSk9Plxue1xuaWYoaGFzSXNzdWVyKGlzc3VlckJhZ2dhZ2UpKXtcbmNvbnN0e2VsZW1lbnRTaGFwZTpfPXVuZGVmaW5lZCxyZWNvdmVyeVNldHNPcHRpb249dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG5jb25zdCBpc3N1ZXJLaXQ9dXBncmFkZUlzc3VlcktpdChcbmlzc3VlckJhZ2dhZ2UsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlLFxucmVjb3ZlcnlTZXRzT3B0aW9uKTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbnJldHVybiBpc3N1ZXJLaXQ7XG4gfWVsc2V7XG5jb25zdCBpc3N1ZXJLaXQ9bWFrZUR1cmFibGVJc3N1ZXJLaXQoXG5pc3N1ZXJCYWdnYWdlLFxubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSxcbm9wdGlvbnMpO1xuXG5yZXR1cm4gaXNzdWVyS2l0O1xuIH1cbiB9OyRozY9fb25jZS5wcmVwYXJlSXNzdWVyS2l0KHByZXBhcmVJc3N1ZXJLaXQpO1xuaGFyZGVuKHByZXBhcmVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VJc3N1ZXJLaXQ9KFxubmFtZSxcbi8vXG5hc3NldEtpbmQ9QXNzZXRLaW5kLk5BVCxcbmRpc3BsYXlJbmZvPWhhcmRlbih7fSksXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbntlbGVtZW50U2hhcGU9dW5kZWZpbmVkLHJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWR9PXt9KT0+XG5cbm1ha2VEdXJhYmxlSXNzdWVyS2l0KFxubWFrZVNjYWxhckJpZ01hcFN0b3JlKCdkcm9wcGVkIGlzc3VlciBraXQnLHtkdXJhYmxlOnRydWV9KSxcbm5hbWUsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUsXG57ZWxlbWVudFNoYXBlLHJlY292ZXJ5U2V0c09wdGlvbn0pOyRozY9fb25jZS5tYWtlSXNzdWVyS2l0KG1ha2VJc3N1ZXJLaXQpO1xuXG5oYXJkZW4obWFrZUlzc3VlcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ1cGdyYWRlSXNzdWVyS2l0IjpbInVwZ3JhZGVJc3N1ZXJLaXQiXSwiaGFzSXNzdWVyIjpbImhhc0lzc3VlciJdLCJtYWtlRHVyYWJsZUlzc3VlcktpdCI6WyJtYWtlRHVyYWJsZUlzc3VlcktpdCJdLCJwcmVwYXJlSXNzdWVyS2l0IjpbInByZXBhcmVJc3N1ZXJLaXQiXSwibWFrZUlzc3VlcktpdCI6WyJtYWtlSXNzdWVyS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOSrY+7hBQAA4QUAAEAAAABAYWdvcmljL2VydHAtdjAuMTYuMy11MTguMS9zcmMvbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJjb3B5QmFnTWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQga2V5RVEsbWFrZUNvcHlCYWcsbXVzdE1hdGNoLE0sZ2V0Q29weUJhZ0VudHJpZXMsYmFnSXNTdXBlcmJhZyxiYWdVbmlvbixiYWdEaXNqb2ludFN1YnRyYWN0OyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlCYWdcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlCYWcgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiZ2V0Q29weUJhZ0VudHJpZXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weUJhZ0VudHJpZXMgPSAkaM2PX2EpXV0sW1wiYmFnSXNTdXBlcmJhZ1wiLCBbJGjNj19hID0+IChiYWdJc1N1cGVyYmFnID0gJGjNj19hKV1dLFtcImJhZ1VuaW9uXCIsIFskaM2PX2EgPT4gKGJhZ1VuaW9uID0gJGjNj19hKV1dLFtcImJhZ0Rpc2pvaW50U3VidHJhY3RcIiwgWyRozY9fYSA9PiAoYmFnRGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW1wdHk9bWFrZUNvcHlCYWcoW10pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb3B5QmFnTWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihiYWcpPT57XG5tdXN0TWF0Y2goYmFnLE0uYmFnKCksJ2JhZyBvZiBhbW91bnQnKTtcbnJldHVybiBiYWc7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eTooYmFnKT0+Z2V0Q29weUJhZ0VudHJpZXMoYmFnKS5sZW5ndGg9PT0wLFxuZG9Jc0dURTpiYWdJc1N1cGVyYmFnLFxuZG9Jc0VxdWFsOmtleUVRLFxuZG9BZGQ6YmFnVW5pb24sXG5kb1N1YnRyYWN0OmJhZ0Rpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2UuY29weUJhZ01hdGhIZWxwZXJzKGNvcHlCYWdNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb3B5QmFnTWF0aEhlbHBlcnMiOlsiY29weUJhZ01hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEGFj3ifBQAAnwUAAEAAAABAYWdvcmljL2VydHAtdjAuMTYuMy11MTguMS9zcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJjb3B5U2V0TWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQga2V5RVEsbWFrZUNvcHlTZXQsbXVzdE1hdGNoLE0sZ2V0Q29weVNldEtleXMsc2V0SXNTdXBlcnNldCxzZXREaXNqb2ludFVuaW9uLHNldERpc2pvaW50U3VidHJhY3Q7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJrZXlFUVwiLCBbJGjNj19hID0+IChrZXlFUSA9ICRozY9fYSldXSxbXCJtYWtlQ29weVNldFwiLCBbJGjNj19hID0+IChtYWtlQ29weVNldCA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjNj19hID0+IChnZXRDb3B5U2V0S2V5cyA9ICRozY9fYSldXSxbXCJzZXRJc1N1cGVyc2V0XCIsIFskaM2PX2EgPT4gKHNldElzU3VwZXJzZXQgPSAkaM2PX2EpXV0sW1wic2V0RGlzam9pbnRVbmlvblwiLCBbJGjNj19hID0+IChzZXREaXNqb2ludFVuaW9uID0gJGjNj19hKV1dLFtcInNldERpc2pvaW50U3VidHJhY3RcIiwgWyRozY9fYSA9PiAoc2V0RGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbXB0eT1tYWtlQ29weVNldChbXSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgY29weVNldE1hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZTooc2V0KT0+e1xubXVzdE1hdGNoKHNldCxNLnNldCgpLCdzZXQgb2YgYW1vdW50Jyk7XG5yZXR1cm4gc2V0O1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KHNldCk9PmdldENvcHlTZXRLZXlzKHNldCkubGVuZ3RoPT09MCxcbmRvSXNHVEU6c2V0SXNTdXBlcnNldCxcbmRvSXNFcXVhbDprZXlFUSxcbmRvQWRkOnNldERpc2pvaW50VW5pb24sXG5kb1N1YnRyYWN0OnNldERpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2UuY29weVNldE1hdGhIZWxwZXJzKGNvcHlTZXRNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb3B5U2V0TWF0aEhlbHBlcnMiOlsiY29weVNldE1hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJUrcMlnBAAAZwQAADwAAABAYWdvcmljL2VydHAtdjAuMTYuMy11MTguMS9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbmF0Il0sImV4cG9ydHMiOlsibmF0TWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxOYXQsaXNOYXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXSxbXCJpc05hdFwiLCBbJGjNj19hID0+IChpc05hdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBlbXB0eT0wbjtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG5hdE1hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZToobmF0KT0+e1xuLy9cbmFzc2VydC50eXBlb2YobmF0LCdiaWdpbnQnKTtcbmlzTmF0KG5hdCl8fEZhaWwgYHZhbHVlICR7bmF0fSBtdXN0IGJlIGEgbmF0dXJhbCBudW1iZXJgO1xucmV0dXJuIE5hdChuYXQpO1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KG5hdCk9Pm5hdD09PWVtcHR5LFxuZG9Jc0dURToobGVmdCxyaWdodCk9PmxlZnQ+PXJpZ2h0LFxuZG9Jc0VxdWFsOihsZWZ0LHJpZ2h0KT0+bGVmdD09PXJpZ2h0LFxuLy9cbmRvQWRkOihsZWZ0LHJpZ2h0KT0+bGVmdCtyaWdodCxcbmRvU3VidHJhY3Q6KGxlZnQscmlnaHQpPT5OYXQobGVmdC1yaWdodCl9KTskaM2PX29uY2UubmF0TWF0aEhlbHBlcnMobmF0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibmF0TWF0aEhlbHBlcnMiOlsibmF0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAARwq540gGAABIBgAAPAAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxOC4xL3NyYy9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbInNldE1hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhc3NTdHlsZU9mLGFzc2VydEtleSxlbGVtZW50c0lzU3VwZXJzZXQsZWxlbWVudHNEaXNqb2ludFVuaW9uLGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCxjb2VyY2VUb0VsZW1lbnRzLGVsZW1lbnRzQ29tcGFyZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJlbGVtZW50c0lzU3VwZXJzZXRcIiwgWyRozY9fYSA9PiAoZWxlbWVudHNJc1N1cGVyc2V0ID0gJGjNj19hKV1dLFtcImVsZW1lbnRzRGlzam9pbnRVbmlvblwiLCBbJGjNj19hID0+IChlbGVtZW50c0Rpc2pvaW50VW5pb24gPSAkaM2PX2EpXV0sW1wiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0XCIsIFskaM2PX2EgPT4gKGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXSxbXCJjb2VyY2VUb0VsZW1lbnRzXCIsIFskaM2PX2EgPT4gKGNvZXJjZVRvRWxlbWVudHMgPSAkaM2PX2EpXV0sW1wiZWxlbWVudHNDb21wYXJlXCIsIFskaM2PX2EgPT4gKGVsZW1lbnRzQ29tcGFyZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PWhhcmRlbihbXSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgc2V0TWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihsaXN0KT0+e1xubGlzdD1jb2VyY2VUb0VsZW1lbnRzKGxpc3QpO1xuLy9cbi8vXG4vL1xuLy9cbmFzc2VydEtleShsaXN0KTtcbnJldHVybiBsaXN0O1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KGxpc3QpPT5wYXNzU3R5bGVPZihsaXN0KT09PSdjb3B5QXJyYXknJiZsaXN0Lmxlbmd0aD09PTAsXG5kb0lzR1RFOmVsZW1lbnRzSXNTdXBlcnNldCxcbmRvSXNFcXVhbDooeCx5KT0+ZWxlbWVudHNDb21wYXJlKHgseSk9PT0wLFxuZG9BZGQ6ZWxlbWVudHNEaXNqb2ludFVuaW9uLFxuZG9TdWJ0cmFjdDplbGVtZW50c0Rpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2Uuc2V0TWF0aEhlbHBlcnMoc2V0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2V0TWF0aEhlbHBlcnMiOlsic2V0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAANj9K1X8DAAB/AwAAKQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxOC4xL3NyYy9wYXltZW50LmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUGF5bWVudEtpbmQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaW5pdEVtcHR5OyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiaW5pdEVtcHR5XCIsIFskaM2PX2EgPT4gKGluaXRFbXB0eSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLy9cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUGF5bWVudEtpbmQ9KGlzc3VlclpvbmUsbmFtZSxicmFuZCxQYXltZW50SSk9PntcbmNvbnN0IG1ha2VQYXltZW50PWlzc3VlclpvbmUuZXhvQ2xhc3MoXG4gYCR7bmFtZX0gcGF5bWVudGAsXG5QYXltZW50SSxcbmluaXRFbXB0eSxcbntcbmdldEFsbGVnZWRCcmFuZCgpe1xucmV0dXJuIGJyYW5kO1xuIH19KTtcblxuXG5yZXR1cm4gbWFrZVBheW1lbnQ7XG4gfTskaM2PX29uY2UucHJlcGFyZVBheW1lbnRLaW5kKHByZXBhcmVQYXltZW50S2luZCk7XG5oYXJkZW4ocHJlcGFyZVBheW1lbnRLaW5kKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVQYXltZW50S2luZCI6WyJwcmVwYXJlUGF5bWVudEtpbmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAASy2n++sfAADrHwAALwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxOC4xL3NyYy9wYXltZW50TGVkZ2VyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Byb21pc2Uta2l0IiwiQGFnb3JpYy9zdG9yZSIsIi4vYW1vdW50TWF0aC5qcyIsIi4vcGF5bWVudC5qcyIsIi4vcHVyc2UuanMiLCIuL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUGF5bWVudExlZGdlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRmFpbCxhbm5vdGF0ZUVycm9yLGlzUHJvbWlzZSxtdXN0TWF0Y2gsTSxrZXlFUSxBbW91bnRNYXRoLHByZXBhcmVQYXltZW50S2luZCxwcmVwYXJlUHVyc2VLaW5kLEJyYW5kSSxtYWtlSXNzdWVySW50ZXJmYWNlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJrZXlFUVwiLCBbJGjNj19hID0+IChrZXlFUSA9ICRozY9fYSldXV1dLFtcIi4vYW1vdW50TWF0aC5qc1wiLCBbW1wiQW1vdW50TWF0aFwiLCBbJGjNj19hID0+IChBbW91bnRNYXRoID0gJGjNj19hKV1dXV0sW1wiLi9wYXltZW50LmpzXCIsIFtbXCJwcmVwYXJlUGF5bWVudEtpbmRcIiwgWyRozY9fYSA9PiAocHJlcGFyZVBheW1lbnRLaW5kID0gJGjNj19hKV1dXV0sW1wiLi9wdXJzZS5qc1wiLCBbW1wicHJlcGFyZVB1cnNlS2luZFwiLCBbJGjNj19hID0+IChwcmVwYXJlUHVyc2VLaW5kID0gJGjNj19hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJCcmFuZElcIiwgWyRozY9fYSA9PiAoQnJhbmRJID0gJGjNj19hKV1dLFtcIm1ha2VJc3N1ZXJJbnRlcmZhY2VzXCIsIFskaM2PX2EgPT4gKG1ha2VJc3N1ZXJJbnRlcmZhY2VzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGFtb3VudFNoYXBlRnJvbUVsZW1lbnRTaGFwZT0oYnJhbmQsYXNzZXRLaW5kLGVsZW1lbnRTaGFwZSk9PntcbmxldCB2YWx1ZVNoYXBlO1xuc3dpdGNoKGFzc2V0S2luZCl7XG5jYXNlJ25hdCc6e1xudmFsdWVTaGFwZT1NLm5hdCgpO1xuZWxlbWVudFNoYXBlPT09dW5kZWZpbmVkfHxcbkZhaWwgYEZ1bmdpYmxlIGFzc2V0cyBjYW5ub3QgaGF2ZSBhbiBlbGVtZW50U2hhcGU6ICR7cShlbGVtZW50U2hhcGUpfWA7XG5icmVhaztcbiB9XG5jYXNlJ3NldCc6e1xuaWYoZWxlbWVudFNoYXBlPT09dW5kZWZpbmVkKXtcbnZhbHVlU2hhcGU9TS5hcnJheU9mKE0ua2V5KCkpO1xuIH1lbHNle1xudmFsdWVTaGFwZT1NLmFycmF5T2YoTS5hbmQoTS5rZXkoKSxlbGVtZW50U2hhcGUpKTtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ2NvcHlTZXQnOntcbmlmKGVsZW1lbnRTaGFwZT09PXVuZGVmaW5lZCl7XG52YWx1ZVNoYXBlPU0uc2V0KCk7XG4gfWVsc2V7XG52YWx1ZVNoYXBlPU0uc2V0T2YoZWxlbWVudFNoYXBlKTtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ2NvcHlCYWcnOntcbmlmKGVsZW1lbnRTaGFwZT09PXVuZGVmaW5lZCl7XG52YWx1ZVNoYXBlPU0uYmFnKCk7XG4gfWVsc2V7XG52YWx1ZVNoYXBlPU0uYmFnT2YoZWxlbWVudFNoYXBlKTtcbiB9XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbkZhaWwgYHVuZXhwZWN0ZWQgYXNzZXQga2luZCAke3EoYXNzZXRLaW5kKX1gO1xuIH19XG5cblxuY29uc3QgYW1vdW50U2hhcGU9aGFyZGVuKHtcbmJyYW5kLC8vXG52YWx1ZTp2YWx1ZVNoYXBlfSk7XG5cbnJldHVybiBhbW91bnRTaGFwZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZVBheW1lbnRMZWRnZXI9KFxuaXNzdWVyWm9uZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbmVsZW1lbnRTaGFwZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQpPT5cbntcbi8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgYnJhbmQ9aXNzdWVyWm9uZS5leG8oIGAke25hbWV9IGJyYW5kYCxCcmFuZEkse1xuaXNNeUlzc3VlcihhbGxlZ2VkSXNzdWVyKXtcbi8vXG5yZXR1cm4gYWxsZWdlZElzc3Vlcj09PWlzc3VlcjtcbiB9LFxuZ2V0QWxsZWdlZE5hbWUoKXtcbnJldHVybiBuYW1lO1xuIH0sXG4vL1xuZ2V0RGlzcGxheUluZm8oKXtcbnJldHVybiBkaXNwbGF5SW5mbztcbiB9LFxuZ2V0QW1vdW50U2hhcGUoKXtcbnJldHVybiBhbW91bnRTaGFwZTtcbiB9fSk7XG5cblxuY29uc3QgYW1vdW50U2hhcGU9YW1vdW50U2hhcGVGcm9tRWxlbWVudFNoYXBlKFxuYnJhbmQsXG5hc3NldEtpbmQsXG5lbGVtZW50U2hhcGUpO1xuXG5cbmNvbnN0e0lzc3VlckksTWludEksUGF5bWVudEksUHVyc2VJS2l0fT1tYWtlSXNzdWVySW50ZXJmYWNlcyhcbmJyYW5kLFxuYXNzZXRLaW5kLFxuYW1vdW50U2hhcGUpO1xuXG5cbmNvbnN0IG1ha2VQYXltZW50PXByZXBhcmVQYXltZW50S2luZChpc3N1ZXJab25lLG5hbWUsYnJhbmQsUGF5bWVudEkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzaHV0ZG93bkxlZGdlcldpdGhGYWlsdXJlPShyZWFzb24pPT57XG4vL1xuLy9cbmlmKG9wdFNodXRkb3duV2l0aEZhaWx1cmUhPT11bmRlZmluZWQpe1xudHJ5e1xub3B0U2h1dGRvd25XaXRoRmFpbHVyZShyZWFzb24pO1xuIH1jYXRjaChlcnJJblNodXRkb3duKXtcbmFubm90YXRlRXJyb3IoZXJySW5TaHV0ZG93bixYIGBDYXVzZWQgYnk6ICR7cmVhc29ufWApO1xudGhyb3cgZXJySW5TaHV0ZG93bjtcbiB9XG4gfVxudGhyb3cgcmVhc29uO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwYXltZW50TGVkZ2VyPWlzc3VlclpvbmUud2Vha01hcFN0b3JlKCdwYXltZW50TGVkZ2VyJyx7XG52YWx1ZVNoYXBlOmFtb3VudFNoYXBlfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcGF5bWVudFJlY292ZXJ5U2V0cz1pc3N1ZXJab25lLndlYWtNYXBTdG9yZSgncGF5bWVudFJlY292ZXJ5U2V0cycpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGluaXRQYXltZW50PShwYXltZW50LGFtb3VudCxvcHRSZWNvdmVyeVNldD11bmRlZmluZWQpPT57XG5pZihyZWNvdmVyeVNldHNTdGF0ZT09PSdub1JlY292ZXJ5U2V0cycpe1xub3B0UmVjb3ZlcnlTZXQ9PT11bmRlZmluZWR8fFxuRmFpbCBgd2hlbiByZWNvdmVyU2V0c1N0YXRlID09PSAnbm9SZWNvdmVyeVNldHMnLCBvcHRSZWNvdmVyeVNldCBtdXN0IGJlIGVtcHR5YDtcbiB9XG5pZihvcHRSZWNvdmVyeVNldCE9PXVuZGVmaW5lZCYmIUFtb3VudE1hdGguaXNFbXB0eShhbW91bnQpKXtcbm9wdFJlY292ZXJ5U2V0LmFkZChwYXltZW50KTtcbnBheW1lbnRSZWNvdmVyeVNldHMuaW5pdChwYXltZW50LG9wdFJlY292ZXJ5U2V0KTtcbiB9XG5wYXltZW50TGVkZ2VyLmluaXQocGF5bWVudCxhbW91bnQpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWxldGVQYXltZW50PShwYXltZW50KT0+e1xucGF5bWVudExlZGdlci5kZWxldGUocGF5bWVudCk7XG5pZihwYXltZW50UmVjb3ZlcnlTZXRzLmhhcyhwYXltZW50KSl7XG5jb25zdCByZWNvdmVyeVNldD1wYXltZW50UmVjb3ZlcnlTZXRzLmdldChwYXltZW50KTtcbnBheW1lbnRSZWNvdmVyeVNldHMuZGVsZXRlKHBheW1lbnQpO1xucmVjb3ZlcnlTZXQuZGVsZXRlKHBheW1lbnQpO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvZXJjZT0oYWxsZWdlZEFtb3VudCk9PkFtb3VudE1hdGguY29lcmNlKGJyYW5kLGFsbGVnZWRBbW91bnQpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGFzc2VydEFtb3VudENvbnNpc3RlbnQ9KHBheW1lbnRCYWxhbmNlLG9wdEFtb3VudFNoYXBlKT0+e1xuaWYob3B0QW1vdW50U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKHBheW1lbnRCYWxhbmNlLG9wdEFtb3VudFNoYXBlLCdhbW91bnQnKTtcbiB9XG4gfTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgYXNzZXJ0TGl2ZVBheW1lbnQ9KHBheW1lbnQpPT57XG5wYXltZW50TGVkZ2VyLmhhcyhwYXltZW50KXx8XG5GYWlsIGAke3BheW1lbnR9IHdhcyBub3QgYSBsaXZlIHBheW1lbnQgZm9yIGJyYW5kICR7cShcbmJyYW5kKVxuIH0uIEl0IGNvdWxkIGJlIGEgdXNlZC11cCBwYXltZW50LCBhIHBheW1lbnQgZm9yIGFub3RoZXIgYnJhbmQsIG9yIGl0IG1pZ2h0IG5vdCBiZSBhIHBheW1lbnQgYXQgYWxsLmA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZXBvc2l0SW50ZXJuYWw9KFxuYmFsYW5jZVN0b3JlLFxuc3JjUGF5bWVudCxcbm9wdEFtb3VudFNoYXBlPXVuZGVmaW5lZCk9Plxue1xuIWlzUHJvbWlzZShzcmNQYXltZW50KXx8XG5hc3NlcnQuZmFpbChcbiBgZGVwb3NpdCBkb2VzIG5vdCBhY2NlcHQgcHJvbWlzZXMgYXMgZmlyc3QgYXJndW1lbnQuIEluc3RlYWQgb2YgcGFzc2luZyB0aGUgcHJvbWlzZSAoZGVwb3NpdChwYXltZW50UHJvbWlzZSkpLCBjb25zaWRlciB1bndyYXBwaW5nIHRoZSBwcm9taXNlIGZpcnN0OiBFLndoZW4ocGF5bWVudFByb21pc2UsIChhY3R1YWxQYXltZW50ID0+IGRlcG9zaXQoYWN0dWFsUGF5bWVudCkpYCxcblR5cGVFcnJvcik7XG5cbmFzc2VydExpdmVQYXltZW50KHNyY1BheW1lbnQpO1xuY29uc3Qgc3JjUGF5bWVudEJhbGFuY2U9cGF5bWVudExlZGdlci5nZXQoc3JjUGF5bWVudCk7XG5hc3NlcnRBbW91bnRDb25zaXN0ZW50KHNyY1BheW1lbnRCYWxhbmNlLG9wdEFtb3VudFNoYXBlKTtcbnRyeXtcbi8vXG4vL1xuLy9cbmRlbGV0ZVBheW1lbnQoc3JjUGF5bWVudCk7XG5iYWxhbmNlU3RvcmUuaW5jcmVtZW50KHNyY1BheW1lbnRCYWxhbmNlKTtcbiB9Y2F0Y2goZXJyKXtcbnNodXRkb3duTGVkZ2VyV2l0aEZhaWx1cmUoZXJyKTtcbnRocm93IGVycjtcbiB9XG5yZXR1cm4gc3JjUGF5bWVudEJhbGFuY2U7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCB3aXRoZHJhd0ludGVybmFsPShiYWxhbmNlU3RvcmUsYW1vdW50LHJlY292ZXJ5U2V0PXVuZGVmaW5lZCk9PntcbmFtb3VudD1jb2VyY2UoYW1vdW50KTtcbmNvbnN0IHBheW1lbnQ9bWFrZVBheW1lbnQoKTtcbi8vXG4vL1xuYmFsYW5jZVN0b3JlLmRlY3JlbWVudChhbW91bnQpfHxcbkZhaWwgYFdpdGhkcmF3YWwgb2YgJHthbW91bnR9IGZhaWxlZCBiZWNhdXNlIHRoZSBwdXJzZSBvbmx5IGNvbnRhaW5lZCAke2JhbGFuY2VTdG9yZS5nZXRBbW91bnQoKX1gO1xudHJ5e1xuaW5pdFBheW1lbnQocGF5bWVudCxhbW91bnQscmVjb3ZlcnlTZXQpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbnJldHVybiBwYXltZW50O1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgbWFrZUVtcHR5UHVyc2U9cHJlcGFyZVB1cnNlS2luZChcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuYnJhbmQsXG5QdXJzZUlLaXQsXG5oYXJkZW4oe1xuZGVwb3NpdEludGVybmFsLFxud2l0aGRyYXdJbnRlcm5hbH0pLFxuXG5yZWNvdmVyeVNldHNTdGF0ZSxcbnBheW1lbnRSZWNvdmVyeVNldHMpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGlzc3Vlcj1pc3N1ZXJab25lLmV4byggYCR7bmFtZX0gaXNzdWVyYCxJc3N1ZXJJLHtcbmdldEJyYW5kKCl7XG5yZXR1cm4gYnJhbmQ7XG4gfSxcbmdldEFsbGVnZWROYW1lKCl7XG5yZXR1cm4gbmFtZTtcbiB9LFxuZ2V0QXNzZXRLaW5kKCl7XG5yZXR1cm4gYXNzZXRLaW5kO1xuIH0sXG5nZXREaXNwbGF5SW5mbygpe1xucmV0dXJuIGRpc3BsYXlJbmZvO1xuIH0sXG5tYWtlRW1wdHlQdXJzZSgpe1xucmV0dXJuIG1ha2VFbXB0eVB1cnNlKCk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuaXNMaXZlKHBheW1lbnQpe1xuLy9cbnJldHVybiBwYXltZW50TGVkZ2VyLmhhcyhwYXltZW50KTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRBbW91bnRPZihwYXltZW50KXtcbi8vXG5hc3NlcnRMaXZlUGF5bWVudChwYXltZW50KTtcbnJldHVybiBwYXltZW50TGVkZ2VyLmdldChwYXltZW50KTtcbiB9LFxuLypcblxuXG4gICAgICovXG5idXJuKHBheW1lbnQsb3B0QW1vdW50U2hhcGU9dW5kZWZpbmVkKXtcbi8vXG5hc3NlcnRMaXZlUGF5bWVudChwYXltZW50KTtcbmNvbnN0IHBheW1lbnRCYWxhbmNlPXBheW1lbnRMZWRnZXIuZ2V0KHBheW1lbnQpO1xuYXNzZXJ0QW1vdW50Q29uc2lzdGVudChwYXltZW50QmFsYW5jZSxvcHRBbW91bnRTaGFwZSk7XG50cnl7XG4vL1xuZGVsZXRlUGF5bWVudChwYXltZW50KTtcbiB9Y2F0Y2goZXJyKXtcbnNodXRkb3duTGVkZ2VyV2l0aEZhaWx1cmUoZXJyKTtcbnRocm93IGVycjtcbiB9XG5yZXR1cm4gcGF5bWVudEJhbGFuY2U7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1pbnRSZWNvdmVyeVB1cnNlPS8qICAgICAgICAgICAgICAgICAgICovXG5pc3N1ZXJab25lLm1ha2VPbmNlKCdtaW50UmVjb3ZlcnlQdXJzZScsKCk9Pm1ha2VFbXB0eVB1cnNlKCkpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1pbnQ9aXNzdWVyWm9uZS5leG8oIGAke25hbWV9IG1pbnRgLE1pbnRJLHtcbmdldElzc3Vlcigpe1xucmV0dXJuIGlzc3VlcjtcbiB9LFxubWludFBheW1lbnQobmV3QW1vdW50KXtcbm5ld0Ftb3VudD1jb2VyY2UobmV3QW1vdW50KTtcbm11c3RNYXRjaChuZXdBbW91bnQsYW1vdW50U2hhcGUsJ21pbnRlZCBhbW91bnQnKTtcbi8vXG4vL1xuY29uc3QgcmF3UGF5bWVudD1tYWtlUGF5bWVudCgpO1xuaW5pdFBheW1lbnQocmF3UGF5bWVudCxuZXdBbW91bnQsdW5kZWZpbmVkKTtcblxuY29uc3QgbWludFJlY292ZXJ5UHVyc2VCZWZvcmU9bWludFJlY292ZXJ5UHVyc2UuZ2V0Q3VycmVudEFtb3VudCgpO1xubWludFJlY292ZXJ5UHVyc2UuZGVwb3NpdChyYXdQYXltZW50LG5ld0Ftb3VudCk7XG5jb25zdCBwYXltZW50PW1pbnRSZWNvdmVyeVB1cnNlLndpdGhkcmF3KG5ld0Ftb3VudCk7XG5jb25zdCBtaW50UmVjb3ZlcnlQdXJzZUFmdGVyPW1pbnRSZWNvdmVyeVB1cnNlLmdldEN1cnJlbnRBbW91bnQoKTtcbmFzc2VydChrZXlFUShtaW50UmVjb3ZlcnlQdXJzZUJlZm9yZSxtaW50UmVjb3ZlcnlQdXJzZUFmdGVyKSk7XG5yZXR1cm4gcGF5bWVudDtcbiB9fSk7XG5cblxuY29uc3QgaXNzdWVyS2l0PWhhcmRlbih7aXNzdWVyLG1pbnQsYnJhbmQsbWludFJlY292ZXJ5UHVyc2V9KTtcbnJldHVybiBpc3N1ZXJLaXQ7XG4gfTskaM2PX29uY2UucHJlcGFyZVBheW1lbnRMZWRnZXIocHJlcGFyZVBheW1lbnRMZWRnZXIpO1xuaGFyZGVuKHByZXBhcmVQYXltZW50TGVkZ2VyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVQYXltZW50TGVkZ2VyIjpbInByZXBhcmVQYXltZW50TGVkZ2VyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAB3E0Qq6EAAAuhAAACcAAABAYWdvcmljL2VydHAtdjAuMTYuMy11MTguMS9zcmMvcHVyc2UuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9zdG9yZSIsIi4vYW1vdW50TWF0aC5qcyIsIi4vdHJhbnNpZW50Tm90aWZpZXIuanMiLCIuL2Ftb3VudFN0b3JlLmpzIl0sImV4cG9ydHMiOlsicHJlcGFyZVB1cnNlS2luZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLE0sbWFrZUNvcHlTZXQsQW1vdW50TWF0aCxtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQsbWFrZUFtb3VudFN0b3JlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlTZXRcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlTZXQgPSAkaM2PX2EpXV1dXSxbXCIuL2Ftb3VudE1hdGguanNcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXV1dLFtcIi4vdHJhbnNpZW50Tm90aWZpZXIuanNcIiwgW1tcIm1ha2VUcmFuc2llbnROb3RpZmllcktpdFwiLCBbJGjNj19hID0+IChtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL2Ftb3VudFN0b3JlLmpzXCIsIFtbXCJtYWtlQW1vdW50U3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZUFtb3VudFN0b3JlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBFTVBUWV9DT1BZX1NFVD1tYWtlQ29weVNldChbXSk7XG5cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVQdXJzZUtpbmQ9KFxuaXNzdWVyWm9uZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5icmFuZCxcblB1cnNlSUtpdCxcbnB1cnNlTWV0aG9kcyxcbnJlY292ZXJ5U2V0c1N0YXRlLFxucGF5bWVudFJlY292ZXJ5U2V0cyk9Plxue1xuY29uc3QgYW1vdW50U2hhcGU9YnJhbmQuZ2V0QW1vdW50U2hhcGUoKTtcblxuLy9cbi8vXG4vL1xuY29uc3R7cHJvdmlkZU5vdGlmaWVyLHVwZGF0ZTp1cGRhdGVCYWxhbmNlfT1tYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1heWJlUmVjb3ZlcnlTZXQ9KHN0YXRlKT0+e1xuY29uc3R7cmVjb3ZlcnlTZXR9PXN0YXRlO1xuaWYocmVjb3ZlcnlTZXRzU3RhdGU9PT0naGFzUmVjb3ZlcnlTZXRzJyl7XG5yZXR1cm4gcmVjb3ZlcnlTZXQ7XG4gfWVsc2V7XG5yZWNvdmVyeVNldHNTdGF0ZT09PSdub1JlY292ZXJ5U2V0cyd8fFxuRmFpbCBgcmVjb3ZlclNldHNTdGF0ZSBtdXN0IGJlIG5vUmVjb3ZlcnlTZXRzIGlmIGl0IGlzbid0IGhhc1JlY292ZXJTZXRzYDtcbnBheW1lbnRSZWNvdmVyeVNldHMhPT11bmRlZmluZWR8fFxuRmFpbCBgcGF5bWVudFJlY292ZXJ5U2V0cyBtdXN0IGFsd2F5cyBiZSBkZWZpbmVkYDtcbnJlY292ZXJ5U2V0LmdldFNpemUoKT09PTB8fFxuRmFpbCBgV2l0aCBub1JlY292ZXJ5U2V0cywgcmVjb3ZlcnlTZXQgbXVzdCBiZSBlbXB0eWA7XG5cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuIH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0e2RlcG9zaXRJbnRlcm5hbCx3aXRoZHJhd0ludGVybmFsfT1wdXJzZU1ldGhvZHM7XG5jb25zdCBtYWtlUHVyc2VLaXQ9aXNzdWVyWm9uZS5leG9DbGFzc0tpdChcbiBgJHtuYW1lfSBQdXJzZWAsXG5QdXJzZUlLaXQsXG4oKT0+e1xuY29uc3QgY3VycmVudEJhbGFuY2U9QW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlY292ZXJ5U2V0PWlzc3VlclpvbmUuZGV0YWNoZWQoKS5zZXRTdG9yZSgncmVjb3Zlcnkgc2V0Jyk7XG5cbnJldHVybntcbmN1cnJlbnRCYWxhbmNlLFxucmVjb3ZlcnlTZXR9O1xuXG4gfSxcbntcbnB1cnNlOntcbmRlcG9zaXQoc3JjUGF5bWVudCxvcHRBbW91bnRTaGFwZT11bmRlZmluZWQpe1xuLy9cbi8vXG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0e3B1cnNlfT10aGlzLmZhY2V0cztcbmNvbnN0IGJhbGFuY2VTdG9yZT1tYWtlQW1vdW50U3RvcmUoc3RhdGUsJ2N1cnJlbnRCYWxhbmNlJyk7XG4vL1xuY29uc3Qgc3JjUGF5bWVudEJhbGFuY2U9ZGVwb3NpdEludGVybmFsKFxuYmFsYW5jZVN0b3JlLFxuc3JjUGF5bWVudCxcbm9wdEFtb3VudFNoYXBlKTtcblxudXBkYXRlQmFsYW5jZShwdXJzZSxiYWxhbmNlU3RvcmUuZ2V0QW1vdW50KCkpO1xucmV0dXJuIHNyY1BheW1lbnRCYWxhbmNlO1xuIH0sXG53aXRoZHJhdyhhbW91bnQpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5jb25zdHtwdXJzZX09dGhpcy5mYWNldHM7XG5cbmNvbnN0IG9wdFJlY292ZXJ5U2V0PW1heWJlUmVjb3ZlcnlTZXQoc3RhdGUpO1xuY29uc3QgYmFsYW5jZVN0b3JlPW1ha2VBbW91bnRTdG9yZShzdGF0ZSwnY3VycmVudEJhbGFuY2UnKTtcbi8vXG5jb25zdCBwYXltZW50PXdpdGhkcmF3SW50ZXJuYWwoXG5iYWxhbmNlU3RvcmUsXG5hbW91bnQsXG5vcHRSZWNvdmVyeVNldCk7XG5cbnVwZGF0ZUJhbGFuY2UocHVyc2UsYmFsYW5jZVN0b3JlLmdldEFtb3VudCgpKTtcbnJldHVybiBwYXltZW50O1xuIH0sXG5nZXRDdXJyZW50QW1vdW50KCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0IGJhbGFuY2VTdG9yZT1tYWtlQW1vdW50U3RvcmUoc3RhdGUsJ2N1cnJlbnRCYWxhbmNlJyk7XG5yZXR1cm4gYmFsYW5jZVN0b3JlLmdldEFtb3VudCgpO1xuIH0sXG5nZXRDdXJyZW50QW1vdW50Tm90aWZpZXIoKXtcbnJldHVybiBwcm92aWRlTm90aWZpZXIodGhpcy5mYWNldHMucHVyc2UpO1xuIH0sXG5nZXRBbGxlZ2VkQnJhbmQoKXtcbnJldHVybiBicmFuZDtcbiB9LFxuXG5nZXREZXBvc2l0RmFjZXQoKXtcbnJldHVybiB0aGlzLmZhY2V0cy5kZXBvc2l0RmFjZXQ7XG4gfSxcblxuZ2V0UmVjb3ZlcnlTZXQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3Qgb3B0UmVjb3ZlcnlTZXQ9bWF5YmVSZWNvdmVyeVNldChzdGF0ZSk7XG5pZihvcHRSZWNvdmVyeVNldD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gRU1QVFlfQ09QWV9TRVQ7XG4gfVxucmV0dXJuIG9wdFJlY292ZXJ5U2V0LnNuYXBzaG90KCk7XG4gfSxcbnJlY292ZXJBbGwoKXtcbmNvbnN0e3N0YXRlLGZhY2V0c309dGhpcztcbmxldCBhbW91bnQ9QW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcbmNvbnN0IG9wdFJlY292ZXJ5U2V0PW1heWJlUmVjb3ZlcnlTZXQoc3RhdGUpO1xuaWYob3B0UmVjb3ZlcnlTZXQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGFtb3VudDsvL1xuIH1cbmZvcihjb25zdCBwYXltZW50IG9mIG9wdFJlY292ZXJ5U2V0LmtleXMoKSl7XG4vL1xuLy9cbmNvbnN0IGRlbHRhPWZhY2V0cy5wdXJzZS5kZXBvc2l0KHBheW1lbnQpO1xuYW1vdW50PUFtb3VudE1hdGguYWRkKGFtb3VudCxkZWx0YSxicmFuZCk7XG4gfVxub3B0UmVjb3ZlcnlTZXQuZ2V0U2l6ZSgpPT09MHx8XG5GYWlsIGBpbnRlcm5hbDogUmVtYWluaW5nIHVucmVjb3ZlcmVkIHBheW1lbnRzOiAke2ZhY2V0cy5wdXJzZS5nZXRSZWNvdmVyeVNldCgpfWA7XG5yZXR1cm4gYW1vdW50O1xuIH19LFxuXG5kZXBvc2l0RmFjZXQ6e1xucmVjZWl2ZSguLi5hcmdzKXtcbnJldHVybiB0aGlzLmZhY2V0cy5wdXJzZS5kZXBvc2l0KC4uLmFyZ3MpO1xuIH19fSxcblxuXG57XG5zdGF0ZVNoYXBlOntcbmN1cnJlbnRCYWxhbmNlOmFtb3VudFNoYXBlLFxucmVjb3ZlcnlTZXQ6TS5yZW1vdGFibGUoJ3JlY292ZXJ5U2V0Jyl9fSk7XG5cblxuXG5yZXR1cm4oKT0+bWFrZVB1cnNlS2l0KCkucHVyc2U7XG4gfTskaM2PX29uY2UucHJlcGFyZVB1cnNlS2luZChwcmVwYXJlUHVyc2VLaW5kKTtcbmhhcmRlbihwcmVwYXJlUHVyc2VLaW5kKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVQdXJzZUtpbmQiOlsicHJlcGFyZVB1cnNlS2luZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACKmWPI1gUAANYFAAAzAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE4LjEvc3JjL3RyYW5zaWVudE5vdGlmaWVyLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy9ub3RpZmllciJdLCJleHBvcnRzIjpbIm1ha2VUcmFuc2llbnROb3RpZmllcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlLHByb3ZpZGVMYXp5LG1ha2VOb3RpZmllcktpdDskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcInByb3ZpZGVMYXp5XCIsIFskaM2PX2EgPT4gKHByb3ZpZGVMYXp5ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wibWFrZU5vdGlmaWVyS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VOb3RpZmllcktpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLy9cbi8vXG5jb25zdCAgICAgICAgbWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0cmFuc2llbnROb3RpZmVyS2l0cz1tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKFxuJ3RyYW5zaWVudE5vdGlmZXJLaXRzJyk7XG5cblxuY29uc3QgcHJvdmlkZU5vdGlmaWVyS2l0PShrZXkpPT5cbnByb3ZpZGVMYXp5KHRyYW5zaWVudE5vdGlmZXJLaXRzLGtleSwoKT0+XG5tYWtlTm90aWZpZXJLaXQoa2V5LmdldEN1cnJlbnRBbW91bnQoKSkpO1xuXG5cbmNvbnN0IHByb3ZpZGVOb3RpZmllcj0oa2V5KT0+cHJvdmlkZU5vdGlmaWVyS2l0KGtleSkubm90aWZpZXI7XG5jb25zdCB1cGRhdGU9KGtleSxuZXdWYWx1ZSk9PntcbmlmKHRyYW5zaWVudE5vdGlmZXJLaXRzLmhhcyhrZXkpKXtcbmNvbnN0e3VwZGF0ZXJ9PXRyYW5zaWVudE5vdGlmZXJLaXRzLmdldChrZXkpO1xudXBkYXRlci51cGRhdGVTdGF0ZShuZXdWYWx1ZSk7XG4gfVxuIH07XG5cbnJldHVybntwcm92aWRlTm90aWZpZXIsdXBkYXRlfTtcbiB9OyRozY9fb25jZS5tYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQobWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KTtcbmhhcmRlbihtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0IjpbIm1ha2VUcmFuc2llbnROb3RpZmllcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAASMHBOzBgAAMwYAAAsAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE4LjEvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJBbW91bnRQYXR0ZXJuU2hhcGUiLCJBbW91bnRTaGFwZSIsIkFzc2V0S2luZFNoYXBlIiwiQnJhbmRJIiwiQnJhbmRTaGFwZSIsIkRlcG9zaXRGYWNldFNoYXBlIiwiRGlzcGxheUluZm9TaGFwZSIsIklzc3VlcktpdFNoYXBlIiwiSXNzdWVyU2hhcGUiLCJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiLCJNaW50U2hhcGUiLCJOb3RpZmllclNoYXBlIiwiUGF5bWVudFNoYXBlIiwiUHVyc2VTaGFwZSIsIlJhdGlvU2hhcGUiLCJpc0NvcHlCYWdWYWx1ZSIsImlzQ29weVNldFZhbHVlIiwiaXNOYXRWYWx1ZSIsImlzU2V0VmFsdWUiLCJtYWtlSXNzdWVySW50ZXJmYWNlcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBNLG1hdGNoZXMsZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLypcblxuXG4gKi9cblxuY29uc3QgICAgICAgIEJyYW5kU2hhcGU9TS5yZW1vdGFibGUoJ0JyYW5kJyk7JGjNj19vbmNlLkJyYW5kU2hhcGUoQnJhbmRTaGFwZSk7XG5jb25zdCAgICAgICAgSXNzdWVyU2hhcGU9TS5yZW1vdGFibGUoJ0lzc3VlcicpOyRozY9fb25jZS5Jc3N1ZXJTaGFwZShJc3N1ZXJTaGFwZSk7XG5jb25zdCAgICAgICAgUGF5bWVudFNoYXBlPU0ucmVtb3RhYmxlKCdQYXltZW50Jyk7JGjNj19vbmNlLlBheW1lbnRTaGFwZShQYXltZW50U2hhcGUpO1xuY29uc3QgICAgICAgIFB1cnNlU2hhcGU9TS5yZW1vdGFibGUoJ1B1cnNlJyk7JGjNj19vbmNlLlB1cnNlU2hhcGUoUHVyc2VTaGFwZSk7XG5jb25zdCAgICAgICAgRGVwb3NpdEZhY2V0U2hhcGU9TS5yZW1vdGFibGUoJ0RlcG9zaXRGYWNldCcpOyRozY9fb25jZS5EZXBvc2l0RmFjZXRTaGFwZShEZXBvc2l0RmFjZXRTaGFwZSk7XG5jb25zdCAgICAgICAgTm90aWZpZXJTaGFwZT1NLnJlbW90YWJsZSgnTm90aWZpZXInKTskaM2PX29uY2UuTm90aWZpZXJTaGFwZShOb3RpZmllclNoYXBlKTtcbmNvbnN0ICAgICAgICBNaW50U2hhcGU9TS5yZW1vdGFibGUoJ01pbnQnKTtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLk1pbnRTaGFwZShNaW50U2hhcGUpO1xuY29uc3QgTmF0VmFsdWVTaGFwZT1NLm5hdCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgQ29weVNldFZhbHVlU2hhcGU9TS5zZXQoKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IFNldFZhbHVlU2hhcGU9TS5hcnJheU9mKE0ua2V5KCkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBDb3B5QmFnVmFsdWVTaGFwZT1NLmJhZygpO1xuXG5jb25zdCBBbW91bnRWYWx1ZVNoYXBlPU0ub3IoXG5OYXRWYWx1ZVNoYXBlLFxuQ29weVNldFZhbHVlU2hhcGUsXG5TZXRWYWx1ZVNoYXBlLFxuQ29weUJhZ1ZhbHVlU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBBbW91bnRTaGFwZT17YnJhbmQ6QnJhbmRTaGFwZSx2YWx1ZTpBbW91bnRWYWx1ZVNoYXBlfTskaM2PX29uY2UuQW1vdW50U2hhcGUoQW1vdW50U2hhcGUpO1xuaGFyZGVuKEFtb3VudFNoYXBlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEFtb3VudFBhdHRlcm5TaGFwZT1NLnBhdHRlcm4oKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5BbW91bnRQYXR0ZXJuU2hhcGUoQW1vdW50UGF0dGVyblNoYXBlKTtcbmNvbnN0ICAgICAgICBSYXRpb1NoYXBlPXtudW1lcmF0b3I6QW1vdW50U2hhcGUsZGVub21pbmF0b3I6QW1vdW50U2hhcGV9OyRozY9fb25jZS5SYXRpb1NoYXBlKFJhdGlvU2hhcGUpO1xuaGFyZGVuKFJhdGlvU2hhcGUpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc05hdFZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsTmF0VmFsdWVTaGFwZSk7JGjNj19vbmNlLmlzTmF0VmFsdWUoaXNOYXRWYWx1ZSk7XG5oYXJkZW4oaXNOYXRWYWx1ZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldFZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsQ29weVNldFZhbHVlU2hhcGUpOyRozY9fb25jZS5pc0NvcHlTZXRWYWx1ZShpc0NvcHlTZXRWYWx1ZSk7XG5oYXJkZW4oaXNDb3B5U2V0VmFsdWUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1NldFZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsU2V0VmFsdWVTaGFwZSk7JGjNj19vbmNlLmlzU2V0VmFsdWUoaXNTZXRWYWx1ZSk7XG5oYXJkZW4oaXNTZXRWYWx1ZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weUJhZ1ZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsQ29weUJhZ1ZhbHVlU2hhcGUpOyRozY9fb25jZS5pc0NvcHlCYWdWYWx1ZShpc0NvcHlCYWdWYWx1ZSk7XG5oYXJkZW4oaXNDb3B5QmFnVmFsdWUpO1xuXG4vL1xuY29uc3QgICAgICAgIE1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUz0xMDA7JGjNj19vbmNlLk1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyhNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMpO1xuXG5jb25zdCAgICAgICAgQXNzZXRLaW5kU2hhcGU9TS5vcignbmF0Jywnc2V0JywnY29weVNldCcsJ2NvcHlCYWcnKTskaM2PX29uY2UuQXNzZXRLaW5kU2hhcGUoQXNzZXRLaW5kU2hhcGUpO1xuXG5jb25zdCAgICAgICAgRGlzcGxheUluZm9TaGFwZT1NLnNwbGl0UmVjb3JkKFxue30sXG57XG5kZWNpbWFsUGxhY2VzOk0uYW5kKFxuTS5ndGUoLU1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyksXG5NLmx0ZShNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMpKSxcblxuYXNzZXRLaW5kOkFzc2V0S2luZFNoYXBlfSxcblxue1xuLy9cbi8vXG59KTskaM2PX29uY2UuRGlzcGxheUluZm9TaGFwZShEaXNwbGF5SW5mb1NoYXBlKTtcblxuXG5jb25zdCAgICAgICAgSXNzdWVyS2l0U2hhcGU9e1xuYnJhbmQ6QnJhbmRTaGFwZSxcbm1pbnQ6TWludFNoYXBlLFxubWludFJlY292ZXJ5UHVyc2U6UHVyc2VTaGFwZSxcbmlzc3VlcjpJc3N1ZXJTaGFwZSxcbmRpc3BsYXlJbmZvOkRpc3BsYXlJbmZvU2hhcGV9OyRozY9fb25jZS5Jc3N1ZXJLaXRTaGFwZShJc3N1ZXJLaXRTaGFwZSk7XG5cbmhhcmRlbihJc3N1ZXJLaXRTaGFwZSk7XG5cbi8vXG5cbmNvbnN0ICAgICAgICBCcmFuZEk9TS5pbnRlcmZhY2UoJ0JyYW5kJyx7XG5pc015SXNzdWVyOk0uY2FsbFdoZW4oTS5hd2FpdChJc3N1ZXJTaGFwZSkpLnJldHVybnMoTS5ib29sZWFuKCkpLFxuZ2V0QWxsZWdlZE5hbWU6TS5jYWxsKCkucmV0dXJucyhNLnN0cmluZygpKSxcbmdldERpc3BsYXlJbmZvOk0uY2FsbCgpLnJldHVybnMoRGlzcGxheUluZm9TaGFwZSksXG5nZXRBbW91bnRTaGFwZTpNLmNhbGwoKS5yZXR1cm5zKE0ucGF0dGVybigpKX0pO1xuXG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuQnJhbmRJKEJyYW5kSSk7XG5jb25zdCAgICAgICAgbWFrZUlzc3VlckludGVyZmFjZXM9KFxuYnJhbmRTaGFwZT1CcmFuZFNoYXBlLFxuYXNzZXRLaW5kU2hhcGU9QXNzZXRLaW5kU2hhcGUsXG5hbW91bnRTaGFwZT1BbW91bnRTaGFwZSk9Plxue1xuY29uc3QgSXNzdWVyST1NLmludGVyZmFjZSgnSXNzdWVyJyx7XG5nZXRCcmFuZDpNLmNhbGwoKS5yZXR1cm5zKGJyYW5kU2hhcGUpLFxuZ2V0QWxsZWdlZE5hbWU6TS5jYWxsKCkucmV0dXJucyhNLnN0cmluZygpKSxcbmdldEFzc2V0S2luZDpNLmNhbGwoKS5yZXR1cm5zKGFzc2V0S2luZFNoYXBlKSxcbmdldERpc3BsYXlJbmZvOk0uY2FsbCgpLnJldHVybnMoRGlzcGxheUluZm9TaGFwZSksXG5tYWtlRW1wdHlQdXJzZTpNLmNhbGwoKS5yZXR1cm5zKFB1cnNlU2hhcGUpLFxuXG5pc0xpdmU6TS5jYWxsV2hlbihNLmF3YWl0KFBheW1lbnRTaGFwZSkpLnJldHVybnMoTS5ib29sZWFuKCkpLFxuZ2V0QW1vdW50T2Y6TS5jYWxsV2hlbihNLmF3YWl0KFBheW1lbnRTaGFwZSkpLnJldHVybnMoYW1vdW50U2hhcGUpLFxuYnVybjpNLmNhbGxXaGVuKE0uYXdhaXQoUGF5bWVudFNoYXBlKSkuXG5vcHRpb25hbChBbW91bnRQYXR0ZXJuU2hhcGUpLlxucmV0dXJucyhhbW91bnRTaGFwZSl9KTtcblxuXG5jb25zdCBNaW50ST1NLmludGVyZmFjZSgnTWludCcse1xuZ2V0SXNzdWVyOk0uY2FsbCgpLnJldHVybnMoSXNzdWVyU2hhcGUpLFxubWludFBheW1lbnQ6TS5jYWxsKGFtb3VudFNoYXBlKS5yZXR1cm5zKFBheW1lbnRTaGFwZSl9KTtcblxuXG5jb25zdCBQYXltZW50ST1NLmludGVyZmFjZSgnUGF5bWVudCcse1xuZ2V0QWxsZWdlZEJyYW5kOk0uY2FsbCgpLnJldHVybnMoYnJhbmRTaGFwZSl9KTtcblxuXG5jb25zdCBQdXJzZUk9TS5pbnRlcmZhY2UoJ1B1cnNlJyx7XG5nZXRBbGxlZ2VkQnJhbmQ6TS5jYWxsKCkucmV0dXJucyhicmFuZFNoYXBlKSxcbmdldEN1cnJlbnRBbW91bnQ6TS5jYWxsKCkucmV0dXJucyhhbW91bnRTaGFwZSksXG5nZXRDdXJyZW50QW1vdW50Tm90aWZpZXI6TS5jYWxsKCkucmV0dXJucyhOb3RpZmllclNoYXBlKSxcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5kZXBvc2l0Ok0uY2FsbChQYXltZW50U2hhcGUpLlxub3B0aW9uYWwoQW1vdW50UGF0dGVyblNoYXBlKS5cbnJldHVybnMoYW1vdW50U2hhcGUpLFxuZ2V0RGVwb3NpdEZhY2V0Ok0uY2FsbCgpLnJldHVybnMoRGVwb3NpdEZhY2V0U2hhcGUpLFxud2l0aGRyYXc6TS5jYWxsKGFtb3VudFNoYXBlKS5yZXR1cm5zKFBheW1lbnRTaGFwZSksXG5nZXRSZWNvdmVyeVNldDpNLmNhbGwoKS5yZXR1cm5zKE0uc2V0T2YoUGF5bWVudFNoYXBlKSksXG5yZWNvdmVyQWxsOk0uY2FsbCgpLnJldHVybnMoYW1vdW50U2hhcGUpfSk7XG5cblxuY29uc3QgRGVwb3NpdEZhY2V0ST1NLmludGVyZmFjZSgnRGVwb3NpdEZhY2V0Jyx7XG5yZWNlaXZlOmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChQdXJzZUkpLm1ldGhvZEd1YXJkcy5kZXBvc2l0fSk7XG5cblxuY29uc3QgUHVyc2VJS2l0PXtcbnB1cnNlOlB1cnNlSSxcbmRlcG9zaXRGYWNldDpEZXBvc2l0RmFjZXRJfTtcblxuaGFyZGVuKFB1cnNlSUtpdCk7XG5cbnJldHVybiBoYXJkZW4oe1xuSXNzdWVySSxcbk1pbnRJLFxuUGF5bWVudEksXG5QdXJzZUlLaXR9KTtcblxuIH07JGjNj19vbmNlLm1ha2VJc3N1ZXJJbnRlcmZhY2VzKG1ha2VJc3N1ZXJJbnRlcmZhY2VzKTtcbmhhcmRlbihtYWtlSXNzdWVySW50ZXJmYWNlcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJCcmFuZFNoYXBlIjpbIkJyYW5kU2hhcGUiXSwiSXNzdWVyU2hhcGUiOlsiSXNzdWVyU2hhcGUiXSwiUGF5bWVudFNoYXBlIjpbIlBheW1lbnRTaGFwZSJdLCJQdXJzZVNoYXBlIjpbIlB1cnNlU2hhcGUiXSwiRGVwb3NpdEZhY2V0U2hhcGUiOlsiRGVwb3NpdEZhY2V0U2hhcGUiXSwiTm90aWZpZXJTaGFwZSI6WyJOb3RpZmllclNoYXBlIl0sIk1pbnRTaGFwZSI6WyJNaW50U2hhcGUiXSwiQW1vdW50U2hhcGUiOlsiQW1vdW50U2hhcGUiXSwiQW1vdW50UGF0dGVyblNoYXBlIjpbIkFtb3VudFBhdHRlcm5TaGFwZSJdLCJSYXRpb1NoYXBlIjpbIlJhdGlvU2hhcGUiXSwiaXNOYXRWYWx1ZSI6WyJpc05hdFZhbHVlIl0sImlzQ29weVNldFZhbHVlIjpbImlzQ29weVNldFZhbHVlIl0sImlzU2V0VmFsdWUiOlsiaXNTZXRWYWx1ZSJdLCJpc0NvcHlCYWdWYWx1ZSI6WyJpc0NvcHlCYWdWYWx1ZSJdLCJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiOlsiTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTIl0sIkFzc2V0S2luZFNoYXBlIjpbIkFzc2V0S2luZFNoYXBlIl0sIkRpc3BsYXlJbmZvU2hhcGUiOlsiRGlzcGxheUluZm9TaGFwZSJdLCJJc3N1ZXJLaXRTaGFwZSI6WyJJc3N1ZXJLaXRTaGFwZSJdLCJCcmFuZEkiOlsiQnJhbmRJIl0sIm1ha2VJc3N1ZXJJbnRlcmZhY2VzIjpbIm1ha2VJc3N1ZXJJbnRlcmZhY2VzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAAC0AAABAYWdvcmljL2VydHAtdjAuMTYuMy11MTguMS9zcmMvdHlwZXMtaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFbRVxHpGQAA6RkAAC0AAABAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMS9zcmMvY2FsbGJhY2suanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiY2FsbEUiLCJjYWxsU3luYyIsImlzQ2FsbGJhY2siLCJtYWtlRnVuY3Rpb25DYWxsYmFjayIsIm1ha2VNZXRob2RDYWxsYmFjayIsIm1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjayIsIm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2siLCJwcmVwYXJlQXR0ZW51YXRvciIsInByZXBhcmVHdWFyZGVkQXR0ZW51YXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLG1ha2VFcnJvcixxLEUsaXNPYmplY3QsaXNQYXNzYWJsZVN5bWJvbCxnZXRJbnRlcmZhY2VNZXRob2RLZXlzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImlzUGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoaXNQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZU1ldGhvZEtleXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuY29uc3R7b3duS2V5czpyYXdPd25LZXlzfT1SZWZsZWN0O1xuY29uc3Qgb3duS2V5cz1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yYXdPd25LZXlzO1xuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpc1Byb3BlcnR5S2V5PShrZXkpPT57XG5zd2l0Y2godHlwZW9mIGtleSl7XG5jYXNlJ3N0cmluZyc6XG5jYXNlJ251bWJlcic6XG5jYXNlJ3N5bWJvbCc6XG5yZXR1cm4gdHJ1ZTtcbmRlZmF1bHQ6XG5yZXR1cm4gZmFsc2U7fVxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNhbGxTeW5jPShjYWxsYmFjaywuLi5hcmdzKT0+e1xuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdGFyZ2V0KC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH1cbnJldHVybiB0YXJnZXRbbWV0aG9kTmFtZV0oLi4uYm91bmQsLi4uYXJncyk7XG4gfTskaM2PX29uY2UuY2FsbFN5bmMoY2FsbFN5bmMpO1xuaGFyZGVuKGNhbGxTeW5jKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNhbGxFPShjYWxsYmFjaywuLi5hcmdzKT0+e1xuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gRSh0YXJnZXQpKC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH1cbnJldHVybiBFKHRhcmdldClbbWV0aG9kTmFtZV0oLi4uYm91bmQsLi4uYXJncyk7XG4gfTskaM2PX29uY2UuY2FsbEUoY2FsbEUpO1xuaGFyZGVuKGNhbGxFKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2s9KHRhcmdldCwuLi5ib3VuZCk9PntcbnR5cGVvZiB0YXJnZXQ9PT0nZnVuY3Rpb24nfHxcbkZhaWwgYHN5bmMgZnVuY3Rpb24gY2FsbGJhY2sgdGFyZ2V0IG11c3QgYmUgYSBmdW5jdGlvbjogJHt0YXJnZXR9YDtcbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNiPWhhcmRlbih7dGFyZ2V0LGJvdW5kLGlzU3luYzp0cnVlfSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2sobWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrKTtcbmhhcmRlbihtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VGdW5jdGlvbkNhbGxiYWNrPSh0YXJnZXQsLi4uYm91bmQpPT57XG5pc09iamVjdCh0YXJnZXQpfHxcbkZhaWwgYGZ1bmN0aW9uIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGEgZnVuY3Rpb24gcHJlc2VuY2U6ICR7dGFyZ2V0fWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxib3VuZH0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlRnVuY3Rpb25DYWxsYmFjayhtYWtlRnVuY3Rpb25DYWxsYmFjayk7XG5oYXJkZW4obWFrZUZ1bmN0aW9uQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN5bmNNZXRob2RDYWxsYmFjaz0odGFyZ2V0LG1ldGhvZE5hbWUsLi4uYm91bmQpPT57XG5pc09iamVjdCh0YXJnZXQpfHxcbkZhaWwgYHN5bmMgbWV0aG9kIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGFuIG9iamVjdDogJHt0YXJnZXR9YDtcbnR5cGVvZiBtZXRob2ROYW1lPT09J3N0cmluZyd8fFxuaXNQYXNzYWJsZVN5bWJvbChtZXRob2ROYW1lKXx8XG5GYWlsIGBtZXRob2QgbmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIHBhc3NhYmxlIHN5bWJvbDogJHttZXRob2ROYW1lfWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxtZXRob2ROYW1lLGJvdW5kLGlzU3luYzp0cnVlfSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlU3luY01ldGhvZENhbGxiYWNrKG1ha2VTeW5jTWV0aG9kQ2FsbGJhY2spO1xuaGFyZGVuKG1ha2VTeW5jTWV0aG9kQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1ldGhvZENhbGxiYWNrPSh0YXJnZXQsbWV0aG9kTmFtZSwuLi5ib3VuZCk9PntcbmlzT2JqZWN0KHRhcmdldCl8fEZhaWwgYG1ldGhvZCBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3Q6ICR7dGFyZ2V0fWA7XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSl8fFxuRmFpbCBgbWV0aG9kIG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBwYXNzYWJsZSBzeW1ib2w6ICR7bWV0aG9kTmFtZX1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsbWV0aG9kTmFtZSxib3VuZH0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlTWV0aG9kQ2FsbGJhY2sobWFrZU1ldGhvZENhbGxiYWNrKTtcbmhhcmRlbihtYWtlTWV0aG9kQ2FsbGJhY2spO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ2FsbGJhY2s9KGNhbGxiYWNrKT0+e1xuaWYoIWlzT2JqZWN0KGNhbGxiYWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xucmV0dXJuKFxuaXNPYmplY3QodGFyZ2V0KSYmKFxubWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSkpJiZcbkFycmF5LmlzQXJyYXkoYm91bmQpKTtcblxuIH07JGjNj19vbmNlLmlzQ2FsbGJhY2soaXNDYWxsYmFjayk7XG5oYXJkZW4oaXNDYWxsYmFjayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlQXR0ZW51YXRvcj0oXG56b25lLFxubWV0aG9kTmFtZXMsXG57aW50ZXJmYWNlR3VhcmQsdGFnPSdBdHRlbnVhdG9yJ309e30pPT5cbntcbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ldGhvZHM9LyogICAgICAgICAgICAgICAgICAqL1xuZnJvbUVudHJpZXMoXG5tZXRob2ROYW1lcy5tYXAoKGtleSk9Pntcbi8vXG5pZighaXNQcm9wZXJ0eUtleShrZXkpKXtcbnRocm93IEZhaWwgYGtleSAke3Eoa2V5KX0gaXMgbm90IGEgUHJvcGVydHlLZXlgO1xuIH1cblxuY29uc3QgbT0vKiAgICAgICAgICAgICAgICAgICove1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgKi9cbltrZXldKC4uLmFyZ3Mpe1xuLy9cbmNvbnN0IGNiPXRoaXMuc3RhdGUuY2JzW2tleV07XG5pZighY2Ipe1xuY29uc3QgZXJyPW1ha2VFcnJvciggYHVuaW1wbGVtZW50ZWQgJHtxKHRhZyl9IG1ldGhvZCAke3Eoa2V5KX1gKTtcbmlmKHRoaXMuc3RhdGUuaXNTeW5jKXtcbnRocm93IGVycjtcbiB9XG5yZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiB9XG5pZihjYi5pc1N5bmMpe1xucmV0dXJuIGNhbGxTeW5jKGNiLC4uLmFyZ3MpO1xuIH1cbnJldHVybiBjYWxsRShjYiwuLi5hcmdzKTtcbiB9fVtcbmtleV07XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICovW2tleSxtXSk7XG4gfSkpO1xuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZUF0dGVudWF0b3I9em9uZS5leG9DbGFzcyhcbnRhZyxcbmludGVyZmFjZUd1YXJkLFxuLypcblxuXG5cblxuICAgICAqL1xuKHtcbnRhcmdldD1udWxsLFxuaXNTeW5jPWZhbHNlLFxub3ZlcnJpZGVzPS8qICAgICAgICAgICAgICAgICAgICAqL3t9fSk9Plxue1xuY29uc3QgY2JzPS8qICAgICAgICAgICAgICAgICAgICAqL3t9O1xuXG5jb25zdCByZW1haW5pbmc9bmV3IFNldChtZXRob2ROYW1lcyk7XG5mb3IoY29uc3Qga2V5IG9mIG93bktleXMob3ZlcnJpZGVzKSl7XG5yZW1haW5pbmcuaGFzKGtleSl8fFxuRmFpbCBgJHtxKHRhZyl9IG92ZXJyaWRlc1ske3Eoa2V5KX1dIG5vdCBhbGxvd2VkIGJ5IG1ldGhvZE5hbWVzYDtcblxucmVtYWluaW5nLmRlbGV0ZShrZXkpO1xuY29uc3QgY2I9b3ZlcnJpZGVzW2tleV07XG5jYj09bnVsbHx8XG5pc0NhbGxiYWNrKGNiKXx8XG5GYWlsIGAke3EodGFnKX0gb3ZlcnJpZGVzWyR7cShrZXkpfV0gaXMgbm90IGEgY2FsbGJhY2s7IGdvdCAke2NifWA7XG5jYnNba2V5XT1jYjtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIHJlbWFpbmluZyl7XG5pZihpc1N5bmMpe1xuY2JzW2tleV09bWFrZVN5bmNNZXRob2RDYWxsYmFjayh0YXJnZXQsa2V5KTtcbiB9ZWxzZXtcbmNic1trZXldPW1ha2VNZXRob2RDYWxsYmFjayh0YXJnZXQsa2V5KTtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7Y2JzLGlzU3luY30pO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICovbWV0aG9kcyk7XG5cbnJldHVybiBtYWtlQXR0ZW51YXRvcjtcbiB9OyRozY9fb25jZS5wcmVwYXJlQXR0ZW51YXRvcihwcmVwYXJlQXR0ZW51YXRvcik7XG5oYXJkZW4ocHJlcGFyZUF0dGVudWF0b3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3I9KHpvbmUsaW50ZXJmYWNlR3VhcmQsb3B0cz17fSk9PntcbmNvbnN0IG1ldGhvZE5hbWVzPWdldEludGVyZmFjZU1ldGhvZEtleXMoaW50ZXJmYWNlR3VhcmQpO1xuY29uc3QgbWFrZUF0dGVudWF0b3I9cHJlcGFyZUF0dGVudWF0b3Ioem9uZSxtZXRob2ROYW1lcyx7XG4uLi5vcHRzLFxuaW50ZXJmYWNlR3VhcmR9KTtcblxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZUF0dGVudWF0b3IpO1xuIH07JGjNj19vbmNlLnByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcihwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IpO1xuaGFyZGVuKHByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjYWxsU3luYyI6WyJjYWxsU3luYyJdLCJjYWxsRSI6WyJjYWxsRSJdLCJtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2siOlsibWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrIl0sIm1ha2VGdW5jdGlvbkNhbGxiYWNrIjpbIm1ha2VGdW5jdGlvbkNhbGxiYWNrIl0sIm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2siOlsibWFrZVN5bmNNZXRob2RDYWxsYmFjayJdLCJtYWtlTWV0aG9kQ2FsbGJhY2siOlsibWFrZU1ldGhvZENhbGxiYWNrIl0sImlzQ2FsbGJhY2siOlsiaXNDYWxsYmFjayJdLCJwcmVwYXJlQXR0ZW51YXRvciI6WyJwcmVwYXJlQXR0ZW51YXRvciJdLCJwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IiOlsicHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADID/RnNBQAAzQUAACsAAABAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMS9zcmMvY29uZmlnLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJCcmlkZ2VJZCIsIkNvc21vc0luaXRLZXlUb0JyaWRnZUlkIiwiVkJhbmtBY2NvdW50IiwiV2FsbGV0TmFtZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEJyaWRnZUlkPS8qICAgICAgICAgICAgICAgICove1xuQkFOSzonYmFuaycsXG5DT1JFOidjb3JlJyxcbkRJQkM6J2RpYmMnLFxuU1RPUkFHRTonc3RvcmFnZScsXG5QUk9WSVNJT046J3Byb3Zpc2lvbicsXG5QUk9WSVNJT05fU01BUlRfV0FMTEVUOidwcm92aXNpb25XYWxsZXQnLFxuVkxPQ0FMQ0hBSU46J3Zsb2NhbGNoYWluJyxcblZUUkFOU0ZFUjondnRyYW5zZmVyJyxcbldBTExFVDond2FsbGV0J307JGjNj19vbmNlLkJyaWRnZUlkKEJyaWRnZUlkKTtcblxuaGFyZGVuKEJyaWRnZUlkKTtcblxuY29uc3QgICAgICAgIENvc21vc0luaXRLZXlUb0JyaWRnZUlkPXtcbnZiYW5rUG9ydDpCcmlkZ2VJZC5CQU5LLFxudmliY1BvcnQ6QnJpZGdlSWQuRElCQ307JGjNj19vbmNlLkNvc21vc0luaXRLZXlUb0JyaWRnZUlkKENvc21vc0luaXRLZXlUb0JyaWRnZUlkKTtcblxuXG5jb25zdCAgICAgICAgV2FsbGV0TmFtZT0vKiAgICAgICAgICAgICAgICAqL3tcbmRlcG9zaXRGYWNldDonZGVwb3NpdEZhY2V0J307JGjNj19vbmNlLldhbGxldE5hbWUoV2FsbGV0TmFtZSk7XG5cbmhhcmRlbihXYWxsZXROYW1lKTtcblxuLy9cbmNvbnN0ICAgICAgICBWQmFua0FjY291bnQ9LyogICAgICAgICAgICAgICAgKi97XG5yZXNlcnZlOntcbm1vZHVsZTondmJhbmsvcmVzZXJ2ZScsXG5hZGRyZXNzOidhZ29yaWMxYWUwbG10emxncmNubGE5eGprcGFhcnE1ZDVkZmV6NjNoM251Y2wnfSxcblxucHJvdmlzaW9uOntcbm1vZHVsZTondmJhbmsvcHJvdmlzaW9uJyxcbmFkZHJlc3M6J2Fnb3JpYzFtZWd6eXRnNjVjeXJnenM2ZnZ6eGdyY3F2d3dsN3VncHQ2MjM0Nid9fTskaM2PX29uY2UuVkJhbmtBY2NvdW50KFZCYW5rQWNjb3VudCk7XG5cblxuaGFyZGVuKFZCYW5rQWNjb3VudCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJCcmlkZ2VJZCI6WyJCcmlkZ2VJZCJdLCJDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZCI6WyJDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZCJdLCJXYWxsZXROYW1lIjpbIldhbGxldE5hbWUiXSwiVkJhbmtBY2NvdW50IjpbIlZCYW5rQWNjb3VudCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACcqLSXSAQAAEgEAAAqAAAAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE4LjEvc3JjL2RlYnVnLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlVHJhY2VyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG5sZXQgZGVidWdJbnN0YW5jZT0xO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VUcmFjZXI9KG5hbWUsZW5hYmxlPXRydWUpPT57XG5kZWJ1Z0luc3RhbmNlKz0xO1xubGV0IGRlYnVnQ291bnQ9MTtcbmNvbnN0IGtleT0gYC0tLS0tICR7bmFtZX0uJHtkZWJ1Z0luc3RhbmNlfSBgO1xuLy9cbnN3aXRjaChlbmFibGUpe1xuY2FzZSBmYWxzZTp7XG5jb25zdCBsb2dEaXNhYmxlZD0oLi4uX2FyZ3MpPT57IH07XG5yZXR1cm4gbG9nRGlzYWJsZWQ7XG4gfVxuY2FzZSd2ZXJib3NlJzp7XG5jb25zdCBpbmZvVGljaz0ob3B0TG9nLC4uLmFyZ3MpPT57XG5pZihvcHRMb2cubG9nKXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSwuLi5hcmdzKTtcbiB9ZWxzZXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSxvcHRMb2csLi4uYXJncyk7XG4gfVxuIH07XG5yZXR1cm4gaW5mb1RpY2s7XG4gfVxuZGVmYXVsdDp7XG5jb25zdCBkZWJ1Z1RpY2s9KG9wdExvZywuLi5hcmdzKT0+e1xuaWYob3B0TG9nLmxvZyl7XG5vcHRMb2cubG9nKGtleSxkZWJ1Z0NvdW50Kz0xLC4uLmFyZ3MpO1xuIH1lbHNle1xuY29uc29sZS5pbmZvKGtleSxkZWJ1Z0NvdW50Kz0xLG9wdExvZywuLi5hcmdzKTtcbiB9XG4gfTtcbnJldHVybiBkZWJ1Z1RpY2s7XG4gfX1cblxuIH07JGjNj19vbmNlLm1ha2VUcmFjZXIobWFrZVRyYWNlcik7XG5oYXJkZW4obWFrZVRyYWNlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlVHJhY2VyIjpbIm1ha2VUcmFjZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAAtXgwo4CAACOAgAAKwAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xL3NyYy9lcnJvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiTm9uTnVsbGlzaCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBOb25OdWxsaXNoPSh2YWwsb3B0RGV0YWlscz0gYHVuZXhwZWN0ZWQgJHtxKHZhbCl9YCk9PntcbmlmKHZhbCE9bnVsbCl7XG4vL1xucmV0dXJuIHZhbDtcbiB9XG5hc3NlcnQuZmFpbChvcHREZXRhaWxzKTtcbiB9OyRozY9fb25jZS5Ob25OdWxsaXNoKE5vbk51bGxpc2gpO1xuaGFyZGVuKE5vbk51bGxpc2gpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiTm9uTnVsbGlzaCI6WyJOb25OdWxsaXNoIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOfyjBRzBQAAcwUAACoAAABAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9jb25maWcuanMiLCIuL2RlYnVnLmpzIiwiLi9lcnJvcnMuanMiLCIuL2pzLXV0aWxzLmpzIiwiLi9tYXJzaGFsLmpzIiwiLi9tZXRob2QtdG9vbHMuanMiLCIuL3Nlcy11dGlscy5qcyIsIi4vdHlwZUNoZWNrLmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi90eXBlcy1pbmRleC5qcyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyIsIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIl0sImV4cG9ydHMiOltudWxsLG51bGwsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vY29uZmlnLmpzIiwiLi9kZWJ1Zy5qcyIsIi4vZXJyb3JzLmpzIiwiLi9qcy11dGlscy5qcyIsIi4vbWV0aG9kLXRvb2xzLmpzIiwiLi9zZXMtdXRpbHMuanMiLCIuL3R5cGVDaGVjay5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vY29uZmlnLmpzXCIsIFtdXSxbXCIuL2RlYnVnLmpzXCIsIFtdXSxbXCIuL2Vycm9ycy5qc1wiLCBbXV0sW1wiLi9qcy11dGlscy5qc1wiLCBbXV0sW1wiLi9tYXJzaGFsLmpzXCIsIFtdXSxbXCIuL21ldGhvZC10b29scy5qc1wiLCBbXV0sW1wiLi9zZXMtdXRpbHMuanNcIiwgW11dLFtcIi4vdHlwZUNoZWNrLmpzXCIsIFtdXSxbXCIuL3R5cGVHdWFyZHMuanNcIiwgW11dLFtcIi4vdHlwZXMtaW5kZXguanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtdXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzXCIsIFtdXSxbXCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vbWFyc2hhbC5qcyI6W1sicHVyZURhdGFNYXJzaGFsbGVyIiwicHVyZURhdGFNYXJzaGFsbGVyIl1dLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6W1sib2JqZWN0TWFwIiwib2JqZWN0TWFwIl1dLCJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjpbWyJvYmplY3RNZXRhTWFwIiwib2JqZWN0TWV0YU1hcCJdXSwiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOltbImZyb21VbmlxdWVFbnRyaWVzIiwiZnJvbVVuaXF1ZUVudHJpZXMiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMwvptUfBwAAHwcAAC0AAABAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMS9zcmMvanMtdXRpbHMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImRlZXBDb3B5SnNvbmFibGUiLCJkZWVwTWFwT2JqZWN0IiwibWFrZU1lYXN1cmVTZWNvbmRzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZXBDb3B5SnNvbmFibGU9KHZhbHVlKT0+SlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuXG4vKlxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZWVwQ29weUpzb25hYmxlKGRlZXBDb3B5SnNvbmFibGUpO1xuY29uc3QgZGVlcE1hcE9iamVjdEludGVybmFsPSh2YWx1ZSxuYW1lLGNvbnRhaW5lcixtYXBwZXIpPT57XG5pZihjb250YWluZXImJnR5cGVvZiBuYW1lPT09J3N0cmluZycpe1xuY29uc3QgbWFwcGVkPW1hcHBlcih2YWx1ZSxuYW1lLGNvbnRhaW5lcik7XG5pZihtYXBwZWQhPT12YWx1ZSl7XG5yZXR1cm4gbWFwcGVkO1xuIH1cbiB9XG5cbmlmKHR5cGVvZiB2YWx1ZSE9PSdvYmplY3QnfHwhdmFsdWUpe1xucmV0dXJuIHZhbHVlO1xuIH1cblxubGV0IHdhc01hcHBlZD1mYWxzZTtcbmNvbnN0IG1hcHBlZEVudHJpZXM9T2JqZWN0LmVudHJpZXModmFsdWUpLm1hcCgoW2lubmVyTmFtZSxpbm5lclZhbHVlXSk9PntcbmNvbnN0IG1hcHBlZElubmVyVmFsdWU9ZGVlcE1hcE9iamVjdEludGVybmFsKFxuaW5uZXJWYWx1ZSxcbmlubmVyTmFtZSxcbnZhbHVlLFxubWFwcGVyKTtcblxud2FzTWFwcGVkfHw9bWFwcGVkSW5uZXJWYWx1ZSE9PWlubmVyVmFsdWU7XG5yZXR1cm5baW5uZXJOYW1lLG1hcHBlZElubmVyVmFsdWVdO1xuIH0pO1xuXG5yZXR1cm4gd2FzTWFwcGVkP09iamVjdC5mcm9tRW50cmllcyhtYXBwZWRFbnRyaWVzKTp2YWx1ZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZXBNYXBPYmplY3Q9KG9iaixtYXBwZXIpPT5cbmRlZXBNYXBPYmplY3RJbnRlcm5hbChvYmosdW5kZWZpbmVkLHVuZGVmaW5lZCxtYXBwZXIpO1xuXG4vKlxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZWVwTWFwT2JqZWN0KGRlZXBNYXBPYmplY3QpO1xuY29uc3QgICAgICAgIG1ha2VNZWFzdXJlU2Vjb25kcz0oY3VycmVudFRpbWVNaWxsaXNlYyk9Pntcbi8qXG5cblxuXG4gICAqL1xuY29uc3QgbWVhc3VyZVNlY29uZHM9YXN5bmMoZm4pPT57XG5jb25zdCB0MD1jdXJyZW50VGltZU1pbGxpc2VjKCk7XG5jb25zdCByZXN1bHQ9YXdhaXQgZm4oKTtcbmNvbnN0IGR1cmF0aW9uTWlsbGlzZWM9Y3VycmVudFRpbWVNaWxsaXNlYygpLXQwO1xucmV0dXJue3Jlc3VsdCxkdXJhdGlvbjpkdXJhdGlvbk1pbGxpc2VjLzEwMDB9O1xuIH07XG5yZXR1cm4gbWVhc3VyZVNlY29uZHM7XG4gfTskaM2PX29uY2UubWFrZU1lYXN1cmVTZWNvbmRzKG1ha2VNZWFzdXJlU2Vjb25kcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWVwQ29weUpzb25hYmxlIjpbImRlZXBDb3B5SnNvbmFibGUiXSwiZGVlcE1hcE9iamVjdCI6WyJkZWVwTWFwT2JqZWN0Il0sIm1ha2VNZWFzdXJlU2Vjb25kcyI6WyJtYWtlTWVhc3VyZVNlY29uZHMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAJm0Uq9MVAADTFQAANQAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL3BhdHRlcm5zIiwiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qcyIsIi4vY2FsbGJhY2suanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRDYXBEYXRhIiwiYXNzZXJ0UGF0aFNlZ21lbnQiLCJpc1N0cmVhbUNlbGwiLCJtYWtlQ2hhaW5TdG9yYWdlUm9vdCIsIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2UiLCJtYWtlU3RvcmFnZU5vZGVDaGlsZCIsInByZXBhcmVDaGFpblN0b3JhZ2VOb2RlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRSxGYXIsTSxtYWtlSGVhcFpvbmUsY2I7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qc1wiLCBbW1wibWFrZUhlYXBab25lXCIsIFskaM2PX2EgPT4gKG1ha2VIZWFwWm9uZSA9ICRozY9fYSldXV1dLFtcIi4vY2FsbGJhY2suanNcIiwgW1tcIipcIiwgWyRozY9fYSA9PiAoY2IgPSAkaM2PX2EpXV1dXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlQ2hhaW5TdG9yYWdlUm9vdCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZUNoYWluU3RvcmFnZVJvb3RcIn0pOyRozY9fb25jZS5tYWtlQ2hhaW5TdG9yYWdlUm9vdChtYWtlQ2hhaW5TdG9yYWdlUm9vdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VTdG9yYWdlTm9kZUNoaWxkLCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlU3RvcmFnZU5vZGVDaGlsZFwifSk7JGjNj19vbmNlLm1ha2VTdG9yYWdlTm9kZUNoaWxkKG1ha2VTdG9yYWdlTm9kZUNoaWxkKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBDaGFpblN0b3JhZ2VOb2RlST1NLmludGVyZmFjZSgnU3RvcmFnZU5vZGUnLHtcbnNldFZhbHVlOk0uY2FsbFdoZW4oTS5zdHJpbmcoKSkucmV0dXJucygpLFxuZ2V0UGF0aDpNLmNhbGwoKS5yZXR1cm5zKE0uc3RyaW5nKCkpLFxuZ2V0U3RvcmVLZXk6TS5jYWxsV2hlbigpLnJldHVybnMoTS5yZWNvcmQoKSksXG5tYWtlQ2hpbGROb2RlOk0uY2FsbChNLnN0cmluZygpKS5cbm9wdGlvbmFsKE0uc3BsaXRSZWNvcmQoe30se3NlcXVlbmNlOk0uYm9vbGVhbigpfSx7fSkpLlxucmV0dXJucyhNLnJlbW90YWJsZSgnU3RvcmFnZU5vZGUnKSl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNTdHJlYW1DZWxsPShjZWxsKT0+XG5jZWxsJiZcbnR5cGVvZiBjZWxsPT09J29iamVjdCcmJlxuQXJyYXkuaXNBcnJheShjZWxsLnZhbHVlcykmJlxudHlwZW9mIGNlbGwuYmxvY2tIZWlnaHQ9PT0nc3RyaW5nJyYmXG4vXjAkfF5bMS05XVswLTldKiQvLnRlc3QoY2VsbC5ibG9ja0hlaWdodCk7JGjNj19vbmNlLmlzU3RyZWFtQ2VsbChpc1N0cmVhbUNlbGwpO1xuaGFyZGVuKGlzU3RyZWFtQ2VsbCk7XG5cbi8vXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDYXBEYXRhPShkYXRhKT0+e1xuYXNzZXJ0LnR5cGVvZihkYXRhLCdvYmplY3QnKTtcbmFzc2VydChkYXRhKTtcbmFzc2VydC50eXBlb2YoZGF0YS5ib2R5LCdzdHJpbmcnKTtcbmFzc2VydChBcnJheS5pc0FycmF5KGRhdGEuc2xvdHMpKTtcbi8vXG4gfTskaM2PX29uY2UuYXNzZXJ0Q2FwRGF0YShhc3NlcnRDYXBEYXRhKTtcbmhhcmRlbihhc3NlcnRDYXBEYXRhKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHBhdGhTZWdtZW50UGF0dGVybj0vXlthLXpBLVowLTlfLV17MSwxMDB9JC87XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQYXRoU2VnbWVudD0obmFtZSk9PntcbnBhdGhTZWdtZW50UGF0dGVybi50ZXN0KG5hbWUpfHxcbkZhaWwgYFBhdGggc2VnbWVudCBuYW1lcyBtdXN0IGNvbnNpc3Qgb2YgMSB0byAxMDAgY2hhcmFjdGVycyBsaW1pdGVkIHRvIEFTQ0lJIGFscGhhbnVtZXJpY3MsIHVuZGVyc2NvcmVzLCBhbmQvb3IgZGFzaGVzOiAke25hbWV9YDtcbiB9OyRozY9fb25jZS5hc3NlcnRQYXRoU2VnbWVudChhc3NlcnRQYXRoU2VnbWVudCk7XG5oYXJkZW4oYXNzZXJ0UGF0aFNlZ21lbnQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZT0oem9uZSk9Pntcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VDaGFpblN0b3JhZ2VOb2RlPXpvbmUuZXhvQ2xhc3MoXG4nQ2hhaW5TdG9yYWdlTm9kZScsXG5DaGFpblN0b3JhZ2VOb2RlSSxcbi8qXG5cblxuXG5cblxuXG4gICAgICovXG4obWVzc2VuZ2VyLHBhdGgse3NlcXVlbmNlPWZhbHNlfT17fSk9PntcbmFzc2VydC50eXBlb2YocGF0aCwnc3RyaW5nJyk7XG5hc3NlcnQudHlwZW9mKHNlcXVlbmNlLCdib29sZWFuJyk7XG5yZXR1cm4gaGFyZGVuKHtwYXRoLG1lc3NlbmdlcixzZXF1ZW5jZX0pO1xuIH0sXG57XG5nZXRQYXRoKCl7XG5yZXR1cm4gdGhpcy5zdGF0ZS5wYXRoO1xuIH0sXG4vKlxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgZ2V0U3RvcmVLZXkoKXtcbmNvbnN0e3BhdGgsbWVzc2VuZ2VyfT10aGlzLnN0YXRlO1xucmV0dXJuIGNiLmNhbGxFKG1lc3Nlbmdlcix7XG5tZXRob2Q6J2dldFN0b3JlS2V5JyxcbmFyZ3M6W3BhdGhdfSk7XG5cbiB9LFxuLypcblxuXG5cblxuICAgICAgICovXG5tYWtlQ2hpbGROb2RlKG5hbWUsY2hpbGROb2RlT3B0aW9ucz17fSl7XG5jb25zdHtzZXF1ZW5jZSxwYXRoLG1lc3Nlbmdlcn09dGhpcy5zdGF0ZTtcbmFzc2VydFBhdGhTZWdtZW50KG5hbWUpO1xuY29uc3QgbWVyZ2VkT3B0aW9ucz17c2VxdWVuY2UsLi4uY2hpbGROb2RlT3B0aW9uc307XG5yZXR1cm4gbWFrZUNoYWluU3RvcmFnZU5vZGUoXG5tZXNzZW5nZXIsXG4gYCR7cGF0aH0uJHtuYW1lfWAsXG5tZXJnZWRPcHRpb25zKTtcblxuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgc2V0VmFsdWUodmFsdWUpe1xuY29uc3R7c2VxdWVuY2UscGF0aCxtZXNzZW5nZXJ9PXRoaXMuc3RhdGU7XG5hc3NlcnQudHlwZW9mKHZhbHVlLCdzdHJpbmcnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGVudHJ5O1xuaWYoIXNlcXVlbmNlJiYhdmFsdWUpe1xuZW50cnk9W3BhdGhdO1xuIH1lbHNle1xuZW50cnk9W3BhdGgsdmFsdWVdO1xuIH1cbmF3YWl0IGNiLmNhbGxFKG1lc3Nlbmdlcix7XG5tZXRob2Q6c2VxdWVuY2U/J2FwcGVuZCc6J3NldCcsXG5hcmdzOltlbnRyeV19KTtcblxuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG59KTtcblxucmV0dXJuIG1ha2VDaGFpblN0b3JhZ2VOb2RlO1xuIH07JGjNj19vbmNlLnByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKHByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKTtcblxuY29uc3QgbWFrZUhlYXBDaGFpblN0b3JhZ2VOb2RlPXByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKG1ha2VIZWFwWm9uZSgpKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBtYWtlQ2hhaW5TdG9yYWdlUm9vdChcbmhhbmRsZVN0b3JhZ2VNZXNzYWdlLFxucm9vdFBhdGgsXG5yb290T3B0aW9ucz17fSlcbntcbmNvbnN0IG1lc3Nlbmdlcj1jYi5tYWtlRnVuY3Rpb25DYWxsYmFjayhoYW5kbGVTdG9yYWdlTWVzc2FnZSk7XG5cbi8vXG5jb25zdCByb290Tm9kZT1tYWtlSGVhcENoYWluU3RvcmFnZU5vZGUobWVzc2VuZ2VyLHJvb3RQYXRoLHJvb3RPcHRpb25zKTtcbnJldHVybiByb290Tm9kZTtcbiB9XG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlTnVsbFN0b3JhZ2VOb2RlPSgpPT57XG4vL1xucmV0dXJuIG1ha2VDaGFpblN0b3JhZ2VSb290KFxuRmFyKCdOdWxsTWVzc2VuZ2VyJywoKT0+bnVsbCksXG4nbnVsbCcpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5hc3luYyBmdW5jdGlvbiAgICAgICAgbWFrZVN0b3JhZ2VOb2RlQ2hpbGQoc3RvcmFnZU5vZGVSZWYsY2hpbGROYW1lKXtcbmNvbnN0IGV4aXN0aW5nU3RvcmFnZU5vZGU9YXdhaXQgc3RvcmFnZU5vZGVSZWY7XG5jb25zdCBzdG9yYWdlTm9kZT1leGlzdGluZ1N0b3JhZ2VOb2RlfHxtYWtlTnVsbFN0b3JhZ2VOb2RlKCk7XG5yZXR1cm4gRShzdG9yYWdlTm9kZSkubWFrZUNoaWxkTm9kZShjaGlsZE5hbWUpO1xuIH1cbmhhcmRlbihtYWtlU3RvcmFnZU5vZGVDaGlsZCk7XG5cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNlcmlhbGl6ZVRvU3RvcmFnZT0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbnJldHVybiBhc3luYyh2YWx1ZSk9PntcbmNvbnN0IG1hcnNoYWxsZWQ9YXdhaXQgRShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuY29uc3Qgc2VyaWFsaXplZD1KU09OLnN0cmluZ2lmeShtYXJzaGFsbGVkKTtcbnJldHVybiBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShzZXJpYWxpemVkKTtcbiB9O1xuIH07JGjNj19vbmNlLm1ha2VTZXJpYWxpemVUb1N0b3JhZ2UobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1N0cmVhbUNlbGwiOlsiaXNTdHJlYW1DZWxsIl0sImFzc2VydENhcERhdGEiOlsiYXNzZXJ0Q2FwRGF0YSJdLCJhc3NlcnRQYXRoU2VnbWVudCI6WyJhc3NlcnRQYXRoU2VnbWVudCJdLCJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSI6WyJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSJdLCJtYWtlQ2hhaW5TdG9yYWdlUm9vdCI6WyJtYWtlQ2hhaW5TdG9yYWdlUm9vdCJdLCJtYWtlU3RvcmFnZU5vZGVDaGlsZCI6WyJtYWtlU3RvcmFnZU5vZGVDaGlsZCJdLCJtYWtlU2VyaWFsaXplVG9TdG9yYWdlIjpbIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA1VW41hEQAAAREAAALAAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xL3NyYy9tYXJzaGFsLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCIuL2xpYi1jaGFpblN0b3JhZ2UuanMiXSwiZXhwb3J0cyI6WyJib2FyZFNsb3R0aW5nTWFyc2hhbGxlciIsIm1ha2VCb2FyZFJlbW90ZSIsIm1ha2VIaXN0b3J5UmV2aXZlciIsInB1cmVEYXRhTWFyc2hhbGxlciIsInNsb3RUb0JvYXJkUmVtb3RlIiwidW5tYXJzaGFsRnJvbVZzdG9yYWdlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRmFyLG1ha2VNYXJzaGFsLGlzU3RyZWFtQ2VsbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wibWFrZU1hcnNoYWxcIiwgWyRozY9fYSA9PiAobWFrZU1hcnNoYWwgPSAkaM2PX2EpXV1dXSxbXCIuL2xpYi1jaGFpblN0b3JhZ2UuanNcIiwgW1tcImlzU3RyZWFtQ2VsbFwiLCBbJGjNj19hID0+IChpc1N0cmVhbUNlbGwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VCb2FyZFJlbW90ZT0oe2JvYXJkSWQsaWZhY2V9KT0+e1xuY29uc3Qgbm9uYWxsZWdlZD1pZmFjZT9pZmFjZS5yZXBsYWNlKC9eQWxsZWdlZDogLywnJyk6Jyc7XG5yZXR1cm4gRmFyKCBgQm9hcmRSZW1vdGUke25vbmFsbGVnZWR9YCx7Z2V0Qm9hcmRJZDooKT0+Ym9hcmRJZH0pO1xuIH07XG5cbi8qXG5cblxuICovJGjNj19vbmNlLm1ha2VCb2FyZFJlbW90ZShtYWtlQm9hcmRSZW1vdGUpO1xuY29uc3QgICAgICAgIHNsb3RUb0JvYXJkUmVtb3RlPShib2FyZElkLGlmYWNlKT0+XG5tYWtlQm9hcmRSZW1vdGUoe2JvYXJkSWQsaWZhY2V9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5zbG90VG9Cb2FyZFJlbW90ZShzbG90VG9Cb2FyZFJlbW90ZSk7XG5jb25zdCBib2FyZFZhbFRvU2xvdD0odmFsKT0+e1xuaWYoJ2dldEJvYXJkSWQnaW4gdmFsKXtcbnJldHVybiB2YWwuZ2V0Qm9hcmRJZCgpO1xuIH1cbnRocm93IEZhaWwgYHVua25vd24gb2JqIGluIGJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyLnZhbFRvU2xvdCAke3ZhbH1gO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBib2FyZFNsb3R0aW5nTWFyc2hhbGxlcj0oc2xvdFRvVmFsPXVuZGVmaW5lZCk9PntcbnJldHVybiBtYWtlTWFyc2hhbChib2FyZFZhbFRvU2xvdCxzbG90VG9WYWwse1xuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pO1xuXG4gfTtcblxuLy9cbi8vXG4vKlxuXG5cbiAqLyRozY9fb25jZS5ib2FyZFNsb3R0aW5nTWFyc2hhbGxlcihib2FyZFNsb3R0aW5nTWFyc2hhbGxlcik7XG5jb25zdCBhc3NlcnRDYXBEYXRhPShkYXRhKT0+e1xuYXNzZXJ0LnR5cGVvZihkYXRhLCdvYmplY3QnKTtcbmFzc2VydChkYXRhKTtcbmFzc2VydC50eXBlb2YoZGF0YS5ib2R5LCdzdHJpbmcnKTtcbmFzc2VydChBcnJheS5pc0FycmF5KGRhdGEuc2xvdHMpKTtcbi8vXG4gfTtcbmhhcmRlbihhc3NlcnRDYXBEYXRhKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdW5tYXJzaGFsRnJvbVZzdG9yYWdlPShkYXRhLGtleSxmcm9tQ2FwRGF0YSxpbmRleCk9PntcbmNvbnN0IHNlcmlhbGl6ZWQ9ZGF0YS5nZXQoa2V5KXx8RmFpbCBgbm8gZGF0YSBmb3IgJHtrZXl9YDtcbmFzc2VydC50eXBlb2Yoc2VyaWFsaXplZCwnc3RyaW5nJyk7XG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcblxuY29uc3Qgc3RyZWFtQ2VsbD1KU09OLnBhcnNlKHNlcmlhbGl6ZWQpO1xuaWYoIWlzU3RyZWFtQ2VsbChzdHJlYW1DZWxsKSl7XG50aHJvdyBGYWlsIGBub3QgYSBTdHJlYW1DZWxsOiAke3N0cmVhbUNlbGx9YDtcbiB9XG5cbmNvbnN0e3ZhbHVlc309c3RyZWFtQ2VsbDtcbnZhbHVlcy5sZW5ndGg+MHx8RmFpbCBgbm8gU3RyZWFtQ2VsbCB2YWx1ZXM6ICR7c3RyZWFtQ2VsbH1gO1xuXG5jb25zdCBtYXJzaGFsbGVkPXZhbHVlcy5hdChpbmRleCk7XG5hc3NlcnQudHlwZW9mKG1hcnNoYWxsZWQsJ3N0cmluZycpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNhcERhdGE9aGFyZGVuKEpTT04ucGFyc2UobWFyc2hhbGxlZCkpO1xuYXNzZXJ0Q2FwRGF0YShjYXBEYXRhKTtcblxuY29uc3QgdW5tYXJzaGFsbGVkPWZyb21DYXBEYXRhKGNhcERhdGEpO1xucmV0dXJuIHVubWFyc2hhbGxlZDtcbiB9OyRozY9fb25jZS51bm1hcnNoYWxGcm9tVnN0b3JhZ2UodW5tYXJzaGFsRnJvbVZzdG9yYWdlKTtcbmhhcmRlbih1bm1hcnNoYWxGcm9tVnN0b3JhZ2UpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSGlzdG9yeVJldml2ZXI9KGVudHJpZXMsc2xvdFRvVmFsPXVuZGVmaW5lZCk9PntcbmNvbnN0IGJvYXJkPWJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyKHNsb3RUb1ZhbCk7XG5jb25zdCB2c01hcD1uZXcgTWFwKGVudHJpZXMpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBmcm9tQ2FwRGF0YT0oLi4uYXJncyk9PlxuUmVmbGVjdC5hcHBseShib2FyZC5mcm9tQ2FwRGF0YSxib2FyZCxhcmdzKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdldEl0ZW09KGtleSk9PnVubWFyc2hhbEZyb21Wc3RvcmFnZSh2c01hcCxrZXksZnJvbUNhcERhdGEsLTEpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2hpbGRyZW49KHByZWZpeCk9PntcbnByZWZpeC5lbmRzV2l0aCgnLicpfHxGYWlsIGBwcmVmaXggbXVzdCBlbmQgd2l0aCAnLidgO1xucmV0dXJuIGhhcmRlbihbXG4uLi5uZXcgU2V0KFxuZW50cmllcy5cbm1hcCgoW2ssX10pPT5rKS5cbmZpbHRlcigoayk9Pmsuc3RhcnRzV2l0aChwcmVmaXgpKS5cbm1hcCgoayk9Pmsuc2xpY2UocHJlZml4Lmxlbmd0aCkuc3BsaXQoJy4nKVswXSkpXSk7XG5cblxuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaGFzPShrKT0+dnNNYXAuZ2V0KGspIT09dW5kZWZpbmVkO1xuXG5yZXR1cm4gaGFyZGVuKHtnZXRJdGVtLGNoaWxkcmVuLGhhc30pO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5tYWtlSGlzdG9yeVJldml2ZXIobWFrZUhpc3RvcnlSZXZpdmVyKTtcbmNvbnN0IHJlamVjdE9DYXA9KGNhcCk9PkZhaWwgYCR7Y2FwfSBpcyBub3QgcHVyZSBkYXRhYDtcbmNvbnN0ICAgICAgICBwdXJlRGF0YU1hcnNoYWxsZXI9bWFrZU1hcnNoYWwocmVqZWN0T0NhcCxyZWplY3RPQ2FwLHtcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KTskaM2PX29uY2UucHVyZURhdGFNYXJzaGFsbGVyKHB1cmVEYXRhTWFyc2hhbGxlcik7XG5cbmhhcmRlbihwdXJlRGF0YU1hcnNoYWxsZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUJvYXJkUmVtb3RlIjpbIm1ha2VCb2FyZFJlbW90ZSJdLCJzbG90VG9Cb2FyZFJlbW90ZSI6WyJzbG90VG9Cb2FyZFJlbW90ZSJdLCJib2FyZFNsb3R0aW5nTWFyc2hhbGxlciI6WyJib2FyZFNsb3R0aW5nTWFyc2hhbGxlciJdLCJ1bm1hcnNoYWxGcm9tVnN0b3JhZ2UiOlsidW5tYXJzaGFsRnJvbVZzdG9yYWdlIl0sIm1ha2VIaXN0b3J5UmV2aXZlciI6WyJtYWtlSGlzdG9yeVJldml2ZXIiXSwicHVyZURhdGFNYXJzaGFsbGVyIjpbInB1cmVEYXRhTWFyc2hhbGxlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC2vSFeawgAAGsIAAAxAAAAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE4LjEvc3JjL21ldGhvZC10b29scy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIl0sImV4cG9ydHMiOlsiYmluZEFsbE1ldGhvZHMiLCJnZXRNZXRob2ROYW1lcyIsImdldFN0cmluZ01ldGhvZE5hbWVzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGlzT2JqZWN0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0e2dldFByb3RvdHlwZU9mLGNyZWF0ZSxmcm9tRW50cmllcyxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1cbk9iamVjdDtcbmNvbnN0e293bktleXMsYXBwbHl9PVJlZmxlY3Q7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjb21wYXJlU3RyaW5naWZpZWQ9KGEsYik9PntcbmlmKHR5cGVvZiBhPT09dHlwZW9mIGIpe1xuY29uc3QgbGVmdD1TdHJpbmcoYSk7XG5jb25zdCByaWdodD1TdHJpbmcoYik7XG4vL1xucmV0dXJuIGxlZnQ8cmlnaHQ/LTE6bGVmdD5yaWdodD8xOjA7XG4gfVxuaWYodHlwZW9mIGE9PT0nc3ltYm9sJyl7XG5hc3NlcnQodHlwZW9mIGI9PT0nc3RyaW5nJyk7XG5yZXR1cm4tMTtcbiB9XG5hc3NlcnQodHlwZW9mIGE9PT0nc3RyaW5nJyk7XG5hc3NlcnQodHlwZW9mIGI9PT0nc3ltYm9sJyk7XG5yZXR1cm4gMTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE1ldGhvZE5hbWVzPSh2YWwpPT57XG5sZXQgbGF5ZXI9dmFsO1xuY29uc3QgbmFtZXM9bmV3IFNldCgpOy8vXG53aGlsZShsYXllciE9PW51bGwmJmxheWVyIT09T2JqZWN0LnByb3RvdHlwZSl7XG4vL1xuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhsYXllcik7XG5jb25zdCBvd25OYW1lcz0vKiAgICAgICAgICAgICAgKi9vd25LZXlzKGRlc2NzKTtcbmZvcihjb25zdCBuYW1lIG9mIG93bk5hbWVzKXtcbi8vXG4vL1xuaWYodHlwZW9mIHZhbFtuYW1lXT09PSdmdW5jdGlvbicpe1xubmFtZXMuYWRkKG5hbWUpO1xuIH1cbiB9XG5pZighaXNPYmplY3QodmFsKSl7XG5icmVhaztcbiB9XG5sYXllcj1nZXRQcm90b3R5cGVPZihsYXllcik7XG4gfVxucmV0dXJuIGhhcmRlbihbLi4ubmFtZXNdLnNvcnQoY29tcGFyZVN0cmluZ2lmaWVkKSk7XG4gfTskaM2PX29uY2UuZ2V0TWV0aG9kTmFtZXMoZ2V0TWV0aG9kTmFtZXMpO1xuaGFyZGVuKGdldE1ldGhvZE5hbWVzKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRTdHJpbmdNZXRob2ROYW1lcz0odmFsKT0+XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuZ2V0TWV0aG9kTmFtZXModmFsKS5maWx0ZXIoKG5hbWUpPT50eXBlb2YgbmFtZT09PSdzdHJpbmcnKTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmdldFN0cmluZ01ldGhvZE5hbWVzKGdldFN0cmluZ01ldGhvZE5hbWVzKTtcbmNvbnN0ICAgICAgICBiaW5kQWxsTWV0aG9kcz0ob2JqKT0+XG5oYXJkZW4oXG5jcmVhdGUoXG5vYmosXG5mcm9tRW50cmllcyhcbmdldE1ldGhvZE5hbWVzKG9iaikubWFwKChuYW1lKT0+W1xubmFtZSxcbntcbnZhbHVlOigvKiAgICAgICAgICAgICAgICAgICAgKi8uLi5hcmdzKT0+XG5hcHBseShvYmpbbmFtZV0sb2JqLGFyZ3MpLFxuZW51bWVyYWJsZTp0cnVlfV0pKSkpOyRozY9fb25jZS5iaW5kQWxsTWV0aG9kcyhiaW5kQWxsTWV0aG9kcyk7XG5cblxuXG5cblxuaGFyZGVuKGJpbmRBbGxNZXRob2RzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldE1ldGhvZE5hbWVzIjpbImdldE1ldGhvZE5hbWVzIl0sImdldFN0cmluZ01ldGhvZE5hbWVzIjpbImdldFN0cmluZ01ldGhvZE5hbWVzIl0sImJpbmRBbGxNZXRob2RzIjpbImJpbmRBbGxNZXRob2RzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJoFH6+GHQAAhh0AAC4AAABAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMS9zcmMvc2VzLXV0aWxzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL3N0cmVhbSIsImplc3NpZS5qcyJdLCJleHBvcnRzIjpbIlByb21pc2VBbGxPckVycm9ycyIsImFnZ3JlZ2F0ZVRyeUZpbmFsbHkiLCJhbGxWYWx1ZXMiLCJhc3NlcnRBbGxEZWZpbmVkIiwiZGVlcGx5RnVsZmlsbGVkT2JqZWN0IiwiZm9yZXZlciIsInN5bmNocm9uaXplZFRlZSIsInVudGlsVHJ1ZSIsIndoaWxlVHJ1ZSIsIndpdGhEZWZlcnJlZENsZWFudXAiLCJ6aXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLFgsZGVlcGx5RnVsZmlsbGVkLGlzT2JqZWN0LG1ha2VQcm9taXNlS2l0LG1ha2VRdWV1ZSxhc3luY0dlbmVyYXRlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dLFtcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImRlZXBseUZ1bGZpbGxlZFwiLCBbJGjNj19hID0+IChkZWVwbHlGdWxmaWxsZWQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9zdHJlYW1cIiwgW1tcIm1ha2VRdWV1ZVwiLCBbJGjNj19hID0+IChtYWtlUXVldWUgPSAkaM2PX2EpXV1dXSxbXCJqZXNzaWUuanNcIiwgW1tcImFzeW5jR2VuZXJhdGVcIiwgWyRozY9fYSA9PiAoYXN5bmNHZW5lcmF0ZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtmcm9tRW50cmllcyxrZXlzLHZhbHVlc309T2JqZWN0O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcGx5RnVsZmlsbGVkT2JqZWN0PWFzeW5jKG9iaik9PntcbmlzT2JqZWN0KG9iail8fEZhaWwgYHBhcmFtIG11c3QgYmUgYW4gb2JqZWN0YDtcbnJldHVybiBkZWVwbHlGdWxmaWxsZWQob2JqKTtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmRlZXBseUZ1bGZpbGxlZE9iamVjdChkZWVwbHlGdWxmaWxsZWRPYmplY3QpO1xuY29uc3QgbWFrZUFnZ3JlZ2F0ZUVycm9yPVxudHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPT09J2Z1bmN0aW9uJz9cbihlcnJvcnMsbWVzc2FnZSxvcHRpb25zKT0+QWdncmVnYXRlRXJyb3IoZXJyb3JzLG1lc3NhZ2Usb3B0aW9ucyk6XG4oZXJyb3JzLG1lc3NhZ2Usb3B0aW9ucyk9PntcbnJldHVybiBtYWtlRXJyb3IobWVzc2FnZT8/J211bHRpcGxlIGVycm9ycycsdW5kZWZpbmVkLHtcbi4uLm9wdGlvbnMsXG5lcnJvcnN9KTtcblxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBQcm9taXNlQWxsT3JFcnJvcnM9YXN5bmMoaXRlbXMpPT57XG5yZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGl0ZW1zKS50aGVuKChyZXN1bHRzKT0+e1xuY29uc3QgZXJyb3JzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZXN1bHRzLmZpbHRlcigoe3N0YXR1c30pPT5zdGF0dXM9PT0ncmVqZWN0ZWQnKS5cbm1hcCgocmVzdWx0KT0+cmVzdWx0LnJlYXNvbik7XG5pZighZXJyb3JzLmxlbmd0aCl7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3Jlc3VsdHMubWFwKFxuKHJlc3VsdCk9PnJlc3VsdC52YWx1ZSkpO1xuXG4gfWVsc2UgaWYoZXJyb3JzLmxlbmd0aD09PTEpe1xudGhyb3cgZXJyb3JzWzBdO1xuIH1lbHNle1xudGhyb3cgbWFrZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gfVxuIH0pO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlQWxsT3JFcnJvcnMoUHJvbWlzZUFsbE9yRXJyb3JzKTtcbmNvbnN0ICAgICAgICBhZ2dyZWdhdGVUcnlGaW5hbGx5PWFzeW5jKHRyaWVyLGZpbmFsaXplcik9PlxudHJpZXIoKS50aGVuKFxuYXN5bmMocmVzdWx0KT0+ZmluYWxpemVyKCkudGhlbigoKT0+cmVzdWx0KSxcbmFzeW5jKHRyeUVycm9yKT0+XG5maW5hbGl6ZXIodHJ5RXJyb3IpLlxudGhlbihcbigpPT50cnlFcnJvcixcbihmaW5hbGl6ZUVycm9yKT0+bWFrZUFnZ3JlZ2F0ZUVycm9yKFt0cnlFcnJvcixmaW5hbGl6ZUVycm9yXSkpLlxuXG50aGVuKChlcnJvcik9PlByb21pc2UucmVqZWN0KGVycm9yKSkpO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hZ2dyZWdhdGVUcnlGaW5hbGx5KGFnZ3JlZ2F0ZVRyeUZpbmFsbHkpO1xuY29uc3QgICAgICAgIHdpdGhEZWZlcnJlZENsZWFudXA9YXN5bmMoZm4pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNsZWFudXBzTElGTz1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWRkQ2xlYW51cD0oY2xlYW51cCk9PntcbmNsZWFudXBzTElGTy51bnNoaWZ0KGNsZWFudXApO1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZmluYWxpemVyPWFzeW5jKGVycik9Pntcbi8vXG5jb25zdCBjbGVhbnVwUmVzdWx0cz1jbGVhbnVwc0xJRk8ubWFwKGFzeW5jKGNsZWFudXApPT57XG5hd2FpdCBudWxsO1xucmV0dXJuIGNsZWFudXAoZXJyKTtcbiB9KTtcbmF3YWl0IFByb21pc2VBbGxPckVycm9ycyhjbGVhbnVwUmVzdWx0cyk7XG4gfTtcbnJldHVybiBhZ2dyZWdhdGVUcnlGaW5hbGx5KCgpPT5mbihhZGRDbGVhbnVwKSxmaW5hbGl6ZXIpO1xuIH07XG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS53aXRoRGVmZXJyZWRDbGVhbnVwKHdpdGhEZWZlcnJlZENsZWFudXApO1xuY29uc3QgICAgICAgIGFzc2VydEFsbERlZmluZWQ9KG9iaik9PntcbmNvbnN0IG1pc3Npbmc9W107XG5mb3IoY29uc3Rba2V5LHZhbF1vZiBPYmplY3QuZW50cmllcyhvYmopKXtcbmlmKHZhbD09PXVuZGVmaW5lZCl7XG5taXNzaW5nLnB1c2goa2V5KTtcbiB9XG4gfVxuaWYobWlzc2luZy5sZW5ndGg+MCl7XG5GYWlsIGBtaXNzaW5nICR7cShtaXNzaW5nKX1gO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5hc3NlcnRBbGxEZWZpbmVkKGFzc2VydEFsbERlZmluZWQpO1xuY29uc3Qgbm90RG9uZT1oYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6dW5kZWZpbmVkfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWx3YXlzRG9uZT1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcblxuY29uc3QgICAgICAgIGZvcmV2ZXI9YXN5bmNHZW5lcmF0ZSgoKT0+bm90RG9uZSk7XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLmZvcmV2ZXIoZm9yZXZlcik7XG5jb25zdCAgICAgICAgd2hpbGVUcnVlPShwcm9kdWNlKT0+XG5hc3luY0dlbmVyYXRlKGFzeW5jKCk9PntcbmNvbnN0IHZhbHVlPWF3YWl0IHByb2R1Y2UoKTtcbmlmKCF2YWx1ZSl7XG5yZXR1cm4gYWx3YXlzRG9uZTtcbiB9XG5yZXR1cm4gaGFyZGVuKHtcbmRvbmU6ZmFsc2UsXG52YWx1ZX0pO1xuXG4gfSk7XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLndoaWxlVHJ1ZSh3aGlsZVRydWUpO1xuY29uc3QgICAgICAgIHVudGlsVHJ1ZT0ocHJvZHVjZSk9PlxuYXN5bmNHZW5lcmF0ZShhc3luYygpPT57XG5jb25zdCB2YWx1ZT1hd2FpdCBwcm9kdWNlKCk7XG5pZih2YWx1ZSl7XG5yZXR1cm4gaGFyZGVuKHtcbmRvbmU6dHJ1ZSxcbnZhbHVlfSk7XG5cbiB9XG5yZXR1cm4gaGFyZGVuKHtcbmRvbmU6ZmFsc2UsXG52YWx1ZX0pO1xuXG4gfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS51bnRpbFRydWUodW50aWxUcnVlKTtcbmNvbnN0ICAgICAgICB6aXA9KHhzLHlzKT0+aGFyZGVuKHhzLm1hcCgoeCxpKT0+W3gseXNbK2ldXSkpO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLnppcCh6aXApO1xuY29uc3QgICAgICAgIGFsbFZhbHVlcz1hc3luYyhvYmopPT57XG5jb25zdCByZXNvbHZlZD1hd2FpdCBQcm9taXNlLmFsbCh2YWx1ZXMob2JqKSk7XG4vL1xucmV0dXJuIGhhcmRlbihmcm9tRW50cmllcyh6aXAoa2V5cyhvYmopLHJlc29sdmVkKSkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hbGxWYWx1ZXMoYWxsVmFsdWVzKTtcbmNvbnN0ICAgICAgICBzeW5jaHJvbml6ZWRUZWU9KHNvdXJjZVN0cmVhbSxyZWFkZXJDb3VudCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZG9uZVJlc3VsdDtcblxuLypcblxuXG5cbiAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBxdWV1ZXM9W107XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1bGxOZXh0PWFzeW5jKCk9PntcbmNvbnN0IHJlcXVlc3RzPWF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChxdWV1ZXMubWFwKChxdWV1ZSk9PnF1ZXVlLmdldCgpKSk7XG5jb25zdCByZWplY3Rpb25zPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXNvbHZlcnM9W107XG5sZXQgZG9uZT1mYWxzZTtcbmZvcihjb25zdCBzZXR0bGVkUmVzdWx0IG9mIHJlcXVlc3RzKXtcbmlmKHNldHRsZWRSZXN1bHQuc3RhdHVzPT09J3JlamVjdGVkJyl7XG5yZWplY3Rpb25zLnB1c2goc2V0dGxlZFJlc3VsdC5yZWFzb24pO1xuIH1lbHNle1xuZG9uZXx8PSEhc2V0dGxlZFJlc3VsdC52YWx1ZS5kb25lO1xucmVzb2x2ZXJzLnB1c2goc2V0dGxlZFJlc3VsdC52YWx1ZS52YWx1ZSk7XG4gfVxuIH1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmVzdWx0O1xuaWYoZG9uZVJlc3VsdCl7XG5yZXN1bHQ9UHJvbWlzZS5yZXNvbHZlKGRvbmVSZXN1bHQpO1xuIH1lbHNlIGlmKHJlamVjdGlvbnMubGVuZ3RoKXtcbmNvbnN0IGVycm9yPW1ha2VFcnJvcihYIGBUZWVkIHN0cmVhbSB0aHJld2ApO1xuYW5ub3RhdGVFcnJvcihlcnJvcixYIGBUZWVkIHJlamVjdGlvbnM6ICR7cmVqZWN0aW9uc31gKTtcbnJlc3VsdD1cbnNvdXJjZVN0cmVhbS50aHJvdz8uKGVycm9yKXx8XG5Qcm9taXNlLnJlc29sdmUoc291cmNlU3RyZWFtLnJldHVybj8uKCkpLnRoZW4oKCk9PlxuUHJvbWlzZS5yZWplY3QoZXJyb3IpKTtcblxuIH1lbHNlIGlmKGRvbmUpe1xucmVzdWx0PVxuc291cmNlU3RyZWFtLnJldHVybj8uKCl8fFxuUHJvbWlzZS5yZXNvbHZlKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfWVsc2V7XG5yZXN1bHQ9c291cmNlU3RyZWFtLm5leHQoKTtcbiB9XG5yZXN1bHQudGhlbihcbihyKT0+e1xuaWYoci5kb25lKXtcbmRvbmVSZXN1bHQ9cjtcbiB9XG4gfSxcbigpPT57XG5kb25lUmVzdWx0PXtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfTtcbiB9KTtcblxuZm9yKGNvbnN0IHJlc29sdmUgb2YgcmVzb2x2ZXJzKXtcbnJlc29sdmUocmVzdWx0KTtcbiB9XG5yZXR1cm4gcHVsbE5leHQoKTtcbiB9O1xuXG5jb25zdCByZWFkZXJzPUFycmF5LmZyb20oe2xlbmd0aDpyZWFkZXJDb3VudH0pLm1hcCgoKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHF1ZXVlPW1ha2VRdWV1ZSgpO1xucXVldWVzLnB1c2gocXVldWUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVhZGVyPWhhcmRlbih7XG4gICAgICBhc3luYyBuZXh0KCl7XG4vKlxuXG5cblxuICAgICAgICAgKi9cbmNvbnN0e3Byb21pc2UscmVzb2x2ZX09bWFrZVByb21pc2VLaXQoKTtcbnF1ZXVlLnB1dCh7dmFsdWU6cmVzb2x2ZSxkb25lOmZhbHNlfSk7XG5yZXR1cm4gcHJvbWlzZTtcbiB9LFxuICAgICAgYXN5bmMgcmV0dXJuKCl7XG4vKlxuXG5cblxuICAgICAgICAgKi9cbmNvbnN0e3Byb21pc2UscmVzb2x2ZX09bWFrZVByb21pc2VLaXQoKTtcbnF1ZXVlLnB1dCh7dmFsdWU6cmVzb2x2ZSxkb25lOnRydWV9KTtcbnJldHVybiBwcm9taXNlO1xuIH0sXG4gICAgICBhc3luYyB0aHJvdyhyZWFzb24pe1xuY29uc3QgcmVqZWN0aW9uPVByb21pc2UucmVqZWN0KHJlYXNvbik7XG5xdWV1ZS5wdXQocmVqZWN0aW9uKTtcbnJldHVybiByZWplY3Rpb247XG4gfSxcbi8vXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7XG5yZXR1cm4gcmVhZGVyO1xuIH0sXG4vL1xuICAgICAgYXN5bmNbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKXtcbmF3YWl0IHJlYWRlci5yZXR1cm4oKTtcbiB9fSk7XG5cbnJldHVybiByZWFkZXI7XG4gfSk7XG5cbnZvaWQgcHVsbE5leHQoKTtcbnJldHVybiByZWFkZXJzO1xuIH07JGjNj19vbmNlLnN5bmNocm9uaXplZFRlZShzeW5jaHJvbml6ZWRUZWUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVlcGx5RnVsZmlsbGVkT2JqZWN0IjpbImRlZXBseUZ1bGZpbGxlZE9iamVjdCJdLCJQcm9taXNlQWxsT3JFcnJvcnMiOlsiUHJvbWlzZUFsbE9yRXJyb3JzIl0sImFnZ3JlZ2F0ZVRyeUZpbmFsbHkiOlsiYWdncmVnYXRlVHJ5RmluYWxseSJdLCJ3aXRoRGVmZXJyZWRDbGVhbnVwIjpbIndpdGhEZWZlcnJlZENsZWFudXAiXSwiYXNzZXJ0QWxsRGVmaW5lZCI6WyJhc3NlcnRBbGxEZWZpbmVkIl0sImZvcmV2ZXIiOlsiZm9yZXZlciJdLCJ3aGlsZVRydWUiOlsid2hpbGVUcnVlIl0sInVudGlsVHJ1ZSI6WyJ1bnRpbFRydWUiXSwiemlwIjpbInppcCJdLCJhbGxWYWx1ZXMiOlsiYWxsVmFsdWVzIl0sInN5bmNocm9uaXplZFRlZSI6WyJzeW5jaHJvbml6ZWRUZWUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAAnV2/RUhAAAVIQAANwAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xL3NyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIi4vZGVidWcuanMiLCIuL2Vycm9ycy5qcyIsIi4vbGliLWNoYWluU3RvcmFnZS5qcyIsIi4vbWFyc2hhbC5qcyIsIi4vbWV0aG9kLXRvb2xzLmpzIiwiLi90ZXN0aW5nLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdE1hcnNoYWxsZXIiLCJkZWZhdWx0U2VyaWFsaXplciIsImRvY3VtZW50U3RvcmFnZVNjaGVtYSIsIm1ha2VGYWtlU3RvcmFnZUtpdCIsIm1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdCIsInNsb3RTdHJpbmdVbnNlcmlhbGl6ZSIsInNsb3RUb1JlbW90YWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEZhcixtYWtlTWFyc2hhbCxSZW1vdGFibGUsbWFrZVRyYWNlcixOb25OdWxsaXNoLGlzU3RyZWFtQ2VsbCxtYWtlQ2hhaW5TdG9yYWdlUm9vdCx1bm1hcnNoYWxGcm9tVnN0b3JhZ2UsYmluZEFsbE1ldGhvZHMsZXZlbnRMb29wSXRlcmF0aW9uOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXSxbXCJSZW1vdGFibGVcIiwgWyRozY9fYSA9PiAoUmVtb3RhYmxlID0gJGjNj19hKV1dXV0sW1wiLi9kZWJ1Zy5qc1wiLCBbW1wibWFrZVRyYWNlclwiLCBbJGjNj19hID0+IChtYWtlVHJhY2VyID0gJGjNj19hKV1dXV0sW1wiLi9lcnJvcnMuanNcIiwgW1tcIk5vbk51bGxpc2hcIiwgWyRozY9fYSA9PiAoTm9uTnVsbGlzaCA9ICRozY9fYSldXV1dLFtcIi4vbGliLWNoYWluU3RvcmFnZS5qc1wiLCBbW1wiaXNTdHJlYW1DZWxsXCIsIFskaM2PX2EgPT4gKGlzU3RyZWFtQ2VsbCA9ICRozY9fYSldXSxbXCJtYWtlQ2hhaW5TdG9yYWdlUm9vdFwiLCBbJGjNj19hID0+IChtYWtlQ2hhaW5TdG9yYWdlUm9vdCA9ICRozY9fYSldXV1dLFtcIi4vbWFyc2hhbC5qc1wiLCBbW1widW5tYXJzaGFsRnJvbVZzdG9yYWdlXCIsIFskaM2PX2EgPT4gKHVubWFyc2hhbEZyb21Wc3RvcmFnZSA9ICRozY9fYSldXV1dLFtcIi4vbWV0aG9kLXRvb2xzLmpzXCIsIFtbXCJiaW5kQWxsTWV0aG9kc1wiLCBbJGjNj19hID0+IChiaW5kQWxsTWV0aG9kcyA9ICRozY9fYSldXV1dLFtcIi4vdGVzdGluZy11dGlscy5qc1wiLCBbW1wiZXZlbnRMb29wSXRlcmF0aW9uXCIsIFskaM2PX2EgPT4gKGV2ZW50TG9vcEl0ZXJhdGlvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0IHRyYWNlPW1ha2VUcmFjZXIoJ1N0b3JUVScsZmFsc2UpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNsb3RUb1JlbW90YWJsZT0oX3Nsb3RJZCxpZmFjZT0nUmVtb3RhYmxlJyk9PlxuUmVtb3RhYmxlKGlmYWNlKTtcblxuLypcblxuXG4gKi8kaM2PX29uY2Uuc2xvdFRvUmVtb3RhYmxlKHNsb3RUb1JlbW90YWJsZSk7XG5jb25zdCAgICAgICAgZGVmYXVsdE1hcnNoYWxsZXI9bWFrZU1hcnNoYWwodW5kZWZpbmVkLHNsb3RUb1JlbW90YWJsZSx7XG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cblxuLypcblxuICovJGjNj19vbmNlLmRlZmF1bHRNYXJzaGFsbGVyKGRlZmF1bHRNYXJzaGFsbGVyKTtcbmNvbnN0ICAgICAgICBkZWZhdWx0U2VyaWFsaXplcj17XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wYXJzZToodHh0KT0+ZGVmYXVsdE1hcnNoYWxsZXIuZnJvbUNhcERhdGEoSlNPTi5wYXJzZSh0eHQpKSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5zdHJpbmdpZnk6KG9iaik9PkpTT04uc3RyaW5naWZ5KGRlZmF1bHRNYXJzaGFsbGVyLnRvQ2FwRGF0YShvYmopKX07XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVmYXVsdFNlcmlhbGl6ZXIoZGVmYXVsdFNlcmlhbGl6ZXIpO1xuY29uc3QgbWFrZVNsb3RTdHJpbmdVbnNlcmlhbGl6ZT0oKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpZGVudGl0eVNsb3RUb1ZhbEZuPShzbG90LF8pPT5GYXIoJ3Vuaycse3RvSlNPTjooKT0+c2xvdH0pO1xuY29uc3R7ZnJvbUNhcERhdGF9PW1ha2VNYXJzaGFsKHVuZGVmaW5lZCxpZGVudGl0eVNsb3RUb1ZhbEZuKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdW5zZXJpYWxpemU9KGNhcERhdGEpPT5cbkpTT04ucGFyc2UoXG5KU09OLnN0cmluZ2lmeShmcm9tQ2FwRGF0YShjYXBEYXRhKSwoXyx2YWwpPT57XG5pZih0eXBlb2YgdmFsPT09J2JpZ2ludCcpe1xuLy9cbi8vXG5yZXR1cm4gYEBlbmNyb211bGF0ZToke3ZhbH1gO1xuIH1lbHNle1xucmV0dXJuIHZhbDtcbiB9XG4gfSksXG4oX2tleSx2YWwpPT57XG5pZih0eXBlb2YgdmFsPT09J3N0cmluZycmJnZhbC5zdGFydHNXaXRoKCdAZW5jcm9tdWxhdGUnKSl7XG5yZXR1cm4gQmlnSW50KHZhbC5zcGxpdCgnOicpWzFdKTtcbiB9ZWxzZXtcbnJldHVybiB2YWw7XG4gfVxuIH0pO1xuXG5yZXR1cm4gaGFyZGVuKHVuc2VyaWFsaXplKTtcbiB9O1xuY29uc3QgICAgICAgIHNsb3RTdHJpbmdVbnNlcmlhbGl6ZT1tYWtlU2xvdFN0cmluZ1Vuc2VyaWFsaXplKCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2Uuc2xvdFN0cmluZ1Vuc2VyaWFsaXplKHNsb3RTdHJpbmdVbnNlcmlhbGl6ZSk7XG5jb25zdCAgICAgICAgbWFrZUZha2VTdG9yYWdlS2l0PShyb290UGF0aCxyb290T3B0aW9ucyk9PntcbmNvbnN0IHJlc29sdmVkT3B0aW9ucz17c2VxdWVuY2U6dHJ1ZSwuLi5yb290T3B0aW9uc307XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRhdGE9bmV3IE1hcCgpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdldENoaWxkRW50cmllcz0ocHJlZml4KT0+e1xuYXNzZXJ0KHByZWZpeC5lbmRzV2l0aCgnLicpKTtcbmNvbnN0IGNoaWxkRW50cmllcz1uZXcgTWFwKCk7XG5mb3IoY29uc3RbcGF0aCx2YWx1ZV1vZiBkYXRhLmVudHJpZXMoKSl7XG5pZighcGF0aC5zdGFydHNXaXRoKHByZWZpeCkpe1xuY29udGludWU7XG4gfVxuY29uc3Rbc2VnbWVudCwuLi5zdWZmaXhdPXBhdGguc2xpY2UocHJlZml4Lmxlbmd0aCkuc3BsaXQoJy4nKTtcbmlmKHN1ZmZpeC5sZW5ndGg9PT0wKXtcbmNoaWxkRW50cmllcy5zZXQoc2VnbWVudCx2YWx1ZSk7XG4gfWVsc2UgaWYoIWNoaWxkRW50cmllcy5oYXMoc2VnbWVudCkpe1xuY2hpbGRFbnRyaWVzLnNldChzZWdtZW50LG51bGwpO1xuIH1cbiB9XG5yZXR1cm4gY2hpbGRFbnRyaWVzO1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtZXNzYWdlcz1bXTtcblxuY29uc3QgdG9TdG9yYWdlPUZhcihcbidUb1N0b3JhZ2UnLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbihtZXNzYWdlKT0+e1xubWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbnN3aXRjaChtZXNzYWdlLm1ldGhvZCl7XG5jYXNlJ2dldFN0b3JlS2V5Jzp7XG5jb25zdFtrZXldPW1lc3NhZ2UuYXJncztcbnJldHVybntzdG9yZU5hbWU6J3N3aW5nc2V0JyxzdG9yZVN1YmtleTogYGZha2U6JHtrZXl9YH07XG4gfVxuY2FzZSdnZXQnOntcbmNvbnN0W2tleV09bWVzc2FnZS5hcmdzO1xucmV0dXJuIGRhdGEuaGFzKGtleSk/ZGF0YS5nZXQoa2V5KTpudWxsO1xuIH1cbmNhc2UnY2hpbGRyZW4nOntcbmNvbnN0W2tleV09bWVzc2FnZS5hcmdzO1xuY29uc3QgY2hpbGRFbnRyaWVzPWdldENoaWxkRW50cmllcyggYCR7a2V5fS5gKTtcbnJldHVyblsuLi5jaGlsZEVudHJpZXMua2V5cygpXTtcbiB9XG5jYXNlJ2VudHJpZXMnOntcbmNvbnN0W2tleV09bWVzc2FnZS5hcmdzO1xuY29uc3QgY2hpbGRFbnRyaWVzPWdldENoaWxkRW50cmllcyggYCR7a2V5fS5gKTtcbnJldHVyblsuLi5jaGlsZEVudHJpZXMuZW50cmllcygpXS5tYXAoKGVudHJ5KT0+XG5lbnRyeVsxXSE9bnVsbD9lbnRyeTpbZW50cnlbMF1dKTtcblxuIH1cbmNhc2Unc2V0JzpcbmNhc2Unc2V0V2l0aG91dE5vdGlmeSc6e1xudHJhY2UoJ3RvU3RvcmFnZSBzZXQnLG1lc3NhZ2UpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5ld0VudHJpZXM9bWVzc2FnZS5hcmdzO1xuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBuZXdFbnRyaWVzKXtcbmlmKHZhbHVlIT1udWxsKXtcbmRhdGEuc2V0KGtleSx2YWx1ZSk7XG4gfWVsc2V7XG5kYXRhLmRlbGV0ZShrZXkpO1xuIH1cbiB9XG5icmVhaztcbiB9XG5jYXNlJ2FwcGVuZCc6e1xudHJhY2UoJ3RvU3RvcmFnZSBhcHBlbmQnLG1lc3NhZ2UpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5ld0VudHJpZXM9bWVzc2FnZS5hcmdzO1xuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBuZXdFbnRyaWVzKXtcbnZhbHVlIT1udWxsfHxGYWlsIGBhdHRlbXB0IHRvIGFwcGVuZCB3aXRoIG5vIHZhbHVlYDtcbi8vXG5jb25zdCBvbGRWYWw9ZGF0YS5nZXQoa2V5KTtcbmxldCBzdHJlYW1DZWxsO1xuaWYob2xkVmFsIT1udWxsKXtcbnRyeXtcbnN0cmVhbUNlbGw9SlNPTi5wYXJzZShvbGRWYWwpO1xuYXNzZXJ0KGlzU3RyZWFtQ2VsbChzdHJlYW1DZWxsKSk7XG4gfWNhdGNoKF9lcnIpe1xuc3RyZWFtQ2VsbD11bmRlZmluZWQ7XG4gfVxuIH1cbmlmKHN0cmVhbUNlbGw9PT11bmRlZmluZWQpe1xuc3RyZWFtQ2VsbD17XG5ibG9ja0hlaWdodDonMCcsXG52YWx1ZXM6b2xkVmFsIT1udWxsP1tvbGRWYWxdOltdfTtcblxuIH1cbnN0cmVhbUNlbGwudmFsdWVzLnB1c2godmFsdWUpO1xuZGF0YS5zZXQoa2V5LEpTT04uc3RyaW5naWZ5KHN0cmVhbUNlbGwpKTtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3NpemUnOlxuLy9cbi8vXG5yZXR1cm5bLi4uZGF0YS5rZXlzKCldLmZpbHRlcigoayk9Plxuay5zdGFydHNXaXRoKCBgJHttZXNzYWdlLmFyZ3NbMF19LmApKS5cbmxlbmd0aDtcbmRlZmF1bHQ6XG50aHJvdyBFcnJvciggYHVuc3VwcG9ydGVkIG1ldGhvZDogJHttZXNzYWdlLm1ldGhvZH1gKTt9XG5cbiB9KTtcblxuY29uc3Qgcm9vdE5vZGU9bWFrZUNoYWluU3RvcmFnZVJvb3QodG9TdG9yYWdlLHJvb3RQYXRoLHJlc29sdmVkT3B0aW9ucyk7XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBnZXRWYWx1ZXM9KHBhdGgpPT57XG5hc3NlcnQocmVzb2x2ZWRPcHRpb25zLnNlcXVlbmNlKTtcbmNvbnN0IG5vZGVEYXRhPWRhdGEuZ2V0KHBhdGgpO1xuYXNzZXJ0KG5vZGVEYXRhLCBgbm8gZGF0YSBhdCBwYXRoICR7cGF0aH1gKTtcbmNvbnN0IHdyYXBwZXI9SlNPTi5wYXJzZShub2RlRGF0YSk7XG5yZXR1cm4gd3JhcHBlci52YWx1ZXM7XG4gfTtcblxucmV0dXJue1xucm9vdE5vZGUsXG4vL1xuZGF0YTovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovZGF0YSxcbmdldFZhbHVlcyxcbm1lc3NhZ2VzLFxudG9TdG9yYWdlfTtcblxuIH07JGjNj19vbmNlLm1ha2VGYWtlU3RvcmFnZUtpdChtYWtlRmFrZVN0b3JhZ2VLaXQpO1xuaGFyZGVuKG1ha2VGYWtlU3RvcmFnZUtpdCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdD0oKT0+e1xuY29uc3R7cm9vdE5vZGUsZGF0YX09bWFrZUZha2VTdG9yYWdlS2l0KCdtb2NrQ2hhaW5TdG9yYWdlUm9vdCcpO1xucmV0dXJuIEZhcignbW9ja0NoYWluU3RvcmFnZScse1xuLi4uYmluZEFsbE1ldGhvZHMocm9vdE5vZGUpLFxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmdldEJvZHk6KHBhdGgsbWFyc2hhbGxlcj1kZWZhdWx0TWFyc2hhbGxlcixpbmRleD0tMSk9PntcbmRhdGEuc2l6ZXx8RmFpbCBgbm8gZGF0YSBpbiBzdG9yYWdlYDtcbi8qXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGZyb21DYXBEYXRhPSguLi5hcmdzKT0+XG5SZWZsZWN0LmFwcGx5KG1hcnNoYWxsZXIuZnJvbUNhcERhdGEsbWFyc2hhbGxlcixhcmdzKTtcbnJldHVybiB1bm1hcnNoYWxGcm9tVnN0b3JhZ2UoZGF0YSxwYXRoLGZyb21DYXBEYXRhLGluZGV4KTtcbiB9LFxua2V5czooKT0+Wy4uLmRhdGEua2V5cygpXX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlTW9ja0NoYWluU3RvcmFnZVJvb3QobWFrZU1vY2tDaGFpblN0b3JhZ2VSb290KTtcbmNvbnN0ICAgICAgICBkb2N1bWVudFN0b3JhZ2VTY2hlbWE9YXN5bmModCxzdG9yYWdlLG9wdHMpPT57XG4vL1xuYXdhaXQgZXZlbnRMb29wSXRlcmF0aW9uKCk7XG5cbmNvbnN0IGdldExhc3Q9KC8qICAgICAgICAgICAgICAgICAqL2NlbGwpPT5cbkpTT04ucGFyc2UoY2VsbCkudmFsdWVzLmF0KC0xKXx8YXNzZXJ0LmZhaWwoKTtcbmNvbnN0e3Nob3dWYWx1ZT0ocyk9PnN9PW9wdHM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBnZXRCb2R5RGVmYXVsdD0oZCxrKT0+c2hvd1ZhbHVlKGdldExhc3QoTm9uTnVsbGlzaChkLmdldChrKSkpKTtcblxuY29uc3Rba2V5cyxnZXRCb2R5XT1cbidrZXlzJ2luIHN0b3JhZ2U/XG5bc3RvcmFnZS5rZXlzKCksKC8qICAgICAgICAgICAgICAgICAqL2spPT5zdG9yYWdlLmdldEJvZHkoayldOlxuW1xuc3RvcmFnZS5kYXRhLmtleXMoKSxcbigvKiAgICAgICAgICAgICAgICAgKi9rKT0+Z2V0Qm9keURlZmF1bHQoc3RvcmFnZS5kYXRhLGspXTtcblxuXG5jb25zdHtwYXR0ZXJuLHJlcGxhY2VtZW50fT1cbidwYXR0ZXJuJ2luIG9wdHM/XG5vcHRzOlxue3BhdHRlcm46J21vY2tDaGFpblN0b3JhZ2VSb290LicscmVwbGFjZW1lbnQ6J3B1Ymxpc2hlZC4nfTtcblxuY29uc3QgcHJ1bmVkPVsuLi5rZXlzXS5cbnNvcnQoKS5cbmZpbHRlcihcbidub2RlJ2luIG9wdHM/XG4oa2V5KT0+XG5rZXkuXG5yZXBsYWNlKHBhdHRlcm4scmVwbGFjZW1lbnQpLlxuc3RhcnRzV2l0aCggYHB1Ymxpc2hlZC4ke29wdHMubm9kZX1gKTpcbihfZW50cnkpPT50cnVlKTtcblxuXG5jb25zdCBpbGx1c3RyYXRpb249cHJ1bmVkLm1hcChcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4oa2V5KT0+W2tleS5yZXBsYWNlKHBhdHRlcm4scmVwbGFjZW1lbnQpLGdldEJvZHkoa2V5KV0pO1xuXG5cbmNvbnN0IG5vdGU9XG4nbm90ZSdpbiBvcHRzP1xub3B0cy5ub3RlOlxuIGBVbmRlciBcInB1Ymxpc2hlZFwiLCB0aGUgXCIke29wdHMubm9kZX1cIiBub2RlIGlzIGRlbGVnYXRlZCB0byAke29wdHMub3duZXJ9LmA7XG5jb25zdCBib2lsZXJwbGF0ZT0gYFxuVGhlIGV4YW1wbGUgYmVsb3cgaWxsdXN0cmF0ZXMgdGhlIHNjaGVtYSBvZiB0aGUgZGF0YSBwdWJsaXNoZWQgdGhlcmUuXG5cblNlZSBhbHNvIGJvYXJkIG1hcnNoYWxsaW5nIGNvbnZlbnRpb25zIChfdG8gYXBwZWFyXykuYDtcbnQuc25hcHNob3QoaWxsdXN0cmF0aW9uLG5vdGUrYm9pbGVycGxhdGUpO1xuIH07JGjNj19vbmNlLmRvY3VtZW50U3RvcmFnZVNjaGVtYShkb2N1bWVudFN0b3JhZ2VTY2hlbWEpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2xvdFRvUmVtb3RhYmxlIjpbInNsb3RUb1JlbW90YWJsZSJdLCJkZWZhdWx0TWFyc2hhbGxlciI6WyJkZWZhdWx0TWFyc2hhbGxlciJdLCJkZWZhdWx0U2VyaWFsaXplciI6WyJkZWZhdWx0U2VyaWFsaXplciJdLCJzbG90U3RyaW5nVW5zZXJpYWxpemUiOlsic2xvdFN0cmluZ1Vuc2VyaWFsaXplIl0sIm1ha2VGYWtlU3RvcmFnZUtpdCI6WyJtYWtlRmFrZVN0b3JhZ2VLaXQiXSwibWFrZU1vY2tDaGFpblN0b3JhZ2VSb290IjpbIm1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdCJdLCJkb2N1bWVudFN0b3JhZ2VTY2hlbWEiOlsiZG9jdW1lbnRTdG9yYWdlU2NoZW1hIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEn5UEUhBgAAIQYAADIAAABAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMS9zcmMvdGVzdGluZy11dGlscy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZXZlbnRMb29wSXRlcmF0aW9uIiwiaW5zcGVjdE1hcFN0b3JlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLypcblxuXG4gKi9cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlbnRMb29wSXRlcmF0aW9uPWFzeW5jKCk9PlxubmV3IFByb21pc2UoKHJlc29sdmUpPT5zZXRJbW1lZGlhdGUocmVzb2x2ZSkpOyRozY9fb25jZS5ldmVudExvb3BJdGVyYXRpb24oZXZlbnRMb29wSXRlcmF0aW9uKTtcbmhhcmRlbihldmVudExvb3BJdGVyYXRpb24pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdPclRhZz0odmFsdWUpPT57XG5pZih0eXBlb2YgdmFsdWU9PT0nc3RyaW5nJyl7XG5yZXR1cm4gdmFsdWU7XG4gfWVsc2UgaWYodHlwZW9mIHZhbHVlPT09J29iamVjdCcmJlN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZSl7XG5yZXR1cm4gdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiB9XG5yZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiB9O1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpbnNwZWN0TWFwU3RvcmU9KHN0b3JlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9iaj17fTtcbmZvcihjb25zdCBrZXkgb2Ygc3RvcmUua2V5cygpKXtcbmNvbnN0IHZhbHVlPXN0b3JlLmdldChrZXkpO1xuY29uc3QgaGFzS2V5cz10eXBlb2YgdmFsdWU9PT0nb2JqZWN0JyYmJ2tleXMnaW4gdmFsdWU7XG5jb25zdCBpbmRleD1zdHJpbmdPclRhZyhrZXkpO1xuaWYoaGFzS2V5cyYmJ2dldCdpbiB2YWx1ZSl7XG5vYmpbaW5kZXhdPWluc3BlY3RNYXBTdG9yZSh2YWx1ZSk7XG4gfWVsc2UgaWYoaGFzS2V5cyl7XG5vYmpbaW5kZXhdPUFycmF5LmZyb20odmFsdWUua2V5cygpKTtcbiB9ZWxzZXtcbm9ialtpbmRleF09XG52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCYmU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlP1xudmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXTpcbnZhbHVlO1xuIH1cbiB9XG5yZXR1cm4gb2JqO1xuIH07JGjNj19vbmNlLmluc3BlY3RNYXBTdG9yZShpbnNwZWN0TWFwU3RvcmUpO1xuaGFyZGVuKGluc3BlY3RNYXBTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJldmVudExvb3BJdGVyYXRpb24iOlsiZXZlbnRMb29wSXRlcmF0aW9uIl0sImluc3BlY3RNYXBTdG9yZSI6WyJpbnNwZWN0TWFwU3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh6paIP0CAAD9AgAALgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xL3NyYy90eXBlQ2hlY2suanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJjYXN0IiwibXVzdE1hdGNoIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHR5cGVsZXNzTXVzdE1hdGNoOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+ICh0eXBlbGVzc011c3RNYXRjaCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLypcblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG11c3RNYXRjaD10eXBlbGVzc011c3RNYXRjaDtcblxuLypcblxuXG5cblxuICovJGjNj19vbmNlLm11c3RNYXRjaChtdXN0TWF0Y2gpO1xuY29uc3QgICAgICAgIGNhc3Q9KHNwZWNpbWVuLHBhdHQpPT57XG4vL1xuLy9cbi8vXG5tdXN0TWF0Y2goc3BlY2ltZW4scGF0dCk7XG5yZXR1cm4gc3BlY2ltZW47XG4gfTskaM2PX29uY2UuY2FzdChjYXN0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im11c3RNYXRjaCI6WyJtdXN0TWF0Y2giXSwiY2FzdCI6WyJjYXN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKKVARBOAwAATgMAAC8AAABAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMS9zcmMvdHlwZUd1YXJkcy5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIlN0b3JhZ2VOb2RlU2hhcGUiLCJVbmd1YXJkZWRIZWxwZXJJIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE07JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbmNvbnN0ICAgICAgICBTdG9yYWdlTm9kZVNoYXBlPU0ucmVtb3RhYmxlKCdTdG9yYWdlTm9kZScpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuU3RvcmFnZU5vZGVTaGFwZShTdG9yYWdlTm9kZVNoYXBlKTtcbmNvbnN0ICAgICAgICBVbmd1YXJkZWRIZWxwZXJJPU0uaW50ZXJmYWNlKFxuJ2hlbHBlcicsXG57fSxcbi8vXG57c2xvcHB5OnRydWV9KTskaM2PX29uY2UuVW5ndWFyZGVkSGVscGVySShVbmd1YXJkZWRIZWxwZXJJKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlN0b3JhZ2VOb2RlU2hhcGUiOlsiU3RvcmFnZU5vZGVTaGFwZSJdLCJVbmd1YXJkZWRIZWxwZXJJIjpbIlVuZ3VhcmRlZEhlbHBlckkiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAMAAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xL3NyYy90eXBlcy1pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAm4dBahIHAAASBwAAMAAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xL3NyYy91cGdyYWRlLWFwaS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUiLCJpc0FiYW5kb25lZEVycm9yIiwiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiIsIm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBNLG1hdGNoZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNvbnN0e2lzRnJvemVufT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlPWhhcmRlbih7XG5uYW1lOid2YXRVcGdyYWRlZCcsXG51cGdyYWRlTWVzc2FnZTpNLnN0cmluZygpLFxuaW5jYXJuYXRpb25OdW1iZXI6TS5udW1iZXIoKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZShVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlKTtcbmNvbnN0ICAgICAgICBtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb249KHVwZ3JhZGVNZXNzYWdlLHRvSW5jYXJuYXRpb25OdW1iZXIpPT5cbmhhcmRlbih7XG5uYW1lOid2YXRVcGdyYWRlZCcsXG51cGdyYWRlTWVzc2FnZSxcbmluY2FybmF0aW9uTnVtYmVyOnRvSW5jYXJuYXRpb25OdW1iZXJ9KTskaM2PX29uY2UubWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uKG1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5cbmhhcmRlbihtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24pO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1VwZ3JhZGVEaXNjb25uZWN0aW9uPShyZWFzb24pPT5cbnJlYXNvbiE9bnVsbCYmLy9cbmlzRnJvemVuKHJlYXNvbikmJlxubWF0Y2hlcyhyZWFzb24sVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSk7JGjNj19vbmNlLmlzVXBncmFkZURpc2Nvbm5lY3Rpb24oaXNVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5oYXJkZW4oaXNVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNBYmFuZG9uZWRFcnJvcj0ocmVhc29uKT0+XG5yZWFzb24hPW51bGwmJi8vXG5pc0Zyb3plbihyZWFzb24pJiZcbm1hdGNoZXMocmVhc29uLE0uZXJyb3IoKSkmJlxuLy9cbi8vXG5yZWFzb24ubWVzc2FnZT09PSd2YXQgdGVybWluYXRlZCc7JGjNj19vbmNlLmlzQWJhbmRvbmVkRXJyb3IoaXNBYmFuZG9uZWRFcnJvcik7XG5oYXJkZW4oaXNBYmFuZG9uZWRFcnJvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlIjpbIlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUiXSwibWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uIjpbIm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbiJdLCJpc1VwZ3JhZGVEaXNjb25uZWN0aW9uIjpbImlzVXBncmFkZURpc2Nvbm5lY3Rpb24iXSwiaXNBYmFuZG9uZWRFcnJvciI6WyJpc0FiYW5kb25lZEVycm9yIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAK74YwMHCAAABwgAADkAAABAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTguMS9zcmMvYXN5bmNJdGVyYWJsZUFkYXB0b3IuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIiwiLi9zdWJzY3JpYmUuanMiXSwiZXhwb3J0cyI6WyJtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllciIsIm9ic2VydmVJdGVyYXRpb24iLCJvYnNlcnZlSXRlcmF0b3IiLCJvYnNlcnZlTm90aWZpZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxzdWJzY3JpYmVMYXRlc3Q7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtbXCJzdWJzY3JpYmVMYXRlc3RcIiwgWyRozY9fYSA9PiAoc3Vic2NyaWJlTGF0ZXN0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllcj1zdWJzY3JpYmVMYXRlc3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIobWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIpO1xuY29uc3QgICAgICAgIG9ic2VydmVJdGVyYXRvcj0oYXN5bmNJdGVyYXRvclAsaXRlcmF0aW9uT2JzZXJ2ZXIpPT57XG5yZXR1cm4gbmV3IFByb21pc2UoKGFjayxvYnNlcnZlckVycm9yKT0+e1xuY29uc3QgcmVjdXI9KCk9PntcbkUud2hlbihcbkUoYXN5bmNJdGVyYXRvclApLm5leHQoKSxcbih7dmFsdWUsZG9uZX0pPT57XG5pZihkb25lKXtcbml0ZXJhdGlvbk9ic2VydmVyLmZpbmlzaCYmaXRlcmF0aW9uT2JzZXJ2ZXIuZmluaXNoKHZhbHVlKTtcbmFjayh1bmRlZmluZWQpO1xuIH1lbHNle1xuaXRlcmF0aW9uT2JzZXJ2ZXIudXBkYXRlU3RhdGUmJlxuaXRlcmF0aW9uT2JzZXJ2ZXIudXBkYXRlU3RhdGUodmFsdWUpO1xucmVjdXIoKTtcbiB9XG4gfSxcbihyZWFzb24pPT57XG5pdGVyYXRpb25PYnNlcnZlci5mYWlsJiZpdGVyYXRpb25PYnNlcnZlci5mYWlsKHJlYXNvbik7XG5hY2sodW5kZWZpbmVkKTtcbiB9KS5cbmNhdGNoKG9ic2VydmVyRXJyb3IpO1xuIH07XG5yZWN1cigpO1xuIH0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2Uub2JzZXJ2ZUl0ZXJhdG9yKG9ic2VydmVJdGVyYXRvcik7XG5jb25zdCAgICAgICAgb2JzZXJ2ZUl0ZXJhdGlvbj0oYXN5bmNJdGVyYWJsZVAsaXRlcmF0aW9uT2JzZXJ2ZXIpPT57XG5jb25zdCBpdGVyYXRvclA9RShhc3luY0l0ZXJhYmxlUClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5yZXR1cm4gb2JzZXJ2ZUl0ZXJhdG9yKGl0ZXJhdG9yUCxpdGVyYXRpb25PYnNlcnZlcik7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5vYnNlcnZlSXRlcmF0aW9uKG9ic2VydmVJdGVyYXRpb24pO1xuY29uc3QgICAgICAgIG9ic2VydmVOb3RpZmllcj0obm90aWZpZXJQLGl0ZXJhdGlvbk9ic2VydmVyKT0+XG5vYnNlcnZlSXRlcmF0aW9uKHN1YnNjcmliZUxhdGVzdChub3RpZmllclApLGl0ZXJhdGlvbk9ic2VydmVyKTskaM2PX29uY2Uub2JzZXJ2ZU5vdGlmaWVyKG9ic2VydmVOb3RpZmllcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllciI6WyJtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllciJdLCJvYnNlcnZlSXRlcmF0b3IiOlsib2JzZXJ2ZUl0ZXJhdG9yIl0sIm9ic2VydmVJdGVyYXRpb24iOlsib2JzZXJ2ZUl0ZXJhdGlvbiJdLCJvYnNlcnZlTm90aWZpZXIiOlsib2JzZXJ2ZU5vdGlmaWVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALUW0pDdBwAA3QcAACoAAABAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTguMS9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9wdWJsaXNoLWtpdC5qcyIsIi4vc3Vic2NyaWJlLmpzIiwiLi9ub3RpZmllci5qcyIsIi4vc3Vic2NyaWJlci5qcyIsIi4vdG9waWMuanMiLCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIiwiLi9zdG9yZXN1Yi5qcyIsIi4vc3RvcmVkLW5vdGlmaWVyLmpzIiwiLi90eXBlcy1pbmRleC5qcyJdLCJleHBvcnRzIjpbIm1ha2VOb3RpZmllcktpdCIsIm1ha2VOb3RpZmllcktpdCIsIm1ha2VTdWJzY3JpcHRpb25LaXQiLCJtYWtlU3Vic2NyaXB0aW9uS2l0Iiwib2JzZXJ2ZUl0ZXJhdG9yIiwib2JzZXJ2ZUl0ZXJhdG9yIiwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0IiwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0Iiwic3Vic2NyaWJlTGF0ZXN0Iiwic3Vic2NyaWJlTGF0ZXN0IixudWxsXSwicmVleHBvcnRzIjpbIi4vc3RvcmVkLW5vdGlmaWVyLmpzIiwiLi9zdG9yZXN1Yi5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vcHVibGlzaC1raXQuanNcIiwgW11dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtdXSxbXCIuL25vdGlmaWVyLmpzXCIsIFtdXSxbXCIuL3N1YnNjcmliZXIuanNcIiwgW11dLFtcIi4vdG9waWMuanNcIiwgW11dLFtcIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanNcIiwgW11dLFtcIi4vc3RvcmVzdWIuanNcIiwgW11dLFtcIi4vc3RvcmVkLW5vdGlmaWVyLmpzXCIsIFtdXSxbXCIuL3R5cGVzLWluZGV4LmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9wdWJsaXNoLWtpdC5qcyI6W1sibWFrZVB1Ymxpc2hLaXQiLCJtYWtlUHVibGlzaEtpdCJdLFsicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0IiwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0Il0sWyJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIiwiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSJdLFsiSXRlcmFibGVFYWNoVG9waWNJIiwiSXRlcmFibGVFYWNoVG9waWNJIl0sWyJJdGVyYWJsZUxhdGVzdFRvcGljSSIsIkl0ZXJhYmxlTGF0ZXN0VG9waWNJIl0sWyJTdWJzY3JpYmVyU2hhcGUiLCJTdWJzY3JpYmVyU2hhcGUiXV0sIi4vc3Vic2NyaWJlLmpzIjpbWyJzdWJzY3JpYmVFYWNoIiwic3Vic2NyaWJlRWFjaCJdLFsic3Vic2NyaWJlTGF0ZXN0Iiwic3Vic2NyaWJlTGF0ZXN0Il1dLCIuL25vdGlmaWVyLmpzIjpbWyJtYWtlTm90aWZpZXIiLCJtYWtlTm90aWZpZXIiXSxbIm1ha2VOb3RpZmllcktpdCIsIm1ha2VOb3RpZmllcktpdCJdLFsibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiLCJtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSJdLFsibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiLCJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciJdXSwiLi9zdWJzY3JpYmVyLmpzIjpbWyJtYWtlU3Vic2NyaXB0aW9uIiwibWFrZVN1YnNjcmlwdGlvbiJdLFsibWFrZVN1YnNjcmlwdGlvbktpdCIsIm1ha2VTdWJzY3JpcHRpb25LaXQiXV0sIi4vdG9waWMuanMiOltbIm1ha2VQaW5uZWRIaXN0b3J5VG9waWMiLCJtYWtlUGlubmVkSGlzdG9yeVRvcGljIl1dLCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIjpbWyJvYnNlcnZlTm90aWZpZXIiLCJvYnNlcnZlTm90aWZpZXIiXSxbIm9ic2VydmVJdGVyYXRvciIsIm9ic2VydmVJdGVyYXRvciJdLFsib2JzZXJ2ZUl0ZXJhdGlvbiIsIm9ic2VydmVJdGVyYXRpb24iXSxbIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIiwibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANlbosJxEAAAcRAAAC0AAABAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTguMS9zcmMvbm90aWZpZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiLi9wdWJsaXNoLWtpdC5qcyIsIi4vc3Vic2NyaWJlLmpzIl0sImV4cG9ydHMiOlsibWFrZU5vdGlmaWVyIiwibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiLCJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciIsIm1ha2VOb3RpZmllcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRSxGYXIsbWFrZVB1Ymxpc2hLaXQsc3Vic2NyaWJlTGF0ZXN0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhc3NlcnRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIi4vcHVibGlzaC1raXQuanNcIiwgW1tcIm1ha2VQdWJsaXNoS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VQdWJsaXNoS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9zdWJzY3JpYmUuanNcIiwgW1tcInN1YnNjcmliZUxhdGVzdFwiLCBbJGjNj19hID0+IChzdWJzY3JpYmVMYXRlc3QgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU5vdGlmaWVyPShzaGFyYWJsZUludGVybmFsc1ApPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgbm90aWZpZXI9RmFyKCdub3RpZmllcicse1xuLi4uc3Vic2NyaWJlTGF0ZXN0KHNoYXJhYmxlSW50ZXJuYWxzUCksXG5nZXRVcGRhdGVTaW5jZTphc3luYyh1cGRhdGVDb3VudCk9PlxuRShzaGFyYWJsZUludGVybmFsc1ApLmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KSxcblxuLypcblxuXG5cblxuICAgICAqL1xuZ2V0U2hhcmFibGVOb3RpZmllckludGVybmFsczphc3luYygpPT5zaGFyYWJsZUludGVybmFsc1AsXG4vKlxuXG5cblxuICAgICAqL1xuZ2V0U3RvcmVLZXk6KCk9PmhhcmRlbih7bm90aWZpZXJ9KX0pO1xuXG5yZXR1cm4gbm90aWZpZXI7XG4gfTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5tYWtlTm90aWZpZXIobWFrZU5vdGlmaWVyKTtcbmNvbnN0ICAgICAgICBtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcj0oc3Vic2NyaWJlcik9Pntcbi8qXG5cbiAgICovXG5jb25zdCBiYXNlTm90aWZpZXI9aGFyZGVuKHtcbmdldFVwZGF0ZVNpbmNlOih1cGRhdGVDb3VudD11bmRlZmluZWQpPT5cbkUoc3Vic2NyaWJlcikuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5vdGlmaWVyPUZhcignbm90aWZpZXInLHtcbi4uLm1ha2VOb3RpZmllcihiYXNlTm90aWZpZXIpLFxuLi4uYmFzZU5vdGlmaWVyfSk7XG5cbnJldHVybiBub3RpZmllcjtcbiB9OyRozY9fb25jZS5tYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcihtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcik7XG5oYXJkZW4obWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU5vdGlmaWVyS2l0PSguLi5pbml0aWFsU3RhdGVBcnIpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxuY29uc3Qgbm90aWZpZXI9bWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIoc3Vic2NyaWJlcik7XG5cbmNvbnN0IHVwZGF0ZXI9RmFyKCd1cGRhdGVyJyx7XG51cGRhdGVTdGF0ZTooc3RhdGUpPT5wdWJsaXNoZXIucHVibGlzaChzdGF0ZSksXG5maW5pc2g6KGNvbXBsZXRpb24pPT5wdWJsaXNoZXIuZmluaXNoKGNvbXBsZXRpb24pLFxuZmFpbDoocmVhc29uKT0+cHVibGlzaGVyLmZhaWwocmVhc29uKX0pO1xuXG5cbmFzc2VydChpbml0aWFsU3RhdGVBcnIubGVuZ3RoPD0xLCd0b28gbWFueSBhcmd1bWVudHMnKTtcbmlmKGluaXRpYWxTdGF0ZUFyci5sZW5ndGg9PT0xKXtcbnVwZGF0ZXIudXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlQXJyWzBdKTtcbiB9XG5cbi8vXG4vL1xucmV0dXJuIGhhcmRlbih7bm90aWZpZXIsdXBkYXRlcn0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlTm90aWZpZXJLaXQobWFrZU5vdGlmaWVyS2l0KTtcbmNvbnN0ICAgICAgICBtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZT0oYXN5bmNJdGVyYWJsZVApPT57XG5jb25zdCBpdGVyYXRvclA9RShhc3luY0l0ZXJhYmxlUClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBvcHROZXh0UHJvbWlzZTtcbmxldCBjdXJyZW50VXBkYXRlQ291bnQ9MG47XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgY3VycmVudFJlc3BvbnNlO1xubGV0IGZpbmFsPWZhbHNlO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYmFzZU5vdGlmaWVyPUZhcignYmFzZU5vdGlmaWVyJyx7XG5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudD0tMW4pe1xuaWYodXBkYXRlQ291bnQ8Y3VycmVudFVwZGF0ZUNvdW50KXtcbmlmKGN1cnJlbnRSZXNwb25zZSl7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGN1cnJlbnRSZXNwb25zZSk7XG4gfVxuIH1lbHNlIGlmKHVwZGF0ZUNvdW50IT09Y3VycmVudFVwZGF0ZUNvdW50KXtcbnRocm93IEVycm9yKFxuJ2dldFVwZGF0ZVNpbmNlIGFyZ3VtZW50IG11c3QgYmUgYSBwcmV2aW91c2x5LWlzc3VlZCB1cGRhdGVDb3VudC4nKTtcblxuIH1cblxuLy9cbmlmKGZpbmFsKXtcbmFzc2VydChjdXJyZW50UmVzcG9uc2UhPT11bmRlZmluZWQpO1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShjdXJyZW50UmVzcG9uc2UpO1xuIH1cbmlmKCFvcHROZXh0UHJvbWlzZSl7XG5jb25zdCBuZXh0SXRlclJlc3VsdFA9RShpdGVyYXRvclApLm5leHQoKTtcbm9wdE5leHRQcm9taXNlPUUud2hlbihcbm5leHRJdGVyUmVzdWx0UCxcbih7ZG9uZSx2YWx1ZX0pPT57XG5hc3NlcnQoIWZpbmFsKTtcbmlmKGRvbmUpe1xuZmluYWw9dHJ1ZTtcbiB9XG5jdXJyZW50VXBkYXRlQ291bnQrPTFuO1xuY3VycmVudFJlc3BvbnNlPWhhcmRlbih7XG52YWx1ZSxcbnVwZGF0ZUNvdW50OmRvbmU/dW5kZWZpbmVkOmN1cnJlbnRVcGRhdGVDb3VudH0pO1xuXG5vcHROZXh0UHJvbWlzZT11bmRlZmluZWQ7XG5yZXR1cm4gY3VycmVudFJlc3BvbnNlO1xuIH0sXG4oX3JlYXNvbik9PntcbmZpbmFsPXRydWU7XG5jdXJyZW50UmVzcG9uc2U9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbm5leHRJdGVyUmVzdWx0UDtcbm9wdE5leHRQcm9taXNlPXVuZGVmaW5lZDtcbnJldHVybiBjdXJyZW50UmVzcG9uc2U7XG4gfSk7XG5cbiB9XG5yZXR1cm4gb3B0TmV4dFByb21pc2U7XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBub3RpZmllcj1GYXIoJ25vdGlmaWVyJyx7XG4vL1xuLy9cbi4uLm1ha2VOb3RpZmllcihiYXNlTm90aWZpZXIpLFxuLi4uYmFzZU5vdGlmaWVyfSk7XG5cbnJldHVybiBub3RpZmllcjtcbiB9OyRozY9fb25jZS5tYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZShtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSk7XG5oYXJkZW4obWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU5vdGlmaWVyIjpbIm1ha2VOb3RpZmllciJdLCJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciI6WyJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciJdLCJtYWtlTm90aWZpZXJLaXQiOlsibWFrZU5vdGlmaWVyS2l0Il0sIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIjpbIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHR6M6EtKwAALSsAADAAAABAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTguMS9zcmMvcHVibGlzaC1raXQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9wYXR0ZXJucyIsIkBhZ29yaWMvdmF0LWRhdGEiXSwiZXhwb3J0cyI6WyJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIiwiSXRlcmFibGVFYWNoVG9waWNJIiwiSXRlcmFibGVMYXRlc3RUb3BpY0kiLCJQdWJsaXNoZXJJIiwiU3Vic2NyaWJlckkiLCJTdWJzY3JpYmVyU2hhcGUiLCJVcGRhdGVDb3VudFNoYXBlIiwibWFrZVB1Ymxpc2hLaXQiLCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiLCJwdWJsaXNoS2l0SUtpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsRSxGYXIsbWFrZVByb21pc2VLaXQsTSxnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQsY2FuQmVEdXJhYmxlLHByZXBhcmVFeG9DbGFzc0tpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcImdldEludGVyZmFjZUd1YXJkUGF5bG9hZFwiLCBbJGjNj19hID0+IChnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJjYW5CZUR1cmFibGVcIiwgWyRozY9fYSA9PiAoY2FuQmVEdXJhYmxlID0gJGjNj19hKV1dLFtcInByZXBhcmVFeG9DbGFzc0tpdFwiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvQ2xhc3NLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCBzaW5rPSgpPT57IH07XG5jb25zdCBtYWtlUXVpZXRSZWplY3Rpb249KHJlYXNvbik9PntcbmNvbnN0IHJlamVjdGlvbj1oYXJkZW4oUHJvbWlzZS5yZWplY3QocmVhc29uKSk7XG52b2lkIEUud2hlbihyZWplY3Rpb24sc2luayxzaW5rKTtcbnJldHVybiByZWplY3Rpb247XG4gfTtcbmNvbnN0IHRvb0ZhclJlamVjdGlvbj1tYWtlUXVpZXRSZWplY3Rpb24oXG5oYXJkZW4oRXJyb3IoJ0Nhbm5vdCByZWFkIHBhc3QgZW5kIG9mIGl0ZXJhdGlvbi4nKSkpO1xuXG5cbmNvbnN0ICAgICAgICBQdWJsaXNoZXJJPU0uaW50ZXJmYWNlKCdQdWJsaXNoZXInLHtcbnB1Ymxpc2g6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoKSxcbmZpbmlzaDpNLmNhbGwoTS5hbnkoKSkucmV0dXJucygpLFxuZmFpbDpNLmNhbGwoTS5hbnkoKSkucmV0dXJucygpfSk7XG5cblxuLy9cbiRozY9fb25jZS5QdWJsaXNoZXJJKFB1Ymxpc2hlckkpO2NvbnN0IFVwZGF0ZUNvdW50U2hhcGU9TS5vcihNLmJpZ2ludCgpLE0ubnVtYmVyKCkpOyRozY9fb25jZS5VcGRhdGVDb3VudFNoYXBlKFVwZGF0ZUNvdW50U2hhcGUpO1xuY29uc3QgICAgICAgIFN1YnNjcmliZXJJPU0uaW50ZXJmYWNlKCdTdWJzY3JpYmVyJyx7XG5zdWJzY3JpYmVBZnRlcjpNLmNhbGwoKS5vcHRpb25hbChNLmJpZ2ludCgpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldFVwZGF0ZVNpbmNlOk0uY2FsbCgpLm9wdGlvbmFsKFVwZGF0ZUNvdW50U2hhcGUpLnJldHVybnMoTS5wcm9taXNlKCkpfSk7JGjNj19vbmNlLlN1YnNjcmliZXJJKFN1YnNjcmliZXJJKTtcblxuY29uc3QgICAgICAgIHB1Ymxpc2hLaXRJS2l0PWhhcmRlbih7XG5wdWJsaXNoZXI6UHVibGlzaGVySSxcbnN1YnNjcmliZXI6U3Vic2NyaWJlckl9KTskaM2PX29uY2UucHVibGlzaEtpdElLaXQocHVibGlzaEtpdElLaXQpO1xuXG5cbmNvbnN0ICAgICAgICBGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlPU0uaW50ZXJmYWNlKFxuJ0ZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJyxcbntcbmZvcms6TS5jYWxsKCkucmV0dXJucyhNLmFueSgpKSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06TS5jYWxsKCkucmV0dXJucyhNLmFueSgpKSwvL1xubmV4dDpNLmNhbGxXaGVuKCkucmV0dXJucyhNLmFueSgpKX0pOyRozY9fb25jZS5Gb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlKEZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUpO1xuXG5cblxuY29uc3QgICAgICAgIEl0ZXJhYmxlRWFjaFRvcGljST1NLmludGVyZmFjZSgnSXRlcmFibGVFYWNoVG9waWMnLHtcbnN1YnNjcmliZUFmdGVyOlxuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKFN1YnNjcmliZXJJKS5tZXRob2RHdWFyZHMuc3Vic2NyaWJlQWZ0ZXIsXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOk0uY2FsbCgpLnJldHVybnMoXG5NLnJlbW90YWJsZSgnRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3InKSl9KTskaM2PX29uY2UuSXRlcmFibGVFYWNoVG9waWNJKEl0ZXJhYmxlRWFjaFRvcGljSSk7XG5cblxuXG5jb25zdCAgICAgICAgSXRlcmFibGVMYXRlc3RUb3BpY0k9TS5pbnRlcmZhY2UoJ0l0ZXJhYmxlTGF0ZXN0VG9waWMnLHtcbmdldFVwZGF0ZVNpbmNlOlxuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKFN1YnNjcmliZXJJKS5tZXRob2RHdWFyZHMuZ2V0VXBkYXRlU2luY2UsXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOk0uY2FsbCgpLnJldHVybnMoXG5NLnJlbW90YWJsZSgnRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3InKSl9KTtcblxuXG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5JdGVyYWJsZUxhdGVzdFRvcGljSShJdGVyYWJsZUxhdGVzdFRvcGljSSk7XG5jb25zdCB3ZWFrTWVtb2l6ZVVuYXJ5PShmbik9PntcbmNvbnN0IGNhY2hlPW5ldyBXZWFrTWFwKCk7XG5yZXR1cm4oYXJnKT0+e1xuLyogICAgICAgICAgICAgICAgICovXG5jb25zdCBvYXJnPWFyZztcbmlmKGNhY2hlLmhhcyhvYXJnKSl7XG5yZXR1cm4gY2FjaGUuZ2V0KG9hcmcpO1xuIH1cbmNvbnN0IHJlc3VsdD1mbihhcmcpO1xuY2FjaGUuc2V0KG9hcmcscmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBtYWtlVXBkYXRlUmVjb3JkRnJvbVB1YmxpY2F0aW9uUmVjb3JkPShyZWNvcmQpPT57XG5jb25zdHtcbmhlYWQ6e3ZhbHVlLGRvbmV9LFxucHVibGlzaENvdW50fT1cbnJlY29yZDtcbmlmKGRvbmUpe1xuLy9cbnJldHVybiBoYXJkZW4oe3ZhbHVlLHVwZGF0ZUNvdW50OnVuZGVmaW5lZH0pO1xuIH1cbnJldHVybiBoYXJkZW4oe3ZhbHVlLHVwZGF0ZUNvdW50OnB1Ymxpc2hDb3VudH0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUHVibGlzaEtpdD0oKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB0YWlsUDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHRhaWxSO1xuKHtwcm9taXNlOnRhaWxQLHJlc29sdmU6dGFpbFJ9PW1ha2VQcm9taXNlS2l0KCkpO1xuXG5sZXQgY3VycmVudFB1Ymxpc2hDb3VudD0wbjtcbmxldCBjdXJyZW50UD10YWlsUDtcbmNvbnN0IGFkdmFuY2VDdXJyZW50PShkb25lLHZhbHVlLHJlamVjdGlvbik9PntcbmlmKHRhaWxSPT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKCdDYW5ub3QgdXBkYXRlIHN0YXRlIGFmdGVyIHRlcm1pbmF0aW9uLicpO1xuIH1cblxuY3VycmVudFB1Ymxpc2hDb3VudCs9MW47XG5jdXJyZW50UD10YWlsUDtcbmNvbnN0IHJlc29sdmVDdXJyZW50PXRhaWxSO1xuXG5pZihkb25lKXtcbnRhaWxQPXRvb0ZhclJlamVjdGlvbjtcbnRhaWxSPXVuZGVmaW5lZDtcbiB9ZWxzZXtcbih7cHJvbWlzZTp0YWlsUCxyZXNvbHZlOnRhaWxSfT1tYWtlUHJvbWlzZUtpdCgpKTtcbiB9XG5cbmlmKHJlamVjdGlvbil7XG5yZXNvbHZlQ3VycmVudChyZWplY3Rpb24pO1xuIH1lbHNle1xucmVzb2x2ZUN1cnJlbnQoXG5oYXJkZW4oe1xuaGVhZDp7dmFsdWUsZG9uZX0sXG5wdWJsaXNoQ291bnQ6Y3VycmVudFB1Ymxpc2hDb3VudCxcbnRhaWw6dGFpbFB9KSk7XG5cblxuIH1cbiB9O1xuXG5jb25zdCBtYWtlTWVtb2l6ZWRVcGRhdGVSZWNvcmQ9d2Vha01lbW9pemVVbmFyeShcbm1ha2VVcGRhdGVSZWNvcmRGcm9tUHVibGljYXRpb25SZWNvcmQpO1xuXG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHN1YnNjcmliZXI9RmFyKCdTdWJzY3JpYmVyJyx7XG5zdWJzY3JpYmVBZnRlcjoocHVibGlzaENvdW50PS0xbik9PntcbmFzc2VydC50eXBlb2YocHVibGlzaENvdW50LCdiaWdpbnQnKTtcbmlmKHB1Ymxpc2hDb3VudD09PWN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIHRhaWxQO1xuIH1lbHNlIGlmKHB1Ymxpc2hDb3VudDxjdXJyZW50UHVibGlzaENvdW50KXtcbnJldHVybiBjdXJyZW50UDtcbiB9ZWxzZXtcbnRocm93IEVycm9yKFxuJ3N1YnNjcmliZUFmdGVyIGFyZ3VtZW50IG11c3QgYmUgYSBwcmV2aW91c2x5LWlzc3VlZCBwdWJsaXNoQ291bnQuJyk7XG5cbiB9XG4gfSxcbmdldFVwZGF0ZVNpbmNlOih1cGRhdGVDb3VudCk9PntcbmlmKHVwZGF0ZUNvdW50PT09dW5kZWZpbmVkKXtcbnJldHVybiBzdWJzY3JpYmVyLnN1YnNjcmliZUFmdGVyKCkudGhlbihtYWtlTWVtb2l6ZWRVcGRhdGVSZWNvcmQpO1xuIH1cbnVwZGF0ZUNvdW50PUJpZ0ludCh1cGRhdGVDb3VudCk7XG5yZXR1cm4oXG5zdWJzY3JpYmVyXG4vL1xuLy9cbi8vXG4uc3Vic2NyaWJlQWZ0ZXIodXBkYXRlQ291bnQpXG4vL1xuLy9cbi50aGVuKCgpPT5zdWJzY3JpYmVyLmdldFVwZGF0ZVNpbmNlKCkpKTtcblxuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1Ymxpc2hlcj1GYXIoJ1B1Ymxpc2hlcicse1xucHVibGlzaDoodmFsdWUpPT57XG5hZHZhbmNlQ3VycmVudChmYWxzZSx2YWx1ZSk7XG4gfSxcbmZpbmlzaDooZmluYWxWYWx1ZSk9PntcbmFkdmFuY2VDdXJyZW50KHRydWUsZmluYWxWYWx1ZSk7XG4gfSxcbmZhaWw6KHJlYXNvbik9PntcbmFkdmFuY2VDdXJyZW50KHRydWUsdW5kZWZpbmVkLG1ha2VRdWlldFJlamVjdGlvbihyZWFzb24pKTtcbiB9fSk7XG5cbnJldHVybiBoYXJkZW4oe3B1Ymxpc2hlcixzdWJzY3JpYmVyfSk7XG4gfTskaM2PX29uY2UubWFrZVB1Ymxpc2hLaXQobWFrZVB1Ymxpc2hLaXQpO1xuaGFyZGVuKG1ha2VQdWJsaXNoS2l0KTtcblxuY29uc3QgRHVyYWJsZVB1Ymxpc2hLaXRTdGF0ZVNoYXBlPWhhcmRlbih7XG52YWx1ZUR1cmFiaWxpdHk6TS5hbnkoKSxcbnB1Ymxpc2hDb3VudDpNLmFueSgpLFxuc3RhdHVzOk0uYW55KCksXG5oYXNWYWx1ZTpNLmFueSgpLFxudmFsdWU6TS5hbnkoKX0pO1xuXG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGluaXREdXJhYmxlUHVibGlzaEtpdFN0YXRlPShvcHRpb25zPXt9KT0+e1xuY29uc3R7dmFsdWVEdXJhYmlsaXR5PSdtYW5kYXRvcnknfT1vcHRpb25zO1xuYXNzZXJ0LmVxdWFsKHZhbHVlRHVyYWJpbGl0eSwnbWFuZGF0b3J5Jyk7XG5yZXR1cm57XG4vL1xudmFsdWVEdXJhYmlsaXR5LFxuXG4vL1xucHVibGlzaENvdW50OjBuLFxuc3RhdHVzOidsaXZlJywvL1xuXG4vL1xuLy9cbi8vXG5oYXNWYWx1ZTpmYWxzZSxcbnZhbHVlOnVuZGVmaW5lZH07XG5cbiB9O1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLypcblxuXG4gKi9cbmNvbnN0IGdldEVwaGVtZXJhbEtleT0oZmFjZXRzKT0+ZmFjZXRzLnB1Ymxpc2hlcjtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGE9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHByb3ZpZGVDdXJyZW50UD0oc3RhdGUsZmFjZXRzLHRhaWwpPT57XG5jb25zdCBlcGhlbWVyYWxLZXk9Z2V0RXBoZW1lcmFsS2V5KGZhY2V0cyk7XG5jb25zdCBmb3VuZERhdGE9ZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhLmdldChlcGhlbWVyYWxLZXkpO1xuY29uc3QgY3VycmVudFA9Zm91bmREYXRhJiZmb3VuZERhdGEuY3VycmVudFA7XG5pZihjdXJyZW50UCl7XG5yZXR1cm4gY3VycmVudFA7XG4gfVxuXG5jb25zdHtwdWJsaXNoQ291bnQsc3RhdHVzLGhhc1ZhbHVlLHZhbHVlfT1zdGF0ZTtcbmlmKCFoYXNWYWx1ZSl7XG5hc3NlcnQoc3RhdHVzPT09J2xpdmUnKTtcbnJldHVybiB0YWlsO1xuIH1cbmlmKHN0YXR1cz09PSdsaXZlJ3x8c3RhdHVzPT09J2ZpbmlzaGVkJyl7XG5jb25zdCBjZWxsPWhhcmRlbih7XG5oZWFkOnt2YWx1ZSxkb25lOnN0YXR1cyE9PSdsaXZlJ30sXG5wdWJsaXNoQ291bnQsXG50YWlsfSk7XG5cbnJldHVybiBFLnJlc29sdmUoY2VsbCk7XG4gfWVsc2UgaWYoc3RhdHVzPT09J2ZhaWxlZCcpe1xucmV0dXJuIG1ha2VRdWlldFJlamVjdGlvbih2YWx1ZSk7XG4gfWVsc2V7XG50aHJvdyBGYWlsIGBJbnZhbGlkIGR1cmFibGUgcHJvbWlzZSBraXQgc3RhdHVzOiAke3Eoc3RhdHVzKX1gO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YT0oc3RhdGUsZmFjZXRzKT0+e1xuY29uc3QgZXBoZW1lcmFsS2V5PWdldEVwaGVtZXJhbEtleShmYWNldHMpO1xuY29uc3QgZm91bmREYXRhPWR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YS5nZXQoZXBoZW1lcmFsS2V5KTtcbmlmKGZvdW5kRGF0YSl7XG5yZXR1cm4gZm91bmREYXRhO1xuIH1cblxuY29uc3R7c3RhdHVzfT1zdGF0ZTtcbmxldCB0YWlsUDtcbmxldCB0YWlsUjtcbmlmKHN0YXR1cz09PSdsaXZlJyl7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG52b2lkIEUud2hlbih0YWlsUCxzaW5rLHNpbmspO1xuIH1lbHNlIGlmKHN0YXR1cz09PSdmaW5pc2hlZCd8fHN0YXR1cz09PSdmYWlsZWQnKXtcbnRhaWxQPXRvb0ZhclJlamVjdGlvbjtcbiB9ZWxzZXtcbnRocm93IEZhaWwgYEludmFsaWQgZHVyYWJsZSBwcm9taXNlIGtpdCBzdGF0dXM6ICR7cShzdGF0dXMpfWA7XG4gfVxuLy9cbmNvbnN0IG9iaj1oYXJkZW4oe2N1cnJlbnRQOnVuZGVmaW5lZCx0YWlsUCx0YWlsUn0pO1xuZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhLnNldChlcGhlbWVyYWxLZXksb2JqKTtcbnJldHVybiBvYmo7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdD0oY29udGV4dCx2YWx1ZSx0YXJnZXRTdGF0dXM9J2xpdmUnKT0+e1xuY29uc3R7c3RhdGUsZmFjZXRzfT1jb250ZXh0O1xuY29uc3R7dmFsdWVEdXJhYmlsaXR5LHN0YXR1c309c3RhdGU7XG5pZihzdGF0dXMhPT0nbGl2ZScpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCB1cGRhdGUgc3RhdGUgYWZ0ZXIgdGVybWluYXRpb24uJyk7XG4gfVxuY29uc3QgZG9uZT10YXJnZXRTdGF0dXMhPT0nbGl2ZSc7XG5pZihkb25lfHx2YWx1ZUR1cmFiaWxpdHk9PT0nbWFuZGF0b3J5Jyl7XG5jYW5CZUR1cmFibGUodmFsdWUpfHxGYWlsIGBDYW5ub3QgYWNjZXB0IG5vbi1kdXJhYmxlIHZhbHVlOiAke3ZhbHVlfWA7XG4gfVxuY29uc3R7dGFpbFA6b2xkVGFpbFAsdGFpbFI6cmVzb2x2ZU9sZFRhaWx9PVxucHJvdmlkZUR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YShzdGF0ZSxmYWNldHMpO1xuYXNzZXJ0LnR5cGVvZihyZXNvbHZlT2xkVGFpbCwnZnVuY3Rpb24nKTtcblxuY29uc3QgcHVibGlzaENvdW50PXN0YXRlLnB1Ymxpc2hDb3VudCsxbjtcbnN0YXRlLnB1Ymxpc2hDb3VudD1wdWJsaXNoQ291bnQ7XG5cbmxldCB0YWlsUDtcbmxldCB0YWlsUjtcbmlmKGRvbmUpe1xuc3RhdGUuc3RhdHVzPXRhcmdldFN0YXR1cztcbnRhaWxQPXRvb0ZhclJlamVjdGlvbjtcbnRhaWxSPXVuZGVmaW5lZDtcbiB9ZWxzZXtcbih7cHJvbWlzZTp0YWlsUCxyZXNvbHZlOnRhaWxSfT1tYWtlUHJvbWlzZUtpdCgpKTtcbnZvaWQgRS53aGVuKHRhaWxQLHNpbmssc2luayk7XG4gfVxuXG5sZXQgY3VycmVudFA7XG5pZih0YXJnZXRTdGF0dXM9PT0nZmFpbGVkJyl7XG5zdGF0ZS5oYXNWYWx1ZT10cnVlO1xuc3RhdGUudmFsdWU9dmFsdWU7XG5jb25zdCByZWplY3Rpb249bWFrZVF1aWV0UmVqZWN0aW9uKHZhbHVlKTtcbnJlc29sdmVPbGRUYWlsKHJlamVjdGlvbik7XG4gfWVsc2V7XG4vL1xuLy9cbmlmKGRvbmV8fHZhbHVlRHVyYWJpbGl0eSE9PSdpZ25vcmVkJyYmY2FuQmVEdXJhYmxlKHZhbHVlKSl7XG5zdGF0ZS5oYXNWYWx1ZT10cnVlO1xuc3RhdGUudmFsdWU9dmFsdWU7XG4gfWVsc2V7XG5zdGF0ZS5oYXNWYWx1ZT1mYWxzZTtcbnN0YXRlLnZhbHVlPXVuZGVmaW5lZDtcbi8vXG5jdXJyZW50UD1vbGRUYWlsUDtcbiB9XG5cbnJlc29sdmVPbGRUYWlsKFxuaGFyZGVuKHtcbmhlYWQ6e3ZhbHVlLGRvbmV9LFxucHVibGlzaENvdW50LFxudGFpbDp0YWlsUH0pKTtcblxuXG4gfVxuXG5kdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEuc2V0KFxuZ2V0RXBoZW1lcmFsS2V5KGZhY2V0cyksXG5oYXJkZW4oe2N1cnJlbnRQLHRhaWxQLHRhaWxSfSkpO1xuXG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQ9KGJhZ2dhZ2Usa2luZE5hbWUpPT57XG4vL1xuLy9cbmNvbnN0IG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZD1tYWtlVXBkYXRlUmVjb3JkRnJvbVB1YmxpY2F0aW9uUmVjb3JkO1xuXG4vKlxuXG4gICAqL1xucmV0dXJuIHByZXBhcmVFeG9DbGFzc0tpdChcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbnB1Ymxpc2hLaXRJS2l0LFxuaW5pdER1cmFibGVQdWJsaXNoS2l0U3RhdGUsXG57XG4vL1xuLy9cbnB1Ymxpc2hlcjp7XG5wdWJsaXNoKHZhbHVlKXtcbmFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdCh0aGlzLHZhbHVlKTtcbiB9LFxuZmluaXNoKGZpbmFsVmFsdWUpe1xuYWR2YW5jZUR1cmFibGVQdWJsaXNoS2l0KHRoaXMsZmluYWxWYWx1ZSwnZmluaXNoZWQnKTtcbiB9LFxuZmFpbChyZWFzb24pe1xuYWR2YW5jZUR1cmFibGVQdWJsaXNoS2l0KHRoaXMscmVhc29uLCdmYWlsZWQnKTtcbiB9fSxcblxuXG4vL1xuLy9cbnN1YnNjcmliZXI6e1xuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50PS0xbil7XG5jb25zdHtzdGF0ZSxmYWNldHN9PXRoaXM7XG5jb25zdHtwdWJsaXNoQ291bnQ6Y3VycmVudFB1Ymxpc2hDb3VudH09c3RhdGU7XG5jb25zdHtjdXJyZW50UCx0YWlsUH09cHJvdmlkZUR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YShcbnN0YXRlLFxuZmFjZXRzKTtcblxuaWYocHVibGlzaENvdW50PT09Y3VycmVudFB1Ymxpc2hDb3VudCl7XG5yZXR1cm4gdGFpbFA7XG4gfWVsc2UgaWYocHVibGlzaENvdW50PGN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIGN1cnJlbnRQfHxwcm92aWRlQ3VycmVudFAoc3RhdGUsZmFjZXRzLHRhaWxQKTtcbiB9ZWxzZXtcbnRocm93IEVycm9yKFxuJ3N1YnNjcmliZUFmdGVyIGFyZ3VtZW50IG11c3QgYmUgYSBwcmV2aW91c2x5LWlzc3VlZCBwdWJsaXNoQ291bnQuJyk7XG5cbiB9XG4gfSxcbmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KXtcbmNvbnN0e1xuZmFjZXRzOntzdWJzY3JpYmVyfX09XG50aGlzO1xuaWYodXBkYXRlQ291bnQ9PT11bmRlZmluZWQpe1xucmV0dXJuIHN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIoKS50aGVuKG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZCk7XG4gfVxudXBkYXRlQ291bnQ9QmlnSW50KHVwZGF0ZUNvdW50KTtcbnJldHVybihcbnN1YnNjcmliZXJcbi8vXG4vL1xuLy9cbi5zdWJzY3JpYmVBZnRlcih1cGRhdGVDb3VudClcbi8vXG4vL1xuLnRoZW4oKCk9PnN1YnNjcmliZXIuZ2V0VXBkYXRlU2luY2UoKSkpO1xuXG4gfX19LFxuXG5cbntcbnN0YXRlU2hhcGU6RHVyYWJsZVB1Ymxpc2hLaXRTdGF0ZVNoYXBlfSk7XG5cblxuIH07JGjNj19vbmNlLnByZXBhcmVEdXJhYmxlUHVibGlzaEtpdChwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQpO1xuaGFyZGVuKHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCk7XG5cbmNvbnN0ICAgICAgICBTdWJzY3JpYmVyU2hhcGU9TS5yZW1vdGFibGUoJ1N1YnNjcmliZXInKTskaM2PX29uY2UuU3Vic2NyaWJlclNoYXBlKFN1YnNjcmliZXJTaGFwZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJQdWJsaXNoZXJJIjpbIlB1Ymxpc2hlckkiXSwiVXBkYXRlQ291bnRTaGFwZSI6WyJVcGRhdGVDb3VudFNoYXBlIl0sIlN1YnNjcmliZXJJIjpbIlN1YnNjcmliZXJJIl0sInB1Ymxpc2hLaXRJS2l0IjpbInB1Ymxpc2hLaXRJS2l0Il0sIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiOlsiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSJdLCJJdGVyYWJsZUVhY2hUb3BpY0kiOlsiSXRlcmFibGVFYWNoVG9waWNJIl0sIkl0ZXJhYmxlTGF0ZXN0VG9waWNJIjpbIkl0ZXJhYmxlTGF0ZXN0VG9waWNJIl0sIm1ha2VQdWJsaXNoS2l0IjpbIm1ha2VQdWJsaXNoS2l0Il0sInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCI6WyJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiXSwiU3Vic2NyaWJlclNoYXBlIjpbIlN1YnNjcmliZXJTaGFwZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAConRhcEQgAABEIAAA0AAAAQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE4LjEvc3JjL3N0b3JlZC1ub3RpZmllci5qc3siaW1wb3J0cyI6WyJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyIsIkBlbmRvL2ZhciIsIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiXSwiZXhwb3J0cyI6WyJtYWtlU3RvcmVkTm90aWZpZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0QWxsRGVmaW5lZCxtYWtlU2VyaWFsaXplVG9TdG9yYWdlLEUsRmFyLG9ic2VydmVOb3RpZmllcjskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcImFzc2VydEFsbERlZmluZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0QWxsRGVmaW5lZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNcIiwgW1tcIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2VcIiwgWyRozY9fYSA9PiAobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzXCIsIFtbXCJvYnNlcnZlTm90aWZpZXJcIiwgWyRozY9fYSA9PiAob2JzZXJ2ZU5vdGlmaWVyID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkTm90aWZpZXI9KG5vdGlmaWVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5hc3NlcnRBbGxEZWZpbmVkKHtub3RpZmllcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyfSk7XG5cbmNvbnN0IG1hcnNoYWxsVG9TdG9yYWdlPW1ha2VTZXJpYWxpemVUb1N0b3JhZ2Uoc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik7XG5cbm9ic2VydmVOb3RpZmllcihub3RpZmllcix7XG51cGRhdGVTdGF0ZSh2YWx1ZSl7XG5tYXJzaGFsbFRvU3RvcmFnZSh2YWx1ZSkuY2F0Y2goKHJlYXNvbik9PlxuY29uc29sZS5lcnJvcignU3RvcmVkTm90aWZpZXIgZmFpbGVkIHRvIHVwZGF0ZVN0YXRlJyxyZWFzb24pKTtcblxuIH0sXG5mYWlsKHJlYXNvbil7XG5jb25zb2xlLmVycm9yKCdTdG9yZWROb3RpZmllciBmYWlsZWQgdG8gaXRlcmF0ZScscmVhc29uKTtcbiB9fSkuXG5jYXRjaCgocmVhc29uKT0+e1xuY29uc29sZS5lcnJvcignU3RvcmVkTm90aWZpZXIgaGFsdGVkIGl0ZXJhdGlvbicscmVhc29uKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZXI9RmFyKCd1bnNlcmlhbGl6ZXInLHtcbmZyb21DYXBEYXRhOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKSxcbnVuc2VyaWFsaXplOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdG9yZWROb3RpZmllcj1GYXIoJ1N0b3JlZE5vdGlmaWVyJyx7XG5nZXRVcGRhdGVTaW5jZToodXBkYXRlQ291bnQpPT5FKG5vdGlmaWVyKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCksXG5nZXRQYXRoOigpPT5FKHN0b3JhZ2VOb2RlKS5nZXRQYXRoKCksXG5nZXRVbnNlcmlhbGl6ZXI6KCk9PnVuc2VyaWFsaXplcn0pO1xuXG5yZXR1cm4gc3RvcmVkTm90aWZpZXI7XG4gfTskaM2PX29uY2UubWFrZVN0b3JlZE5vdGlmaWVyKG1ha2VTdG9yZWROb3RpZmllcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU3RvcmVkTm90aWZpZXIiOlsibWFrZVN0b3JlZE5vdGlmaWVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKcTAjPtFQAA7RUAAC0AAABAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTguMS9zcmMvc3RvcmVzdWIuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwiLCJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIiwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyIsIi4vcHVibGlzaC1raXQuanMiLCIuL3N1YnNjcmliZXIuanMiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbImZvckVhY2hQdWJsaWNhdGlvblJlY29yZCIsIm1ha2VTdG9yZWRQdWJsaXNoS2l0IiwibWFrZVN0b3JlZFB1Ymxpc2hlcktpdCIsIm1ha2VTdG9yZWRTdWJzY3JpYmVyIiwibWFrZVN0b3JlZFN1YnNjcmlwdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLEZhcixtYWtlTWFyc2hhbCxhc3NlcnRBbGxEZWZpbmVkLG1ha2VTZXJpYWxpemVUb1N0b3JhZ2Usb2JzZXJ2ZUl0ZXJhdGlvbixtYWtlUHVibGlzaEtpdCxtYWtlU3Vic2NyaXB0aW9uS2l0LHN1YnNjcmliZUVhY2g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wibWFrZU1hcnNoYWxcIiwgWyRozY9fYSA9PiAobWFrZU1hcnNoYWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJhc3NlcnRBbGxEZWZpbmVkXCIsIFskaM2PX2EgPT4gKGFzc2VydEFsbERlZmluZWQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzXCIsIFtbXCJtYWtlU2VyaWFsaXplVG9TdG9yYWdlXCIsIFskaM2PX2EgPT4gKG1ha2VTZXJpYWxpemVUb1N0b3JhZ2UgPSAkaM2PX2EpXV1dXSxbXCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzXCIsIFtbXCJvYnNlcnZlSXRlcmF0aW9uXCIsIFskaM2PX2EgPT4gKG9ic2VydmVJdGVyYXRpb24gPSAkaM2PX2EpXV1dXSxbXCIuL3B1Ymxpc2gta2l0LmpzXCIsIFtbXCJtYWtlUHVibGlzaEtpdFwiLCBbJGjNj19hID0+IChtYWtlUHVibGlzaEtpdCA9ICRozY9fYSldXV1dLFtcIi4vc3Vic2NyaWJlci5qc1wiLCBbW1wibWFrZVN1YnNjcmlwdGlvbktpdFwiLCBbJGjNj19hID0+IChtYWtlU3Vic2NyaXB0aW9uS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9zdWJzY3JpYmUuanNcIiwgW1tcInN1YnNjcmliZUVhY2hcIiwgWyRozY9fYSA9PiAoc3Vic2NyaWJlRWFjaCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkPWFzeW5jKHN1YnNjcmliZXIsY29uc3VtZVZhbHVlKT0+e1xuLy9cbi8vXG5jb25zdCBpdGVyYXRvcj1zdWJzY3JpYmVFYWNoKHN1YnNjcmliZXIpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuXG5sZXQgZmluaXNoZWQ9ZmFsc2U7XG5hd2FpdCBudWxsO1xud2hpbGUoIWZpbmlzaGVkKXtcbmNvbnN0e3ZhbHVlLGRvbmV9PWF3YWl0IGl0ZXJhdG9yLm5leHQoKTtcbmF3YWl0IGNvbnN1bWVWYWx1ZSh2YWx1ZSk7XG5maW5pc2hlZD0hIWRvbmU7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5mb3JFYWNoUHVibGljYXRpb25SZWNvcmQoZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkKTtcbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkU3Vic2NyaWJlcj0oc3Vic2NyaWJlcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKT0+e1xuYXNzZXJ0QWxsRGVmaW5lZCh7c3Vic2NyaWJlcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyfSk7XG5cbmNvbnN0IG1hcnNoYWxsVG9TdG9yYWdlPW1ha2VTZXJpYWxpemVUb1N0b3JhZ2Uoc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik7XG5cbi8vXG5mb3JFYWNoUHVibGljYXRpb25SZWNvcmQoc3Vic2NyaWJlcixtYXJzaGFsbFRvU3RvcmFnZSkuY2F0Y2goKGVycik9Pntcbi8vXG4vL1xuY29uc29sZS5lcnJvcignU3RvcmVkU3Vic2NyaWJlciBmYWlsZWQgdG8gaXRlcmF0ZScsZXJyKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZXI9RmFyKCd1bnNlcmlhbGl6ZXInLHtcbmZyb21DYXBEYXRhOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKSxcbnVuc2VyaWFsaXplOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3Jlc3ViPUZhcignU3RvcmVkU3Vic2NyaWJlcicse1xuc3Vic2NyaWJlQWZ0ZXI6KHB1Ymxpc2hDb3VudCk9PnN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KSxcbmdldFVwZGF0ZVNpbmNlOih1cGRhdGVDb3VudCk9PnN1YnNjcmliZXIuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpLFxuZ2V0UGF0aDooKT0+RShzdG9yYWdlTm9kZSkuZ2V0UGF0aCgpLFxuZ2V0U3RvcmVLZXk6KCk9PkUoc3RvcmFnZU5vZGUpLmdldFN0b3JlS2V5KCksXG5nZXRVbnNlcmlhbGl6ZXI6KCk9PnVuc2VyaWFsaXplcn0pO1xuXG5yZXR1cm4gc3RvcmVzdWI7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVN0b3JlZFN1YnNjcmliZXIobWFrZVN0b3JlZFN1YnNjcmliZXIpO1xuY29uc3QgICAgICAgIG1ha2VTdG9yZWRTdWJzY3JpcHRpb249KFxuc3Vic2NyaXB0aW9uLFxuc3RvcmFnZU5vZGUsXG5tYXJzaGFsbGVyPW1ha2VNYXJzaGFsKHVuZGVmaW5lZCx1bmRlZmluZWQse1xubWFyc2hhbFNhdmVFcnJvcjooKT0+eyB9LFxuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pKT0+XG5cbntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdW5zZXJpYWxpemVyPUZhcigndW5zZXJpYWxpemVyJyx7XG5mcm9tQ2FwRGF0YTooZGF0YSk9PkUobWFyc2hhbGxlcikuZnJvbUNhcERhdGEoZGF0YSksXG51bnNlcmlhbGl6ZTooZGF0YSk9PkUobWFyc2hhbGxlcikuZnJvbUNhcERhdGEoZGF0YSl9KTtcblxuXG4vL1xubGV0IHB1Ymxpc2hGYWlsZWQ9ZmFsc2U7XG5sZXQgcHVibGlzaEV4Y2VwdGlvbjtcblxuY29uc3QgZmFpbD0oZXJyKT0+e1xucHVibGlzaEZhaWxlZD10cnVlO1xucHVibGlzaEV4Y2VwdGlvbj1lcnI7XG4gfTtcblxuLy9cbi8vXG5jb25zdCBwdWJsaXNoVmFsdWU9KG9iaik9PntcbmFzc2VydChzdG9yYWdlTm9kZSk7XG5pZihwdWJsaXNoRmFpbGVkKXtcbi8vXG50aHJvdyBwdWJsaXNoRXhjZXB0aW9uO1xuIH1cblxuLy9cbkUobWFyc2hhbGxlcikuXG50b0NhcERhdGEob2JqKS5cbnRoZW4oKHNlcmlhbGl6ZWQpPT57XG5jb25zdCBlbmNvZGVkPUpTT04uc3RyaW5naWZ5KHNlcmlhbGl6ZWQpO1xucmV0dXJuIEUoc3RvcmFnZU5vZGUpLnNldFZhbHVlKGVuY29kZWQpO1xuIH0pLlxuY2F0Y2goZmFpbCk7XG4gfTtcblxuaWYoc3RvcmFnZU5vZGUpe1xuLy9cbm9ic2VydmVJdGVyYXRpb24oc3Vic2NyaXB0aW9uLHtcbnVwZGF0ZVN0YXRlOnB1Ymxpc2hWYWx1ZSxcbmZpbmlzaDpwdWJsaXNoVmFsdWV9KS5cbmNhdGNoKGZhaWwpO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdG9yZXN1Yj1GYXIoJ1N0b3JlZFN1YnNjcmlwdGlvbicse1xuLy9cbmdldFN0b3JlS2V5OmFzeW5jKCk9PntcbmlmKCFzdG9yYWdlTm9kZSl7XG5yZXR1cm4gaGFyZGVuKHtzdWJzY3JpcHRpb259KTtcbiB9XG5jb25zdCBzdG9yZUtleT1hd2FpdCBFKHN0b3JhZ2VOb2RlKS5nZXRTdG9yZUtleSgpO1xucmV0dXJuIGhhcmRlbih7Li4uc3RvcmVLZXksc3Vic2NyaXB0aW9ufSk7XG4gfSxcbmdldFVuc2VyaWFsaXplcjooKT0+dW5zZXJpYWxpemVyLFxuZ2V0U2hhcmFibGVTdWJzY3JpcHRpb25JbnRlcm5hbHM6KCk9Plxuc3Vic2NyaXB0aW9uLmdldFNoYXJhYmxlU3Vic2NyaXB0aW9uSW50ZXJuYWxzKCksXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5zdWJzY3JpcHRpb25bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksXG5zdWJzY3JpYmVBZnRlcjoocHVibGlzaENvdW50KT0+c3Vic2NyaXB0aW9uLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCl9KTtcblxucmV0dXJuIHN0b3Jlc3ViO1xuIH07JGjNj19vbmNlLm1ha2VTdG9yZWRTdWJzY3JpcHRpb24obWFrZVN0b3JlZFN1YnNjcmlwdGlvbik7XG5oYXJkZW4obWFrZVN0b3JlZFN1YnNjcmlwdGlvbik7XG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTdG9yZWRQdWJsaXNoZXJLaXQ9KHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIsY2hpbGRQYXRoKT0+e1xuY29uc3R7cHVibGljYXRpb24sc3Vic2NyaXB0aW9ufT1tYWtlU3Vic2NyaXB0aW9uS2l0KCk7XG5cbmlmKHN0b3JhZ2VOb2RlJiZjaGlsZFBhdGgpe1xuc3RvcmFnZU5vZGU9RShzdG9yYWdlTm9kZSkubWFrZUNoaWxkTm9kZShjaGlsZFBhdGgpO1xuIH1cblxuLy9cbmNvbnN0IHN1YnNjcmliZXI9bWFrZVN0b3JlZFN1YnNjcmlwdGlvbihcbnN1YnNjcmlwdGlvbixcbnN0b3JhZ2VOb2RlLFxubWFyc2hhbGxlcik7XG5cblxucmV0dXJue1xucHVibGlzaGVyOnB1YmxpY2F0aW9uLFxuc3Vic2NyaWJlcn07XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQobWFrZVN0b3JlZFB1Ymxpc2hlcktpdCk7XG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFB1Ymxpc2hLaXQ9KHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxucmV0dXJue1xucHVibGlzaGVyLFxuLy9cbnN1YnNjcmliZXI6bWFrZVN0b3JlZFN1YnNjcmliZXIoc3Vic2NyaWJlcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKX07XG5cbiB9OyRozY9fb25jZS5tYWtlU3RvcmVkUHVibGlzaEtpdChtYWtlU3RvcmVkUHVibGlzaEtpdCk7XG5oYXJkZW4obWFrZVN0b3JlZFB1Ymxpc2hLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkIjpbImZvckVhY2hQdWJsaWNhdGlvblJlY29yZCJdLCJtYWtlU3RvcmVkU3Vic2NyaWJlciI6WyJtYWtlU3RvcmVkU3Vic2NyaWJlciJdLCJtYWtlU3RvcmVkU3Vic2NyaXB0aW9uIjpbIm1ha2VTdG9yZWRTdWJzY3JpcHRpb24iXSwibWFrZVN0b3JlZFB1Ymxpc2hlcktpdCI6WyJtYWtlU3RvcmVkUHVibGlzaGVyS2l0Il0sIm1ha2VTdG9yZWRQdWJsaXNoS2l0IjpbIm1ha2VTdG9yZWRQdWJsaXNoS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABUHXvMhEgAAIRIAAC4AAABAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTguMS9zcmMvc3Vic2NyaWJlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL2ludGVybmFsL3NyYy91cGdyYWRlLWFwaS5qcyJdLCJleHBvcnRzIjpbInN1YnNjcmliZSIsInN1YnNjcmliZUVhY2giLCJzdWJzY3JpYmVMYXRlc3QiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxGYWlsLGFubm90YXRlRXJyb3IsRSxGYXIsaXNPYmplY3QsaXNVcGdyYWRlRGlzY29ubmVjdGlvbjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy91cGdyYWRlLWFwaS5qc1wiLCBbW1wiaXNVcGdyYWRlRGlzY29ubmVjdGlvblwiLCBbJGjNj19hID0+IChpc1VwZ3JhZGVEaXNjb25uZWN0aW9uID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3Qgc2luaz0oKT0+eyB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHJlY29ubmVjdEFzTmVlZGVkPWFzeW5jKGdldHRlcixzZWVkPVtdKT0+e1xubGV0IGRpc2Nvbm5lY3Rpb247XG5sZXQgbGFzdFZlcnNpb249LUluZmluaXR5O1xuLy9cbmF3YWl0IG51bGw7XG5mb3IobGV0IGk9MDs7aSs9MSl7XG50cnl7XG5jb25zdCByZXN1bHRQPWk8c2VlZC5sZW5ndGg/c2VlZFtpXTpnZXR0ZXIoKTtcbmNvbnN0IHJlc3VsdD1hd2FpdCByZXN1bHRQO1xucmV0dXJuIHJlc3VsdDtcbiB9Y2F0Y2goZXJyKXtcbmlmKGlzVXBncmFkZURpc2Nvbm5lY3Rpb24oZXJyKSl7XG5pZighZGlzY29ubmVjdGlvbil7XG5kaXNjb25uZWN0aW9uPWVycjtcbiB9XG5jb25zdHtpbmNhcm5hdGlvbk51bWJlcjp2ZXJzaW9ufT1lcnI7XG5pZih2ZXJzaW9uPmxhc3RWZXJzaW9uKXtcbi8vXG4vL1xuLy9cbmxhc3RWZXJzaW9uPXZlcnNpb247XG5jb250aW51ZTtcbiB9XG4gfVxuLy9cbi8vXG4vL1xuaWYoaXNPYmplY3QoZXJyKSYmZGlzY29ubmVjdGlvbiYmZGlzY29ubmVjdGlvbiE9PWVycil7XG50cnl7XG5hbm5vdGF0ZUVycm9yKFxuZXJyLFxuWCBgQXR0ZW1wdGluZyB0byByZWNvdmVyIGZyb20gZGlzY29ubmVjdGlvbjogJHtkaXNjb25uZWN0aW9ufWApO1xuXG4gfWNhdGNoKF9lcnIpe1xuLy9cbiB9XG4gfVxudGhyb3cgZXJyO1xuIH1cbiB9XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc3Vic2NyaWJlPShpdFApPT5cbkZhcignQXN5bmNJdGVyYWJsZScse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+e1xuY29uc3QgaXQ9RShpdFApW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuY29uc3Qgc2VsZj1GYXIoJ0FzeW5jSXRlcmFibGVJdGVyYXRvcicse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+c2VsZixcbm5leHQ6YXN5bmMoKT0+RShpdCkubmV4dCgpfSk7XG5cbnJldHVybiBzZWxmO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLnN1YnNjcmliZShzdWJzY3JpYmUpO1xuY29uc3QgbWFrZUVhY2hJdGVyYXRvcj0odG9waWMsbmV4dENlbGxQKT0+e1xuLy9cbi8vXG5jb25zdCBzZWxmPUZhcignRWFjaEl0ZXJhdG9yJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5zZWxmLFxubmV4dDooKT0+e1xuY29uc3R7XG5oZWFkOnJlc3VsdFAsXG5wdWJsaXNoQ291bnQ6cHVibGlzaENvdW50UCxcbnRhaWw6dGFpbFB9PVxuRS5nZXQobmV4dENlbGxQKTtcblxuLy9cbi8vXG5jb25zdCBnZXRTdWNjZXNzb3I9YXN5bmMoKT0+e1xuY29uc3QgcHVibGlzaENvdW50PWF3YWl0IHB1Ymxpc2hDb3VudFA7XG5hc3NlcnQudHlwZW9mKHB1Ymxpc2hDb3VudCwnYmlnaW50Jyk7XG5jb25zdCBzdWNjZXNzb3I9YXdhaXQgRSh0b3BpYykuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KTtcbmNvbnN0IG5ld1B1Ymxpc2hDb3VudD1zdWNjZXNzb3IucHVibGlzaENvdW50O1xuaWYobmV3UHVibGlzaENvdW50IT09cHVibGlzaENvdW50KzFuKXtcbkZhaWwgYGVhY2hJdGVyYXRvciBicm9rZW4gYnkgZ2FwIGZyb20gcHVibGlzaENvdW50ICR7cHVibGlzaENvdW50fSB0byAke25ld1B1Ymxpc2hDb3VudH1gO1xuIH1cbnJldHVybiBzdWNjZXNzb3I7XG4gfTtcblxuLy9cbi8vXG5uZXh0Q2VsbFA9cmVjb25uZWN0QXNOZWVkZWQoZ2V0U3VjY2Vzc29yLFt0YWlsUF0pO1xuXG4vL1xuLy9cbi8vXG4vL1xudm9pZCBFLndoZW4ocHVibGlzaENvdW50UCxzaW5rLHNpbmspO1xudm9pZCBFLndoZW4obmV4dENlbGxQLHNpbmssc2luayk7XG5yZXR1cm4gcmVzdWx0UDtcbiB9LFxuZm9yazooKT0+bWFrZUVhY2hJdGVyYXRvcih0b3BpYyxuZXh0Q2VsbFApfSk7XG5cbnJldHVybiBzZWxmO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc3Vic2NyaWJlRWFjaD0odG9waWMpPT57XG5jb25zdCBpdGVyYWJsZT1GYXIoJ0VhY2hJdGVyYWJsZScse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+e1xuY29uc3QgZmlyc3RDZWxsUD1yZWNvbm5lY3RBc05lZWRlZCgoKT0+RSh0b3BpYykuc3Vic2NyaWJlQWZ0ZXIoKSk7XG5yZXR1cm4gbWFrZUVhY2hJdGVyYXRvcih0b3BpYyxmaXJzdENlbGxQKTtcbiB9fSk7XG5cbnJldHVybiBpdGVyYWJsZTtcbiB9OyRozY9fb25jZS5zdWJzY3JpYmVFYWNoKHN1YnNjcmliZUVhY2gpO1xuaGFyZGVuKHN1YnNjcmliZUVhY2gpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2xvbmVMYXRlc3RJdGVyYXRvcj0odG9waWMsbG9jYWxVcGRhdGVDb3VudCx0ZXJtaW5hbFJlc3VsdCk9PntcbmxldCBtdXRleD1Qcm9taXNlLnJlc29sdmUoKTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IG1heWJlUmVxdWVzdE5leHRSZXN1bHQ9YXN5bmMoKT0+e1xuaWYodGVybWluYWxSZXN1bHQpe1xuLy9cbi8vXG5yZXR1cm4gdGVybWluYWxSZXN1bHQ7XG4gfVxuXG4vL1xuLy9cbmNvbnN0e3ZhbHVlLHVwZGF0ZUNvdW50fT1hd2FpdCByZWNvbm5lY3RBc05lZWRlZCgoKT0+XG5FKHRvcGljKS5nZXRVcGRhdGVTaW5jZShsb2NhbFVwZGF0ZUNvdW50KSk7XG5cbi8vXG5sb2NhbFVwZGF0ZUNvdW50PXVwZGF0ZUNvdW50O1xuXG4vL1xuaWYodXBkYXRlQ291bnQ9PT11bmRlZmluZWQpe1xudGVybWluYWxSZXN1bHQ9aGFyZGVuKHtkb25lOnRydWUsdmFsdWV9KTtcbnJldHVybiB0ZXJtaW5hbFJlc3VsdDtcbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfTtcblxuY29uc3Qgc2VsZj1GYXIoJ0xhdGVzdEl0ZXJhdG9yJyx7XG5mb3JrOigpPT5jbG9uZUxhdGVzdEl0ZXJhdG9yKHRvcGljLGxvY2FsVXBkYXRlQ291bnQsdGVybWluYWxSZXN1bHQpLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+c2VsZixcbm5leHQ6YXN5bmMoKT0+e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5pZih0ZXJtaW5hbFJlc3VsdCl7XG4vL1xuLy9cbnJldHVybiB0ZXJtaW5hbFJlc3VsdDtcbiB9XG5cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBuZXh0UmVzdWx0PW11dGV4LnRoZW4obWF5YmVSZXF1ZXN0TmV4dFJlc3VsdCk7XG5tdXRleD1uZXh0UmVzdWx0LnRoZW4oc2luayxzaW5rKTtcbi8vXG5cbnJldHVybiBuZXh0UmVzdWx0O1xuIH19KTtcblxucmV0dXJuIHNlbGY7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZUxhdGVzdEl0ZXJhdG9yPSh0b3BpYyk9PmNsb25lTGF0ZXN0SXRlcmF0b3IodG9waWMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHN1YnNjcmliZUxhdGVzdD0odG9waWMpPT57XG5jb25zdCBpdGVyYWJsZT1GYXIoJ0xhdGVzdEl0ZXJhYmxlJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5tYWtlTGF0ZXN0SXRlcmF0b3IodG9waWMpfSk7XG5cbnJldHVybiBpdGVyYWJsZTtcbiB9OyRozY9fb25jZS5zdWJzY3JpYmVMYXRlc3Qoc3Vic2NyaWJlTGF0ZXN0KTtcbmhhcmRlbihzdWJzY3JpYmVMYXRlc3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic3Vic2NyaWJlIjpbInN1YnNjcmliZSJdLCJzdWJzY3JpYmVFYWNoIjpbInN1YnNjcmliZUVhY2giXSwic3Vic2NyaWJlTGF0ZXN0IjpbInN1YnNjcmliZUxhdGVzdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACHaHtf0QcAANEHAAAvAAAAQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE4LjEvc3JjL3N1YnNjcmliZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIiwiLi9zdWJzY3JpYmUuanMiLCIuL3B1Ymxpc2gta2l0LmpzIiwiLi90b3BpYy5qcyJdLCJleHBvcnRzIjpbIm1ha2VTdWJzY3JpcHRpb24iLCJtYWtlU3Vic2NyaXB0aW9uS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLHN1YnNjcmliZUVhY2gsbWFrZVB1Ymxpc2hLaXQsbWFrZVBpbm5lZEhpc3RvcnlUb3BpYzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlRWFjaFwiLCBbJGjNj19hID0+IChzdWJzY3JpYmVFYWNoID0gJGjNj19hKV1dXV0sW1wiLi9wdWJsaXNoLWtpdC5qc1wiLCBbW1wibWFrZVB1Ymxpc2hLaXRcIiwgWyRozY9fYSA9PiAobWFrZVB1Ymxpc2hLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3RvcGljLmpzXCIsIFtbXCJtYWtlUGlubmVkSGlzdG9yeVRvcGljXCIsIFskaM2PX2EgPT4gKG1ha2VQaW5uZWRIaXN0b3J5VG9waWMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VTdWJzY3JpcHRpb249KHRvcGljKT0+e1xuY29uc3Qgc3Vic2NyaXB0aW9uPUZhcignU3Vic2NyaXB0aW9uJyx7XG4uLi5zdWJzY3JpYmVFYWNoKHRvcGljKSxcbnN1YnNjcmliZUFmdGVyOmFzeW5jKHB1Ymxpc2hDb3VudCk9PkUodG9waWMpLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCksXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbmdldFNoYXJhYmxlU3Vic2NyaXB0aW9uSW50ZXJuYWxzOmFzeW5jKCk9PnRvcGljLFxuXG5nZXRTdG9yZUtleTooKT0+aGFyZGVuKHtzdWJzY3JpcHRpb259KX0pO1xuXG5yZXR1cm4gc3Vic2NyaXB0aW9uO1xuIH07JGjNj19vbmNlLm1ha2VTdWJzY3JpcHRpb24obWFrZVN1YnNjcmlwdGlvbik7XG5oYXJkZW4obWFrZVN1YnNjcmlwdGlvbik7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlU3Vic2NyaXB0aW9uS2l0PSgpPT57XG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxuLy9cbi8vXG5cbmNvbnN0IHBpbm5lZEhpc3RvcnlUb3BpYz1tYWtlUGlubmVkSGlzdG9yeVRvcGljKHN1YnNjcmliZXIpO1xuY29uc3Qgc3Vic2NyaXB0aW9uPW1ha2VTdWJzY3JpcHRpb24ocGlubmVkSGlzdG9yeVRvcGljKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1YmxpY2F0aW9uPUZhcigncHVibGljYXRpb24nLHtcbnVwZGF0ZVN0YXRlOihub25GaW5hbFZhbHVlKT0+cHVibGlzaGVyLnB1Ymxpc2gobm9uRmluYWxWYWx1ZSksXG5maW5pc2g6KGNvbXBsZXRpb24pPT5wdWJsaXNoZXIuZmluaXNoKGNvbXBsZXRpb24pLFxuZmFpbDoocmVhc29uKT0+cHVibGlzaGVyLmZhaWwocmVhc29uKX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe3B1YmxpY2F0aW9uLHN1YnNjcmlwdGlvbn0pO1xuIH07JGjNj19vbmNlLm1ha2VTdWJzY3JpcHRpb25LaXQobWFrZVN1YnNjcmlwdGlvbktpdCk7XG5oYXJkZW4obWFrZVN1YnNjcmlwdGlvbktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU3Vic2NyaXB0aW9uIjpbIm1ha2VTdWJzY3JpcHRpb24iXSwibWFrZVN1YnNjcmlwdGlvbktpdCI6WyJtYWtlU3Vic2NyaXB0aW9uS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEdaGtrtAwAA7QMAACoAAABAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTguMS9zcmMvdG9waWMuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIl0sImV4cG9ydHMiOlsibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VQaW5uZWRIaXN0b3J5VG9waWM9KHRvcGljKT0+e1xuLy9cblxuLy9cbmNvbnN0IHBpbm5lZFB1Ykxpc3Q9dG9waWMuc3Vic2NyaWJlQWZ0ZXIoKTtcblxucmV0dXJuIEZhcignUGlubmVkSGlzdG9yeVRvcGljJyx7XG5zdWJzY3JpYmVBZnRlcjphc3luYyhwdWJsaXNoQ291bnQ9LTFuKT0+e1xuaWYocHVibGlzaENvdW50PT09LTFuKXtcbnJldHVybiBwaW5uZWRQdWJMaXN0O1xuIH1cbnJldHVybiB0b3BpYy5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQpO1xuIH0sXG5nZXRVcGRhdGVTaW5jZTphc3luYyh1cGRhdGVDb3VudD11bmRlZmluZWQpPT57XG4vL1xucmV0dXJuIHRvcGljLmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KTtcbiB9fSk7XG5cbiB9OyRozY9fb25jZS5tYWtlUGlubmVkSGlzdG9yeVRvcGljKG1ha2VQaW5uZWRIaXN0b3J5VG9waWMpO1xuaGFyZGVuKG1ha2VQaW5uZWRIaXN0b3J5VG9waWMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyI6WyJtYWtlUGlubmVkSGlzdG9yeVRvcGljIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAADAAAABAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTguMS9zcmMvdHlwZXMtaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPFFhTKCBgAAggYAADMAAABAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTguMS90b29scy90ZXN0U3VwcG9ydHMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3Rlc3RpbmctdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlRmFrZU1hcnNoYWxsZXIiLCJtYWtlRmFrZVN0b3JhZ2UiLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXIsbWFrZU1hcnNoYWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdGVzdGluZy11dGlscy5qc1wiLCBbXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VGYWtlU3RvcmFnZT0ocGF0aCxwdWJsaWNhdGlvbik9PntcbmxldCBzZXRWYWx1ZUNhbGxzPTA7XG5jb25zdCBmdWxsUGF0aD0gYHB1Ymxpc2guJHtwYXRofWA7XG5jb25zdCBzdG9yZUtleT1oYXJkZW4oe1xuc3RvcmVOYW1lOidzd2luZ3NldCcsXG5zdG9yZVN1YmtleTogYHN3aW5nc2V0L2RhdGE6JHtmdWxsUGF0aH1gLFxuZGF0YVByZWZpeEJ5dGVzOicnfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3JhZ2U9RmFyKCdTdG9yYWdlTm9kZScse1xuZ2V0UGF0aDooKT0+cGF0aCxcbmdldFN0b3JlS2V5OmFzeW5jKCk9PnN0b3JlS2V5LFxuc2V0VmFsdWU6YXN5bmModmFsdWUpPT57XG5zZXRWYWx1ZUNhbGxzKz0xO1xuYXNzZXJ0LnR5cGVvZih2YWx1ZSwnc3RyaW5nJyk7XG5pZihwdWJsaWNhdGlvbil7XG5wdWJsaWNhdGlvbi51cGRhdGVTdGF0ZSh2YWx1ZSk7XG4gfVxuIH0sXG5tYWtlQ2hpbGROb2RlOigpPT5zdG9yYWdlLFxuY291bnRTZXRWYWx1ZUNhbGxzOigpPT5zZXRWYWx1ZUNhbGxzfSk7XG5cbnJldHVybiBzdG9yYWdlO1xuIH07JGjNj19vbmNlLm1ha2VGYWtlU3RvcmFnZShtYWtlRmFrZVN0b3JhZ2UpO1xuaGFyZGVuKG1ha2VGYWtlU3RvcmFnZSk7XG5cbmNvbnN0ICAgICAgICBtYWtlRmFrZU1hcnNoYWxsZXI9KCk9PlxubWFrZU1hcnNoYWwodW5kZWZpbmVkLHVuZGVmaW5lZCx7XG5tYXJzaGFsU2F2ZUVycm9yOigpPT57IH19KTskaM2PX29uY2UubWFrZUZha2VNYXJzaGFsbGVyKG1ha2VGYWtlTWFyc2hhbGxlcik7XG5cbmhhcmRlbihtYWtlRmFrZU1hcnNoYWxsZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdGVzdGluZy11dGlscy5qcyI6W1siZXZlbnRMb29wSXRlcmF0aW9uIiwiZXZlbnRMb29wSXRlcmF0aW9uIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VGYWtlU3RvcmFnZSI6WyJtYWtlRmFrZVN0b3JhZ2UiXSwibWFrZUZha2VNYXJzaGFsbGVyIjpbIm1ha2VGYWtlTWFyc2hhbGxlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABB7t+aix0AAIsdAAA5AAAAQGFnb3JpYy9zbWFydC13YWxsZXQtdjAuNS40LXUxOC41L3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAYWdvcmljL3N0b3JlIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvdmF0cy9zcmMvbGliLWJvYXJkLmpzIl0sImV4cG9ydHMiOlsibWFrZUV4cG9ydENvbnRleHQiLCJtYWtlSW1wb3J0Q29udGV4dCIsIm1ha2VMb2dnaW5nUHJlc2VuY2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEhhbmRsZWRQcm9taXNlLG1ha2VTY2FsYXJNYXBTdG9yZSxGYXIsbWFrZU1hcnNoYWwsUmVtb3RhYmxlLERFRkFVTFRfUFJFRklYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiSGFuZGxlZFByb21pc2VcIiwgWyRozY9fYSA9PiAoSGFuZGxlZFByb21pc2UgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlU2NhbGFyTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhck1hcFN0b3JlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXSxbXCJSZW1vdGFibGVcIiwgWyRozY9fYSA9PiAoUmVtb3RhYmxlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXRzL3NyYy9saWItYm9hcmQuanNcIiwgW1tcIkRFRkFVTFRfUFJFRklYXCIsIFskaM2PX2EgPT4gKERFRkFVTFRfUFJFRklYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzRGVmYXVsdEJvYXJkSWQ9KHNwZWNpbWVuKT0+e1xucmV0dXJuIHR5cGVvZiBzcGVjaW1lbj09PSdzdHJpbmcnJiZzcGVjaW1lbi5zdGFydHNXaXRoKERFRkFVTFRfUFJFRklYKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlV2FsbGV0U2xvdD0oX3RhYmxlcyxraW5kLGlkKT0+e1xuY29uc3QgZGlnaXRzPS8qICAgICAgICAgICAgICAgICAqLyBgJHtpZH1gO1xucmV0dXJuIGAke2tpbmR9OiR7ZGlnaXRzfWA7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBmaW5kS2V5PShyZWNvcmQscHJlZGljYXRlKT0+e1xuY29uc3Qga2V5PU9iamVjdC5rZXlzKHJlY29yZCkuZmluZChwcmVkaWNhdGUpO1xucmV0dXJuIGtleTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IHBhcnNlV2FsbGV0U2xvdD0odGFibGVzLHNsb3QpPT57XG5jb25zdCBraW5kPWZpbmRLZXkodGFibGVzLChrKT0+c2xvdC5zdGFydHNXaXRoKCBgJHtrfTpgKSk7XG5jb25zdCBpZD1raW5kP051bWJlcihzbG90LnNsaWNlKGtpbmQubGVuZ3RoKzEpKTpOYU47XG5yZXR1cm57a2luZCxpZH07XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGluaXRTbG90VmFsPSh0YWJsZSxzbG90LHZhbCk9PntcbnRhYmxlLmJ5U2xvdC5pbml0KHNsb3QsdmFsKTtcbnRhYmxlLmJ5VmFsLmluaXQodmFsLHNsb3QpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUV4cG9ydENvbnRleHQ9KCk9PntcbmNvbnN0IHdhbGxldE9iamVjdHM9e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucHVyc2U6e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9LFxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnBheW1lbnQ6e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9LFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xudW5rbm93bjp7XG5ieVNsb3Q6bWFrZVNjYWxhck1hcFN0b3JlKCksXG5ieVZhbDptYWtlU2NhbGFyTWFwU3RvcmUoKX19O1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBib2FyZE9iamVjdHM9e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9O1xuXG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBzbG90VG9WYWw9KHNsb3QsX2lmYWNlKT0+e1xuaWYoaXNEZWZhdWx0Qm9hcmRJZChzbG90KSYmYm9hcmRPYmplY3RzLmJ5U2xvdC5oYXMoc2xvdCkpe1xucmV0dXJuIGJvYXJkT2JqZWN0cy5ieVNsb3QuZ2V0KHNsb3QpO1xuIH1cbmNvbnN0e2tpbmQsaWR9PXBhcnNlV2FsbGV0U2xvdCh3YWxsZXRPYmplY3RzLHNsb3QpO1xua2luZHx8RmFpbCBgYmFkIHNsb3Qga2luZDogJHtzbG90fWA7XG5jb25zdCB2YWw9d2FsbGV0T2JqZWN0c1traW5kXS5ieVNsb3QuZ2V0KGlkKTsvL1xucmV0dXJuIHZhbDtcbiB9O1xuXG5sZXQgdW5rbm93bk5vbmNlPTA7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHZhbFRvU2xvdD0odmFsKT0+e1xuaWYoYm9hcmRPYmplY3RzLmJ5VmFsLmhhcyh2YWwpKXtcbnJldHVybiBib2FyZE9iamVjdHMuYnlWYWwuZ2V0KHZhbCk7XG4gfVxuY29uc3Qga2luZD1maW5kS2V5KHdhbGxldE9iamVjdHMsKGspPT53YWxsZXRPYmplY3RzW2tdLmJ5VmFsLmhhcyh2YWwpKTtcbmlmKGtpbmQpe1xuLy9cbmNvbnN0IGlkPXdhbGxldE9iamVjdHNba2luZF0uYnlWYWwuZ2V0KHZhbCk7XG5yZXR1cm4gbWFrZVdhbGxldFNsb3Qod2FsbGV0T2JqZWN0cyxraW5kLGlkKTtcbiB9XG51bmtub3duTm9uY2UrPTE7XG5jb25zdCBzbG90PW1ha2VXYWxsZXRTbG90KHdhbGxldE9iamVjdHMsJ3Vua25vd24nLHVua25vd25Ob25jZSk7XG5pbml0U2xvdFZhbCh3YWxsZXRPYmplY3RzLnVua25vd24sdW5rbm93bk5vbmNlLHZhbCk7XG5yZXR1cm4gc2xvdDtcbiB9O1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VTYXZlcj0oa2luZCx0YWJsZSk9PntcbmxldCBub25jZT0wO1xuLyogICAgICAgICAgICAgICAgICovXG5jb25zdCBzYXZlcj0odmFsKT0+e1xubm9uY2UrPTE7XG5pbml0U2xvdFZhbCh0YWJsZSxub25jZSx2YWwpO1xuIH07XG5yZXR1cm4gc2F2ZXI7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7XG5zYXZlUHVyc2VBY3Rpb25zOm1ha2VTYXZlcigncHVyc2UnLHdhbGxldE9iamVjdHMucHVyc2UpLFxuc2F2ZVBheW1lbnRBY3Rpb25zOm1ha2VTYXZlcigncGF5bWVudCcsd2FsbGV0T2JqZWN0cy5wYXltZW50KSxcbi8qXG5cblxuICAgICAqL1xuaW5pdFB1cnNlSWQ6KGlkLHB1cnNlKT0+e1xuaW5pdFNsb3RWYWwod2FsbGV0T2JqZWN0cy5wdXJzZSxpZCxwdXJzZSk7XG4gfSxcbnB1cnNlRW50cmllczp3YWxsZXRPYmplY3RzLnB1cnNlLmJ5U2xvdC5lbnRyaWVzLFxuLypcblxuXG4gICAgICovXG5pbml0Qm9hcmRJZDooaWQsdmFsKT0+e1xuaW5pdFNsb3RWYWwoYm9hcmRPYmplY3RzLGlkLHZhbCk7XG4gfSxcbi8qXG5cblxuICAgICAqL1xuZW5zdXJlQm9hcmRJZDooaWQsdmFsKT0+e1xuaWYoYm9hcmRPYmplY3RzLmJ5VmFsLmhhcyh2YWwpKXtcbmFzc2VydC5lcXVhbChib2FyZE9iamVjdHMuYnlWYWwuZ2V0KHZhbCksaWQpO1xucmV0dXJuO1xuIH1cbmluaXRTbG90VmFsKGJvYXJkT2JqZWN0cyxpZCx2YWwpO1xuIH0sXG4uLi5tYWtlTWFyc2hhbCh2YWxUb1Nsb3Qsc2xvdFRvVmFsLHtzZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSl9KTtcblxuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5tYWtlRXhwb3J0Q29udGV4dChtYWtlRXhwb3J0Q29udGV4dCk7XG5cbmNvbnN0IGRlZmF1bHRNYWtlUHJlc2VuY2U9KGlmYWNlKT0+e1xuY29uc3Qgc2V2ZXJlZD0gYFNFVkVSRUQ6ICR7aWZhY2UucmVwbGFjZSgvXkFsbGVnZWQ6IC8sJycpfWA7XG5yZXR1cm4gRmFyKHNldmVyZWQse30pO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VJbXBvcnRDb250ZXh0PShtYWtlUHJlc2VuY2U9ZGVmYXVsdE1ha2VQcmVzZW5jZSk9PntcbmNvbnN0IHdhbGxldE9iamVjdHM9e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucHVyc2U6e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9LFxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wYXltZW50OntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfSxcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xudW5rbm93bjp7XG5ieVNsb3Q6bWFrZVNjYWxhck1hcFN0b3JlKCksXG5ieVZhbDptYWtlU2NhbGFyTWFwU3RvcmUoKX19O1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBib2FyZE9iamVjdHM9e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9O1xuXG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVWYWw9KHRhYmxlLHNsb3QsaWZhY2UpPT57XG5pZih0YWJsZS5ieVNsb3QuaGFzKHNsb3QpKXtcbnJldHVybiB0YWJsZS5ieVNsb3QuZ2V0KHNsb3QpO1xuIH1cbmNvbnN0IHZhbD1tYWtlUHJlc2VuY2UoaWZhY2UpO1xuaW5pdFNsb3RWYWwodGFibGUsc2xvdCx2YWwpO1xucmV0dXJuIHZhbDtcbiB9O1xuXG5jb25zdCBzbG90VG9WYWw9e1xuLypcblxuXG4gICAgICovXG5mcm9tQm9hcmQ6KHNsb3QsaWZhY2UpPT57XG5pc0RlZmF1bHRCb2FyZElkKHNsb3QpfHxGYWlsIGBiYWQgYm9hcmQgc2xvdCAke3Eoc2xvdCl9YDtcbnJldHVybiBwcm92aWRlVmFsKGJvYXJkT2JqZWN0cyxzbG90LGlmYWNlKTtcbiB9LFxuXG4vKlxuXG5cbiAgICAgKi9cbmZyb21NeVdhbGxldDooc2xvdCxpZmFjZSk9PntcbmlmKCFzbG90KXtcbi8vXG5yZXR1cm4gbWFrZVByZXNlbmNlKCBgJHtzbG90fWApO1xuIH1cbmNvbnN0e2tpbmQsaWR9PXBhcnNlV2FsbGV0U2xvdCh3YWxsZXRPYmplY3RzLHNsb3QpO1xucmV0dXJuIGtpbmQ/XG5wcm92aWRlVmFsKHdhbGxldE9iamVjdHNba2luZF0saWQsaWZhY2UpOlxuc2xvdFRvVmFsLmZyb21Cb2FyZChzbG90LGlmYWNlKTtcbiB9fTtcblxuXG5jb25zdCB2YWxUb1Nsb3Q9e1xuZnJvbUJvYXJkOih2YWwpPT5ib2FyZE9iamVjdHMuYnlWYWwuZ2V0KHZhbCksXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5mcm9tTXlXYWxsZXQ6KHZhbCk9PntcbmNvbnN0IGtpbmQ9ZmluZEtleSh3YWxsZXRPYmplY3RzLChrKT0+d2FsbGV0T2JqZWN0c1trXS5ieVZhbC5oYXModmFsKSk7XG5pZihraW5kPT09dW5kZWZpbmVkKXtcbnRocm93IEZhaWwgYGNhbm5vdCBzZXJpYWxpemUgdW5yZWdpc3RlcmVkICR7dmFsfWA7XG4gfVxuXG5jb25zdCBpZD13YWxsZXRPYmplY3RzW2tpbmRdLmJ5VmFsLmdldCh2YWwpO1xucmV0dXJuIG1ha2VXYWxsZXRTbG90KHdhbGxldE9iamVjdHMsa2luZCxpZCk7XG4gfX07XG5cblxuY29uc3QgbWFyc2hhbD17XG5mcm9tQm9hcmQ6bWFrZU1hcnNoYWwodmFsVG9TbG90LmZyb21Cb2FyZCxzbG90VG9WYWwuZnJvbUJvYXJkLHtcbm1hcnNoYWxOYW1lOidmcm9tQm9hcmQnLFxuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pLFxuXG5mcm9tTXlXYWxsZXQ6bWFrZU1hcnNoYWwodmFsVG9TbG90LmZyb21NeVdhbGxldCxzbG90VG9WYWwuZnJvbU15V2FsbGV0LHtcbm1hcnNoYWxOYW1lOidmcm9tTXlXYWxsZXQnLFxuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pfTtcblxuXG5cbnJldHVybiBoYXJkZW4oe1xuLypcblxuXG4gICAgICovXG5pbml0Qm9hcmRJZDooaWQsdmFsKT0+e1xuaW5pdFNsb3RWYWwoYm9hcmRPYmplY3RzLGlkLHZhbCk7XG4gfSxcbi8qXG5cblxuICAgICAqL1xuZW5zdXJlQm9hcmRJZDooaWQsdmFsKT0+e1xuaWYoYm9hcmRPYmplY3RzLmJ5VmFsLmhhcyh2YWwpKXtcbmFzc2VydC5lcXVhbChib2FyZE9iamVjdHMuYnlWYWwuZ2V0KHZhbCksaWQpO1xucmV0dXJuO1xuIH1cbmluaXRTbG90VmFsKGJvYXJkT2JqZWN0cyxpZCx2YWwpO1xuIH0sXG5mcm9tTXlXYWxsZXQ6RmFyKCd3YWxsZXQgbWFyc2hhbGxlcicsey4uLm1hcnNoYWwuZnJvbU15V2FsbGV0fSksXG5mcm9tQm9hcmQ6RmFyKCdib2FyZCBtYXJzaGFsbGVyJyx7Li4ubWFyc2hhbC5mcm9tQm9hcmR9KX0pO1xuXG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZUltcG9ydENvbnRleHQobWFrZUltcG9ydENvbnRleHQpO1xuY29uc3QgbWFrZVByZXNlbmNlPShpZmFjZSxoYW5kbGVyKT0+e1xubGV0IG9iajtcblxudm9pZCBuZXcgSGFuZGxlZFByb21pc2UoKHJlc29sdmUscmVqZWN0LHJlc29sdmVXaXRoUHJlc2VuY2UpPT57XG5vYmo9cmVzb2x2ZVdpdGhQcmVzZW5jZShoYW5kbGVyKTtcbiB9KTtcbmFzc2VydChvYmopO1xucmV0dXJuIFJlbW90YWJsZShpZmFjZSx1bmRlZmluZWQsb2JqKTtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VMb2dnaW5nUHJlc2VuY2U9KGlmYWNlLGxvZyk9Pntcbi8qICAgICAgICAgICAgICAqLyAvL1xuY29uc3QgaXQ9bWFrZVByZXNlbmNlKGlmYWNlLHtcbmFwcGx5TWV0aG9kOih0YXJnZXQsbWV0aG9kLGFyZ3MpPT57XG5sb2coaGFyZGVuKFsnYXBwbHlNZXRob2QnLHRhcmdldCxtZXRob2QsYXJnc10pKTtcbiB9LFxuYXBwbHlGdW5jdGlvbjoodGFyZ2V0LGFyZ3MpPT57XG5sb2coaGFyZGVuKFsnYXBwbHlGdW5jdGlvbicsdGFyZ2V0LGFyZ3NdKSk7XG4gfX0pO1xuXG5yZXR1cm4gaXQ7XG4gfTskaM2PX29uY2UubWFrZUxvZ2dpbmdQcmVzZW5jZShtYWtlTG9nZ2luZ1ByZXNlbmNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VFeHBvcnRDb250ZXh0IjpbIm1ha2VFeHBvcnRDb250ZXh0Il0sIm1ha2VJbXBvcnRDb250ZXh0IjpbIm1ha2VJbXBvcnRDb250ZXh0Il0sIm1ha2VMb2dnaW5nUHJlc2VuY2UiOlsibWFrZUxvZ2dpbmdQcmVzZW5jZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADIQNAGlA0AAJQNAAAnAAAAQGFnb3JpYy9zdG9yZS12MC45LjMtdTE4LjEvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIiwiLi9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanMiLCIuL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanMiLCIuL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyIsIi4vc3RvcmVzL3N0b3JlLXV0aWxzLmpzIiwiQGVuZG8vZXhvIiwiLi9sZWdhY3kvbGVnYWN5TWFwLmpzIiwiLi9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyIsIi4vdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJhc3NlcnRLZXkiLCJhc3NlcnRLZXkiLCJkZWZpbmVFeG9DbGFzcyIsImRlZmluZUV4b0NsYXNzIiwibXVzdE1hdGNoIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHlwZWxlc3NNdXN0TWF0Y2g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKHR5cGVsZXNzTXVzdE1hdGNoID0gJGjNj19hKV1dXV0sW1wiLi9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc3RvcmUtdXRpbHMuanNcIiwgW11dLFtcIkBlbmRvL2V4b1wiLCBbXV0sW1wiLi9sZWdhY3kvbGVnYWN5TWFwLmpzXCIsIFtdXSxbXCIuL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzXCIsIFtdXSxbXCIuL3R5cGVzLmpzXCIsIFtdXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG11c3RNYXRjaD10eXBlbGVzc011c3RNYXRjaDskaM2PX29uY2UubXVzdE1hdGNoKG11c3RNYXRjaCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiOltbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qcyI6W1sibWFrZVNjYWxhclNldFN0b3JlIiwibWFrZVNjYWxhclNldFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanMiOltbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyI6W1sibWFrZVNjYWxhck1hcFN0b3JlIiwibWFrZVNjYWxhck1hcFN0b3JlIl1dLCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qcyI6W1sicHJvdmlkZUxhenkiLCJwcm92aWRlTGF6eSJdXSwiQGVuZG8vcGF0dGVybnMiOltbImlzS2V5IiwiaXNLZXkiXSxbImFzc2VydEtleSIsImFzc2VydEtleSJdLFsiYXNzZXJ0U2NhbGFyS2V5IiwiYXNzZXJ0U2NhbGFyS2V5Il0sWyJtYWtlQ29weVNldCIsIm1ha2VDb3B5U2V0Il0sWyJnZXRDb3B5U2V0S2V5cyIsImdldENvcHlTZXRLZXlzIl0sWyJtYWtlQ29weUJhZyIsIm1ha2VDb3B5QmFnIl0sWyJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyIsIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIl0sWyJnZXRDb3B5QmFnRW50cmllcyIsImdldENvcHlCYWdFbnRyaWVzIl0sWyJtYWtlQ29weU1hcCIsIm1ha2VDb3B5TWFwIl0sWyJnZXRDb3B5TWFwRW50cmllcyIsImdldENvcHlNYXBFbnRyaWVzIl0sWyJjb2VyY2VUb0VsZW1lbnRzIiwiY29lcmNlVG9FbGVtZW50cyJdLFsiY29lcmNlVG9CYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIl0sWyJjb21wYXJlS2V5cyIsImNvbXBhcmVLZXlzIl0sWyJrZXlMVCIsImtleUxUIl0sWyJrZXlMVEUiLCJrZXlMVEUiXSxbImtleUVRIiwia2V5RVEiXSxbImtleUdURSIsImtleUdURSJdLFsia2V5R1QiLCJrZXlHVCJdLFsiZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNJc1N1cGVyc2V0Il0sWyJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzRGlzam9pbnQiXSxbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzQ29tcGFyZSJdLFsiZWxlbWVudHNVbmlvbiIsImVsZW1lbnRzVW5pb24iXSxbImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiJdLFsiZWxlbWVudHNJbnRlcnNlY3Rpb24iLCJlbGVtZW50c0ludGVyc2VjdGlvbiJdLFsiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IiwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0Il0sWyJzZXRJc1N1cGVyc2V0Iiwic2V0SXNTdXBlcnNldCJdLFsic2V0SXNEaXNqb2ludCIsInNldElzRGlzam9pbnQiXSxbInNldENvbXBhcmUiLCJzZXRDb21wYXJlIl0sWyJzZXRVbmlvbiIsInNldFVuaW9uIl0sWyJzZXREaXNqb2ludFVuaW9uIiwic2V0RGlzam9pbnRVbmlvbiJdLFsic2V0SW50ZXJzZWN0aW9uIiwic2V0SW50ZXJzZWN0aW9uIl0sWyJzZXREaXNqb2ludFN1YnRyYWN0Iiwic2V0RGlzam9pbnRTdWJ0cmFjdCJdLFsiYmFnSXNTdXBlcmJhZyIsImJhZ0lzU3VwZXJiYWciXSxbImJhZ0NvbXBhcmUiLCJiYWdDb21wYXJlIl0sWyJiYWdVbmlvbiIsImJhZ1VuaW9uIl0sWyJiYWdJbnRlcnNlY3Rpb24iLCJiYWdJbnRlcnNlY3Rpb24iXSxbImJhZ0Rpc2pvaW50U3VidHJhY3QiLCJiYWdEaXNqb2ludFN1YnRyYWN0Il0sWyJNIiwiTSJdLFsiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIl0sWyJpc1BhdHRlcm4iLCJpc1BhdHRlcm4iXSxbImFzc2VydFBhdHRlcm4iLCJhc3NlcnRQYXR0ZXJuIl0sWyJtYXRjaGVzIiwibWF0Y2hlcyJdLFsiaXNDb3B5U2V0IiwiaXNDb3B5U2V0Il0sWyJpc0NvcHlNYXAiLCJpc0NvcHlNYXAiXV0sIkBlbmRvL2V4byI6W1siaW5pdEVtcHR5IiwiaW5pdEVtcHR5Il0sWyJkZWZpbmVFeG9DbGFzcyIsImRlZmluZUV4b0NsYXNzIl0sWyJkZWZpbmVFeG9DbGFzc0tpdCIsImRlZmluZUV4b0NsYXNzS2l0Il0sWyJtYWtlRXhvIiwibWFrZUV4byJdXSwiLi9sZWdhY3kvbGVnYWN5TWFwLmpzIjpbWyJtYWtlTGVnYWN5TWFwIiwibWFrZUxlZ2FjeU1hcCJdXSwiLi9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyI6W1sibWFrZUxlZ2FjeVdlYWtNYXAiLCJtYWtlTGVnYWN5V2Vha01hcCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtdXN0TWF0Y2giOlsibXVzdE1hdGNoIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPAiq641BQAANQUAADIAAABAYWdvcmljL3N0b3JlLXYwLjkuMy11MTguMS9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlTGVnYWN5TWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VMZWdhY3lNYXA9KHRhZz0na2V5Jyk9PntcbmNvbnN0IG09bmV3IE1hcCgpO1xuY29uc3QgYXNzZXJ0S2V5RG9lc05vdEV4aXN0PShrZXkpPT5cbiFtLmhhcyhrZXkpfHxGYWlsIGAke3EodGFnKX0gYWxyZWFkeSByZWdpc3RlcmVkOiAke2tleX1gO1xuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbm0uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIG0uaGFzKGtleSk7XG4gfSxcbmluaXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleURvZXNOb3RFeGlzdChrZXkpO1xubS5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZ2V0OihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbnJldHVybiBtLmdldChrZXkpO1xuIH0sXG5zZXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xubS5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbm0uZGVsZXRlKGtleSk7XG4gfSxcbmtleXM6KCk9Pm0ua2V5cygpLFxudmFsdWVzOigpPT5tLnZhbHVlcygpLFxuZW50cmllczooKT0+bS5lbnRyaWVzKCksXG5nZXRTaXplOigpPT5tLnNpemUsXG5jbGVhcjooKT0+bS5jbGVhcigpfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlTGVnYWN5TWFwKG1ha2VMZWdhY3lNYXApO1xuaGFyZGVuKG1ha2VMZWdhY3lNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUxlZ2FjeU1hcCI6WyJtYWtlTGVnYWN5TWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALrETe33BAAA9wQAADYAAABAYWdvcmljL3N0b3JlLXYwLjkuMy11MTguMS9zcmMvbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsibWFrZUxlZ2FjeVdlYWtNYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VMZWdhY3lXZWFrTWFwPSh0YWc9J2tleScpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB3bT1uZXcgV2Vha01hcCgpO1xuY29uc3QgYXNzZXJ0S2V5RG9lc05vdEV4aXN0PShrZXkpPT5cbiF3bS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IGFscmVhZHkgcmVnaXN0ZXJlZDogJHtrZXl9YDtcbmNvbnN0IGFzc2VydEtleUV4aXN0cz0oa2V5KT0+XG53bS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IG5vdCBmb3VuZDogJHtrZXl9YDtcbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4gd20uaGFzKGtleSk7XG4gfSxcbmluaXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleURvZXNOb3RFeGlzdChrZXkpO1xud20uc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmdldDooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG4vL1xucmV0dXJuICgvKiAgICAgICAgICAgICovd20uZ2V0KGtleSkpO1xuIH0sXG5zZXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xud20uc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG53bS5kZWxldGUoa2V5KTtcbiB9fSk7XG5cbiB9OyRozY9fb25jZS5tYWtlTGVnYWN5V2Vha01hcChtYWtlTGVnYWN5V2Vha01hcCk7XG5oYXJkZW4obWFrZUxlZ2FjeVdlYWtNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUxlZ2FjeVdlYWtNYXAiOlsibWFrZUxlZ2FjeVdlYWtNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAO148gpwQAACcEAAANwAAAEBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxOC4xL3NyYy9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wYXR0ZXJucyIsIi4vc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwiLi9zdG9yZS11dGlscy5qcyJdLCJleHBvcnRzIjpbIm1ha2VNYXBTdG9yZU1ldGhvZHMiLCJtYWtlU2NhbGFyTWFwU3RvcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYXIsYXNzZXJ0UGFzc2FibGUsZmlsdGVySXRlcmFibGUsbWFwSXRlcmFibGUsY29tcGFyZVJhbmssYXNzZXJ0U2NhbGFyS2V5LG1ha2VDb3B5TWFwLG1hdGNoZXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4sbWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMsbWFrZUN1cnJlbnRLZXlzS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcImZpbHRlckl0ZXJhYmxlXCIsIFskaM2PX2EgPT4gKGZpbHRlckl0ZXJhYmxlID0gJGjNj19hKV1dLFtcIm1hcEl0ZXJhYmxlXCIsIFskaM2PX2EgPT4gKG1hcEl0ZXJhYmxlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiY29tcGFyZVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiYXNzZXJ0U2NhbGFyS2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydFNjYWxhcktleSA9ICRozY9fYSldXSxbXCJtYWtlQ29weU1hcFwiLCBbJGjNj19hID0+IChtYWtlQ29weU1hcCA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV1dXSxbXCIuL3NjYWxhcldlYWtNYXBTdG9yZS5qc1wiLCBbW1wibWFrZVdlYWtNYXBTdG9yZU1ldGhvZHNcIiwgWyRozY9fYSA9PiAobWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMgPSAkaM2PX2EpXV1dXSxbXCIuL3N0b3JlLXV0aWxzLmpzXCIsIFtbXCJtYWtlQ3VycmVudEtleXNLaXRcIiwgWyRozY9fYSA9PiAobWFrZUN1cnJlbnRLZXlzS2l0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1hcFN0b3JlTWV0aG9kcz0oXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydEtleU9rVG9EZWxldGU9dW5kZWZpbmVkLFxudGFnPSdrZXknKT0+XG57XG5jb25zdHthc3NlcnRVcGRhdGVPbkFkZCxhc3NlcnRVcGRhdGVPbkRlbGV0ZSxpdGVyYWJsZUtleXN9PVxubWFrZUN1cnJlbnRLZXlzS2l0KFxuKCk9PmpzbWFwLmtleXMoKSxcbihrKT0+anNtYXAuaGFzKGspLFxuY29tcGFyZVJhbmssXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlLFxudGFnKTtcblxuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IGtleXM9KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGl0ZXJhYmxlS2V5cztcbiB9XG5jb25zdCBmaWx0ZXI9KGspPT57XG5pZihrZXlQYXR0IT09dW5kZWZpbmVkJiYhbWF0Y2hlcyhrLGtleVBhdHQpKXtcbnJldHVybiBmYWxzZTtcbiB9XG4vL1xuaWYodmFsdWVQYXR0IT09dW5kZWZpbmVkJiYhbWF0Y2hlcyhqc21hcC5nZXQoayksdmFsdWVQYXR0KSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcbnJldHVybiBmaWx0ZXJJdGVyYWJsZShpdGVyYWJsZUtleXMsZmlsdGVyKTtcbiB9O1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHZhbHVlcz0oa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PlxubWFwSXRlcmFibGUoa2V5cyhrZXlQYXR0LHZhbHVlUGF0dCksKGspPT4vKiAgICAgICAgICAgICovanNtYXAuZ2V0KGspKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBlbnRyaWVzPShrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5tYXBJdGVyYWJsZShrZXlzKGtleVBhdHQsdmFsdWVQYXR0KSwoayk9PltcbmssXG4vKiAgICAgICAgICAgICovanNtYXAuZ2V0KGspXSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG4uLi5tYWtlV2Vha01hcFN0b3JlTWV0aG9kcyhcbmpzbWFwLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxudGFnKSxcblxua2V5cyxcbnZhbHVlcyxcbmVudHJpZXMsXG5cbnNuYXBzaG90OihrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5tYWtlQ29weU1hcChlbnRyaWVzKGtleVBhdHQsdmFsdWVQYXR0KSksXG5cbmdldFNpemU6KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQmJnZhbHVlUGF0dD09PXVuZGVmaW5lZD9cbmpzbWFwLnNpemU6XG5bLi4ua2V5cyhrZXlQYXR0LHZhbHVlUGF0dCldLmxlbmd0aCxcblxuY2xlYXI6KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQpe1xuanNtYXAuY2xlYXIoKTtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIGtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpKXtcbmpzbWFwLmRlbGV0ZShrZXkpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZU1hcFN0b3JlTWV0aG9kcyhtYWtlTWFwU3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyTWFwU3RvcmU9KFxudGFnPSdrZXknLFxue2tleVNoYXBlPXVuZGVmaW5lZCx2YWx1ZVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzbWFwPW5ldyBNYXAoKTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4oa2V5U2hhcGUpO1xuIH1cbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybih2YWx1ZVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtWT2tUb1NldD0oX2tleSx2YWx1ZSk9Pntcbi8vXG4vL1xuaGFyZGVuKHZhbHVlKTtcblxuYXNzZXJ0UGFzc2FibGUodmFsdWUpO1xuaWYodmFsdWVTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2godmFsdWUsdmFsdWVTaGFwZSwnbWFwU3RvcmUgdmFsdWUnKTtcbiB9XG4gfTtcblxuY29uc3QgYXNzZXJ0S1ZPa1RvQWRkPShrZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xuXG5hc3NlcnRTY2FsYXJLZXkoa2V5KTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ21hcFN0b3JlIGtleScpO1xuIH1cbmFzc2VydEtWT2tUb1NldChrZXksdmFsdWUpO1xuIH07XG5cbnJldHVybiBGYXIoIGBzY2FsYXIgTWFwU3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlTWFwU3RvcmVNZXRob2RzKFxuanNtYXAsXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG51bmRlZmluZWQsXG50YWcpfSk7XG5cblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJNYXBTdG9yZShtYWtlU2NhbGFyTWFwU3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJNYXBTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWFwU3RvcmVNZXRob2RzIjpbIm1ha2VNYXBTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhck1hcFN0b3JlIjpbIm1ha2VTY2FsYXJNYXBTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACYLN8lzQsAAM0LAAA3AAAAQGFnb3JpYy9zdG9yZS12MC45LjMtdTE4LjEvc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIiwiLi9zY2FsYXJXZWFrU2V0U3RvcmUuanMiLCIuL3N0b3JlLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsibWFrZVNjYWxhclNldFN0b3JlIiwibWFrZVNldFN0b3JlTWV0aG9kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhcixmaWx0ZXJJdGVyYWJsZSxjb21wYXJlUmFuayxhc3NlcnRTY2FsYXJLZXksbWFrZUNvcHlTZXQsbWF0Y2hlcyxtdXN0TWF0Y2gsYXNzZXJ0UGF0dGVybixtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyxtYWtlQ3VycmVudEtleXNLaXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiZmlsdGVySXRlcmFibGVcIiwgWyRozY9fYSA9PiAoZmlsdGVySXRlcmFibGUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJjb21wYXJlUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlUmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJhc3NlcnRTY2FsYXJLZXlcIiwgWyRozY9fYSA9PiAoYXNzZXJ0U2NhbGFyS2V5ID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5U2V0XCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5U2V0ID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcImFzc2VydFBhdHRlcm5cIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRozY9fYSldXV1dLFtcIi4vc2NhbGFyV2Vha1NldFN0b3JlLmpzXCIsIFtbXCJtYWtlV2Vha1NldFN0b3JlTWV0aG9kc1wiLCBbJGjNj19hID0+IChtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyA9ICRozY9fYSldXV1dLFtcIi4vc3RvcmUtdXRpbHMuanNcIiwgW1tcIm1ha2VDdXJyZW50S2V5c0tpdFwiLCBbJGjNj19hID0+IChtYWtlQ3VycmVudEtleXNLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTZXRTdG9yZU1ldGhvZHM9KFxuanNzZXQsXG5hc3NlcnRLZXlPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5jb25zdHthc3NlcnRVcGRhdGVPbkFkZCxhc3NlcnRVcGRhdGVPbkRlbGV0ZSxpdGVyYWJsZUtleXN9PVxubWFrZUN1cnJlbnRLZXlzS2l0KFxuKCk9Pmpzc2V0LmtleXMoKSxcbihrKT0+anNzZXQuaGFzKGspLFxuY29tcGFyZVJhbmssXG5hc3NlcnRLZXlPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZSxcbmtleU5hbWUpO1xuXG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGtleXM9KGtleVBhdHQ9dW5kZWZpbmVkKT0+XG5rZXlQYXR0PT09dW5kZWZpbmVkP1xuaXRlcmFibGVLZXlzOlxuZmlsdGVySXRlcmFibGUoaXRlcmFibGVLZXlzLChrKT0+bWF0Y2hlcyhrLGtleVBhdHQpKTtcblxucmV0dXJuIGhhcmRlbih7XG4uLi5tYWtlV2Vha1NldFN0b3JlTWV0aG9kcyhcbmpzc2V0LFxuYXNzZXJ0VXBkYXRlT25BZGQsXG5hc3NlcnRVcGRhdGVPbkRlbGV0ZSxcbmtleU5hbWUpLFxuXG5cbmtleXMsXG5cbnZhbHVlczprZXlzLFxuXG5zbmFwc2hvdDooa2V5UGF0dD11bmRlZmluZWQpPT5tYWtlQ29weVNldChrZXlzKGtleVBhdHQpKSxcblxuZ2V0U2l6ZTooa2V5UGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQ/anNzZXQuc2l6ZTpbLi4ua2V5cyhrZXlQYXR0KV0ubGVuZ3RoLFxuXG5jbGVhcjooa2V5UGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkKXtcbmpzc2V0LmNsZWFyKCk7XG4gfVxuZm9yKGNvbnN0IGtleSBvZiBrZXlzKGtleVBhdHQpKXtcbmpzc2V0LmRlbGV0ZShrZXkpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlU2V0U3RvcmVNZXRob2RzKG1ha2VTZXRTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJTZXRTdG9yZT0oXG50YWc9J2tleScsXG57a2V5U2hhcGU9dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QganNzZXQ9bmV3IFNldCgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLZXlPa1RvQWRkPShrZXkpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xuXG5hc3NlcnRTY2FsYXJLZXkoa2V5KTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ3NldFN0b3JlIGtleScpO1xuIH1cbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFNldFN0b3JlIG9mICR7cSh0YWcpfWAse1xuLi4ubWFrZVNldFN0b3JlTWV0aG9kcyhqc3NldCxhc3NlcnRLZXlPa1RvQWRkLHVuZGVmaW5lZCx0YWcpfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlU2NhbGFyU2V0U3RvcmUobWFrZVNjYWxhclNldFN0b3JlKTtcbmhhcmRlbihtYWtlU2NhbGFyU2V0U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVNldFN0b3JlTWV0aG9kcyI6WyJtYWtlU2V0U3RvcmVNZXRob2RzIl0sIm1ha2VTY2FsYXJTZXRTdG9yZSI6WyJtYWtlU2NhbGFyU2V0U3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA6Q453LANAACwDQAAOwAAAEBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxOC4xL3NyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiLCJtYWtlV2Vha01hcFN0b3JlTWV0aG9kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwsRmFyLGFzc2VydFBhc3NhYmxlLHBhc3NTdHlsZU9mLGdldENvcHlNYXBFbnRyaWVzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLGlzQ29weU1hcDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiZ2V0Q29weU1hcEVudHJpZXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEVudHJpZXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV0sW1wiaXNDb3B5TWFwXCIsIFskaM2PX2EgPT4gKGlzQ29weU1hcCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzPShcbmpzbWFwLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5jb25zdCBhc3NlcnRLZXlEb2VzTm90RXhpc3Q9KGtleSk9PlxuIWpzbWFwLmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IGFscmVhZHkgcmVnaXN0ZXJlZDogJHtrZXl9YDtcblxuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbmpzbWFwLmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IG5vdCBmb3VuZDogJHtrZXl9YDtcblxucmV0dXJuIGhhcmRlbih7XG5oYXM6KGtleSk9Pntcbi8vXG4vL1xuLy9cbnJldHVybiBqc21hcC5oYXMoa2V5KTtcbiB9LFxuZ2V0OihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbi8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgKi9qc21hcC5nZXQoa2V5KSk7XG4gfSxcblxuaW5pdDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RG9lc05vdEV4aXN0KGtleSk7XG5hc3NlcnRLVk9rVG9BZGQoa2V5LHZhbHVlKTtcbmpzbWFwLnNldChrZXksdmFsdWUpO1xuIH0sXG5zZXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuYXNzZXJ0S1ZPa1RvU2V0KGtleSx2YWx1ZSk7XG5qc21hcC5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbmlmKGFzc2VydEtleU9rVG9EZWxldGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0S2V5T2tUb0RlbGV0ZShrZXkpO1xuIH1cbmpzbWFwLmRlbGV0ZShrZXkpO1xuIH0sXG5cbmFkZEFsbDooZW50cmllcyk9PntcbmlmKHR5cGVvZiBlbnRyaWVzW1N5bWJvbC5pdGVyYXRvcl0hPT0nZnVuY3Rpb24nKXtcbmlmKE9iamVjdC5pc0Zyb3plbihlbnRyaWVzKSYmaXNDb3B5TWFwKGVudHJpZXMpKXtcbi8vXG5lbnRyaWVzPWdldENvcHlNYXBFbnRyaWVzKGVudHJpZXMpO1xuIH1lbHNle1xuRmFpbCBgcHJvdmlkZWQgZGF0YSBzb3VyY2UgaXMgbm90IGl0ZXJhYmxlOiAke2VudHJpZXN9YDtcbiB9XG4gfVxuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9lbnRyaWVzKXtcbi8vXG5hc3NlcnRLVk9rVG9BZGQoa2V5LHZhbHVlKTtcbmpzbWFwLnNldChrZXksdmFsdWUpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMobWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJXZWFrTWFwU3RvcmU9KFxudGFnPSdrZXknLFxue2xvbmdMaXZlZD10cnVlLGtleVNoYXBlPXVuZGVmaW5lZCx2YWx1ZVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzbWFwPW5ldyhsb25nTGl2ZWQ/V2Vha01hcDpNYXApKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4odmFsdWVTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLVk9rVG9TZXQ9KF9rZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbih2YWx1ZSk7XG5cbmFzc2VydFBhc3NhYmxlKHZhbHVlKTtcbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKHZhbHVlLHZhbHVlU2hhcGUsJ3dlYWtNYXBTdG9yZSB2YWx1ZScpO1xuIH1cbiB9O1xuXG5jb25zdCBhc3NlcnRLVk9rVG9BZGQ9KGtleSx2YWx1ZSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5wYXNzU3R5bGVPZihrZXkpPT09J3JlbW90YWJsZSd8fFxuRmFpbCBgT25seSByZW1vdGFibGVzIGNhbiBiZSBrZXlzIG9mIHNjYWxhciBXZWFrTWFwU3RvcmVzOiAke2tleX1gO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnd2Vha01hcFN0b3JlIGtleScpO1xuIH1cbmFzc2VydEtWT2tUb1NldChrZXksdmFsdWUpO1xuIH07XG5cbnJldHVybiBGYXIoIGBzY2FsYXIgV2Vha01hcFN0b3JlIG9mICR7cSh0YWcpfWAse1xuLi4ubWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMoXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbnVuZGVmaW5lZCxcbnRhZyl9KTtcblxuXG4gfTskaM2PX29uY2UubWFrZVNjYWxhcldlYWtNYXBTdG9yZShtYWtlU2NhbGFyV2Vha01hcFN0b3JlKTtcbmhhcmRlbihtYWtlU2NhbGFyV2Vha01hcFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VXZWFrTWFwU3RvcmVNZXRob2RzIjpbIm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzIl0sIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiOlsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABUfScVcwoAAHMKAAA7AAAAQGFnb3JpYy9zdG9yZS12MC45LjMtdTE4LjEvc3JjL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsibWFrZVNjYWxhcldlYWtTZXRTdG9yZSIsIm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxGYXIscGFzc1N0eWxlT2YsZ2V0Q29weVNldEtleXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4saXNDb3B5U2V0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjNj19hID0+IChnZXRDb3B5U2V0S2V5cyA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcImFzc2VydFBhdHRlcm5cIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRozY9fYSldXSxbXCJpc0NvcHlTZXRcIiwgWyRozY9fYSA9PiAoaXNDb3B5U2V0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtTZXRTdG9yZU1ldGhvZHM9KFxuanNzZXQsXG5hc3NlcnRLZXlPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9PlxuanNzZXQuaGFzKGtleSl8fEZhaWwgYCR7cShrZXlOYW1lKX0gbm90IGZvdW5kOiAke2tleX1gO1xuXG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIGpzc2V0LmhhcyhrZXkpO1xuIH0sXG5cbmFkZDooa2V5KT0+e1xuYXNzZXJ0S2V5T2tUb0FkZChrZXkpO1xuanNzZXQuYWRkKGtleSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5pZihhc3NlcnRLZXlPa1RvRGVsZXRlIT09dW5kZWZpbmVkKXtcbmFzc2VydEtleU9rVG9EZWxldGUoa2V5KTtcbiB9XG5qc3NldC5kZWxldGUoa2V5KTtcbiB9LFxuXG5hZGRBbGw6KGtleXMpPT57XG5pZih0eXBlb2Yga2V5c1tTeW1ib2wuaXRlcmF0b3JdIT09J2Z1bmN0aW9uJyl7XG5pZihPYmplY3QuaXNGcm96ZW4oa2V5cykmJmlzQ29weVNldChrZXlzKSl7XG4vL1xua2V5cz1nZXRDb3B5U2V0S2V5cyhrZXlzKTtcbiB9ZWxzZXtcbkZhaWwgYHByb3ZpZGVkIGRhdGEgc291cmNlIGlzIG5vdCBpdGVyYWJsZTogJHtrZXlzfWA7XG4gfVxuIH1cbmZvcihjb25zdCBrZXkgb2YvKiAgICAgICAgICAgICAgICAgICAgICAqL2tleXMpe1xuYXNzZXJ0S2V5T2tUb0FkZChrZXkpO1xuanNzZXQuYWRkKGtleSk7XG4gfVxuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMobWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJXZWFrU2V0U3RvcmU9KFxudGFnPSdrZXknLFxue2xvbmdMaXZlZD10cnVlLGtleVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzc2V0PW5ldyhsb25nTGl2ZWQ/V2Vha1NldDpTZXQpKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtleU9rVG9BZGQ9KGtleSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5wYXNzU3R5bGVPZihrZXkpPT09J3JlbW90YWJsZSd8fFxuRmFpbCBgT25seSByZW1vdGFibGVzIGNhbiBiZSBrZXlzIG9mIHNjYWxhciBXZWFrU3RvcmVzOiAke2tleX1gO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnd2Vha1NldFN0b3JlIGtleScpO1xuIH1cbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFdlYWtTZXRTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKGpzc2V0LGFzc2VydEtleU9rVG9BZGQsdW5kZWZpbmVkLHRhZyl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUobWFrZVNjYWxhcldlYWtTZXRTdG9yZSk7XG5oYXJkZW4obWFrZVNjYWxhcldlYWtTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyI6WyJtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyJdLCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIjpbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAedsLh6sOAACrDgAANAAAAEBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxOC4xL3NyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiYXBwZW5kVG9TdG9yZWRBcnJheSIsImlzQ29weU1hcCIsImlzQ29weVNldCIsIm1ha2VBdG9taWNQcm92aWRlciIsIm1ha2VDdXJyZW50S2V5c0tpdCIsInByb3ZpZGVMYXp5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxGYXIsTSxtYXRjaGVzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NvcHlTZXQ9KHMpPT5tYXRjaGVzKHMsTS5zZXQoKSk7XG5cbi8vXG4vL1xuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5pc0NvcHlTZXQoaXNDb3B5U2V0KTtcbmNvbnN0ICAgICAgICBpc0NvcHlNYXA9KG0pPT5tYXRjaGVzKG0sTS5tYXAoKSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5pc0NvcHlNYXAoaXNDb3B5TWFwKTtcbmNvbnN0ICAgICAgICBtYWtlQ3VycmVudEtleXNLaXQ9KFxuZ2V0UmF3S2V5cyxcbmNoZWNrSGFzLFxuY29tcGFyZSxcbmFzc2VydE9rVG9BZGQsXG5hc3NlcnRPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmxldCB1cGRhdGVDb3VudD0wO1xubGV0IHNvcnRlZEtleXNNZW1vO1xuXG5jb25zdCBhc3NlcnRVcGRhdGVPbkFkZD0oayx2PXVuZGVmaW5lZCk9PntcbmFzc2VydE9rVG9BZGQoayx2KTtcbnVwZGF0ZUNvdW50Kz0xO1xuc29ydGVkS2V5c01lbW89dW5kZWZpbmVkO1xuIH07XG5cbmNvbnN0IGFzc2VydFVwZGF0ZU9uRGVsZXRlPShrKT0+YXNzZXJ0T2tUb0RlbGV0ZSYmYXNzZXJ0T2tUb0RlbGV0ZShrKTtcblxuY29uc3QgZ2V0U29ydGVkS2V5cz0oKT0+e1xuaWYoc29ydGVkS2V5c01lbW89PT11bmRlZmluZWQpe1xuc29ydGVkS2V5c01lbW89aGFyZGVuKFsuLi5nZXRSYXdLZXlzKCldLnNvcnQoY29tcGFyZSkpO1xuIH1cbnJldHVybiBzb3J0ZWRLZXlzTWVtbztcbiB9O1xuXG5jb25zdCBpdGVyYWJsZUtleXM9RmFyKCdJdGVyYWJsZSBvZiBrZXlzJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgZ2VuZXJhdGlvbj11cGRhdGVDb3VudDtcbmdldFNvcnRlZEtleXMoKTtcbmNvbnN0IGxlbj1zb3J0ZWRLZXlzTWVtby5sZW5ndGg7XG5sZXQgaT0wO1xucmV0dXJuIEZhcignSXRlcmF0b3Igb2Yga2V5cycse1xubmV4dDooKT0+e1xuZ2VuZXJhdGlvbj09PXVwZGF0ZUNvdW50fHxGYWlsIGBTdG9yZSAke3Eoa2V5TmFtZSl9IGN1cnNvciBzdGFsZWA7XG4vL1xuLy9cbmZvcig7Oyl7XG5pZihpPGxlbil7XG5jb25zdCB2YWx1ZT1zb3J0ZWRLZXlzTWVtb1tpXTtcbmkrPTE7XG5pZihjaGVja0hhcyh2YWx1ZSkpe1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH1cbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9XG4gfVxuIH19KTtcblxuIH19KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmFzc2VydFVwZGF0ZU9uQWRkLFxuYXNzZXJ0VXBkYXRlT25EZWxldGUsXG5pdGVyYWJsZUtleXN9KTtcblxuIH07JGjNj19vbmNlLm1ha2VDdXJyZW50S2V5c0tpdChtYWtlQ3VycmVudEtleXNLaXQpO1xuaGFyZGVuKG1ha2VDdXJyZW50S2V5c0tpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByb3ZpZGVMYXp5PShtYXBTdG9yZSxrZXksbWFrZVZhbHVlKT0+e1xuaWYoIW1hcFN0b3JlLmhhcyhrZXkpKXtcbm1hcFN0b3JlLmluaXQoa2V5LG1ha2VWYWx1ZShrZXkpKTtcbiB9XG5yZXR1cm4gbWFwU3RvcmUuZ2V0KGtleSk7XG4gfTskaM2PX29uY2UucHJvdmlkZUxhenkocHJvdmlkZUxhenkpO1xuaGFyZGVuKHByb3ZpZGVMYXp5KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUF0b21pY1Byb3ZpZGVyPShzdG9yZSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGVuZGluZz1uZXcgTWFwKCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVBc3luYz0oa2V5LG1ha2VWYWx1ZSxmaW5pc2hWYWx1ZSk9PntcbmlmKHN0b3JlLmhhcyhrZXkpKXtcbnJldHVybiBQcm9taXNlLnJlc29sdmUoc3RvcmUuZ2V0KGtleSkpO1xuIH1cbmlmKCFwZW5kaW5nLmhhcyhrZXkpKXtcbmNvbnN0IHZhbFA9bWFrZVZhbHVlKGtleSkuXG50aGVuKCh2KT0+e1xuc3RvcmUuaW5pdChrZXksdik7XG5yZXR1cm4gdjtcbiB9KS5cbnRoZW4oKHYpPT57XG5pZihmaW5pc2hWYWx1ZSl7XG5yZXR1cm4gZmluaXNoVmFsdWUoa2V5LHYpLnRoZW4oKCk9PnYpO1xuIH1cbnJldHVybiB2O1xuIH0pLlxuZmluYWxseSgoKT0+e1xucGVuZGluZy5kZWxldGUoa2V5KTtcbiB9KTtcbnBlbmRpbmcuc2V0KGtleSx2YWxQKTtcbiB9XG5jb25zdCB2YWxQPXBlbmRpbmcuZ2V0KGtleSk7XG5hc3NlcnQodmFsUCk7XG5yZXR1cm4gdmFsUDtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtwcm92aWRlQXN5bmN9KTtcbiB9OyRozY9fb25jZS5tYWtlQXRvbWljUHJvdmlkZXIobWFrZUF0b21pY1Byb3ZpZGVyKTtcbmhhcmRlbihtYWtlQXRvbWljUHJvdmlkZXIpO1xuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFwcGVuZFRvU3RvcmVkQXJyYXk9KG1hcFN0b3JlLGtleSxpdGVtKT0+e1xuaWYobWFwU3RvcmUuaGFzKGtleSkpe1xuY29uc3QgZXh0YW50PW1hcFN0b3JlLmdldChrZXkpO1xubWFwU3RvcmUuc2V0KGtleSxoYXJkZW4oWy4uLmV4dGFudCxpdGVtXSkpO1xuIH1lbHNle1xubWFwU3RvcmUuaW5pdChrZXksaGFyZGVuKFtpdGVtXSkpO1xuIH1cbiB9OyRozY9fb25jZS5hcHBlbmRUb1N0b3JlZEFycmF5KGFwcGVuZFRvU3RvcmVkQXJyYXkpO1xuaGFyZGVuKGFwcGVuZFRvU3RvcmVkQXJyYXkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNDb3B5U2V0IjpbImlzQ29weVNldCJdLCJpc0NvcHlNYXAiOlsiaXNDb3B5TWFwIl0sIm1ha2VDdXJyZW50S2V5c0tpdCI6WyJtYWtlQ3VycmVudEtleXNLaXQiXSwicHJvdmlkZUxhenkiOlsicHJvdmlkZUxhenkiXSwibWFrZUF0b21pY1Byb3ZpZGVyIjpbIm1ha2VBdG9taWNQcm92aWRlciJdLCJhcHBlbmRUb1N0b3JlZEFycmF5IjpbImFwcGVuZFRvU3RvcmVkQXJyYXkiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAJwAAAEBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxOC4xL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABf/mwKAWAACgFgAALgAAAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLXUxOC4xL3NyYy9leG8tdXRpbHMuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSIsIi4vdmF0LWRhdGEtYmluZGluZ3MuanMiXSwiZXhwb3J0cyI6WyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiLCJkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3MiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJpZ25vcmVDb250ZXh0IiwibWFrZUV4b1V0aWxzIiwicHJlcGFyZUV4byIsInByZXBhcmVFeG9DbGFzcyIsInByZXBhcmVFeG9DbGFzc0tpdCIsInByZXBhcmVLaW5kIiwicHJlcGFyZUtpbmRNdWx0aSIsInByZXBhcmVTaW5nbGV0b24iLCJwcm92aWRlS2luZEhhbmRsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpbml0RW1wdHkscHJvdmlkZSxnbG9iYWxWYXREYXRhOyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiaW5pdEVtcHR5XCIsIFskaM2PX2EgPT4gKGluaXRFbXB0eSA9ICRozY9fYSldXV1dLFtcIi4vdmF0LWRhdGEtYmluZGluZ3MuanNcIiwgW1tcInByb3ZpZGVcIiwgWyRozY9fYSA9PiAocHJvdmlkZSA9ICRozY9fYSldXSxbXCJWYXREYXRhXCIsIFskaM2PX2EgPT4gKGdsb2JhbFZhdERhdGEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cbi8qXG5cbiAqL1xuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlnbm9yZUNvbnRleHQ9XG4oZm4pPT5cbihfY29udGV4dCwuLi5hcmdzKT0+XG5mbiguLi5hcmdzKTskaM2PX29uY2UuaWdub3JlQ29udGV4dChpZ25vcmVDb250ZXh0KTtcbmhhcmRlbihpZ25vcmVDb250ZXh0KTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZUV4b1V0aWxzPShWYXREYXRhKT0+e1xuY29uc3R7XG5kZWZpbmVLaW5kLFxuZGVmaW5lS2luZE11bHRpLFxuZGVmaW5lRHVyYWJsZUtpbmQsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpLFxubWFrZUtpbmRIYW5kbGV9PVxuVmF0RGF0YTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVLaW5kSGFuZGxlPShiYWdnYWdlLGtpbmROYW1lKT0+XG5wcm92aWRlKGJhZ2dhZ2UsIGAke2tpbmROYW1lfV9raW5kSGFuZGxlYCwoKT0+bWFrZUtpbmRIYW5kbGUoa2luZE5hbWUpKTtcbmhhcmRlbihwcm92aWRlS2luZEhhbmRsZSk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVLaW5kPShcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmluaXQsXG5iZWhhdmlvcixcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVLaW5kKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVLaW5kKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZUtpbmRNdWx0aT0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVLaW5kTXVsdGkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZVZpcnR1YWxFeG9DbGFzcz0odGFnLGludGVyZmFjZUd1YXJkLGluaXQsbWV0aG9kcyxvcHRpb25zKT0+XG4vL1xuZGVmaW5lS2luZCh0YWcsaW5pdCxtZXRob2RzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmR9KTtcblxuaGFyZGVuKGRlZmluZVZpcnR1YWxFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0PShcbnRhZyxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpPT5cblxuLy9cbmRlZmluZUtpbmRNdWx0aSh0YWcsaW5pdCxmYWNldHMse1xuLi4ub3B0aW9ucyxcbnRoaXNmdWxNZXRob2RzOnRydWUsXG5pbnRlcmZhY2VHdWFyZEtpdH0pO1xuXG5oYXJkZW4oZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWZpbmVEdXJhYmxlRXhvQ2xhc3M9KFxua2luZEhhbmRsZSxcbmludGVyZmFjZUd1YXJkLFxuaW5pdCxcbm1ldGhvZHMsXG5vcHRpb25zKT0+XG5cbi8vXG5kZWZpbmVEdXJhYmxlS2luZChraW5kSGFuZGxlLGluaXQsbWV0aG9kcyx7XG4uLi5vcHRpb25zLFxudGhpc2Z1bE1ldGhvZHM6dHJ1ZSxcbmludGVyZmFjZUd1YXJkfSk7XG5cbmhhcmRlbihkZWZpbmVEdXJhYmxlRXhvQ2xhc3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdD0oXG5raW5kSGFuZGxlLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxuZmFjZXRzLFxub3B0aW9ucyk9PlxuXG4vL1xuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aShraW5kSGFuZGxlLGluaXQsZmFjZXRzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmRLaXR9KTtcblxuaGFyZGVuKGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlRXhvQ2xhc3M9KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVFeG9DbGFzcyhcbnByb3ZpZGVLaW5kSGFuZGxlKGJhZ2dhZ2Usa2luZE5hbWUpLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUV4b0NsYXNzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG9DbGFzc0tpdD0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5mYWNldHMsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQoXG5wcm92aWRlS2luZEhhbmRsZShiYWdnYWdlLGtpbmROYW1lKSxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG89KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5tZXRob2RzLFxub3B0aW9ucz11bmRlZmluZWQpPT5cbntcbmNvbnN0IG1ha2VTaW5nbGV0b249cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0RW1wdHksXG5tZXRob2RzLFxub3B0aW9ucyk7XG5cblxucmV0dXJuIHByb3ZpZGUoYmFnZ2FnZSwgYCR7a2luZE5hbWV9X3NpbmdsZXRvbmAsKCk9Pm1ha2VTaW5nbGV0b24oKSk7XG4gfTtcbmhhcmRlbihwcmVwYXJlRXhvKTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVTaW5nbGV0b249KGJhZ2dhZ2Usa2luZE5hbWUsbWV0aG9kcyxvcHRpb25zPXVuZGVmaW5lZCk9PlxucHJlcGFyZUV4byhiYWdnYWdlLGtpbmROYW1lLHVuZGVmaW5lZCxtZXRob2RzLG9wdGlvbnMpO1xuaGFyZGVuKHByZXBhcmVTaW5nbGV0b24pO1xuXG5yZXR1cm4gaGFyZGVuKHtcbmRlZmluZVZpcnR1YWxFeG9DbGFzcyxcbmRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCxcbmRlZmluZUR1cmFibGVFeG9DbGFzcyxcbmRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG9DbGFzcyxcbnByZXBhcmVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG8sXG5cbnByZXBhcmVTaW5nbGV0b24sXG5wcm92aWRlS2luZEhhbmRsZSxcbnByZXBhcmVLaW5kLFxucHJlcGFyZUtpbmRNdWx0aX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUV4b1V0aWxzKG1ha2VFeG9VdGlscyk7XG5cbmNvbnN0IGdsb2JhbEV4b1V0aWxzPW1ha2VFeG9VdGlscyhnbG9iYWxWYXREYXRhKTtcblxuY29uc3QgICAgICAge1xuZGVmaW5lVmlydHVhbEV4b0NsYXNzLFxuZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0LFxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzLFxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0LFxucHJlcGFyZUV4b0NsYXNzLFxucHJlcGFyZUV4b0NsYXNzS2l0LFxucHJlcGFyZUV4byxcbnByZXBhcmVTaW5nbGV0b259PVxuZ2xvYmFsRXhvVXRpbHM7XG5cbi8qXG5cbiAqLyRozY9fb25jZS5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3MoZGVmaW5lVmlydHVhbEV4b0NsYXNzKTskaM2PX29uY2UuZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KGRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCk7JGjNj19vbmNlLmRlZmluZUR1cmFibGVFeG9DbGFzcyhkZWZpbmVEdXJhYmxlRXhvQ2xhc3MpOyRozY9fb25jZS5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQoZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0KTskaM2PX29uY2UucHJlcGFyZUV4b0NsYXNzKHByZXBhcmVFeG9DbGFzcyk7JGjNj19vbmNlLnByZXBhcmVFeG9DbGFzc0tpdChwcmVwYXJlRXhvQ2xhc3NLaXQpOyRozY9fb25jZS5wcmVwYXJlRXhvKHByZXBhcmVFeG8pOyRozY9fb25jZS5wcmVwYXJlU2luZ2xldG9uKHByZXBhcmVTaW5nbGV0b24pO1xuY29uc3QgICAgICAge3Byb3ZpZGVLaW5kSGFuZGxlLHByZXBhcmVLaW5kLHByZXBhcmVLaW5kTXVsdGl9PVxuZ2xvYmFsRXhvVXRpbHM7JGjNj19vbmNlLnByb3ZpZGVLaW5kSGFuZGxlKHByb3ZpZGVLaW5kSGFuZGxlKTskaM2PX29uY2UucHJlcGFyZUtpbmQocHJlcGFyZUtpbmQpOyRozY9fb25jZS5wcmVwYXJlS2luZE11bHRpKHByZXBhcmVLaW5kTXVsdGkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaWdub3JlQ29udGV4dCI6WyJpZ25vcmVDb250ZXh0Il0sIm1ha2VFeG9VdGlscyI6WyJtYWtlRXhvVXRpbHMiXSwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIjpbImRlZmluZVZpcnR1YWxFeG9DbGFzcyJdLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0Il0sImRlZmluZUR1cmFibGVFeG9DbGFzcyI6WyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiXSwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IjpbImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCJdLCJwcmVwYXJlRXhvQ2xhc3MiOlsicHJlcGFyZUV4b0NsYXNzIl0sInByZXBhcmVFeG9DbGFzc0tpdCI6WyJwcmVwYXJlRXhvQ2xhc3NLaXQiXSwicHJlcGFyZUV4byI6WyJwcmVwYXJlRXhvIl0sInByZXBhcmVTaW5nbGV0b24iOlsicHJlcGFyZVNpbmdsZXRvbiJdLCJwcm92aWRlS2luZEhhbmRsZSI6WyJwcm92aWRlS2luZEhhbmRsZSJdLCJwcmVwYXJlS2luZCI6WyJwcmVwYXJlS2luZCJdLCJwcmVwYXJlS2luZE11bHRpIjpbInByZXBhcmVLaW5kTXVsdGkiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAuPUWMKgIAACoCAAAKgAAAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLXUxOC4xL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIiwiLi92YXQtZGF0YS1iaW5kaW5ncy5qcyIsIi4vZXhvLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwibWFrZVNjYWxhck1hcFN0b3JlIiwibWFrZVNjYWxhck1hcFN0b3JlIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtdXSxbXCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzXCIsIFtdXSxbXCIuL2V4by11dGlscy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7IkBhZ29yaWMvc3RvcmUiOltbIk0iLCJNIl0sWyJtYWtlU2NhbGFyTWFwU3RvcmUiLCJtYWtlU2NhbGFyTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIl0sWyJtYWtlU2NhbGFyU2V0U3RvcmUiLCJtYWtlU2NhbGFyU2V0U3RvcmUiXSxbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl1dLCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIjpbWyJtYWtlS2luZEhhbmRsZSIsIm1ha2VLaW5kSGFuZGxlIl0sWyJwcm92aWRlUHJvbWlzZVdhdGNoZXIiLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiXSxbIndhdGNoUHJvbWlzZSIsIndhdGNoUHJvbWlzZSJdLFsibWFrZVNjYWxhckJpZ01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ01hcFN0b3JlIl0sWyJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSJdLFsibWFrZVNjYWxhckJpZ1NldFN0b3JlIiwibWFrZVNjYWxhckJpZ1NldFN0b3JlIl0sWyJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSJdLFsiY2FuQmVEdXJhYmxlIiwiY2FuQmVEdXJhYmxlIl0sWyJwaWNrRmFjZXQiLCJwaWNrRmFjZXQiXSxbInBhcnRpYWxBc3NpZ24iLCJwYXJ0aWFsQXNzaWduIl0sWyJwcm92aWRlIiwicHJvdmlkZSJdLFsicHJvdmlkZUR1cmFibGVNYXBTdG9yZSIsInByb3ZpZGVEdXJhYmxlTWFwU3RvcmUiXSxbInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiXSxbInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiLCJwcm92aWRlRHVyYWJsZVNldFN0b3JlIl0sWyJwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIl0sWyJkZWZpbmVLaW5kIiwiZGVmaW5lS2luZCJdLFsiZGVmaW5lS2luZE11bHRpIiwiZGVmaW5lS2luZE11bHRpIl0sWyJkZWZpbmVEdXJhYmxlS2luZCIsImRlZmluZUR1cmFibGVLaW5kIl0sWyJkZWZpbmVEdXJhYmxlS2luZE11bHRpIiwiZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSJdXSwiLi9leG8tdXRpbHMuanMiOltbImRlZmluZVZpcnR1YWxFeG9DbGFzcyIsImRlZmluZVZpcnR1YWxFeG9DbGFzcyJdLFsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0Il0sWyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiLCJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiXSxbImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCIsImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCJdLFsicHJlcGFyZUV4b0NsYXNzIiwicHJlcGFyZUV4b0NsYXNzIl0sWyJwcmVwYXJlRXhvQ2xhc3NLaXQiLCJwcmVwYXJlRXhvQ2xhc3NLaXQiXSxbInByZXBhcmVFeG8iLCJwcmVwYXJlRXhvIl0sWyJwcmVwYXJlU2luZ2xldG9uIiwicHJlcGFyZVNpbmdsZXRvbiJdLFsiaWdub3JlQ29udGV4dCIsImlnbm9yZUNvbnRleHQiXSxbInByb3ZpZGVLaW5kSGFuZGxlIiwicHJvdmlkZUtpbmRIYW5kbGUiXSxbInByZXBhcmVLaW5kIiwicHJlcGFyZUtpbmQiXSxbInByZXBhcmVLaW5kTXVsdGkiLCJwcmVwYXJlS2luZE11bHRpIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAMEXLprBYAAKwWAAA2AAAAQGFnb3JpYy92YXQtZGF0YS12MC41LjMtdTE4LjEvc3JjL3ZhdC1kYXRhLWJpbmRpbmdzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJWYXREYXRhIiwiY2FuQmVEdXJhYmxlIiwiZGVmaW5lRHVyYWJsZUtpbmQiLCJkZWZpbmVEdXJhYmxlS2luZE11bHRpIiwiZGVmaW5lS2luZCIsImRlZmluZUtpbmRNdWx0aSIsIm1ha2VLaW5kSGFuZGxlIiwibWFrZVNjYWxhckJpZ01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ1NldFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSIsIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiLCJtYWtlU3RvcmVVdGlscyIsInBhcnRpYWxBc3NpZ24iLCJwaWNrRmFjZXQiLCJwcm92aWRlIiwicHJvdmlkZUR1cmFibGVNYXBTdG9yZSIsInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiLCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSIsInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIiwid2F0Y2hQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscHJvdmlkZUxhenk7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcInByb3ZpZGVMYXp5XCIsIFskaM2PX2EgPT4gKHByb3ZpZGVMYXp5ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmxldCBWYXREYXRhR2xvYmFsO1xuaWYoJ1ZhdERhdGEnaW4gZ2xvYmFsVGhpcyl7XG5nbG9iYWxUaGlzLlZhdERhdGF8fEZhaWwgYFZhdERhdGEgZGVmaW5lZCBpbiBnbG9iYWwgYXMgbnVsbCBvciB1bmRlZmluZWRgO1xuLy9cblZhdERhdGFHbG9iYWw9LyogICAgICAgICAgICAgICovZ2xvYmFsVGhpcy5WYXREYXRhO1xuIH1lbHNle1xuLy9cbi8vXG4vL1xuY29uc3QgdW5hdmFpbGFibGU9KCk9PkZhaWwgYFZhdERhdGEgdW5hdmFpbGFibGVgO1xuVmF0RGF0YUdsb2JhbD17XG5kZWZpbmVLaW5kOnVuYXZhaWxhYmxlLFxuZGVmaW5lS2luZE11bHRpOnVuYXZhaWxhYmxlLFxuZGVmaW5lRHVyYWJsZUtpbmQ6dW5hdmFpbGFibGUsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpOnVuYXZhaWxhYmxlLFxubWFrZUtpbmRIYW5kbGU6dW5hdmFpbGFibGUsXG5wcm92aWRlUHJvbWlzZVdhdGNoZXI6dW5hdmFpbGFibGUsXG53YXRjaFByb21pc2U6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmU6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlOnVuYXZhaWxhYmxlLFxubWFrZVNjYWxhckJpZ1NldFN0b3JlOnVuYXZhaWxhYmxlLFxubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZTp1bmF2YWlsYWJsZSxcbmNhbkJlRHVyYWJsZTp1bmF2YWlsYWJsZX07XG5cbiB9XG5cbmNvbnN0IFZhdERhdGFFeHBvcnQ9VmF0RGF0YUdsb2JhbDskaM2PX29uY2UuVmF0RGF0YUV4cG9ydChWYXREYXRhRXhwb3J0KTtcblxuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgIHtcbmRlZmluZUtpbmQsXG5kZWZpbmVLaW5kTXVsdGksXG5kZWZpbmVEdXJhYmxlS2luZCxcbmRlZmluZUR1cmFibGVLaW5kTXVsdGl9PVxuVmF0RGF0YUdsb2JhbDskaM2PX29uY2UuZGVmaW5lS2luZChkZWZpbmVLaW5kKTskaM2PX29uY2UuZGVmaW5lS2luZE11bHRpKGRlZmluZUtpbmRNdWx0aSk7JGjNj19vbmNlLmRlZmluZUR1cmFibGVLaW5kKGRlZmluZUR1cmFibGVLaW5kKTskaM2PX29uY2UuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aShkZWZpbmVEdXJhYmxlS2luZE11bHRpKTtcblxuY29uc3QgICAgICAge1xubWFrZUtpbmRIYW5kbGUsXG5wcm92aWRlUHJvbWlzZVdhdGNoZXIsXG53YXRjaFByb21pc2UsXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmUsXG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlLFxubWFrZVNjYWxhckJpZ1NldFN0b3JlLFxubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSxcbmNhbkJlRHVyYWJsZX09XG5WYXREYXRhR2xvYmFsO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZUtpbmRIYW5kbGUobWFrZUtpbmRIYW5kbGUpOyRozY9fb25jZS5wcm92aWRlUHJvbWlzZVdhdGNoZXIocHJvdmlkZVByb21pc2VXYXRjaGVyKTskaM2PX29uY2Uud2F0Y2hQcm9taXNlKHdhdGNoUHJvbWlzZSk7JGjNj19vbmNlLm1ha2VTY2FsYXJCaWdNYXBTdG9yZShtYWtlU2NhbGFyQmlnTWFwU3RvcmUpOyRozY9fb25jZS5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKG1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUpOyRozY9fb25jZS5tYWtlU2NhbGFyQmlnU2V0U3RvcmUobWFrZVNjYWxhckJpZ1NldFN0b3JlKTskaM2PX29uY2UubWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZShtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlKTskaM2PX29uY2UuY2FuQmVEdXJhYmxlKGNhbkJlRHVyYWJsZSk7XG5jb25zdCAgICAgICAgcGlja0ZhY2V0PVxuKG1ha2VyLGZhY2V0TmFtZSk9PlxuKC4uLmFyZ3MpPT5cbm1ha2VyKC4uLmFyZ3MpW2ZhY2V0TmFtZV07JGjNj19vbmNlLnBpY2tGYWNldChwaWNrRmFjZXQpO1xuaGFyZGVuKHBpY2tGYWNldCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXJ0aWFsQXNzaWduPSh0YXJnZXQsc291cmNlKT0+e1xuT2JqZWN0LmFzc2lnbih0YXJnZXQsc291cmNlKTtcbiB9OyRozY9fb25jZS5wYXJ0aWFsQXNzaWduKHBhcnRpYWxBc3NpZ24pO1xuaGFyZGVuKHBhcnRpYWxBc3NpZ24pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgICAgICAgIHByb3ZpZGU9XG4vL1xuLypcblxuXG5cblxuXG4gICAqL3Byb3ZpZGVMYXp5O1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5wcm92aWRlKHByb3ZpZGUpO1xuY29uc3QgICAgICAgIG1ha2VTdG9yZVV0aWxzPShWYXREYXRhKT0+e1xuY29uc3R7XG4vL1xubWFrZVNjYWxhckJpZ01hcFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUsXG4vL1xubWFrZVNjYWxhckJpZ1NldFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmV9PVxuVmF0RGF0YTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZU1hcFN0b3JlPShiYWdnYWdlLG5hbWUsb3B0aW9ucz17fSk9PlxucHJvdmlkZShiYWdnYWdlLG5hbWUsKCk9PlxubWFrZVNjYWxhckJpZ01hcFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVNYXBTdG9yZSk7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUpO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlU2V0U3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnU2V0U3RvcmUobmFtZSx7ZHVyYWJsZTp0cnVlLC4uLm9wdGlvbnN9KSk7XG5cbmhhcmRlbihwcm92aWRlRHVyYWJsZVNldFN0b3JlKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZT0oYmFnZ2FnZSxuYW1lLG9wdGlvbnM9e30pPT5cbnByb3ZpZGUoYmFnZ2FnZSxuYW1lLCgpPT5cbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUobmFtZSx7ZHVyYWJsZTp0cnVlLC4uLm9wdGlvbnN9KSk7XG5cbmhhcmRlbihwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSk7XG5cbnJldHVybiBoYXJkZW4oe1xucHJvdmlkZUR1cmFibGVNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVTZXRTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlU3RvcmVVdGlscyhtYWtlU3RvcmVVdGlscyk7XG5cbmNvbnN0IGdsb2JhbFN0b3JlVXRpbHM9bWFrZVN0b3JlVXRpbHMoVmF0RGF0YUdsb2JhbCk7XG5jb25zdCAgICAgICB7XG5wcm92aWRlRHVyYWJsZU1hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUsXG5wcm92aWRlRHVyYWJsZVNldFN0b3JlLFxucHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmV9PVxuZ2xvYmFsU3RvcmVVdGlsczskaM2PX29uY2UucHJvdmlkZUR1cmFibGVNYXBTdG9yZShwcm92aWRlRHVyYWJsZU1hcFN0b3JlKTskaM2PX29uY2UucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUpOyRozY9fb25jZS5wcm92aWRlRHVyYWJsZVNldFN0b3JlKHByb3ZpZGVEdXJhYmxlU2V0U3RvcmUpOyRozY9fb25jZS5wcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZShwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJWYXREYXRhIjpbIlZhdERhdGFFeHBvcnQiXSwiZGVmaW5lS2luZCI6WyJkZWZpbmVLaW5kIl0sImRlZmluZUtpbmRNdWx0aSI6WyJkZWZpbmVLaW5kTXVsdGkiXSwiZGVmaW5lRHVyYWJsZUtpbmQiOlsiZGVmaW5lRHVyYWJsZUtpbmQiXSwiZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSI6WyJkZWZpbmVEdXJhYmxlS2luZE11bHRpIl0sIm1ha2VLaW5kSGFuZGxlIjpbIm1ha2VLaW5kSGFuZGxlIl0sInByb3ZpZGVQcm9taXNlV2F0Y2hlciI6WyJwcm92aWRlUHJvbWlzZVdhdGNoZXIiXSwid2F0Y2hQcm9taXNlIjpbIndhdGNoUHJvbWlzZSJdLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiOlsibWFrZVNjYWxhckJpZ01hcFN0b3JlIl0sIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUiOlsibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSJdLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiOlsibWFrZVNjYWxhckJpZ1NldFN0b3JlIl0sIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiOlsibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSJdLCJjYW5CZUR1cmFibGUiOlsiY2FuQmVEdXJhYmxlIl0sInBpY2tGYWNldCI6WyJwaWNrRmFjZXQiXSwicGFydGlhbEFzc2lnbiI6WyJwYXJ0aWFsQXNzaWduIl0sInByb3ZpZGUiOlsicHJvdmlkZSJdLCJtYWtlU3RvcmVVdGlscyI6WyJtYWtlU3RvcmVVdGlscyJdLCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlTWFwU3RvcmUiXSwicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiOlsicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiXSwicHJvdmlkZUR1cmFibGVTZXRTdG9yZSI6WyJwcm92aWRlRHVyYWJsZVNldFN0b3JlIl0sInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADO2bfg2EQAANhEAACUAAABAYWdvcmljL3ZhdHMtdjAuMTYuMC11MTguNS9zcmMvY3JjLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJDUkMiLCJjcmMxIiwiY3JjMTAiLCJjcmMxNiIsImNyYzI0IiwiY3JjMzIiLCJjcmMzMmMiLCJjcmM2IiwiY3JjOCIsIm1vZGVscyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cbiAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBlbmNvZGVyPW5ldyBUZXh0RW5jb2RlcigpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICovXG5mdW5jdGlvbiBjb252ZXJ0KGRhdGEpe1xuaWYodHlwZW9mIGRhdGE9PT0nbnVtYmVyJyl7XG5jb25zdCBieXRlcz1bXTtcbi8vXG4vL1xud2hpbGUoZGF0YT4wfHxieXRlcy5sZW5ndGg8NCl7XG5ieXRlcy51bnNoaWZ0KGRhdGElMjU2KTtcbmRhdGE9TWF0aC5mbG9vcihkYXRhLzI1Nik7XG4gfVxucmV0dXJuIG5ldyBVaW50OEFycmF5KGJ5dGVzKTtcbiB9ZWxzZSBpZih0eXBlb2YgZGF0YT09PSdzdHJpbmcnKXtcbnJldHVybiBlbmNvZGVyLmVuY29kZShkYXRhKTtcbiB9ZWxzZSBpZihBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkpe1xucmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyLGRhdGEuYnl0ZU9mZnNldCxkYXRhLmJ5dGVMZW5ndGgpO1xuIH1lbHNlIGlmKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7XG5yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gfVxudGhyb3cgVHlwZUVycm9yKFxuIGBjcmMgcmVxdWlyZXMgMzIgYml0IG51bWJlciwgYSBzdHJpbmcgb3IgVHlwZWRBcnJheSBmb3IgaW5wdXRgKTtcblxuIH1cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIG1pcnJvcihkYXRhLHdpZHRoKXtcbmxldCByZXM9MDtcbmZvcihsZXQgaT0wO2k8d2lkdGg7aSs9MSl7XG5yZXM9cmVzPDwxfGRhdGEmMTtcbmRhdGE+Pj0xO1xuIH1cbnJldHVybiByZXM7XG4gfVxuXG5jbGFzcyAgICAgICAgQ1JDe1xuLypcblxuXG5cblxuXG4gICAqL1xuICAgICAgICAgICBjb25zdHJ1Y3Rvcih3aWR0aCxwb2x5LHhvckluLHhvck91dCxyZWZsZWN0KXtcbnRoaXMud2lkdGg9d2lkdGg7XG50aGlzLnBvbHk9cG9seTtcbnRoaXMueG9ySW49eG9ySW47XG50aGlzLnJlZmxlY3RlZFhvckluPW1pcnJvcih4b3JJbix3aWR0aCk7XG50aGlzLnhvck91dD14b3JPdXQ7XG50aGlzLnJlZmxlY3Q9cmVmbGVjdDtcbnRoaXMubXNiTWFzaz0xPDx0aGlzLndpZHRoLTE7XG50aGlzLm1hc2s9dGhpcy5tc2JNYXNrLTE8PDF8MTtcbnRoaXMuY3JjU2hpZnQ9dGhpcy53aWR0aDw4PzgtdGhpcy53aWR0aDowO1xudGhpcy5zaGlmdGVkWG9ySW49dGhpcy54b3JJbjw8dGhpcy5jcmNTaGlmdDtcblxuY29uc3QgdGFibGU9dGhpcy5nZW5UYWJsZSgpO1xudGhpcy50YWJsZT10YWJsZTtcblxuaWYodGhpcy53aWR0aD09PTgmJiF0aGlzLnhvckluJiYhdGhpcy54b3JPdXQmJiF0aGlzLnJlZmxlY3Qpe1xuLyogICAgICAgICAgICAgICAgICAgICAqL1xudGhpcy5jYWxjdWxhdGU9ZnVuY3Rpb24gY2FsY3VsYXRlKGRhdGEpe1xuY29uc3QgYnVmZmVyPWNvbnZlcnQoZGF0YSk7XG5sZXQgY3JjPTA7XG5mb3IobGV0IGk9MDtpPGJ1ZmZlci5sZW5ndGg7aSs9MSl7XG5jcmM9dGFibGVbY3JjXmJ1ZmZlcltpXV07XG4gfVxucmV0dXJuIGNyYztcbiB9O1xuIH1cbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgIGNhbGN1bGF0ZShkYXRhKXtcbmNvbnN0IGJ1ZmZlcj1jb252ZXJ0KGRhdGEpO1xubGV0IGNyYztcbmNvbnN0e3RhYmxlLHdpZHRoLGNyY1NoaWZ0LG1hc2t9PXRoaXM7XG5pZih0aGlzLnJlZmxlY3Qpe1xuY3JjPXRoaXMucmVmbGVjdGVkWG9ySW47XG5mb3IobGV0IGk9MDtpPGJ1ZmZlci5sZW5ndGg7aSs9MSl7XG5jb25zdCBieXRlPWJ1ZmZlcltpXTtcbmNyYz0odGFibGVbKGNyY15ieXRlKSYweGZmXV5jcmM+Pj44KSZtYXNrO1xuIH1cbiB9ZWxzZXtcbmNyYz10aGlzLnNoaWZ0ZWRYb3JJbjtcbmZvcihsZXQgaT0wO2k8YnVmZmVyLmxlbmd0aDtpKz0xKXtcbmNyYz1cbnRhYmxlWyhjcmM+PndpZHRoLTgrY3JjU2hpZnReYnVmZmVyW2ldKSYweGZmXTw8XG5jcmNTaGlmdF5cbmNyYzw8OC1jcmNTaGlmdCZtYXNrPDxjcmNTaGlmdDtcbiB9XG5jcmM+Pj1jcmNTaGlmdDtcbiB9XG5jcmNePXRoaXMueG9yT3V0O1xucmV0dXJuIGNyYz4+PjA7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlTm9UYWJsZShkYXRhKXtcbmNvbnN0IGJ1ZmZlcj1jb252ZXJ0KGRhdGEpO1xubGV0IGNyYz10aGlzLnhvckluO1xuZm9yKGxldCBpPTA7aTxidWZmZXIubGVuZ3RoO2krPTEpe1xubGV0IG9jdGV0PWJ1ZmZlcltpXTtcbmlmKHRoaXMucmVmbGVjdClvY3RldD1taXJyb3Iob2N0ZXQsOCk7XG5mb3IobGV0IGo9MDtqPDg7ais9MSl7XG5sZXQgdG9wYml0PWNyYyZ0aGlzLm1zYk1hc2s7XG5pZihvY3RldCYweDgwPj5qKXRvcGJpdF49dGhpcy5tc2JNYXNrO1xuY3JjPDw9MTtcbmlmKHRvcGJpdCljcmNePXRoaXMucG9seTtcbiB9XG5jcmMmPXRoaXMubWFzaztcbiB9XG5pZih0aGlzLnJlZmxlY3QpY3JjPW1pcnJvcihjcmMsdGhpcy53aWR0aCk7XG5jcmNePXRoaXMueG9yT3V0O1xucmV0dXJuIGNyYz4+PjA7XG4gfVxuXG4gICAgICAgIGdlblRhYmxlKCl7XG5jb25zdCB0YWJsZUxlbmd0aD0yNTY7XG5jb25zdCB0YWJsZT1bXTtcbmZvcihsZXQgaT0wO2k8dGFibGVMZW5ndGg7aSs9MSl7XG5sZXQgcmVnPWk7XG5pZih0aGlzLnJlZmxlY3QpcmVnPW1pcnJvcihyZWcsOCk7XG5yZWc8PD10aGlzLndpZHRoLTgrdGhpcy5jcmNTaGlmdDtcbmZvcihsZXQgaj0wO2o8ODtqKz0xKXtcbmlmKChyZWcmdGhpcy5tc2JNYXNrPDx0aGlzLmNyY1NoaWZ0KSE9PTApe1xucmVnPDw9MTtcbnJlZ149dGhpcy5wb2x5PDx0aGlzLmNyY1NoaWZ0O1xuIH1lbHNle1xucmVnPDw9MTtcbiB9XG4gfVxuaWYodGhpcy5yZWZsZWN0KVxucmVnPW1pcnJvcihyZWc+PnRoaXMuY3JjU2hpZnQsdGhpcy53aWR0aCk8PHRoaXMuY3JjU2hpZnQ7XG5yZWc9cmVnPj50aGlzLmNyY1NoaWZ0JnRoaXMubWFzaztcbnRhYmxlW2ldPXJlZz4+PjA7XG4gfVxucmV0dXJuIG5ldyBJbnQzMkFycmF5KHRhYmxlKTtcbiB9fSRozY9fb25jZS4gQ1JDKENSQyk7XG5cblxuY29uc3QgICAgICAgIGNyYzE9bmV3IENSQygxLDB4MDEsMHgwMCwweDAwLGZhbHNlKTskaM2PX29uY2UuY3JjMShjcmMxKTtcbmNvbnN0ICAgICAgICBjcmM2PW5ldyBDUkMoNiwweDJmLDB4MDAsMHgwMCxmYWxzZSk7JGjNj19vbmNlLmNyYzYoY3JjNik7XG5jb25zdCAgICAgICAgY3JjOD1uZXcgQ1JDKDgsMHgwNywweDAwLDB4MDAsZmFsc2UpOyRozY9fb25jZS5jcmM4KGNyYzgpO1xuY29uc3QgICAgICAgIGNyYzEwPW5ldyBDUkMoMTAsMHgyMzMsMHgwMDAwLDB4MDAwMCxmYWxzZSk7JGjNj19vbmNlLmNyYzEwKGNyYzEwKTtcbmNvbnN0ICAgICAgICBjcmMxNj1uZXcgQ1JDKDE2LDB4ODAwNSwweDAwMDAsMHgwMDAwLHRydWUpOyRozY9fb25jZS5jcmMxNihjcmMxNik7XG5jb25zdCAgICAgICAgY3JjMjQ9bmV3IENSQygyNCwweDg2NGNmYiwweGI3MDRjZSwweDAwMDAwMCxmYWxzZSk7JGjNj19vbmNlLmNyYzI0KGNyYzI0KTtcbmNvbnN0ICAgICAgICBjcmMzMj1uZXcgQ1JDKDMyLDB4MDRjMTFkYjcsMHhmZmZmZmZmZiwweGZmZmZmZmZmLHRydWUpOyRozY9fb25jZS5jcmMzMihjcmMzMik7XG5jb25zdCAgICAgICAgY3JjMzJjPW5ldyBDUkMoMzIsMHgxZWRjNmY0MSwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsdHJ1ZSk7JGjNj19vbmNlLmNyYzMyYyhjcmMzMmMpO1xuXG5jb25zdCAgICAgICAgbW9kZWxzPXtjcmMxLGNyYzYsY3JjOCxjcmMxMCxjcmMxNixjcmMyNCxjcmMzMixjcmMzMmN9OyRozY9fb25jZS5tb2RlbHMobW9kZWxzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNSQyI6WyJDUkMiXSwiY3JjMSI6WyJjcmMxIl0sImNyYzYiOlsiY3JjNiJdLCJjcmM4IjpbImNyYzgiXSwiY3JjMTAiOlsiY3JjMTAiXSwiY3JjMTYiOlsiY3JjMTYiXSwiY3JjMjQiOlsiY3JjMjQiXSwiY3JjMzIiOlsiY3JjMzIiXSwiY3JjMzJjIjpbImNyYzMyYyJdLCJtb2RlbHMiOlsibW9kZWxzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPKPlJY0IQAANCEAACsAAABAYWdvcmljL3ZhdHMtdjAuMTYuMC11MTguNS9zcmMvbGliLWJvYXJkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvbm90aWZpZXIiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy96b2Uvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCIuL2NyYy5qcyJdLCJleHBvcnRzIjpbIkRFRkFVTFRfQ1JDX0RJR0lUUyIsIkRFRkFVTFRfUFJFRklYIiwicHJlcGFyZUJvYXJkS2l0IiwicHJlcGFyZVJlY29yZGVyRmFjdG9yeSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRmFpbCxxLHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCxNLG1ha2VTY2FsYXJCaWdNYXBTdG9yZSxwcmVwYXJlRXhvQ2xhc3NLaXQsZGVmaW5lUmVjb3JkZXJLaXQscHJlcGFyZVJlY29yZGVyLEUsRmFyLGlzUmVtb3RhYmxlLG1ha2VNYXJzaGFsLGNyYzY7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdFwiLCBbJGjNj19hID0+IChwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzS2l0ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy96b2Uvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qc1wiLCBbW1wiZGVmaW5lUmVjb3JkZXJLaXRcIiwgWyRozY9fYSA9PiAoZGVmaW5lUmVjb3JkZXJLaXQgPSAkaM2PX2EpXV0sW1wicHJlcGFyZVJlY29yZGVyXCIsIFskaM2PX2EgPT4gKHByZXBhcmVSZWNvcmRlciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJpc1JlbW90YWJsZVwiLCBbJGjNj19hID0+IChpc1JlbW90YWJsZSA9ICRozY9fYSldXSxbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXV1dLFtcIi4vY3JjLmpzXCIsIFtbXCJjcmM2XCIsIFskaM2PX2EgPT4gKGNyYzYgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCAgICAgICAgREVGQVVMVF9DUkNfRElHSVRTPTI7JGjNj19vbmNlLkRFRkFVTFRfQ1JDX0RJR0lUUyhERUZBVUxUX0NSQ19ESUdJVFMpO1xuY29uc3QgICAgICAgIERFRkFVTFRfUFJFRklYPSdib2FyZDAnO1xuXG4vL1xuLy9cbiRozY9fb25jZS5ERUZBVUxUX1BSRUZJWChERUZBVUxUX1BSRUZJWCk7Y29uc3QgQ2FwRGF0YVNoYXBlPXtib2R5Ok0uc3RyaW5nKCksc2xvdHM6TS5hcnJheSgpfTtcbmNvbnN0IE1hcnNoYWxJPU0uaW50ZXJmYWNlKCdNYXJzaGFsbGVyJyx7XG50b0NhcERhdGE6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoQ2FwRGF0YVNoYXBlKSxcbnNlcmlhbGl6ZTpNLmNhbGwoTS5hbnkoKSkucmV0dXJucyhDYXBEYXRhU2hhcGUpLFxuZnJvbUNhcERhdGE6TS5jYWxsKENhcERhdGFTaGFwZSkucmV0dXJucyhNLmFueSgpKSxcbnVuc2VyaWFsaXplOk0uY2FsbChDYXBEYXRhU2hhcGUpLnJldHVybnMoTS5hbnkoKSl9KTtcblxuXG5jb25zdCBJZFNoYXBlPU0uc3RyaW5nKCk7XG5jb25zdCBWYWxTaGFwZT1NLnNjYWxhcigpO1xuY29uc3QgQm9hcmRLaXRJS2l0PXtcbmJvYXJkOk0uaW50ZXJmYWNlKCdCb2FyZCcse1xuaGFzOk0uY2FsbChWYWxTaGFwZSkucmV0dXJucyhNLmJvb2xlYW4oKSksXG5nZXRWYWx1ZTpNLmNhbGwoSWRTaGFwZSkucmV0dXJucyhWYWxTaGFwZSksXG5sb29rdXA6TS5jYWxsKCkucmVzdChNLmFycmF5T2YoSWRTaGFwZSkpLnJldHVybnMoTS5wcm9taXNlKCkpLFxuZ2V0SWQ6TS5jYWxsKFZhbFNoYXBlKS5yZXR1cm5zKElkU2hhcGUpLFxuaWRzOk0uY2FsbCgpLnJldHVybnMoTS5hcnJheU9mKElkU2hhcGUpKSxcbmdldFB1Ymxpc2hpbmdNYXJzaGFsbGVyOk0uY2FsbCgpLnJldHVybnMoTS5yZW1vdGFibGUoKSksXG5nZXRSZWFkb25seU1hcnNoYWxsZXI6TS5jYWxsKCkucmV0dXJucyhNLnJlbW90YWJsZSgpKX0pLFxuXG5wdWJsaXNoaW5nTWFyc2hhbGxlcjpNYXJzaGFsSSxcbnJlYWRvbmx5TWFyc2hhbGxlcjpNYXJzaGFsSX07XG5cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCBjYWxjQ3JjPShkYXRhLGNyY0RpZ2l0cyk9Pntcbi8vXG4vL1xuY29uc3QgY3JjPWNyYzYuY2FsY3VsYXRlKGRhdGEpKzE7XG5jb25zdCBjcmNTdHI9Y3JjLnRvU3RyaW5nKCkucGFkU3RhcnQoY3JjRGlnaXRzLCcwJyk7XG5hc3NlcnQoY3JjU3RyLmxlbmd0aDw9Y3JjRGlnaXRzLCBgQ1JDIHRvbyBiaWcgZm9yIGl0cyBicml0Y2hlcyAke2NyY1N0cn1gKTtcbnJldHVybiBjcmNTdHI7XG4gfTtcblxuLypcblxuXG4gKi9cblxuLy9cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgaW5pdER1cmFibGVCb2FyZFN0YXRlPShcbmluaXRTZXF1ZW5jZT0wLFxue3ByZWZpeD1ERUZBVUxUX1BSRUZJWCxjcmNEaWdpdHM9REVGQVVMVF9DUkNfRElHSVRTfT17fSk9Plxue1xuY29uc3QgaW1tdXRhYmxlPXtwcmVmaXgsY3JjRGlnaXRzfTtcblxuY29uc3QgbGFzdFNlcXVlbmNlPUJpZ0ludChpbml0U2VxdWVuY2UpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaWRUb1ZhbD1tYWtlU2NhbGFyQmlnTWFwU3RvcmUoJ2lkVG9WYWwnLHtcbmR1cmFibGU6dHJ1ZSxcbmtleVNoYXBlOklkU2hhcGUsXG52YWx1ZVNoYXBlOlZhbFNoYXBlfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHZhbFRvSWQ9bWFrZVNjYWxhckJpZ01hcFN0b3JlKCd2YWxUb0lkJyx7XG5kdXJhYmxlOnRydWUsXG5rZXlTaGFwZTpWYWxTaGFwZSxcbnZhbHVlU2hhcGU6SWRTaGFwZX0pO1xuXG5cbmNvbnN0IG11dGFibGU9e2xhc3RTZXF1ZW5jZSxpZFRvVmFsLHZhbFRvSWR9O1xuXG5yZXR1cm57XG4uLi5pbW11dGFibGUsXG4uLi5tdXRhYmxlfTtcblxuIH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZ2V0SWQ9KHZhbHVlLHN0YXRlKT0+e1xuY29uc3R7aWRUb1ZhbCx2YWxUb0lkLHByZWZpeCxjcmNEaWdpdHN9PXN0YXRlO1xuaWYoIWlzUmVtb3RhYmxlKHZhbHVlKSl7XG5GYWlsIGBCb2FyZCBjYW5ub3QgY3JlYXRlIGlkIGZvciBub24tcmVtb3RhYmxlYDtcbiB9XG5cbmlmKHZhbFRvSWQuaGFzKHZhbHVlKSl7XG5yZXR1cm4gdmFsVG9JZC5nZXQodmFsdWUpO1xuIH1cblxuc3RhdGUubGFzdFNlcXVlbmNlKz0xbjtcbmNvbnN0IHNlcT1zdGF0ZS5sYXN0U2VxdWVuY2U7XG5cbmNvbnN0IGNyY0lucHV0PSBgJHtwcmVmaXh9JHtzZXF9YDtcbmNvbnN0IGNyYz1jYWxjQ3JjKGNyY0lucHV0LGNyY0RpZ2l0cyk7XG5cbmNvbnN0IGlkPSBgJHtwcmVmaXh9JHtjcmN9JHtzZXF9YDtcblxudmFsVG9JZC5pbml0KHZhbHVlLGlkKTtcbmlkVG9WYWwuaW5pdChpZCx2YWx1ZSk7XG5yZXR1cm4gaWQ7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0IGdldFZhbHVlPShpZCx7cHJlZml4LGNyY0RpZ2l0cyxpZFRvVmFsfSk9PntcbmlkLnN0YXJ0c1dpdGgocHJlZml4KXx8RmFpbCBgaWQgbXVzdCBzdGFydCB3aXRoICR7cShwcmVmaXgpfTogJHtpZH1gO1xuY29uc3QgZGlnaXRzPWlkLnNsaWNlKHByZWZpeC5sZW5ndGgpO1xuLy9cbmNvbnN0IERJR0lUU19SRUdFWFA9bmV3IFJlZ0V4cCggYF5bMC05XXske2NyY0RpZ2l0cysxfSx9JGApO1xuRElHSVRTX1JFR0VYUC50ZXN0KGRpZ2l0cyl8fFxuRmFpbCBgaWQgbXVzdCBlbmQgaW4gYXQgbGVhc3QgJHtxKGNyY0RpZ2l0cysxKX0gZGlnaXRzOiAke2lkfWA7XG5cbmlmKGlkVG9WYWwuaGFzKGlkKSl7XG5yZXR1cm4gaWRUb1ZhbC5nZXQoaWQpO1xuIH1cblxuY29uc3QgYWxsZWdlZENyYz1kaWdpdHMuc2xpY2UoMCxjcmNEaWdpdHMpO1xuXG5jb25zdCBzZXE9ZGlnaXRzLnNsaWNlKGNyY0RpZ2l0cyk7XG5jb25zdCBjcmNJbnB1dD0gYCR7cHJlZml4fSR7c2VxfWA7XG5jb25zdCBjcmM9Y2FsY0NyYyhjcmNJbnB1dCxjcmNEaWdpdHMpO1xuXG5hbGxlZ2VkQ3JjPT09Y3JjfHxGYWlsIGBpZCBpcyBwcm9iYWJseSBhIHR5cG8sIGNhbm5vdCB2ZXJpZnkgQ1JDOiAke2lkfWA7XG4vL1xudGhyb3cgRmFpbCBgYm9hcmQgZG9lcyBub3QgaGF2ZSBpZDogJHtpZH1gO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYWtlU2xvdFRvVmFsPShzdGF0ZSk9PntcbmNvbnN0IGlmYWNlQWxsZWdlZFByZWZpeD0nQWxsZWdlZDogJztcbmNvbnN0IGlmYWNlSW5hY2Nlc3NpYmxlUHJlZml4PSdTRVZFUkVEOiAnO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHNsb3RUb1ZhbD0oc2xvdCxpZmFjZSk9PntcbmlmKHNsb3QhPT1udWxsKXtcbnJldHVybiBnZXRWYWx1ZShzbG90LHN0YXRlKTtcbiB9XG5cbi8vXG5pZih0eXBlb2YgaWZhY2U9PT0nc3RyaW5nJyYmaWZhY2Uuc3RhcnRzV2l0aChpZmFjZUFsbGVnZWRQcmVmaXgpKXtcbmlmYWNlPWlmYWNlLnNsaWNlKGlmYWNlQWxsZWdlZFByZWZpeC5sZW5ndGgpO1xuIH1cbnJldHVybiBGYXIoIGAke2lmYWNlSW5hY2Nlc3NpYmxlUHJlZml4fSR7aWZhY2V9YCx7fSk7XG4gfTtcbnJldHVybiBzbG90VG9WYWw7XG4gfTtcblxuLy9cbi8qXG5cblxuICovXG5jb25zdCBtYWtlUmVhZG9ubHlNYXJzaGFsbGVyPShzdGF0ZSk9PntcbmNvbnN0e3ZhbFRvSWR9PXN0YXRlO1xuY29uc3Qgc2xvdFRvVmFsPW1ha2VTbG90VG9WYWwoc3RhdGUpO1xuY29uc3QgdmFsVG9TbG90PSh2YWwpPT57XG5pZighdmFsVG9JZC5oYXModmFsKSl7XG4vL1xucmV0dXJuIG51bGw7XG4gfVxuXG4vL1xucmV0dXJuIHZhbFRvSWQuZ2V0KHZhbCk7XG4gfTtcbnJldHVybiBtYWtlTWFyc2hhbCh2YWxUb1Nsb3Qsc2xvdFRvVmFsLHtcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KTtcblxuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlUHVibGlzaGluZ01hcnNoYWxsZXI9KHN0YXRlKT0+e1xuY29uc3Qgc2xvdFRvVmFsPW1ha2VTbG90VG9WYWwoc3RhdGUpO1xuLy9cbmNvbnN0IHZhbFRvU2xvdD0odmFsKT0+Z2V0SWQodmFsLHN0YXRlKTtcbnJldHVybiBtYWtlTWFyc2hhbCh2YWxUb1Nsb3Qsc2xvdFRvVmFsLHtcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KTtcblxuIH07XG4vL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUJvYXJkS2l0PShiYWdnYWdlKT0+e1xucmV0dXJuIHByZXBhcmVFeG9DbGFzc0tpdChcbmJhZ2dhZ2UsXG4nQm9hcmQnLFxuQm9hcmRLaXRJS2l0LFxuaW5pdER1cmFibGVCb2FyZFN0YXRlLFxue1xuYm9hcmQ6e1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuZ2V0SWQodmFsdWUpe1xucmV0dXJuIGdldElkKHZhbHVlLHRoaXMuc3RhdGUpO1xuIH0sXG4vKlxuXG5cbiAgICAgICAgICovXG5nZXRWYWx1ZShpZCl7XG5yZXR1cm4gZ2V0VmFsdWUoaWQsdGhpcy5zdGF0ZSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbiAgICAgIGFzeW5jIGxvb2t1cCguLi5wYXRoKXtcbmNvbnN0e1xuZmFjZXRzOntib2FyZH19PVxudGhpcztcbmlmKHBhdGgubGVuZ3RoPT09MCl7XG5yZXR1cm4gYm9hcmQ7XG4gfVxuY29uc3RbZmlyc3QsLi4ucmVzdF09cGF0aDtcbi8qICAgICAgICAgICAgICAqL1xuY29uc3QgZmlyc3RWYWx1ZT1ib2FyZC5nZXRWYWx1ZSgvKiAgICAgICAgICAgICAgICAgICovZmlyc3QpO1xuaWYocmVzdC5sZW5ndGg9PT0wKXtcbnJldHVybiBmaXJzdFZhbHVlO1xuIH1cbnJldHVybiBFKGZpcnN0VmFsdWUpLmxvb2t1cCguLi5yZXN0KTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmhhcyh2YWwpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gc3RhdGUudmFsVG9JZC5oYXModmFsKTtcbiB9LFxuaWRzKCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBoYXJkZW4oWy4uLnN0YXRlLmlkVG9WYWwua2V5cygpXSk7XG4gfSxcbi8qXG5cblxuICAgICAgICAgKi9cbmdldFB1Ymxpc2hpbmdNYXJzaGFsbGVyKCl7XG5yZXR1cm4gdGhpcy5mYWNldHMucHVibGlzaGluZ01hcnNoYWxsZXI7XG4gfSxcbi8qXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuZ2V0UmVhZG9ubHlNYXJzaGFsbGVyKCl7XG5yZXR1cm4gdGhpcy5mYWNldHMucmVhZG9ubHlNYXJzaGFsbGVyO1xuIH19LFxuXG5yZWFkb25seU1hcnNoYWxsZXI6e1xudG9DYXBEYXRhKHZhbCl7XG5jb25zdCByZWFkb25seT1tYWtlUmVhZG9ubHlNYXJzaGFsbGVyKHRoaXMuc3RhdGUpO1xucmV0dXJuIHJlYWRvbmx5LnRvQ2FwRGF0YSh2YWwpO1xuIH0sXG5mcm9tQ2FwRGF0YShkYXRhKXtcbmNvbnN0IHJlYWRvbmx5PW1ha2VSZWFkb25seU1hcnNoYWxsZXIodGhpcy5zdGF0ZSk7XG5yZXR1cm4gcmVhZG9ubHkuZnJvbUNhcERhdGEoZGF0YSk7XG4gfSxcbnNlcmlhbGl6ZShkYXRhKXtcbnJldHVybiB0aGlzLmZhY2V0cy5yZWFkb25seU1hcnNoYWxsZXIudG9DYXBEYXRhKGRhdGEpO1xuIH0sXG51bnNlcmlhbGl6ZShkYXRhKXtcbnJldHVybiB0aGlzLmZhY2V0cy5yZWFkb25seU1hcnNoYWxsZXIuZnJvbUNhcERhdGEoZGF0YSk7XG4gfX0sXG5cbnB1Ymxpc2hpbmdNYXJzaGFsbGVyOntcbnRvQ2FwRGF0YSh2YWwpe1xuY29uc3QgcHVibGlzaGluZz1tYWtlUHVibGlzaGluZ01hcnNoYWxsZXIodGhpcy5zdGF0ZSk7XG5yZXR1cm4gcHVibGlzaGluZy50b0NhcERhdGEodmFsKTtcbiB9LFxuZnJvbUNhcERhdGEoZGF0YSl7XG5jb25zdCBwdWJsaXNoaW5nPW1ha2VQdWJsaXNoaW5nTWFyc2hhbGxlcih0aGlzLnN0YXRlKTtcbnJldHVybiBwdWJsaXNoaW5nLmZyb21DYXBEYXRhKGRhdGEpO1xuIH0sXG5zZXJpYWxpemUoZGF0YSl7XG5yZXR1cm4gdGhpcy5mYWNldHMucHVibGlzaGluZ01hcnNoYWxsZXIudG9DYXBEYXRhKGRhdGEpO1xuIH0sXG51bnNlcmlhbGl6ZShkYXRhKXtcbnJldHVybiB0aGlzLmZhY2V0cy5wdWJsaXNoaW5nTWFyc2hhbGxlci5mcm9tQ2FwRGF0YShkYXRhKTtcbiB9fX0pO1xuXG5cblxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5wcmVwYXJlQm9hcmRLaXQocHJlcGFyZUJvYXJkS2l0KTtcbmNvbnN0ICAgICAgICBwcmVwYXJlUmVjb3JkZXJGYWN0b3J5PSh6b25lKT0+e1xuY29uc3QgYmFnZ2FnZT16b25lLm1hcFN0b3JlKCBgUmVjb3JkZXIgQmFnZ2FnZWApO1xuY29uc3QgbWFrZUR1cmFibGVQdWJsaXNoS2l0PXByZXBhcmVEdXJhYmxlUHVibGlzaEtpdChcbmJhZ2dhZ2UsXG4nRHVyYWJsZVB1Ymxpc2hLaXQnKTtcblxuXG4vKlxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlUmVjb3JkZXJLaXQ9KGxhYmVsLG1hcnNoYWxsZXIpPT57XG5jb25zdCBteVpvbmU9em9uZS5zdWJab25lKGxhYmVsKTtcbmNvbnN0IG1ha2VSZWNvcmRlcj1wcmVwYXJlUmVjb3JkZXIoXG5teVpvbmUubWFwU3RvcmUoIGBSZWNvcmRlciBCYWdnYWdlOiAke2xhYmVsfWApLFxubWFyc2hhbGxlcik7XG5cbnJldHVybiBkZWZpbmVSZWNvcmRlcktpdCh7bWFrZVJlY29yZGVyLG1ha2VEdXJhYmxlUHVibGlzaEtpdH0pO1xuIH07XG5cbnJldHVybiBwcmVwYXJlUmVjb3JkZXJLaXQ7XG4gfTskaM2PX29uY2UucHJlcGFyZVJlY29yZGVyRmFjdG9yeShwcmVwYXJlUmVjb3JkZXJGYWN0b3J5KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkRFRkFVTFRfQ1JDX0RJR0lUUyI6WyJERUZBVUxUX0NSQ19ESUdJVFMiXSwiREVGQVVMVF9QUkVGSVgiOlsiREVGQVVMVF9QUkVGSVgiXSwicHJlcGFyZUJvYXJkS2l0IjpbInByZXBhcmVCb2FyZEtpdCJdLCJwcmVwYXJlUmVjb3JkZXJGYWN0b3J5IjpbInByZXBhcmVSZWNvcmRlckZhY3RvcnkiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAtFBdQrYLAAC2CwAAMwAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTguNS9zcmMvYWN0aW9ucy5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9ldmVudHVhbC1zZW5kIl0sImV4cG9ydHMiOlsibWFrZVBheW1lbnRBY3Rpb25zIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VQcm9taXNlS2l0LEZhcixFOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VQcm9taXNlS2l0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuY29uc3QgICAgICAgIG1ha2VQYXltZW50QWN0aW9ucz0oe1xuZ2V0QnJhbmRSZWNvcmQsXG5nZXRQdXJzZUJ5UGV0bmFtZSxcbmdldFJlY29yZCxcbnVwZGF0ZVJlY29yZCxcbmdldEF1dG9EZXBvc2l0UHVyc2UsXG5nZXRJc3N1ZXJCb2FyZElkfSk9Plxue1xuY29uc3QgZGVwb3NpdGVkUEs9bWFrZVByb21pc2VLaXQoKTtcblxucmV0dXJuIEZhcigncGF5bWVudCBhY3Rpb25zJyx7XG5kZXBvc2l0OmFzeW5jKHB1cnNlT3JQZXRuYW1lPXVuZGVmaW5lZCk9PntcbmNvbnN0IG9sZFBheW1lbnRSZWNvcmQ9Z2V0UmVjb3JkKCk7XG5jb25zdHticmFuZCxwYXltZW50fT1vbGRQYXltZW50UmVjb3JkO1xuYXNzZXJ0KHBheW1lbnQpO1xuXG4vKiAgICAgICAgICAgICAgICAqL1xubGV0IHB1cnNlO1xuaWYocHVyc2VPclBldG5hbWU9PT11bmRlZmluZWQpe1xuY29uc3QgYXV0b0RlcG9zaXRQdXJzZT1nZXRBdXRvRGVwb3NpdFB1cnNlKGJyYW5kKTtcbmlmKCFhdXRvRGVwb3NpdFB1cnNlKXtcbi8vXG5yZXR1cm4gZGVwb3NpdGVkUEsucHJvbWlzZTtcbiB9XG4vL1xucHVyc2U9Z2V0QXV0b0RlcG9zaXRQdXJzZShicmFuZCk7XG4gfWVsc2UgaWYoXG5BcnJheS5pc0FycmF5KHB1cnNlT3JQZXRuYW1lKXx8XG50eXBlb2YgcHVyc2VPclBldG5hbWU9PT0nc3RyaW5nJylcbntcbnB1cnNlPWdldFB1cnNlQnlQZXRuYW1lKHB1cnNlT3JQZXRuYW1lKTtcbiB9ZWxzZXtcbnB1cnNlPXB1cnNlT3JQZXRuYW1lO1xuIH1cbmNvbnN0IGJyYW5kUmVjb3JkPWdldEJyYW5kUmVjb3JkKGJyYW5kKTtcbnVwZGF0ZVJlY29yZCh7Li4ub2xkUGF5bWVudFJlY29yZCxzdGF0dXM6J3BlbmRpbmcnfSxicmFuZFJlY29yZCk7XG4vL1xuRShwdXJzZSkuXG5kZXBvc2l0KHBheW1lbnQpLlxudGhlbihcbihkZXBvc2l0ZWRBbW91bnQpPT57XG51cGRhdGVSZWNvcmQoXG57XG4uLi5nZXRSZWNvcmQoKSxcbi8vXG5wYXltZW50OnVuZGVmaW5lZCxcbnN0YXR1czonZGVwb3NpdGVkJyxcbmRlcG9zaXRlZEFtb3VudH0sXG5cbmJyYW5kUmVjb3JkKTtcblxuZGVwb3NpdGVkUEsucmVzb2x2ZShkZXBvc2l0ZWRBbW91bnQpO1xuIH0sXG4oZSk9PntcbmNvbnNvbGUuZXJyb3IoXG4nRXJyb3IgZGVwb3NpdGluZyBwYXltZW50IGluJyxcbnB1cnNlT3JQZXRuYW1lfHwnZGVmYXVsdCBwdXJzZScsXG5lKTtcblxuaWYocHVyc2VPclBldG5hbWU9PT11bmRlZmluZWQpe1xuLy9cbi8vXG51cGRhdGVSZWNvcmQoe1xuLi4uZ2V0UmVjb3JkKCksXG5zdGF0dXM6dW5kZWZpbmVkfSk7XG5cbmRlcG9zaXRlZFBLLnJlamVjdChlKTtcbiB9ZWxzZXtcbi8vXG4vL1xuZGVwb3NpdGVkUEsucmVzb2x2ZShnZXRSZWNvcmQoKS5hY3Rpb25zLmRlcG9zaXQodW5kZWZpbmVkKSk7XG4gfVxuIH0pO1xuXG5yZXR1cm4gZGVwb3NpdGVkUEsucHJvbWlzZTtcbiB9LFxucmVmcmVzaDphc3luYygpPT57XG5jb25zdCBvbGRQYXltZW50UmVjb3JkPWdldFJlY29yZCgpO1xuY29uc3R7YnJhbmQsaXNzdWVyLHBheW1lbnR9PW9sZFBheW1lbnRSZWNvcmQ7XG5jb25zdCBicmFuZFJlY29yZD1nZXRCcmFuZFJlY29yZChicmFuZCk7XG5pZighYnJhbmRSZWNvcmQpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuaWYoIWlzc3Vlcil7XG51cGRhdGVSZWNvcmQoXG57XG4uLi5vbGRQYXltZW50UmVjb3JkLFxuaXNzdWVyQm9hcmRJZDpnZXRJc3N1ZXJCb2FyZElkKGJyYW5kUmVjb3JkLmlzc3Vlcil9LFxuXG5icmFuZFJlY29yZCk7XG5cbnJldHVybiB0cnVlO1xuIH1cblxuaWYoIXBheW1lbnQpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuY29uc3QgaXNMaXZlPWF3YWl0IEUoaXNzdWVyKS5pc0xpdmUocGF5bWVudCk7XG5pZihpc0xpdmUpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxudXBkYXRlUmVjb3JkKHtcbi4uLm9sZFBheW1lbnRSZWNvcmQsXG4vL1xucGF5bWVudDp1bmRlZmluZWQsXG5zdGF0dXM6J2V4cGlyZWQnfSk7XG5cbnJldHVybiB0cnVlO1xuIH0sXG5nZXRBbW91bnRPZjphc3luYygpPT57XG5jb25zdCBvbGRQYXltZW50UmVjb3JkPWdldFJlY29yZCgpO1xuY29uc3R7aXNzdWVyLHBheW1lbnR9PW9sZFBheW1lbnRSZWNvcmQ7XG5hc3NlcnQoaXNzdWVyKTtcbmFzc2VydChwYXltZW50KTtcblxuLy9cbmNvbnN0IGxhc3RBbW91bnQ9YXdhaXQgRShpc3N1ZXIpLmdldEFtb3VudE9mKHBheW1lbnQpO1xuXG51cGRhdGVSZWNvcmQoe1xuLi4ub2xkUGF5bWVudFJlY29yZCxcbmxhc3RBbW91bnR9KTtcblxucmV0dXJuIHRydWU7XG4gfX0pO1xuXG4gfTskaM2PX29uY2UubWFrZVBheW1lbnRBY3Rpb25zKG1ha2VQYXltZW50QWN0aW9ucyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUGF5bWVudEFjdGlvbnMiOlsibWFrZVBheW1lbnRBY3Rpb25zIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAI2FLjWoAgAAqAIAADsAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE4LjUvc3JjL2JpZ2ludFN0cmluZ2lmeS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYmlnaW50U3RyaW5naWZ5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIGJpZ2ludFN0cmluZ2lmeT0oeCk9PlxuSlNPTi5zdHJpbmdpZnkoeCwoX2tleSx2YWx1ZSk9PntcbmlmKHR5cGVvZiB2YWx1ZSE9PSdiaWdpbnQnKXtcbi8vXG5yZXR1cm4gdmFsdWU7XG4gfVxuaWYodmFsdWU8PUJpZ0ludChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpe1xuLy9cbnJldHVybiBOdW1iZXIodmFsdWUpO1xuIH1cbi8vXG4vL1xucmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gfSk7JGjNj19vbmNlLmJpZ2ludFN0cmluZ2lmeShiaWdpbnRTdHJpbmdpZnkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYmlnaW50U3RyaW5naWZ5IjpbImJpZ2ludFN0cmluZ2lmeSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC9Otd4WgkAAFoJAAA0AAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxOC41L3NyYy9kYXRlLW5vdy5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGFnb3JpYy9ub3RpZmllciIsIkBlbmRvL3Byb21pc2Uta2l0Il0sImV4cG9ydHMiOlsiREVGQVVMVF9USU1FUl9ERVZJQ0VfU0NBTEUiLCJERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCIsIm1ha2VUaW1lckRldmljZURhdGVOb3ciLCJtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLG9ic2VydmVOb3RpZmllcixtYWtlUHJvbWlzZUtpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcIm9ic2VydmVOb3RpZmllclwiLCBbJGjNj19hID0+IChvYnNlcnZlTm90aWZpZXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuY29uc3QgICAgICAgIERFRkFVTFRfVElNRVJfU0VSVklDRV9QT0xMX0lOVEVSVkFMPTYwXzAwMG47JGjNj19vbmNlLkRFRkFVTFRfVElNRVJfU0VSVklDRV9QT0xMX0lOVEVSVkFMKERFRkFVTFRfVElNRVJfU0VSVklDRV9QT0xMX0lOVEVSVkFMKTtcbmNvbnN0ICAgICAgICBERUZBVUxUX1RJTUVSX0RFVklDRV9TQ0FMRT0xO1xuXG4vL1xuLy9cbiRozY9fb25jZS5ERUZBVUxUX1RJTUVSX0RFVklDRV9TQ0FMRShERUZBVUxUX1RJTUVSX0RFVklDRV9TQ0FMRSk7Y29uc3QgbWFrZVRpbWVyRGV2aWNlRGF0ZU5vdz1cbihELHRpbWVyRGV2aWNlLHRpbWVyRGV2aWNlU2NhbGU9REVGQVVMVF9USU1FUl9ERVZJQ0VfU0NBTEUpPT5cbigpPT57XG5jb25zdCBzdGFtcD1EKHRpbWVyRGV2aWNlKS5nZXRMYXN0UG9sbGVkKCk7XG5jb25zdCBsYXN0UG9sbGVkU3RhbXA9cGFyc2VJbnQoIGAke3N0YW1wfWAsMTApKnRpbWVyRGV2aWNlU2NhbGU7XG5yZXR1cm4gbGFzdFBvbGxlZFN0YW1wO1xuIH07XG5cbi8vXG4vL1xuJGjNj19vbmNlLm1ha2VUaW1lckRldmljZURhdGVOb3cobWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyk7Y29uc3QgbWFrZVRpbWVyU2VydmljZURhdGVOb3c9KFxudGltZXJTZXJ2aWNlLFxudGltZXJQb2xsSW50ZXJ2YWw9REVGQVVMVF9USU1FUl9TRVJWSUNFX1BPTExfSU5URVJWQUwpPT5cbntcbmxldCBsYXN0UG9sbGVkU3RhbXA9TmFOO1xuY29uc3QgZGF0ZU5vdz0oKT0+bGFzdFBvbGxlZFN0YW1wO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGF0ZU5vd1BLPW1ha2VQcm9taXNlS2l0KCk7XG5cbi8vXG5jb25zdCBvYnNlcnZlVGltZXI9YXN5bmMoKT0+e1xuY29uc3Qgb2JzZXJ2ZXI9e1xudXBkYXRlU3RhdGUoc3RhbXApe1xubGFzdFBvbGxlZFN0YW1wPXBhcnNlSW50KCBgJHtzdGFtcH1gLDEwKTtcbmRhdGVOb3dQSy5yZXNvbHZlKGRhdGVOb3cpO1xuIH19O1xuXG5cbi8vXG5jb25zdCBzdGFtcD1hd2FpdCBFKHRpbWVyU2VydmljZSkuZ2V0Q3VycmVudFRpbWVzdGFtcCgpO1xub2JzZXJ2ZXIudXBkYXRlU3RhdGUoc3RhbXApO1xuXG4vL1xuLy9cbmNvbnN0IHRpbWVyTm90aWZpZXI9RSh0aW1lclNlcnZpY2UpLm1ha2VOb3RpZmllcigwbix0aW1lclBvbGxJbnRlcnZhbCk7XG5cbi8vXG5hd2FpdCBvYnNlcnZlTm90aWZpZXIodGltZXJOb3RpZmllcixvYnNlcnZlcik7XG4gfTtcblxub2JzZXJ2ZVRpbWVyKCkuY2F0Y2goKGUpPT5kYXRlTm93UEsucmVqZWN0KGUpKTtcblxuLy9cbnJldHVybiBkYXRlTm93UEsucHJvbWlzZTtcbiB9OyRozY9fb25jZS5tYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyhtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCI6WyJERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCJdLCJERUZBVUxUX1RJTUVSX0RFVklDRV9TQ0FMRSI6WyJERUZBVUxUX1RJTUVSX0RFVklDRV9TQ0FMRSJdLCJtYWtlVGltZXJEZXZpY2VEYXRlTm93IjpbIm1ha2VUaW1lckRldmljZURhdGVOb3ciXSwibWFrZVRpbWVyU2VydmljZURhdGVOb3ciOlsibWFrZVRpbWVyU2VydmljZURhdGVOb3ciXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAQsLNztoSAADaEgAAQAAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTguNS9zcmMvZmluZE9yTWFrZUludml0YXRpb24uanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL2VydHAiXSwiZXhwb3J0cyI6WyJmaW5kT3JNYWtlSW52aXRhdGlvbiIsIm1ha2VJZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRmFpbCxxLEUscGFzc1N0eWxlT2YsQW1vdW50TWF0aDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaM2PX2EgPT4gKGFzc2VydCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRozY9fYSA9PiAoQW1vdW50TWF0aCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNvbnN0ICAgICAgICBtYWtlSWQ9KGRhcHBPcmlnaW4scmF3SWQpPT4gYCR7ZGFwcE9yaWdpbn0jJHtyYXdJZH1gOyRozY9fb25jZS5tYWtlSWQobWFrZUlkKTtcblxuY29uc3QgYXNzZXJ0Rmlyc3RDYXBBU0NJST0oc3RyKT0+e1xuYXNzZXJ0LnR5cGVvZihzdHIsJ3N0cmluZycpO1xuY29uc3QgZmlyc3RDYXBBU0NJST0vXltBLVpdW2EtekEtWjAtOV8kXSokLztcbmZpcnN0Q2FwQVNDSUkudGVzdChzdHIpfHxcbkZhaWwgYFRoZSBzdHJpbmcgJHtxKFxuc3RyKVxuIH0gbXVzdCBiZSBhbiBhc2NpaSBpZGVudGlmaWVyIHN0YXJ0aW5nIHdpdGggdXBwZXIgY2FzZS5gO1xuc3RyIT09J05hTicmJnN0ciE9PSdJbmZpbml0eSd8fFxuRmFpbCBga2V5d29yZCAke3Eoc3RyKX0gbXVzdCBub3QgYmUgYSBudW1iZXIncyBuYW1lYDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBmaW5kQnlCb2FyZElkPWFzeW5jKGludml0YXRpb25QdXJzZUJhbGFuY2Use2JvYXJkLGJvYXJkSWR9KT0+e1xuYXNzZXJ0LnR5cGVvZihib2FyZElkLCdzdHJpbmcnKTtcbmNvbnN0IGludml0YXRpb25IYW5kbGU9YXdhaXQgRShib2FyZCkuZ2V0VmFsdWUoYm9hcmRJZCk7XG5jb25zdCBtYXRjaD0oZWxlbWVudCk9PmVsZW1lbnQuaGFuZGxlPT09aW52aXRhdGlvbkhhbmRsZTtcbmNvbnN0IG1hdGNoaW5nVmFsdWU9aW52aXRhdGlvblB1cnNlQmFsYW5jZS52YWx1ZS5maW5kKG1hdGNoKTtcbm1hdGNoaW5nVmFsdWV8fEZhaWwgYENhbm5vdCBmaW5kIGludml0YXRpb24gY29ycmVzcG9uZGluZyB0byAke3EoYm9hcmRJZCl9YDtcblxucmV0dXJuIGhhcmRlbihbbWF0Y2hpbmdWYWx1ZV0pO1xuIH07XG5cbi8vXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0IGZpbmRCeUtleVZhbHVlUGFpcnM9YXN5bmMoaW52aXRhdGlvblB1cnNlQmFsYW5jZSxrdnMpPT57XG4vL1xuLy9cbi8vXG5jb25zdCBtYXRjaGVzPShpbnZpdGF0aW9uRGV0YWlsKT0+XG5PYmplY3QuZW50cmllcyhrdnMpLmV2ZXJ5KFxuKFtrZXksdmFsdWVdKT0+aW52aXRhdGlvbkRldGFpbFtrZXldPT09dmFsdWUpO1xuXG5cbmNvbnN0IG1hdGNoaW5nVmFsdWU9aW52aXRhdGlvblB1cnNlQmFsYW5jZS52YWx1ZS5maW5kKG1hdGNoZXMpO1xubWF0Y2hpbmdWYWx1ZXx8RmFpbCBgQ2Fubm90IGZpbmQgaW52aXRhdGlvbiBjb3JyZXNwb25kaW5nIHRvICR7cShrdnMpfWA7XG5yZXR1cm4gaGFyZGVuKFttYXRjaGluZ1ZhbHVlXSk7XG4gfTtcblxuY29uc3QgbWFrZUZpbmRJbnZpdGF0aW9uPShpbnZpdGF0aW9uUHVyc2UsaW52aXRhdGlvbkJyYW5kKT0+e1xuY29uc3QgZmluZEludml0YXRpb249YXN5bmMocXVlcnlGbixxdWVyeVBhcmFtcyk9PntcbmNvbnN0IHB1cnNlQmFsYW5jZT1hd2FpdCBFKGludml0YXRpb25QdXJzZSkuZ2V0Q3VycmVudEFtb3VudCgpO1xuY29uc3QgdmFsdWU9YXdhaXQgcXVlcnlGbihwdXJzZUJhbGFuY2UscXVlcnlQYXJhbXMpO1xuY29uc3QgaW52aXRhdGlvbkFtb3VudD1BbW91bnRNYXRoLm1ha2UoaW52aXRhdGlvbkJyYW5kLHZhbHVlKTtcbmNvbnN0IGludml0YXRpb25QPUUoaW52aXRhdGlvblB1cnNlKS53aXRoZHJhdyhpbnZpdGF0aW9uQW1vdW50KTtcbnJldHVybiBpbnZpdGF0aW9uUDtcbiB9O1xucmV0dXJuIGZpbmRJbnZpdGF0aW9uO1xuIH07XG5cbmNvbnN0IG1ha2VDb250aW51aW5nSW52aXRhdGlvbj1hc3luYyhcbmlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQsXG5kYXBwT3JpZ2luLFxue3ByaW9yT2ZmZXJJZDpyYXdQcmlvck9mZmVySWQsZGVzY3JpcHRpb259KT0+XG57XG5hc3NlcnRGaXJzdENhcEFTQ0lJKGRlc2NyaXB0aW9uKTtcblxuY29uc3QgcHJpb3JPZmZlcklkPW1ha2VJZChkYXBwT3JpZ2luLHJhd1ByaW9yT2ZmZXJJZCk7XG5jb25zdCBvZmZlclJlc3VsdD1hd2FpdCBpZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LmdldChwcmlvck9mZmVySWQpLnByb21pc2U7XG5hc3NlcnQoXG5wYXNzU3R5bGVPZihvZmZlclJlc3VsdCk9PT0nY29weVJlY29yZCcsXG4gYG9mZmVyUmVzdWx0IG11c3QgYmUgYSByZWNvcmQgdG8gaGF2ZSBhbiBpbnZpdGF0aW9uTWFrZXJzIHByb3BlcnR5YCk7XG5cbmFzc2VydChcbm9mZmVyUmVzdWx0Lmludml0YXRpb25NYWtlcnMsXG4gYG9mZmVyUmVzdWx0IGRvZXMgbm90IGhhdmUgYW4gaW52aXRhdGlvbk1ha2VycyBwcm9wZXJ0eWApO1xuXG5cbmNvbnN0IGludml0YXRpb25QPUUob2ZmZXJSZXN1bHQuaW52aXRhdGlvbk1ha2VycylbZGVzY3JpcHRpb25dKCk7XG5yZXR1cm4gaW52aXRhdGlvblA7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUludml0YXRpb249YXN5bmMoXG5pbnZpdGF0aW9uTWFrZXIsXG5pbnN0YW5jZUhhbmRsZUJvYXJkSWQsXG5ib2FyZCxcbnpvZSk9Plxue1xuY29uc3QgaW5zdGFuY2U9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbkUoYm9hcmQpLmdldFZhbHVlKGluc3RhbmNlSGFuZGxlQm9hcmRJZCk7XG5cbmNvbnN0IHB1YmxpY0ZhY2V0PUUoem9lKS5nZXRQdWJsaWNGYWNldChpbnN0YW5jZSk7XG5jb25zdHttZXRob2QsYXJncz1bXX09aW52aXRhdGlvbk1ha2VyO1xuXG5yZXR1cm4gRShwdWJsaWNGYWNldClbbWV0aG9kXSguLi5hcmdzKTtcbiB9O1xuXG5jb25zdCAgICAgICAgZmluZE9yTWFrZUludml0YXRpb249YXN5bmMoXG5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LFxuYm9hcmQsXG56b2UsXG5pbnZpdGF0aW9uUHVyc2UsXG5pbnZpdGF0aW9uQnJhbmQsXG5vZmZlcik9Plxue1xuaWYob2ZmZXIuaW52aXRhdGlvbil7XG4vL1xucmV0dXJuIG9mZmVyLmludml0YXRpb247XG4gfVxuXG5jb25zdCBmaW5kSW52aXRhdGlvbj1tYWtlRmluZEludml0YXRpb24oaW52aXRhdGlvblB1cnNlLGludml0YXRpb25CcmFuZCk7XG5cbi8vXG5pZihvZmZlci5pbnZpdGVIYW5kbGVCb2FyZElkKXtcbmNvbnN0IHF1ZXJ5UGFyYW1zPXtcbmJvYXJkLFxuYm9hcmRJZDpvZmZlci5pbnZpdGVIYW5kbGVCb2FyZElkfTtcblxucmV0dXJuIGZpbmRJbnZpdGF0aW9uKGZpbmRCeUJvYXJkSWQscXVlcnlQYXJhbXMpO1xuIH1cblxuLy9cbmlmKG9mZmVyLmludml0YXRpb25IYW5kbGVCb2FyZElkKXtcbmNvbnN0IHF1ZXJ5UGFyYW1zPXtcbmJvYXJkLFxuYm9hcmRJZDpvZmZlci5pbnZpdGF0aW9uSGFuZGxlQm9hcmRJZH07XG5cbnJldHVybiBmaW5kSW52aXRhdGlvbihmaW5kQnlCb2FyZElkLHF1ZXJ5UGFyYW1zKTtcbiB9XG5cbmlmKG9mZmVyLmludml0YXRpb25NYWtlcil7XG5yZXR1cm4gbWFrZUludml0YXRpb24oXG5vZmZlci5pbnZpdGF0aW9uTWFrZXIsXG5vZmZlci5pbnN0YW5jZUhhbmRsZUJvYXJkSWQsXG5ib2FyZCxcbnpvZSk7XG5cbiB9XG5cbmlmKG9mZmVyLmludml0YXRpb25RdWVyeSl7XG5yZXR1cm4gZmluZEludml0YXRpb24oZmluZEJ5S2V5VmFsdWVQYWlycyxvZmZlci5pbnZpdGF0aW9uUXVlcnkpO1xuIH1cblxuaWYob2ZmZXIuY29udGludWluZ0ludml0YXRpb24pe1xuY29uc3QgZGFwcE9yaWdpbj1cbm9mZmVyLnJlcXVlc3RDb250ZXh0JiZvZmZlci5yZXF1ZXN0Q29udGV4dC5kYXBwT3JpZ2luP1xub2ZmZXIucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbjpcbiBgdW5rbm93bmA7XG5yZXR1cm4gbWFrZUNvbnRpbnVpbmdJbnZpdGF0aW9uKFxuaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdCxcbmRhcHBPcmlnaW4sXG5vZmZlci5jb250aW51aW5nSW52aXRhdGlvbik7XG5cbiB9XG5cbnRocm93IEZhaWwgYG5vIGludml0YXRpb24gd2FzIGZvdW5kIG9yIG1hZGUgZm9yIHRoaXMgb2ZmZXIgJHtvZmZlci5pZH1gO1xuIH07JGjNj19vbmNlLmZpbmRPck1ha2VJbnZpdGF0aW9uKGZpbmRPck1ha2VJbnZpdGF0aW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VJZCI6WyJtYWtlSWQiXSwiZmluZE9yTWFrZUludml0YXRpb24iOlsiZmluZE9yTWFrZUludml0YXRpb24iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAdC0IKksCAABLAgAAOgAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTguNS9zcmMvaW50ZXJuYWwtdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAyrv9w5wIAACcCAAANwAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTguNS9zcmMvaXNzdWVyVGFibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBhZ29yaWMvc3RvcmUiLCIuL2ludGVybmFsLXR5cGVzLmpzIl0sImV4cG9ydHMiOlsibWFrZUlzc3VlclRhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxFLG1ha2VTY2FsYXJXZWFrTWFwU3RvcmU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCIuL2ludGVybmFsLXR5cGVzLmpzXCIsIFtdXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlzc3VlclRhYmxlPSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRUb0lzc3VlclJlY29yZD1tYWtlU2NhbGFyV2Vha01hcFN0b3JlKCdicmFuZCcpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpc3N1ZXJUb0lzc3VlclJlY29yZD1tYWtlU2NhbGFyV2Vha01hcFN0b3JlKCdpc3N1ZXInKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3VlclRhYmxlPXtcbmhhc0J5QnJhbmQ6YnJhbmRUb0lzc3VlclJlY29yZC5oYXMsXG5nZXRCeUJyYW5kOmJyYW5kVG9Jc3N1ZXJSZWNvcmQuZ2V0LFxuaGFzQnlJc3N1ZXI6aXNzdWVyVG9Jc3N1ZXJSZWNvcmQuaGFzLFxuZ2V0QnlJc3N1ZXI6aXNzdWVyVG9Jc3N1ZXJSZWNvcmQuZ2V0LFxuLy9cbi8vXG5pbml0SXNzdWVyOmFzeW5jKGlzc3VlclAsYWRkTWV0YT0oeCk9PngpPT57XG5jb25zdCBicmFuZFA9RShpc3N1ZXJQKS5nZXRCcmFuZCgpO1xuY29uc3QgYnJhbmRJc3N1ZXJNYXRjaFA9RShicmFuZFApLmlzTXlJc3N1ZXIoaXNzdWVyUCk7XG5jb25zdCBkaXNwbGF5SW5mb1A9RShicmFuZFApLmdldERpc3BsYXlJbmZvKCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdFtpc3N1ZXIsYnJhbmQsYnJhbmRJc3N1ZXJNYXRjaCxkaXNwbGF5SW5mb109YXdhaXQgUHJvbWlzZS5hbGwoW1xuaXNzdWVyUCxcbmJyYW5kUCxcbmJyYW5kSXNzdWVyTWF0Y2hQLFxuZGlzcGxheUluZm9QXSk7XG5cbi8vXG5cbmlmKGlzc3VlclRvSXNzdWVyUmVjb3JkLmhhcyhpc3N1ZXIpKXtcbnJldHVybiBpc3N1ZXJUb0lzc3VlclJlY29yZC5nZXQoaXNzdWVyKTtcbiB9XG5hc3NlcnQoXG5icmFuZElzc3Vlck1hdGNoLFxuIGBpc3N1ZXIgd2FzIHVzaW5nIGEgYnJhbmQgd2hpY2ggd2FzIG5vdCBpdHMgb3duYCk7XG5cbmlzc3VlclRhYmxlLmluaXRJc3N1ZXJCeVJlY29yZChcbmFkZE1ldGEoe1xuYnJhbmQsXG5pc3N1ZXIsXG5hc3NldEtpbmQ6ZGlzcGxheUluZm8uYXNzZXRLaW5kLFxuZGlzcGxheUluZm99KSk7XG5cblxucmV0dXJuIGlzc3VlclRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xuIH0sXG5pbml0SXNzdWVyQnlSZWNvcmQ6KGlzc3VlclJlY29yZCk9PntcbmNvbnN0e2JyYW5kLGlzc3Vlcn09aXNzdWVyUmVjb3JkO1xuYnJhbmRUb0lzc3VlclJlY29yZC5pbml0KGJyYW5kLGlzc3VlclJlY29yZCk7XG5pc3N1ZXJUb0lzc3VlclJlY29yZC5pbml0KGlzc3Vlcixpc3N1ZXJSZWNvcmQpO1xuIH19O1xuXG5cbnJldHVybiBpc3N1ZXJUYWJsZTtcbiB9OyRozY9fb25jZS5tYWtlSXNzdWVyVGFibGUobWFrZUlzc3VlclRhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VJc3N1ZXJUYWJsZSI6WyJtYWtlSXNzdWVyVGFibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAASFDr2gUeAAAFHgAAOQAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTguNS9zcmMvbGliLWRlaHlkcmF0ZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbImlzUGF0aCIsIm1ha2VEZWh5ZHJhdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxGYWlsLHEsbWFrZU1hcnNoYWwsbWFwSXRlcmFibGUsbWFrZUxlZ2FjeU1hcCxtYWtlU2NhbGFyTWFwU3RvcmU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dLFtcIm1hcEl0ZXJhYmxlXCIsIFskaM2PX2EgPT4gKG1hcEl0ZXJhYmxlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibWFrZUxlZ2FjeU1hcFwiLCBbJGjNj19hID0+IChtYWtlTGVnYWN5TWFwID0gJGjNj19hKV1dLFtcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUGF0aD0oeCk9PntcbmlmKCFBcnJheS5pc0FycmF5KHgpKXtcbnJldHVybiBmYWxzZTtcbiB9XG54Lmxlbmd0aD4wfHxGYWlsIGBQYXRoICR7cSh4KX0gbXVzdCBub3QgYmUgZW1wdHlgO1xuZm9yKGNvbnN0IG5hbWUgb2YgeCl7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTskaM2PX29uY2UuaXNQYXRoKGlzUGF0aCk7XG5cbmNvbnN0IElNUExPREVfUFJFRklYPSdJRTonO1xuXG4vL1xuLy9cbi8vXG5jb25zdCAgICAgICAgbWFrZURlaHlkcmF0b3I9KGluaXRpYWxVbm5hbWVkQ291bnQ9MCk9PntcbmxldCB1bm5hbWVkQ291bnQ9aW5pdGlhbFVubmFtZWRDb3VudDtcblxuLy9cbmNvbnN0IHBldG5hbWVLaW5kVG9NYXBwaW5nPW1ha2VMZWdhY3lNYXAoJ3BldG5hbWVLaW5kJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzZWFyY2hPcmRlcj1bXTtcblxuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB2YWxUb1BhdGhzPW1ha2VTY2FsYXJNYXBTdG9yZSgndmFsdWUnKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgZXhwbG9kZT0oZGF0YSk9PntcbmRhdGEuc3RhcnRzV2l0aChJTVBMT0RFX1BSRUZJWCl8fFxuRmFpbCBgZXhwbG9kZWQgc3RyaW5nICR7ZGF0YX0gbXVzdCBzdGFydCB3aXRoICR7cShJTVBMT0RFX1BSRUZJWCl9YDtcbmNvbnN0IHN0cm9uZ25hbWU9SlNPTi5wYXJzZShkYXRhLnNsaWNlKElNUExPREVfUFJFRklYLmxlbmd0aCkpO1xuaWYoIWlzUGF0aChzdHJvbmduYW1lKSl7XG5yZXR1cm4gc3Ryb25nbmFtZTtcbiB9XG5jb25zdHt2YWxUb1BldG5hbWU6cm9vdFRvUGV0bmFtZX09ZWRnZU1hcHBpbmc7XG5jb25zdCBwZXRuYW1lPXJvb3RUb1BldG5hbWUuZ2V0KHN0cm9uZ25hbWVbMF0pO1xuYXNzZXJ0KCFpc1BhdGgocGV0bmFtZSkpO1xuc3Ryb25nbmFtZVswXT1wZXRuYW1lO1xucmV0dXJuIGhhcmRlbihzdHJvbmduYW1lKTtcbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBpbXBsb2RlPShzdHJvbmduYW1lKT0+e1xuaWYoIWlzUGF0aChzdHJvbmduYW1lKSl7XG5yZXR1cm4gYCR7SU1QTE9ERV9QUkVGSVh9JHtKU09OLnN0cmluZ2lmeShzdHJvbmduYW1lKX1gO1xuIH1cblxuLy9cbmNvbnN0IHBhdGg9Wy4uLnN0cm9uZ25hbWVdO1xuY29uc3R7cGV0bmFtZVRvVmFsOnBldG5hbWVUb1Jvb3R9PWVkZ2VNYXBwaW5nO1xuaWYoIXBldG5hbWVUb1Jvb3QuaGFzKHBhdGhbMF0pKXtcbi8vXG5GYWlsIGBFZGdlbmFtZSBmb3IgJHtxKHBhdGhbMF0pfSBwZXRuYW1lIG5vdCBmb3VuZGA7XG4gfVxuY29uc3Qgcm9vdD1wZXRuYW1lVG9Sb290LmdldChwYXRoWzBdKTtcbnBhdGhbMF09cm9vdDtcblxucmV0dXJuIGAke0lNUExPREVfUFJFRklYfSR7SlNPTi5zdHJpbmdpZnkocGF0aCl9YDtcbiB9O1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VNYXBwaW5nPShraW5kLHt1c2VMZWdhY3lNYXA9ZmFsc2V9PXt9KT0+e1xudHlwZW9mIGtpbmQ9PT0nc3RyaW5nJ3x8IGBraW5kICR7a2luZH0gbXVzdCBiZSBhIHN0cmluZ2A7XG5jb25zdCBtYWtlTWFwPXVzZUxlZ2FjeU1hcD9tYWtlTGVnYWN5TWFwOm1ha2VTY2FsYXJNYXBTdG9yZTtcbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJhd1ZhbFRvUGV0bmFtZT1tYWtlTWFwKCd2YWx1ZScpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHZhbFRvUGV0bmFtZT17XG4uLi5yYXdWYWxUb1BldG5hbWUsXG5zZXQoa2V5LHZhbCl7XG5yYXdWYWxUb1BldG5hbWUuc2V0KGtleSxpbXBsb2RlKHZhbCkpO1xuIH0sXG5pbml0KGtleSx2YWwpe1xucmF3VmFsVG9QZXRuYW1lLmluaXQoa2V5LGltcGxvZGUodmFsKSk7XG4gfSxcbmdldChrZXkpe1xucmV0dXJuIGV4cGxvZGUocmF3VmFsVG9QZXRuYW1lLmdldChrZXkpKTtcbiB9LFxuZW50cmllcygpe1xucmV0dXJuIG1hcEl0ZXJhYmxlKHJhd1ZhbFRvUGV0bmFtZS5lbnRyaWVzKCksKFtrZXksdmFsXSk9PltcbmtleSxcbmV4cGxvZGUodmFsKV0pO1xuXG4gfSxcbnZhbHVlcygpe1xucmV0dXJuIG1hcEl0ZXJhYmxlKHJhd1ZhbFRvUGV0bmFtZS52YWx1ZXMoKSwodmFsKT0+ZXhwbG9kZSh2YWwpKTtcbiB9fTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByYXdQZXRuYW1lVG9WYWw9bWFrZVNjYWxhck1hcFN0b3JlKCdwZXRuYW1lJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwZXRuYW1lVG9WYWw9e1xuLi4ucmF3UGV0bmFtZVRvVmFsLFxuaW5pdChrZXksdmFsKXtcbnJldHVybiByYXdQZXRuYW1lVG9WYWwuaW5pdChpbXBsb2RlKGtleSksdmFsKTtcbiB9LFxuc2V0KGtleSx2YWwpe1xucmV0dXJuIHJhd1BldG5hbWVUb1ZhbC5zZXQoaW1wbG9kZShrZXkpLHZhbCk7XG4gfSxcbmhhcyhrZXkpe1xudHJ5e1xucmV0dXJuIHJhd1BldG5hbWVUb1ZhbC5oYXMoaW1wbG9kZShrZXkpKTtcbiB9Y2F0Y2goZSl7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9LFxuZ2V0KGtleSl7XG5yZXR1cm4gcmF3UGV0bmFtZVRvVmFsLmdldChpbXBsb2RlKGtleSkpO1xuIH0sXG5kZWxldGUoa2V5KXtcbnJldHVybiByYXdQZXRuYW1lVG9WYWwuZGVsZXRlKGltcGxvZGUoa2V5KSk7XG4gfSxcbmtleXMoKXtcbnJldHVybiBtYXBJdGVyYWJsZShyYXdQZXRuYW1lVG9WYWwua2V5cygpLChrZXkpPT5leHBsb2RlKGtleSkpO1xuIH0sXG5lbnRyaWVzKCl7XG5yZXR1cm4gbWFwSXRlcmFibGUocmF3UGV0bmFtZVRvVmFsLmVudHJpZXMoKSwoW2tleSx2YWxdKT0+W1xuZXhwbG9kZShrZXkpLFxudmFsXSk7XG5cbiB9fTtcblxuXG4vKlxuXG5cbiAgICAgKi9cbmNvbnN0IGFkZFBhdGg9KHBhdGgsdmFsKT0+e1xuaXNQYXRoKHBhdGgpfHxGYWlsIGBwYXRoICR7cShwYXRoKX0gbXVzdCBiZSBhbiBhcnJheSBvZiBzdHJpbmdzYDtcblxuaWYoIXZhbFRvUGV0bmFtZS5oYXModmFsKSYmZWRnZU1hcHBpbmcudmFsVG9QZXRuYW1lLmhhcyhwYXRoWzBdKSl7XG4vL1xuLy9cbnZhbFRvUGV0bmFtZS5pbml0KHZhbCxwYXRoKTtcbiB9XG5cbi8vXG5pZighdmFsVG9QYXRocy5oYXModmFsKSl7XG52YWxUb1BhdGhzLmluaXQodmFsLGhhcmRlbihbcGF0aF0pKTtcbnJldHVybjtcbiB9XG5jb25zdCBwYXRocz12YWxUb1BhdGhzLmdldCh2YWwpO1xuXG4vL1xuY29uc3QgZm91bmQ9cGF0aHMuZmluZCgoZW5hbWUpPT57XG5pZihlbmFtZS5sZW5ndGghPT1wYXRoLmxlbmd0aCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuZm9yKGxldCBpPTA7aTxlbmFtZS5sZW5ndGg7aSs9MSl7XG5pZihlbmFtZVtpXSE9PXBhdGhbaV0pe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9KTtcblxuLy9cbmlmKCFmb3VuZCl7XG52YWxUb1BhdGhzLnNldCh2YWwsaGFyZGVuKFsuLi5wYXRocyxwYXRoXSkpO1xuIH1cbiB9O1xuXG5jb25zdCBhZGRQZXRuYW1lPShwZXRuYW1lLHZhbCk9PntcbmlmKHBldG5hbWVUb1ZhbC5oYXMocGV0bmFtZSkmJnBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSk9PT12YWwpe1xucmV0dXJuO1xuIH1cbiFwZXRuYW1lVG9WYWwuaGFzKHBldG5hbWUpfHxGYWlsIGBwZXRuYW1lICR7cGV0bmFtZX0gaXMgYWxyZWFkeSBpbiB1c2VgO1xuIXZhbFRvUGV0bmFtZS5oYXModmFsKXx8RmFpbCBgdmFsICR7dmFsfSBhbHJlYWR5IGhhcyBhIHBldG5hbWVgO1xucGV0bmFtZVRvVmFsLmluaXQocGV0bmFtZSx2YWwpO1xudmFsVG9QZXRuYW1lLmluaXQodmFsLHBldG5hbWUpO1xuXG5pZihpc1BhdGgocGV0bmFtZSkpe1xuYWRkUGF0aChwZXRuYW1lLHZhbCk7XG4gfVxuIH07XG5cbmNvbnN0IHJlbmFtZVBldG5hbWU9KHBldG5hbWUsdmFsKT0+e1xudmFsVG9QZXRuYW1lLmhhcyh2YWwpfHxcbkZhaWwgYHZhbCAke3ZhbH0gaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgbmFtZWQsIHdvdWxkIHlvdSBsaWtlIHRvIGFkZCBpdCBpbnN0ZWFkP2A7XG4hcGV0bmFtZVRvVmFsLmhhcyhwZXRuYW1lKXx8RmFpbCBgcGV0bmFtZSAke3BldG5hbWV9IGlzIGFscmVhZHkgaW4gdXNlYDtcbi8vXG5jb25zdCBvbGRQZXRuYW1lPXZhbFRvUGV0bmFtZS5nZXQodmFsKTtcbnBldG5hbWVUb1ZhbC5kZWxldGUob2xkUGV0bmFtZSk7XG52YWxUb1BldG5hbWUuZGVsZXRlKHZhbCk7XG5cbi8vXG5wZXRuYW1lVG9WYWwuaW5pdChwZXRuYW1lLHZhbCk7XG52YWxUb1BldG5hbWUuaW5pdCh2YWwscGV0bmFtZSk7XG4gfTtcblxuLypcblxuXG5cbiAgICAgKi9cbmNvbnN0IHN1Z2dlc3RQZXRuYW1lPShwZXRuYW1lLHZhbCk9PntcbmlmKHZhbFRvUGV0bmFtZS5oYXModmFsKSl7XG4vL1xucmV0dXJuIHZhbFRvUGV0bmFtZS5nZXQodmFsKTtcbiB9XG5cbi8vXG5sZXQgdW5pcXVlUGF0aD1wZXRuYW1lO1xubGV0IG5vbmNlPTI7XG53aGlsZShwZXRuYW1lVG9WYWwuaGFzKHVuaXF1ZVBhdGgpKXtcbi8vXG5pZihpc1BhdGgocGV0bmFtZSkpe1xudW5pcXVlUGF0aD1bLi4ucGV0bmFtZSwgYCR7bm9uY2V9YF07XG4gfWVsc2V7XG51bmlxdWVQYXRoPSBgJHtwZXRuYW1lfSR7bm9uY2V9YDtcbiB9XG5ub25jZSs9MTtcbiB9XG5cbi8vXG4vL1xuLy9cbmFkZFBldG5hbWUodW5pcXVlUGF0aCx2YWwpO1xucmV0dXJuIHVuaXF1ZVBhdGg7XG4gfTtcblxuY29uc3QgZGVsZXRlUGV0bmFtZT0ocGV0bmFtZSk9PntcbnBldG5hbWVUb1ZhbC5oYXMocGV0bmFtZSl8fFxuRmFpbCBgcGV0bmFtZSAke3EoXG5wZXRuYW1lKVxuIH0gaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgbmFtZWQsIHdvdWxkIHlvdSBsaWtlIHRvIGFkZCBpdCBpbnN0ZWFkP2A7XG5cbi8vXG5jb25zdCB2YWw9cGV0bmFtZVRvVmFsLmdldChwZXRuYW1lKTtcbnBldG5hbWVUb1ZhbC5kZWxldGUocGV0bmFtZSk7XG52YWxUb1BldG5hbWUuZGVsZXRlKHZhbCk7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWFwcGluZz1oYXJkZW4oe1xuaW1wbG9kZSxcbmV4cGxvZGUsXG52YWxUb1BldG5hbWUsXG52YWxUb1BhdGhzLFxucGV0bmFtZVRvVmFsLFxuYWRkUGV0bmFtZSxcbmFkZFBhdGgsXG5yZW5hbWVQZXRuYW1lLFxuZGVsZXRlUGV0bmFtZSxcbnN1Z2dlc3RQZXRuYW1lLFxua2luZH0pO1xuXG5wZXRuYW1lS2luZFRvTWFwcGluZy5pbml0KGtpbmQsbWFwcGluZyk7XG5yZXR1cm4gbWFwcGluZztcbiB9O1xuXG5jb25zdCBlZGdlTWFwcGluZz1tYWtlTWFwcGluZygnZWRnZScpO1xuY29uc3QgdW5uYW1lZE1hcHBpbmc9bWFrZU1hcHBpbmcoJ3VubmFtZWQnKTtcblxuY29uc3QgYWRkVG9Vbm5hbWVkPSh2YWwpPT57XG51bm5hbWVkQ291bnQrPTE7XG5jb25zdCBwbGFjZWhvbGRlcj0gYHVubmFtZWQtJHt1bm5hbWVkQ291bnR9YDtcbnVubmFtZWRNYXBwaW5nLmFkZFBldG5hbWUocGxhY2Vob2xkZXIsdmFsKTtcbmNvbnN0IHBsYWNlaG9sZGVyTmFtZT1oYXJkZW4oe1xua2luZDondW5uYW1lZCcsXG5wZXRuYW1lOnBsYWNlaG9sZGVyfSk7XG5cbnJldHVybiBwbGFjZWhvbGRlck5hbWU7XG4gfTtcblxuLy9cbi8vXG5jb25zdCBjb252ZXJ0VmFsVG9OYW1lPSh2YWwpPT57XG5mb3IobGV0IGk9MDtpPHNlYXJjaE9yZGVyLmxlbmd0aDtpKz0xKXtcbmNvbnN0IGtpbmQ9c2VhcmNoT3JkZXJbaV07XG5jb25zdHt2YWxUb1BldG5hbWV9PXBldG5hbWVLaW5kVG9NYXBwaW5nLmdldChraW5kKTtcbmlmKHZhbFRvUGV0bmFtZS5oYXModmFsKSl7XG5yZXR1cm4gaGFyZGVuKHtcbmtpbmQsXG5wZXRuYW1lOnZhbFRvUGV0bmFtZS5nZXQodmFsKX0pO1xuXG4gfVxuIH1cbi8vXG4vL1xuaWYodW5uYW1lZE1hcHBpbmcudmFsVG9QZXRuYW1lLmhhcyh2YWwpKXtcbnJldHVybiBoYXJkZW4oe1xua2luZDondW5uYW1lZCcsXG5wZXRuYW1lOnVubmFtZWRNYXBwaW5nLnZhbFRvUGV0bmFtZS5nZXQodmFsKX0pO1xuXG4gfVxuLy9cbmNvbnN0IHBsYWNlaG9sZGVyTmFtZT1hZGRUb1VubmFtZWQodmFsKTtcbnJldHVybiBwbGFjZWhvbGRlck5hbWU7XG4gfTtcblxuY29uc3QgY29udmVydE5hbWVUb1ZhbD0oe2tpbmQscGV0bmFtZX0sX2lmYWNlPXVuZGVmaW5lZCk9PntcbmNvbnN0e3BldG5hbWVUb1ZhbH09cGV0bmFtZUtpbmRUb01hcHBpbmcuZ2V0KGtpbmQpO1xucmV0dXJuIHBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSk7XG4gfTtcblxuY29uc3R7dG9DYXBEYXRhOmRlaHlkcmF0ZSxmcm9tQ2FwRGF0YTpoeWRyYXRlfT1tYWtlTWFyc2hhbChcbmNvbnZlcnRWYWxUb05hbWUsXG5jb252ZXJ0TmFtZVRvVmFsLFxue1xubWFyc2hhbE5hbWU6J2h5ZHJhdGlvbicsXG4vL1xuLy9cbmVycm9ySWROdW06MzBfMDAwLFxuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuaHlkcmF0ZSxcbmRlaHlkcmF0ZSxcbmVkZ2VNYXBwaW5nLFxuLypcblxuXG5cblxuICAgICAqL1xubWFrZU1hcHBpbmc6KGtpbmQsbGVnYWN5T3B0aW9ucz11bmRlZmluZWQpPT57XG5jb25zdCBtYXBwaW5nPW1ha2VNYXBwaW5nKGtpbmQsbGVnYWN5T3B0aW9ucyk7XG5zZWFyY2hPcmRlci5wdXNoKGtpbmQpO1xucmV0dXJuIG1hcHBpbmc7XG4gfX0pO1xuXG4gfTskaM2PX29uY2UubWFrZURlaHlkcmF0b3IobWFrZURlaHlkcmF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQYXRoIjpbImlzUGF0aCJdLCJtYWtlRGVoeWRyYXRvciI6WyJtYWtlRGVoeWRyYXRvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADhsOOmL6UAAC+lAAA2AAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxOC41L3NyYy9saWItd2FsbGV0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvY2FjaGUiLCJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL2VydHAiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL25hdCIsIkBhZ29yaWMvbm90aWZpZXIiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBhZ29yaWMvc21hcnQtd2FsbGV0L3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzIiwiLi9pc3N1ZXJUYWJsZS5qcyIsIi4vbGliLWRlaHlkcmF0ZS5qcyIsIi4vZmluZE9yTWFrZUludml0YXRpb24uanMiLCIuL2JpZ2ludFN0cmluZ2lmeS5qcyIsIi4vYWN0aW9ucy5qcyIsIi4vaW50ZXJuYWwtdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJtYWtlV2FsbGV0Um9vdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQscSxGYWlsLG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yLG9iamVjdE1hcCxXYWxsZXROYW1lLHNsb3RTdHJpbmdVbnNlcmlhbGl6ZSxtYWtlTGVnYWN5TWFwLG1ha2VTY2FsYXJNYXBTdG9yZSxtYWtlU2NhbGFyV2Vha01hcFN0b3JlLG1ha2VTY2FsYXJCaWdNYXBTdG9yZSxBbW91bnRNYXRoLEUscGFzc1N0eWxlT2YsRmFyLG1hcEl0ZXJhYmxlLE5hdCxtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcixtYWtlTm90aWZpZXJLaXQsb2JzZXJ2ZUl0ZXJhdGlvbixvYnNlcnZlTm90aWZpZXIsc3Vic2NyaWJlRWFjaCxtYWtlUHJvbWlzZUtpdCxtYWtlRXhwb3J0Q29udGV4dCxtYWtlSXNzdWVyVGFibGUsbWFrZURlaHlkcmF0b3IsbWFrZUlkLGZpbmRPck1ha2VJbnZpdGF0aW9uLGJpZ2ludFN0cmluZ2lmeSxtYWtlUGF5bWVudEFjdGlvbnM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvY2FjaGVcIiwgW1tcIm1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXSxbXCJXYWxsZXROYW1lXCIsIFskaM2PX2EgPT4gKFdhbGxldE5hbWUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanNcIiwgW1tcInNsb3RTdHJpbmdVbnNlcmlhbGl6ZVwiLCBbJGjNj19hID0+IChzbG90U3RyaW5nVW5zZXJpYWxpemUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlTGVnYWN5TWFwXCIsIFskaM2PX2EgPT4gKG1ha2VMZWdhY3lNYXAgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ01hcFN0b3JlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcIm1hcEl0ZXJhYmxlXCIsIFskaM2PX2EgPT4gKG1hcEl0ZXJhYmxlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRozY9fYSA9PiAoTmF0ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXJcIiwgWyRozY9fYSA9PiAobWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIgPSAkaM2PX2EpXV0sW1wibWFrZU5vdGlmaWVyS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VOb3RpZmllcktpdCA9ICRozY9fYSldXSxbXCJvYnNlcnZlSXRlcmF0aW9uXCIsIFskaM2PX2EgPT4gKG9ic2VydmVJdGVyYXRpb24gPSAkaM2PX2EpXV0sW1wib2JzZXJ2ZU5vdGlmaWVyXCIsIFskaM2PX2EgPT4gKG9ic2VydmVOb3RpZmllciA9ICRozY9fYSldXSxbXCJzdWJzY3JpYmVFYWNoXCIsIFskaM2PX2EgPT4gKHN1YnNjcmliZUVhY2ggPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3NtYXJ0LXdhbGxldC9zcmMvbWFyc2hhbC1jb250ZXh0cy5qc1wiLCBbW1wibWFrZUV4cG9ydENvbnRleHRcIiwgWyRozY9fYSA9PiAobWFrZUV4cG9ydENvbnRleHQgPSAkaM2PX2EpXV1dXSxbXCIuL2lzc3VlclRhYmxlLmpzXCIsIFtbXCJtYWtlSXNzdWVyVGFibGVcIiwgWyRozY9fYSA9PiAobWFrZUlzc3VlclRhYmxlID0gJGjNj19hKV1dXV0sW1wiLi9saWItZGVoeWRyYXRlLmpzXCIsIFtbXCJtYWtlRGVoeWRyYXRvclwiLCBbJGjNj19hID0+IChtYWtlRGVoeWRyYXRvciA9ICRozY9fYSldXV1dLFtcIi4vZmluZE9yTWFrZUludml0YXRpb24uanNcIiwgW1tcIm1ha2VJZFwiLCBbJGjNj19hID0+IChtYWtlSWQgPSAkaM2PX2EpXV0sW1wiZmluZE9yTWFrZUludml0YXRpb25cIiwgWyRozY9fYSA9PiAoZmluZE9yTWFrZUludml0YXRpb24gPSAkaM2PX2EpXV1dXSxbXCIuL2JpZ2ludFN0cmluZ2lmeS5qc1wiLCBbW1wiYmlnaW50U3RyaW5naWZ5XCIsIFskaM2PX2EgPT4gKGJpZ2ludFN0cmluZ2lmeSA9ICRozY9fYSldXV1dLFtcIi4vYWN0aW9ucy5qc1wiLCBbW1wibWFrZVBheW1lbnRBY3Rpb25zXCIsIFskaM2PX2EgPT4gKG1ha2VQYXltZW50QWN0aW9ucyA9ICRozY9fYSldXV1dLFtcIi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VXYWxsZXRSb290LCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlV2FsbGV0Um9vdFwifSk7JGjNj19vbmNlLm1ha2VXYWxsZXRSb290KG1ha2VXYWxsZXRSb290KTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG5jb25zdCBub0FjdGlvblN0YXRlQ2hhbmdlSGFuZGxlcj0oX25ld1N0YXRlKT0+eyB9O1xuXG5jb25zdCBjbXA9KGEsYik9PntcbmlmKGE+Yil7XG5yZXR1cm4gMTtcbiB9XG5pZihhPT09Yil7XG5yZXR1cm4gMDtcbiB9XG5yZXR1cm4tMTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZVdhbGxldFJvb3Qoe1xuem9lLFxuYm9hcmQsXG5hZ29yaWNOYW1lcyxcbm5hbWVzQnlBZGRyZXNzLFxubXlBZGRyZXNzTmFtZUFkbWluLFxucHVyc2VzU3RhdGVDaGFuZ2VIYW5kbGVyPW5vQWN0aW9uU3RhdGVDaGFuZ2VIYW5kbGVyLFxuaW5ib3hTdGF0ZUNoYW5nZUhhbmRsZXI9bm9BY3Rpb25TdGF0ZUNoYW5nZUhhbmRsZXIsXG5kYXRlTm93PXVuZGVmaW5lZH0pXG57XG5hc3NlcnQobXlBZGRyZXNzTmFtZUFkbWluLCdtaXNzaW5nIG15QWRkcmVzc05hbWVBZG1pbicpO1xuXG5sZXQgbGFzdElkPTA7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhZGRNZXRhPShyZWNvcmQpPT57XG5jb25zdHttZXRhOm9sZE1ldGE9e319PXJlY29yZDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1ldGE9ey4uLm9sZE1ldGF9O1xuaWYoIW1ldGEuaWQpe1xuLy9cbmxhc3RJZCs9MTtcbm1ldGEuaWQ9bGFzdElkO1xuIH1cbmlmKGRhdGVOb3cpe1xuY29uc3Qgbm93U3RhbXA9ZGF0ZU5vdygpO1xuaWYoIW1ldGEuY3JlYXRpb25TdGFtcCl7XG4vL1xubWV0YS5jcmVhdGlvblN0YW1wPW5vd1N0YW1wO1xuIH1cbm1ldGEudXBkYXRlZFN0YW1wPW5vd1N0YW1wO1xuIH1cbnJldHVybnsuLi5yZWNvcmQsbWV0YX07XG4gfTtcblxuY29uc3QgY29udGV4dD1tYWtlRXhwb3J0Q29udGV4dCgpO1xuXG4vL1xuLy9cbmNvbnN0e21ha2VNYXBwaW5nLGRlaHlkcmF0ZSxlZGdlTWFwcGluZ309bWFrZURlaHlkcmF0b3IoKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZU1hcHBpbmc9bWFrZU1hcHBpbmcoJ3B1cnNlJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRNYXBwaW5nPW1ha2VNYXBwaW5nKCdicmFuZCcpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29udGFjdE1hcHBpbmc9bWFrZU1hcHBpbmcoXG4nY29udGFjdCcsXG57dXNlTGVnYWN5TWFwOnRydWV9Ly9cbik7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5zdGFuY2VNYXBwaW5nPW1ha2VNYXBwaW5nKCdpbnN0YW5jZScpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnN0YWxsYXRpb25NYXBwaW5nPW1ha2VNYXBwaW5nKCdpbnN0YWxsYXRpb24nKTtcblxuY29uc3QgYnJhbmRUYWJsZT1tYWtlSXNzdWVyVGFibGUoKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3VlclRvQm9hcmRJZD1tYWtlU2NhbGFyV2Vha01hcFN0b3JlKCdpc3N1ZXInKTtcblxuLy9cbmNvbnN0IGluaXRJc3N1ZXJUb0JvYXJkSWQ9YXN5bmMoaXNzdWVyLGJyYW5kKT0+e1xuaWYoaXNzdWVyVG9Cb2FyZElkLmhhcyhpc3N1ZXIpKXtcbi8vXG5yZXR1cm4gaXNzdWVyVG9Cb2FyZElkLmdldChpc3N1ZXIpO1xuIH1cblxuLy9cbmNvbnN0W2lzc3VlckJvYXJkSWQsYnJhbmRCb2FyZElkXT1hd2FpdCBQcm9taXNlLmFsbChbXG5FKGJvYXJkKS5nZXRJZChpc3N1ZXIpLFxuRShib2FyZCkuZ2V0SWQoYnJhbmQpXSk7XG5cbmlmKGlzc3VlclRvQm9hcmRJZC5oYXMoaXNzdWVyKSl7XG4vL1xucmV0dXJuIGlzc3VlclRvQm9hcmRJZC5nZXQoaXNzdWVyKTtcbiB9XG5cbi8vXG4vL1xuY29udGV4dC5lbnN1cmVCb2FyZElkKGlzc3VlckJvYXJkSWQsaXNzdWVyKTtcbmNvbnRleHQuaW5pdEJvYXJkSWQoYnJhbmRCb2FyZElkLGJyYW5kKTtcblxuLy9cbmlzc3VlclRvQm9hcmRJZC5pbml0KGlzc3Vlcixpc3N1ZXJCb2FyZElkKTtcbnJldHVybiBpc3N1ZXJCb2FyZElkO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZVRvQnJhbmQ9bWFrZVNjYWxhcldlYWtNYXBTdG9yZSgncHVyc2UnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBicmFuZFRvRGVwb3NpdEZhY2V0SWQ9bWFrZVNjYWxhck1hcFN0b3JlKCdicmFuZCcpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2U9bWFrZVNjYWxhck1hcFN0b3JlKCdicmFuZCcpO1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpZFRvT2ZmZXI9bWFrZVNjYWxhck1hcFN0b3JlKCdvZmZlcklkJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdD1tYWtlTGVnYWN5TWFwKCdpZCcpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGludml0YXRpb25IYW5kbGVUb09mZmVyUmVzdWx0PVxubWFrZVNjYWxhcldlYWtNYXBTdG9yZSgnaW52aXRhdGlvbkhhbmRsZScpO1xuXG4vL1xuY29uc3QgaWRUb0NvbXBpbGVkT2ZmZXJQPW5ldyBNYXAoKTtcbmNvbnN0IGlkVG9Db21wbGV0ZT1uZXcgTWFwKCk7XG5jb25zdCBpZFRvU2VhdD1uZXcgTWFwKCk7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZXNTdGF0ZT1uZXcgTWFwKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVyc2VzRnVsbFN0YXRlPW5ldyBNYXAoKTtcbmNvbnN0IGluYm94U3RhdGU9bmV3IE1hcCgpO1xuXG4vKlxuXG5cblxuICAgKi9cbmxldCB6b2VJbnZpdGVQdXJzZTtcblxuY29uc3QgWk9FX0lOVklURV9CUkFORF9QRVROQU1FPSd6b2UgaW52aXRlJztcblxuZnVuY3Rpb24gZ2V0U29ydGVkVmFsdWVzKG1hcCl7XG5jb25zdCBlbnRyaWVzPVsuLi5tYXAuZW50cmllcygpXTtcbi8vXG5jb25zdCB2YWx1ZXM9ZW50cmllcy5cbnNvcnQoKFtpZDFdLFtpZDJdKT0+Y21wKGlkMSxpZDIpKS5cbm1hcCgoW19pZCx2YWx1ZV0pPT52YWx1ZSk7XG5cbnJldHVybiBiaWdpbnRTdHJpbmdpZnkoaGFyZGVuKHZhbHVlcykpO1xuIH1cblxuZnVuY3Rpb24gZ2V0UHVyc2VzU3RhdGUoKXtcbnJldHVybiBnZXRTb3J0ZWRWYWx1ZXMocHVyc2VzU3RhdGUpO1xuIH1cblxuZnVuY3Rpb24gZ2V0SW5ib3hTdGF0ZSgpe1xucmV0dXJuIGdldFNvcnRlZFZhbHVlcyhpbmJveFN0YXRlKTtcbiB9XG5cbi8vXG4vL1xuLy9cbmNvbnN0IGZpbGxJblNsb3RzPXNsb3RTdHJpbmdVbnNlcmlhbGl6ZTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3R7bm90aWZpZXI6b2ZmZXJzTm90aWZpZXIsdXBkYXRlcjpvZmZlcnNVcGRhdGVyfT1tYWtlTm90aWZpZXJLaXQoXG5bXSk7XG5cblxuY29uc3R7cHVyc2VzTm90aWZpZXIsYXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyLHB1cnNlc1VwZGF0ZXJ9PSgoKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdHtub3RpZmllcjppcG4sdXBkYXRlcjppcHV9PW1ha2VOb3RpZmllcktpdChbXSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0e25vdGlmaWVyOmFwbix1cGRhdGVyOmFwdX09bWFrZU5vdGlmaWVyS2l0KFtdKTtcbi8vXG4vKlxuXG5cbiAgICAgKi9cbmNvbnN0IGlubmVyRmlsdGVyPSh7XG5icmFuZCxcbmJyYW5kQm9hcmRJZCxcbmRlcG9zaXRCb2FyZElkLFxuYnJhbmRQZXRuYW1lLFxucHVyc2VQZXRuYW1lLFxuZGlzcGxheUluZm8sXG52YWx1ZSxcbmN1cnJlbnRBbW91bnRTbG90cyxcbmN1cnJlbnRBbW91bnR9KT0+XG5cbmhhcmRlbih7XG5icmFuZCxcbmJyYW5kQm9hcmRJZCxcbi4uLihkZXBvc2l0Qm9hcmRJZCYme2RlcG9zaXRCb2FyZElkfSksXG5icmFuZFBldG5hbWUsXG5wdXJzZVBldG5hbWUsXG4uLi4oZGlzcGxheUluZm8mJntkaXNwbGF5SW5mb30pLFxudmFsdWUsXG5jdXJyZW50QW1vdW50U2xvdHMsXG5jdXJyZW50QW1vdW50fSk7XG5cbmNvbnN0IGZpbHRlcj0oc3RhdGUpPT5zdGF0ZS5tYXAoaW5uZXJGaWx0ZXIpO1xuY29uc3QgcHU9RmFyKCdwdXJzZXNVcGRhdGVyJyx7XG51cGRhdGVTdGF0ZToobmV3U3RhdGUpPT57XG5pcHUudXBkYXRlU3RhdGUobmV3U3RhdGUpO1xuYXB1LnVwZGF0ZVN0YXRlKGZpbHRlcihuZXdTdGF0ZSkpO1xuIH0sXG5maW5pc2g6KGZpbmFsU3RhdGUpPT57XG5pcHUuZmluaXNoKGZpbmFsU3RhdGUpO1xuYXB1LmZpbmlzaChmaWx0ZXIoZmluYWxTdGF0ZSkpO1xuIH0sXG5mYWlsOihyZWFzb24pPT57XG5pcHUuZmFpbChyZWFzb24pO1xuYXB1LmZhaWwocmVhc29uKTtcbiB9fSk7XG5cbnJldHVybiBoYXJkZW4oe1xucHVyc2VzTm90aWZpZXI6aXBuLFxuYXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyOmFwbixcbnB1cnNlc1VwZGF0ZXI6cHV9KTtcblxuIH0pKCk7XG5cbi8qXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVB1cnNlc1N0YXRlKHB1cnNlUGV0bmFtZSxwdXJzZSl7XG5jb25zdCBwdXJzZUtleT1wdXJzZU1hcHBpbmcuaW1wbG9kZShwdXJzZVBldG5hbWUpO1xuZm9yKGNvbnN0IGtleSBvZiBwdXJzZXNTdGF0ZS5rZXlzKCkpe1xuaWYoIXB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuaGFzKHB1cnNlTWFwcGluZy5leHBsb2RlKGtleSkpKXtcbnB1cnNlc1N0YXRlLmRlbGV0ZShrZXkpO1xuIH1cbiB9XG5jb25zdCBjdXJyZW50QW1vdW50PWF3YWl0IEUocHVyc2UpLmdldEN1cnJlbnRBbW91bnQoKTtcbmNvbnN0e3ZhbHVlLGJyYW5kfT1jdXJyZW50QW1vdW50O1xuY29uc3QgYnJhbmRQZXRuYW1lPWJyYW5kTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KGJyYW5kKTtcbmNvbnN0IGRlaHlkcmF0ZWRDdXJyZW50QW1vdW50PWRlaHlkcmF0ZShjdXJyZW50QW1vdW50KTtcbmNvbnN0IGJyYW5kQm9hcmRJZD1hd2FpdCBFKGJvYXJkKS5nZXRJZChicmFuZCk7XG5cbmxldCBkZXBvc2l0Qm9hcmRJZDtcbmlmKFxuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaGFzKGJyYW5kKSYmXG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5nZXQoYnJhbmQpPT09cHVyc2UmJlxuYnJhbmRUb0RlcG9zaXRGYWNldElkLmhhcyhicmFuZCkpXG57XG4vL1xuZGVwb3NpdEJvYXJkSWQ9YnJhbmRUb0RlcG9zaXRGYWNldElkLmdldChicmFuZCk7XG4gfVxuXG5jb25zdCBpc3N1ZXJSZWNvcmQ9XG5icmFuZFRhYmxlLmhhc0J5QnJhbmQoYnJhbmQpJiZicmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xuLypcblxuICAgICAqL1xuY29uc3QganN0YXRlPWFkZE1ldGEoe1xuLi4ucHVyc2VzU3RhdGUuZ2V0KHB1cnNlS2V5KSxcbmJyYW5kLFxuYnJhbmRCb2FyZElkLFxuLi4uKGRlcG9zaXRCb2FyZElkJiZ7ZGVwb3NpdEJvYXJkSWR9KSxcbmJyYW5kUGV0bmFtZSxcbnB1cnNlUGV0bmFtZSxcbmRpc3BsYXlJbmZvOmlzc3VlclJlY29yZCYmaXNzdWVyUmVjb3JkLmRpc3BsYXlJbmZvLFxudmFsdWUsXG5jdXJyZW50QW1vdW50U2xvdHM6ZGVoeWRyYXRlZEN1cnJlbnRBbW91bnQsXG5jdXJyZW50QW1vdW50OmZpbGxJblNsb3RzKGRlaHlkcmF0ZWRDdXJyZW50QW1vdW50KX0pO1xuXG5wdXJzZXNTdGF0ZS5zZXQocHVyc2VLZXksanN0YXRlKTtcblxucHVyc2VzRnVsbFN0YXRlLnNldChcbnB1cnNlLFxuaGFyZGVuKHtcbi4uLmpzdGF0ZSxcbnB1cnNlLFxuYnJhbmQsXG5hY3Rpb25zOkZhcigncHVyc2UuYWN0aW9ucycse1xuLy9cbiAgICAgIGFzeW5jIHNlbmQocmVjZWl2ZXJQLHNlbmRWYWx1ZSl7XG5jb25zdCBhbW91bnQ9QW1vdW50TWF0aC5tYWtlKGJyYW5kLHNlbmRWYWx1ZSk7XG5jb25zdCBwYXltZW50PWF3YWl0IEUocHVyc2UpLndpdGhkcmF3KGFtb3VudCk7XG50cnl7XG5hd2FpdCBFKHJlY2VpdmVyUCkucmVjZWl2ZShwYXltZW50KTtcbiB9Y2F0Y2goZSl7XG4vL1xuYXdhaXQgRShwdXJzZSkuZGVwb3NpdChwYXltZW50KTtcbnRocm93IGU7XG4gfVxuIH0sXG4gICAgICBhc3luYyByZWNlaXZlKHBheW1lbnRQKXtcbmNvbnN0IHBheW1lbnQ9YXdhaXQgcGF5bWVudFA7XG5yZXR1cm4gRShwdXJzZSkuZGVwb3NpdChwYXltZW50KTtcbiB9LFxuZGVwb3NpdChwYXltZW50LGFtb3VudD11bmRlZmluZWQpe1xucmV0dXJuIEUocHVyc2UpLmRlcG9zaXQocGF5bWVudCxhbW91bnQpO1xuIH19KX0pKTtcblxuXG5cbnB1cnNlc1VwZGF0ZXIudXBkYXRlU3RhdGUoWy4uLnB1cnNlc0Z1bGxTdGF0ZS52YWx1ZXMoKV0pO1xucHVyc2VzU3RhdGVDaGFuZ2VIYW5kbGVyKGdldFB1cnNlc1N0YXRlKCkpO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWxsUHVyc2VTdGF0ZSgpe1xucmV0dXJuIFByb21pc2UuYWxsKFxubWFwSXRlcmFibGUocHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCksKFtwZXRuYW1lLHB1cnNlXSk9PlxudXBkYXRlUHVyc2VzU3RhdGUocGV0bmFtZSxwdXJzZSkpKTtcblxuXG4gfVxuXG5jb25zdCBkaXNwbGF5PSh2YWx1ZSk9PmZpbGxJblNsb3RzKGRlaHlkcmF0ZShoYXJkZW4odmFsdWUpKSk7XG5cbmNvbnN0IGV4cGFuZEludml0YXRpb25CcmFuZHM9YXN5bmMoaW52aXRhdGlvbkRldGFpbHMpPT57XG4vL1xuY29uc3R7ZmVlfT1pbnZpdGF0aW9uRGV0YWlscztcbmlmKCFmZWUpe1xucmV0dXJuIGludml0YXRpb25EZXRhaWxzO1xuIH1cblxuLy9cbmNvbnN0IGRpc3BsYXlJbmZvPWF3YWl0IEUoRSh6b2UpLmdldEZlZUlzc3VlcigpKS5nZXREaXNwbGF5SW5mbygpO1xuY29uc3QgYXVnbWVudGVkRGV0YWlscz17XG4uLi5pbnZpdGF0aW9uRGV0YWlscyxcbmZlZTp7Li4uZmVlLGRpc3BsYXlJbmZvfX07XG5cbnJldHVybiBkaXNwbGF5KGF1Z21lbnRlZERldGFpbHMpO1xuIH07XG5cbmNvbnN0IGRpc3BsYXlQcm9wb3NhbD0ocHJvcG9zYWxUZW1wbGF0ZSk9PntcbmNvbnN0e1xud2FudCxcbmdpdmUsXG5leGl0PXtvbkRlbWFuZDpudWxsfSxcbmFyZ3VtZW50czphcmdzfT1cbnByb3Bvc2FsVGVtcGxhdGU7XG5jb25zdCBkaXNwbGF5UmVjb3JkPShwdXJzZVBldG5hbWVWYWx1ZUtleXdvcmRSZWNvcmQpPT57XG5pZihwdXJzZVBldG5hbWVWYWx1ZUtleXdvcmRSZWNvcmQ9PT11bmRlZmluZWQpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5yZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuT2JqZWN0LmVudHJpZXMocHVyc2VQZXRuYW1lVmFsdWVLZXl3b3JkUmVjb3JkKS5tYXAoXG4oW2tleXdvcmQse3B1cnNlUGV0bmFtZSx2YWx1ZSxhbW91bnQscHVyc2V9XSk9PntcbmlmKCFhbW91bnQpe1xucHVyc2U9Z2V0UHVyc2UocHVyc2VQZXRuYW1lKTtcbmFtb3VudD17dmFsdWV9O1xuIH1lbHNle1xucHVyc2VQZXRuYW1lPXB1cnNlTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KHB1cnNlKTtcbiB9XG5cbmNvbnN0IGJyYW5kPXB1cnNlVG9CcmFuZC5nZXQocHVyc2UpO1xuY29uc3QgaXNzdWVyUmVjb3JkPVxuYnJhbmRUYWJsZS5oYXNCeUJyYW5kKGJyYW5kKSYmYnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcbmFtb3VudD1oYXJkZW4oe1xuLi4uYW1vdW50LFxuYnJhbmQsXG5kaXNwbGF5SW5mbzppc3N1ZXJSZWNvcmQmJmlzc3VlclJlY29yZC5kaXNwbGF5SW5mb30pO1xuXG5jb25zdCBkaXNwbGF5QW1vdW50PWRpc3BsYXkoYW1vdW50KTtcbnJldHVybltcbmtleXdvcmQsXG57XG5wdXJzZVBldG5hbWUsXG5wdXJzZSxcbmFtb3VudDpkaXNwbGF5QW1vdW50fV07XG5cblxuIH0pKTtcblxuXG4gfTtcbmNvbnN0IHByb3Bvc2FsRm9yRGlzcGxheT17XG53YW50OmRpc3BsYXlSZWNvcmQod2FudCksXG5naXZlOmRpc3BsYXlSZWNvcmQoZ2l2ZSksXG5leGl0fTtcblxuaWYoYXJncyE9PXVuZGVmaW5lZCl7XG5wcm9wb3NhbEZvckRpc3BsYXkuYXJndW1lbnRzPWRpc3BsYXkoYXJncyk7XG4gfVxucmV0dXJuIHByb3Bvc2FsRm9yRGlzcGxheTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcnVuZU9mZmVyV2hlbkluYWN0aXZlPShpZCk9PntcbmFzc2VydChpbmJveFN0YXRlLmhhcyhpZCkpO1xuY29uc3Qgb2ZmZXI9aW5ib3hTdGF0ZS5nZXQoaWQpO1xuY29uc3R7c3RhdHVzfT1vZmZlcjtcblxuc3dpdGNoKHN0YXR1cyl7XG5jYXNlJ2RlY2xpbmUnOlxuY2FzZSdjYW5jZWwnOlxuY2FzZSdyZWplY3RlZCc6XG5pbmJveFN0YXRlLmRlbGV0ZShpZCk7XG5yZXR1cm47XG5jYXNlJ2FjY2VwdCc6XG5hc3NlcnQoaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5oYXMoaWQpKTtcbnZvaWQgRS53aGVuKGlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQuZ2V0KGlkKS5wcm9taXNlLChyZXN1bHQpPT57XG5jb25zdCBzdHlsZT1wYXNzU3R5bGVPZihyZXN1bHQpO1xuY29uc3QgYWN0aXZlPVxuc3R5bGU9PT0ncmVtb3RhYmxlJ3x8XG5zdHlsZT09PSdjb3B5UmVjb3JkJyYmJ2ludml0YXRpb25NYWtlcnMnaW4gcmVzdWx0O1xuaWYoIWFjdGl2ZSl7XG5pbmJveFN0YXRlLmRlbGV0ZShpZCk7XG4gfVxuIH0pO1xuYnJlYWs7XG5jYXNlJ3BlbmRpbmcnOlxuY2FzZSdjb21wbGV0ZSc6XG5kZWZhdWx0On1cblxuIH07XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUluYm94U3RhdGUoaWQsb2ZmZXIsZG9QdXNoPXRydWUpe1xuLy9cbmNvbnN0e3Byb3Bvc2FsVGVtcGxhdGV9PW9mZmVyO1xuY29uc3R7aW5zdGFuY2UsaW5zdGFsbGF0aW9uLGludml0YXRpb25EZXRhaWxzfT1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmlmKCFpbnN0YW5jZXx8IWluc3RhbGxhdGlvbil7XG4vL1xuLy9cbnJldHVybjtcbiB9XG5jb25zdCBpbnN0YW5jZURpc3BsYXk9ZGlzcGxheShpbnN0YW5jZSk7XG5jb25zdCBpbnN0YWxsYXRpb25EaXNwbGF5PWRpc3BsYXkoaW5zdGFsbGF0aW9uKTtcbmNvbnN0IGFscmVhZHlEaXNwbGF5ZWQ9XG5pbmJveFN0YXRlLmhhcyhpZCkmJmluYm94U3RhdGUuZ2V0KGlkKS5wcm9wb3NhbEZvckRpc3BsYXk7XG5cbmNvbnN0IGF1Z21lbnRlZEludml0YXRpb25EZXRhaWxzPVxuYXdhaXQgZXhwYW5kSW52aXRhdGlvbkJyYW5kcyhpbnZpdGF0aW9uRGV0YWlscyk7XG5cbmNvbnN0IG9mZmVyRm9yRGlzcGxheT17XG4uLi5vZmZlcixcbi8vXG4vL1xuLy9cbmFjdGlvbnM6dW5kZWZpbmVkLFxuaW5zdGFsbGF0aW9uOnVuZGVmaW5lZCxcbmluc3RhbmNlOnVuZGVmaW5lZCxcbnByb3Bvc2FsVGVtcGxhdGUsXG5pbnZpdGF0aW9uRGV0YWlsczpkaXNwbGF5KGF1Z21lbnRlZEludml0YXRpb25EZXRhaWxzKSxcbmluc3RhbmNlUGV0bmFtZTppbnN0YW5jZURpc3BsYXkucGV0bmFtZSxcbmluc3RhbGxhdGlvblBldG5hbWU6aW5zdGFsbGF0aW9uRGlzcGxheS5wZXRuYW1lLFxucHJvcG9zYWxGb3JEaXNwbGF5OmRpc3BsYXlQcm9wb3NhbChhbHJlYWR5RGlzcGxheWVkfHxwcm9wb3NhbFRlbXBsYXRlKX07XG5cblxuaW5ib3hTdGF0ZS5zZXQoaWQsb2ZmZXJGb3JEaXNwbGF5KTtcbmlmKGRvUHVzaCl7XG4vL1xub2ZmZXJzVXBkYXRlci51cGRhdGVTdGF0ZShbb2ZmZXJGb3JEaXNwbGF5XSk7XG5pbmJveFN0YXRlQ2hhbmdlSGFuZGxlcihnZXRJbmJveFN0YXRlKCkpO1xuIH1cbnBydW5lT2ZmZXJXaGVuSW5hY3RpdmUoaWQpO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWxsSW5ib3hTdGF0ZSgpe1xuYXdhaXQgUHJvbWlzZS5hbGwoXG5BcnJheS5mcm9tKGluYm94U3RhdGUuZW50cmllcygpKS5tYXAoKFtpZCxvZmZlcl0pPT5cbi8vXG51cGRhdGVJbmJveFN0YXRlKGlkLG9mZmVyLGZhbHNlKSkpO1xuXG5cbi8vXG5vZmZlcnNVcGRhdGVyLnVwZGF0ZVN0YXRlKFsuLi5pbmJveFN0YXRlLnZhbHVlcygpXSk7XG5pbmJveFN0YXRlQ2hhbmdlSGFuZGxlcihnZXRJbmJveFN0YXRlKCkpO1xuIH1cblxuY29uc3R7dXBkYXRlcjppc3N1ZXJzVXBkYXRlcixub3RpZmllcjppc3N1ZXJzTm90aWZpZXJ9PVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5tYWtlTm90aWZpZXJLaXQoW10pO1xuXG5cbmZ1bmN0aW9uIHVwZGF0ZUFsbElzc3VlcnNTdGF0ZSgpe1xuaXNzdWVyc1VwZGF0ZXIudXBkYXRlU3RhdGUoXG5bLi4uYnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCldLm1hcCgoW3BldG5hbWUsYnJhbmRdKT0+e1xuY29uc3QgaXNzdWVyUmVjb3JkPWJyYW5kVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG5yZXR1cm5bXG5wZXRuYW1lLFxue1xuLi4uaXNzdWVyUmVjb3JkLFxuaXNzdWVyQm9hcmRJZDppc3N1ZXJUb0JvYXJkSWQuZ2V0KGlzc3VlclJlY29yZC5pc3N1ZXIpfV07XG5cblxuIH0pKTtcblxuIH1cblxuLy9cbi8vXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVBbGxTdGF0ZSgpe1xudXBkYXRlQWxsSXNzdWVyc1N0YXRlKCk7XG5hd2FpdCB1cGRhdGVBbGxQdXJzZVN0YXRlKCk7XG5hd2FpdCB1cGRhdGVBbGxJbmJveFN0YXRlKCk7XG4gfVxuXG4vL1xuLy9cbmZ1bmN0aW9uIHVwZGF0ZU9yUmVzdWJzY3JpYmUoaWQsc2VhdCx1cGRhdGUpe1xuY29uc3R7dXBkYXRlQ291bnR9PXVwZGF0ZTtcbmFzc2VydCh1cGRhdGVDb3VudD09PXVuZGVmaW5lZCk7XG5pZFRvU2VhdC5kZWxldGUoaWQpO1xuXG5jb25zdCBvZmZlcj1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmNvbnN0IGNvbXBsZXRlZE9mZmVyPWFkZE1ldGEoe1xuLi4ub2ZmZXIsXG5zdGF0dXM6J2NvbXBsZXRlJ30pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLGNvbXBsZXRlZE9mZmVyKTtcbnZvaWQgdXBkYXRlSW5ib3hTdGF0ZShpZCxjb21wbGV0ZWRPZmZlcik7XG4gfVxuXG4vKlxuXG5cblxuXG4gICAqL1xuZnVuY3Rpb24gc3Vic2NyaWJlVG9VcGRhdGVzKGlkLHNlYXQpe1xucmV0dXJuIEUoRShzZWF0KS5nZXRFeGl0U3Vic2NyaWJlcigpKS5cbnN1YnNjcmliZUFmdGVyKCkuXG50aGVuKCh1cGRhdGUpPT51cGRhdGVPclJlc3Vic2NyaWJlKGlkLHNlYXQsdXBkYXRlKSk7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlT2ZmZXIoY29tcGlsZWRPZmZlclApe1xuLy9cbi8vXG4vL1xuY29uc3R7XG5pbnZpdGVQLFxucHVyc2VLZXl3b3JkUmVjb3JkLFxucHJvcG9zYWwsXG5hcmd1bWVudHM6YXJnc309XG5hd2FpdCBjb21waWxlZE9mZmVyUDtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBheW1lbnRUb1B1cnNlPW5ldyBNYXAoKTtcblxuLy9cbi8vXG5jb25zdCBrZXl3b3JkUGF5bWVudFBzPU9iamVjdC5lbnRyaWVzKHByb3Bvc2FsLmdpdmV8fGhhcmRlbih7fSkpLm1hcChcbmFzeW5jKFtrZXl3b3JkLGFtb3VudF0pPT57XG5jb25zdCBwdXJzZT1wdXJzZUtleXdvcmRSZWNvcmRba2V5d29yZF07XG5wdXJzZSE9PXVuZGVmaW5lZHx8XG5GYWlsIGBwdXJzZSB3YXMgbm90IGZvdW5kIGZvciBrZXl3b3JkICR7cShrZXl3b3JkKX1gO1xuXG5jb25zdCBwYXltZW50PWF3YWl0IEUocHVyc2UpLndpdGhkcmF3KGFtb3VudCk7XG5wYXltZW50VG9QdXJzZS5zZXQocGF5bWVudCxwdXJzZSk7XG5yZXR1cm5ba2V5d29yZCxwYXltZW50XTtcbiB9KTtcblxuXG4vL1xuLy9cbmNvbnN0IHRyeVJlY2xhaW1pbmdXaXRoZHJhd25QYXltZW50cz0oKT0+XG4vL1xuLy9cblByb21pc2UuYWxsU2V0dGxlZChcbmtleXdvcmRQYXltZW50UHMubWFwKGFzeW5jKGtleXdvcmRQYXltZW50UCk9Pntcbi8vXG4vL1xuY29uc3RbX2tleXdvcmQscGF5bWVudF09YXdhaXQga2V5d29yZFBheW1lbnRQO1xuXG4vL1xuY29uc3QgcHVyc2U9cGF5bWVudFRvUHVyc2UuZ2V0KHBheW1lbnQpO1xuaWYocHVyc2U9PT11bmRlZmluZWQpe1xuLy9cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuXG4vL1xudHJ5e1xucmV0dXJuIGFkZFBheW1lbnQocGF5bWVudCxwdXJzZSk7XG4gfWZpbmFsbHl7XG4vL1xucGF5bWVudFRvUHVyc2UuZGVsZXRlKHBheW1lbnQpO1xuIH1cbiB9KSk7XG5cblxuLy9cbi8vXG5jb25zdCB3aXRoZHJhd0FsbFBheW1lbnRzPVByb21pc2UuYWxsKGtleXdvcmRQYXltZW50UHMpO1xud2l0aGRyYXdBbGxQYXltZW50cy5jYXRjaCh0cnlSZWNsYWltaW5nV2l0aGRyYXduUGF5bWVudHMpO1xuXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbmNvbnN0IHBheW1lbnRLZXl3b3Jkcz1hd2FpdCB3aXRoZHJhd0FsbFBheW1lbnRzO1xuXG5jb25zdCBwYXltZW50S2V5d29yZFJlY29yZD1oYXJkZW4oT2JqZWN0LmZyb21FbnRyaWVzKHBheW1lbnRLZXl3b3JkcykpO1xuXG5jb25zdCBzZWF0PUUoem9lKS5vZmZlcihcbmludml0ZVAsXG5oYXJkZW4ocHJvcG9zYWwpLFxucGF5bWVudEtleXdvcmRSZWNvcmQsXG5hcmdzKTtcblxuLy9cbi8vXG52b2lkIHNlYXQuZmluYWxseSh0cnlSZWNsYWltaW5nV2l0aGRyYXduUGF5bWVudHMpO1xuXG4vL1xuLy9cbmNvbnN0IGRlcG9zaXRlZFA9RShzZWF0KS5cbmdldFBheW91dHMoKS5cbnRoZW4oKHBheW91dE9iaik9PntcbnJldHVybiBQcm9taXNlLmFsbChcbk9iamVjdC5lbnRyaWVzKHBheW91dE9iaikubWFwKChba2V5d29yZCxwYXlvdXRQXSk9Pntcbi8vXG4vL1xuY29uc3QgcHVyc2VPclVuZGVmaW5lZD1wdXJzZUtleXdvcmRSZWNvcmRba2V5d29yZF07XG5cbnJldHVybiBhZGRQYXltZW50KHBheW91dFAscHVyc2VPclVuZGVmaW5lZCk7XG4gfSkpO1xuXG4gfSk7XG5cbi8vXG4vL1xuLy9cbnZvaWQgZGVwb3NpdGVkUC5maW5hbGx5KHRyeVJlY2xhaW1pbmdXaXRoZHJhd25QYXltZW50cyk7XG5cbi8vXG4vL1xucmV0dXJue2RlcG9zaXRlZFAsc2VhdH07XG4gfVxuXG4vL1xuXG5jb25zdCBhZGRJc3N1ZXI9YXN5bmMocGV0bmFtZUZvckJyYW5kLGlzc3VlclAsbWFrZVB1cnNlPWZhbHNlKT0+e1xuY29uc3QgaXNzdWVyPWF3YWl0IGlzc3VlclA7XG5jb25zdCByZWNQPWJyYW5kVGFibGUuaGFzQnlJc3N1ZXIoaXNzdWVyKT9cbmJyYW5kVGFibGUuZ2V0QnlJc3N1ZXIoaXNzdWVyKTpcbmJyYW5kVGFibGUuaW5pdElzc3Vlcihpc3N1ZXIsYWRkTWV0YSk7XG5jb25zdHticmFuZH09YXdhaXQgcmVjUDtcbmF3YWl0IGluaXRJc3N1ZXJUb0JvYXJkSWQoaXNzdWVyLGJyYW5kKTtcbmNvbnN0IGFkZEJyYW5kUGV0bmFtZT0oKT0+e1xubGV0IHA7XG5jb25zdCBhbHJlYWR5PWJyYW5kTWFwcGluZy52YWxUb1BldG5hbWUuaGFzKGJyYW5kKTtcbnBldG5hbWVGb3JCcmFuZD1icmFuZE1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZUZvckJyYW5kLGJyYW5kKTtcbmlmKCFhbHJlYWR5JiZtYWtlUHVyc2Upe1xucD1tYWtlRW1wdHlQdXJzZShwZXRuYW1lRm9yQnJhbmQscGV0bmFtZUZvckJyYW5kLHRydWUpO1xuIH1lbHNle1xucD1Qcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiB9XG5yZXR1cm4gRS53aGVuKHAsKF8pPT5wZXRuYW1lRm9yQnJhbmQpO1xuIH07XG5yZXR1cm4gYWRkQnJhbmRQZXRuYW1lKCkudGhlbihhc3luYyhicmFuZE5hbWUpPT57XG5hd2FpdCB1cGRhdGVBbGxJc3N1ZXJzU3RhdGUoKTtcbnJldHVybiBicmFuZE5hbWU7XG4gfSk7XG4gfTtcblxuY29uc3QgcHVibGlzaElzc3Vlcj1hc3luYyhicmFuZCk9PntcbmNvbnN0e2lzc3Vlcn09YnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcbmNvbnN0IGlzc3VlckJvYXJkSWQ9YXdhaXQgaW5pdElzc3VlclRvQm9hcmRJZChpc3N1ZXIsYnJhbmQpO1xudXBkYXRlQWxsSXNzdWVyc1N0YXRlKCk7XG5yZXR1cm4gaXNzdWVyQm9hcmRJZDtcbiB9O1xuXG5jb25zdHt1cGRhdGVyOmNvbnRhY3RzVXBkYXRlcixub3RpZmllcjpjb250YWN0c05vdGlmaWVyfT1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5tYWtlTm90aWZpZXJLaXQoW10pO1xuXG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgYWRkQ29udGFjdD1hc3luYyhwZXRuYW1lLGFjdGlvbnMsYWRkcmVzcz11bmRlZmluZWQpPT57XG4vL1xuY29uc3QgYWxyZWFkeT1hd2FpdCBFKGJvYXJkKS5oYXMoYWN0aW9ucyk7XG4vKiAgICAgICAgICAgICAgKi9cbmxldCBkZXBvc2l0RmFjZXQ7XG5pZihhbHJlYWR5KXtcbmRlcG9zaXRGYWNldD1hY3Rpb25zO1xuIH1lbHNle1xuZGVwb3NpdEZhY2V0PUZhcihXYWxsZXROYW1lLmRlcG9zaXRGYWNldCx7XG5yZWNlaXZlKHBheW1lbnRQKXtcbnJldHVybiBFKGFjdGlvbnMpLnJlY2VpdmUocGF5bWVudFApO1xuIH19KTtcblxuIH1cbmNvbnN0IGRlcG9zaXRCb2FyZElkPWF3YWl0IEUoYm9hcmQpLmdldElkKGRlcG9zaXRGYWNldCk7XG5jb25zdCBmb3VuZD1bLi4uY29udGFjdE1hcHBpbmcucGV0bmFtZVRvVmFsLmVudHJpZXMoKV0uZmluZChcbihbX3BuLHtkZXBvc2l0Qm9hcmRJZDpkYmlkfV0pPT5kZXBvc2l0Qm9hcmRJZD09PWRiaWQpO1xuXG4hZm91bmR8fFxuRmFpbCBgJHtxKGZvdW5kJiZmb3VuZFswXSl9IGlzIGFscmVhZHkgdGhlIHBldG5hbWUgZm9yIGJvYXJkIElEICR7cShcbmRlcG9zaXRCb2FyZElkKVxuIH1gO1xuXG5jb25zdCBjb250YWN0PWhhcmRlbihcbmFkZE1ldGEoe1xuYWN0aW9ucyxcbmFkZHJlc3MsXG5kZXBvc2l0Qm9hcmRJZH0pKTtcblxuXG5cbmNvbnRhY3RNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKHBldG5hbWUsY29udGFjdCk7XG5jb250YWN0c1VwZGF0ZXIudXBkYXRlU3RhdGUoWy4uLmNvbnRhY3RNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCldKTtcbnJldHVybiBjb250YWN0O1xuIH07XG5cbmNvbnN0IGFkZEluc3RhbmNlPShwZXRuYW1lLGluc3RhbmNlSGFuZGxlKT0+e1xuLy9cbi8vXG4vL1xucGV0bmFtZT1pbnN0YW5jZU1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZSxpbnN0YW5jZUhhbmRsZSk7XG4vL1xudm9pZCB1cGRhdGVBbGxTdGF0ZSgpO1xucmV0dXJuIGBpbnN0YW5jZSAke3EocGV0bmFtZSl9IHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB3YWxsZXRgO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBpbnRlcm5hbFVuc2FmZUltcG9ydFB1cnNlPWFzeW5jKFxuYnJhbmRQZXRuYW1lLFxucGV0bmFtZUZvclB1cnNlLFxuZGVmYXVsdEF1dG9EZXBvc2l0LFxucHVyc2VUb0ltcG9ydCk9Plxue1xuY29uc3QgYnJhbmQ9YnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQoYnJhbmRQZXRuYW1lKTtcbmNvbnN0e2lzc3Vlcn09YnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcblxuLyogICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1cnNlPWF3YWl0KHB1cnNlVG9JbXBvcnR8fEUoaXNzdWVyKS5tYWtlRW1wdHlQdXJzZSgpKTtcblxucHVyc2VUb0JyYW5kLmluaXQocHVyc2UsYnJhbmQpO1xucGV0bmFtZUZvclB1cnNlPXB1cnNlTWFwcGluZy5zdWdnZXN0UGV0bmFtZShwZXRuYW1lRm9yUHVyc2UscHVyc2UpO1xuXG5pZihkZWZhdWx0QXV0b0RlcG9zaXQmJiFicmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5oYXMoYnJhbmQpKXtcbi8vXG4vL1xuYXdhaXQgZG9FbmFibGVBdXRvRGVwb3NpdChwZXRuYW1lRm9yUHVyc2UsZmFsc2UpO1xuIH1cblxuYXdhaXQgdXBkYXRlUHVyc2VzU3RhdGUocGV0bmFtZUZvclB1cnNlLHB1cnNlKTtcblxuLy9cbnZvaWQgb2JzZXJ2ZU5vdGlmaWVyKEUocHVyc2UpLmdldEN1cnJlbnRBbW91bnROb3RpZmllcigpLHtcbnVwZGF0ZVN0YXRlKF9iYWxhbmNlKXtcbnVwZGF0ZVB1cnNlc1N0YXRlKHB1cnNlTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KHB1cnNlKSxwdXJzZSkuY2F0Y2goXG4oZSk9PmNvbnNvbGUuZXJyb3IoJ2Nhbm5vdCB1cGRhdGVTdGF0ZScsZSkpO1xuXG4gfSxcbmZhaWwocmVhc29uKXtcbmNvbnNvbGUuZXJyb3IoIGBmYWlsZWQgdXBkYXRlU3RhdGUgb2JzZXJ2ZXJgLHJlYXNvbik7XG4gfX0pO1xuXG5cbnJldHVybiBwZXRuYW1lRm9yUHVyc2U7XG4gfTtcblxuLy9cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZUVtcHR5UHVyc2U9KFxuYnJhbmRQZXRuYW1lLFxucGV0bmFtZUZvclB1cnNlLFxuZGVmYXVsdEF1dG9EZXBvc2l0PXRydWUpPT5cblxuaW50ZXJuYWxVbnNhZmVJbXBvcnRQdXJzZShcbmJyYW5kUGV0bmFtZSxcbnBldG5hbWVGb3JQdXJzZSxcbmRlZmF1bHRBdXRvRGVwb3NpdCxcbnVuZGVmaW5lZCk7XG5cblxuLypcblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gZGVwb3NpdChwdXJzZVBldG5hbWUscGF5bWVudCl7XG5jb25zdCBwdXJzZT1wdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldChwdXJzZVBldG5hbWUpO1xucmV0dXJuIEUocHVyc2UpLmRlcG9zaXQocGF5bWVudCk7XG4gfVxuXG5mdW5jdGlvbiBnZXRQdXJzZXMoKXtcbnJldHVyblsuLi5wdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmVudHJpZXMoKV07XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmZ1bmN0aW9uIGdldFB1cnNlKHB1cnNlUGV0bmFtZSl7XG5yZXR1cm4gcHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocHVyc2VQZXRuYW1lKTtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnVuY3Rpb24gZ2V0UHVyc2VJc3N1ZXIocHVyc2VQZXRuYW1lKXtcbmNvbnN0IHB1cnNlPXB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHB1cnNlUGV0bmFtZSk7XG5jb25zdCBicmFuZD1wdXJzZVRvQnJhbmQuZ2V0KHB1cnNlKTtcbmNvbnN0e2lzc3Vlcn09YnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcbnJldHVybiBpc3N1ZXI7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnVuY3Rpb24gZ2V0T2ZmZXJzKHtvcmlnaW49bnVsbH09e30pe1xuLy9cbnJldHVyblsuLi5pZFRvT2ZmZXIuZW50cmllcygpXS5cbmZpbHRlcihcbihbX2lkLG9mZmVyXSk9Plxub3JpZ2luPT09bnVsbHx8XG5vZmZlci5yZXF1ZXN0Q29udGV4dCYmb2ZmZXIucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbj09PW9yaWdpbikuXG5cbnNvcnQoKFtpZDFdLFtpZDJdKT0+Y21wKGlkMSxpZDIpKS5cbm1hcCgoW19pZCxvZmZlcl0pPT5oYXJkZW4ob2ZmZXIpKTtcbiB9XG5cbmNvbnN0IGNvbXBpbGVQcm9wb3NhbD0ocHJvcG9zYWxUZW1wbGF0ZSk9PntcbmNvbnN0e1xud2FudD1oYXJkZW4oe30pLFxuZ2l2ZT1oYXJkZW4oe30pLFxuZXhpdD17b25EZW1hbmQ6bnVsbH0sXG5hcmd1bWVudHM6YXJnc309XG5wcm9wb3NhbFRlbXBsYXRlO1xuXG5jb25zdCBwdXJzZUtleXdvcmRSZWNvcmQ9e307XG5cbmNvbnN0IGNvbXBpbGU9KGFtb3VudEtleXdvcmRSZWNvcmQpPT57XG5yZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuT2JqZWN0LmVudHJpZXMoYW1vdW50S2V5d29yZFJlY29yZCkubWFwKFxuKFtrZXl3b3JkLHtwdXJzZVBldG5hbWUsdmFsdWV9XSk9Pntcbi8vXG5pZih0eXBlb2YgdmFsdWU9PT0nbnVtYmVyJyl7XG52YWx1ZT1OYXQodmFsdWUpO1xuIH1cbmNvbnN0IHB1cnNlPWdldFB1cnNlKHB1cnNlUGV0bmFtZSk7XG5wdXJzZUtleXdvcmRSZWNvcmRba2V5d29yZF09cHVyc2U7XG5jb25zdCBicmFuZD1wdXJzZVRvQnJhbmQuZ2V0KHB1cnNlKTtcblxucmV0dXJuW2tleXdvcmQse2JyYW5kLHZhbHVlfV07XG4gfSkpO1xuXG5cbiB9O1xuXG5jb25zdCBwcm9wb3NhbD17XG53YW50OmNvbXBpbGUod2FudCksXG5naXZlOmNvbXBpbGUoZ2l2ZSksXG5leGl0fTtcblxuXG5yZXR1cm57cHJvcG9zYWwsYXJndW1lbnRzOmFyZ3MscHVyc2VLZXl3b3JkUmVjb3JkfTtcbiB9O1xuXG5jb25zdCBjb21waWxlT2ZmZXI9YXN5bmMob2ZmZXIpPT57XG5jb25zdHtcbnByb3Bvc2FsLFxucHVyc2VLZXl3b3JkUmVjb3JkLFxuYXJndW1lbnRzOmFyZ3N9PVxuY29tcGlsZVByb3Bvc2FsKG9mZmVyLnByb3Bvc2FsVGVtcGxhdGUpO1xuXG5jb25zdCB6b2VJc3N1ZXI9aXNzdWVyTWFuYWdlci5nZXQoWk9FX0lOVklURV9CUkFORF9QRVROQU1FKTtcbmNvbnN0e2JyYW5kOmludml0YXRpb25CcmFuZH09YnJhbmRUYWJsZS5nZXRCeUlzc3Vlcih6b2VJc3N1ZXIpO1xuY29uc3QgaW52aXRhdGlvblA9ZmluZE9yTWFrZUludml0YXRpb24oXG5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LFxuYm9hcmQsXG56b2UsXG56b2VJbnZpdGVQdXJzZSxcbmludml0YXRpb25CcmFuZCxcbm9mZmVyKTtcblxuXG5jb25zdCBpbnZpdGF0aW9uRGV0YWlscz1hd2FpdCBFKHpvZSkuZ2V0SW52aXRhdGlvbkRldGFpbHMoaW52aXRhdGlvblApO1xuY29uc3R7aW5zdGFsbGF0aW9uLGluc3RhbmNlfT1pbnZpdGF0aW9uRGV0YWlscztcblxuY29uc3QgY29tcGlsZWQ9e1xuYXJndW1lbnRzOmFyZ3MsXG5wcm9wb3NhbCxcbmludml0ZVA6aW52aXRhdGlvblAsXG5wdXJzZUtleXdvcmRSZWNvcmQsXG5pbnZpdGF0aW9uRGV0YWlscyxcbmluc3RhbGxhdGlvbixcbmluc3RhbmNlfTtcblxucmV0dXJuIGNvbXBpbGVkO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRhcHBPcmlnaW5zPW1ha2VTY2FsYXJNYXBTdG9yZSgnZGFwcE9yaWdpbicpO1xuY29uc3R7bm90aWZpZXI6ZGFwcHNOb3RpZmllcix1cGRhdGVyOmRhcHBzVXBkYXRlcn09XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZU5vdGlmaWVyS2l0KFtdKTtcblxuY29uc3QgdXBkYXRlRGFwcD0oZGFwcFJlY29yZCk9PntcbmhhcmRlbihhZGRNZXRhKGRhcHBSZWNvcmQpKTtcbmRhcHBPcmlnaW5zLnNldChkYXBwUmVjb3JkLm9yaWdpbixkYXBwUmVjb3JkKTtcbmRhcHBzVXBkYXRlci51cGRhdGVTdGF0ZShbLi4uZGFwcE9yaWdpbnMudmFsdWVzKCldKTtcbiB9O1xuXG5jb25zdCBkZWxldGVEYXBwPSh7b3JpZ2lufSk9PntcbmRhcHBPcmlnaW5zLmRlbGV0ZShvcmlnaW4pO1xuZGFwcHNVcGRhdGVyLnVwZGF0ZVN0YXRlKFsuLi5kYXBwT3JpZ2lucy52YWx1ZXMoKV0pO1xuIH07XG5cbmNvbnN0IHNoYXJlZENhY2hlQ29vcmRpbmF0b3I9bWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3IoXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmUoIGBzaGFyZWQgY2FjaGVgKSk7XG5cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckRhcHBBcHByb3ZhbChcbnN1Z2dlc3RlZFBldG5hbWUsXG5vcmlnaW4sXG5ub3RZZXRFbmFibGVkPSgpPT57IH0pXG57XG5sZXQgZGFwcFJlY29yZDtcbmlmKGRhcHBPcmlnaW5zLmhhcyhvcmlnaW4pKXtcbmRhcHBSZWNvcmQ9ZGFwcE9yaWdpbnMuZ2V0KG9yaWdpbik7XG4gfWVsc2V7XG5sZXQgcmVzb2x2ZTtcbmxldCByZWplY3Q7XG5sZXQgYXBwcm92YWxQO1xuXG5jb25zdCBjYWNoZUNvb3JkaW5hdG9yPW1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yKFxubWFrZVNjYWxhckJpZ01hcFN0b3JlKCBgb3JpZ2luICR7b3JpZ2lufSBjYWNoZWApKTtcblxuZGFwcFJlY29yZD1hZGRNZXRhKHtcbnN1Z2dlc3RlZFBldG5hbWUsXG5wZXRuYW1lOnN1Z2dlc3RlZFBldG5hbWUsXG5vcmlnaW4sXG5jYWNoZUNvb3JkaW5hdG9yLFxuYXBwcm92YWxQLFxuZW5hYmxlOmZhbHNlLFxuYWN0aW9uczpGYXIoJ2RhcHAuYWN0aW9ucycse1xuc2V0UGV0bmFtZShwZXRuYW1lKXtcbmlmKGRhcHBSZWNvcmQucGV0bmFtZT09PXBldG5hbWUpe1xucmV0dXJuIGRhcHBSZWNvcmQuYWN0aW9ucztcbiB9XG5pZihlZGdlTWFwcGluZy52YWxUb1BldG5hbWUuaGFzKG9yaWdpbikpe1xuZWRnZU1hcHBpbmcucmVuYW1lUGV0bmFtZShwZXRuYW1lLG9yaWdpbik7XG4gfWVsc2V7XG5wZXRuYW1lPWVkZ2VNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKHBldG5hbWUsb3JpZ2luKTtcbiB9XG5kYXBwUmVjb3JkPWFkZE1ldGEoe1xuLi4uZGFwcFJlY29yZCxcbnBldG5hbWV9KTtcblxudXBkYXRlRGFwcChkYXBwUmVjb3JkKTtcbnZvaWQgdXBkYXRlQWxsU3RhdGUoKTtcbnJldHVybiBkYXBwUmVjb3JkLmFjdGlvbnM7XG4gfSxcbmVuYWJsZSgpe1xuLy9cbmRhcHBSZWNvcmQ9YWRkTWV0YSh7XG4uLi5kYXBwUmVjb3JkLFxuZW5hYmxlOnRydWV9KTtcblxuZWRnZU1hcHBpbmcuc3VnZ2VzdFBldG5hbWUoZGFwcFJlY29yZC5wZXRuYW1lLG9yaWdpbik7XG51cGRhdGVEYXBwKGRhcHBSZWNvcmQpO1xuXG4vL1xucmVzb2x2ZSgpO1xucmV0dXJuIGRhcHBSZWNvcmQuYWN0aW9ucztcbiB9LFxuZGlzYWJsZShyZWFzb249dW5kZWZpbmVkKXtcbi8vXG5pZihyZWplY3Qpe1xucmVqZWN0KHJlYXNvbik7XG4gfVxuLy9cbih7cmVzb2x2ZSxyZWplY3QscHJvbWlzZTphcHByb3ZhbFB9PW1ha2VQcm9taXNlS2l0KCkpO1xuZGFwcFJlY29yZD1hZGRNZXRhKHtcbi4uLmRhcHBSZWNvcmQsXG5lbmFibGU6ZmFsc2UsXG5hcHByb3ZhbFB9KTtcblxudXBkYXRlRGFwcChkYXBwUmVjb3JkKTtcbnJldHVybiBkYXBwUmVjb3JkLmFjdGlvbnM7XG4gfSxcbmRlbGV0ZSgpe1xuaWYocmVqZWN0KXtcbnJlamVjdCgnRGFwcCBkZWxldGVkJyk7XG4gfVxuZGVsZXRlRGFwcChkYXBwUmVjb3JkKTtcbiB9fSl9KTtcblxuXG5cbi8vXG5kYXBwT3JpZ2lucy5pbml0KG9yaWdpbixkYXBwUmVjb3JkKTtcblxuLy9cbmRhcHBSZWNvcmQuYWN0aW9ucy5kaXNhYmxlKCk7XG4gfVxuXG5pZighZGFwcFJlY29yZC5lbmFibGUpe1xubm90WWV0RW5hYmxlZCgpO1xuIH1cbmF3YWl0IGRhcHBSZWNvcmQuYXBwcm92YWxQO1xuLy9cbi8vXG5yZXR1cm4gZGFwcE9yaWdpbnMuZ2V0KG9yaWdpbik7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBhZGRPZmZlcihyYXdPZmZlcixyZXF1ZXN0Q29udGV4dD17fSl7XG5jb25zdCBkYXBwT3JpZ2luPVxucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbnx8cmVxdWVzdENvbnRleHQub3JpZ2lufHwndW5rbm93bic7XG5jb25zdHtpZDpyYXdJZH09cmF3T2ZmZXI7XG5jb25zdCBpZD1tYWtlSWQoZGFwcE9yaWdpbixyYXdJZCk7XG5jb25zdCBvZmZlcj1oYXJkZW4oXG5hZGRNZXRhKHtcbi4uLnJhd09mZmVyLFxucmF3SWQsXG5pZCxcbnJlcXVlc3RDb250ZXh0OnsuLi5yZXF1ZXN0Q29udGV4dCxkYXBwT3JpZ2lufSxcbnN0YXR1czp1bmRlZmluZWR9KSk7XG5cblxuaWRUb09mZmVyLmluaXQoaWQsb2ZmZXIpO1xuaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5pbml0KGlkLG1ha2VQcm9taXNlS2l0KCkpO1xuYXdhaXQgdXBkYXRlSW5ib3hTdGF0ZShpZCxvZmZlcik7XG5cbi8vXG5jb25zdCBjb21waWxlZE9mZmVyUD1jb21waWxlT2ZmZXIob2ZmZXIpO1xuaWRUb0NvbXBpbGVkT2ZmZXJQLnNldChpZCxjb21waWxlZE9mZmVyUCk7XG5cbi8vXG5hd2FpdCB1cGRhdGVJbmJveFN0YXRlKGlkLGlkVG9PZmZlci5nZXQoaWQpKTtcbmNvbnN0e2luc3RhbGxhdGlvbixpbnN0YW5jZSxpbnZpdGF0aW9uRGV0YWlsc309YXdhaXQgY29tcGlsZWRPZmZlclA7XG5cbmlmKCFpZFRvT2ZmZXIuaGFzKGlkKSl7XG5yZXR1cm4gcmF3SWQ7XG4gfVxuaWRUb09mZmVyLnNldChcbmlkLFxuaGFyZGVuKFxuYWRkTWV0YSh7XG4uLi5pZFRvT2ZmZXIuZ2V0KGlkKSxcbmluc3RhbGxhdGlvbixcbmluc3RhbmNlLFxuaW52aXRhdGlvbkRldGFpbHN9KSkpO1xuXG5cblxuYXdhaXQgdXBkYXRlSW5ib3hTdGF0ZShpZCxpZFRvT2ZmZXIuZ2V0KGlkKSk7XG5yZXR1cm4gcmF3SWQ7XG4gfVxuXG5mdW5jdGlvbiBjb25zdW1tYXRlZChvZmZlcil7XG5pZihvZmZlci5zdGF0dXMhPT11bmRlZmluZWQpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYob2ZmZXIuYWN0aW9ucyl7XG5FKG9mZmVyLmFjdGlvbnMpLmhhbmRsZWQob2ZmZXIpO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGRlY2xpbmVPZmZlcihpZCl7XG5jb25zdCBvZmZlcj1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmlmKGNvbnN1bW1hdGVkKG9mZmVyKSl7XG5yZXR1cm47XG4gfVxuXG4vL1xuY29uc3QgZGVjbGluZWRPZmZlcj1hZGRNZXRhKHtcbi4uLm9mZmVyLFxuc3RhdHVzOidkZWNsaW5lJ30pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLGRlY2xpbmVkT2ZmZXIpO1xudm9pZCB1cGRhdGVJbmJveFN0YXRlKGlkLGRlY2xpbmVkT2ZmZXIpO1xuXG4vL1xuY29uc3QgY29tcGlsZWRPZmZlclA9aWRUb0NvbXBpbGVkT2ZmZXJQLmdldChpZCk7XG5pZighY29tcGlsZWRPZmZlclApe1xucmV0dXJuO1xuIH1cblxuYXdhaXQgYWRkUGF5bWVudChFLmdldChjb21waWxlZE9mZmVyUCkuaW52aXRlUCkuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBjYW5jZWxPZmZlcihpZCl7XG5jb25zdCBjb21wbGV0ZUZuPWlkVG9Db21wbGV0ZS5nZXQoaWQpO1xuaWYoIWNvbXBsZXRlRm4pe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuY29tcGxldGVGbigpLlxudGhlbigoXyk9PntcbmlkVG9Db21wbGV0ZS5kZWxldGUoaWQpO1xuY29uc3Qgb2ZmZXI9aWRUb09mZmVyLmdldChpZCk7XG5jb25zdCBjYW5jZWxsZWRPZmZlcj1hZGRNZXRhKHtcbi4uLm9mZmVyLFxuc3RhdHVzOidjYW5jZWwnfSk7XG5cbmlkVG9PZmZlci5zZXQoaWQsY2FuY2VsbGVkT2ZmZXIpO1xucmV0dXJuIHVwZGF0ZUluYm94U3RhdGUoaWQsY2FuY2VsbGVkT2ZmZXIpO1xuIH0pLlxuY2F0Y2goKGUpPT5jb25zb2xlLmVycm9yKCBgQ2Fubm90IGNhbmNlbCBvZmZlciAke2lkfTpgLGUpKTtcblxucmV0dXJuIHRydWU7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBhY2NlcHRPZmZlcihpZCl7XG5jb25zdCBvZmZlcj1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmlmKGNvbnN1bW1hdGVkKG9mZmVyKSl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZXQ9e307XG5sZXQgYWxyZWFkeVJlc29sdmVkPWZhbHNlO1xuY29uc3QgcmVqZWN0ZWQ9KGUpPT57XG5pZihhbHJlYWR5UmVzb2x2ZWQpe1xucmV0dXJuO1xuIH1cbmNvbnN0IHJlamVjdE9mZmVyPWFkZE1ldGEoe1xuLi4ub2ZmZXIsXG5zdGF0dXM6J3JlamVjdGVkJyxcbmVycm9yOiBgJHtlfWB9KTtcblxuaWRUb09mZmVyLnNldChpZCxyZWplY3RPZmZlcik7XG52b2lkIHVwZGF0ZUluYm94U3RhdGUoaWQscmVqZWN0T2ZmZXIpO1xuIH07XG5cbmF3YWl0IG51bGw7XG50cnl7XG5jb25zdCBwZW5kaW5nT2ZmZXI9YWRkTWV0YSh7XG4uLi5vZmZlcixcbnN0YXR1czoncGVuZGluZyd9KTtcblxuaWRUb09mZmVyLnNldChpZCxwZW5kaW5nT2ZmZXIpO1xudm9pZCB1cGRhdGVJbmJveFN0YXRlKGlkLHBlbmRpbmdPZmZlcik7XG5jb25zdCBjb21waWxlZE9mZmVyPWF3YWl0IGlkVG9Db21waWxlZE9mZmVyUC5nZXQoaWQpO1xuXG5jb25zdHtkZXBvc2l0ZWRQLHNlYXR9PWF3YWl0IGV4ZWN1dGVPZmZlcihjb21waWxlZE9mZmVyKTtcblxuaWRUb0NvbXBsZXRlLnNldChpZCwoKT0+e1xuYWxyZWFkeVJlc29sdmVkPXRydWU7XG5yZXR1cm4gRShzZWF0KS50cnlFeGl0KCk7XG4gfSk7XG5pZFRvU2VhdC5zZXQoaWQsc2VhdCk7XG4vL1xuLy9cbnZvaWQgRShzZWF0KS5cbmhhc0V4aXRlZCgpLlxudGhlbigoZXhpdGVkKT0+e1xuaWYoIWV4aXRlZCl7XG5yZXR1cm4gc3Vic2NyaWJlVG9VcGRhdGVzKGlkLHNlYXQpO1xuIH1cbiB9KTtcblxuY29uc3Qgb2ZmZXJSZXN1bHRQPUUoc2VhdCkuZ2V0T2ZmZXJSZXN1bHQoKTtcbmlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQuZ2V0KGlkKS5yZXNvbHZlKG9mZmVyUmVzdWx0UCk7XG5cbnJldD17XG5kZXBvc2l0ZWRQLFxuZGFwcENvbnRleHQ6b2ZmZXIuZGFwcENvbnRleHR9O1xuXG5cbi8vXG5kZXBvc2l0ZWRQLlxudGhlbigoXyk9Pntcbi8vXG5pZighYWxyZWFkeVJlc29sdmVkKXtcbmFscmVhZHlSZXNvbHZlZD10cnVlO1xuY29uc3QgYWNjZXB0ZWRPZmZlcj1hZGRNZXRhKHtcbi4uLnBlbmRpbmdPZmZlcixcbnN0YXR1czonYWNjZXB0J30pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLGFjY2VwdGVkT2ZmZXIpO1xudm9pZCB1cGRhdGVJbmJveFN0YXRlKGlkLGFjY2VwdGVkT2ZmZXIpO1xuIH1cbiB9KS5cbmNhdGNoKHJlamVjdGVkKTtcbiB9Y2F0Y2goZSl7XG5pZihvZmZlci5hY3Rpb25zKXtcbkUob2ZmZXIuYWN0aW9ucykuZXJyb3Iob2ZmZXIsZSk7XG4gfVxucmVqZWN0ZWQoZSk7XG50aHJvdyBlO1xuIH1cbnJldHVybiByZXQ7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpZFRvUGF5bWVudFJlY29yZD1tYWtlU2NhbGFyTWFwU3RvcmUoJ3BheW1lbnRJZCcpO1xuY29uc3R7dXBkYXRlcjpwYXltZW50c1VwZGF0ZXIsbm90aWZpZXI6cGF5bWVudHNOb3RpZmllcn09XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZU5vdGlmaWVyS2l0KFtdKTtcbi8qXG5cbiAgICovXG5jb25zdCB1cGRhdGVQYXltZW50UmVjb3JkPSh7YWN0aW9ucywuLi5wcmVEaXNwbGF5fSk9Pntcbi8vXG4vL1xuZGVsZXRlIHByZURpc3BsYXkuZGlzcGxheVBheW1lbnQ7XG5jb25zdCBkaXNwbGF5UGF5bWVudD1maWxsSW5TbG90cyhkZWh5ZHJhdGUoaGFyZGVuKHByZURpc3BsYXkpKSk7XG5jb25zdCBwYXltZW50UmVjb3JkPWFkZE1ldGEoe1xuLi4ucHJlRGlzcGxheSxcbmFjdGlvbnMsXG5kaXNwbGF5UGF5bWVudH0pO1xuXG5jb25zdHtpZH09cGF5bWVudFJlY29yZC5tZXRhO1xuaWRUb1BheW1lbnRSZWNvcmQuc2V0KGlkLGhhcmRlbihwYXltZW50UmVjb3JkKSk7XG5wYXltZW50c1VwZGF0ZXIudXBkYXRlU3RhdGUoW3BheW1lbnRSZWNvcmRdKTtcbiB9O1xuXG5jb25zdCBtYWtlUGF5bWVudEFjdGlvbnNGb3JJZD0oaWQpPT5cbm1ha2VQYXltZW50QWN0aW9ucyh7XG5nZXRSZWNvcmQ6KCk9PmlkVG9QYXltZW50UmVjb3JkLmdldChpZCksXG51cGRhdGVSZWNvcmQ6KHJlY29yZCx3aXRob3V0TWV0YT17fSk9Pntcbi8vXG4vL1xudXBkYXRlUGF5bWVudFJlY29yZCh7Li4ud2l0aG91dE1ldGEsLi4uYWRkTWV0YShyZWNvcmQpfSk7XG4gfSxcbmdldEJyYW5kUmVjb3JkOihicmFuZCk9PlxuYnJhbmRUYWJsZS5oYXNCeUJyYW5kKGJyYW5kKSYmYnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKSxcbmdldFB1cnNlQnlQZXRuYW1lOihwZXRuYW1lKT0+cHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSksXG5nZXRBdXRvRGVwb3NpdFB1cnNlOihiKT0+XG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5oYXMoYik/XG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5nZXQoYik6XG51bmRlZmluZWQsXG5nZXRJc3N1ZXJCb2FyZElkOmlzc3VlclRvQm9hcmRJZC5nZXR9KTtcblxuXG4vKlxuXG5cbiAgICovXG5jb25zdCBhZGRQYXltZW50PWFzeW5jKHBheW1lbnRQLGRlcG9zaXRUbz11bmRlZmluZWQpPT57XG4vL1xuY29uc3RbcGF5bWVudCxicmFuZF09YXdhaXQgUHJvbWlzZS5hbGwoW1xucGF5bWVudFAsXG5FKHBheW1lbnRQKS5nZXRBbGxlZ2VkQnJhbmQoKV0pO1xuXG5cbmNvbnN0IGJhc2VQYXltZW50UmVjb3JkPWFkZE1ldGEoe1xucGF5bWVudCxcbmJyYW5kfSk7XG5cbmNvbnN0e2lkfT1iYXNlUGF5bWVudFJlY29yZC5tZXRhO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwYXltZW50UmVjb3JkPXtcbi4uLmJhc2VQYXltZW50UmVjb3JkLFxuYWN0aW9uczptYWtlUGF5bWVudEFjdGlvbnNGb3JJZChpZCl9O1xuXG5pZFRvUGF5bWVudFJlY29yZC5pbml0KGlkLGhhcmRlbihwYXltZW50UmVjb3JkKSk7XG5cbmNvbnN0IHJlZnJlc2hlZD1hd2FpdCBwYXltZW50UmVjb3JkLmFjdGlvbnMucmVmcmVzaCgpO1xuaWYoIXJlZnJlc2hlZCl7XG4vL1xudXBkYXRlUGF5bWVudFJlY29yZChwYXltZW50UmVjb3JkKTtcbiB9XG5cbi8vXG5hd2FpdCBwYXltZW50UmVjb3JkLmFjdGlvbnMuZGVwb3NpdChkZXBvc2l0VG8pO1xuIH07XG5cbmxldCBzZWxmQ29udGFjdFA7XG5hc3luYyBmdW5jdGlvbiBnZXREZXBvc2l0RmFjZXRJZChfYnJhbmRCb2FyZElkKXtcbi8vXG5yZXR1cm4gRS5nZXQoc2VsZkNvbnRhY3RQKS5kZXBvc2l0Qm9hcmRJZDtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc2FibGVBdXRvRGVwb3NpdChwdXJzZVBldG5hbWUpe1xuY29uc3QgcHVyc2U9cHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocHVyc2VQZXRuYW1lKTtcbmNvbnN0IGJyYW5kPXB1cnNlVG9CcmFuZC5nZXQocHVyc2UpO1xuaWYoXG4hYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaGFzKGJyYW5kKXx8XG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5nZXQoYnJhbmQpIT09cHVyc2UpXG57XG5yZXR1cm47XG4gfVxuXG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5kZWxldGUoYnJhbmQpO1xuYXdhaXQgdXBkYXRlQWxsUHVyc2VTdGF0ZSgpO1xuIH1cblxuY29uc3QgcGVuZGluZ0VuYWJsZUF1dG9EZXBvc2l0cz1tYWtlU2NhbGFyTWFwU3RvcmUoJ2JyYW5kJyk7XG5hc3luYyBmdW5jdGlvbiBkb0VuYWJsZUF1dG9EZXBvc2l0KHB1cnNlUGV0bmFtZSx1cGRhdGVTdGF0ZSl7XG5jb25zdCBwdXJzZT1wdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldChwdXJzZVBldG5hbWUpO1xuY29uc3QgYnJhbmQ9cHVyc2VUb0JyYW5kLmdldChwdXJzZSk7XG5pZihicmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5oYXMoYnJhbmQpKXtcbmJyYW5kVG9BdXRvRGVwb3NpdFB1cnNlLnNldChicmFuZCxwdXJzZSk7XG4gfWVsc2V7XG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5pbml0KGJyYW5kLHB1cnNlKTtcbiB9XG5cbmF3YWl0IG51bGw7XG5pZih1cGRhdGVTdGF0ZSl7XG5hd2FpdCB1cGRhdGVBbGxQdXJzZVN0YXRlKCk7XG4gfVxuXG5jb25zdCBwZW5kaW5nUD1cbnBlbmRpbmdFbmFibGVBdXRvRGVwb3NpdHMuaGFzKGJyYW5kKSYmXG5wZW5kaW5nRW5hYmxlQXV0b0RlcG9zaXRzLmdldChicmFuZCk7XG5pZihwZW5kaW5nUCl7XG5yZXR1cm4gcGVuZGluZ1A7XG4gfVxuXG5jb25zdCBib2FyZElkUD1FLmdldChzZWxmQ29udGFjdFApLmRlcG9zaXRCb2FyZElkO1xucGVuZGluZ0VuYWJsZUF1dG9EZXBvc2l0cy5pbml0KGJyYW5kLGJvYXJkSWRQKTtcbmNvbnN0IGJvYXJkSWQ9YXdhaXQgYm9hcmRJZFA7XG5icmFuZFRvRGVwb3NpdEZhY2V0SWQuaW5pdChicmFuZCxib2FyZElkKTtcblxuaWYodXBkYXRlU3RhdGUpe1xuYXdhaXQgdXBkYXRlQWxsUHVyc2VTdGF0ZSgpO1xuIH1cbnJldHVybiBib2FyZElkUDtcbiB9XG5cbi8qXG5cblxuXG5cbiAgICovXG5mdW5jdGlvbiBhY2NlcHRQZXRuYW1lKFxuYWNjZXB0Rm4sXG5zdWdnZXN0ZWRQZXRuYW1lLFxuYm9hcmRJZCxcbmRhcHBPcmlnaW49dW5kZWZpbmVkKVxue1xuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IHBldG5hbWU7XG5pZihkYXBwT3JpZ2luPT09dW5kZWZpbmVkKXtcbnBldG5hbWU9c3VnZ2VzdGVkUGV0bmFtZTtcbiB9ZWxzZXtcbmNvbnN0IGVkZ2VuYW1lPWVkZ2VNYXBwaW5nLnZhbFRvUGV0bmFtZS5nZXQoZGFwcE9yaWdpbik7XG4vL1xucGV0bmFtZT1bZWRnZW5hbWUsc3VnZ2VzdGVkUGV0bmFtZV07XG4gfVxuXG5yZXR1cm4gRShib2FyZCkuXG5nZXRWYWx1ZShib2FyZElkKS5cbnRoZW4oKHZhbHVlKT0+e1xuY29udGV4dC5lbnN1cmVCb2FyZElkKGJvYXJkSWQsdmFsdWUpO1xucmV0dXJuIGFjY2VwdEZuKHBldG5hbWUsdmFsdWUpO1xuIH0pO1xuIH1cblxuLypcblxuXG5cbiAgICovXG5hc3luYyBmdW5jdGlvbiBzdWdnZXN0SXNzdWVyKFxuc3VnZ2VzdGVkUGV0bmFtZSxcbmlzc3VlckJvYXJkSWQsXG5kYXBwT3JpZ2luPXVuZGVmaW5lZClcbntcbi8vXG4vL1xuLy9cbnJldHVybiBhY2NlcHRQZXRuYW1lKFxuLy9cbihwZXRuYW1lLHZhbHVlKT0+YWRkSXNzdWVyKHBldG5hbWUsdmFsdWUsdHJ1ZSksXG5zdWdnZXN0ZWRQZXRuYW1lLFxuaXNzdWVyQm9hcmRJZCxcbmRhcHBPcmlnaW4pO1xuXG4gfVxuXG4vKlxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIHN1Z2dlc3RJbnN0YW5jZShcbnN1Z2dlc3RlZFBldG5hbWUsXG5pbnN0YW5jZUhhbmRsZUJvYXJkSWQsXG5kYXBwT3JpZ2luPXVuZGVmaW5lZClcbntcbi8vXG4vL1xuLy9cblxucmV0dXJuIGFjY2VwdFBldG5hbWUoXG5hZGRJbnN0YW5jZSxcbnN1Z2dlc3RlZFBldG5hbWUsXG5pbnN0YW5jZUhhbmRsZUJvYXJkSWQsXG5kYXBwT3JpZ2luKTtcblxuIH1cblxuLypcblxuXG5cbiAgICovXG5hc3luYyBmdW5jdGlvbiBzdWdnZXN0SW5zdGFsbGF0aW9uKFxuc3VnZ2VzdGVkUGV0bmFtZSxcbmluc3RhbGxhdGlvbkhhbmRsZUJvYXJkSWQsXG5kYXBwT3JpZ2luPXVuZGVmaW5lZClcbntcbi8vXG4vL1xuLy9cbnJldHVybiBhY2NlcHRQZXRuYW1lKFxuaW5zdGFsbGF0aW9uTWFuYWdlci5hZGQsXG5zdWdnZXN0ZWRQZXRuYW1lLFxuaW5zdGFsbGF0aW9uSGFuZGxlQm9hcmRJZCxcbmRhcHBPcmlnaW4pO1xuXG4gfVxuXG5mdW5jdGlvbiBnZXRCcmFuZChwZXRuYW1lKXtcbmNvbnN0IGJyYW5kPWJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHBldG5hbWUpO1xucmV0dXJuIGJyYW5kO1xuIH1cblxuZnVuY3Rpb24gZ2V0QnJhbmRQZXRuYW1lcyhicmFuZHMpe1xucmV0dXJuIGJyYW5kcy5tYXAoYnJhbmRNYXBwaW5nLnZhbFRvUGV0bmFtZS5nZXQpO1xuIH1cblxuZnVuY3Rpb24gZ2V0U2VsZkNvbnRhY3QoKXtcbnJldHVybiBzZWxmQ29udGFjdFA7XG4gfVxuXG5jb25zdCBtYWtlTWFuYWdlcj0ocGV0bmFtZU1hcHBpbmcsbWFuYWdlclR5cGUpPT57XG5jb25zdCBtYW5hZ2VyPUZhcihtYW5hZ2VyVHlwZSx7XG5yZW5hbWU6YXN5bmMocGV0bmFtZSx0aGluZyk9PntcbnBldG5hbWVNYXBwaW5nLnJlbmFtZVBldG5hbWUocGV0bmFtZSx0aGluZyk7XG5hd2FpdCB1cGRhdGVBbGxTdGF0ZSgpO1xuIH0sXG5nZXQ6cGV0bmFtZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldCxcbmdldEFsbDpwZXRuYW1lTWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcyxcbmFkZDphc3luYyhwZXRuYW1lLHRoaW5nKT0+e1xucGV0bmFtZU1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZSx0aGluZyk7XG5hd2FpdCB1cGRhdGVBbGxTdGF0ZSgpO1xuIH19KTtcblxucmV0dXJuIG1hbmFnZXI7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5zdGFsbGF0aW9uTWFuYWdlcj1tYWtlTWFuYWdlcihcbmluc3RhbGxhdGlvbk1hcHBpbmcsXG4nSW5zdGFsbGF0aW9uTWFuYWdlcicpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5zdGFuY2VNYW5hZ2VyPW1ha2VNYW5hZ2VyKGluc3RhbmNlTWFwcGluZywnSW5zdGFuY2VNYW5hZ2VyJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3Vlck1hbmFnZXI9RmFyKCdJc3N1ZXJNYW5hZ2VyJyx7XG5yZW5hbWU6YXN5bmMocGV0bmFtZSxpc3N1ZXIpPT57XG5icmFuZFRhYmxlLmhhc0J5SXNzdWVyKGlzc3Vlcil8fFxuRmFpbCBgaXNzdWVyIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGFkZGVkYDtcbmNvbnN0IGJyYW5kUmVjb3JkPWJyYW5kVGFibGUuZ2V0QnlJc3N1ZXIoaXNzdWVyKTtcbmJyYW5kTWFwcGluZy5yZW5hbWVQZXRuYW1lKHBldG5hbWUsYnJhbmRSZWNvcmQuYnJhbmQpO1xuYXdhaXQgdXBkYXRlQWxsU3RhdGUoKTtcbiB9LFxuZ2V0OihwZXRuYW1lKT0+e1xuY29uc3QgYnJhbmQ9YnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSk7XG5yZXR1cm4gYnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKS5pc3N1ZXI7XG4gfSxcbmdldEFsbDooKT0+e1xucmV0dXJuWy4uLmJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcygpXS5tYXAoXG4oW3BldG5hbWUsYnJhbmRdKT0+e1xuY29uc3R7aXNzdWVyfT1icmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xucmV0dXJuW3BldG5hbWUsaXNzdWVyXTtcbiB9KTtcblxuIH0sXG5hZGQ6YXN5bmMocGV0bmFtZSxpc3N1ZXJQKT0+e1xuY29uc3R7YnJhbmQsaXNzdWVyfT1hd2FpdCBicmFuZFRhYmxlLmluaXRJc3N1ZXIoaXNzdWVyUCxhZGRNZXRhKTtcbmF3YWl0IGluaXRJc3N1ZXJUb0JvYXJkSWQoaXNzdWVyLGJyYW5kKTtcbmJyYW5kTWFwcGluZy5zdWdnZXN0UGV0bmFtZShwZXRuYW1lLGJyYW5kKTtcbmF3YWl0IHVwZGF0ZUFsbElzc3VlcnNTdGF0ZSgpO1xuIH19KTtcblxuXG5mdW5jdGlvbiBnZXRJbnN0YWxsYXRpb25NYW5hZ2VyKCl7XG5yZXR1cm4gaW5zdGFsbGF0aW9uTWFuYWdlcjtcbiB9XG5cbmZ1bmN0aW9uIGdldEluc3RhbmNlTWFuYWdlcigpe1xucmV0dXJuIGluc3RhbmNlTWFuYWdlcjtcbiB9XG5cbmZ1bmN0aW9uIGdldElzc3Vlck1hbmFnZXIoKXtcbnJldHVybiBpc3N1ZXJNYW5hZ2VyO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZU9mZmVyUmVzdWx0KGludml0YXRpb25IYW5kbGUsb2ZmZXJSZXN1bHQpe1xuaW52aXRhdGlvbkhhbmRsZVRvT2ZmZXJSZXN1bHQuaW5pdChpbnZpdGF0aW9uSGFuZGxlLG9mZmVyUmVzdWx0KTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE9mZmVyUmVzdWx0KGludml0YXRpb25IYW5kbGUpe1xucmV0dXJuIGludml0YXRpb25IYW5kbGVUb09mZmVyUmVzdWx0LmdldChpbnZpdGF0aW9uSGFuZGxlKTtcbiB9XG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFVJTm90aWZpZXIocmF3SWQsZGFwcE9yaWdpbj0ndW5rbm93bicpe1xuY29uc3QgaWQ9bWFrZUlkKGRhcHBPcmlnaW4scmF3SWQpO1xuY29uc3Qgb2ZmZXJSZXN1bHQ9YXdhaXQgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQoaWQpLnByb21pc2U7XG5hc3NlcnQoXG5wYXNzU3R5bGVPZihvZmZlclJlc3VsdCk9PT0nY29weVJlY29yZCcsXG4gYG9mZmVyUmVzdWx0IG11c3QgYmUgYSByZWNvcmQgdG8gaGF2ZSBhIHVpTm90aWZpZXJgKTtcblxub2ZmZXJSZXN1bHQudWlOb3RpZmllcnx8RmFpbCBgb2ZmZXJSZXN1bHQgZG9lcyBub3QgaGF2ZSBhIHVpTm90aWZpZXJgO1xucmV0dXJuIG9mZmVyUmVzdWx0LnVpTm90aWZpZXI7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFB1YmxpY1N1YnNjcmliZXJzKHJhd0lkLGRhcHBPcmlnaW49J3Vua25vd24nKXtcbmNvbnN0IGlkPW1ha2VJZChkYXBwT3JpZ2luLHJhd0lkKTtcblxuY29uc3Qgb2ZmZXJSZXN1bHQ9YXdhaXQgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQoaWQpLnByb21pc2U7XG5hc3NlcnQoXG5wYXNzU3R5bGVPZihvZmZlclJlc3VsdCk9PT0nY29weVJlY29yZCcsXG4gYG9mZmVyUmVzdWx0ICR7b2ZmZXJSZXN1bHR9IG11c3QgYmUgYSByZWNvcmQgdG8gaGF2ZSBwdWJsaWNTdWJzY3JpYmVyc2ApO1xuXG5cbmNvbnN0e3B1YmxpY1N1YnNjcmliZXJzfT1vZmZlclJlc3VsdDtcbnB1YmxpY1N1YnNjcmliZXJzfHxcbkZhaWwgYG9mZmVyUmVzdWx0ICR7b2ZmZXJSZXN1bHR9IGRvZXMgbm90IGhhdmUgcHVibGljU3Vic2NyaWJlcnNgO1xucGFzc1N0eWxlT2YocHVibGljU3Vic2NyaWJlcnMpPT09J2NvcHlSZWNvcmQnfHxcbkZhaWwgYHB1YmxpY1N1YnNjcmliZXJzICR7cHVibGljU3Vic2NyaWJlcnN9IG11c3QgYmUgYSByZWNvcmRgO1xuXG5yZXR1cm4gcHVibGljU3Vic2NyaWJlcnM7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFB1YmxpY05vdGlmaWVycyhyYXdJZCxkYXBwT3JpZ2luPSd1bmtub3duJyl7XG5jb25zdCBwdWJsaWNTdWJzY3JpYmVycz1hd2FpdCBnZXRQdWJsaWNTdWJzY3JpYmVycyhyYXdJZCxkYXBwT3JpZ2luKTtcbnJldHVybiBvYmplY3RNYXAocHVibGljU3Vic2NyaWJlcnMsbWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIpO1xuIH1cblxuLy9cbi8vXG5jb25zdCBjcmVhdGVSb290TG9va3Vwcz0oKT0+e1xuY29uc3Qgcm9vdFBhdGhUb0xvb2t1cD1tYWtlTGVnYWN5TWFwKCdsb29rdXBzJyk7XG5cbi8qXG5cblxuICAgICAqL1xuY29uc3QgbWFrZUxvb2t1cD0oa2luZCxsb29rdXApPT57XG5yb290UGF0aFRvTG9va3VwLmluaXQoXG5raW5kLFxuRmFyKCBgJHtraW5kfUxvb2t1cGAse1xubG9va3VwfSkpO1xuXG5cbiB9O1xuXG4vL1xuLy9cbmNvbnN0IHBldG5hbWVPclBhdGg9XG4obG9va3VwKT0+XG4oLi4ucGF0aCk9PntcbnRyeXtcbmlmKHBhdGgubGVuZ3RoPT09MSl7XG4vL1xucmV0dXJuIGxvb2t1cChwYXRoWzBdKTtcbiB9XG4gfWNhdGNoKGUpe1xuLy9cbiB9XG5yZXR1cm4gbG9va3VwKHBhdGgpO1xuIH07XG5cbm1ha2VMb29rdXAoJ2JyYW5kJyxwZXRuYW1lT3JQYXRoKGJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KSk7XG5tYWtlTG9va3VwKCdjb250YWN0JyxwZXRuYW1lT3JQYXRoKGNvbnRhY3RNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQpKTtcbm1ha2VMb29rdXAoJ2lzc3VlcicscGV0bmFtZU9yUGF0aChpc3N1ZXJNYW5hZ2VyLmdldCkpO1xubWFrZUxvb2t1cCgnaW5zdGFuY2UnLHBldG5hbWVPclBhdGgoaW5zdGFuY2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQpKTtcbm1ha2VMb29rdXAoXG4naW5zdGFsbGF0aW9uJyxcbnBldG5hbWVPclBhdGgoaW5zdGFsbGF0aW9uTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KSk7XG5cbm1ha2VMb29rdXAoJ3B1cnNlJyxwZXRuYW1lT3JQYXRoKHB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KSk7XG5cbi8vXG5jb25zdCBpZE9ubHk9XG4oa2luZCxsb29rdXApPT5cbiguLi5wYXRoKT0+e1xucGF0aC5sZW5ndGg9PT0xfHxcbkZhaWwgYCR7cShcbmtpbmQpXG4gfSBsb29rdXAgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHNpbmdsZSBvZmZlciBJRCwgbm90ICR7cGF0aH1gO1xucmV0dXJuIGxvb2t1cChwYXRoWzBdKTtcbiB9O1xubWFrZUxvb2t1cCgnb2ZmZXInLGlkT25seSgnb2ZmZXInLGlkVG9PZmZlci5nZXQpKTtcbm1ha2VMb29rdXAoXG4nb2ZmZXJSZXN1bHQnLFxuaWRPbmx5KCdvZmZlclJlc3VsdCcsKGlkKT0+aWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQoaWQpLnByb21pc2UpKTtcblxuXG5yZXR1cm4gcm9vdFBhdGhUb0xvb2t1cDtcbiB9O1xuXG5jb25zdCBmaXJzdFBhdGhUb0xvb2t1cD1jcmVhdGVSb290TG9va3VwcygpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hcnNoYWxsZXI9aGFyZGVuKHtcbmZyb21DYXBEYXRhOmNvbnRleHQuZnJvbUNhcERhdGEsXG50b0NhcERhdGE6Y29udGV4dC50b0NhcERhdGEsXG51bnNlcmlhbGl6ZTpjb250ZXh0LmZyb21DYXBEYXRhLFxuc2VyaWFsaXplOmNvbnRleHQudG9DYXBEYXRhfSk7XG5cblxuY29uc3QgaGFuZGxlQWNjZXB0T2ZmZXJBY3Rpb249YXN5bmMob2ZmZXIpPT57XG5jb25zdHtyZXF1ZXN0Q29udGV4dH09b2ZmZXI7XG5jb25zdCByYXdJZD1hd2FpdCBhZGRPZmZlcihvZmZlcixyZXF1ZXN0Q29udGV4dCk7XG5jb25zdCBkYXBwT3JpZ2luPVxucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbnx8cmVxdWVzdENvbnRleHQub3JpZ2lufHwndW5rbm93bic7XG5yZXR1cm4gYWNjZXB0T2ZmZXIoIGAke2RhcHBPcmlnaW59IyR7cmF3SWR9YCk7XG4gfTtcblxuY29uc3QgaGFuZGxlU3VnZ2VzdElzc3VlckFjdGlvbj0oe3BldG5hbWUsYm9hcmRJZH0pPT5cbnN1Z2dlc3RJc3N1ZXIocGV0bmFtZSxib2FyZElkKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLypcblxuXG4gICAqL1xuY29uc3QgcGVyZm9ybUFjdGlvbj0ob2JqKT0+e1xuY29uc3R7dHlwZSxkYXRhfT1KU09OLnBhcnNlKG9iai5zcGVuZEFjdGlvbik7XG5zd2l0Y2godHlwZSl7XG5jYXNlJ2FjY2VwdE9mZmVyJzpcbnJldHVybiBoYW5kbGVBY2NlcHRPZmZlckFjdGlvbihkYXRhKTtcbmNhc2Unc3VnZ2VzdElzc3Vlcic6XG5yZXR1cm4gaGFuZGxlU3VnZ2VzdElzc3VlckFjdGlvbihkYXRhKTtcbmRlZmF1bHQ6XG50aHJvdyBFcnJvciggYFVua25vd24gd2FsbGV0IGFjdGlvbiAke3R5cGV9YCk7fVxuXG4gfTtcblxuY29uc3Qgd2FsbGV0PUZhcignd2FsbGV0Jyx7XG5sb29rdXA6KC4uLnBhdGgpPT57XG4vL1xuaWYocGF0aC5sZW5ndGg9PT0wKXtcbnJldHVybiB3YWxsZXQ7XG4gfVxuY29uc3RbZmlyc3QsLi4ucmVtYWluaW5nXT1wYXRoO1xuY29uc3QgZmlyc3RWYWx1ZT1maXJzdFBhdGhUb0xvb2t1cC5nZXQoZmlyc3QpO1xuaWYocmVtYWluaW5nLmxlbmd0aD09PTApe1xucmV0dXJuIGZpcnN0VmFsdWU7XG4gfVxucmV0dXJuIEUoZmlyc3RWYWx1ZSkubG9va3VwKC4uLnJlbWFpbmluZyk7XG4gfSxcbmdldE1hcnNoYWxsZXI6KCk9Pm1hcnNoYWxsZXIsXG5nZXREYXBwQ2FjaGVDb29yZGluYXRvcjooZGFwcE9yaWdpbik9PlxuZGFwcE9yaWdpbnMuZ2V0KGRhcHBPcmlnaW4pLmNhY2hlQ29vcmRpbmF0b3IsXG5nZXRDYWNoZUNvb3JkaW5hdG9yOigpPT5zaGFyZWRDYWNoZUNvb3JkaW5hdG9yLFxuc2F2ZU9mZmVyUmVzdWx0LFxuZ2V0T2ZmZXJSZXN1bHQsXG53YWl0Rm9yRGFwcEFwcHJvdmFsLFxuZ2V0RGFwcHNOb3RpZmllcigpe1xucmV0dXJuIGRhcHBzTm90aWZpZXI7XG4gfSxcbmdldFB1cnNlc05vdGlmaWVyKCl7XG5yZXR1cm4gcHVyc2VzTm90aWZpZXI7XG4gfSxcbmdldEF0dGVudWF0ZWRQdXJzZXNOb3RpZmllcigpe1xucmV0dXJuIGF0dGVudWF0ZWRQdXJzZXNOb3RpZmllcjtcbiB9LFxuZ2V0SXNzdWVyc05vdGlmaWVyKCl7XG5yZXR1cm4gaXNzdWVyc05vdGlmaWVyO1xuIH0sXG5nZXRPZmZlcnNOb3RpZmllcigpe1xucmV0dXJuIG9mZmVyc05vdGlmaWVyO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmFkZElzc3Vlcjppc3N1ZXJNYW5hZ2VyLmFkZCxcbmdldEJyYW5kLFxuZ2V0QnJhbmRQZXRuYW1lcyxcbnB1Ymxpc2hJc3N1ZXIsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuYWRkSW5zdGFuY2U6aW5zdGFuY2VNYW5hZ2VyLmFkZCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuYWRkSW5zdGFsbGF0aW9uOmluc3RhbGxhdGlvbk1hbmFnZXIuYWRkLFxuZ2V0SW5zdGFsbGF0aW9uTWFuYWdlcixcbmdldEluc3RhbmNlTWFuYWdlcixcbmdldElzc3Vlck1hbmFnZXIsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJlbmFtZUlzc3Vlcjppc3N1ZXJNYW5hZ2VyLnJlbmFtZSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZW5hbWVJbnN0YW5jZTppbnN0YW5jZU1hbmFnZXIucmVuYW1lLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZW5hbWVJbnN0YWxsYXRpb246aW5zdGFsbGF0aW9uTWFuYWdlci5yZW5hbWUsXG5nZXRTZWxmQ29udGFjdCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRJbnN0YW5jZTppbnN0YW5jZU1hbmFnZXIuZ2V0LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRJbnN0YWxsYXRpb246aW5zdGFsbGF0aW9uTWFuYWdlci5nZXQsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldEluc3RhbGxhdGlvbnM6aW5zdGFsbGF0aW9uTWFuYWdlci5nZXRBbGwsXG5tYWtlRW1wdHlQdXJzZSxcbmRlcG9zaXQsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldElzc3Vlcjppc3N1ZXJNYW5hZ2VyLmdldCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0SXNzdWVyczppc3N1ZXJNYW5hZ2VyLmdldEFsbCxcbmdldFB1cnNlcyxcbmdldFB1cnNlLFxuZ2V0UHVyc2VJc3N1ZXIsXG5hZGRPZmZlcixcbmRlY2xpbmVPZmZlcixcbmNhbmNlbE9mZmVyLFxuYWNjZXB0T2ZmZXIsXG5nZXRPZmZlcnMsXG5nZXRTZWF0OihpZCk9PmlkVG9TZWF0LmdldChpZCksXG5nZXRTZWF0czooaWRzKT0+aWRzLm1hcCh3YWxsZXQuZ2V0U2VhdCksXG5lbmFibGVBdXRvRGVwb3NpdChwdXJzZVBldG5hbWUpe1xuLy9cbnJldHVybiBkb0VuYWJsZUF1dG9EZXBvc2l0KHB1cnNlUGV0bmFtZSx0cnVlKTtcbiB9LFxuZGlzYWJsZUF1dG9EZXBvc2l0LFxucGVyZm9ybUFjdGlvbixcbmdldERlcG9zaXRGYWNldElkLFxuc3VnZ2VzdElzc3VlcixcbnN1Z2dlc3RJbnN0YW5jZSxcbnN1Z2dlc3RJbnN0YWxsYXRpb24sXG5hZGRDb250YWN0LFxuZ2V0Q29udGFjdHNOb3RpZmllcigpe1xucmV0dXJuIGNvbnRhY3RzTm90aWZpZXI7XG4gfSxcbmFkZFBheW1lbnQsXG5nZXRQYXltZW50c05vdGlmaWVyKCl7XG5yZXR1cm4gcGF5bWVudHNOb3RpZmllcjtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRVSU5vdGlmaWVyLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRQdWJsaWNOb3RpZmllcnMsXG5nZXRQdWJsaWNTdWJzY3JpYmVycyxcbmdldFpvZSgpe1xucmV0dXJuIHpvZTtcbiB9LFxuZ2V0Qm9hcmQoKXtcbnJldHVybiBib2FyZDtcbiB9LFxuZ2V0QWdvcmljTmFtZXMoLi4ucGF0aCl7XG5pZighYWdvcmljTmFtZXMpe1xudGhyb3cgRmFpbCBgYWdvcmljTmFtZXMgd2FzIG5vdCBzdXBwbGllZCB0byB0aGUgd2FsbGV0IG1ha2VyYDtcbiB9XG5yZXR1cm4gRShhZ29yaWNOYW1lcykubG9va3VwKC4uLnBhdGgpO1xuIH0sXG5nZXROYW1lc0J5QWRkcmVzcyguLi5wYXRoKXtcbmlmKG5hbWVzQnlBZGRyZXNzPT09dW5kZWZpbmVkKXtcbi8vXG4vL1xudGhyb3cgRmFpbCBgbmFtZXNCeUFkZHJlc3Mgd2FzIG5vdCBzdXBwbGllZCB0byB0aGUgd2FsbGV0IG1ha2VyYDtcbiB9XG5yZXR1cm4gRShuYW1lc0J5QWRkcmVzcykubG9va3VwKC4uLnBhdGgpO1xuIH19KTtcblxuXG5jb25zdCBpbml0aWFsaXplPWFzeW5jKCk9Pntcbi8vXG5jb25zdCBzZWxmRGVwb3NpdEZhY2V0PUZhcignY29udGFjdCcse1xucmVjZWl2ZShwYXltZW50KXtcbnJldHVybiBhZGRQYXltZW50KHBheW1lbnQpO1xuIH19KTtcblxuXG5jb25zdCBhZGRyZXNzPWF3YWl0IEUobXlBZGRyZXNzTmFtZUFkbWluKS5nZXRNeUFkZHJlc3MoKTtcbi8vXG5zZWxmQ29udGFjdFA9YWRkQ29udGFjdCgnU2VsZicsc2VsZkRlcG9zaXRGYWNldCxhZGRyZXNzKTtcblxuLy9cbmNvbnN0IFpPRV9JTlZJVEVfUFVSU0VfUEVUTkFNRT0nRGVmYXVsdCBab2UgaW52aXRlIHB1cnNlJztcbmNvbnN0IGludml0ZUlzc3VlclA9RSh6b2UpLmdldEludml0YXRpb25Jc3N1ZXIoKTtcbmNvbnN0IGFkZFpvZUlzc3Vlcj0oaXNzdWVyUCk9PlxuaXNzdWVyTWFuYWdlci5hZGQoWk9FX0lOVklURV9CUkFORF9QRVROQU1FLGlzc3VlclApO1xuY29uc3QgbWFrZUludml0ZVB1cnNlPSgpPT5cbndhbGxldC5tYWtlRW1wdHlQdXJzZShaT0VfSU5WSVRFX0JSQU5EX1BFVE5BTUUsWk9FX0lOVklURV9QVVJTRV9QRVROQU1FKTtcbmNvbnN0IGFkZEludml0ZURlcG9zaXRGYWNldD0oKT0+XG5FKHdhbGxldCkuZW5hYmxlQXV0b0RlcG9zaXQoWk9FX0lOVklURV9QVVJTRV9QRVROQU1FKTtcblxuYXdhaXQgYWRkWm9lSXNzdWVyKGludml0ZUlzc3VlclApLlxudGhlbihtYWtlSW52aXRlUHVyc2UpLlxudGhlbihhZGRJbnZpdGVEZXBvc2l0RmFjZXQpO1xuem9lSW52aXRlUHVyc2U9d2FsbGV0LmdldFB1cnNlKFpPRV9JTlZJVEVfUFVSU0VfUEVUTkFNRSk7XG5cbmF3YWl0IEUobXlBZGRyZXNzTmFtZUFkbWluKS51cGRhdGUoXG5XYWxsZXROYW1lLmRlcG9zaXRGYWNldCxcbnNlbGZEZXBvc2l0RmFjZXQpO1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBpbXBvcnRCYW5rQXNzZXRzPWFzeW5jKGJhbmspPT57XG52b2lkIG9ic2VydmVJdGVyYXRpb24oXG5zdWJzY3JpYmVFYWNoKEUoYmFuaykuZ2V0QXNzZXRTdWJzY3JpcHRpb24oKSksXG5oYXJkZW4oe1xuICAgICAgYXN5bmMgdXBkYXRlU3RhdGUoe3Byb3Bvc2VkTmFtZSxpc3N1ZXJOYW1lLGlzc3VlcixicmFuZH0pe1xuYXdhaXQgbnVsbDtcbnRyeXtcbmlzc3Vlck5hbWU9YXdhaXQgYWRkSXNzdWVyKGlzc3Vlck5hbWUsaXNzdWVyKTtcbmNvbnN0IHB1cnNlPWF3YWl0IEUoYmFuaykuZ2V0UHVyc2UoYnJhbmQpO1xuLy9cbmF3YWl0IGludGVybmFsVW5zYWZlSW1wb3J0UHVyc2UoXG5pc3N1ZXJOYW1lLFxucHJvcG9zZWROYW1lLFxudHJ1ZSxcbnB1cnNlKTtcblxuIH1jYXRjaChlKXtcbmNvbnNvbGUuZXJyb3IoJy8vLyBjb3VsZCBub3QgYWRkIGJhbmsgYXNzZXQgcHVyc2UnLGUse1xuaXNzdWVyTmFtZSxcbnByb3Bvc2VkTmFtZSxcbmlzc3VlcixcbmJyYW5kfSk7XG5cbiB9XG4gfX0pKS5cblxuZmluYWxseSgoKT0+Y29uc29sZS5lcnJvcignLy8vIFRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgYmFuayBhc3NldHMnKSk7XG4gfTtcbnJldHVybntcbmFkbWluOndhbGxldCxcbmluaXRpYWxpemVkOmluaXRpYWxpemUoKSxcbmltcG9ydEJhbmtBc3NldHN9O1xuXG4gfVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VXYWxsZXRSb290IjpbIm1ha2VXYWxsZXRSb290Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAwx1aW5AgAAuQIAADIAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE4LjUvc3JjL3B1YnN1Yi5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgZnVuY3Rpb24gICAgICAgICAgICAgICAgbWFrZVB1YnN1YihFKXtcbmxldCBsYXN0UHVibGlzaGVkO1xuY29uc3Qgc3Vic2NyaWJlcnM9W107XG5cbnJldHVybiBoYXJkZW4oe1xuc3Vic2NyaWJlKHMpe1xuc3Vic2NyaWJlcnMucHVzaChzKTtcbmlmKGxhc3RQdWJsaXNoZWQhPT11bmRlZmluZWQpe1xuRShzKS5ub3RpZnkobGFzdFB1Ymxpc2hlZCk7XG4gfVxuIH0sXG5wdWJsaXNoKG0pe1xubGFzdFB1Ymxpc2hlZD1tO1xuZm9yKGNvbnN0IHMgb2Ygc3Vic2NyaWJlcnMpe1xuRShzKS5ub3RpZnkobSk7XG4gfVxuIH19KTtcblxuIH0kaM2PX29uY2UuZGVmYXVsdCggICAgIG1ha2VQdWJzdWIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAO/sYcSRNQAAkTUAADIAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE4LjUvc3JjL3dhbGxldC5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2pzLXV0aWxzLmpzIiwiQGFnb3JpYy9ub3RpZmllciIsIi4vbGliLXdhbGxldC5qcyIsIi4vcHVic3ViLmpzIiwiLi9iaWdpbnRTdHJpbmdpZnkuanMiLCIuL2RhdGUtbm93LmpzIiwiLi9pbnRlcm5hbC10eXBlcy5qcyJdLCJleHBvcnRzIjpbImJ1aWxkUm9vdE9iamVjdCIsImRlZmF1bHQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxGYXIsZGVlcENvcHlKc29uYWJsZSxtYWtlTm90aWZpZXJLaXQsb2JzZXJ2ZUl0ZXJhdGlvbixtYWtlV2FsbGV0Um9vdCxwdWJzdWIsYmlnaW50U3RyaW5naWZ5LG1ha2VUaW1lckRldmljZURhdGVOb3csbWFrZVRpbWVyU2VydmljZURhdGVOb3c7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvanMtdXRpbHMuanNcIiwgW1tcImRlZXBDb3B5SnNvbmFibGVcIiwgWyRozY9fYSA9PiAoZGVlcENvcHlKc29uYWJsZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcIm1ha2VOb3RpZmllcktpdFwiLCBbJGjNj19hID0+IChtYWtlTm90aWZpZXJLaXQgPSAkaM2PX2EpXV0sW1wib2JzZXJ2ZUl0ZXJhdGlvblwiLCBbJGjNj19hID0+IChvYnNlcnZlSXRlcmF0aW9uID0gJGjNj19hKV1dXV0sW1wiLi9saWItd2FsbGV0LmpzXCIsIFtbXCJtYWtlV2FsbGV0Um9vdFwiLCBbJGjNj19hID0+IChtYWtlV2FsbGV0Um9vdCA9ICRozY9fYSldXV1dLFtcIi4vcHVic3ViLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKHB1YnN1YiA9ICRozY9fYSldXV1dLFtcIi4vYmlnaW50U3RyaW5naWZ5LmpzXCIsIFtbXCJiaWdpbnRTdHJpbmdpZnlcIiwgWyRozY9fYSA9PiAoYmlnaW50U3RyaW5naWZ5ID0gJGjNj19hKV1dXV0sW1wiLi9kYXRlLW5vdy5qc1wiLCBbW1wibWFrZVRpbWVyRGV2aWNlRGF0ZU5vd1wiLCBbJGjNj19hID0+IChtYWtlVGltZXJEZXZpY2VEYXRlTm93ID0gJGjNj19hKV1dLFtcIm1ha2VUaW1lclNlcnZpY2VEYXRlTm93XCIsIFskaM2PX2EgPT4gKG1ha2VUaW1lclNlcnZpY2VEYXRlTm93ID0gJGjNj19hKV1dXV0sW1wiLi9pbnRlcm5hbC10eXBlcy5qc1wiLCBbXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVpbGRSb290T2JqZWN0LCAnbmFtZScsIHt2YWx1ZTogXCJidWlsZFJvb3RPYmplY3RcIn0pOyRozY9fb25jZS5idWlsZFJvb3RPYmplY3QoYnVpbGRSb290T2JqZWN0KTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmZ1bmN0aW9uICAgICAgICBidWlsZFJvb3RPYmplY3QodmF0UG93ZXJzKXtcbi8vXG5jb25zdHtEfT12YXRQb3dlcnN8fHt9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB3YWxsZXRSb290O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHdhbGxldEFkbWluO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHB1cnNlc1N0YXRlPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbmJveFN0YXRlPVtdO1xubGV0IGh0dHA7XG5cbmNvbnN0IGJyaWRnZUhhbmRsZXM9bmV3IFNldCgpO1xuY29uc3Qgb2ZmZXJTdWJzY3JpcHRpb25zPW5ldyBNYXAoKTtcblxuY29uc3QgaHR0cFNlbmQ9KG9iaixjaGFubmVsSGFuZGxlcyk9PlxuRShodHRwKS5zZW5kKGRlZXBDb3B5SnNvbmFibGUob2JqKSxjaGFubmVsSGFuZGxlcyk7XG5cbmNvbnN0IHB1c2hPZmZlclN1YnNjcmlwdGlvbnM9KGNoYW5uZWxIYW5kbGUsb2ZmZXJzKT0+e1xuY29uc3Qgc3Vicz1vZmZlclN1YnNjcmlwdGlvbnMuZ2V0KGNoYW5uZWxIYW5kbGUpO1xuZm9yKGNvbnN0e29yaWdpbixzdGF0dXN9b2Ygc3Vic3x8W10pe1xuLy9cbmNvbnN0IHJlc3VsdD1oYXJkZW4oXG5vZmZlcnMuZmlsdGVyKFxuKG9mZmVyKT0+XG4oc3RhdHVzPT09bnVsbHx8b2ZmZXIuc3RhdHVzPT09c3RhdHVzKSYmXG5vZmZlci5yZXF1ZXN0Q29udGV4dCYmXG5vZmZlci5yZXF1ZXN0Q29udGV4dC5vcmlnaW49PT1vcmlnaW4pKTtcblxuXG5odHRwU2VuZChcbntcbnR5cGU6J3dhbGxldE9mZmVyRGVzY3JpcHRpb25zJyxcbmRhdGE6cmVzdWx0fSxcblxuW2NoYW5uZWxIYW5kbGVdKTtcblxuIH1cbiB9O1xuXG5jb25zdCBzdWJzY3JpYmVUb09mZmVycz0oY2hhbm5lbEhhbmRsZSx7b3JpZ2luLHN0YXR1cz1udWxsfSk9PntcbmxldCBzdWJzPW9mZmVyU3Vic2NyaXB0aW9ucy5nZXQoY2hhbm5lbEhhbmRsZSk7XG5pZighc3Vicyl7XG5zdWJzPVtdO1xub2ZmZXJTdWJzY3JpcHRpb25zLnNldChjaGFubmVsSGFuZGxlLHN1YnMpO1xuIH1cbnN1YnMucHVzaCh7b3JpZ2luLHN0YXR1c30pO1xucHVzaE9mZmVyU3Vic2NyaXB0aW9ucyhjaGFubmVsSGFuZGxlLGluYm94U3RhdGUpO1xuIH07XG5cbmNvbnN0e3B1Ymxpc2g6cHVyc2VzUHVibGlzaCxzdWJzY3JpYmU6cHVyc2VzU3Vic2NyaWJlfT1wdWJzdWIoRSk7XG5jb25zdHt1cGRhdGVyOmluYm94VXBkYXRlcixub3RpZmllcjpvZmZlck5vdGlmaWVyfT1cbm1ha2VOb3RpZmllcktpdChpbmJveFN0YXRlKTtcbmNvbnN0e3B1Ymxpc2g6aW5ib3hQdWJsaXNoLHN1YnNjcmliZTppbmJveFN1YnNjcmliZX09cHVic3ViKEUpO1xuXG5jb25zdCBub3RpZmllcnM9aGFyZGVuKHtcbmdldEluYm94Tm90aWZpZXIoKXtcbnJldHVybiBvZmZlck5vdGlmaWVyO1xuIH19KTtcblxuXG4vKlxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gc3RhcnR1cCh7XG56b2UsXG5ib2FyZCxcbmFnb3JpY05hbWVzLFxubmFtZXNCeUFkZHJlc3MsXG5teUFkZHJlc3NOYW1lQWRtaW4sXG50aW1lckRldmljZSxcbnRpbWVyRGV2aWNlU2NhbGUsXG5sb2NhbFRpbWVyU2VydmljZSxcbmxvY2FsVGltZXJQb2xsSW50ZXJ2YWx9KVxue1xuYXNzZXJ0KG15QWRkcmVzc05hbWVBZG1pbiwnbWlzc2luZyBteUFkZHJlc3NOYW1lQWRtaW4nKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZGF0ZU5vd1A7XG5pZih0aW1lckRldmljZSl7XG5kYXRlTm93UD1tYWtlVGltZXJEZXZpY2VEYXRlTm93KEQsdGltZXJEZXZpY2UsdGltZXJEZXZpY2VTY2FsZSk7XG4gfVxuaWYobG9jYWxUaW1lclNlcnZpY2Upe1xuZGF0ZU5vd1A9bWFrZVRpbWVyU2VydmljZURhdGVOb3coXG5sb2NhbFRpbWVyU2VydmljZSxcbmxvY2FsVGltZXJQb2xsSW50ZXJ2YWwpO1xuXG4gfVxuXG5jb25zdCBkYXRlTm93PWF3YWl0IGRhdGVOb3dQO1xuY29uc3Qgdz1tYWtlV2FsbGV0Um9vdCh7XG5hZ29yaWNOYW1lcyxcbm5hbWVzQnlBZGRyZXNzLFxubXlBZGRyZXNzTmFtZUFkbWluLFxuem9lLFxuYm9hcmQsXG5wdXJzZXNTdGF0ZUNoYW5nZUhhbmRsZXI6cHVyc2VzUHVibGlzaCxcbmluYm94U3RhdGVDaGFuZ2VIYW5kbGVyOmluYm94UHVibGlzaCxcbmRhdGVOb3d9KTtcblxuY29uc29sZS5kZWJ1Zygnd2FpdGluZyBmb3Igd2FsbGV0IHRvIGluaXRpYWxpemUnKTtcbmF3YWl0IHcuaW5pdGlhbGl6ZWQ7XG5jb25zb2xlLmRlYnVnKCd3YWxsZXQgaW5pdGlhbGl6ZWQnKTtcbndhbGxldEFkbWluPXcuYWRtaW47XG53YWxsZXRSb290PXc7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VCcmlkZ2U9KGFwcHJvdmUsZGFwcE9yaWdpbixtZXRhPXt9KT0+e1xuYXN5bmMgZnVuY3Rpb24qbWFrZUFwcHJvdmVkTm90aWZpZXIoc291cmNlTm90aWZpZXIpe1xuYXdhaXQgYXBwcm92ZSgpO1xuZm9yIGF3YWl0KGNvbnN0IHN0YXRlIG9mIHNvdXJjZU5vdGlmaWVyKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnlpZWxkIHN0YXRlO1xuIH1cbiB9XG5oYXJkZW4obWFrZUFwcHJvdmVkTm90aWZpZXIpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGJyaWRnZT1GYXIoJ2JyaWRnZScse1xuICAgICAgYXN5bmMgZ2V0UHVyc2VzTm90aWZpZXIoKXtcbmF3YWl0IGFwcHJvdmUoKTtcbmNvbnN0IHB1cnNlc05vdGlmaWVyPXdhbGxldEFkbWluLmdldEF0dGVudWF0ZWRQdXJzZXNOb3RpZmllcigpO1xuY29uc3R7bm90aWZpZXIsdXBkYXRlcn09bWFrZU5vdGlmaWVyS2l0KCk7XG52b2lkIG9ic2VydmVJdGVyYXRpb24obWFrZUFwcHJvdmVkTm90aWZpZXIocHVyc2VzTm90aWZpZXIpLHVwZGF0ZXIpO1xucmV0dXJuIG5vdGlmaWVyO1xuIH0sXG4gICAgICBhc3luYyBnZXRDYWNoZUNvb3JkaW5hdG9yKCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0RGFwcENhY2hlQ29vcmRpbmF0b3IoZGFwcE9yaWdpbik7XG4gfSxcbiAgICAgIGFzeW5jIGdldElzc3VlcnNOb3RpZmllcigpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldElzc3VlcnNOb3RpZmllcigpO1xuIH0sXG4gICAgICBhc3luYyBhZGRPZmZlcihvZmZlcil7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uYWRkT2ZmZXIob2ZmZXIsey4uLm1ldGEsZGFwcE9yaWdpbn0pO1xuIH0sXG4gICAgICBhc3luYyBnZXRPZmZlcnNOb3RpZmllcihzdGF0dXM9bnVsbCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5jb25zdHtub3RpZmllcix1cGRhdGVyfT1tYWtlTm90aWZpZXJLaXQoaW5ib3hTdGF0ZSk7XG5jb25zdCBmaWx0ZXI9KG9mZmVyKT0+XG4oc3RhdHVzPT09bnVsbHx8b2ZmZXIuc3RhdHVzPT09c3RhdHVzKSYmXG5vZmZlci5yZXF1ZXN0Q29udGV4dCYmXG5vZmZlci5yZXF1ZXN0Q29udGV4dC5kYXBwT3JpZ2luPT09ZGFwcE9yaWdpbjtcbmNvbnN0IGZpbHRlcmVkT2ZmZXJzPShvZmZlcnMpPT57XG5yZXR1cm4gb2ZmZXJzLmZpbHRlcihmaWx0ZXIpLm1hcCgoe3Jhd0lkLC4uLnZ9KT0+KHtcbi4uLnYsXG5pZDpyYXdJZH0pKTtcblxuIH07XG5cbnZvaWQgb2JzZXJ2ZUl0ZXJhdGlvbihtYWtlQXBwcm92ZWROb3RpZmllcihvZmZlck5vdGlmaWVyKSx7XG51cGRhdGVTdGF0ZShvZmZlcnMpe1xudXBkYXRlci51cGRhdGVTdGF0ZShmaWx0ZXJlZE9mZmVycyhvZmZlcnMpKTtcbiB9LFxuZmluaXNoKG9mZmVycyl7XG51cGRhdGVyLmZpbmlzaChmaWx0ZXJlZE9mZmVycyhvZmZlcnMpKTtcbiB9LFxuZmFpbChlKXtcbnVwZGF0ZXIuZmFpbChlKTtcbiB9fSk7XG5cbnJldHVybiBub3RpZmllcjtcbiB9LFxuICAgICAgYXN5bmMgZ2V0RGVwb3NpdEZhY2V0SWQoYnJhbmRCb2FyZElkKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXREZXBvc2l0RmFjZXRJZChicmFuZEJvYXJkSWQpO1xuIH0sXG4gICAgICBhc3luYyBzdWdnZXN0SXNzdWVyKHBldG5hbWUsYm9hcmRJZCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uc3VnZ2VzdElzc3VlcihwZXRuYW1lLGJvYXJkSWQsZGFwcE9yaWdpbik7XG4gfSxcbiAgICAgIGFzeW5jIHN1Z2dlc3RJbnN0YWxsYXRpb24ocGV0bmFtZSxib2FyZElkKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5zdWdnZXN0SW5zdGFsbGF0aW9uKHBldG5hbWUsYm9hcmRJZCxkYXBwT3JpZ2luKTtcbiB9LFxuICAgICAgYXN5bmMgc3VnZ2VzdEluc3RhbmNlKHBldG5hbWUsYm9hcmRJZCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uc3VnZ2VzdEluc3RhbmNlKHBldG5hbWUsYm9hcmRJZCxkYXBwT3JpZ2luKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0VUlOb3RpZmllcihyYXdJZCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0VUlOb3RpZmllcihyYXdJZCxkYXBwT3JpZ2luKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0UHVibGljTm90aWZpZXJzKHJhd0lkKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRQdWJsaWNOb3RpZmllcnMocmF3SWQsZGFwcE9yaWdpbik7XG4gfSxcbiAgICAgIGFzeW5jIGdldFpvZSgpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldFpvZSgpO1xuIH0sXG4gICAgICBhc3luYyBnZXRCb2FyZCgpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldEJvYXJkKCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldEFnb3JpY05hbWVzKC4uLnBhdGgpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldEFnb3JpY05hbWVzKC4uLnBhdGgpO1xuIH0sXG4gICAgICBhc3luYyBnZXROYW1lc0J5QWRkcmVzcyguLi5wYXRoKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXROYW1lc0J5QWRkcmVzcyguLi5wYXRoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0QnJhbmRQZXRuYW1lcyhicmFuZHMpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldEJyYW5kUGV0bmFtZXMoYnJhbmRzKTtcbiB9fSk7XG5cbnJldHVybiBicmlkZ2U7XG4gfTtcblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJlYXBwcm92ZWRCcmlkZ2U9RmFyKCdwcmVhcHByb3ZlZEJyaWRnZScse1xuLypcblxuXG4gICAgICovXG5hZGRPZmZlcihvZmZlcixtZXRhKXtcbnJldHVybiB3YWxsZXRBZG1pbi5hZGRPZmZlcihvZmZlcixtZXRhKTtcbiB9LFxuZ2V0RGVwb3NpdEZhY2V0SWQoYnJhbmRCb2FyZElkKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXREZXBvc2l0RmFjZXRJZChicmFuZEJvYXJkSWQpO1xuIH0sXG4gICAgICBhc3luYyBnZXRPZmZlcnNOb3RpZmllcigpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldE9mZmVyc05vdGlmaWVyKCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldFB1cnNlc05vdGlmaWVyKCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0QXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyKCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldElzc3VlcnNOb3RpZmllcigpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldElzc3VlcnNOb3RpZmllcigpO1xuIH0sXG4gICAgICBhc3luYyBnZXRDYWNoZUNvb3JkaW5hdG9yKCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0Q2FjaGVDb29yZGluYXRvcigpO1xuIH0sXG5zdWdnZXN0SW5zdGFsbGF0aW9uKHBldG5hbWUsaW5zdGFsbGF0aW9uQm9hcmRJZCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uc3VnZ2VzdEluc3RhbGxhdGlvbihwZXRuYW1lLGluc3RhbGxhdGlvbkJvYXJkSWQpO1xuIH0sXG5zdWdnZXN0SW5zdGFuY2UocGV0bmFtZSxpbnN0YW5jZUJvYXJkSWQpe1xucmV0dXJuIHdhbGxldEFkbWluLnN1Z2dlc3RJbnN0YW5jZShwZXRuYW1lLGluc3RhbmNlQm9hcmRJZCk7XG4gfSxcbnN1Z2dlc3RJc3N1ZXIocGV0bmFtZSxpc3N1ZXJCb2FyZElkKXtcbnJldHVybiB3YWxsZXRBZG1pbi5zdWdnZXN0SXNzdWVyKHBldG5hbWUsaXNzdWVyQm9hcmRJZCk7XG4gfSxcbmdldFVJTm90aWZpZXIocmF3SWQpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldFVJTm90aWZpZXIocmF3SWQpO1xuIH0sXG5nZXRQdWJsaWNOb3RpZmllcnMocmF3SWQpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldFB1YmxpY05vdGlmaWVycyhyYXdJZCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldFpvZSgpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldFpvZSgpO1xuIH0sXG4gICAgICBhc3luYyBnZXRCb2FyZCgpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldEJvYXJkKCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldEFnb3JpY05hbWVzKC4uLnBhdGgpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldEFnb3JpY05hbWVzKC4uLnBhdGgpO1xuIH0sXG4gICAgICBhc3luYyBnZXROYW1lc0J5QWRkcmVzcyguLi5wYXRoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXROYW1lc0J5QWRkcmVzcyguLi5wYXRoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0QnJhbmRQZXRuYW1lcyhicmFuZHMpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldEJyYW5kUGV0bmFtZXMoYnJhbmRzKTtcbiB9fSk7XG5cbmhhcmRlbihwcmVhcHByb3ZlZEJyaWRnZSk7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFdhbGxldChiYW5rKXtcbmF3YWl0IHdhbGxldFJvb3QuaW1wb3J0QmFua0Fzc2V0cyhiYW5rKTtcblxuLypcblxuICAgICAqL1xuY29uc3Qgd2FsbGV0PUZhcignd2FsbGV0Jyx7XG5hZGRQYXltZW50OndhbGxldEFkbWluLmFkZFBheW1lbnQsXG4gICAgICBhc3luYyBnZXRTY29wZWRCcmlkZ2Uoc3VnZ2VzdGVkRGFwcFBldG5hbWUsZGFwcE9yaWdpbil7XG5jb25zdCBhcHByb3ZlPWFzeW5jKCk9PntcbmF3YWl0IHdhbGxldEFkbWluLndhaXRGb3JEYXBwQXBwcm92YWwoXG5zdWdnZXN0ZWREYXBwUGV0bmFtZSxcbmRhcHBPcmlnaW4pO1xuXG4gfTtcblxucmV0dXJuIG1ha2VCcmlkZ2UoYXBwcm92ZSxkYXBwT3JpZ2luKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0QnJpZGdlKCl7XG5yZXR1cm4gcHJlYXBwcm92ZWRCcmlkZ2U7XG4gfSxcbmdldERlcG9zaXRGYWNldElkOndhbGxldEFkbWluLmdldERlcG9zaXRGYWNldElkLFxuZ2V0QWRtaW5GYWNldCgpe1xucmV0dXJuIEZhcignYWRtaW5GYWNldCcse1xuLi4ud2FsbGV0QWRtaW4sXG4uLi5ub3RpZmllcnMsXG5nZXRTY29wZWRCcmlkZ2U6d2FsbGV0LmdldFNjb3BlZEJyaWRnZX0pO1xuXG4gfSxcbmdldElzc3Vlcjp3YWxsZXRBZG1pbi5nZXRJc3N1ZXIsXG5nZXRJc3N1ZXJzOndhbGxldEFkbWluLmdldElzc3VlcnMsXG5nZXRQdXJzZTp3YWxsZXRBZG1pbi5nZXRQdXJzZSxcbmdldFB1cnNlczp3YWxsZXRBZG1pbi5nZXRQdXJzZXMsXG5cbmdldE1hcnNoYWxsZXI6d2FsbGV0QWRtaW4uZ2V0TWFyc2hhbGxlcixcblxubG9va3VwOndhbGxldEFkbWluLmxvb2t1cH0pO1xuXG5yZXR1cm4gaGFyZGVuKHdhbGxldCk7XG4gfVxuXG5mdW5jdGlvbiBzZXRIVFRQT2JqZWN0KG8pe1xuaHR0cD1vO1xuIH1cblxuZnVuY3Rpb24gc3RhcnRTdWJzY3JpcHRpb25zKCl7XG4vL1xuLy9cbnB1cnNlc1N1YnNjcmliZShcbmhhcmRlbih7XG5ub3RpZnkobSl7XG5wdXJzZXNTdGF0ZT1KU09OLnBhcnNlKG0pO1xuIH19KSk7XG5cblxuXG4vL1xuLy9cbmluYm94U3Vic2NyaWJlKFxuaGFyZGVuKHtcbm5vdGlmeShtKXtcbmluYm94U3RhdGU9SlNPTi5wYXJzZShtKTtcbmluYm94VXBkYXRlci51cGRhdGVTdGF0ZShpbmJveFN0YXRlKTtcbmlmKGh0dHApe1xuLy9cbmZvcihjb25zdCBjaGFubmVsSGFuZGxlIG9mIG9mZmVyU3Vic2NyaXB0aW9ucy5rZXlzKCkpe1xucHVzaE9mZmVyU3Vic2NyaXB0aW9ucyhjaGFubmVsSGFuZGxlLGluYm94U3RhdGUpO1xuIH1cbiB9XG4gfX0pKTtcblxuXG4gfVxuXG5mdW5jdGlvbiBnZXRCcmlkZ2VVUkxIYW5kbGVyKCl7XG5yZXR1cm4gRmFyKCdicmlkZ2VVUkxIYW5kbGVyJyx7XG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgZ2V0Qm9vdHN0cmFwKG90aGVyU2lkZSxtZXRhLG9iail7XG5jb25zdHtkYXBwT3JpZ2luPW1ldGEub3JpZ2lufT1vYmo7XG5jb25zdCBzdWdnZXN0ZWREYXBwUGV0bmFtZT1TdHJpbmcoXG5tZXRhLnF1ZXJ5JiZtZXRhLnF1ZXJ5LnN1Z2dlc3RlZERhcHBQZXRuYW1lfHxcbm1ldGEuZGFwcE9yaWdpbnx8XG5kYXBwT3JpZ2luKTtcblxuXG5jb25zdCBhcHByb3ZlPWFzeW5jKCk9PntcbmxldCBub3RZZXRFbmFibGVkPWZhbHNlO1xuYXdhaXQgd2FsbGV0QWRtaW4ud2FpdEZvckRhcHBBcHByb3ZhbChcbnN1Z2dlc3RlZERhcHBQZXRuYW1lLFxuZGFwcE9yaWdpbixcbigpPT57XG5ub3RZZXRFbmFibGVkPXRydWU7XG5FKG90aGVyU2lkZSkuXG5uZWVkRGFwcEFwcHJvdmFsKGRhcHBPcmlnaW4sc3VnZ2VzdGVkRGFwcFBldG5hbWUpLlxuY2F0Y2goKF8pPT57IH0pO1xuIH0pO1xuXG5pZihub3RZZXRFbmFibGVkKXtcbmF3YWl0IEUob3RoZXJTaWRlKS5kYXBwQXBwcm92ZWQoZGFwcE9yaWdpbik7XG4gfVxuIH07XG5cbnJldHVybiBtYWtlQnJpZGdlKGFwcHJvdmUsZGFwcE9yaWdpbixtZXRhKTtcbiB9LFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAgICAqL1xuZ2V0Q29tbWFuZEhhbmRsZXIoKXtcbnJldHVybiBGYXIoJ2NvbW1hbmRIYW5kbGVyJyx7XG5vbk9wZW4oX29iaixtZXRhKXtcbmJyaWRnZUhhbmRsZXMuYWRkKG1ldGEuY2hhbm5lbEhhbmRsZSk7XG4gfSxcbm9uQ2xvc2UoX29iaixtZXRhKXtcbmJyaWRnZUhhbmRsZXMuZGVsZXRlKG1ldGEuY2hhbm5lbEhhbmRsZSk7XG5vZmZlclN1YnNjcmlwdGlvbnMuZGVsZXRlKG1ldGEuY2hhbm5lbEhhbmRsZSk7XG4gfSxcblxuICAgICAgYXN5bmMgb25NZXNzYWdlKG9iaixtZXRhKXtcbmNvbnN0e1xudHlwZSxcbmRhcHBPcmlnaW49bWV0YS5vcmlnaW4sXG5zdWdnZXN0ZWREYXBwUGV0bmFtZT1tZXRhLnF1ZXJ5JiZcbm1ldGEucXVlcnkuc3VnZ2VzdGVkRGFwcFBldG5hbWV8fFxub2JqLmRhcHBPcmlnaW58fFxubWV0YS5vcmlnaW59PVxub2JqO1xuXG4vL1xubGV0IG5lZWRBcHByb3ZhbD1mYWxzZTtcbmF3YWl0IHdhbGxldEFkbWluLndhaXRGb3JEYXBwQXBwcm92YWwoXG5zdWdnZXN0ZWREYXBwUGV0bmFtZSxcbmRhcHBPcmlnaW4sXG4oKT0+e1xubmVlZEFwcHJvdmFsPXRydWU7XG5odHRwU2VuZChcbntcbnR5cGU6J3dhbGxldE5lZWREYXBwQXBwcm92YWwnLFxuZGF0YTp7XG5kYXBwT3JpZ2luLFxuc3VnZ2VzdGVkRGFwcFBldG5hbWV9fSxcblxuXG5bbWV0YS5jaGFubmVsSGFuZGxlXSk7XG5cbiB9KTtcblxuaWYobmVlZEFwcHJvdmFsKXtcbmh0dHBTZW5kKFxue1xudHlwZTond2FsbGV0SGF2ZURhcHBBcHByb3ZhbCcsXG5kYXRhOntcbmRhcHBPcmlnaW59fSxcblxuXG5bbWV0YS5jaGFubmVsSGFuZGxlXSk7XG5cbiB9XG5cbnN3aXRjaCh0eXBlKXtcbmNhc2Und2FsbGV0R2V0UHVyc2VzJzp7XG5yZXR1cm57XG50eXBlOid3YWxsZXRVcGRhdGVQdXJzZXMnLFxuZGF0YTpiaWdpbnRTdHJpbmdpZnkocHVyc2VzU3RhdGUpfTtcblxuIH1cbmNhc2Und2FsbGV0QWRkT2ZmZXInOntcbmxldCBoYW5kbGVkPWZhbHNlO1xuY29uc3QgYWN0aW9ucz1GYXIoJ2FjdGlvbnMnLHtcbmhhbmRsZWQob2ZmZXIpe1xuaWYoaGFuZGxlZCl7XG5yZXR1cm47XG4gfVxuaGFuZGxlZD10cnVlO1xuaHR0cFNlbmQoXG57XG50eXBlOid3YWxsZXRPZmZlckhhbmRsZWQnLFxuZGF0YTpvZmZlci5pZH0sXG5cblttZXRhLmNoYW5uZWxIYW5kbGVdKTtcblxuIH19KTtcblxucmV0dXJue1xudHlwZTond2FsbGV0T2ZmZXJBZGRlZCcsXG5kYXRhOmF3YWl0IHdhbGxldEFkbWluLmFkZE9mZmVyKFxuey4uLm9iai5kYXRhLGFjdGlvbnN9LFxuey4uLm1ldGEsZGFwcE9yaWdpbn0pfTtcblxuXG4gfVxuXG5jYXNlJ3dhbGxldFN1YnNjcmliZU9mZmVycyc6e1xuY29uc3R7c3RhdHVzPW51bGx9PW9iajtcbmNvbnN0e2NoYW5uZWxIYW5kbGV9PW1ldGE7XG5cbmlmKCFjaGFubmVsSGFuZGxlKXtcbnJldHVybntcbnR5cGU6J3dhbGxldFN1YnNjcmliZWRPZmZlcnMnLFxuZGF0YTpmYWxzZX07XG5cbiB9XG5cbi8vXG5zdWJzY3JpYmVUb09mZmVycyhjaGFubmVsSGFuZGxlLHtcbm9yaWdpbjpkYXBwT3JpZ2luLFxuc3RhdHVzfSk7XG5cbnJldHVybntcbnR5cGU6J3dhbGxldFN1YnNjcmliZWRPZmZlcnMnLFxuZGF0YTp0cnVlfTtcblxuIH1cblxuY2FzZSd3YWxsZXRHZXRPZmZlcnMnOntcbmNvbnN0e3N0YXR1cz1udWxsfT1vYmo7XG5cbi8vXG5sZXQgcmVzdWx0PWF3YWl0IHdhbGxldEFkbWluLmdldE9mZmVycyh7XG5vcmlnaW46ZGFwcE9yaWdpbn0pO1xuXG5pZihzdGF0dXMhPT1udWxsKXtcbi8vXG5yZXN1bHQ9aGFyZGVuKFxucmVzdWx0LmZpbHRlcigob2ZmZXIpPT5vZmZlci5zdGF0dXM9PT1zdGF0dXMpKTtcblxuIH1cblxucmV0dXJue1xudHlwZTond2FsbGV0T2ZmZXJEZXNjcmlwdGlvbnMnLFxuZGF0YTpyZXN1bHR9O1xuXG4gfVxuXG5jYXNlJ3dhbGxldEdldERlcG9zaXRGYWNldElkJzp7XG5jb25zdHticmFuZEJvYXJkSWR9PW9iajtcbmNvbnN0IHJlc3VsdD1cbmF3YWl0IHdhbGxldEFkbWluLmdldERlcG9zaXRGYWNldElkKGJyYW5kQm9hcmRJZCk7XG5yZXR1cm57XG50eXBlOid3YWxsZXREZXBvc2l0RmFjZXRJZFJlc3BvbnNlJyxcbmRhdGE6cmVzdWx0fTtcblxuIH1cblxuY2FzZSd3YWxsZXRTdWdnZXN0SXNzdWVyJzp7XG5jb25zdHtwZXRuYW1lLGJvYXJkSWR9PW9iajtcbmNvbnN0IHJlc3VsdD1hd2FpdCB3YWxsZXRBZG1pbi5zdWdnZXN0SXNzdWVyKFxucGV0bmFtZSxcbmJvYXJkSWQsXG5kYXBwT3JpZ2luKTtcblxucmV0dXJue1xudHlwZTond2FsbGV0U3VnZ2VzdElzc3VlclJlc3BvbnNlJyxcbmRhdGE6cmVzdWx0fTtcblxuIH1cblxuY2FzZSd3YWxsZXRTdWdnZXN0SW5zdGFuY2UnOntcbmNvbnN0e3BldG5hbWUsYm9hcmRJZH09b2JqO1xuY29uc3QgcmVzdWx0PWF3YWl0IHdhbGxldEFkbWluLnN1Z2dlc3RJbnN0YW5jZShcbnBldG5hbWUsXG5ib2FyZElkLFxuZGFwcE9yaWdpbik7XG5cbnJldHVybntcbnR5cGU6J3dhbGxldFN1Z2dlc3RJbnN0YW5jZVJlc3BvbnNlJyxcbmRhdGE6cmVzdWx0fTtcblxuIH1cblxuY2FzZSd3YWxsZXRTdWdnZXN0SW5zdGFsbGF0aW9uJzp7XG5jb25zdHtwZXRuYW1lLGJvYXJkSWR9PW9iajtcbmNvbnN0IHJlc3VsdD1hd2FpdCB3YWxsZXRBZG1pbi5zdWdnZXN0SW5zdGFsbGF0aW9uKFxucGV0bmFtZSxcbmJvYXJkSWQsXG5kYXBwT3JpZ2luKTtcblxucmV0dXJue1xudHlwZTond2FsbGV0U3VnZ2VzdEluc3RhbGxhdGlvblJlc3BvbnNlJyxcbmRhdGE6cmVzdWx0fTtcblxuIH1cblxuZGVmYXVsdDpcbnJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO31cblxuIH19KTtcblxuIH19KTtcblxuIH1cblxuc3RhcnRTdWJzY3JpcHRpb25zKCk7XG5cbmZ1bmN0aW9uIGdldENvbW1hbmRIYW5kbGVyKC4uLnBhcmFtcyl7XG5jb25zb2xlLmRlYnVnKFxuJ2dldENvbW1hbmRIYW5kbGVyIGNhbGxlZCBpbiB3YWxsZXQsIGJ1dCBkb2VzIG5vdCBleGlzdCcsXG5wYXJhbXMpO1xuXG4gfVxuXG5yZXR1cm4gRmFyKCdyb290Jyx7XG5zdGFydHVwLFxuZ2V0V2FsbGV0LFxuc2V0SFRUUE9iamVjdCxcbmdldEJyaWRnZVVSTEhhbmRsZXIsXG5nZXRDb21tYW5kSGFuZGxlcn0pO1xuXG4gfVxuXG4vKlxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgICAgICAgICAgc3Bhd24odGVybXMsX2ludml0ZU1ha2VyKXtcbmNvbnN0IHdhbGxldFZhdD1idWlsZFJvb3RPYmplY3QoKTtcbnJldHVybiB3YWxsZXRWYXQuc3RhcnR1cCh0ZXJtcykudGhlbigoXyk9PndhbGxldFZhdCk7XG4gfSRozY9fb25jZS5kZWZhdWx0KCAgICAgc3Bhd24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il0sImJ1aWxkUm9vdE9iamVjdCI6WyJidWlsZFJvb3RPYmplY3QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAyWosg1EYAABRGAAAOQAAAEBhZ29yaWMvem9lLXYwLjI2LjMtdTE4LjEvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy9ub3RpZmllciIsIkBhZ29yaWMvbm90aWZpZXIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAZW5kby9ldmVudHVhbC1zZW5kIl0sImV4cG9ydHMiOlsiZGVmaW5lRVJlY29yZGVyS2l0IiwiZGVmaW5lUmVjb3JkZXJLaXQiLCJwcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzIiwicHJlcGFyZVJlY29yZGVyIiwicHJlcGFyZVJlY29yZGVyS2l0IiwicHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsU3RvcmFnZU5vZGVTaGFwZSxwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQsbWFrZUZha2VNYXJzaGFsbGVyLG1ha2VGYWtlU3RvcmFnZSxtdXN0TWF0Y2gsTSxtYWtlU2NhbGFyQmlnTWFwU3RvcmUscHJlcGFyZUV4b0NsYXNzLEU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcIlN0b3JhZ2VOb2RlU2hhcGVcIiwgWyRozY9fYSA9PiAoU3RvcmFnZU5vZGVTaGFwZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdFwiLCBbJGjNj19hID0+IChwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qc1wiLCBbW1wibWFrZUZha2VNYXJzaGFsbGVyXCIsIFskaM2PX2EgPT4gKG1ha2VGYWtlTWFyc2hhbGxlciA9ICRozY9fYSldXSxbXCJtYWtlRmFrZVN0b3JhZ2VcIiwgWyRozY9fYSA9PiAobWFrZUZha2VTdG9yYWdlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ01hcFN0b3JlID0gJGjNj19hKV1dLFtcInByZXBhcmVFeG9DbGFzc1wiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvQ2xhc3MgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUmVjb3JkZXI9KGJhZ2dhZ2UsbWFyc2hhbGxlcik9PntcbmNvbnN0IG1ha2VSZWNvcmRlcj1wcmVwYXJlRXhvQ2xhc3MoXG5iYWdnYWdlLFxuJ1JlY29yZGVyJyxcbk0uaW50ZXJmYWNlKCdSZWNvcmRlcicse1xuZ2V0U3RvcmFnZU5vZGU6TS5jYWxsKCkucmV0dXJucyhTdG9yYWdlTm9kZVNoYXBlKSxcbmdldFN0b3JhZ2VQYXRoOk0uY2FsbCgpLnJldHVybnMoTS5wcm9taXNlKCkpLFxud3JpdGU6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoTS5wcm9taXNlKCkpLFxud3JpdGVGaW5hbDpNLmNhbGwoTS5hbnkoKSkucmV0dXJucyhNLnByb21pc2UoKSl9KSxcblxuLypcblxuXG5cblxuICAgICAqL1xuKFxucHVibGlzaGVyLFxuc3RvcmFnZU5vZGUsXG52YWx1ZVNoYXBlPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovTS5hbnkoKSk9Plxue1xucmV0dXJue1xuY2xvc2VkOmZhbHNlLFxucHVibGlzaGVyLFxuc3RvcmFnZU5vZGUsXG5zdG9yYWdlUGF0aDovKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi91bmRlZmluZWQsXG52YWx1ZVNoYXBlfTtcblxuIH0sXG57XG5nZXRTdG9yYWdlTm9kZSgpe1xucmV0dXJuIHRoaXMuc3RhdGUuc3RvcmFnZU5vZGU7XG4gfSxcbi8qXG5cblxuXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIGdldFN0b3JhZ2VQYXRoKCl7XG5jb25zdHtzdG9yYWdlUGF0aDpoZWxkUGF0aH09dGhpcy5zdGF0ZTtcbi8vXG5hd2FpdCBudWxsO1xuaWYoaGVsZFBhdGghPT11bmRlZmluZWQpe1xucmV0dXJuIGhlbGRQYXRoO1xuIH1cbmNvbnN0IHBhdGg9YXdhaXQgRSh0aGlzLnN0YXRlLnN0b3JhZ2VOb2RlKS5nZXRQYXRoKCk7XG50aGlzLnN0YXRlLnN0b3JhZ2VQYXRoPXBhdGg7XG5yZXR1cm4gcGF0aDtcbiB9LFxuLypcblxuXG5cblxuICAgICAgICovXG4gICAgICBhc3luYyB3cml0ZSh2YWx1ZSl7XG5jb25zdHtjbG9zZWQscHVibGlzaGVyLHN0b3JhZ2VOb2RlLHZhbHVlU2hhcGV9PXRoaXMuc3RhdGU7XG4hY2xvc2VkfHxGYWlsIGBjYW5ub3Qgd3JpdGUgdG8gY2xvc2VkIHJlY29yZGVyYDtcbm11c3RNYXRjaCh2YWx1ZSx2YWx1ZVNoYXBlKTtcbmNvbnN0IGVuY29kZWQ9YXdhaXQgRShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuY29uc3Qgc2VyaWFsaXplZD1KU09OLnN0cmluZ2lmeShlbmNvZGVkKTtcbmF3YWl0IEUoc3RvcmFnZU5vZGUpLnNldFZhbHVlKHNlcmlhbGl6ZWQpO1xuXG4vL1xucmV0dXJuIHB1Ymxpc2hlci5wdWJsaXNoKHZhbHVlKTtcbiB9LFxuLypcblxuXG5cblxuICAgICAgICovXG4gICAgICBhc3luYyB3cml0ZUZpbmFsKHZhbHVlKXtcbmNvbnN0e2Nsb3NlZCxwdWJsaXNoZXIsc3RvcmFnZU5vZGUsdmFsdWVTaGFwZX09dGhpcy5zdGF0ZTtcbiFjbG9zZWR8fEZhaWwgYGNhbm5vdCB3cml0ZSB0byBjbG9zZWQgcmVjb3JkZXJgO1xubXVzdE1hdGNoKHZhbHVlLHZhbHVlU2hhcGUpO1xuY29uc3QgZW5jb2RlZD1hd2FpdCBFKG1hcnNoYWxsZXIpLnRvQ2FwRGF0YSh2YWx1ZSk7XG5jb25zdCBzZXJpYWxpemVkPUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xuYXdhaXQgRShzdG9yYWdlTm9kZSkuc2V0VmFsdWUoc2VyaWFsaXplZCk7XG5cbi8vXG50aGlzLnN0YXRlLmNsb3NlZD10cnVlO1xucmV0dXJuIHB1Ymxpc2hlci5maW5pc2godmFsdWUpO1xuIH19KTtcblxuXG5cbnJldHVybiBtYWtlUmVjb3JkZXI7XG4gfTskaM2PX29uY2UucHJlcGFyZVJlY29yZGVyKHByZXBhcmVSZWNvcmRlcik7XG5oYXJkZW4ocHJlcGFyZVJlY29yZGVyKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmaW5lUmVjb3JkZXJLaXQ9KHttYWtlUmVjb3JkZXIsbWFrZUR1cmFibGVQdWJsaXNoS2l0fSk9Pntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlUmVjb3JkZXJLaXQ9KHN0b3JhZ2VOb2RlLHZhbHVlU2hhcGUpPT57XG5jb25zdHtzdWJzY3JpYmVyLHB1Ymxpc2hlcn09bWFrZUR1cmFibGVQdWJsaXNoS2l0KCk7XG5jb25zdCByZWNvcmRlcj1tYWtlUmVjb3JkZXIoXG5wdWJsaXNoZXIsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuc3RvcmFnZU5vZGUsXG5cbnZhbHVlU2hhcGUpO1xuXG5yZXR1cm4gaGFyZGVuKHtzdWJzY3JpYmVyLHJlY29yZGVyfSk7XG4gfTtcbnJldHVybiBtYWtlUmVjb3JkZXJLaXQ7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVmaW5lUmVjb3JkZXJLaXQoZGVmaW5lUmVjb3JkZXJLaXQpO1xuY29uc3QgICAgICAgIGRlZmluZUVSZWNvcmRlcktpdD0oe21ha2VSZWNvcmRlcixtYWtlRHVyYWJsZVB1Ymxpc2hLaXR9KT0+e1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VFUmVjb3JkZXJLaXQ9KHN0b3JhZ2VOb2RlUCx2YWx1ZVNoYXBlKT0+e1xuY29uc3R7cHVibGlzaGVyLHN1YnNjcmliZXJ9PW1ha2VEdXJhYmxlUHVibGlzaEtpdCgpO1xuY29uc3QgcmVjb3JkZXJQPUUud2hlbihzdG9yYWdlTm9kZVAsKHN0b3JhZ2VOb2RlKT0+XG5tYWtlUmVjb3JkZXIoXG5wdWJsaXNoZXIsXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9zdG9yYWdlTm9kZSxcbnZhbHVlU2hhcGUpKTtcblxuXG5yZXR1cm57c3Vic2NyaWJlcixyZWNvcmRlclB9O1xuIH07XG5yZXR1cm4gbWFrZUVSZWNvcmRlcktpdDtcbiB9OyRozY9fb25jZS5kZWZpbmVFUmVjb3JkZXJLaXQoZGVmaW5lRVJlY29yZGVyS2l0KTtcbmhhcmRlbihkZWZpbmVFUmVjb3JkZXJLaXQpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVSZWNvcmRlcktpdD0oYmFnZ2FnZSxtYXJzaGFsbGVyKT0+e1xuY29uc3QgbWFrZUR1cmFibGVQdWJsaXNoS2l0PXByZXBhcmVEdXJhYmxlUHVibGlzaEtpdChcbmJhZ2dhZ2UsXG4nRHVyYWJsZSBQdWJsaXNoIEtpdCcpO1xuXG5jb25zdCBtYWtlUmVjb3JkZXI9cHJlcGFyZVJlY29yZGVyKGJhZ2dhZ2UsbWFyc2hhbGxlcik7XG5yZXR1cm4gZGVmaW5lUmVjb3JkZXJLaXQoe21ha2VEdXJhYmxlUHVibGlzaEtpdCxtYWtlUmVjb3JkZXJ9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLnByZXBhcmVSZWNvcmRlcktpdChwcmVwYXJlUmVjb3JkZXJLaXQpO1xuY29uc3QgICAgICAgIHByZXBhcmVSZWNvcmRlcktpdE1ha2Vycz0oYmFnZ2FnZSxtYXJzaGFsbGVyKT0+e1xuY29uc3QgbWFrZUR1cmFibGVQdWJsaXNoS2l0PXByZXBhcmVEdXJhYmxlUHVibGlzaEtpdChcbmJhZ2dhZ2UsXG4nRHVyYWJsZSBQdWJsaXNoIEtpdCcpO1xuXG5jb25zdCBtYWtlUmVjb3JkZXI9cHJlcGFyZVJlY29yZGVyKGJhZ2dhZ2UsbWFyc2hhbGxlcik7XG5cbmNvbnN0IG1ha2VSZWNvcmRlcktpdD1kZWZpbmVSZWNvcmRlcktpdCh7XG5tYWtlUmVjb3JkZXIsXG5tYWtlRHVyYWJsZVB1Ymxpc2hLaXR9KTtcblxuY29uc3QgbWFrZUVSZWNvcmRlcktpdD1kZWZpbmVFUmVjb3JkZXJLaXQoe1xubWFrZVJlY29yZGVyLFxubWFrZUR1cmFibGVQdWJsaXNoS2l0fSk7XG5cblxucmV0dXJue1xubWFrZUR1cmFibGVQdWJsaXNoS2l0LFxubWFrZVJlY29yZGVyLFxubWFrZVJlY29yZGVyS2l0LFxubWFrZUVSZWNvcmRlcktpdH07XG5cbiB9O1xuXG4vKlxuXG4gKi8kaM2PX29uY2UucHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzKHByZXBhcmVSZWNvcmRlcktpdE1ha2Vycyk7XG5jb25zdCAgICAgICAgcHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2Vycz0oKT0+e1xuY29uc3QgYmFnZ2FnZT1tYWtlU2NhbGFyQmlnTWFwU3RvcmUoJ21vY2sgcmVjb3JkZXIgYmFnZ2FnZScpO1xuY29uc3QgbWFyc2hhbGxlcj1tYWtlRmFrZU1hcnNoYWxsZXIoKTtcbnJldHVybntcbi4uLnByZXBhcmVSZWNvcmRlcktpdE1ha2VycyhiYWdnYWdlLG1hcnNoYWxsZXIpLFxuc3RvcmFnZU5vZGU6bWFrZUZha2VTdG9yYWdlKCdtb2NrIHJlY29yZGVyIHN0b3JhZ2UnKX07XG5cbiB9OyRozY9fb25jZS5wcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzKHByZXBhcmVNb2NrUmVjb3JkZXJLaXRNYWtlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicHJlcGFyZVJlY29yZGVyIjpbInByZXBhcmVSZWNvcmRlciJdLCJkZWZpbmVSZWNvcmRlcktpdCI6WyJkZWZpbmVSZWNvcmRlcktpdCJdLCJkZWZpbmVFUmVjb3JkZXJLaXQiOlsiZGVmaW5lRVJlY29yZGVyS2l0Il0sInByZXBhcmVSZWNvcmRlcktpdCI6WyJwcmVwYXJlUmVjb3JkZXJLaXQiXSwicHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzIjpbInByZXBhcmVSZWNvcmRlcktpdE1ha2VycyJdLCJwcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzIjpbInByZXBhcmVNb2NrUmVjb3JkZXJLaXRNYWtlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA23U6/4gBAACIAQAAJAAAAEBhZ29yaWMvem9uZS12MC4zLjAtdTE4LjEvZHVyYWJsZS5qc3siaW1wb3J0cyI6WyIuL3NyYy9kdXJhYmxlLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZHVyYWJsZS5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZHVyYWJsZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD3utnWChEAAAoRAAAoAAAAQGFnb3JpYy96b25lLXYwLjMuMC11MTguMS9zcmMvZHVyYWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBhZ29yaWMvYmFzZS16b25lIl0sImV4cG9ydHMiOlsibWFrZUR1cmFibGVab25lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRmFyLGlzUGFzc2FibGUsY2FuQmVEdXJhYmxlLG1ha2VTY2FsYXJNYXBTdG9yZSxwcmVwYXJlRXhvLHByZXBhcmVFeG9DbGFzcyxwcmVwYXJlRXhvQ2xhc3NLaXQscHJvdmlkZUR1cmFibGVNYXBTdG9yZSxwcm92aWRlRHVyYWJsZVNldFN0b3JlLHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLHByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlLHdhdGNoUHJvbWlzZSxrZXlzLG1ha2VPbmNlS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImlzUGFzc2FibGVcIiwgWyRozY9fYSA9PiAoaXNQYXNzYWJsZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcImNhbkJlRHVyYWJsZVwiLCBbJGjNj19hID0+IChjYW5CZUR1cmFibGUgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG8gPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzS2l0ID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcm92aWRlRHVyYWJsZVNldFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlU2V0U3RvcmUgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUgPSAkaM2PX2EpXV0sW1wid2F0Y2hQcm9taXNlXCIsIFskaM2PX2EgPT4gKHdhdGNoUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvYmFzZS16b25lXCIsIFtbXCJhZ29yaWNWYXREYXRhS2V5c1wiLCBbJGjNj19hID0+IChrZXlzID0gJGjNj19hKV1dLFtcIm1ha2VPbmNlS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VPbmNlS2l0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzU3RvcmFibGU9KHNwZWNpbWVuKT0+aXNQYXNzYWJsZShzcGVjaW1lbikmJmNhbkJlRHVyYWJsZShzcGVjaW1lbik7XG5oYXJkZW4oaXNTdG9yYWJsZSk7XG5cbi8qXG5cbiAqL1xuY29uc3QgYXR0YWNoRHVyYWJsZVN0b3Jlcz0oZ2V0QmFnZ2FnZSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hcFN0b3JlPShsYWJlbCxvcHRpb25zKT0+e1xuY29uc3QgYmFnZ2FnZT1nZXRCYWdnYWdlKCk7XG5jb25zdCByZXQ9cHJvdmlkZUR1cmFibGVNYXBTdG9yZShiYWdnYWdlLGxhYmVsLG9wdGlvbnMpO1xucmV0dXJuIHJldDtcbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2V0U3RvcmU9KGxhYmVsLG9wdGlvbnMpPT5cbnByb3ZpZGVEdXJhYmxlU2V0U3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdlYWtTZXRTdG9yZT0obGFiZWwsb3B0aW9ucyk9PlxucHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdlYWtNYXBTdG9yZT0obGFiZWwsb3B0aW9ucyk9PlxucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJldHVybiBGYXIoJ2R1cmFibGVTdG9yZXMnLHtcbmRldGFjaGVkOigpPT5kZXRhY2hlZER1cmFibGVTdG9yZXMsXG5pc1N0b3JhYmxlLFxubWFwU3RvcmUsXG5zZXRTdG9yZSxcbndlYWtNYXBTdG9yZSxcbndlYWtTZXRTdG9yZX0pO1xuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZXRhY2hlZER1cmFibGVTdG9yZXM9YXR0YWNoRHVyYWJsZVN0b3JlcygoKT0+XG5tYWtlU2NhbGFyTWFwU3RvcmUoJ2RldGFjaGVkJykpO1xuXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUR1cmFibGVab25lPShiYWdnYWdlLGJhc2VMYWJlbD0nZHVyYWJsZVpvbmUnKT0+e1xuYmFnZ2FnZXx8RmFpbCBgYmFnZ2FnZSByZXF1aXJlZGA7XG5cbmNvbnN0IGF0dGFjaGVkU3RvcmVzPWF0dGFjaER1cmFibGVTdG9yZXMoKCk9PmJhZ2dhZ2UpO1xuXG5jb25zdHttYWtlT25jZSx3cmFwUHJvdmlkZXJ9PW1ha2VPbmNlS2l0KFxuYmFzZUxhYmVsLFxuYXR0YWNoZWRTdG9yZXMsXG5iYWdnYWdlKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBleG9DbGFzcz0oLi4uYXJncyk9PnByZXBhcmVFeG9DbGFzcyhiYWdnYWdlLC4uLmFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8vXG5jb25zdCBleG9DbGFzc0tpdD0oLi4uYXJncyk9PnByZXBhcmVFeG9DbGFzc0tpdChiYWdnYWdlLC4uLmFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGV4bz0oLi4uYXJncyk9PnByZXBhcmVFeG8oYmFnZ2FnZSwuLi5hcmdzKTtcblxuY29uc3Qgc3ViWm9uZVN0b3JlPXdyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy5tYXBTdG9yZSxrZXlzLnpvbmUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN1YlpvbmU9KGxhYmVsLG9wdGlvbnM9e30pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3ViQmFnZ2FnZT1zdWJab25lU3RvcmUobGFiZWwsb3B0aW9ucyk7XG5yZXR1cm4gbWFrZUR1cmFibGVab25lKHN1YkJhZ2dhZ2UsIGAke2Jhc2VMYWJlbH0uJHtsYWJlbH1gKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCdkdXJhYmxlWm9uZScse1xuZXhvOndyYXBQcm92aWRlcihleG8sa2V5cy5leG8pLFxuZXhvQ2xhc3M6d3JhcFByb3ZpZGVyKGV4b0NsYXNzLGtleXMuZXhvQ2xhc3MpLFxuZXhvQ2xhc3NLaXQ6d3JhcFByb3ZpZGVyKGV4b0NsYXNzS2l0LGtleXMuZXhvQ2xhc3NLaXQpLFxuc3ViWm9uZSxcblxubWFrZU9uY2UsXG53YXRjaFByb21pc2UsXG5kZXRhY2hlZDphdHRhY2hlZFN0b3Jlcy5kZXRhY2hlZCxcbmlzU3RvcmFibGU6YXR0YWNoZWRTdG9yZXMuaXNTdG9yYWJsZSxcblxubWFwU3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLm1hcFN0b3JlLGtleXMuc3RvcmUpLFxuc2V0U3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLnNldFN0b3JlLGtleXMuc3RvcmUpLFxud2Vha01hcFN0b3JlOndyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy53ZWFrTWFwU3RvcmUsa2V5cy5zdG9yZSksXG53ZWFrU2V0U3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLndlYWtTZXRTdG9yZSxrZXlzLnN0b3JlKX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUR1cmFibGVab25lKG1ha2VEdXJhYmxlWm9uZSk7XG5oYXJkZW4obWFrZUR1cmFibGVab25lKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VEdXJhYmxlWm9uZSI6WyJtYWtlRHVyYWJsZVpvbmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAVOJbuMcEAADHBAAAKwAAAEBlbmRvL2NvbW1vbi12MS4yLjgvYXBwbHktbGFiZWxpbmctZXJyb3IuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiLi90aHJvdy1sYWJlbGVkLmpzIl0sImV4cG9ydHMiOlsiYXBwbHlMYWJlbGluZ0Vycm9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsaXNQcm9taXNlLHRocm93TGFiZWxlZDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiLi90aHJvdy1sYWJlbGVkLmpzXCIsIFtbXCJ0aHJvd0xhYmVsZWRcIiwgWyRozY9fYSA9PiAodGhyb3dMYWJlbGVkID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFwcGx5TGFiZWxpbmdFcnJvcj0oZnVuYyxhcmdzLGxhYmVsPXVuZGVmaW5lZCk9PntcbmlmKGxhYmVsPT09dW5kZWZpbmVkKXtcbnJldHVybiBmdW5jKC4uLmFyZ3MpO1xuIH1cbmxldCByZXN1bHQ7XG50cnl7XG5yZXN1bHQ9ZnVuYyguLi5hcmdzKTtcbiB9Y2F0Y2goZXJyKXtcbnRocm93TGFiZWxlZChlcnIsbGFiZWwpO1xuIH1cbmlmKGlzUHJvbWlzZShyZXN1bHQpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBFLndoZW4ocmVzdWx0LHVuZGVmaW5lZCwocmVhc29uKT0+dGhyb3dMYWJlbGVkKHJlYXNvbixsYWJlbCkpO1xuIH1lbHNle1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfTskaM2PX29uY2UuYXBwbHlMYWJlbGluZ0Vycm9yKGFwcGx5TGFiZWxpbmdFcnJvcik7XG5oYXJkZW4oYXBwbHlMYWJlbGluZ0Vycm9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFwcGx5TGFiZWxpbmdFcnJvciI6WyJhcHBseUxhYmVsaW5nRXJyb3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkAZXhlwEAABcBAAAKgAAAEBlbmRvL2NvbW1vbi12MS4yLjgvZnJvbS11bmlxdWUtZW50cmllcy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJmcm9tVW5pcXVlRW50cmllcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtmcm9tRW50cmllc309T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZnJvbVVuaXF1ZUVudHJpZXM9KGFsbEVudHJpZXMpPT57XG5jb25zdCBlbnRyaWVzQXJyYXk9Wy4uLmFsbEVudHJpZXNdO1xuY29uc3QgcmVzdWx0PWhhcmRlbihmcm9tRW50cmllcyhlbnRyaWVzQXJyYXkpKTtcbmlmKG93bktleXMocmVzdWx0KS5sZW5ndGg9PT1lbnRyaWVzQXJyYXkubGVuZ3RoKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuY29uc3QgbmFtZXM9bmV3IFNldCgpO1xuZm9yKGNvbnN0W25hbWUsX11vZiBlbnRyaWVzQXJyYXkpe1xuaWYobmFtZXMuaGFzKG5hbWUpKXtcbkZhaWwgYGNvbGxpc2lvbiBvbiBwcm9wZXJ0eSBuYW1lICR7cShuYW1lKX06ICR7ZW50cmllc0FycmF5fWA7XG4gfVxubmFtZXMuYWRkKG5hbWUpO1xuIH1cbnRocm93IEZhaWwgYGludGVybmFsOiBmYWlsZWQgdG8gY3JlYXRlIG9iamVjdCBmcm9tIHVuaXF1ZSBlbnRyaWVzYDtcbiB9OyRozY9fb25jZS5mcm9tVW5pcXVlRW50cmllcyhmcm9tVW5pcXVlRW50cmllcyk7XG5oYXJkZW4oZnJvbVVuaXF1ZUVudHJpZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZnJvbVVuaXF1ZUVudHJpZXMiOlsiZnJvbVVuaXF1ZUVudHJpZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAUXMNpDcCAAA3AgAAJAAAAEBlbmRvL2NvbW1vbi12MS4yLjgvaWRlbnQtY2hlY2tlci5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiaWRlbnRDaGVja2VyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaWRlbnRDaGVja2VyPShjb25kLF9kZXRhaWxzKT0+Y29uZDskaM2PX29uY2UuaWRlbnRDaGVja2VyKGlkZW50Q2hlY2tlcik7XG5oYXJkZW4oaWRlbnRDaGVja2VyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlkZW50Q2hlY2tlciI6WyJpZGVudENoZWNrZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAYVj+hngCAAB4AgAAJgAAAEBlbmRvL2NvbW1vbi12MS4yLjgvbGlzdC1kaWZmZXJlbmNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJsaXN0RGlmZmVyZW5jZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGxpc3REaWZmZXJlbmNlPShsZWZ0TGlzdCxyaWdodExpc3QpPT57XG5jb25zdCByaWdodFNldD1uZXcgU2V0KHJpZ2h0TGlzdCk7XG5yZXR1cm4gbGVmdExpc3QuZmlsdGVyKChlbGVtZW50KT0+IXJpZ2h0U2V0LmhhcyhlbGVtZW50KSk7XG4gfTskaM2PX29uY2UubGlzdERpZmZlcmVuY2UobGlzdERpZmZlcmVuY2UpO1xuaGFyZGVuKGxpc3REaWZmZXJlbmNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Imxpc3REaWZmZXJlbmNlIjpbImxpc3REaWZmZXJlbmNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA+bwKhdAwAAXQMAACoAAABAZW5kby9jb21tb24tdjEuMi44L21ha2UtYXJyYXktaXRlcmF0b3IuanN7ImltcG9ydHMiOlsiLi9tYWtlLWl0ZXJhdG9yLmpzIl0sImV4cG9ydHMiOlsibWFrZUFycmF5SXRlcmF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZUl0ZXJhdG9yOyRozY9faW1wb3J0cyhbW1wiLi9tYWtlLWl0ZXJhdG9yLmpzXCIsIFtbXCJtYWtlSXRlcmF0b3JcIiwgWyRozY9fYSA9PiAobWFrZUl0ZXJhdG9yID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQXJyYXlJdGVyYXRvcj0oYXJyKT0+e1xuY29uc3R7bGVuZ3RofT1hcnI7XG5sZXQgaT0wO1xucmV0dXJuIG1ha2VJdGVyYXRvcigoKT0+e1xuLyogICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoaTxsZW5ndGgpe1xudmFsdWU9YXJyW2ldO1xuaSs9MTtcbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWV9KTtcbiB9XG4vL1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlfSk7XG4gfSk7XG4gfTskaM2PX29uY2UubWFrZUFycmF5SXRlcmF0b3IobWFrZUFycmF5SXRlcmF0b3IpO1xuaGFyZGVuKG1ha2VBcnJheUl0ZXJhdG9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VBcnJheUl0ZXJhdG9yIjpbIm1ha2VBcnJheUl0ZXJhdG9yIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFaLCeM5AgAAOQIAACQAAABAZW5kby9jb21tb24tdjEuMi44L21ha2UtaXRlcmF0b3IuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VJdGVyYXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSXRlcmF0b3I9KG5leHQpPT57XG5jb25zdCBpdGVyPWhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+aXRlcixcbm5leHR9KTtcblxucmV0dXJuIGl0ZXI7XG4gfTskaM2PX29uY2UubWFrZUl0ZXJhdG9yKG1ha2VJdGVyYXRvcik7XG5oYXJkZW4obWFrZUl0ZXJhdG9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VJdGVyYXRvciI6WyJtYWtlSXRlcmF0b3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAArVcGfgIDAAACAwAAIQAAAEBlbmRvL2NvbW1vbi12MS4yLjgvb2JqZWN0LW1hcC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsib2JqZWN0TWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBjb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG9iamVjdE1hcD0ob3JpZ2luYWwsbWFwRm4pPT57XG5jb25zdCBlbnRzPWVudHJpZXMob3JpZ2luYWwpO1xuY29uc3QgbWFwRW50cz1lbnRzLm1hcChcbihbayx2XSk9Pi8qICAgICAgICAgICAgICAgICAgICAgICAqL1trLG1hcEZuKHYsayldKTtcblxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9oYXJkZW4oZnJvbUVudHJpZXMobWFwRW50cykpKTtcbiB9OyRozY9fb25jZS5vYmplY3RNYXAob2JqZWN0TWFwKTtcbmhhcmRlbihvYmplY3RNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsib2JqZWN0TWFwIjpbIm9iamVjdE1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA7n1+O4QMAAOEDAAAmAAAAQGVuZG8vY29tbW9uLXYxLjIuOC9vYmplY3QtbWV0YS1tYXAuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm9iamVjdE1ldGFNYXAiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIGNvbnN0e2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMsY3JlYXRlLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG9iamVjdE1ldGFNYXA9KFxub3JpZ2luYWwsXG5tZXRhTWFwRm4sXG5wcm90bz1PYmplY3QucHJvdG90eXBlKT0+XG57XG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9yaWdpbmFsKTtcbmNvbnN0IGtleXM9b3duS2V5cyhvcmlnaW5hbCk7XG5cbmNvbnN0IGRlc2NFbnRyaWVzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmtleXMuXG5tYXAoKGtleSk9PltrZXksbWV0YU1hcEZuKGRlc2NzW2tleV0sa2V5KV0pLlxuZmlsdGVyKChbX2tleSxvcHREZXNjXSk9Pm9wdERlc2MhPT11bmRlZmluZWQpO1xuXG5yZXR1cm4gaGFyZGVuKGNyZWF0ZShwcm90byxmcm9tRW50cmllcyhkZXNjRW50cmllcykpKTtcbiB9OyRozY9fb25jZS5vYmplY3RNZXRhTWFwKG9iamVjdE1ldGFNYXApO1xuaGFyZGVuKG9iamVjdE1ldGFNYXApO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsib2JqZWN0TWV0YU1hcCI6WyJvYmplY3RNZXRhTWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMICGsvhAwAA4QMAACQAAABAZW5kby9jb21tb24tdjEuMi44L3Rocm93LWxhYmVsZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsidGhyb3dMYWJlbGVkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsbWFrZUVycm9yLGFubm90YXRlRXJyb3I7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRozY9fYSA9PiAobWFrZUVycm9yID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB0aHJvd0xhYmVsZWQ9KFxuaW5uZXJFcnIsXG5sYWJlbCxcbmVyckNvbnN0cnVjdG9yPXVuZGVmaW5lZCxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG57XG5pZih0eXBlb2YgbGFiZWw9PT0nbnVtYmVyJyl7XG5sYWJlbD0gYFske2xhYmVsfV1gO1xuIH1cbmNvbnN0IG91dGVyRXJyPW1ha2VFcnJvcihcbiBgJHtsYWJlbH06ICR7aW5uZXJFcnIubWVzc2FnZX1gLFxuZXJyQ29uc3RydWN0b3IsXG5vcHRpb25zKTtcblxuYW5ub3RhdGVFcnJvcihvdXRlckVycixYIGBDYXVzZWQgYnkgJHtpbm5lckVycn1gKTtcbnRocm93IG91dGVyRXJyO1xuIH07JGjNj19vbmNlLnRocm93TGFiZWxlZCh0aHJvd0xhYmVsZWQpO1xuaGFyZGVuKHRocm93TGFiZWxlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ0aHJvd0xhYmVsZWQiOlsidGhyb3dMYWJlbGVkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMUY5zqUAQAAlAEAACEAAABAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvZW52LW9wdGlvbnMuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9lbnYtb3B0aW9ucy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZW52LW9wdGlvbnMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkrdHfuwNAADsDQAAKwAAAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOC9zcmMvZW52LW9wdGlvbnMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiLCJnZXRFbnZpcm9ubWVudE9wdGlvbiIsImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiLCJtYWtlRW52aXJvbm1lbnRDYXB0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuXG5jb25zdHtmcmVlemV9PU9iamVjdDtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuXG4vL1xuLy9cbmNvbnN0IHVuY3VycnlUaGlzPVxuKGZuKT0+XG4ocmVjZWl2ZXIsLi4uYXJncyk9PlxuYXBwbHkoZm4scmVjZWl2ZXIsYXJncyk7XG5jb25zdCBhcnJheVB1c2g9dW5jdXJyeVRoaXMoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuY29uc3QgYXJyYXlJbmNsdWRlcz11bmN1cnJ5VGhpcyhBcnJheS5wcm90b3R5cGUuaW5jbHVkZXMpO1xuY29uc3Qgc3RyaW5nU3BsaXQ9dW5jdXJyeVRoaXMoU3RyaW5nLnByb3RvdHlwZS5zcGxpdCk7XG5cbmNvbnN0IHE9SlNPTi5zdHJpbmdpZnk7XG5cbmNvbnN0IEZhaWw9KGxpdGVyYWxzLC4uLmFyZ3MpPT57XG5sZXQgbXNnPWxpdGVyYWxzWzBdO1xuZm9yKGxldCBpPTA7aTxhcmdzLmxlbmd0aDtpKz0xKXtcbm1zZz0gYCR7bXNnfSR7YXJnc1tpXX0ke2xpdGVyYWxzW2krMV19YDtcbiB9XG50aHJvdyBFcnJvcihtc2cpO1xuIH07XG5cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW52aXJvbm1lbnRDYXB0b3I9KGFHbG9iYWwsZHJvcE5hbWVzPWZhbHNlKT0+e1xuY29uc3QgY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzPVtdO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBnZXRFbnZpcm9ubWVudE9wdGlvbj0oXG5vcHRpb25OYW1lLFxuZGVmYXVsdFNldHRpbmcsXG5vcHRPdGhlclZhbHVlcz11bmRlZmluZWQpPT5cbntcbnR5cGVvZiBvcHRpb25OYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIG5hbWUgJHtxKG9wdGlvbk5hbWUpfSBtdXN0IGJlIGEgc3RyaW5nLmA7XG50eXBlb2YgZGVmYXVsdFNldHRpbmc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gZGVmYXVsdCBzZXR0aW5nICR7cShcbmRlZmF1bHRTZXR0aW5nKVxuIH0gbXVzdCBiZSBhIHN0cmluZy5gO1xuXG4vKiAgICAgICAgICAgICAgICAgKi9cbmxldCBzZXR0aW5nPWRlZmF1bHRTZXR0aW5nO1xuY29uc3QgZ2xvYmFsUHJvY2Vzcz1hR2xvYmFsLnByb2Nlc3N8fHVuZGVmaW5lZDtcbmNvbnN0IGdsb2JhbEVudj1cbnR5cGVvZiBnbG9iYWxQcm9jZXNzPT09J29iamVjdCcmJmdsb2JhbFByb2Nlc3MuZW52fHx1bmRlZmluZWQ7XG5pZih0eXBlb2YgZ2xvYmFsRW52PT09J29iamVjdCcpe1xuaWYob3B0aW9uTmFtZSBpbiBnbG9iYWxFbnYpe1xuaWYoIWRyb3BOYW1lcyl7XG5hcnJheVB1c2goY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzLG9wdGlvbk5hbWUpO1xuIH1cbmNvbnN0IG9wdGlvblZhbHVlPWdsb2JhbEVudltvcHRpb25OYW1lXTtcbi8vXG50eXBlb2Ygb3B0aW9uVmFsdWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gbmFtZWQgJHtxKFxub3B0aW9uTmFtZSlcbiB9LCBpZiBwcmVzZW50LCBtdXN0IGhhdmUgYSBjb3JyZXNwb25kaW5nIHN0cmluZyB2YWx1ZSwgZ290ICR7cShcbm9wdGlvblZhbHVlKVxuIH1gO1xuc2V0dGluZz1vcHRpb25WYWx1ZTtcbiB9XG4gfVxub3B0T3RoZXJWYWx1ZXM9PT11bmRlZmluZWR8fFxuc2V0dGluZz09PWRlZmF1bHRTZXR0aW5nfHxcbmFycmF5SW5jbHVkZXMob3B0T3RoZXJWYWx1ZXMsc2V0dGluZyl8fFxuRmFpbCBgVW5yZWNvZ25pemVkICR7cShvcHRpb25OYW1lKX0gdmFsdWUgJHtxKFxuc2V0dGluZylcbiB9LiBFeHBlY3RlZCBvbmUgb2YgJHtxKFtkZWZhdWx0U2V0dGluZywuLi5vcHRPdGhlclZhbHVlc10pfWA7XG5yZXR1cm4gc2V0dGluZztcbiB9O1xuZnJlZXplKGdldEVudmlyb25tZW50T3B0aW9uKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdD0ob3B0aW9uTmFtZSk9PntcbmNvbnN0IG9wdGlvbj1nZXRFbnZpcm9ubWVudE9wdGlvbihvcHRpb25OYW1lLCcnKTtcbnJldHVybiBmcmVlemUob3B0aW9uPT09Jyc/W106c3RyaW5nU3BsaXQob3B0aW9uLCcsJykpO1xuIH07XG5mcmVlemUoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCk7XG5cbmNvbnN0IGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXM9KG9wdGlvbk5hbWUsZWxlbWVudCk9PlxuYXJyYXlJbmNsdWRlcyhnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KG9wdGlvbk5hbWUpLGVsZW1lbnQpO1xuXG5jb25zdCBnZXRDYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXM9KCk9PntcbnJldHVybiBmcmVlemUoWy4uLmNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lc10pO1xuIH07XG5mcmVlemUoZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzKTtcblxucmV0dXJuIGZyZWV6ZSh7XG5nZXRFbnZpcm9ubWVudE9wdGlvbixcbmdldEVudmlyb25tZW50T3B0aW9uc0xpc3QsXG5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzLFxuZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlRW52aXJvbm1lbnRDYXB0b3IobWFrZUVudmlyb25tZW50Q2FwdG9yKTtcbmZyZWV6ZShtYWtlRW52aXJvbm1lbnRDYXB0b3IpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAge1xuZ2V0RW52aXJvbm1lbnRPcHRpb24sXG5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0LFxuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhc309XG5tYWtlRW52aXJvbm1lbnRDYXB0b3IoZ2xvYmFsVGhpcyx0cnVlKTskaM2PX29uY2UuZ2V0RW52aXJvbm1lbnRPcHRpb24oZ2V0RW52aXJvbm1lbnRPcHRpb24pOyRozY9fb25jZS5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KGdldEVudmlyb25tZW50T3B0aW9uc0xpc3QpOyRozY9fb25jZS5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUVudmlyb25tZW50Q2FwdG9yIjpbIm1ha2VFbnZpcm9ubWVudENhcHRvciJdLCJnZXRFbnZpcm9ubWVudE9wdGlvbiI6WyJnZXRFbnZpcm9ubWVudE9wdGlvbiJdLCJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0IjpbImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiXSwiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyI6WyJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPxwaTHfBwAA3wcAABwAAABAZW5kby9lcnJvcnMtdjEuMi44L2luZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJGYWlsIiwiWCIsImFubm90YXRlRXJyb3IiLCJhc3NlcnQiLCJiIiwiYmFyZSIsIm1ha2VFcnJvciIsIm5vdGUiLCJxIiwicXVvdGUiLCJyZWRhY3RlZCIsInRocm93UmVkYWN0ZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG5cbmNvbnN0IGdsb2JhbEFzc2VydD1nbG9iYWxUaGlzLmFzc2VydDtcblxuaWYoZ2xvYmFsQXNzZXJ0PT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQsIGltcG9ydCAnc2VzJyBiZWZvcmUgJ0BlbmRvL2Vycm9ycydgKTtcblxuIH1cblxuY29uc3QgbWlzc2luZz0vKiAgICAgICAgICAgICAgICAqL1tcbid0eXBlb2YnLFxuJ2Vycm9yJyxcbidmYWlsJyxcbidlcXVhbCcsXG4nc3RyaW5nJyxcbidub3RlJyxcbidkZXRhaWxzJyxcbidGYWlsJyxcbidxdW90ZScsXG4vL1xuLy9cbi8vXG4vL1xuJ21ha2VBc3NlcnQnXS5cbmZpbHRlcigobmFtZSk9Pmdsb2JhbEFzc2VydFtuYW1lXT09PXVuZGVmaW5lZCk7XG5pZihtaXNzaW5nLmxlbmd0aD4wKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQgbWV0aG9kcyAke21pc3Npbmcuam9pbihcbicsICcpXG4gfWApO1xuXG4gfVxuXG4vL1xuLy9cbi8vXG5jb25zdHtcbmJhcmUsXG5kZXRhaWxzOnJlZGFjdGVkLFxuZXJyb3I6bWFrZUVycm9yLFxuRmFpbDp0aHJvd1JlZGFjdGVkLFxubWFrZUFzc2VydDpfb21pdHRlZE1ha2VBc3NlcnQsXG5ub3RlLFxucXVvdGUsXG4uLi5hc3NlcnRpb25zfT1cbmdsb2JhbEFzc2VydDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbiRozY9fb25jZS5yZWRhY3RlZChyZWRhY3RlZCk7JGjNj19vbmNlLm1ha2VFcnJvcihtYWtlRXJyb3IpOyRozY9fb25jZS50aHJvd1JlZGFjdGVkKHRocm93UmVkYWN0ZWQpOyRozY9fb25jZS5ub3RlKG5vdGUpOyRozY9fb25jZS5xdW90ZShxdW90ZSk7Y29uc3QgYXNzZXJ0PSh2YWx1ZSxvcHREZXRhaWxzLGVyckNvbnRydWN0b3Isb3B0aW9ucyk9PlxuZ2xvYmFsQXNzZXJ0KHZhbHVlLG9wdERldGFpbHMsZXJyQ29udHJ1Y3RvcixvcHRpb25zKTskaM2PX29uY2UuYXNzZXJ0KGFzc2VydCk7XG5PYmplY3QuYXNzaWduKGFzc2VydCxhc3NlcnRpb25zKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgYmFyZU9yUXVvdGU9YmFyZXx8cXVvdGU7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuYmFyZU9yUXVvdGUoYmFyZU9yUXVvdGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVkYWN0ZWQiOlsicmVkYWN0ZWQiXSwiWCI6WyJyZWRhY3RlZCJdLCJtYWtlRXJyb3IiOlsibWFrZUVycm9yIl0sInRocm93UmVkYWN0ZWQiOlsidGhyb3dSZWRhY3RlZCJdLCJGYWlsIjpbInRocm93UmVkYWN0ZWQiXSwibm90ZSI6WyJub3RlIl0sImFubm90YXRlRXJyb3IiOlsibm90ZSJdLCJxdW90ZSI6WyJxdW90ZSJdLCJxIjpbInF1b3RlIl0sImFzc2VydCI6WyJhc3NlcnQiXSwiYmFyZSI6WyJiYXJlT3JRdW90ZSJdLCJiIjpbImJhcmVPclF1b3RlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAH5dVSulEAAApRAAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvRS5qc3siaW1wb3J0cyI6WyIuL3RyYWNrLXR1cm5zLmpzIiwiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCB0cmFja1R1cm5zLG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcjskaM2PX2ltcG9ydHMoW1tcIi4vdHJhY2stdHVybnMuanNcIiwgW1tcInRyYWNrVHVybnNcIiwgWyRozY9fYSA9PiAodHJhY2tUdXJucyA9ICRozY9fYSldXV1dLFtcIi4vbWVzc2FnZS1icmVha3BvaW50cy5qc1wiLCBbW1wibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyXCIsIFskaM2PX2EgPT4gKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuY29uc3R7ZGV0YWlsczpYLHF1b3RlOnEsRmFpbCxlcnJvcjptYWtlRXJyb3J9PWFzc2VydDtcbmNvbnN0e2Fzc2lnbixjcmVhdGV9PU9iamVjdDtcblxuLypcblxuICovXG5cbmNvbnN0IG9uU2VuZD1tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIoJ0VORE9fU0VORF9CUkVBS1BPSU5UUycpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcj17XG5zZXQoX3RhcmdldCxfcHJvcCxfdmFsdWUpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5pc0V4dGVuc2libGUoX3RhcmdldCl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbnNldFByb3RvdHlwZU9mKF90YXJnZXQsX3ZhbHVlKXtcbnJldHVybiBmYWxzZTtcbiB9LFxuZGVsZXRlUHJvcGVydHkoX3RhcmdldCxfcHJvcCl7XG5yZXR1cm4gZmFsc2U7XG4gfX07XG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRVByb3h5SGFuZGxlcj0ocmVjaXBpZW50LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmdldDooX3RhcmdldCxwcm9wZXJ0eUtleSxyZWNlaXZlcik9PntcbnJldHVybiBoYXJkZW4oXG57XG4vL1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bcHJvcGVydHlLZXldKC4uLmFyZ3Mpe1xuaWYodGhpcyE9PXJlY2VpdmVyKXtcbi8vXG5yZXR1cm4gSGFuZGxlZFByb21pc2UucmVqZWN0KFxubWFrZUVycm9yKFxuWCBgVW5leHBlY3RlZCByZWNlaXZlciBmb3IgXCIke3EocHJvcGVydHlLZXkpfVwiIG1ldGhvZCBvZiBFKCR7cShcbnJlY2lwaWVudClcbiB9KWApKTtcblxuXG4gfVxuXG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxwcm9wZXJ0eUtleSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5hcHBseU1ldGhvZChyZWNpcGllbnQscHJvcGVydHlLZXksYXJncyk7XG4gfVxuLy9cbn1bcHJvcGVydHlLZXldKTtcblxuIH0sXG5hcHBseTooX3RhcmdldCxfdGhpc0FyZyxhcmdBcnJheT1bXSk9PntcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4gfVxucmV0dXJuIEhhbmRsZWRQcm9taXNlLmFwcGx5RnVuY3Rpb24ocmVjaXBpZW50LGFyZ0FycmF5KTtcbiB9LFxuaGFzOihfdGFyZ2V0LF9wKT0+e1xuLy9cbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRVNlbmRPbmx5UHJveHlIYW5kbGVyPShyZWNpcGllbnQsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuZ2V0OihfdGFyZ2V0LHByb3BlcnR5S2V5LHJlY2VpdmVyKT0+e1xucmV0dXJuIGhhcmRlbihcbntcbi8vXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuW3Byb3BlcnR5S2V5XSguLi5hcmdzKXtcbi8vXG50aGlzPT09cmVjZWl2ZXJ8fFxuRmFpbCBgVW5leHBlY3RlZCByZWNlaXZlciBmb3IgXCIke3EoXG5wcm9wZXJ0eUtleSlcbiB9XCIgbWV0aG9kIG9mIEUuc2VuZE9ubHkoJHtxKHJlY2lwaWVudCl9KWA7XG5pZihvblNlbmQmJm9uU2VuZC5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxwcm9wZXJ0eUtleSkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbkhhbmRsZWRQcm9taXNlLmFwcGx5TWV0aG9kU2VuZE9ubHkocmVjaXBpZW50LHByb3BlcnR5S2V5LGFyZ3MpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4vL1xufVtwcm9wZXJ0eUtleV0pO1xuXG4gfSxcbmFwcGx5OihfdGFyZ2V0LF90aGlzQXJnLGFyZ3NBcnJheT1bXSk9PntcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4gfVxuSGFuZGxlZFByb21pc2UuYXBwbHlGdW5jdGlvblNlbmRPbmx5KHJlY2lwaWVudCxhcmdzQXJyYXkpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9LFxuaGFzOihfdGFyZ2V0LF9wKT0+e1xuLy9cbnJldHVybiB0cnVlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlRUdldFByb3h5SGFuZGxlcj0oeCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5oYXM6KF90YXJnZXQsX3Byb3ApPT50cnVlLFxuZ2V0OihfdGFyZ2V0LHByb3ApPT5IYW5kbGVkUHJvbWlzZS5nZXQoeCxwcm9wKX0pO1xuXG5cbi8qXG5cbiAqL1xuY29uc3QgbWFrZUU9KEhhbmRsZWRQcm9taXNlKT0+e1xucmV0dXJuIGhhcmRlbihcbmFzc2lnbihcbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAqL1xuLy9cbih4KT0+aGFyZGVuKG5ldyBQcm94eSgoKT0+eyB9LG1ha2VFUHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbmdldDooeCk9PlxuLy9cbmhhcmRlbihcbm5ldyBQcm94eShjcmVhdGUobnVsbCksbWFrZUVHZXRQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcblxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xucmVzb2x2ZTpIYW5kbGVkUHJvbWlzZS5yZXNvbHZlLFxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuc2VuZE9ubHk6KHgpPT5cbi8vXG5oYXJkZW4oXG5uZXcgUHJveHkoKCk9PnsgfSxtYWtlRVNlbmRPbmx5UHJveHlIYW5kbGVyKHgsSGFuZGxlZFByb21pc2UpKSksXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbndoZW46KHgsb25mdWxmaWxsZWQsb25yZWplY3RlZCk9PlxuSGFuZGxlZFByb21pc2UucmVzb2x2ZSh4KS50aGVuKFxuLi4udHJhY2tUdXJucyhbb25mdWxmaWxsZWQsb25yZWplY3RlZF0pKX0pKTtcblxuXG5cblxuIH07XG5cbmNvbnN0e2RlZmF1bHQ6JGPNj19kZWZhdWx0fT17ZGVmYXVsdDptYWtlRX07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVmYXVsdCgkY82PX2RlZmF1bHQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACkAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvZXhwb3J0cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAECDjrKoMAACqDAAAJwAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9sb2NhbC5qc3siaW1wb3J0cyI6WyIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6WyJnZXRNZXRob2ROYW1lcyIsImxvY2FsQXBwbHlGdW5jdGlvbiIsImxvY2FsQXBwbHlNZXRob2QiLCJsb2NhbEdldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI7JGjNj19pbXBvcnRzKFtbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjNj19hID0+IChtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtkZXRhaWxzOlgscXVvdGU6cSxGYWlsfT1hc3NlcnQ7XG5cbmNvbnN0e2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMsZ2V0UHJvdG90eXBlT2YsZnJlZXplfT1PYmplY3Q7XG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuXG5jb25zdCBudHlwZW9mPShzcGVjaW1lbik9PnNwZWNpbWVuPT09bnVsbD8nbnVsbCc6dHlwZW9mIHNwZWNpbWVuO1xuXG5jb25zdCBvbkRlbGl2ZXJ5PW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19ERUxJVkVSWV9CUkVBS1BPSU5UUycpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzT2JqZWN0PSh2YWwpPT5PYmplY3QodmFsKT09PXZhbDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbXBhcmVTdHJpbmdpZmllZD0oYSxiKT0+e1xuaWYodHlwZW9mIGE9PT10eXBlb2YgYil7XG5jb25zdCBsZWZ0PVN0cmluZyhhKTtcbmNvbnN0IHJpZ2h0PVN0cmluZyhiKTtcbi8vXG5yZXR1cm4gbGVmdDxyaWdodD8tMTpsZWZ0PnJpZ2h0PzE6MDtcbiB9XG5pZih0eXBlb2YgYT09PSdzeW1ib2wnKXtcbmFzc2VydCh0eXBlb2YgYj09PSdzdHJpbmcnKTtcbnJldHVybi0xO1xuIH1cbmFzc2VydCh0eXBlb2YgYT09PSdzdHJpbmcnKTtcbmFzc2VydCh0eXBlb2YgYj09PSdzeW1ib2wnKTtcbnJldHVybiAxO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kTmFtZXM9KHZhbCk9PntcbmxldCBsYXllcj12YWw7XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7Ly9cbndoaWxlKGxheWVyIT09bnVsbCYmbGF5ZXIhPT1PYmplY3QucHJvdG90eXBlKXtcbi8vXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGxheWVyKTtcbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoZGVzY3MpKXtcbi8vXG4vL1xuaWYodHlwZW9mIHZhbFtuYW1lXT09PSdmdW5jdGlvbicpe1xubmFtZXMuYWRkKG5hbWUpO1xuIH1cbiB9XG5pZighaXNPYmplY3QodmFsKSl7XG5icmVhaztcbiB9XG5sYXllcj1nZXRQcm90b3R5cGVPZihsYXllcik7XG4gfVxucmV0dXJuIGhhcmRlbihbLi4ubmFtZXNdLnNvcnQoY29tcGFyZVN0cmluZ2lmaWVkKSk7XG4gfTtcbi8vXG4vL1xuJGjNj19vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtmcmVlemUoZ2V0TWV0aG9kTmFtZXMpO1xuXG5jb25zdCAgICAgICAgbG9jYWxBcHBseUZ1bmN0aW9uPShyZWNpcGllbnQsYXJncyk9PntcbnR5cGVvZiByZWNpcGllbnQ9PT0nZnVuY3Rpb24nfHxcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGludm9rZSB0YXJnZXQgYXMgYSBmdW5jdGlvbjsgdHlwZW9mIHRhcmdldCBpcyAke3EoXG5udHlwZW9mKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbmNvbnN0IHJlc3VsdD1hcHBseShyZWNpcGllbnQsdW5kZWZpbmVkLGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5RnVuY3Rpb24obG9jYWxBcHBseUZ1bmN0aW9uKTtcblxuY29uc3QgICAgICAgIGxvY2FsQXBwbHlNZXRob2Q9KHJlY2lwaWVudCxtZXRob2ROYW1lLGFyZ3MpPT57XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkfHxtZXRob2ROYW1lPT09bnVsbCl7XG4vL1xucmV0dXJuIGxvY2FsQXBwbHlGdW5jdGlvbihyZWNpcGllbnQsYXJncyk7XG4gfVxuaWYocmVjaXBpZW50PT09dW5kZWZpbmVkfHxyZWNpcGllbnQ9PT1udWxsKXtcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGRlbGl2ZXIgJHtxKG1ldGhvZE5hbWUpfSB0byB0YXJnZXQ7IHR5cGVvZiB0YXJnZXQgaXMgJHtxKFxubnR5cGVvZihyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuIH1cbmNvbnN0IGZuPXJlY2lwaWVudFttZXRob2ROYW1lXTtcbmlmKGZuPT09dW5kZWZpbmVkKXtcbmFzc2VydC5mYWlsKFxuWCBgdGFyZ2V0IGhhcyBubyBtZXRob2QgJHtxKG1ldGhvZE5hbWUpfSwgaGFzICR7cShcbmdldE1ldGhvZE5hbWVzKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG4gfVxuY29uc3QgZnR5cGU9bnR5cGVvZihmbik7XG50eXBlb2YgZm49PT0nZnVuY3Rpb24nfHxcbkZhaWwgYGludm9rZWQgbWV0aG9kICR7cShtZXRob2ROYW1lKX0gaXMgbm90IGEgZnVuY3Rpb247IGl0IGlzIGEgJHtxKFxuZnR5cGUpXG4gfWA7XG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LG1ldGhvZE5hbWUpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5jb25zdCByZXN1bHQ9YXBwbHkoZm4scmVjaXBpZW50LGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5TWV0aG9kKGxvY2FsQXBwbHlNZXRob2QpO1xuXG5jb25zdCAgICAgICAgbG9jYWxHZXQ9KHQsa2V5KT0+dFtrZXldOyRozY9fb25jZS5sb2NhbEdldChsb2NhbEdldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJsb2NhbEFwcGx5RnVuY3Rpb24iOlsibG9jYWxBcHBseUZ1bmN0aW9uIl0sImxvY2FsQXBwbHlNZXRob2QiOlsibG9jYWxBcHBseU1ldGhvZCJdLCJsb2NhbEdldCI6WyJsb2NhbEdldCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAABjnBM6QwAAOkMAAA1AAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiXSwiZXhwb3J0cyI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZ2V0RW52aXJvbm1lbnRPcHRpb25cIiwgWyRozY9fYSA9PiAoZ2V0RW52aXJvbm1lbnRPcHRpb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtxdW90ZTpxLEZhaWx9PWFzc2VydDtcblxuY29uc3R7aGFzT3duLGZyZWV6ZSxlbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbi8qXG5cblxuXG5cblxuICovXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0IGlzSlNPTlJlY29yZD0odmFsKT0+XG50eXBlb2YgdmFsPT09J29iamVjdCcmJnZhbCE9PW51bGwmJiFBcnJheS5pc0FycmF5KHZhbCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNpbXBsaWZ5VGFnPSh0YWcpPT57XG5mb3IoY29uc3QgcHJlZml4IG9mWydBbGxlZ2VkOiAnLCdEZWJ1Z05hbWU6ICddKXtcbmlmKHRhZy5zdGFydHNXaXRoKHByZWZpeCkpe1xucmV0dXJuIHRhZy5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiB9XG4gfVxucmV0dXJuIHRhZztcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcj0ob3B0aW9uTmFtZSk9PntcbmxldCBicmVha3BvaW50cz1KU09OLnBhcnNlKGdldEVudmlyb25tZW50T3B0aW9uKG9wdGlvbk5hbWUsJ251bGwnKSk7XG5cbmlmKGJyZWFrcG9pbnRzPT09bnVsbCl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgYnJlYWtwb2ludHNUYWJsZTtcblxuY29uc3QgZ2V0QnJlYWtwb2ludHM9KCk9PmJyZWFrcG9pbnRzO1xuZnJlZXplKGdldEJyZWFrcG9pbnRzKTtcblxuY29uc3Qgc2V0QnJlYWtwb2ludHM9KG5ld0JyZWFrcG9pbnRzPWJyZWFrcG9pbnRzKT0+e1xuaXNKU09OUmVjb3JkKG5ld0JyZWFrcG9pbnRzKXx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbiB0byBiZSBhIEpTT04gYnJlYWtwb2ludHMgcmVjb3JkYDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgbmV3QnJlYWtwb2ludHNUYWJsZT17X19wcm90b19fOm51bGx9O1xuXG5mb3IoY29uc3RbdGFnLG1ldGhvZEJQc11vZiBlbnRyaWVzKG5ld0JyZWFrcG9pbnRzKSl7XG50YWc9PT1zaW1wbGlmeVRhZyh0YWcpfHxcbkZhaWwgYEp1c3QgdXNlIHNpbXBsZSB0YWcgJHtxKHNpbXBsaWZ5VGFnKHRhZykpfSByYXRoZXIgdGhhbiAke3EodGFnKX1gO1xuaXNKU09OUmVjb3JkKG1ldGhvZEJQcyl8fFxuRmFpbCBgRXhwZWN0ZWQgJHtxKG9wdGlvbk5hbWUpfSBvcHRpb24ncyAke3EoXG50YWcpXG4gfSB0byBiZSBhIEpTT04gbWV0aG9kcyBicmVha3BvaW50cyByZWNvcmRgO1xuZm9yKGNvbnN0W21ldGhvZE5hbWUsY291bnRdb2YgZW50cmllcyhtZXRob2RCUHMpKXtcbmNvdW50PT09JyonfHxcbnR5cGVvZiBjb3VudD09PSdudW1iZXInJiZcbk51bWJlci5pc1NhZmVJbnRlZ2VyKGNvdW50KSYmXG5jb3VudD49MHx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbidzICR7cSh0YWcpfS4ke3EoXG5tZXRob2ROYW1lKVxuIH0gdG8gYmUgXCIqXCIgb3IgYSBub24tbmVnYXRpdmUgaW50ZWdlcmA7XG5cbmNvbnN0IGNsYXNzQlBzPWhhc093bihuZXdCcmVha3BvaW50c1RhYmxlLG1ldGhvZE5hbWUpP1xubmV3QnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXTpcbm5ld0JyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV09e1xuLy9cbl9fcHJvdG9fXzpudWxsfTtcblxuY2xhc3NCUHNbdGFnXT1jb3VudDtcbiB9XG4gfVxuYnJlYWtwb2ludHM9bmV3QnJlYWtwb2ludHM7XG5icmVha3BvaW50c1RhYmxlPW5ld0JyZWFrcG9pbnRzVGFibGU7XG4gfTtcbmZyZWV6ZShzZXRCcmVha3BvaW50cyk7XG5cbmNvbnN0IHNob3VsZEJyZWFrcG9pbnQ9KHJlY2lwaWVudCxtZXRob2ROYW1lKT0+e1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8bWV0aG9kTmFtZT09PW51bGwpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCBjbGFzc0JQcz1icmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdfHxicmVha3BvaW50c1RhYmxlWycqJ107XG5pZihjbGFzc0JQcz09PXVuZGVmaW5lZCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxubGV0IHRhZz1zaW1wbGlmeVRhZyhyZWNpcGllbnRbU3ltYm9sLnRvU3RyaW5nVGFnXSk7XG5sZXQgY291bnQ9Y2xhc3NCUHNbdGFnXTtcbmlmKGNvdW50PT09dW5kZWZpbmVkKXtcbnRhZz0nKic7XG5jb3VudD1jbGFzc0JQc1t0YWddO1xuaWYoY291bnQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5pZihjb3VudD09PScqJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihjb3VudD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuYXNzZXJ0KHR5cGVvZiBjb3VudD09PSdudW1iZXInJiZjb3VudD49MSk7XG5jbGFzc0JQc1t0YWddPWNvdW50LTE7XG5yZXR1cm4gZmFsc2U7XG4gfTtcbmZyZWV6ZShzaG91bGRCcmVha3BvaW50KTtcblxuY29uc3QgYnJlYWtwb2ludFRlc3Rlcj1mcmVlemUoe1xuZ2V0QnJlYWtwb2ludHMsXG5zZXRCcmVha3BvaW50cyxcbnNob3VsZEJyZWFrcG9pbnR9KTtcblxuYnJlYWtwb2ludFRlc3Rlci5zZXRCcmVha3BvaW50cygpO1xucmV0dXJuIGJyZWFrcG9pbnRUZXN0ZXI7XG4gfTskaM2PX29uY2UubWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3Rlcik7XG5mcmVlemUobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGWy7RTMDAAAzAwAAKQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9uby1zaGltLmpzeyJpbXBvcnRzIjpbIi4vRS5qcyIsIi4vZXhwb3J0cy5qcyJdLCJleHBvcnRzIjpbIkUiLCJIYW5kbGVkUHJvbWlzZSJdLCJyZWV4cG9ydHMiOlsiLi9leHBvcnRzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VFOyRozY9faW1wb3J0cyhbW1wiLi9FLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaM2PX2EgPT4gKG1ha2VFID0gJGjNj19hKV1dXV0sW1wiLi9leHBvcnRzLmpzXCIsIFtdXV0pOyAgIFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgaHA9SGFuZGxlZFByb21pc2U7JGjNj19vbmNlLmhwKGhwKTtcbmNvbnN0ICAgICAgICBFPW1ha2VFKGhwKTskaM2PX29uY2UuRShFKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkhhbmRsZWRQcm9taXNlIjpbImhwIl0sIkUiOlsiRSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACGqKbHXwkAAF8JAAAtAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvc3JjL3RyYWNrLXR1cm5zLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vudi1vcHRpb25zIl0sImV4cG9ydHMiOlsidHJhY2tUdXJucyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dLFtcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRozY9fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxubGV0IGhpZGRlblByaW9yRXJyb3I7XG5sZXQgaGlkZGVuQ3VycmVudFR1cm49MDtcbmxldCBoaWRkZW5DdXJyZW50RXZlbnQ9MDtcblxuLy9cbmNvbnN0IFZFUkJPU0U9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCd0cmFjay10dXJucycpO1xuXG4vL1xuLy9cbmNvbnN0IEVOQUJMRUQ9XG5nZXRFbnZpcm9ubWVudE9wdGlvbignVFJBQ0tfVFVSTlMnLCdkaXNhYmxlZCcsWydlbmFibGVkJ10pPT09J2VuYWJsZWQnO1xuXG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCBhZGRSZWplY3Rpb25Ob3RlPShkZXRhaWxzTm90ZSk9PihyZWFzb24pPT57XG5pZihyZWFzb24gaW5zdGFuY2VvZiBFcnJvcil7XG5nbG9iYWxUaGlzLmFzc2VydC5ub3RlKHJlYXNvbixkZXRhaWxzTm90ZSk7XG4gfVxuaWYoVkVSQk9TRSl7XG5jb25zb2xlLmxvZygnUkVKRUNURUQgYXQgdG9wIG9mIGV2ZW50IGxvb3AnLHJlYXNvbik7XG4gfVxuIH07XG5cbmNvbnN0IHdyYXBGdW5jdGlvbj1cbihmdW5jLHNlbmRpbmdFcnJvcixYKT0+XG4oLi4uYXJncyk9PntcbmhpZGRlblByaW9yRXJyb3I9c2VuZGluZ0Vycm9yO1xuaGlkZGVuQ3VycmVudFR1cm4rPTE7XG5oaWRkZW5DdXJyZW50RXZlbnQ9MDtcbnRyeXtcbmxldCByZXN1bHQ7XG50cnl7XG5yZXN1bHQ9ZnVuYyguLi5hcmdzKTtcbiB9Y2F0Y2goZXJyKXtcbmlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcbmdsb2JhbFRoaXMuYXNzZXJ0Lm5vdGUoXG5lcnIsXG5YIGBUaHJvd24gZnJvbTogJHtoaWRkZW5QcmlvckVycm9yfToke2hpZGRlbkN1cnJlbnRUdXJufS4ke2hpZGRlbkN1cnJlbnRFdmVudH1gKTtcblxuIH1cbmlmKFZFUkJPU0Upe1xuY29uc29sZS5sb2coJ1RIUk9XTiB0byB0b3Agb2YgZXZlbnQgbG9vcCcsZXJyKTtcbiB9XG50aHJvdyBlcnI7XG4gfVxuLy9cbmNvbnN0IGRldGFpbHNOb3RlPVggYFJlamVjdGlvbiBmcm9tOiAke2hpZGRlblByaW9yRXJyb3J9OiR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWA7XG5Qcm9taXNlLnJlc29sdmUocmVzdWx0KS5jYXRjaChhZGRSZWplY3Rpb25Ob3RlKGRldGFpbHNOb3RlKSk7XG5yZXR1cm4gcmVzdWx0O1xuIH1maW5hbGx5e1xuaGlkZGVuUHJpb3JFcnJvcj11bmRlZmluZWQ7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRyYWNrVHVybnM9KGZ1bmNzKT0+e1xuaWYoIUVOQUJMRUR8fHR5cGVvZiBnbG9iYWxUaGlzPT09J3VuZGVmaW5lZCd8fCFnbG9iYWxUaGlzLmFzc2VydCl7XG5yZXR1cm4gZnVuY3M7XG4gfVxuY29uc3R7ZGV0YWlsczpYLG5vdGU6YW5ub3RhdGVFcnJvcn09Z2xvYmFsVGhpcy5hc3NlcnQ7XG5cbmhpZGRlbkN1cnJlbnRFdmVudCs9MTtcbmNvbnN0IHNlbmRpbmdFcnJvcj1FcnJvcihcbiBgRXZlbnQ6ICR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWApO1xuXG5pZihoaWRkZW5QcmlvckVycm9yIT09dW5kZWZpbmVkKXtcbmFubm90YXRlRXJyb3Ioc2VuZGluZ0Vycm9yLFggYENhdXNlZCBieTogJHtoaWRkZW5QcmlvckVycm9yfWApO1xuIH1cblxucmV0dXJuICgvKiAgICAgICAgICAgICovXG5mdW5jcy5tYXAoKGZ1bmMpPT5mdW5jJiZ3cmFwRnVuY3Rpb24oZnVuYyxzZW5kaW5nRXJyb3IsWCkpKTtcblxuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS50cmFja1R1cm5zKHRyYWNrVHVybnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJhY2tUdXJucyI6WyJ0cmFja1R1cm5zIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAD/w5zpWAgAAVgIAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC91dGlscy5qc3siaW1wb3J0cyI6WyIuL3NyYy9sb2NhbC5qcyIsIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9sb2NhbC5qc1wiLCBbXV0sW1wiLi9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2xvY2FsLmpzIjpbWyJnZXRNZXRob2ROYW1lcyIsImdldE1ldGhvZE5hbWVzIl1dLCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjpbWyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiLCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALFYNphSAgAAUgIAABkAAABAZW5kby9leG8tdjEuNS43L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2V4by1tYWtlcnMuanMiLCIuL3NyYy90eXBlcy5qcyIsIi4vc3JjL2dldC1pbnRlcmZhY2UuanMiXSwiZXhwb3J0cyI6W251bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZXhvLW1ha2Vycy5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9leG8tbWFrZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV0sW1wiLi9zcmMvZ2V0LWludGVyZmFjZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2dldC1pbnRlcmZhY2UuanMiOltbIkdFVF9JTlRFUkZBQ0VfR1VBUkQiLCJHRVRfSU5URVJGQUNFX0dVQVJEIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA+gd+91xQAANcUAAAiAAAAQGVuZG8vZXhvLXYxLjUuNy9zcmMvZXhvLW1ha2Vycy5qc3siaW1wb3J0cyI6WyJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIkBlbmRvL2Vudi1vcHRpb25zIiwiQGVuZG8vZXJyb3JzIiwiLi9leG8tdG9vbHMuanMiXSwiZXhwb3J0cyI6WyJkZWZpbmVFeG9DbGFzcyIsImRlZmluZUV4b0NsYXNzS2l0IiwiaW5pdEVtcHR5IiwibWFrZUV4byJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBvYmplY3RNYXAsZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyxGYWlsLHEsZGVmZW5kUHJvdG90eXBlLGRlZmVuZFByb3RvdHlwZUtpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRozY9fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vZXhvLXRvb2xzLmpzXCIsIFtbXCJkZWZlbmRQcm90b3R5cGVcIiwgWyRozY9fYSA9PiAoZGVmZW5kUHJvdG90eXBlID0gJGjNj19hKV1dLFtcImRlZmVuZFByb3RvdHlwZUtpdFwiLCBbJGjNj19hID0+IChkZWZlbmRQcm90b3R5cGVLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtjcmVhdGUsc2VhbCxmcmVlemUsZGVmaW5lUHJvcGVydHksdmFsdWVzfT1PYmplY3Q7XG5cbi8vXG5jb25zdCBMQUJFTF9JTlNUQU5DRVM9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCdsYWJlbC1pbnN0YW5jZXMnKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBtYWtlU2VsZj0ocHJvdG8saW5zdGFuY2VDb3VudCk9PntcbmNvbnN0IHNlbGY9Y3JlYXRlKHByb3RvKTtcbmlmKExBQkVMX0lOU1RBTkNFUyl7XG5kZWZpbmVQcm9wZXJ0eShzZWxmLFN5bWJvbC50b1N0cmluZ1RhZyx7XG52YWx1ZTogYCR7cHJvdG9bU3ltYm9sLnRvU3RyaW5nVGFnXX0jJHtpbnN0YW5jZUNvdW50fWAsXG53cml0YWJsZTpmYWxzZSxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2V9KTtcblxuIH1cbnJldHVybiBoYXJkZW4oc2VsZik7XG4gfTtcblxuY29uc3QgZW1wdHlSZWNvcmQ9aGFyZGVuKHt9KTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaW5pdEVtcHR5PSgpPT5lbXB0eVJlY29yZDtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaW5pdEVtcHR5KGluaXRFbXB0eSk7XG5jb25zdCAgICAgICAgZGVmaW5lRXhvQ2xhc3M9KFxudGFnLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnM9e30pPT5cbntcbmhhcmRlbihtZXRob2RzKTtcbmNvbnN0e1xuZmluaXNoPXVuZGVmaW5lZCxcbnJlY2VpdmVBbXBsaWZpZXI9dW5kZWZpbmVkLFxucmVjZWl2ZUluc3RhbmNlVGVzdGVyPXVuZGVmaW5lZH09XG5vcHRpb25zO1xucmVjZWl2ZUFtcGxpZmllcj09PXVuZGVmaW5lZHx8XG5GYWlsIGBPbmx5IGZhY2V0cyBvZiBhbiBleG8gY2xhc3Mga2l0IGNhbiBiZSBhbXBsaWZpZWQgJHtxKHRhZyl9YDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0TWFwPW5ldyBXZWFrTWFwKCk7XG5jb25zdCBwcm90bz1kZWZlbmRQcm90b3R5cGUoXG50YWcsXG4oc2VsZik9Pi8qICAgICAgICAgICAgICAqL2NvbnRleHRNYXAuZ2V0KHNlbGYpLFxubWV0aG9kcyxcbnRydWUsXG5pbnRlcmZhY2VHdWFyZCk7XG5cbmxldCBpbnN0YW5jZUNvdW50PTA7XG4vKlxuXG4gICAqL1xuY29uc3QgbWFrZUluc3RhbmNlPSguLi5hcmdzKT0+e1xuLy9cbmNvbnN0IHN0YXRlPXNlYWwoaW5pdCguLi5hcmdzKSk7XG5pbnN0YW5jZUNvdW50Kz0xO1xuY29uc3Qgc2VsZj1tYWtlU2VsZihwcm90byxpbnN0YW5jZUNvdW50KTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0PWZyZWV6ZSh7c3RhdGUsc2VsZn0pO1xuY29udGV4dE1hcC5zZXQoc2VsZixjb250ZXh0KTtcbmlmKGZpbmlzaCl7XG5maW5pc2goY29udGV4dCk7XG4gfVxucmV0dXJuIHNlbGY7XG4gfTtcblxuaWYocmVjZWl2ZUluc3RhbmNlVGVzdGVyKXtcbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzSW5zdGFuY2U9KGV4byxmYWNldE5hbWU9dW5kZWZpbmVkKT0+e1xuZmFjZXROYW1lPT09dW5kZWZpbmVkfHxcbkZhaWwgYGZhY2V0TmFtZSBjYW4gb25seSBiZSB1c2VkIHdpdGggYW4gZXhvIGNsYXNzIGtpdDogJHtxKFxudGFnKVxuIH0gaGFzIG5vIGZhY2V0ICR7cShmYWNldE5hbWUpfWA7XG5yZXR1cm4gY29udGV4dE1hcC5oYXMoZXhvKTtcbiB9O1xuaGFyZGVuKGlzSW5zdGFuY2UpO1xucmVjZWl2ZUluc3RhbmNlVGVzdGVyKGlzSW5zdGFuY2UpO1xuIH1cblxucmV0dXJuIGhhcmRlbihtYWtlSW5zdGFuY2UpO1xuIH07JGjNj19vbmNlLmRlZmluZUV4b0NsYXNzKGRlZmluZUV4b0NsYXNzKTtcbmhhcmRlbihkZWZpbmVFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmaW5lRXhvQ2xhc3NLaXQ9KFxudGFnLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxubWV0aG9kc0tpdCxcbm9wdGlvbnM9e30pPT5cbntcbmhhcmRlbihtZXRob2RzS2l0KTtcbmNvbnN0e1xuZmluaXNoPXVuZGVmaW5lZCxcbnJlY2VpdmVBbXBsaWZpZXI9dW5kZWZpbmVkLFxucmVjZWl2ZUluc3RhbmNlVGVzdGVyPXVuZGVmaW5lZH09XG5vcHRpb25zO1xuY29uc3QgY29udGV4dE1hcEtpdD1vYmplY3RNYXAobWV0aG9kc0tpdCwoKT0+bmV3IFdlYWtNYXAoKSk7XG5jb25zdCBnZXRDb250ZXh0S2l0PW9iamVjdE1hcChcbmNvbnRleHRNYXBLaXQsXG4oY29udGV4dE1hcCk9PihmYWNldCk9PmNvbnRleHRNYXAuZ2V0KGZhY2V0KSk7XG5cbmNvbnN0IHByb3RvdHlwZUtpdD1kZWZlbmRQcm90b3R5cGVLaXQoXG50YWcsXG5nZXRDb250ZXh0S2l0LFxubWV0aG9kc0tpdCxcbnRydWUsXG5pbnRlcmZhY2VHdWFyZEtpdCk7XG5cbmxldCBpbnN0YW5jZUNvdW50PTA7XG4vKlxuXG4gICAqL1xuY29uc3QgbWFrZUluc3RhbmNlS2l0PSguLi5hcmdzKT0+e1xuLy9cbmNvbnN0IHN0YXRlPXNlYWwoaW5pdCguLi5hcmdzKSk7XG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29udGV4dD17c3RhdGUsZmFjZXRzOm51bGx9O1xuaW5zdGFuY2VDb3VudCs9MTtcbmNvbnN0IGZhY2V0cz1vYmplY3RNYXAocHJvdG90eXBlS2l0LChwcm90byxmYWNldE5hbWUpPT57XG5jb25zdCBzZWxmPW1ha2VTZWxmKHByb3RvLGluc3RhbmNlQ291bnQpO1xuY29udGV4dE1hcEtpdFtmYWNldE5hbWVdLnNldChzZWxmLGNvbnRleHQpO1xucmV0dXJuIHNlbGY7XG4gfSk7XG5jb250ZXh0LmZhY2V0cz1mYWNldHM7XG4vL1xuZnJlZXplKGNvbnRleHQpO1xuaWYoZmluaXNoKXtcbmZpbmlzaChjb250ZXh0KTtcbiB9XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9jb250ZXh0LmZhY2V0cyk7XG4gfTtcblxuaWYocmVjZWl2ZUFtcGxpZmllcil7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhbXBsaWZ5PShleG9GYWNldCk9PntcbmZvcihjb25zdCBjb250ZXh0TWFwIG9mIHZhbHVlcyhjb250ZXh0TWFwS2l0KSl7XG5pZihjb250ZXh0TWFwLmhhcyhleG9GYWNldCkpe1xuY29uc3R7ZmFjZXRzfT1jb250ZXh0TWFwLmdldChleG9GYWNldCk7XG5yZXR1cm4gZmFjZXRzO1xuIH1cbiB9XG50aHJvdyBGYWlsIGBNdXN0IGJlIGEgZmFjZXQgb2YgJHtxKHRhZyl9OiAke2V4b0ZhY2V0fWA7XG4gfTtcbmhhcmRlbihhbXBsaWZ5KTtcbnJlY2VpdmVBbXBsaWZpZXIoYW1wbGlmeSk7XG4gfVxuXG5pZihyZWNlaXZlSW5zdGFuY2VUZXN0ZXIpe1xuLyogICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNJbnN0YW5jZT0oZXhvRmFjZXQsZmFjZXROYW1lPXVuZGVmaW5lZCk9PntcbmlmKGZhY2V0TmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdmFsdWVzKGNvbnRleHRNYXBLaXQpLnNvbWUoKGNvbnRleHRNYXApPT5cbmNvbnRleHRNYXAuaGFzKGV4b0ZhY2V0KSk7XG5cbiB9XG5hc3NlcnQudHlwZW9mKGZhY2V0TmFtZSwnc3RyaW5nJyk7XG5jb25zdCBjb250ZXh0TWFwPWNvbnRleHRNYXBLaXRbZmFjZXROYW1lXTtcbmNvbnRleHRNYXAhPT11bmRlZmluZWR8fFxuRmFpbCBgZXhvIGNsYXNzIGtpdCAke3EodGFnKX0gaGFzIG5vIGZhY2V0IG5hbWVkICR7cShmYWNldE5hbWUpfWA7XG5yZXR1cm4gY29udGV4dE1hcC5oYXMoZXhvRmFjZXQpO1xuIH07XG5oYXJkZW4oaXNJbnN0YW5jZSk7XG5yZWNlaXZlSW5zdGFuY2VUZXN0ZXIoaXNJbnN0YW5jZSk7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKG1ha2VJbnN0YW5jZUtpdCk7XG4gfTskaM2PX29uY2UuZGVmaW5lRXhvQ2xhc3NLaXQoZGVmaW5lRXhvQ2xhc3NLaXQpO1xuaGFyZGVuKGRlZmluZUV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRXhvPSh0YWcsaW50ZXJmYWNlR3VhcmQsbWV0aG9kcyxvcHRpb25zPXVuZGVmaW5lZCk9PntcbmNvbnN0IG1ha2VJbnN0YW5jZT1kZWZpbmVFeG9DbGFzcyhcbnRhZyxcbmludGVyZmFjZUd1YXJkLFxuaW5pdEVtcHR5LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5yZXR1cm4gbWFrZUluc3RhbmNlKCk7XG4gfTskaM2PX29uY2UubWFrZUV4byhtYWtlRXhvKTtcbmhhcmRlbihtYWtlRXhvKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImluaXRFbXB0eSI6WyJpbml0RW1wdHkiXSwiZGVmaW5lRXhvQ2xhc3MiOlsiZGVmaW5lRXhvQ2xhc3MiXSwiZGVmaW5lRXhvQ2xhc3NLaXQiOlsiZGVmaW5lRXhvQ2xhc3NLaXQiXSwibWFrZUV4byI6WyJtYWtlRXhvIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAM7uWwbmLwAA5i8AACEAAABAZW5kby9leG8tdjEuNS43L3NyYy9leG8tdG9vbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9mYXIiLCJAZW5kby9wYXR0ZXJucyIsIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vZ2V0LWludGVyZmFjZS5qcyJdLCJleHBvcnRzIjpbImRlZmVuZFByb3RvdHlwZSIsImRlZmVuZFByb3RvdHlwZUtpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRNZXRob2ROYW1lcyxoYXNPd25Qcm9wZXJ0eU9mLHRvVGhyb3dhYmxlLEUsRmFyLG11c3RNYXRjaCxNLGlzQXdhaXRBcmdHdWFyZCxpc1Jhd0d1YXJkLGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkLGdldE1ldGhvZEd1YXJkUGF5bG9hZCxnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQsZ2V0Q29weU1hcEVudHJpZXMsbGlzdERpZmZlcmVuY2Usb2JqZWN0TWFwLHEsRmFpbCxHRVRfSU5URVJGQUNFX0dVQVJEOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qc1wiLCBbW1wiZ2V0TWV0aG9kTmFtZXNcIiwgWyRozY9fYSA9PiAoZ2V0TWV0aG9kTmFtZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1widG9UaHJvd2FibGVcIiwgWyRozY9fYSA9PiAodG9UaHJvd2FibGUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcImlzQXdhaXRBcmdHdWFyZFwiLCBbJGjNj19hID0+IChpc0F3YWl0QXJnR3VhcmQgPSAkaM2PX2EpXV0sW1wiaXNSYXdHdWFyZFwiLCBbJGjNj19hID0+IChpc1Jhd0d1YXJkID0gJGjNj19hKV1dLFtcImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkID0gJGjNj19hKV1dLFtcImdldE1ldGhvZEd1YXJkUGF5bG9hZFwiLCBbJGjNj19hID0+IChnZXRNZXRob2RHdWFyZFBheWxvYWQgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCA9ICRozY9fYSldXSxbXCJnZXRDb3B5TWFwRW50cmllc1wiLCBbJGjNj19hID0+IChnZXRDb3B5TWFwRW50cmllcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanNcIiwgW1tcImxpc3REaWZmZXJlbmNlXCIsIFskaM2PX2EgPT4gKGxpc3REaWZmZXJlbmNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjNj19hID0+IChvYmplY3RNYXAgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2dldC1pbnRlcmZhY2UuanNcIiwgW1tcIkdFVF9JTlRFUkZBQ0VfR1VBUkRcIiwgWyRozY9fYSA9PiAoR0VUX0lOVEVSRkFDRV9HVUFSRCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3R7YXBwbHksb3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2RlZmluZVByb3BlcnRpZXMsZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG4gKi9cbmNvbnN0IFJhd01ldGhvZEd1YXJkPU0uY2FsbCgpLnJlc3QoTS5yYXcoKSkucmV0dXJucyhNLnJhdygpKTtcblxuY29uc3QgUkVEQUNURURfUkFXX0FSRz0nPHJlZGFjdGVkIHJhdyBhcmc+JztcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IFBhc3NhYmxlTWV0aG9kR3VhcmQ9TS5jYWxsKCkucmVzdChNLmFueSgpKS5yZXR1cm5zKE0uYW55KCkpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZFN5bmNBcmdzPShzeW5jQXJncyxtYXRjaENvbmZpZyxsYWJlbD11bmRlZmluZWQpPT57XG5jb25zdHtcbmRlY2xhcmVkTGVuLFxuaGFzUmVzdEFyZ0d1YXJkLFxucmVzdEFyZ0d1YXJkSXNSYXcsXG5wYXJhbXNQYXR0ZXJuLFxucmVkYWN0ZWRJbmRpY2VzfT1cbm1hdGNoQ29uZmlnO1xuXG4vL1xuLy9cbmxldCBtYXRjaGFibGVBcmdzPXN5bmNBcmdzO1xuaWYocmVzdEFyZ0d1YXJkSXNSYXcmJnN5bmNBcmdzLmxlbmd0aD5kZWNsYXJlZExlbil7XG5jb25zdCByZXN0TGVuPXN5bmNBcmdzLmxlbmd0aC1kZWNsYXJlZExlbjtcbmNvbnN0IHJlZGFjdGVkUmVzdD1BcnJheShyZXN0TGVuKS5maWxsKFJFREFDVEVEX1JBV19BUkcpO1xubWF0Y2hhYmxlQXJncz1bLi4uc3luY0FyZ3Muc2xpY2UoMCxkZWNsYXJlZExlbiksLi4ucmVkYWN0ZWRSZXN0XTtcbiB9ZWxzZSBpZihcbnJlZGFjdGVkSW5kaWNlcy5sZW5ndGg+MCYmXG5yZWRhY3RlZEluZGljZXNbMF08c3luY0FyZ3MubGVuZ3RoKVxue1xuLy9cbi8vXG5tYXRjaGFibGVBcmdzPVsuLi5zeW5jQXJnc107XG4gfVxuXG5mb3IoY29uc3QgaSBvZiByZWRhY3RlZEluZGljZXMpe1xuaWYoaT49bWF0Y2hhYmxlQXJncy5sZW5ndGgpe1xuYnJlYWs7XG4gfVxubWF0Y2hhYmxlQXJnc1tpXT1SRURBQ1RFRF9SQVdfQVJHO1xuIH1cblxubXVzdE1hdGNoKGhhcmRlbihtYXRjaGFibGVBcmdzKSxwYXJhbXNQYXR0ZXJuLGxhYmVsKTtcblxuaWYoaGFzUmVzdEFyZ0d1YXJkKXtcbnJldHVybiBzeW5jQXJncztcbiB9XG5zeW5jQXJncy5sZW5ndGg8PWRlY2xhcmVkTGVufHxcbkZhaWwgYCR7cShsYWJlbCl9IGFjY2VwdHMgYXQgbW9zdCAke3EoZGVjbGFyZWRMZW4pfSBhcmd1bWVudHMsIG5vdCAke3EoXG5zeW5jQXJncy5sZW5ndGgpXG4gfTogJHtzeW5jQXJnc31gO1xucmV0dXJuIHN5bmNBcmdzO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgYnVpbGRNYXRjaENvbmZpZz0obWV0aG9kR3VhcmRQYXlsb2FkKT0+e1xuY29uc3R7XG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcz1bXSxcbnJlc3RBcmdHdWFyZH09XG5tZXRob2RHdWFyZFBheWxvYWQ7XG5cbmNvbnN0IG1hdGNoYWJsZUFyZ0d1YXJkcz1bLi4uYXJnR3VhcmRzLC4uLm9wdGlvbmFsQXJnR3VhcmRzXTtcblxuY29uc3QgcmVkYWN0ZWRJbmRpY2VzPVtdO1xuZm9yKGxldCBpPTA7aTxtYXRjaGFibGVBcmdHdWFyZHMubGVuZ3RoO2krPTEpe1xuaWYoaXNSYXdHdWFyZChtYXRjaGFibGVBcmdHdWFyZHNbaV0pKXtcbm1hdGNoYWJsZUFyZ0d1YXJkc1tpXT1SRURBQ1RFRF9SQVdfQVJHO1xucmVkYWN0ZWRJbmRpY2VzLnB1c2goaSk7XG4gfVxuIH1cblxuLy9cbmxldCBtYXRjaGFibGVSZXN0QXJnR3VhcmQ9cmVzdEFyZ0d1YXJkO1xuaWYoaXNSYXdHdWFyZChtYXRjaGFibGVSZXN0QXJnR3VhcmQpKXtcbm1hdGNoYWJsZVJlc3RBcmdHdWFyZD1NLmFycmF5T2YoUkVEQUNURURfUkFXX0FSRyk7XG4gfVxuY29uc3QgbWF0Y2hhYmxlTWV0aG9kR3VhcmRQYXlsb2FkPWhhcmRlbih7XG4uLi5tZXRob2RHdWFyZFBheWxvYWQsXG5hcmdHdWFyZHM6bWF0Y2hhYmxlQXJnR3VhcmRzLnNsaWNlKDAsYXJnR3VhcmRzLmxlbmd0aCksXG5vcHRpb25hbEFyZ0d1YXJkczptYXRjaGFibGVBcmdHdWFyZHMuc2xpY2UoYXJnR3VhcmRzLmxlbmd0aCksXG5yZXN0QXJnR3VhcmQ6bWF0Y2hhYmxlUmVzdEFyZ0d1YXJkfSk7XG5cblxuY29uc3QgcGFyYW1zUGF0dGVybj1NLnNwbGl0QXJyYXkoXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQuYXJnR3VhcmRzLFxubWF0Y2hhYmxlTWV0aG9kR3VhcmRQYXlsb2FkLm9wdGlvbmFsQXJnR3VhcmRzLFxubWF0Y2hhYmxlTWV0aG9kR3VhcmRQYXlsb2FkLnJlc3RBcmdHdWFyZCk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5kZWNsYXJlZExlbjptYXRjaGFibGVBcmdHdWFyZHMubGVuZ3RoLFxuaGFzUmVzdEFyZ0d1YXJkOnJlc3RBcmdHdWFyZCE9PXVuZGVmaW5lZCxcbnJlc3RBcmdHdWFyZElzUmF3OnJlc3RBcmdHdWFyZCE9PW1hdGNoYWJsZVJlc3RBcmdHdWFyZCxcbnBhcmFtc1BhdHRlcm4sXG5yZWRhY3RlZEluZGljZXMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWR9KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRTeW5jTWV0aG9kPShcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKT0+XG57XG5jb25zdHtyZXR1cm5HdWFyZH09bWV0aG9kR3VhcmRQYXlsb2FkO1xuY29uc3QgaXNSYXdSZXR1cm49aXNSYXdHdWFyZChyZXR1cm5HdWFyZCk7XG5jb25zdCBtYXRjaENvbmZpZz1idWlsZE1hdGNoQ29uZmlnKG1ldGhvZEd1YXJkUGF5bG9hZCk7XG5jb25zdHtzeW5jTWV0aG9kfT17XG4vL1xuc3luY01ldGhvZCguLi5zeW5jQXJncyl7XG50cnl7XG5jb25zdCBjb250ZXh0PWdldENvbnRleHQodGhpcyk7XG4vL1xuY29uc3QgcmVhbEFyZ3M9ZGVmZW5kU3luY0FyZ3Moc3luY0FyZ3MsbWF0Y2hDb25maWcsbGFiZWwpO1xuY29uc3QgcmVzdWx0PWFwcGx5KGJlaGF2aW9yTWV0aG9kLGNvbnRleHQscmVhbEFyZ3MpO1xuaWYoIWlzUmF3UmV0dXJuKXtcbm11c3RNYXRjaChoYXJkZW4ocmVzdWx0KSxyZXR1cm5HdWFyZCwgYCR7bGFiZWx9OiByZXN1bHRgKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1jYXRjaCh0aHJvd25UaGluZyl7XG50aHJvdyB0b1Rocm93YWJsZSh0aHJvd25UaGluZyk7XG4gfVxuIH19O1xuXG5yZXR1cm4gc3luY01ldGhvZDtcbiB9O1xuXG4vKlxuXG4gKi9cbmNvbnN0IGRlc3luYz0obWV0aG9kR3VhcmRQYXlsb2FkKT0+e1xuY29uc3R7XG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcz1bXSxcbnJlc3RBcmdHdWFyZH09XG5tZXRob2RHdWFyZFBheWxvYWQ7XG4haXNBd2FpdEFyZ0d1YXJkKHJlc3RBcmdHdWFyZCl8fFxuRmFpbCBgUmVzdCBhcmdzIG1heSBub3QgYmUgYXdhaXRlZDogJHtyZXN0QXJnR3VhcmR9YDtcbmNvbnN0IHJhd0FyZ0d1YXJkcz1bLi4uYXJnR3VhcmRzLC4uLm9wdGlvbmFsQXJnR3VhcmRzXTtcblxuY29uc3QgYXdhaXRJbmRleGVzPVtdO1xuZm9yKGxldCBpPTA7aTxyYXdBcmdHdWFyZHMubGVuZ3RoO2krPTEpe1xuY29uc3QgYXJnR3VhcmQ9cmF3QXJnR3VhcmRzW2ldO1xuaWYoaXNBd2FpdEFyZ0d1YXJkKGFyZ0d1YXJkKSl7XG5yYXdBcmdHdWFyZHNbaV09Z2V0QXdhaXRBcmdHdWFyZFBheWxvYWQoYXJnR3VhcmQpLmFyZ0d1YXJkO1xuYXdhaXRJbmRleGVzLnB1c2goaSk7XG4gfVxuIH1cbnJldHVybntcbmF3YWl0SW5kZXhlcyxcbnJhd01ldGhvZEd1YXJkUGF5bG9hZDp7XG4uLi5tZXRob2RHdWFyZFBheWxvYWQsXG5hcmdHdWFyZHM6cmF3QXJnR3VhcmRzLnNsaWNlKDAsYXJnR3VhcmRzLmxlbmd0aCksXG5vcHRpb25hbEFyZ0d1YXJkczpyYXdBcmdHdWFyZHMuc2xpY2UoYXJnR3VhcmRzLmxlbmd0aCl9fTtcblxuXG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRBc3luY01ldGhvZD0oXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk9Plxue1xuY29uc3R7cmV0dXJuR3VhcmR9PW1ldGhvZEd1YXJkUGF5bG9hZDtcbmNvbnN0IGlzUmF3UmV0dXJuPWlzUmF3R3VhcmQocmV0dXJuR3VhcmQpO1xuXG5jb25zdHthd2FpdEluZGV4ZXMscmF3TWV0aG9kR3VhcmRQYXlsb2FkfT1kZXN5bmMobWV0aG9kR3VhcmRQYXlsb2FkKTtcbmNvbnN0IG1hdGNoQ29uZmlnPWJ1aWxkTWF0Y2hDb25maWcocmF3TWV0aG9kR3VhcmRQYXlsb2FkKTtcblxuY29uc3R7YXN5bmNNZXRob2R9PXtcbi8vXG5hc3luY01ldGhvZCguLi5hcmdzKXtcbmNvbnN0IGF3YWl0TGlzdD1bXTtcbmZvcihjb25zdCBpIG9mIGF3YWl0SW5kZXhlcyl7XG5pZihpPj1hcmdzLmxlbmd0aCl7XG5icmVhaztcbiB9XG5hd2FpdExpc3QucHVzaChhcmdzW2ldKTtcbiB9XG5jb25zdCBwPVByb21pc2UuYWxsKGF3YWl0TGlzdCk7XG5jb25zdCBzeW5jQXJncz1bLi4uYXJnc107XG5jb25zdCByZXN1bHRQPUUud2hlbihcbnAsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8oYXdhaXRlZEFyZ3MpPT57XG5mb3IobGV0IGo9MDtqPGF3YWl0ZWRBcmdzLmxlbmd0aDtqKz0xKXtcbnN5bmNBcmdzW2F3YWl0SW5kZXhlc1tqXV09YXdhaXRlZEFyZ3Nbal07XG4gfVxuLy9cbi8vXG5jb25zdCBjb250ZXh0PWdldENvbnRleHQodGhpcyk7XG5jb25zdCByZWFsQXJncz1kZWZlbmRTeW5jQXJncyhzeW5jQXJncyxtYXRjaENvbmZpZyxsYWJlbCk7XG5yZXR1cm4gYXBwbHkoYmVoYXZpb3JNZXRob2QsY29udGV4dCxyZWFsQXJncyk7XG4gfSk7XG5cbnJldHVybiBFLndoZW4ocmVzdWx0UCwoZnVsZmlsbG1lbnQpPT57XG5pZighaXNSYXdSZXR1cm4pe1xubXVzdE1hdGNoKGhhcmRlbihmdWxmaWxsbWVudCkscmV0dXJuR3VhcmQsIGAke2xhYmVsfTogcmVzdWx0YCk7XG4gfVxucmV0dXJuIGZ1bGZpbGxtZW50O1xuIH0pLmNhdGNoKChyZWFzb24pPT5cbi8vXG4vL1xuUHJvbWlzZS5yZWplY3QodG9UaHJvd2FibGUocmVhc29uKSkpO1xuXG4gfX07XG5cbnJldHVybiBhc3luY01ldGhvZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgZGVmZW5kTWV0aG9kPShnZXRDb250ZXh0LGJlaGF2aW9yTWV0aG9kLG1ldGhvZEd1YXJkLGxhYmVsKT0+e1xuY29uc3QgbWV0aG9kR3VhcmRQYXlsb2FkPWdldE1ldGhvZEd1YXJkUGF5bG9hZChtZXRob2RHdWFyZCk7XG5jb25zdHtjYWxsS2luZH09bWV0aG9kR3VhcmRQYXlsb2FkO1xuaWYoY2FsbEtpbmQ9PT0nc3luYycpe1xucmV0dXJuIGRlZmVuZFN5bmNNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk7XG5cbiB9ZWxzZXtcbmFzc2VydChjYWxsS2luZD09PSdhc3luYycpO1xucmV0dXJuIGRlZmVuZEFzeW5jTWV0aG9kKFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmRQYXlsb2FkLFxubGFiZWwpO1xuXG4gfVxuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgYmluZE1ldGhvZD0oXG5tZXRob2RUYWcsXG5jb250ZXh0UHJvdmlkZXIsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkKT0+XG57XG5hc3NlcnQudHlwZW9mKGJlaGF2aW9yTWV0aG9kLCdmdW5jdGlvbicpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBnZXRDb250ZXh0PShyZXByZXNlbnRhdGl2ZSk9PntcbnJlcHJlc2VudGF0aXZlfHxcbi8vXG5GYWlsIGBNZXRob2QgJHttZXRob2RUYWd9IGNhbGxlZCB3aXRob3V0ICd0aGlzJyBvYmplY3RgO1xuY29uc3QgY29udGV4dD1jb250ZXh0UHJvdmlkZXIocmVwcmVzZW50YXRpdmUpO1xuaWYoY29udGV4dD09PXVuZGVmaW5lZCl7XG50aHJvdyBGYWlsIGAke3EoXG5tZXRob2RUYWcpXG4gfSBtYXkgb25seSBiZSBhcHBsaWVkIHRvIGEgdmFsaWQgaW5zdGFuY2U6ICR7cmVwcmVzZW50YXRpdmV9YDtcbiB9XG5yZXR1cm4gY29udGV4dDtcbiB9O1xuXG5jb25zdCBtZXRob2Q9ZGVmZW5kTWV0aG9kKFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmQsXG5tZXRob2RUYWcpO1xuXG5cbmRlZmluZVByb3BlcnRpZXMobWV0aG9kLHtcbm5hbWU6e3ZhbHVlOm1ldGhvZFRhZ30sXG5sZW5ndGg6e3ZhbHVlOmJlaGF2aW9yTWV0aG9kLmxlbmd0aH19KTtcblxucmV0dXJuIG1ldGhvZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmZW5kUHJvdG90eXBlPShcbnRhZyxcbmNvbnRleHRQcm92aWRlcixcbmJlaGF2aW9yTWV0aG9kcyxcbnRoaXNmdWxNZXRob2RzPWZhbHNlLFxuaW50ZXJmYWNlR3VhcmQ9dW5kZWZpbmVkKT0+XG57XG5jb25zdCBwcm90b3R5cGU9e307XG5jb25zdCBtZXRob2ROYW1lcz1nZXRNZXRob2ROYW1lcyhiZWhhdmlvck1ldGhvZHMpLmZpbHRlcihcbi8vXG4vL1xuKGtleSk9PntcbmlmKGtleSE9PSdjb25zdHJ1Y3Rvcicpe1xucmV0dXJuIHRydWU7XG4gfVxuY29uc3QgY29uc3RydWN0b3I9YmVoYXZpb3JNZXRob2RzLmNvbnN0cnVjdG9yO1xucmV0dXJuIShcbmNvbnN0cnVjdG9yLnByb3RvdHlwZSYmXG5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuY29uc3RydWN0b3I9PT1jb25zdHJ1Y3Rvcik7XG5cbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBtZXRob2RHdWFyZHM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGRlZmF1bHRHdWFyZHM7XG5pZihpbnRlcmZhY2VHdWFyZCl7XG5jb25zdHtcbmludGVyZmFjZU5hbWUsXG5tZXRob2RHdWFyZHM6bWcsXG5zeW1ib2xNZXRob2RHdWFyZHMsXG5zbG9wcHksXG5kZWZhdWx0R3VhcmRzOmRnPXNsb3BweT8ncGFzc2FibGUnOmRlZmF1bHRHdWFyZHN9PVxuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKGludGVyZmFjZUd1YXJkKTtcbm1ldGhvZEd1YXJkcz1oYXJkZW4oe1xuLi4ubWcsXG4uLi4oc3ltYm9sTWV0aG9kR3VhcmRzJiZcbmZyb21FbnRyaWVzKGdldENvcHlNYXBFbnRyaWVzKHN5bWJvbE1ldGhvZEd1YXJkcykpKX0pO1xuXG5kZWZhdWx0R3VhcmRzPWRnO1xue1xuY29uc3QgbWV0aG9kR3VhcmROYW1lcz1vd25LZXlzKG1ldGhvZEd1YXJkcyk7XG5jb25zdCB1bmltcGxlbWVudGVkPWxpc3REaWZmZXJlbmNlKG1ldGhvZEd1YXJkTmFtZXMsbWV0aG9kTmFtZXMpO1xudW5pbXBsZW1lbnRlZC5sZW5ndGg9PT0wfHxcbkZhaWwgYG1ldGhvZHMgJHtxKHVuaW1wbGVtZW50ZWQpfSBub3QgaW1wbGVtZW50ZWQgYnkgJHtxKHRhZyl9YDtcbmlmKGRlZmF1bHRHdWFyZHM9PT11bmRlZmluZWQpe1xuY29uc3QgdW5ndWFyZGVkPWxpc3REaWZmZXJlbmNlKG1ldGhvZE5hbWVzLG1ldGhvZEd1YXJkTmFtZXMpO1xudW5ndWFyZGVkLmxlbmd0aD09PTB8fFxuRmFpbCBgbWV0aG9kcyAke3EodW5ndWFyZGVkKX0gbm90IGd1YXJkZWQgYnkgJHtxKGludGVyZmFjZU5hbWUpfWA7XG4gfVxuIH1cbiB9XG5cbmZvcihjb25zdCBwcm9wIG9mIG1ldGhvZE5hbWVzKXtcbmNvbnN0IG9yaWdpbmFsTWV0aG9kPWJlaGF2aW9yTWV0aG9kc1twcm9wXTtcbmNvbnN0e3NoaWZ0ZWRNZXRob2R9PXtcbnNoaWZ0ZWRNZXRob2QoLi4uYXJncyl7XG5yZXR1cm4gb3JpZ2luYWxNZXRob2QodGhpcywuLi5hcmdzKTtcbiB9fTtcblxuY29uc3QgYmVoYXZpb3JNZXRob2Q9dGhpc2Z1bE1ldGhvZHM/b3JpZ2luYWxNZXRob2Q6c2hpZnRlZE1ldGhvZDtcbi8vXG4vL1xubGV0IG1ldGhvZEd1YXJkPW1ldGhvZEd1YXJkcyYmbWV0aG9kR3VhcmRzW3Byb3BdO1xuaWYoIW1ldGhvZEd1YXJkKXtcbnN3aXRjaChkZWZhdWx0R3VhcmRzKXtcbmNhc2UgdW5kZWZpbmVkOntcbmlmKHRoaXNmdWxNZXRob2RzKXtcbm1ldGhvZEd1YXJkPVBhc3NhYmxlTWV0aG9kR3VhcmQ7XG4gfWVsc2V7XG5tZXRob2RHdWFyZD1SYXdNZXRob2RHdWFyZDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3Bhc3NhYmxlJzp7XG5tZXRob2RHdWFyZD1QYXNzYWJsZU1ldGhvZEd1YXJkO1xuYnJlYWs7XG4gfVxuY2FzZSdyYXcnOntcbm1ldGhvZEd1YXJkPVJhd01ldGhvZEd1YXJkO1xuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgZGVmYXVsdEd1YXJkcyAke3EoZGVmYXVsdEd1YXJkcyl9YDtcbiB9fVxuXG4gfVxucHJvdG90eXBlW3Byb3BdPWJpbmRNZXRob2QoXG4gYEluICR7cShwcm9wKX0gbWV0aG9kIG9mICgke3RhZ30pYCxcbmNvbnRleHRQcm92aWRlcixcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmQpO1xuXG4gfVxuXG5pZighaGFzT3duUHJvcGVydHlPZihwcm90b3R5cGUsR0VUX0lOVEVSRkFDRV9HVUFSRCkpe1xuY29uc3QgZ2V0SW50ZXJmYWNlR3VhcmRNZXRob2Q9e1xuW0dFVF9JTlRFUkZBQ0VfR1VBUkRdKCl7XG4vL1xucmV0dXJuIGludGVyZmFjZUd1YXJkO1xuIH19W1xuR0VUX0lOVEVSRkFDRV9HVUFSRF07XG5wcm90b3R5cGVbR0VUX0lOVEVSRkFDRV9HVUFSRF09YmluZE1ldGhvZChcbiBgSW4gJHtxKEdFVF9JTlRFUkZBQ0VfR1VBUkQpfSBtZXRob2Qgb2YgKCR7dGFnfSlgLFxuY29udGV4dFByb3ZpZGVyLFxuZ2V0SW50ZXJmYWNlR3VhcmRNZXRob2QsXG5QYXNzYWJsZU1ldGhvZEd1YXJkKTtcblxuIH1cblxucmV0dXJuIEZhcihcbnRhZyxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wcm90b3R5cGUpO1xuXG5cbiB9OyRozY9fb25jZS5kZWZlbmRQcm90b3R5cGUoZGVmZW5kUHJvdG90eXBlKTtcbmhhcmRlbihkZWZlbmRQcm90b3R5cGUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmZW5kUHJvdG90eXBlS2l0PShcbnRhZyxcbmNvbnRleHRQcm92aWRlcktpdCxcbmJlaGF2aW9yTWV0aG9kc0tpdCxcbnRoaXNmdWxNZXRob2RzPWZhbHNlLFxuaW50ZXJmYWNlR3VhcmRLaXQ9dW5kZWZpbmVkKT0+XG57XG5jb25zdCBmYWNldE5hbWVzPW93bktleXMoYmVoYXZpb3JNZXRob2RzS2l0KS5zb3J0KCk7XG5mYWNldE5hbWVzLmxlbmd0aD4xfHxGYWlsIGBBIG11bHRpLWZhY2V0IG9iamVjdCBtdXN0IGhhdmUgbXVsdGlwbGUgZmFjZXRzYDtcbmlmKGludGVyZmFjZUd1YXJkS2l0KXtcbmNvbnN0IGludGVyZmFjZU5hbWVzPW93bktleXMoaW50ZXJmYWNlR3VhcmRLaXQpO1xuY29uc3QgZXh0cmFJbnRlcmZhY2VOYW1lcz1saXN0RGlmZmVyZW5jZShmYWNldE5hbWVzLGludGVyZmFjZU5hbWVzKTtcbmV4dHJhSW50ZXJmYWNlTmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBJbnRlcmZhY2VzICR7cShleHRyYUludGVyZmFjZU5hbWVzKX0gbm90IGltcGxlbWVudGVkIGJ5ICR7cSh0YWcpfWA7XG5jb25zdCBleHRyYUZhY2V0TmFtZXM9bGlzdERpZmZlcmVuY2UoaW50ZXJmYWNlTmFtZXMsZmFjZXROYW1lcyk7XG5leHRyYUZhY2V0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBGYWNldHMgJHtxKGV4dHJhRmFjZXROYW1lcyl9IG9mICR7cSh0YWcpfSBub3QgZ3VhcmRlZCBieSBpbnRlcmZhY2VzYDtcbiB9XG5jb25zdCBjb250ZXh0TWFwTmFtZXM9b3duS2V5cyhjb250ZXh0UHJvdmlkZXJLaXQpO1xuY29uc3QgZXh0cmFDb250ZXh0TmFtZXM9bGlzdERpZmZlcmVuY2UoZmFjZXROYW1lcyxjb250ZXh0TWFwTmFtZXMpO1xuZXh0cmFDb250ZXh0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBDb250ZXh0cyAke3EoZXh0cmFDb250ZXh0TmFtZXMpfSBub3QgaW1wbGVtZW50ZWQgYnkgJHtxKHRhZyl9YDtcbmNvbnN0IGV4dHJhRmFjZXROYW1lcz1saXN0RGlmZmVyZW5jZShjb250ZXh0TWFwTmFtZXMsZmFjZXROYW1lcyk7XG5leHRyYUZhY2V0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBGYWNldHMgJHtxKGV4dHJhRmFjZXROYW1lcyl9IG9mICR7cSh0YWcpfSBtaXNzaW5nIGNvbnRleHRzYDtcbmNvbnN0IHByb3RvS2l0PW9iamVjdE1hcChiZWhhdmlvck1ldGhvZHNLaXQsKGJlaGF2aW9yTWV0aG9kcyxmYWNldE5hbWUpPT5cbmRlZmVuZFByb3RvdHlwZShcbiBgJHt0YWd9ICR7U3RyaW5nKGZhY2V0TmFtZSl9YCxcbmNvbnRleHRQcm92aWRlcktpdFtmYWNldE5hbWVdLFxuYmVoYXZpb3JNZXRob2RzLFxudGhpc2Z1bE1ldGhvZHMsXG5pbnRlcmZhY2VHdWFyZEtpdCYmaW50ZXJmYWNlR3VhcmRLaXRbZmFjZXROYW1lXSkpO1xuXG5cbnJldHVybiBwcm90b0tpdDtcbiB9OyRozY9fb25jZS5kZWZlbmRQcm90b3R5cGVLaXQoZGVmZW5kUHJvdG90eXBlS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmVuZFByb3RvdHlwZSI6WyJkZWZlbmRQcm90b3R5cGUiXSwiZGVmZW5kUHJvdG90eXBlS2l0IjpbImRlZmVuZFByb3RvdHlwZUtpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABGkzxuNgIAADYCAAAlAAAAQGVuZG8vZXhvLXYxLjUuNy9zcmMvZ2V0LWludGVyZmFjZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiR0VUX0lOVEVSRkFDRV9HVUFSRCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBHRVRfSU5URVJGQUNFX0dVQVJEPSdfX2dldEludGVyZmFjZUd1YXJkX18nO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuR0VUX0lOVEVSRkFDRV9HVUFSRChHRVRfSU5URVJGQUNFX0dVQVJEKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkdFVF9JTlRFUkZBQ0VfR1VBUkQiOlsiR0VUX0lOVEVSRkFDRV9HVUFSRCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAdAAAAQGVuZG8vZXhvLXYxLjUuNy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAtKmDhWAgAAVgIAAB0AAABAZW5kby9mYXItdjEuMS45L3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcGFzcy1zdHlsZSJdLCJleHBvcnRzIjpbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7IkBlbmRvL2V2ZW50dWFsLXNlbmQiOltbIkUiLCJFIl1dLCJAZW5kby9wYXNzLXN0eWxlIjpbWyJGYXIiLCJGYXIiXSxbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXSxbInBhc3NTdHlsZU9mIiwicGFzc1N0eWxlT2YiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALiBafB0BwAAdAcAAB0AAABAZW5kby9tYXJzaGFsLXYxLjYuMi9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiLCIuL3NyYy9tYXJzaGFsLmpzIiwiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiLCIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qcyIsIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzIiwiLi9zcmMvcmFua09yZGVyLmpzIiwiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9wYXNzLXN0eWxlIl0sImV4cG9ydHMiOlsiYXNzZXJ0UmFua1NvcnRlZCIsImFzc2VydFJhbmtTb3J0ZWQiLCJtYWtlRW5jb2RlUGFzc2FibGUiLCJtYWtlRW5jb2RlUGFzc2FibGUiLCJwYXJzZSIsInBhcnNlIixudWxsLG51bGwsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vc3JjL3R5cGVzLmpzIiwiQGVuZG8vcGFzcy1zdHlsZSJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzXCIsIFtdXSxbXCIuL3NyYy9tYXJzaGFsLmpzXCIsIFtdXSxbXCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qc1wiLCBbXV0sW1wiLi9zcmMvbWFyc2hhbC1qdXN0aW4uanNcIiwgW11dLFtcIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzXCIsIFtdXSxbXCIuL3NyYy9yYW5rT3JkZXIuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzIjpbWyJRQ0xBU1MiLCJRQ0xBU1MiXV0sIi4vc3JjL21hcnNoYWwuanMiOltbIm1ha2VNYXJzaGFsIiwibWFrZU1hcnNoYWwiXV0sIi4vc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzIjpbWyJzdHJpbmdpZnkiLCJzdHJpbmdpZnkiXSxbInBhcnNlIiwicGFyc2UiXV0sIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIjpbWyJkZWNvZGVUb0p1c3RpbiIsImRlY29kZVRvSnVzdGluIl1dLCIuL3NyYy9lbmNvZGVQYXNzYWJsZS5qcyI6W1sibWFrZVBhc3NhYmxlS2l0IiwibWFrZVBhc3NhYmxlS2l0Il0sWyJtYWtlRW5jb2RlUGFzc2FibGUiLCJtYWtlRW5jb2RlUGFzc2FibGUiXSxbIm1ha2VEZWNvZGVQYXNzYWJsZSIsIm1ha2VEZWNvZGVQYXNzYWJsZSJdLFsiaXNFbmNvZGVkUmVtb3RhYmxlIiwiaXNFbmNvZGVkUmVtb3RhYmxlIl0sWyJ6ZXJvUGFkIiwiemVyb1BhZCJdLFsicmVjb3JkTmFtZXMiLCJyZWNvcmROYW1lcyJdLFsicmVjb3JkVmFsdWVzIiwicmVjb3JkVmFsdWVzIl1dLCIuL3NyYy9yYW5rT3JkZXIuanMiOltbInRyaXZpYWxDb21wYXJhdG9yIiwidHJpdmlhbENvbXBhcmF0b3IiXSxbImFzc2VydFJhbmtTb3J0ZWQiLCJhc3NlcnRSYW5rU29ydGVkIl0sWyJjb21wYXJlUmFuayIsImNvbXBhcmVSYW5rIl0sWyJpc1JhbmtTb3J0ZWQiLCJpc1JhbmtTb3J0ZWQiXSxbInNvcnRCeVJhbmsiLCJzb3J0QnlSYW5rIl0sWyJjb21wYXJlQW50aVJhbmsiLCJjb21wYXJlQW50aVJhbmsiXSxbIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0IiwibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiXSxbImdldFBhc3NTdHlsZUNvdmVyIiwiZ2V0UGFzc1N0eWxlQ292ZXIiXSxbImludGVyc2VjdFJhbmtDb3ZlcnMiLCJpbnRlcnNlY3RSYW5rQ292ZXJzIl0sWyJ1bmlvblJhbmtDb3ZlcnMiLCJ1bmlvblJhbmtDb3ZlcnMiXV0sIkBlbmRvL3Bhc3Mtc3R5bGUiOltbImRlZXBseUZ1bGZpbGxlZCIsImRlZXBseUZ1bGZpbGxlZCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA12xbpVlDAABZQwAAKgAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVQYXNzYWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiaXNFbmNvZGVkUmVtb3RhYmxlIiwibWFrZURlY29kZVBhc3NhYmxlIiwibWFrZUVuY29kZVBhc3NhYmxlIiwibWFrZVBhc3NhYmxlS2l0IiwicGFzc1N0eWxlUHJlZml4ZXMiLCJyZWNvcmROYW1lcyIsInJlY29yZFZhbHVlcyIsInplcm9QYWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0VGFnLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsYXNzZXJ0UmVjb3JkLGlzRXJyb3JMaWtlLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsYixxLEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJhc3NlcnRSZWNvcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVjb3JkID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYlwiLCBbJGjNj19hID0+IChiID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e2Zyb21FbnRyaWVzLGlzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vL1xuY29uc3QgckMwPS9bXFx4MDAtXFx4MUZdLztcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBnZXRTdWZmaXg9KHN0cixpbmRleCk9PmluZGV4PT09MD9zdHI6c3RyLnN1YnN0cmluZyhpbmRleCk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHJlY29yZE5hbWVzPShyZWNvcmQpPT5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuaGFyZGVuKC8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhyZWNvcmQpLnNvcnQoKS5yZXZlcnNlKCkpOyRozY9fb25jZS5yZWNvcmROYW1lcyhyZWNvcmROYW1lcyk7XG5oYXJkZW4ocmVjb3JkTmFtZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICByZWNvcmRWYWx1ZXM9KHJlY29yZCxuYW1lcyk9PlxuaGFyZGVuKG5hbWVzLm1hcCgobmFtZSk9PnJlY29yZFtuYW1lXSkpOyRozY9fb25jZS5yZWNvcmRWYWx1ZXMocmVjb3JkVmFsdWVzKTtcbmhhcmRlbihyZWNvcmRWYWx1ZXMpO1xuXG5jb25zdCB6ZXJvZXM9QXJyYXkoMTYpLlxuZmlsbCh1bmRlZmluZWQpLlxubWFwKChfLGkpPT4nMCcucmVwZWF0KGkpKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHplcm9QYWQ9KG4sc2l6ZSk9PntcbmNvbnN0IG5TdHI9IGAke259YDtcbmNvbnN0IGZpbGxMZW49c2l6ZS1uU3RyLmxlbmd0aDtcbmlmKGZpbGxMZW49PT0wKXJldHVybiBuU3RyO1xuYXNzZXJ0KGZpbGxMZW4+MCYmZmlsbExlbjx6ZXJvZXMubGVuZ3RoKTtcbnJldHVybiBgJHt6ZXJvZXNbZmlsbExlbl19JHtuU3RyfWA7XG4gfTskaM2PX29uY2UuemVyb1BhZCh6ZXJvUGFkKTtcbmhhcmRlbih6ZXJvUGFkKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBhc051bWJlcj1uZXcgRmxvYXQ2NEFycmF5KDEpO1xuY29uc3QgYXNCaXRzPW5ldyBCaWdVaW50NjRBcnJheShhc051bWJlci5idWZmZXIpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG5jb25zdCBDYW5vbmljYWxOYU5CaXRzPSdmZmY4MDAwMDAwMDAwMDAwJztcblxuLypcblxuXG4gKi9cbmNvbnN0IGVuY29kZUJpbmFyeTY0PShuKT0+e1xuLy9cbmlmKGlzKG4sLTApKXtcbm49MDtcbiB9ZWxzZSBpZihpcyhuLE5hTikpe1xucmV0dXJuIGBmJHtDYW5vbmljYWxOYU5CaXRzfWA7XG4gfVxuYXNOdW1iZXJbMF09bjtcbmxldCBiaXRzPWFzQml0c1swXTtcbmlmKG48MCl7XG5iaXRzXj0weGZmZmZmZmZmZmZmZmZmZmZuO1xuIH1lbHNle1xuYml0c149MHg4MDAwMDAwMDAwMDAwMDAwbjtcbiB9XG5yZXR1cm4gYGYke3plcm9QYWQoYml0cy50b1N0cmluZygxNiksMTYpfWA7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQmluYXJ5NjQ9KGVuY29kZWQsc2tpcD0wKT0+e1xuZW5jb2RlZC5jaGFyQXQoc2tpcCk9PT0nZid8fEZhaWwgYEVuY29kZWQgbnVtYmVyIGV4cGVjdGVkOiAke2VuY29kZWR9YDtcbmxldCBiaXRzPUJpZ0ludCggYDB4JHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpfWApO1xuaWYoZW5jb2RlZC5jaGFyQXQoc2tpcCsxKTwnOCcpe1xuYml0c149MHhmZmZmZmZmZmZmZmZmZmZmbjtcbiB9ZWxzZXtcbmJpdHNePTB4ODAwMDAwMDAwMDAwMDAwMG47XG4gfVxuYXNCaXRzWzBdPWJpdHM7XG5jb25zdCByZXN1bHQ9YXNOdW1iZXJbMF07XG4haXMocmVzdWx0LC0wKXx8XG5GYWlsIGBVbmV4cGVjdGVkIG5lZ2F0aXZlIHplcm86ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQmlnSW50PShuKT0+e1xuY29uc3QgYWJzPW48MG4/LW46bjtcbmNvbnN0IG5EaWdpdHM9YWJzLnRvU3RyaW5nKCkubGVuZ3RoO1xuY29uc3QgbERpZ2l0cz1uRGlnaXRzLnRvU3RyaW5nKCkubGVuZ3RoO1xuaWYobjwwbil7XG5yZXR1cm4gYG4ke1xuLy9cbi8vXG4nIycucmVwZWF0KGxEaWdpdHMtMSlcbiB9JHtcbi8vXG4oMTAqKmxEaWdpdHMtbkRpZ2l0cykudG9TdHJpbmcoKS5wYWRTdGFydChsRGlnaXRzLCcwJylcbiB9OiR7XG4vL1xuKDEwbioqQmlnSW50KG5EaWdpdHMpK24pLnRvU3RyaW5nKCkucGFkU3RhcnQobkRpZ2l0cywnMCcpXG4gfWA7XG4gfWVsc2V7XG5yZXR1cm4gYHAke1xuLy9cbi8vXG4nficucmVwZWF0KGxEaWdpdHMtMSlcbiB9JHtcbi8vXG5uRGlnaXRzXG4gfToke1xuLy9cbm5cbiB9YDtcbiB9XG4gfTtcblxuY29uc3QgckJpZ0ludFBheWxvYWQ9LyhbMC05XSspKDooWzAtOV0rJHwpfCkvcztcblxuLypcblxuXG4gKi9cbmNvbnN0IGRlY29kZUJpZ0ludD0oZW5jb2RlZCk9PntcbmNvbnN0IHR5cGVQcmVmaXg9ZW5jb2RlZC5jaGFyQXQoMCk7Ly9cbnR5cGVQcmVmaXg9PT0ncCd8fFxudHlwZVByZWZpeD09PSduJ3x8XG5GYWlsIGBFbmNvZGVkIGJpZ2ludCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5cbmNvbnN0e1xuaW5kZXg6bERpZ2l0cyxcbjE6c25EaWdpdHMsXG4yOnRhaWwsXG4zOmRpZ2l0c309XG5lbmNvZGVkLm1hdGNoKHJCaWdJbnRQYXlsb2FkKXx8RmFpbCBgRGlnaXQgY291bnQgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xuXG5zbkRpZ2l0cy5sZW5ndGg9PT1sRGlnaXRzfHxcbkZhaWwgYFVuYXJ5LXByZWZpeGVkIGRlY2ltYWwgZGlnaXQgY291bnQgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IG5EaWdpdHM9cGFyc2VJbnQoc25EaWdpdHMsMTApO1xuaWYodHlwZVByZWZpeD09PSduJyl7XG4vL1xuLy9cbm5EaWdpdHM9MTAqKi8qICAgICAgICAgICAgICAgICAqL2xEaWdpdHMtbkRpZ2l0cztcbiB9XG5cbnRhaWwuY2hhckF0KDApPT09JzonfHxGYWlsIGBTZXBhcmF0b3IgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xuZGlnaXRzLmxlbmd0aD09PW5EaWdpdHN8fFxuRmFpbCBgRml4ZWQtbGVuZ3RoIGRpZ2l0IHNlcXVlbmNlIGV4cGVjdGVkOiAke2VuY29kZWR9YDtcbmxldCBuPUJpZ0ludChkaWdpdHMpO1xuaWYodHlwZVByZWZpeD09PSduJyl7XG4vL1xuLy9cbm49LSgxMG4qKkJpZ0ludChuRGlnaXRzKS1uKTtcbiB9XG5cbnJldHVybiBuO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc3RyaW5nRXNjYXBlcz1BcnJheSgweDIyKS5cbmZpbGwodW5kZWZpbmVkKS5cbm1hcCgoXyxjcCk9PntcbnN3aXRjaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKSl7XG5jYXNlJyAnOlxucmV0dXJuJyFfJztcbmNhc2UnISc6XG5yZXR1cm4nIXwnO1xuZGVmYXVsdDpcbnJldHVybiBgISR7U3RyaW5nLmZyb21DaGFyQ29kZShjcCsweDIxKX1gO31cblxuIH0pO1xuc3RyaW5nRXNjYXBlc1snXicuY2hhckNvZGVBdCgwKV09J19AJztcbnN0cmluZ0VzY2FwZXNbJ18nLmNoYXJDb2RlQXQoMCldPSdfXyc7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUNvbXBhY3RTdHJpbmdTdWZmaXg9KHN0cik9Plxuc3RyLnJlcGxhY2UoL1tcXDAtIV5fXS9nLChjaCk9PnN0cmluZ0VzY2FwZXNbY2guY2hhckNvZGVBdCgwKV0pO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVDb21wYWN0U3RyaW5nU3VmZml4PShlbmNvZGVkKT0+e1xucmV0dXJuIGVuY29kZWQucmVwbGFjZSgvKFtcXDAtIV9dKSgufFxcbik/L2csKGVzYyxwcmVmaXgsc3VmZml4KT0+e1xuc3dpdGNoKGVzYyl7XG5jYXNlJyFfJzpcbnJldHVybicgJztcbmNhc2UnIXwnOlxucmV0dXJuJyEnO1xuY2FzZSdfQCc6XG5yZXR1cm4nXic7XG5jYXNlJ19fJzpcbnJldHVybidfJztcbmRlZmF1bHQ6e1xuY29uc3QgY2g9LyogICAgICAgICAgICAgICAgICovc3VmZml4O1xuLy9cbi8vXG5wcmVmaXg9PT0nIScmJnN1ZmZpeCE9PXVuZGVmaW5lZCYmY2g+PSchJyYmY2g8PSdAJ3x8XG5GYWlsIGBpbnZhbGlkIHN0cmluZyBlc2NhcGU6ICR7cShlc2MpfWA7XG5yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaC5jaGFyQ29kZUF0KDApLTB4MjEpO1xuIH19XG5cbiB9KTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBlbmNvZGVMZWdhY3lTdHJpbmdTdWZmaXg9KHN0cik9PnN0cjtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlTGVnYWN5U3RyaW5nU3VmZml4PShlbmNvZGVkKT0+ZW5jb2RlZDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVDb21wYWN0QXJyYXk9KGFycmF5LGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgY2hhcnM9WydeJ107XG5mb3IoY29uc3QgZWxlbWVudCBvZiBhcnJheSl7XG5jb25zdCBlbmM9ZW5jb2RlUGFzc2FibGUoZWxlbWVudCk7XG5jaGFycy5wdXNoKGVuYywnICcpO1xuIH1cbnJldHVybiBjaGFycy5qb2luKCcnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUNvbXBhY3RBcnJheT0oZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwPTApPT57XG5jb25zdCBlbGVtZW50cz1bXTtcbmxldCBkZXB0aD0wO1xuLy9cbi8vXG5sZXQgbmV4dEluZGV4PXNraXArMTtcbmxldCBjdXJyZW50RWxlbWVudFN0YXJ0PXNraXArMTtcbmZvcihjb25zdHswOmNoLGluZGV4Oml9b2YgZW5jb2RlZC5tYXRjaEFsbCgvW1xcXiBdL2cpKXtcbmNvbnN0IGluZGV4PS8qICAgICAgICAgICAgICAgICAqL2k7XG5pZihpbmRleDw9c2tpcCl7XG5pZihpbmRleD09PXNraXApe1xuY2g9PT0nXid8fEZhaWwgYEVuY29kZWQgYXJyYXkgZXhwZWN0ZWQ6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9XG4gfWVsc2UgaWYoY2g9PT0nXicpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5kZXB0aCs9MTtcbiB9ZWxzZXtcbi8vXG5pZihpbmRleD09PW5leHRJbmRleCl7XG4vL1xuZGVwdGgtPTE7XG5kZXB0aD49MHx8XG4vL1xuRmFpbCBgdW5leHBlY3RlZCBhcnJheSBlbGVtZW50IHRlcm1pbmF0b3I6ICR7ZW5jb2RlZC5zbGljZShza2lwLGluZGV4KzIpfWA7XG4gfVxuaWYoZGVwdGg9PT0wKXtcbi8vXG5lbGVtZW50cy5wdXNoKFxuZGVjb2RlUGFzc2FibGUoZW5jb2RlZC5zbGljZShjdXJyZW50RWxlbWVudFN0YXJ0LGluZGV4KSkpO1xuXG5jdXJyZW50RWxlbWVudFN0YXJ0PWluZGV4KzE7XG4gfVxuIH1cbi8vXG5uZXh0SW5kZXg9aW5kZXgrMTtcbiB9XG5kZXB0aD09PTB8fEZhaWwgYHVudGVybWluYXRlZCBhcnJheTogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xubmV4dEluZGV4PT09ZW5jb2RlZC5sZW5ndGh8fFxuRmFpbCBgdW50ZXJtaW5hdGVkIGFycmF5IGVsZW1lbnQ6ICR7Z2V0U3VmZml4KFxuZW5jb2RlZCxcbmN1cnJlbnRFbGVtZW50U3RhcnQpXG4gfWA7XG5yZXR1cm4gaGFyZGVuKGVsZW1lbnRzKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVMZWdhY3lBcnJheT0oYXJyYXksZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBjaGFycz1bJ1snXTtcbmZvcihjb25zdCBlbGVtZW50IG9mIGFycmF5KXtcbmNvbnN0IGVuYz1lbmNvZGVQYXNzYWJsZShlbGVtZW50KTtcbmZvcihjb25zdCBjIG9mIGVuYyl7XG5pZihjPT09J1xcdTAwMDAnfHxjPT09J1xcdTAwMDEnKXtcbmNoYXJzLnB1c2goJ1xcdTAwMDEnKTtcbiB9XG5jaGFycy5wdXNoKGMpO1xuIH1cbmNoYXJzLnB1c2goJ1xcdTAwMDAnKTtcbiB9XG5yZXR1cm4gY2hhcnMuam9pbignJyk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWNvZGVMZWdhY3lBcnJheT0oZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwPTApPT57XG5jb25zdCBlbGVtZW50cz1bXTtcbmNvbnN0IGVsZW1DaGFycz1bXTtcbi8vXG4vL1xubGV0IHN0aWxsVG9Ta2lwPXNraXArMTtcbmxldCBpbkVzY2FwZT1mYWxzZTtcbmZvcihjb25zdCBjIG9mIGVuY29kZWQpe1xuaWYoc3RpbGxUb1NraXA+MCl7XG5zdGlsbFRvU2tpcC09MTtcbmlmKHN0aWxsVG9Ta2lwPT09MCl7XG5jPT09J1snfHxGYWlsIGBFbmNvZGVkIGFycmF5IGV4cGVjdGVkOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG4gfVxuIH1lbHNlIGlmKGluRXNjYXBlKXtcbmM9PT0nXFx1MDAwMCd8fFxuYz09PSdcXHUwMDAxJ3x8XG5GYWlsIGBVbmV4cGVjdGVkIGNoYXJhY3RlciBhZnRlciB1MDAwMSBlc2NhcGU6ICR7Y31gO1xuZWxlbUNoYXJzLnB1c2goYyk7XG4gfWVsc2UgaWYoYz09PSdcXHUwMDAwJyl7XG5jb25zdCBlbmNvZGVkRWxlbWVudD1lbGVtQ2hhcnMuam9pbignJyk7XG5lbGVtQ2hhcnMubGVuZ3RoPTA7XG5jb25zdCBlbGVtZW50PWRlY29kZVBhc3NhYmxlKGVuY29kZWRFbGVtZW50KTtcbmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gfWVsc2UgaWYoYz09PSdcXHUwMDAxJyl7XG5pbkVzY2FwZT10cnVlO1xuLy9cbmNvbnRpbnVlO1xuIH1lbHNle1xuZWxlbUNoYXJzLnB1c2goYyk7XG4gfVxuaW5Fc2NhcGU9ZmFsc2U7XG4gfVxuIWluRXNjYXBlfHxGYWlsIGB1bmV4cGVjdGVkIGVuZCBvZiBlbmNvZGluZyAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5lbGVtQ2hhcnMubGVuZ3RoPT09MHx8XG5GYWlsIGBlbmNvZGluZyB0ZXJtaW5hdGVkIGVhcmx5OiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5yZXR1cm4gaGFyZGVuKGVsZW1lbnRzKTtcbiB9O1xuXG5jb25zdCBlbmNvZGVSZWNvcmQ9KHJlY29yZCxlbmNvZGVBcnJheSxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IG5hbWVzPXJlY29yZE5hbWVzKHJlY29yZCk7XG5jb25zdCB2YWx1ZXM9cmVjb3JkVmFsdWVzKHJlY29yZCxuYW1lcyk7XG5yZXR1cm4gYCgke2VuY29kZUFycmF5KGhhcmRlbihbbmFtZXMsdmFsdWVzXSksZW5jb2RlUGFzc2FibGUpfWA7XG4gfTtcblxuY29uc3QgZGVjb2RlUmVjb3JkPShlbmNvZGVkLGRlY29kZUFycmF5LGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmFzc2VydChlbmNvZGVkLmNoYXJBdChza2lwKT09PScoJyk7XG4vL1xuLy9cbmNvbnN0IHVuemlwcGVkRW50cmllcz1kZWNvZGVBcnJheShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXArMSk7XG51bnppcHBlZEVudHJpZXMubGVuZ3RoPT09Mnx8XG5GYWlsIGBleHBlY3RlZCBrZXlzLHZhbHVlcyBwYWlyOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5jb25zdFtrZXlzLHZhbHNdPXVuemlwcGVkRW50cmllcztcblxucGFzc1N0eWxlT2Yoa2V5cyk9PT0nY29weUFycmF5JyYmXG5wYXNzU3R5bGVPZih2YWxzKT09PSdjb3B5QXJyYXknJiZcbmtleXMubGVuZ3RoPT09dmFscy5sZW5ndGgmJlxua2V5cy5ldmVyeSgoa2V5KT0+dHlwZW9mIGtleT09PSdzdHJpbmcnKXx8XG5GYWlsIGBub3QgYSB2YWxpZCByZWNvcmQgZW5jb2Rpbmc6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0IG1hcEVudHJpZXM9a2V5cy5tYXAoKGtleSxpKT0+W2tleSx2YWxzW2ldXSk7XG5jb25zdCByZWNvcmQ9aGFyZGVuKGZyb21FbnRyaWVzKG1hcEVudHJpZXMpKTtcbmFzc2VydFJlY29yZChyZWNvcmQsJ2RlY29kZWQgcmVjb3JkJyk7XG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbmNvbnN0IGVuY29kZVRhZ2dlZD0odGFnZ2VkLGVuY29kZUFycmF5LGVuY29kZVBhc3NhYmxlKT0+XG4gYDoke2VuY29kZUFycmF5KGhhcmRlbihbZ2V0VGFnKHRhZ2dlZCksdGFnZ2VkLnBheWxvYWRdKSxlbmNvZGVQYXNzYWJsZSl9YDtcblxuY29uc3QgZGVjb2RlVGFnZ2VkPShlbmNvZGVkLGRlY29kZUFycmF5LGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmFzc2VydChlbmNvZGVkLmNoYXJBdChza2lwKT09PSc6Jyk7XG4vL1xuLy9cbmNvbnN0IHRhZ2dlZFBheWxvYWQ9ZGVjb2RlQXJyYXkoZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwKzEpO1xudGFnZ2VkUGF5bG9hZC5sZW5ndGg9PT0yfHxcbkZhaWwgYGV4cGVjdGVkIHRhZyxwYXlsb2FkIHBhaXI6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0W3RhZyxwYXlsb2FkXT10YWdnZWRQYXlsb2FkO1xucGFzc1N0eWxlT2YodGFnKT09PSdzdHJpbmcnfHxcbkZhaWwgYG5vdCBhIHZhbGlkIHRhZ2dlZCBlbmNvZGluZzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xucmV0dXJuIG1ha2VUYWdnZWQodGFnLHBheWxvYWQpO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVSZW1vdGFibGU9KHVuc2FmZUVuY29kZVJlbW90YWJsZSx2ZXJpZnlFbmNvZGluZyk9PntcbmNvbnN0IGVuY29kZVJlbW90YWJsZT0ocixpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZVJlbW90YWJsZShyLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0ncid8fFxuRmFpbCBgUmVtb3RhYmxlIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcInJcIjogJHtlbmNvZGluZ31gO1xudmVyaWZ5RW5jb2RpbmcoZW5jb2RpbmcsJ1JlbW90YWJsZScpO1xucmV0dXJuIGVuY29kaW5nO1xuIH07XG5yZXR1cm4gZW5jb2RlUmVtb3RhYmxlO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVQcm9taXNlPSh1bnNhZmVFbmNvZGVQcm9taXNlLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlUHJvbWlzZT0ocCxpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZVByb21pc2UocCxpbm5lckVuY29kZSk7XG50eXBlb2YgZW5jb2Rpbmc9PT0nc3RyaW5nJyYmZW5jb2RpbmcuY2hhckF0KDApPT09Jz8nfHxcbkZhaWwgYFByb21pc2UgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiP1wiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnUHJvbWlzZScpO1xucmV0dXJuIGVuY29kaW5nO1xuIH07XG5yZXR1cm4gZW5jb2RlUHJvbWlzZTtcbiB9O1xuXG5jb25zdCBtYWtlRW5jb2RlRXJyb3I9KHVuc2FmZUVuY29kZUVycm9yLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlRXJyb3I9KGVycixpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZUVycm9yKGVycixpbm5lckVuY29kZSk7XG50eXBlb2YgZW5jb2Rpbmc9PT0nc3RyaW5nJyYmZW5jb2RpbmcuY2hhckF0KDApPT09JyEnfHxcbkZhaWwgYEVycm9yIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcIiFcIjogJHtlbmNvZGluZ31gO1xudmVyaWZ5RW5jb2RpbmcoZW5jb2RpbmcsJ0Vycm9yJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVFcnJvcjtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbm5lckVuY29kZT0oZW5jb2RlU3RyaW5nU3VmZml4LGVuY29kZUFycmF5LG9wdGlvbnMpPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZTp1bnNhZmVFbmNvZGVSZW1vdGFibGUsXG5lbmNvZGVQcm9taXNlOnVuc2FmZUVuY29kZVByb21pc2UsXG5lbmNvZGVFcnJvcjp1bnNhZmVFbmNvZGVFcnJvcixcbnZlcmlmeUVuY29kaW5nPSgpPT57IH19PVxub3B0aW9ucztcbmNvbnN0IGVuY29kZVJlbW90YWJsZT1tYWtlRW5jb2RlUmVtb3RhYmxlKFxudW5zYWZlRW5jb2RlUmVtb3RhYmxlLFxudmVyaWZ5RW5jb2RpbmcpO1xuXG5jb25zdCBlbmNvZGVQcm9taXNlPW1ha2VFbmNvZGVQcm9taXNlKHVuc2FmZUVuY29kZVByb21pc2UsdmVyaWZ5RW5jb2RpbmcpO1xuY29uc3QgZW5jb2RlRXJyb3I9bWFrZUVuY29kZUVycm9yKHVuc2FmZUVuY29kZUVycm9yLHZlcmlmeUVuY29kaW5nKTtcblxuY29uc3QgaW5uZXJFbmNvZGU9KHBhc3NhYmxlKT0+e1xuaWYoaXNFcnJvckxpa2UocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gZW5jb2RlRXJyb3IocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihwYXNzYWJsZSk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnbnVsbCc6e1xucmV0dXJuJ3YnO1xuIH1cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4neic7XG4gfVxuY2FzZSdudW1iZXInOntcbnJldHVybiBlbmNvZGVCaW5hcnk2NChwYXNzYWJsZSk7XG4gfVxuY2FzZSdzdHJpbmcnOntcbnJldHVybiBgcyR7ZW5jb2RlU3RyaW5nU3VmZml4KHBhc3NhYmxlKX1gO1xuIH1cbmNhc2UnYm9vbGVhbic6e1xucmV0dXJuIGBiJHtwYXNzYWJsZX1gO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5yZXR1cm4gZW5jb2RlQmlnSW50KHBhc3NhYmxlKTtcbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xucmV0dXJuIGVuY29kZVJlbW90YWJsZShwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSdlcnJvcic6e1xucmV0dXJuIGVuY29kZUVycm9yKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBlbmNvZGVQcm9taXNlKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuLy9cbmNvbnN0IG5hbWU9bmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5yZXR1cm4gYHkke2VuY29kZVN0cmluZ1N1ZmZpeChuYW1lKX1gO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5yZXR1cm4gZW5jb2RlQXJyYXkocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xucmV0dXJuIGVuY29kZVJlY29yZChwYXNzYWJsZSxlbmNvZGVBcnJheSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybiBlbmNvZGVUYWdnZWQocGFzc2FibGUsZW5jb2RlQXJyYXksaW5uZXJFbmNvZGUpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgYSAke3EocGFzc1N0eWxlKX0gY2Fubm90IGJlIHVzZWQgYXMgYSBjb2xsZWN0aW9uIHBhc3NhYmxlYDtcbiB9fVxuXG4gfTtcbnJldHVybiBpbm5lckVuY29kZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgbGliZXJhbERlY29kZXJzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICove1xuZGVjb2RlUmVtb3RhYmxlOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkLFxuZGVjb2RlUHJvbWlzZTooX2VuY29kaW5nLF9pbm5lckRlY29kZSk9PnVuZGVmaW5lZCxcbmRlY29kZUVycm9yOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkfTtcblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlubmVyRGVjb2RlPShkZWNvZGVTdHJpbmdTdWZmaXgsZGVjb2RlQXJyYXksb3B0aW9ucyk9PntcbmNvbnN0e2RlY29kZVJlbW90YWJsZSxkZWNvZGVQcm9taXNlLGRlY29kZUVycm9yfT1vcHRpb25zO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlubmVyRGVjb2RlPShlbmNvZGVkLHNraXA9MCk9PntcbnN3aXRjaChlbmNvZGVkLmNoYXJBdChza2lwKSl7XG5jYXNlJ3YnOntcbnJldHVybiBudWxsO1xuIH1cbmNhc2Uneic6e1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jYXNlJ2YnOntcbnJldHVybiBkZWNvZGVCaW5hcnk2NChlbmNvZGVkLHNraXApO1xuIH1cbmNhc2Uncyc6e1xucmV0dXJuIGRlY29kZVN0cmluZ1N1ZmZpeChnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpKTtcbiB9XG5jYXNlJ2InOntcbmNvbnN0IHN1YnN0cmluZz1nZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpO1xuaWYoc3Vic3RyaW5nPT09J3RydWUnKXtcbnJldHVybiB0cnVlO1xuIH1lbHNlIGlmKHN1YnN0cmluZz09PSdmYWxzZScpe1xucmV0dXJuIGZhbHNlO1xuIH1cbnRocm93IEZhaWwgYGV4cGVjdGVkIGVuY29kZWQgYm9vbGVhbiB0byBiZSBcImJ0cnVlXCIgb3IgXCJiZmFsc2VcIjogJHtzdWJzdHJpbmd9YDtcbiB9XG5jYXNlJ24nOlxuY2FzZSdwJzp7XG5yZXR1cm4gZGVjb2RlQmlnSW50KGdldFN1ZmZpeChlbmNvZGVkLHNraXApKTtcbiB9XG5jYXNlJ3InOntcbnJldHVybiBkZWNvZGVSZW1vdGFibGUoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UnPyc6e1xucmV0dXJuIGRlY29kZVByb21pc2UoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UnISc6e1xucmV0dXJuIGRlY29kZUVycm9yKGdldFN1ZmZpeChlbmNvZGVkLHNraXApLGlubmVyRGVjb2RlKTtcbiB9XG5jYXNlJ3knOntcbi8vXG5jb25zdCBuYW1lPWRlY29kZVN0cmluZ1N1ZmZpeChnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpKTtcbnJldHVybiBwYXNzYWJsZVN5bWJvbEZvck5hbWUobmFtZSk7XG4gfVxuY2FzZSdbJzpcbmNhc2UnXic6e1xuLy9cbnJldHVybiBkZWNvZGVBcnJheShlbmNvZGVkLGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmNhc2UnKCc6e1xucmV0dXJuIGRlY29kZVJlY29yZChlbmNvZGVkLGRlY29kZUFycmF5LGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmNhc2UnOic6e1xucmV0dXJuIGRlY29kZVRhZ2dlZChlbmNvZGVkLGRlY29kZUFycmF5LGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgaW52YWxpZCBkYXRhYmFzZSBrZXk6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9fVxuXG4gfTtcbnJldHVybiBpbm5lckRlY29kZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVBhc3NhYmxlS2l0PShvcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGU9KHIsXyk9PkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke3J9YCxcbmVuY29kZVByb21pc2U9KHAsXyk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtwfWAsXG5lbmNvZGVFcnJvcj0oZXJyLF8pPT5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke2Vycn1gLFxuZm9ybWF0PSdsZWdhY3lPcmRlcmVkJyxcblxuZGVjb2RlUmVtb3RhYmxlPShlbmNvZGluZyxfKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YCxcbmRlY29kZVByb21pc2U9KGVuY29kaW5nLF8pPT5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YCxcbmRlY29kZUVycm9yPShlbmNvZGluZyxfKT0+RmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gfT1cbm9wdGlvbnM7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZW5jb2RlUGFzc2FibGU7XG5jb25zdCBlbmNvZGVPcHRpb25zPXtlbmNvZGVSZW1vdGFibGUsZW5jb2RlUHJvbWlzZSxlbmNvZGVFcnJvcixmb3JtYXR9O1xuaWYoZm9ybWF0PT09J2NvbXBhY3RPcmRlcmVkJyl7XG5jb25zdCBsaWJlcmFsRGVjb2RlPW1ha2VJbm5lckRlY29kZShcbmRlY29kZUNvbXBhY3RTdHJpbmdTdWZmaXgsXG5kZWNvZGVDb21wYWN0QXJyYXksXG5saWJlcmFsRGVjb2RlcnMpO1xuXG4vKlxuXG5cblxuICAgICAqL1xuY29uc3QgdmVyaWZ5RW5jb2Rpbmc9KGVuY29kaW5nLGxhYmVsKT0+e1xuIWVuY29kaW5nLm1hdGNoKHJDMCl8fFxuRmFpbCBgJHtiKFxubGFiZWwpXG4gfSBlbmNvZGluZyBtdXN0IG5vdCBjb250YWluIGEgQzAgY29udHJvbCBjaGFyYWN0ZXI6ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IGRlY29kZWQ9ZGVjb2RlQ29tcGFjdEFycmF5KCBgXnYgJHtlbmNvZGluZ30gdiBgLGxpYmVyYWxEZWNvZGUpO1xuaXNBcnJheShkZWNvZGVkKSYmXG5kZWNvZGVkLmxlbmd0aD09PTMmJlxuZGVjb2RlZFswXT09PW51bGwmJlxuZGVjb2RlZFsyXT09PW51bGx8fFxuRmFpbCBgJHtiKGxhYmVsKX0gZW5jb2RpbmcgbXVzdCBiZSBlbWJlZGRhYmxlOiAke2VuY29kaW5nfWA7XG4gfTtcbmNvbnN0IGVuY29kZUNvbXBhY3Q9bWFrZUlubmVyRW5jb2RlKFxuZW5jb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmVuY29kZUNvbXBhY3RBcnJheSxcbnsuLi5lbmNvZGVPcHRpb25zLHZlcmlmeUVuY29kaW5nfSk7XG5cbmVuY29kZVBhc3NhYmxlPShwYXNzYWJsZSk9PiBgfiR7ZW5jb2RlQ29tcGFjdChwYXNzYWJsZSl9YDtcbiB9ZWxzZSBpZihmb3JtYXQ9PT0nbGVnYWN5T3JkZXJlZCcpe1xuZW5jb2RlUGFzc2FibGU9bWFrZUlubmVyRW5jb2RlKFxuZW5jb2RlTGVnYWN5U3RyaW5nU3VmZml4LFxuZW5jb2RlTGVnYWN5QXJyYXksXG5lbmNvZGVPcHRpb25zKTtcblxuIH1lbHNle1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIGZvcm1hdDogJHtxKGZvcm1hdCl9YDtcbiB9XG5cbmNvbnN0IGRlY29kZU9wdGlvbnM9e2RlY29kZVJlbW90YWJsZSxkZWNvZGVQcm9taXNlLGRlY29kZUVycm9yfTtcbmNvbnN0IGRlY29kZUNvbXBhY3Q9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmRlY29kZUNvbXBhY3RBcnJheSxcbmRlY29kZU9wdGlvbnMpO1xuXG5jb25zdCBkZWNvZGVMZWdhY3k9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlTGVnYWN5U3RyaW5nU3VmZml4LFxuZGVjb2RlTGVnYWN5QXJyYXksXG5kZWNvZGVPcHRpb25zKTtcblxuY29uc3QgZGVjb2RlUGFzc2FibGU9KGVuY29kZWQpPT57XG4vL1xuLy9cbi8vXG5pZihlbmNvZGVkLmNoYXJBdCgwKT09PSd+Jyl7XG5yZXR1cm4gZGVjb2RlQ29tcGFjdChlbmNvZGVkLDEpO1xuIH1cbnJldHVybiBkZWNvZGVMZWdhY3koZW5jb2RlZCk7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7ZW5jb2RlUGFzc2FibGUsZGVjb2RlUGFzc2FibGV9KTtcbiB9OyRozY9fb25jZS5tYWtlUGFzc2FibGVLaXQobWFrZVBhc3NhYmxlS2l0KTtcbmhhcmRlbihtYWtlUGFzc2FibGVLaXQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbmNvZGVQYXNzYWJsZT0oZW5jb2RlT3B0aW9ucyk9PntcbmNvbnN0e2VuY29kZVBhc3NhYmxlfT1tYWtlUGFzc2FibGVLaXQoZW5jb2RlT3B0aW9ucyk7XG5yZXR1cm4gZW5jb2RlUGFzc2FibGU7XG4gfTskaM2PX29uY2UubWFrZUVuY29kZVBhc3NhYmxlKG1ha2VFbmNvZGVQYXNzYWJsZSk7XG5oYXJkZW4obWFrZUVuY29kZVBhc3NhYmxlKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRGVjb2RlUGFzc2FibGU9KGRlY29kZU9wdGlvbnMpPT57XG5jb25zdHtkZWNvZGVQYXNzYWJsZX09bWFrZVBhc3NhYmxlS2l0KGRlY29kZU9wdGlvbnMpO1xucmV0dXJuIGRlY29kZVBhc3NhYmxlO1xuIH07JGjNj19vbmNlLm1ha2VEZWNvZGVQYXNzYWJsZShtYWtlRGVjb2RlUGFzc2FibGUpO1xuaGFyZGVuKG1ha2VEZWNvZGVQYXNzYWJsZSk7XG5cbmNvbnN0ICAgICAgICBpc0VuY29kZWRSZW1vdGFibGU9KGVuY29kZWQpPT5lbmNvZGVkLmNoYXJBdCgwKT09PSdyJzskaM2PX29uY2UuaXNFbmNvZGVkUmVtb3RhYmxlKGlzRW5jb2RlZFJlbW90YWJsZSk7XG5oYXJkZW4oaXNFbmNvZGVkUmVtb3RhYmxlKTtcblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhc3NTdHlsZVByZWZpeGVzPXtcbmVycm9yOichJyxcbmNvcHlSZWNvcmQ6JygnLFxudGFnZ2VkOic6JyxcbnByb21pc2U6Jz8nLFxuY29weUFycmF5OidbXicsXG5ib29sZWFuOidiJyxcbm51bWJlcjonZicsXG5iaWdpbnQ6J25wJyxcbnJlbW90YWJsZToncicsXG5zdHJpbmc6J3MnLFxubnVsbDondicsXG5zeW1ib2w6J3knLFxuLy9cbi8vXG4vL1xudW5kZWZpbmVkOid6J307JGjNj19vbmNlLnBhc3NTdHlsZVByZWZpeGVzKHBhc3NTdHlsZVByZWZpeGVzKTtcblxuT2JqZWN0LnNldFByb3RvdHlwZU9mKHBhc3NTdHlsZVByZWZpeGVzLG51bGwpO1xuaGFyZGVuKHBhc3NTdHlsZVByZWZpeGVzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InJlY29yZE5hbWVzIjpbInJlY29yZE5hbWVzIl0sInJlY29yZFZhbHVlcyI6WyJyZWNvcmRWYWx1ZXMiXSwiemVyb1BhZCI6WyJ6ZXJvUGFkIl0sIm1ha2VQYXNzYWJsZUtpdCI6WyJtYWtlUGFzc2FibGVLaXQiXSwibWFrZUVuY29kZVBhc3NhYmxlIjpbIm1ha2VFbmNvZGVQYXNzYWJsZSJdLCJtYWtlRGVjb2RlUGFzc2FibGUiOlsibWFrZURlY29kZVBhc3NhYmxlIl0sImlzRW5jb2RlZFJlbW90YWJsZSI6WyJpc0VuY29kZWRSZW1vdGFibGUiXSwicGFzc1N0eWxlUHJlZml4ZXMiOlsicGFzc1N0eWxlUHJlZml4ZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAX5zwMlIiAABSIgAAKwAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVUb0NhcERhdGEuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIlFDTEFTUyIsIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSIsIm1ha2VFbmNvZGVUb0NhcERhdGEiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFzc1N0eWxlT2YsaXNFcnJvckxpa2UsbWFrZVRhZ2dlZCxpc09iamVjdCxnZXRUYWcsaGFzT3duUHJvcGVydHlPZixhc3NlcnRQYXNzYWJsZVN5bWJvbCxuYW1lRm9yUGFzc2FibGVTeW1ib2wscGFzc2FibGVTeW1ib2xGb3JOYW1lLFgsRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiaXNFcnJvckxpa2VcIiwgWyRozY9fYSA9PiAoaXNFcnJvckxpa2UgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMsXG5kZWZpbmVQcm9wZXJ0aWVzLFxuaXMsXG5lbnRyaWVzLFxuZnJvbUVudHJpZXMsXG5mcmVlemV9PVxuT2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgUUNMQVNTPSdAcWNsYXNzJzskaM2PX29uY2UuUUNMQVNTKFFDTEFTUyk7XG5cblxuLypcblxuXG4gKi9cbmNvbnN0IGhhc1FDbGFzcz0oZW5jb2RlZCk9Pmhhc093blByb3BlcnR5T2YoZW5jb2RlZCxRQ0xBU1MpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBxY2xhc3NNYXRjaGVzPShlbmNvZGVkLHFjbGFzcyk9PlxuaXNPYmplY3QoZW5jb2RlZCkmJlxuIWlzQXJyYXkoZW5jb2RlZCkmJlxuaGFzUUNsYXNzKGVuY29kZWQpJiZcbmVuY29kZWRbUUNMQVNTXT09PXFjbGFzcztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnRFbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9KHJlbSk9PkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke3JlbX1gO1xuXG5jb25zdCBkb250RW5jb2RlUHJvbWlzZVRvQ2FwRGF0YT0ocHJvbSk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtwcm9tfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVFcnJvclRvQ2FwRGF0YT0oZXJyKT0+RmFpbCBgZXJyb3Igb2JqZWN0IHVuZXhwZWN0ZWQ6ICR7ZXJyfWA7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVuY29kZVRvQ2FwRGF0YT0oZW5jb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhPWRvbnRFbmNvZGVSZW1vdGFibGVUb0NhcERhdGEsXG5lbmNvZGVQcm9taXNlVG9DYXBEYXRhPWRvbnRFbmNvZGVQcm9taXNlVG9DYXBEYXRhLFxuZW5jb2RlRXJyb3JUb0NhcERhdGE9ZG9udEVuY29kZUVycm9yVG9DYXBEYXRhfT1cbmVuY29kZU9wdGlvbnM7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBlbmNvZGVUb0NhcERhdGFSZWN1cj0ocGFzc2FibGUpPT57XG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihwYXNzYWJsZSk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdzdHJpbmcnOntcbi8vXG5yZXR1cm4gcGFzc2FibGU7XG4gfVxuY2FzZSd1bmRlZmluZWQnOntcbnJldHVybntbUUNMQVNTXTondW5kZWZpbmVkJ307XG4gfVxuY2FzZSdudW1iZXInOntcbi8vXG5pZihOdW1iZXIuaXNOYU4ocGFzc2FibGUpKXtcbnJldHVybntbUUNMQVNTXTonTmFOJ307XG4gfWVsc2UgaWYocGFzc2FibGU9PT1JbmZpbml0eSl7XG5yZXR1cm57W1FDTEFTU106J0luZmluaXR5J307XG4gfWVsc2UgaWYocGFzc2FibGU9PT0tSW5maW5pdHkpe1xucmV0dXJue1tRQ0xBU1NdOictSW5maW5pdHknfTtcbiB9XG4vL1xucmV0dXJuIGlzKHBhc3NhYmxlLC0wKT8wOnBhc3NhYmxlO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5yZXR1cm57XG5bUUNMQVNTXTonYmlnaW50JyxcbmRpZ2l0czpTdHJpbmcocGFzc2FibGUpfTtcblxuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5jb25zdCBuYW1lPS8qICAgICAgICAgICAgICAgICAqL25hbWVGb3JQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5yZXR1cm57XG5bUUNMQVNTXTonc3ltYm9sJyxcbm5hbWV9O1xuXG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG5pZihoYXNPd25Qcm9wZXJ0eU9mKHBhc3NhYmxlLFFDTEFTUykpe1xuLy9cbmNvbnN0e1tRQ0xBU1NdOnFjbGFzc1ZhbHVlLC4uLnJlc3R9PXBhc3NhYmxlO1xuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD17XG5bUUNMQVNTXTonaGlsYmVydCcsXG5vcmlnaW5hbDplbmNvZGVUb0NhcERhdGFSZWN1cihxY2xhc3NWYWx1ZSl9O1xuXG5pZihvd25LZXlzKHJlc3QpLmxlbmd0aD49MSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXN1bHQucmVzdD1lbmNvZGVUb0NhcERhdGFSZWN1cihmcmVlemUocmVzdCkpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfVxuLy9cbi8vXG4vL1xuY29uc3QgbmFtZXM9b3duS2V5cyhwYXNzYWJsZSkuc29ydCgpO1xucmV0dXJuIGZyb21FbnRyaWVzKFxubmFtZXMubWFwKChuYW1lKT0+W25hbWUsZW5jb2RlVG9DYXBEYXRhUmVjdXIocGFzc2FibGVbbmFtZV0pXSkpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBwYXNzYWJsZS5tYXAoZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5yZXR1cm57XG5bUUNMQVNTXTondGFnZ2VkJyxcbnRhZzpnZXRUYWcocGFzc2FibGUpLFxucGF5bG9hZDplbmNvZGVUb0NhcERhdGFSZWN1cihwYXNzYWJsZS5wYXlsb2FkKX07XG5cbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xuY29uc3QgZW5jb2RlZD1lbmNvZGVSZW1vdGFibGVUb0NhcERhdGEoXG5wYXNzYWJsZSxcbmVuY29kZVRvQ2FwRGF0YVJlY3VyKTtcblxuaWYocWNsYXNzTWF0Y2hlcyhlbmNvZGVkLCdzbG90Jykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxuLy9cbnRocm93IEZhaWwgYGludGVybmFsOiBSZW1vdGFibGUgZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCAke3EoXG5RQ0xBU1MpXG4gfSAke3EoJ3Nsb3QnKX06ICR7ZW5jb2RlZH1gO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xuY29uc3QgZW5jb2RlZD1lbmNvZGVQcm9taXNlVG9DYXBEYXRhKHBhc3NhYmxlLGVuY29kZVRvQ2FwRGF0YVJlY3VyKTtcbmlmKHFjbGFzc01hdGNoZXMoZW5jb2RlZCwnc2xvdCcpKXtcbnJldHVybiBlbmNvZGVkO1xuIH1cbnRocm93IEZhaWwgYGludGVybmFsOiBQcm9taXNlIGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggJHtxKFxuUUNMQVNTLFxuJ3Nsb3QnKVxuIH06ICR7ZW5jb2RlZH1gO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IGVuY29kZWQ9ZW5jb2RlRXJyb3JUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuaWYocWNsYXNzTWF0Y2hlcyhlbmNvZGVkLCdlcnJvcicpKXtcbnJldHVybiBlbmNvZGVkO1xuIH1cbnRocm93IEZhaWwgYGludGVybmFsOiBFcnJvciBlbmNvZGluZyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoICR7cShcblFDTEFTUyxcbidlcnJvcicpXG4gfTogJHtlbmNvZGVkfWA7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYGludGVybmFsOiBVbnJlY29nbml6ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH07XG5jb25zdCBlbmNvZGVUb0NhcERhdGE9KHBhc3NhYmxlKT0+e1xuaWYoaXNFcnJvckxpa2UocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKGVuY29kZUVycm9yVG9DYXBEYXRhKHBhc3NhYmxlLGVuY29kZVRvQ2FwRGF0YVJlY3VyKSk7XG4gfVxucmV0dXJuIGhhcmRlbihlbmNvZGVUb0NhcERhdGFSZWN1cihwYXNzYWJsZSkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvQ2FwRGF0YSk7XG4gfTskaM2PX29uY2UubWFrZUVuY29kZVRvQ2FwRGF0YShtYWtlRW5jb2RlVG9DYXBEYXRhKTtcbmhhcmRlbihtYWtlRW5jb2RlVG9DYXBEYXRhKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnREZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YT0oc2xvdEVuY29kaW5nKT0+XG5GYWlsIGByZW1vdGFibGUgb3IgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Nsb3RFbmNvZGluZ31gO1xuY29uc3QgZG9udERlY29kZUVycm9yRnJvbUNhcERhdGE9KGVycm9yRW5jb2RpbmcpPT5cbkZhaWwgYGVycm9yIHVuZXhwZWN0ZWQ6ICR7ZXJyb3JFbmNvZGluZ31gO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VEZWNvZGVGcm9tQ2FwRGF0YT0oZGVjb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGE9ZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhLFxuZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhPWRvbnREZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZUVycm9yRnJvbUNhcERhdGE9ZG9udERlY29kZUVycm9yRnJvbUNhcERhdGF9PVxuZGVjb2RlT3B0aW9ucztcblxuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGE9PT1kZWNvZGVQcm9taXNlRnJvbUNhcERhdGF8fFxuRmFpbCBgQW4gaW1wbGVtZW50YXRpb24gcmVzdHJpY3Rpb24gZm9yIG5vdzogSWYgZWl0aGVyIGRlY29kZVJlbW90YWJsZUZyb21DYXBEYXRhIG9yIGRlY29kZVByb21pc2VGcm9tQ2FwRGF0YSBpcyBwcm92aWRlZCwgYm90aCBtdXN0IGJlIHByb3ZpZGVkIGFuZCB0aGV5IG11c3QgYmUgdGhlIHNhbWU6ICR7cShcbmRlY29kZVJlbW90YWJsZUZyb21DYXBEYXRhKVxuIH0gdnMgJHtxKGRlY29kZVByb21pc2VGcm9tQ2FwRGF0YSl9YDtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVjb2RlRnJvbUNhcERhdGE9KGpzb25FbmNvZGVkKT0+e1xuaWYoIWlzT2JqZWN0KGpzb25FbmNvZGVkKSl7XG4vL1xucmV0dXJuIGpzb25FbmNvZGVkO1xuIH1cbmlmKGlzQXJyYXkoanNvbkVuY29kZWQpKXtcbnJldHVybiBqc29uRW5jb2RlZC5tYXAoKGVuY29kZWRWYWwpPT5kZWNvZGVGcm9tQ2FwRGF0YShlbmNvZGVkVmFsKSk7XG4gfWVsc2UgaWYoaGFzUUNsYXNzKGpzb25FbmNvZGVkKSl7XG5jb25zdCBxY2xhc3M9anNvbkVuY29kZWRbUUNMQVNTXTtcbnR5cGVvZiBxY2xhc3M9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkICR7cShRQ0xBU1MpfSB0eXBlb2YgJHtxKHR5cGVvZiBxY2xhc3MpfWA7XG5zd2l0Y2gocWNsYXNzKXtcbi8vXG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jYXNlJ05hTic6e1xucmV0dXJuIE5hTjtcbiB9XG5jYXNlJ0luZmluaXR5Jzp7XG5yZXR1cm4gSW5maW5pdHk7XG4gfVxuY2FzZSctSW5maW5pdHknOntcbnJldHVybi1JbmZpbml0eTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3R7ZGlnaXRzfT1qc29uRW5jb2RlZDtcbnR5cGVvZiBkaWdpdHM9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIGRpZ2l0cyB0eXBlb2YgJHtxKHR5cGVvZiBkaWdpdHMpfWA7XG5yZXR1cm4gQmlnSW50KGRpZ2l0cyk7XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3I7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PWpzb25FbmNvZGVkO1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3R7dGFnLHBheWxvYWR9PWpzb25FbmNvZGVkO1xucmV0dXJuIG1ha2VUYWdnZWQodGFnLGRlY29kZUZyb21DYXBEYXRhKHBheWxvYWQpKTtcbiB9XG5jYXNlJ3Nsb3QnOntcbi8vXG4vL1xuLy9cbmNvbnN0IGRlY29kZWQ9ZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEoXG5qc29uRW5jb2RlZCxcbmRlY29kZUZyb21DYXBEYXRhKTtcblxuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBkZWNvZGVkO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IGRlY29kZWQ9ZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YShcbmpzb25FbmNvZGVkLFxuZGVjb2RlRnJvbUNhcERhdGEpO1xuXG5pZihwYXNzU3R5bGVPZihkZWNvZGVkKT09PSdlcnJvcicpe1xucmV0dXJuIGRlY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IGRlY29kZUVycm9yRnJvbUNhcERhdGEgb3B0aW9uIG11c3QgcmV0dXJuIGFuIGVycm9yOiAke2RlY29kZWR9YDtcbiB9XG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PWpzb25FbmNvZGVkO1xuaGFzT3duUHJvcGVydHlPZihqc29uRW5jb2RlZCwnb3JpZ2luYWwnKXx8XG5GYWlsIGBJbnZhbGlkIEhpbGJlcnQgSG90ZWwgZW5jb2RpbmcgJHtqc29uRW5jb2RlZH1gO1xuLy9cbmNvbnN0IHJlc3VsdD17W1FDTEFTU106ZGVjb2RlRnJvbUNhcERhdGEob3JpZ2luYWwpfTtcbmlmKGhhc093blByb3BlcnR5T2YoanNvbkVuY29kZWQsJ3Jlc3QnKSl7XG5jb25zdCBpc05vbkVtcHR5T2JqZWN0PVxudHlwZW9mIHJlc3Q9PT0nb2JqZWN0JyYmXG5yZXN0IT09bnVsbCYmXG5vd25LZXlzKHJlc3QpLmxlbmd0aD49MTtcbmlmKCFpc05vbkVtcHR5T2JqZWN0KXtcbnRocm93IEZhaWwgYFJlc3QgZW5jb2RpbmcgbXVzdCBiZSBhIG5vbi1lbXB0eSBvYmplY3Q6ICR7cmVzdH1gO1xuIH1cbmNvbnN0IHJlc3RPYmo9ZGVjb2RlRnJvbUNhcERhdGEocmVzdCk7XG4vL1xuLy9cbi8vXG4haGFzT3duUHJvcGVydHlPZihyZXN0T2JqLFFDTEFTUyl8fFxuRmFpbCBgUmVzdCBtdXN0IG5vdCBjb250YWluIGl0cyBvd24gZGVmaW5pdGlvbiBvZiAke3EoUUNMQVNTKX1gO1xuZGVmaW5lUHJvcGVydGllcyhyZXN1bHQsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhyZXN0T2JqKSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xuY2FzZSdpYmlkJzp7XG50aHJvdyBGYWlsIGBUaGUgY2FwRGF0YSBwcm90b2NvbCBubyBsb25nZXIgc3VwcG9ydHMgJHtxKFFDTEFTUyl9ICR7cShcbnFjbGFzcylcbiB9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgdW5yZWNvZ25pemVkICR7cShRQ0xBU1MpfSAke3EocWNsYXNzKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9ZWxzZXtcbmFzc2VydCh0eXBlb2YganNvbkVuY29kZWQ9PT0nb2JqZWN0JyYmanNvbkVuY29kZWQhPT1udWxsKTtcbmNvbnN0IGRlY29kZUVudHJ5PShbbmFtZSxlbmNvZGVkVmFsXSk9PntcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgJHtxKG5hbWUpfSBvZiAke2pzb25FbmNvZGVkfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnJldHVybltuYW1lLGRlY29kZUZyb21DYXBEYXRhKGVuY29kZWRWYWwpXTtcbiB9O1xuY29uc3QgZGVjb2RlZEVudHJpZXM9ZW50cmllcyhqc29uRW5jb2RlZCkubWFwKGRlY29kZUVudHJ5KTtcbnJldHVybiBmcm9tRW50cmllcyhkZWNvZGVkRW50cmllcyk7XG4gfVxuIH07XG5yZXR1cm4gaGFyZGVuKGRlY29kZUZyb21DYXBEYXRhKTtcbiB9OyRozY9fb25jZS5tYWtlRGVjb2RlRnJvbUNhcERhdGEobWFrZURlY29kZUZyb21DYXBEYXRhKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlFDTEFTUyI6WyJRQ0xBU1MiXSwibWFrZUVuY29kZVRvQ2FwRGF0YSI6WyJtYWtlRW5jb2RlVG9DYXBEYXRhIl0sIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSI6WyJtYWtlRGVjb2RlRnJvbUNhcERhdGEiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAD0obqy4iAAAuIgAALQAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsibWFrZURlY29kZUZyb21TbWFsbGNhcHMiLCJtYWtlRW5jb2RlVG9TbWFsbGNhcHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFzc1N0eWxlT2YsaXNFcnJvckxpa2UsbWFrZVRhZ2dlZCxnZXRUYWcsaGFzT3duUHJvcGVydHlPZixhc3NlcnRQYXNzYWJsZVN5bWJvbCxuYW1lRm9yUGFzc2FibGVTeW1ib2wscGFzc2FibGVTeW1ib2xGb3JOYW1lLFgsRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiaXNFcnJvckxpa2VcIiwgWyRozY9fYSA9PiAoaXNFcnJvckxpa2UgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7aXMsZW50cmllcyxmcm9tRW50cmllc309T2JqZWN0O1xuXG5jb25zdCBCQU5HPSchJy5jaGFyQ29kZUF0KDApO1xuY29uc3QgREFTSD0nLScuY2hhckNvZGVBdCgwKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc3RhcnRzU3BlY2lhbD0oZW5jb2RlZFN0cik9PntcbmlmKGVuY29kZWRTdHI9PT0nJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuLy9cbmNvbnN0IGNvZGU9ZW5jb2RlZFN0ci5jaGFyQ29kZUF0KDApO1xuLy9cbnJldHVybiBCQU5HPD1jb2RlJiZjb2RlPD1EQVNIO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBkb250RW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHM9KHJlbSk9PlxuRmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cmVtfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVQcm9taXNlVG9TbWFsbGNhcHM9KHByb20pPT5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7cHJvbX1gO1xuXG5jb25zdCBkb250RW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz0oZXJyKT0+XG5GYWlsIGBlcnJvciBvYmplY3QgdW5leHBlY3RlZDogJHtxKGVycil9YDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW5jb2RlVG9TbWFsbGNhcHM9KGVuY29kZU9wdGlvbnM9e30pPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPWRvbnRFbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyxcbmVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz1kb250RW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzLFxuZW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz1kb250RW5jb2RlRXJyb3JUb1NtYWxsY2Fwc309XG5lbmNvZGVPcHRpb25zO1xuXG5jb25zdCBhc3NlcnRFbmNvZGVkRXJyb3I9KGVuY29kaW5nKT0+e1xudHlwZW9mIGVuY29kaW5nPT09J29iamVjdCcmJmhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyNlcnJvcicpfHxcbkZhaWwgYGludGVybmFsOiBFcnJvciBlbmNvZGluZyBtdXN0IGhhdmUgXCIjZXJyb3JcIiBwcm9wZXJ0eTogJHtxKFxuZW5jb2RpbmcpXG4gfWA7XG4vL1xuY29uc3QgbWVzc2FnZT1lbmNvZGluZ1snI2Vycm9yJ107XG50eXBlb2YgbWVzc2FnZT09PSdzdHJpbmcnJiYoXG4hc3RhcnRzU3BlY2lhbChtZXNzYWdlKXx8bWVzc2FnZS5jaGFyQXQoMCk9PT0nIScpfHxcbkZhaWwgYGludGVybmFsOiBFcnJvciBlbmNvZGluZyBtdXN0IGhhdmUgc3RyaW5nIG1lc3NhZ2U6ICR7cShtZXNzYWdlKX1gO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6e1xuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3N0cmluZyc6e1xuaWYoc3RhcnRzU3BlY2lhbChwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gYCEke3Bhc3NhYmxlfWA7XG4gfVxuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJuJyN1bmRlZmluZWQnO1xuIH1cbmNhc2UnbnVtYmVyJzp7XG4vL1xuaWYoTnVtYmVyLmlzTmFOKHBhc3NhYmxlKSl7XG5yZXR1cm4nI05hTic7XG4gfWVsc2UgaWYocGFzc2FibGU9PT1JbmZpbml0eSl7XG5yZXR1cm4nI0luZmluaXR5JztcbiB9ZWxzZSBpZihwYXNzYWJsZT09PS1JbmZpbml0eSl7XG5yZXR1cm4nIy1JbmZpbml0eSc7XG4gfVxuLy9cbnJldHVybiBpcyhwYXNzYWJsZSwtMCk/MDpwYXNzYWJsZTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3Qgc3RyPVN0cmluZyhwYXNzYWJsZSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAqL3Bhc3NhYmxlPDBuP3N0cjpgKyR7c3RyfWApO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5jb25zdCBuYW1lPS8qICAgICAgICAgICAgICAgICAqL25hbWVGb3JQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5yZXR1cm4gYCUke25hbWV9YDtcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbmNvbnN0IG5hbWVzPW93bktleXMocGFzc2FibGUpLnNvcnQoKTtcbnJldHVybiBmcm9tRW50cmllcyhcbm5hbWVzLm1hcCgobmFtZSk9PltcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIobmFtZSksXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKHBhc3NhYmxlW25hbWVdKV0pKTtcblxuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBwYXNzYWJsZS5tYXAoZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybntcbicjdGFnJzplbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKGdldFRhZyhwYXNzYWJsZSkpLFxucGF5bG9hZDplbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKHBhc3NhYmxlLnBheWxvYWQpfTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCByZXN1bHQ9ZW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHMoXG5wYXNzYWJsZSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuXG5pZih0eXBlb2YgcmVzdWx0PT09J3N0cmluZycmJnJlc3VsdC5jaGFyQXQoMCk9PT0nJCcpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFJlbW90YWJsZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCIkXCI6ICR7cmVzdWx0fWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCByZXN1bHQ9ZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzKFxucGFzc2FibGUsXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcblxuaWYodHlwZW9mIHJlc3VsdD09PSdzdHJpbmcnJiZyZXN1bHQuY2hhckF0KDApPT09JyYnKXtcbnJldHVybiByZXN1bHQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFByb21pc2UgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiJlwiOiAke3Jlc3VsdH1gO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVFcnJvclRvU21hbGxjYXBzKHBhc3NhYmxlLGVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuYXNzZXJ0RW5jb2RlZEVycm9yKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGBpbnRlcm5hbDogVW5yZWNvZ25pemVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9O1xuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHM9KHBhc3NhYmxlKT0+e1xuaWYoaXNFcnJvckxpa2UocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCByZXN1bHQ9aGFyZGVuKFxuZW5jb2RlRXJyb3JUb1NtYWxsY2FwcyhwYXNzYWJsZSxlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKSk7XG5cbmFzc2VydEVuY29kZWRFcnJvcihyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGUpKTtcbiB9O1xucmV0dXJuIGhhcmRlbihlbmNvZGVUb1NtYWxsY2Fwcyk7XG4gfTskaM2PX29uY2UubWFrZUVuY29kZVRvU21hbGxjYXBzKG1ha2VFbmNvZGVUb1NtYWxsY2Fwcyk7XG5oYXJkZW4obWFrZUVuY29kZVRvU21hbGxjYXBzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0IGRvbnREZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PlxuRmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IGRvbnREZWNvZGVQcm9taXNlRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT5cbkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gO1xuY29uc3QgZG9udERlY29kZUVycm9yRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT5cbkZhaWwgYGVycm9yIHVuZXhwZWN0ZWQ6ICR7cShlbmNvZGluZyl9YDtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwcz0oZGVjb2RlT3B0aW9ucz17fSk9PntcbmNvbnN0e1xuZGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2Fwcz1kb250RGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2FwcyxcbmRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzPWRvbnREZWNvZGVQcm9taXNlRnJvbVNtYWxsY2FwcyxcbmRlY29kZUVycm9yRnJvbVNtYWxsY2Fwcz1kb250RGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzfT1cbmRlY29kZU9wdGlvbnM7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlY29kZUZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+e1xuc3dpdGNoKHR5cGVvZiBlbmNvZGluZyl7XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdudW1iZXInOntcbnJldHVybiBlbmNvZGluZztcbiB9XG5jYXNlJ3N0cmluZyc6e1xuaWYoIXN0YXJ0c1NwZWNpYWwoZW5jb2RpbmcpKXtcbnJldHVybiBlbmNvZGluZztcbiB9XG5jb25zdCBjPWVuY29kaW5nLmNoYXJBdCgwKTtcbnN3aXRjaChjKXtcbmNhc2UnISc6e1xuLy9cbnJldHVybiBlbmNvZGluZy5zbGljZSgxKTtcbiB9XG5jYXNlJyUnOntcbnJldHVybiBwYXNzYWJsZVN5bWJvbEZvck5hbWUoZW5jb2Rpbmcuc2xpY2UoMSkpO1xuIH1cbmNhc2UnIyc6e1xuc3dpdGNoKGVuY29kaW5nKXtcbmNhc2UnI3VuZGVmaW5lZCc6e1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jYXNlJyNOYU4nOntcbnJldHVybiBOYU47XG4gfVxuY2FzZScjSW5maW5pdHknOntcbnJldHVybiBJbmZpbml0eTtcbiB9XG5jYXNlJyMtSW5maW5pdHknOntcbnJldHVybi1JbmZpbml0eTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgdW5rbm93biBjb25zdGFudCBcIiR7cShlbmNvZGluZyl9XCJgLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9XG5jYXNlJysnOlxuY2FzZSctJzp7XG5yZXR1cm4gQmlnSW50KGVuY29kaW5nKTtcbiB9XG5jYXNlJyQnOntcbmNvbnN0IHJlc3VsdD1kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzKFxuZW5jb2RpbmcsXG5kZWNvZGVGcm9tU21hbGxjYXBzKTtcblxuLy9cbmlmKHBhc3NTdHlsZU9mKHJlc3VsdCkhPT0ncmVtb3RhYmxlJyl7XG5GYWlsIGBpbnRlcm5hbDogZGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2FwcyBvcHRpb24gbXVzdCByZXR1cm4gYSByZW1vdGFibGU6ICR7cmVzdWx0fWA7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG5jYXNlJyYnOntcbmNvbnN0IHJlc3VsdD1kZWNvZGVQcm9taXNlRnJvbVNtYWxsY2FwcyhcbmVuY29kaW5nLFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG5cbmlmKHBhc3NTdHlsZU9mKHJlc3VsdCkhPT0ncHJvbWlzZScpe1xuRmFpbCBgaW50ZXJuYWw6IGRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzIG9wdGlvbiBtdXN0IHJldHVybiBhIHByb21pc2U6ICR7cmVzdWx0fWA7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYFNwZWNpYWwgY2hhciAke3EoXG5jKVxuIH0gcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2U6ICR7ZW5jb2Rpbmd9YDtcbiB9fVxuXG4gfVxuY2FzZSdvYmplY3QnOntcbmlmKGVuY29kaW5nPT09bnVsbCl7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfVxuXG5pZihpc0FycmF5KGVuY29kaW5nKSl7XG5yZXR1cm4gZW5jb2RpbmcubWFwKCh2YWwpPT5kZWNvZGVGcm9tU21hbGxjYXBzKHZhbCkpO1xuIH1cblxuaWYoaGFzT3duUHJvcGVydHlPZihlbmNvZGluZywnI3RhZycpKXtcbmNvbnN0eycjdGFnJzp0YWcscGF5bG9hZCwuLi5yZXN0fT1lbmNvZGluZztcbnR5cGVvZiB0YWc9PT0nc3RyaW5nJ3x8XG5GYWlsIGBWYWx1ZSBvZiBcIiN0YWdcIiwgdGhlIHRhZywgbXVzdCBiZSBhIHN0cmluZzogJHtlbmNvZGluZ31gO1xub3duS2V5cyhyZXN0KS5sZW5ndGg9PT0wfHxcbkZhaWwgYCN0YWcgcmVjb3JkIHVuZXhwZWN0ZWQgcHJvcGVydGllczogJHtxKG93bktleXMocmVzdCkpfWA7XG5yZXR1cm4gbWFrZVRhZ2dlZChcbmRlY29kZUZyb21TbWFsbGNhcHModGFnKSxcbmRlY29kZUZyb21TbWFsbGNhcHMocGF5bG9hZCkpO1xuXG4gfVxuXG5pZihoYXNPd25Qcm9wZXJ0eU9mKGVuY29kaW5nLCcjZXJyb3InKSl7XG5jb25zdCByZXN1bHQ9ZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzKFxuZW5jb2RpbmcsXG5kZWNvZGVGcm9tU21hbGxjYXBzKTtcblxucGFzc1N0eWxlT2YocmVzdWx0KT09PSdlcnJvcid8fFxuRmFpbCBgaW50ZXJuYWw6IGRlY29kZUVycm9yRnJvbVNtYWxsY2FwcyBvcHRpb24gbXVzdCByZXR1cm4gYW4gZXJyb3I6ICR7cmVzdWx0fWA7XG5yZXR1cm4gcmVzdWx0O1xuIH1cblxuY29uc3QgZGVjb2RlRW50cnk9KFtlbmNvZGVkTmFtZSxlbmNvZGVkVmFsXSk9PntcbnR5cGVvZiBlbmNvZGVkTmFtZT09PSdzdHJpbmcnfHxcbkZhaWwgYFByb3BlcnR5IG5hbWUgJHtxKFxuZW5jb2RlZE5hbWUpXG4gfSBvZiAke2VuY29kaW5nfSBtdXN0IGJlIGEgc3RyaW5nYDtcbmVuY29kZWROYW1lLmNoYXJBdCgwKSE9PScjJ3x8XG5GYWlsIGBVbnJlY29nbml6ZWQgcmVjb3JkIHR5cGUgJHtxKGVuY29kZWROYW1lKX06ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IG5hbWU9ZGVjb2RlRnJvbVNtYWxsY2FwcyhlbmNvZGVkTmFtZSk7XG50eXBlb2YgbmFtZT09PSdzdHJpbmcnfHxcbkZhaWwgYERlY29kZWQgcHJvcGVydHkgbmFtZSAke25hbWV9IGZyb20gJHtlbmNvZGluZ30gbXVzdCBiZSBhIHN0cmluZ2A7XG5yZXR1cm5bbmFtZSxkZWNvZGVGcm9tU21hbGxjYXBzKGVuY29kZWRWYWwpXTtcbiB9O1xuY29uc3QgZGVjb2RlZEVudHJpZXM9ZW50cmllcyhlbmNvZGluZykubWFwKGRlY29kZUVudHJ5KTtcbnJldHVybiBmcm9tRW50cmllcyhkZWNvZGVkRW50cmllcyk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYGludGVybmFsOiB1bnJlY29nbml6ZWQgSlNPTiB0eXBlb2YgJHtxKFxudHlwZW9mIGVuY29kaW5nKVxuIH06ICR7ZW5jb2Rpbmd9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfTtcbnJldHVybiBoYXJkZW4oZGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG4gfTskaM2PX29uY2UubWFrZURlY29kZUZyb21TbWFsbGNhcHMobWFrZURlY29kZUZyb21TbWFsbGNhcHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUVuY29kZVRvU21hbGxjYXBzIjpbIm1ha2VFbmNvZGVUb1NtYWxsY2FwcyJdLCJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyI6WyJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABFCzL9ECMAABAjAAAqAAAAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL21hcnNoYWwtanVzdGluLmpzeyJpbXBvcnRzIjpbIkBlbmRvL25hdCIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiLCIuL2VuY29kZVRvQ2FwRGF0YS5qcyJdLCJleHBvcnRzIjpbImRlY29kZVRvSnVzdGluIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE5hdCxnZXRFcnJvckNvbnN0cnVjdG9yLGlzT2JqZWN0LHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxxLFgsRmFpbCxRQ0xBU1M7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjNj19hID0+IChOYXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRFcnJvckNvbnN0cnVjdG9yXCIsIFskaM2PX2EgPT4gKGdldEVycm9yQ29uc3RydWN0b3IgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2VuY29kZVRvQ2FwRGF0YS5qc1wiLCBbW1wiUUNMQVNTXCIsIFskaM2PX2EgPT4gKFFDTEFTUyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7c3RyaW5naWZ5OnF1b3RlfT1KU09OO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VZZXNJbmRlbnRlcj0oKT0+e1xuY29uc3Qgc3RyaW5ncz1bXTtcbmxldCBsZXZlbD0wO1xubGV0IG5lZWRTcGFjZT1mYWxzZTtcbmNvbnN0IGxpbmU9KCk9Pntcbm5lZWRTcGFjZT1mYWxzZTtcbnJldHVybiBzdHJpbmdzLnB1c2goJ1xcbicsJyAgJy5yZXBlYXQobGV2ZWwpKTtcbiB9O1xucmV0dXJuIGhhcmRlbih7XG5vcGVuOihvcGVuQnJhY2tldCk9PntcbmxldmVsKz0xO1xuaWYobmVlZFNwYWNlKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbm5lZWRTcGFjZT1mYWxzZTtcbnJldHVybiBzdHJpbmdzLnB1c2gob3BlbkJyYWNrZXQpO1xuIH0sXG5saW5lLFxubmV4dDoodG9rZW4pPT57XG5pZihuZWVkU3BhY2UmJnRva2VuIT09JywnKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbm5lZWRTcGFjZT10cnVlO1xucmV0dXJuIHN0cmluZ3MucHVzaCh0b2tlbik7XG4gfSxcbmNsb3NlOihjbG9zZUJyYWNrZXQpPT57XG5hc3NlcnQobGV2ZWw+PTEpO1xubGV2ZWwtPTE7XG5saW5lKCk7XG5yZXR1cm4gc3RyaW5ncy5wdXNoKGNsb3NlQnJhY2tldCk7XG4gfSxcbmRvbmU6KCk9PntcbmFzc2VydC5lcXVhbChsZXZlbCwwKTtcbnJldHVybiBzdHJpbmdzLmpvaW4oJycpO1xuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBiYWRQYWlyUGF0dGVybj0vXig/Olxcd1xcd3w8PHw+PnxcXCtcXCt8LS18PCF8LT4pJC87XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VOb0luZGVudGVyPSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RyaW5ncz1bXTtcbnJldHVybiBoYXJkZW4oe1xub3Blbjoob3BlbkJyYWNrZXQpPT5zdHJpbmdzLnB1c2gob3BlbkJyYWNrZXQpLFxubGluZTooKT0+c3RyaW5ncy5sZW5ndGgsXG5uZXh0Oih0b2tlbik9PntcbmlmKHN0cmluZ3MubGVuZ3RoPj0xKXtcbmNvbnN0IGxhc3Q9c3RyaW5nc1tzdHJpbmdzLmxlbmd0aC0xXTtcbi8vXG5pZihsYXN0Lmxlbmd0aD49MSYmdG9rZW4ubGVuZ3RoPj0xKXtcbmNvbnN0IHBhaXI9IGAke2xhc3RbbGFzdC5sZW5ndGgtMV19JHt0b2tlblswXX1gO1xuaWYoYmFkUGFpclBhdHRlcm4udGVzdChwYWlyKSl7XG5zdHJpbmdzLnB1c2goJyAnKTtcbiB9XG4gfVxuIH1cbnJldHVybiBzdHJpbmdzLnB1c2godG9rZW4pO1xuIH0sXG5jbG9zZTooY2xvc2VCcmFja2V0KT0+e1xuaWYoc3RyaW5ncy5sZW5ndGg+PTEmJnN0cmluZ3Nbc3RyaW5ncy5sZW5ndGgtMV09PT0nLCcpe1xuc3RyaW5ncy5wb3AoKTtcbiB9XG5yZXR1cm4gc3RyaW5ncy5wdXNoKGNsb3NlQnJhY2tldCk7XG4gfSxcbmRvbmU6KCk9PnN0cmluZ3Muam9pbignJyl9KTtcblxuIH07XG5cbmNvbnN0IGlkZW50UGF0dGVybj0vXlthLXpBLVpdXFx3KiQvO1xuaGFyZGVuKGlkZW50UGF0dGVybik7XG5jb25zdCBBdEF0UHJlZml4UGF0dGVybj0vXkBAKC4qKSQvO1xuaGFyZGVuKEF0QXRQcmVmaXhQYXR0ZXJuKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWNvZGVUb0p1c3Rpbj0oZW5jb2Rpbmcsc2hvdWxkSW5kZW50PWZhbHNlLHNsb3RzPVtdKT0+e1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmU9KHJhd1RyZWUpPT57XG5pZighaXNPYmplY3QocmF3VHJlZSkpe1xucmV0dXJuO1xuIH1cbi8vXG5hc3NlcnQudHlwZW9mKHJhd1RyZWUsJ29iamVjdCcpO1xuYXNzZXJ0KHJhd1RyZWUhPT1udWxsKTtcbmlmKFFDTEFTUyBpbiByYXdUcmVlKXtcbmNvbnN0IHFjbGFzcz1yYXdUcmVlW1FDTEFTU107XG50eXBlb2YgcWNsYXNzPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBxY2xhc3MgdHlwZW9mICR7cSh0eXBlb2YgcWNsYXNzKX1gO1xuYXNzZXJ0KCFpc0FycmF5KHJhd1RyZWUpKTtcbnN3aXRjaChyYXdUcmVlWydAcWNsYXNzJ10pe1xuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdOYU4nOlxuY2FzZSdJbmZpbml0eSc6XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PXJhd1RyZWU7XG50eXBlb2YgZGlnaXRzPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBkaWdpdHMgdHlwZW9mICR7cSh0eXBlb2YgZGlnaXRzKX1gO1xucmV0dXJuO1xuIH1cbmNhc2UnQEBhc3luY0l0ZXJhdG9yJzp7XG5yZXR1cm47XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuY29uc3Qgc3ltPXBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbmFzc2VydC50eXBlb2Yoc3ltLCdzeW1ib2wnKTtcbnJldHVybjtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3R7dGFnLHBheWxvYWR9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKHRhZywnc3RyaW5nJyk7XG5wcmVwYXJlKHBheWxvYWQpO1xucmV0dXJuO1xuIH1cbmNhc2Unc2xvdCc6e1xuY29uc3R7aW5kZXgsaWZhY2V9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcbk5hdChpbmRleCk7XG5pZihpZmFjZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnQudHlwZW9mKGlmYWNlLCdzdHJpbmcnKTtcbiB9XG5yZXR1cm47XG4gfVxuY2FzZSdoaWxiZXJ0Jzp7XG5jb25zdHtvcmlnaW5hbCxyZXN0fT1yYXdUcmVlO1xuJ29yaWdpbmFsJ2luIHJhd1RyZWV8fFxuRmFpbCBgSW52YWxpZCBIaWxiZXJ0IEhvdGVsIGVuY29kaW5nICR7cmF3VHJlZX1gO1xucHJlcGFyZShvcmlnaW5hbCk7XG5pZigncmVzdCdpbiByYXdUcmVlKXtcbmlmKHR5cGVvZiByZXN0IT09J29iamVjdCcpe1xudGhyb3cgRmFpbCBgUmVzdCAke3Jlc3R9IGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0YDtcbiB9XG5pZihyZXN0PT09bnVsbCl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBub3QgYmUgbnVsbGA7XG4gfVxuaWYoaXNBcnJheShyZXN0KSl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBub3QgYmUgYW4gYXJyYXlgO1xuIH1cbmlmKFFDTEFTUyBpbiByZXN0KXtcbnRocm93IEZhaWwgYFJlc3QgZW5jb2RpbmcgJHtyZXN0fSBtdXN0IG5vdCBjb250YWluICR7cShRQ0xBU1MpfWA7XG4gfVxuY29uc3QgbmFtZXM9b3duS2V5cyhyZXN0KTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgbmFtZSAke25hbWV9IG9mICR7cmF3VHJlZX0gbXVzdCBiZSBhIHN0cmluZ2A7XG5wcmVwYXJlKHJlc3RbbmFtZV0pO1xuIH1cbiB9XG5yZXR1cm47XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3R7bmFtZSxtZXNzYWdlfT1yYXdUcmVlO1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGVycm9yIG5hbWUgdHlwZW9mICR7cSh0eXBlb2YgbmFtZSl9YDtcbiB9XG5nZXRFcnJvckNvbnN0cnVjdG9yKG5hbWUpIT09dW5kZWZpbmVkfHxcbkZhaWwgYE11c3QgYmUgdGhlIG5hbWUgb2YgYW4gRXJyb3IgY29uc3RydWN0b3IgJHtuYW1lfWA7XG50eXBlb2YgbWVzc2FnZT09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZXJyb3IgbWVzc2FnZSB0eXBlb2YgJHtxKHR5cGVvZiBtZXNzYWdlKX1gO1xucmV0dXJuO1xuIH1cblxuZGVmYXVsdDp7XG5hc3NlcnQuZmFpbChYIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfWVsc2UgaWYoaXNBcnJheShyYXdUcmVlKSl7XG5jb25zdHtsZW5ndGh9PXJhd1RyZWU7XG5mb3IobGV0IGk9MDtpPGxlbmd0aDtpKz0xKXtcbnByZXBhcmUocmF3VHJlZVtpXSk7XG4gfVxuIH1lbHNle1xuY29uc3QgbmFtZXM9b3duS2V5cyhyYXdUcmVlKTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbmlmKHR5cGVvZiBuYW1lIT09J3N0cmluZycpe1xudGhyb3cgRmFpbCBgUHJvcGVydHkgbmFtZSAke25hbWV9IG9mICR7cmF3VHJlZX0gbXVzdCBiZSBhIHN0cmluZ2A7XG4gfVxucHJlcGFyZShyYXdUcmVlW25hbWVdKTtcbiB9XG4gfVxuIH07XG5cbmNvbnN0IG1ha2VJbmRlbnRlcj1zaG91bGRJbmRlbnQ/bWFrZVllc0luZGVudGVyOm1ha2VOb0luZGVudGVyO1xubGV0IG91dD1tYWtlSW5kZW50ZXIoKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGU9KHJhd1RyZWUpPT57XG4vL1xucmV0dXJuIHJlY3VyKHJhd1RyZWUpO1xuIH07XG5cbmNvbnN0IGRlY29kZVByb3BlcnR5PShuYW1lLHZhbHVlKT0+e1xub3V0LmxpbmUoKTtcbmlmKG5hbWU9PT0nX19wcm90b19fJyl7XG4vL1xuLy9cbi8vXG4vL1xub3V0Lm5leHQoIGBbXCJfX3Byb3RvX19cIl06YCk7XG4gfWVsc2UgaWYoaWRlbnRQYXR0ZXJuLnRlc3QobmFtZSkpe1xub3V0Lm5leHQoIGAke25hbWV9OmApO1xuIH1lbHNle1xub3V0Lm5leHQoIGAke3F1b3RlKG5hbWUpfTpgKTtcbiB9XG5kZWNvZGUodmFsdWUpO1xub3V0Lm5leHQoJywnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgcmVjdXI9KHJhd1RyZWUpPT57XG5pZighaXNPYmplY3QocmF3VHJlZSkpe1xuLy9cbnJldHVybiBvdXQubmV4dChxdW90ZShyYXdUcmVlKSk7XG4gfVxuLy9cbmFzc2VydC50eXBlb2YocmF3VHJlZSwnb2JqZWN0Jyk7XG5hc3NlcnQocmF3VHJlZSE9PW51bGwpO1xuaWYoUUNMQVNTIGluIHJhd1RyZWUpe1xuY29uc3QgcWNsYXNzPXJhd1RyZWVbUUNMQVNTXTtcbmFzc2VydC50eXBlb2YocWNsYXNzLCdzdHJpbmcnKTtcbmFzc2VydCghaXNBcnJheShyYXdUcmVlKSk7XG4vL1xuLy9cbi8vXG5zd2l0Y2gocmF3VHJlZVsnQHFjbGFzcyddKXtcbi8vXG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ05hTic6XG5jYXNlJ0luZmluaXR5JzpcbmNhc2UnLUluZmluaXR5Jzp7XG4vL1xucmV0dXJuIG91dC5uZXh0KHFjbGFzcyk7XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0e2RpZ2l0c309cmF3VHJlZTtcbmFzc2VydC50eXBlb2YoZGlnaXRzLCdzdHJpbmcnKTtcbnJldHVybiBvdXQubmV4dCggYCR7QmlnSW50KGRpZ2l0cyl9bmApO1xuIH1cbmNhc2UnQEBhc3luY0l0ZXJhdG9yJzp7XG4vL1xucmV0dXJuIG91dC5uZXh0KCdTeW1ib2wuYXN5bmNJdGVyYXRvcicpO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5jb25zdHtuYW1lfT1yYXdUcmVlO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbmNvbnN0IHN5bT1wYXNzYWJsZVN5bWJvbEZvck5hbWUobmFtZSk7XG5hc3NlcnQudHlwZW9mKHN5bSwnc3ltYm9sJyk7XG5jb25zdCByZWdpc3RlcmVkTmFtZT1TeW1ib2wua2V5Rm9yKHN5bSk7XG5pZihyZWdpc3RlcmVkTmFtZT09PXVuZGVmaW5lZCl7XG5jb25zdCBtYXRjaD1BdEF0UHJlZml4UGF0dGVybi5leGVjKG5hbWUpO1xuYXNzZXJ0KG1hdGNoIT09bnVsbCk7XG5jb25zdCBzdWZmaXg9bWF0Y2hbMV07XG5hc3NlcnQoU3ltYm9sW3N1ZmZpeF09PT1zeW0pO1xuYXNzZXJ0KGlkZW50UGF0dGVybi50ZXN0KHN1ZmZpeCkpO1xucmV0dXJuIG91dC5uZXh0KCBgU3ltYm9sLiR7c3VmZml4fWApO1xuIH1cbnJldHVybiBvdXQubmV4dCggYFN5bWJvbC5mb3IoJHtxdW90ZShyZWdpc3RlcmVkTmFtZSl9KWApO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09cmF3VHJlZTtcbm91dC5uZXh0KCBgbWFrZVRhZ2dlZCgke3F1b3RlKHRhZyl9LGApO1xuZGVjb2RlKHBheWxvYWQpO1xucmV0dXJuIG91dC5uZXh0KCcpJyk7XG4gfVxuXG5jYXNlJ3Nsb3QnOntcbmxldHtpZmFjZX09cmF3VHJlZTtcbmNvbnN0IGluZGV4PU51bWJlcihOYXQocmF3VHJlZS5pbmRleCkpO1xuY29uc3QgbmVzdGVkUmVuZGVyPShhcmcpPT57XG5jb25zdCBvbGRPdXQ9b3V0O1xudHJ5e1xub3V0PW1ha2VOb0luZGVudGVyKCk7XG5kZWNvZGUoYXJnKTtcbnJldHVybiBvdXQuZG9uZSgpO1xuIH1maW5hbGx5e1xub3V0PW9sZE91dDtcbiB9XG4gfTtcbmlmKGluZGV4PHNsb3RzLmxlbmd0aCl7XG5jb25zdCBzbG90PW5lc3RlZFJlbmRlcihzbG90c1tpbmRleF0pO1xuaWYoaWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdFRvVmFsKCR7c2xvdH0pYCk7XG4gfVxuaWZhY2U9bmVzdGVkUmVuZGVyKGlmYWNlKTtcbnJldHVybiBvdXQubmV4dCggYHNsb3RUb1ZhbCgke3Nsb3R9LCR7aWZhY2V9KWApO1xuIH1lbHNlIGlmKGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBvdXQubmV4dCggYHNsb3QoJHtpbmRleH0pYCk7XG4gfVxuaWZhY2U9bmVzdGVkUmVuZGVyKGlmYWNlKTtcbnJldHVybiBvdXQubmV4dCggYHNsb3QoJHtpbmRleH0sJHtpZmFjZX0pYCk7XG4gfVxuXG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PXJhd1RyZWU7XG5vdXQub3BlbigneycpO1xuZGVjb2RlUHJvcGVydHkoUUNMQVNTLG9yaWdpbmFsKTtcbmlmKCdyZXN0J2luIHJhd1RyZWUpe1xuYXNzZXJ0LnR5cGVvZihyZXN0LCdvYmplY3QnKTtcbmFzc2VydChyZXN0IT09bnVsbCk7XG5jb25zdCBuYW1lcz1vd25LZXlzKHJlc3QpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBQcm9wZXJ0eSBuYW1lICR7cShcbm5hbWUpXG4gfSBvZiAke3Jlc3R9IG11c3QgYmUgYSBzdHJpbmdgO1xuIH1cbmRlY29kZVByb3BlcnR5KG5hbWUscmVzdFtuYW1lXSk7XG4gfVxuIH1cbnJldHVybiBvdXQuY2xvc2UoJ30nKTtcbiB9XG5cbmNhc2UnZXJyb3InOntcbmNvbnN0e1xubmFtZSxcbm1lc3NhZ2UsXG5jYXVzZT11bmRlZmluZWQsXG5lcnJvcnM9dW5kZWZpbmVkfT1cbnJhd1RyZWU7XG5jYXVzZT09PXVuZGVmaW5lZHx8XG5GYWlsIGBlcnJvciBjYXVzZSBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbm5hbWUhPT0gYEFnZ3JlZ2F0ZUVycm9yYHx8XG5GYWlsIGBBZ2dyZWdhdGVFcnJvciBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbmVycm9ycz09PXVuZGVmaW5lZHx8XG5GYWlsIGBlcnJvciBlcnJvcnMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiBtYXJzaGFsLWp1c3RpbmA7XG5yZXR1cm4gb3V0Lm5leHQoIGAke25hbWV9KCR7cXVvdGUobWVzc2FnZSl9KWApO1xuIH1cblxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYHVucmVjb2duaXplZCAke3EoUUNMQVNTKX0gJHtxKHFjbGFzcyl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfWVsc2UgaWYoaXNBcnJheShyYXdUcmVlKSl7XG5jb25zdHtsZW5ndGh9PXJhd1RyZWU7XG5pZihsZW5ndGg9PT0wKXtcbnJldHVybiBvdXQubmV4dCgnW10nKTtcbiB9ZWxzZXtcbm91dC5vcGVuKCdbJyk7XG5mb3IobGV0IGk9MDtpPGxlbmd0aDtpKz0xKXtcbm91dC5saW5lKCk7XG5kZWNvZGUocmF3VHJlZVtpXSk7XG5vdXQubmV4dCgnLCcpO1xuIH1cbnJldHVybiBvdXQuY2xvc2UoJ10nKTtcbiB9XG4gfWVsc2V7XG4vL1xuLy9cbmNvbnN0IG5hbWVzPS8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhyYXdUcmVlKTtcbmlmKG5hbWVzLmxlbmd0aD09PTApe1xucmV0dXJuIG91dC5uZXh0KCd7fScpO1xuIH1lbHNle1xub3V0Lm9wZW4oJ3snKTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbmRlY29kZVByb3BlcnR5KG5hbWUscmF3VHJlZVtuYW1lXSk7XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnfScpO1xuIH1cbiB9XG4gfTtcbnByZXBhcmUoZW5jb2RpbmcpO1xuZGVjb2RlKGVuY29kaW5nKTtcbnJldHVybiBvdXQuZG9uZSgpO1xuIH07JGjNj19vbmNlLmRlY29kZVRvSnVzdGluKGRlY29kZVRvSnVzdGluKTtcbmhhcmRlbihkZWNvZGVUb0p1c3Rpbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWNvZGVUb0p1c3RpbiI6WyJkZWNvZGVUb0p1c3RpbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABEEqbnXAYAAFwGAAAtAAAAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vbWFyc2hhbC5qcyJdLCJleHBvcnRzIjpbInBhcnNlIiwic3RyaW5naWZ5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsbWFrZU1hcnNoYWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vbWFyc2hhbC5qc1wiLCBbW1wibWFrZU1hcnNoYWxcIiwgWyRozY9fYSA9PiAobWFrZU1hcnNoYWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZG9Ob3RDb252ZXJ0VmFsVG9TbG90PSh2YWwpPT5cbkZhaWwgYE1hcnNoYWwncyBzdHJpbmdpZnkgcmVqZWN0cyBwcmVzZW5jZXMgYW5kIHByb21pc2VzICR7dmFsfWA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZG9Ob3RDb252ZXJ0U2xvdFRvVmFsPShzbG90LF9pZmFjZSk9PlxuRmFpbCBgTWFyc2hhbCdzIHBhcnNlIG11c3Qgbm90IGVuY29kZSBhbnkgc2xvdHMgJHtzbG90fWA7XG5cbmNvbnN0IGJhZEFycmF5SGFuZGxlcj1oYXJkZW4oe1xuZ2V0OihfdGFyZ2V0LG5hbWUsX3JlY2VpdmVyKT0+e1xuaWYobmFtZT09PSdsZW5ndGgnKXtcbnJldHVybiAwO1xuIH1cbi8vXG50aHJvdyBGYWlsIGBNYXJzaGFsJ3MgcGFyc2UgbXVzdCBub3QgZW5jb2RlIGFueSBzbG90IHBvc2l0aW9ucyAke25hbWV9YDtcbiB9fSk7XG5cblxuY29uc3QgYmFkQXJyYXk9aGFyZGVuKG5ldyBQcm94eShoYXJkZW4oW10pLGJhZEFycmF5SGFuZGxlcikpO1xuXG5jb25zdHtzZXJpYWxpemUsdW5zZXJpYWxpemV9PW1ha2VNYXJzaGFsKFxuZG9Ob3RDb252ZXJ0VmFsVG9TbG90LFxuZG9Ob3RDb252ZXJ0U2xvdFRvVmFsLFxue1xuZXJyb3JUYWdnaW5nOidvZmYnLFxuLy9cbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J2NhcGRhdGEnfSk7XG5cblxuXG4vKlxuXG5cbiAqL1xuY29uc3Qgc3RyaW5naWZ5PSh2YWwpPT5zZXJpYWxpemUodmFsKS5ib2R5OyRozY9fb25jZS5zdHJpbmdpZnkoc3RyaW5naWZ5KTtcbmhhcmRlbihzdHJpbmdpZnkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgcGFyc2U9KHN0cik9PlxudW5zZXJpYWxpemUoXG5oYXJkZW4oe1xuYm9keTpzdHIsXG5zbG90czpiYWRBcnJheX0pKTskaM2PX29uY2UucGFyc2UocGFyc2UpO1xuXG5cbmhhcmRlbihwYXJzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzdHJpbmdpZnkiOlsic3RyaW5naWZ5Il0sInBhcnNlIjpbInBhcnNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACnDUk4qJwAAKicAACMAAABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvbWFyc2hhbC5qc3siaW1wb3J0cyI6WyJAZW5kby9uYXQiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCIuL2VuY29kZVRvQ2FwRGF0YS5qcyIsIi4vZW5jb2RlVG9TbWFsbGNhcHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlTWFyc2hhbCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBOYXQsYXNzZXJ0UGFzc2FibGUsZ2V0SW50ZXJmYWNlT2YsZ2V0RXJyb3JDb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eU9mLHRvUGFzc2FibGVFcnJvcixYLEZhaWwscSxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcixvYmplY3RNYXAsUUNMQVNTLG1ha2VFbmNvZGVUb0NhcERhdGEsbWFrZURlY29kZUZyb21DYXBEYXRhLG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzLG1ha2VFbmNvZGVUb1NtYWxsY2FwczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcImdldEludGVyZmFjZU9mXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZU9mID0gJGjNj19hKV1dLFtcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRozY9fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1widG9QYXNzYWJsZUVycm9yXCIsIFskaM2PX2EgPT4gKHRvUGFzc2FibGVFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlVG9DYXBEYXRhLmpzXCIsIFtbXCJRQ0xBU1NcIiwgWyRozY9fYSA9PiAoUUNMQVNTID0gJGjNj19hKV1dLFtcIm1ha2VFbmNvZGVUb0NhcERhdGFcIiwgWyRozY9fYSA9PiAobWFrZUVuY29kZVRvQ2FwRGF0YSA9ICRozY9fYSldXSxbXCJtYWtlRGVjb2RlRnJvbUNhcERhdGFcIiwgWyRozY9fYSA9PiAobWFrZURlY29kZUZyb21DYXBEYXRhID0gJGjNj19hKV1dXV0sW1wiLi9lbmNvZGVUb1NtYWxsY2Fwcy5qc1wiLCBbW1wibWFrZURlY29kZUZyb21TbWFsbGNhcHNcIiwgWyRozY9fYSA9PiAobWFrZURlY29kZUZyb21TbWFsbGNhcHMgPSAkaM2PX2EpXV0sW1wibWFrZUVuY29kZVRvU21hbGxjYXBzXCIsIFskaM2PX2EgPT4gKG1ha2VFbmNvZGVUb1NtYWxsY2FwcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG5jb25zdHtkZWZpbmVQcm9wZXJ0aWVzfT1PYmplY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdFZhbFRvU2xvdEZuPSh4KT0+eDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdFNsb3RUb1ZhbEZuPSh4LF8pPT54O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWFyc2hhbD0oXG5jb252ZXJ0VmFsVG9TbG90PWRlZmF1bHRWYWxUb1Nsb3RGbixcbmNvbnZlcnRTbG90VG9WYWw9ZGVmYXVsdFNsb3RUb1ZhbEZuLFxue1xuZXJyb3JUYWdnaW5nPSdvbicsXG5tYXJzaGFsTmFtZT0nYW5vbi1tYXJzaGFsJyxcbi8vXG4vL1xuZXJyb3JJZE51bT0xMDAwMCxcbi8vXG4vL1xubWFyc2hhbFNhdmVFcnJvcj0oZXJyKT0+XG5jb25zb2xlLmxvZygnVGVtcG9yYXJ5IGxvZ2dpbmcgb2Ygc2VudCBlcnJvcicsZXJyKSxcbi8vXG4vL1xuc2VyaWFsaXplQm9keUZvcm1hdD0nY2FwZGF0YSd9PVxue30pPT5cbntcbmFzc2VydC50eXBlb2YobWFyc2hhbE5hbWUsJ3N0cmluZycpO1xuZXJyb3JUYWdnaW5nPT09J29uJ3x8XG5lcnJvclRhZ2dpbmc9PT0nb2ZmJ3x8XG5GYWlsIGBUaGUgZXJyb3JUYWdnaW5nIG9wdGlvbiBjYW4gb25seSBiZSBcIm9uXCIgb3IgXCJvZmZcIiAke2Vycm9yVGFnZ2luZ31gO1xuY29uc3QgbmV4dEVycm9ySWQ9KCk9PntcbmVycm9ySWROdW0rPTE7XG5yZXR1cm4gYGVycm9yOiR7bWFyc2hhbE5hbWV9IyR7ZXJyb3JJZE51bX1gO1xuIH07XG5cbi8qXG5cbiAgICovXG5jb25zdCB0b0NhcERhdGE9KHJvb3QpPT57XG5jb25zdCBzbG90cz1bXTtcbi8vXG5jb25zdCBzbG90TWFwPW5ldyBNYXAoKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBlbmNvZGVTbG90Q29tbW9uPShwYXNzYWJsZSk9PntcbmxldCBpbmRleD1zbG90TWFwLmdldChwYXNzYWJsZSk7XG5pZihpbmRleCE9PXVuZGVmaW5lZCl7XG4vL1xuYXNzZXJ0LnR5cGVvZihpbmRleCwnbnVtYmVyJyk7XG5yZXR1cm4gaGFyZGVuKHtpbmRleCxyZXBlYXQ6dHJ1ZX0pO1xuIH1cblxuaW5kZXg9c2xvdHMubGVuZ3RoO1xuY29uc3Qgc2xvdD1jb252ZXJ0VmFsVG9TbG90KHBhc3NhYmxlKTtcbnNsb3RzLnB1c2goc2xvdCk7XG5zbG90TWFwLnNldChwYXNzYWJsZSxpbmRleCk7XG5yZXR1cm4gaGFyZGVuKHtpbmRleCxyZXBlYXQ6ZmFsc2V9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmNvbnN0IGVuY29kZUVycm9yQ29tbW9uPShlcnIsZW5jb2RlUmVjdXIpPT57XG5jb25zdCBtZXNzYWdlPWVuY29kZVJlY3VyKCBgJHtlcnIubWVzc2FnZX1gKTtcbmFzc2VydC50eXBlb2YobWVzc2FnZSwnc3RyaW5nJyk7XG5jb25zdCBuYW1lPWVuY29kZVJlY3VyKCBgJHtlcnIubmFtZX1gKTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG4vL1xuLy9cbi8vXG5pZihlcnJvclRhZ2dpbmc9PT0nb24nKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBlcnJvcklkPWVuY29kZVJlY3VyKG5leHRFcnJvcklkKCkpO1xuYXNzZXJ0LnR5cGVvZihlcnJvcklkLCdzdHJpbmcnKTtcbmFubm90YXRlRXJyb3IoZXJyLFggYFNlbnQgYXMgJHtlcnJvcklkfWApO1xubWFyc2hhbFNhdmVFcnJvcihlcnIpO1xucmV0dXJuIGhhcmRlbih7ZXJyb3JJZCxtZXNzYWdlLG5hbWV9KTtcbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe21lc3NhZ2UsbmFtZX0pO1xuIH1cbiB9O1xuXG5pZihzZXJpYWxpemVCb2R5Rm9ybWF0PT09J2NhcGRhdGEnKXtcbi8qXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RUb0NhcERhdGE9KHBhc3NhYmxlLGlmYWNlPXVuZGVmaW5lZCk9PntcbmNvbnN0e2luZGV4LHJlcGVhdH09ZW5jb2RlU2xvdENvbW1vbihwYXNzYWJsZSk7XG5cbmlmKHJlcGVhdD09PXRydWV8fGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBoYXJkZW4oe1tRQ0xBU1NdOidzbG90JyxpbmRleH0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J3Nsb3QnLGlmYWNlLGluZGV4fSk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhPSh2YWwsX2VuY29kZVJlY3VyKT0+XG5lbmNvZGVTbG90VG9DYXBEYXRhKHZhbCxnZXRJbnRlcmZhY2VPZih2YWwpKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YT0ocHJvbWlzZSxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb0NhcERhdGEocHJvbWlzZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAgICovXG5jb25zdCBlbmNvZGVFcnJvclRvQ2FwRGF0YT0oZXJyLGVuY29kZVJlY3VyKT0+e1xuY29uc3QgZXJyRGF0YT1lbmNvZGVFcnJvckNvbW1vbihlcnIsZW5jb2RlUmVjdXIpO1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J2Vycm9yJywuLi5lcnJEYXRhfSk7XG4gfTtcblxuY29uc3QgZW5jb2RlVG9DYXBEYXRhPW1ha2VFbmNvZGVUb0NhcERhdGEoe1xuZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhLFxuZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YSxcbmVuY29kZUVycm9yVG9DYXBEYXRhfSk7XG5cblxuY29uc3QgZW5jb2RlZD1lbmNvZGVUb0NhcERhdGEocm9vdCk7XG5jb25zdCBib2R5PUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xucmV0dXJuIGhhcmRlbih7XG5ib2R5LFxuc2xvdHN9KTtcblxuIH1lbHNlIGlmKHNlcmlhbGl6ZUJvZHlGb3JtYXQ9PT0nc21hbGxjYXBzJyl7XG4vKlxuXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RUb1NtYWxsY2Fwcz0ocHJlZml4LHBhc3NhYmxlLGlmYWNlPXVuZGVmaW5lZCk9PntcbmNvbnN0e2luZGV4LHJlcGVhdH09ZW5jb2RlU2xvdENvbW1vbihwYXNzYWJsZSk7XG5cbi8vXG5pZihyZXBlYXQ9PT10cnVlfHxpZmFjZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gYCR7cHJlZml4fSR7aW5kZXh9YDtcbiB9XG5yZXR1cm4gYCR7cHJlZml4fSR7aW5kZXh9LiR7aWZhY2V9YDtcbiB9O1xuXG5jb25zdCBlbmNvZGVSZW1vdGFibGVUb1NtYWxsY2Fwcz0ocmVtb3RhYmxlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvU21hbGxjYXBzKCckJyxyZW1vdGFibGUsZ2V0SW50ZXJmYWNlT2YocmVtb3RhYmxlKSk7XG5cbmNvbnN0IGVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz0ocHJvbWlzZSxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb1NtYWxsY2FwcygnJicscHJvbWlzZSk7XG5cbmNvbnN0IGVuY29kZUVycm9yVG9TbWFsbGNhcHM9KGVycixlbmNvZGVSZWN1cik9PntcbmNvbnN0IGVyckRhdGE9ZW5jb2RlRXJyb3JDb21tb24oZXJyLGVuY29kZVJlY3VyKTtcbmNvbnN0e21lc3NhZ2UsLi4ucmVzdH09ZXJyRGF0YTtcbnJldHVybiBoYXJkZW4oeycjZXJyb3InOm1lc3NhZ2UsLi4ucmVzdH0pO1xuIH07XG5cbmNvbnN0IGVuY29kZVRvU21hbGxjYXBzPW1ha2VFbmNvZGVUb1NtYWxsY2Fwcyh7XG5lbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyxcbmVuY29kZVByb21pc2VUb1NtYWxsY2FwcyxcbmVuY29kZUVycm9yVG9TbWFsbGNhcHN9KTtcblxuXG5jb25zdCBlbmNvZGVkPWVuY29kZVRvU21hbGxjYXBzKHJvb3QpO1xuY29uc3Qgc21hbGxjYXBzQm9keT1KU09OLnN0cmluZ2lmeShlbmNvZGVkKTtcbnJldHVybiBoYXJkZW4oe1xuLy9cbi8vXG5ib2R5OiBgIyR7c21hbGxjYXBzQm9keX1gLFxuc2xvdHN9KTtcblxuIH1lbHNle1xuLy9cbnRocm93IEZhaWwgYFVucmVjb2duaXplZCBzZXJpYWxpemVCb2R5Rm9ybWF0OiAke3Eoc2VyaWFsaXplQm9keUZvcm1hdCl9YDtcbiB9XG4gfTtcblxuY29uc3QgbWFrZUZ1bGxSZXZpdmU9KHNsb3RzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHZhbE1hcD1uZXcgTWFwKCk7XG5cbi8qXG5cblxuICAgICAqL1xuY29uc3QgZGVjb2RlU2xvdENvbW1vbj0oc2xvdERhdGEpPT57XG5jb25zdHtpZmFjZT11bmRlZmluZWQsaW5kZXgsLi4ucmVzdH09c2xvdERhdGE7XG5vd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuRmFpbCBgdW5leHBlY3RlZCBlbmNvZGVkIHNsb3QgcHJvcGVydGllcyAke3Eob3duS2V5cyhyZXN0KSl9YDtcbmNvbnN0IGV4dGFudD12YWxNYXAuZ2V0KGluZGV4KTtcbmlmKGV4dGFudCl7XG5yZXR1cm4gZXh0YW50O1xuIH1cbi8vXG4vL1xuY29uc3Qgc2xvdD1zbG90c1tOdW1iZXIoTmF0KGluZGV4KSldO1xuY29uc3QgdmFsPWNvbnZlcnRTbG90VG9WYWwoc2xvdCxpZmFjZSk7XG52YWxNYXAuc2V0KGluZGV4LHZhbCk7XG5yZXR1cm4gdmFsO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAgICovXG5jb25zdCBkZWNvZGVFcnJvckNvbW1vbj0oZXJyRGF0YSxkZWNvZGVSZWN1cik9PntcbmNvbnN0e1xuZXJyb3JJZD11bmRlZmluZWQsXG5tZXNzYWdlLFxubmFtZSxcbmNhdXNlPXVuZGVmaW5lZCxcbmVycm9ycz11bmRlZmluZWQsXG4uLi5yZXN0fT1cbmVyckRhdGE7XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZE5hbWU9ZGVjb2RlUmVjdXIobmFtZSk7XG5jb25zdCBkTWVzc2FnZT1kZWNvZGVSZWN1cihtZXNzYWdlKTtcbi8vXG5jb25zdCBkRXJyb3JJZD0vKiAgICAgICAgICAgICAgICAgKi9lcnJvcklkJiZkZWNvZGVSZWN1cihlcnJvcklkKTtcbmlmKHR5cGVvZiBkTmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbmFtZSB0eXBlb2YgJHtxKHR5cGVvZiBkTmFtZSl9YDtcbiB9XG5pZih0eXBlb2YgZE1lc3NhZ2UhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGVycm9yIG1lc3NhZ2UgdHlwZW9mICR7cSh0eXBlb2YgZE1lc3NhZ2UpfWA7XG4gfVxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvcihkTmFtZSl8fEVycm9yO1xuY29uc3QgZXJyb3JOYW1lPVxuZEVycm9ySWQ9PT11bmRlZmluZWQ/XG4gYFJlbW90ZSR7ZXJyQ29uc3RydWN0b3IubmFtZX1gOlxuIGBSZW1vdGUke2VyckNvbnN0cnVjdG9yLm5hbWV9KCR7ZEVycm9ySWR9KWA7XG5jb25zdCBvcHRpb25zPXtcbmVycm9yTmFtZSxcbnNhbml0aXplOmZhbHNlfTtcblxuaWYoY2F1c2Upe1xub3B0aW9ucy5jYXVzZT1kZWNvZGVSZWN1cihjYXVzZSk7XG4gfVxuaWYoZXJyb3JzKXtcbm9wdGlvbnMuZXJyb3JzPWRlY29kZVJlY3VyKGVycm9ycyk7XG4gfVxuY29uc3QgcmF3RXJyb3I9bWFrZUVycm9yKGRNZXNzYWdlLGVyckNvbnN0cnVjdG9yLG9wdGlvbnMpO1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGRlc2NzPW9iamVjdE1hcChyZXN0LChkYXRhKT0+KHtcbnZhbHVlOmRlY29kZVJlY3VyKGRhdGEpLFxud3JpdGFibGU6ZmFsc2UsXG5lbnVtZXJhYmxlOmZhbHNlLFxuY29uZmlndXJhYmxlOmZhbHNlfSkpO1xuXG5kZWZpbmVQcm9wZXJ0aWVzKHJhd0Vycm9yLGRlc2NzKTtcbmhhcmRlbihyYXdFcnJvcik7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKHJhd0Vycm9yKTtcbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGRlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShyYXdUcmVlLF9kZWNvZGVSZWN1cik9PntcbmNvbnN0e1tRQ0xBU1NdOl8sLi4uc2xvdERhdGF9PXJhd1RyZWU7XG5yZXR1cm4gZGVjb2RlU2xvdENvbW1vbihzbG90RGF0YSk7XG4gfTtcblxuY29uc3QgZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0ocmF3VHJlZSxkZWNvZGVSZWN1cik9PntcbmNvbnN0e1tRQ0xBU1NdOl8sLi4uZXJyRGF0YX09cmF3VHJlZTtcbnJldHVybiBkZWNvZGVFcnJvckNvbW1vbihlcnJEYXRhLGRlY29kZVJlY3VyKTtcbiB9O1xuXG5jb25zdCByZXZpdmVGcm9tQ2FwRGF0YT1tYWtlRGVjb2RlRnJvbUNhcERhdGEoe1xuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGE6ZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE6ZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVFcnJvckZyb21DYXBEYXRhfSk7XG5cblxuY29uc3QgbWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzPShwcmVmaXgpPT57XG4vKlxuXG5cblxuICAgICAgICovXG5yZXR1cm4oc3RyaW5nRW5jb2RpbmcsX2RlY29kZVJlY3VyKT0+e1xuYXNzZXJ0KHN0cmluZ0VuY29kaW5nLmNoYXJBdCgwKT09PXByZWZpeCk7XG4vL1xuY29uc3QgaT1zdHJpbmdFbmNvZGluZy5pbmRleE9mKCcuJyk7XG5jb25zdCBpbmRleD1OdW1iZXIoc3RyaW5nRW5jb2Rpbmcuc2xpY2UoMSxpPDA/dW5kZWZpbmVkOmkpKTtcbi8vXG5jb25zdCBpZmFjZT1pPDA/dW5kZWZpbmVkOnN0cmluZ0VuY29kaW5nLnNsaWNlKGkrMSk7XG5yZXR1cm4gZGVjb2RlU2xvdENvbW1vbih7aWZhY2UsaW5kZXh9KTtcbiB9O1xuIH07XG5jb25zdCBkZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPW1ha2VEZWNvZGVTbG90RnJvbVNtYWxsY2FwcygnJCcpO1xuY29uc3QgZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzKCcmJyk7XG5cbmNvbnN0IGRlY29kZUVycm9yRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcsZGVjb2RlUmVjdXIpPT57XG5jb25zdHsnI2Vycm9yJzptZXNzYWdlLC4uLnJlc3RFcnJEYXRhfT1lbmNvZGluZztcbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RFcnJEYXRhLCdtZXNzYWdlJyl8fFxuRmFpbCBgdW5leHBlY3RlZCBlbmNvZGVkIGVycm9yIHByb3BlcnR5ICR7cSgnbWVzc2FnZScpfWA7XG5yZXR1cm4gZGVjb2RlRXJyb3JDb21tb24oe21lc3NhZ2UsLi4ucmVzdEVyckRhdGF9LGRlY29kZVJlY3VyKTtcbiB9O1xuXG5jb25zdCByZXZpdmVGcm9tU21hbGxjYXBzPW1ha2VEZWNvZGVGcm9tU21hbGxjYXBzKHtcbi8vXG5kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzLFxuLy9cbmRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzLFxuZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzfSk7XG5cblxucmV0dXJuIGhhcmRlbih7cmV2aXZlRnJvbUNhcERhdGEscmV2aXZlRnJvbVNtYWxsY2Fwc30pO1xuIH07XG5cbi8qXG5cbiAgICovXG5jb25zdCBmcm9tQ2FwRGF0YT0oZGF0YSk9PntcbmNvbnN0e2JvZHksc2xvdHN9PWRhdGE7XG50eXBlb2YgYm9keT09PSdzdHJpbmcnfHxcbkZhaWwgYHVuc2VyaWFsaXplKCkgZ2l2ZW4gbm9uLWNhcGRhdGEgKC5ib2R5IGlzICR7Ym9keX0sIG5vdCBzdHJpbmcpYDtcbmlzQXJyYXkoZGF0YS5zbG90cyl8fFxuRmFpbCBgdW5zZXJpYWxpemUoKSBnaXZlbiBub24tY2FwZGF0YSAoLnNsb3RzIGFyZSBub3QgQXJyYXkpYDtcbmNvbnN0e3Jldml2ZUZyb21DYXBEYXRhLHJldml2ZUZyb21TbWFsbGNhcHN9PW1ha2VGdWxsUmV2aXZlKHNsb3RzKTtcbmxldCByZXN1bHQ7XG4vL1xuaWYoYm9keS5jaGFyQXQoMCk9PT0nIycpe1xuY29uc3Qgc21hbGxjYXBzQm9keT1ib2R5LnNsaWNlKDEpO1xuY29uc3QgZW5jb2Rpbmc9aGFyZGVuKEpTT04ucGFyc2Uoc21hbGxjYXBzQm9keSkpO1xucmVzdWx0PWhhcmRlbihyZXZpdmVGcm9tU21hbGxjYXBzKGVuY29kaW5nKSk7XG4gfWVsc2V7XG5jb25zdCByYXdUcmVlPWhhcmRlbihKU09OLnBhcnNlKGJvZHkpKTtcbnJlc3VsdD1oYXJkZW4ocmV2aXZlRnJvbUNhcERhdGEocmF3VHJlZSkpO1xuIH1cbi8vXG4vL1xuLy9cbmFzc2VydFBhc3NhYmxlKHJlc3VsdCk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICovcmVzdWx0KTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtcbnRvQ2FwRGF0YSxcbmZyb21DYXBEYXRhLFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnNlcmlhbGl6ZTp0b0NhcERhdGEsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG51bnNlcmlhbGl6ZTpmcm9tQ2FwRGF0YX0pO1xuXG4gfTskaM2PX29uY2UubWFrZU1hcnNoYWwobWFrZU1hcnNoYWwpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1hcnNoYWwiOlsibWFrZU1hcnNoYWwiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAu+NNiZwnAACcJwAAJQAAAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9yYW5rT3JkZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIi4vZW5jb2RlUGFzc2FibGUuanMiXSwiZXhwb3J0cyI6WyJGdWxsUmFua0NvdmVyIiwiYXNzZXJ0UmFua1NvcnRlZCIsImNvbXBhcmF0b3JNaXJyb3JJbWFnZSIsImNvbXBhcmVBbnRpUmFuayIsImNvbXBhcmVSYW5rIiwiY292ZXJlZEVudHJpZXMiLCJnZXRJbmRleENvdmVyIiwiZ2V0UGFzc1N0eWxlQ292ZXIiLCJpbnRlcnNlY3RSYW5rQ292ZXJzIiwiaXNSYW5rU29ydGVkIiwibWFrZUNvbXBhcmF0b3JLaXQiLCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCIsInNvcnRCeVJhbmsiLCJ0cml2aWFsQ29tcGFyYXRvciIsInVuaW9uUmFua0NvdmVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRUYWcscGFzc1N0eWxlT2YsbmFtZUZvclBhc3NhYmxlU3ltYm9sLEZhaWwscSxwYXNzU3R5bGVQcmVmaXhlcyxyZWNvcmROYW1lcyxyZWNvcmRWYWx1ZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL2VuY29kZVBhc3NhYmxlLmpzXCIsIFtbXCJwYXNzU3R5bGVQcmVmaXhlc1wiLCBbJGjNj19hID0+IChwYXNzU3R5bGVQcmVmaXhlcyA9ICRozY9fYSldXSxbXCJyZWNvcmROYW1lc1wiLCBbJGjNj19hID0+IChyZWNvcmROYW1lcyA9ICRozY9fYSldXSxbXCJyZWNvcmRWYWx1ZXNcIiwgWyRozY9fYSA9PiAocmVjb3JkVmFsdWVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3R7ZW50cmllcyxmcm9tRW50cmllcyxzZXRQcm90b3R5cGVPZixpc309T2JqZWN0O1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzYW1lVmFsdWVaZXJvPSh4LHkpPT54PT09eXx8aXMoeCx5KTtcblxuY29uc3QgICAgICAgIHRyaXZpYWxDb21wYXJhdG9yPShsZWZ0LHJpZ2h0KT0+XG4vL1xubGVmdDxyaWdodD8tMTpsZWZ0PT09cmlnaHQ/MDoxO1xuXG4vKlxuXG4gKi8kaM2PX29uY2UudHJpdmlhbENvbXBhcmF0b3IodHJpdmlhbENvbXBhcmF0b3IpO1xuXG5jb25zdCBwYXNzU3R5bGVSYW5rcz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnJvbUVudHJpZXMoXG5lbnRyaWVzKHBhc3NTdHlsZVByZWZpeGVzKVxuLy9cbi5zb3J0KChbX2xlZnRTdHlsZSxsZWZ0UHJlZml4ZXNdLFtfcmlnaHRTdHlsZSxyaWdodFByZWZpeGVzXSk9PntcbnJldHVybiB0cml2aWFsQ29tcGFyYXRvcihsZWZ0UHJlZml4ZXMscmlnaHRQcmVmaXhlcyk7XG4gfSkuXG5tYXAoKFtwYXNzU3R5bGUscHJlZml4ZXNdLGluZGV4KT0+e1xuLy9cbi8vXG4vL1xucHJlZml4ZXM9PT1bLi4ucHJlZml4ZXNdLnNvcnQoKS5qb2luKCcnKXx8XG5GYWlsIGB1bnNvcnRlZCBwcmVmaXhlcyBmb3IgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfTogJHtxKHByZWZpeGVzKX1gO1xuY29uc3QgY292ZXI9W1xucHJlZml4ZXMuY2hhckF0KDApLFxuU3RyaW5nLmZyb21DaGFyQ29kZShwcmVmaXhlcy5jaGFyQ29kZUF0KHByZWZpeGVzLmxlbmd0aC0xKSsxKV07XG5cbnJldHVybltwYXNzU3R5bGUse2luZGV4LGNvdmVyfV07XG4gfSkpO1xuXG5cbnNldFByb3RvdHlwZU9mKHBhc3NTdHlsZVJhbmtzLG51bGwpO1xuaGFyZGVuKHBhc3NTdHlsZVJhbmtzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldFBhc3NTdHlsZUNvdmVyPShwYXNzU3R5bGUpPT5wYXNzU3R5bGVSYW5rc1twYXNzU3R5bGVdLmNvdmVyOyRozY9fb25jZS5nZXRQYXNzU3R5bGVDb3ZlcihnZXRQYXNzU3R5bGVDb3Zlcik7XG5oYXJkZW4oZ2V0UGFzc1N0eWxlQ292ZXIpO1xuXG4vKlxuXG4gKi9cbmNvbnN0IG1lbW9PZlNvcnRlZD1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG4gKi9cbmNvbnN0IGNvbXBhcmF0b3JNaXJyb3JJbWFnZXM9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvbXBhcmF0b3JLaXQ9KGNvbXBhcmVSZW1vdGFibGVzPShfeCxfeSk9Pk5hTik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb21wYXJhdG9yPShsZWZ0LHJpZ2h0KT0+e1xuaWYoc2FtZVZhbHVlWmVybyhsZWZ0LHJpZ2h0KSl7XG5yZXR1cm4gMDtcbiB9XG5jb25zdCBsZWZ0U3R5bGU9cGFzc1N0eWxlT2YobGVmdCk7XG5jb25zdCByaWdodFN0eWxlPXBhc3NTdHlsZU9mKHJpZ2h0KTtcbmlmKGxlZnRTdHlsZSE9PXJpZ2h0U3R5bGUpe1xucmV0dXJuIHRyaXZpYWxDb21wYXJhdG9yKFxucGFzc1N0eWxlUmFua3NbbGVmdFN0eWxlXS5pbmRleCxcbnBhc3NTdHlsZVJhbmtzW3JpZ2h0U3R5bGVdLmluZGV4KTtcblxuIH1cbi8qXG5cbiAgICAgKi9cbnN3aXRjaChsZWZ0U3R5bGUpe1xuY2FzZSdyZW1vdGFibGUnOntcbnJldHVybiBjb21wYXJlUmVtb3RhYmxlcyhsZWZ0LHJpZ2h0KTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ251bGwnOlxuY2FzZSdlcnJvcic6XG5jYXNlJ3Byb21pc2UnOntcbi8vXG4vL1xucmV0dXJuIDA7XG4gfVxuY2FzZSdib29sZWFuJzpcbmNhc2UnYmlnaW50JzpcbmNhc2Unc3RyaW5nJzp7XG4vL1xuLy9cbmlmKGxlZnQ8cmlnaHQpe1xucmV0dXJuLTE7XG4gfWVsc2V7XG5hc3NlcnQobGVmdD5yaWdodCk7XG5yZXR1cm4gMTtcbiB9XG4gfVxuY2FzZSdzeW1ib2wnOntcbnJldHVybiBjb21wYXJhdG9yKFxubmFtZUZvclBhc3NhYmxlU3ltYm9sKGxlZnQpLFxubmFtZUZvclBhc3NhYmxlU3ltYm9sKHJpZ2h0KSk7XG5cbiB9XG5jYXNlJ251bWJlcic6e1xuLy9cbmlmKE51bWJlci5pc05hTihsZWZ0KSl7XG5hc3NlcnQoIU51bWJlci5pc05hTihyaWdodCkpO1xucmV0dXJuIDE7XG4gfWVsc2UgaWYoTnVtYmVyLmlzTmFOKHJpZ2h0KSl7XG5yZXR1cm4tMTtcbiB9XG4vL1xuLy9cbmlmKGxlZnQ8cmlnaHQpe1xucmV0dXJuLTE7XG4gfWVsc2V7XG5hc3NlcnQobGVmdD5yaWdodCk7XG5yZXR1cm4gMTtcbiB9XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBsZWZ0TmFtZXM9cmVjb3JkTmFtZXMobGVmdCk7XG5jb25zdCByaWdodE5hbWVzPXJlY29yZE5hbWVzKHJpZ2h0KTtcblxuY29uc3QgcmVzdWx0PWNvbXBhcmF0b3IobGVmdE5hbWVzLHJpZ2h0TmFtZXMpO1xuaWYocmVzdWx0IT09MCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNvbnN0IGxlZnRWYWx1ZXM9cmVjb3JkVmFsdWVzKGxlZnQsbGVmdE5hbWVzKTtcbmNvbnN0IHJpZ2h0VmFsdWVzPXJlY29yZFZhbHVlcyhyaWdodCxyaWdodE5hbWVzKTtcbnJldHVybiBjb21wYXJhdG9yKGxlZnRWYWx1ZXMscmlnaHRWYWx1ZXMpO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuY29uc3QgbGVuPU1hdGgubWluKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbmNvbnN0IHJlc3VsdD1jb21wYXJhdG9yKGxlZnRbaV0scmlnaHRbaV0pO1xuaWYocmVzdWx0IT09MCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG4vL1xuLy9cbnJldHVybiBjb21wYXJhdG9yKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbi8vXG5jb25zdCBsYWJlbENvbXA9Y29tcGFyYXRvcihnZXRUYWcobGVmdCksZ2V0VGFnKHJpZ2h0KSk7XG5pZihsYWJlbENvbXAhPT0wKXtcbnJldHVybiBsYWJlbENvbXA7XG4gfVxucmV0dXJuIGNvbXBhcmF0b3IobGVmdC5wYXlsb2FkLHJpZ2h0LnBheWxvYWQpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIHBhc3NTdHlsZTogJHtxKGxlZnRTdHlsZSl9YDtcbiB9fVxuXG4vKiAgICAgICAgICAgICAgICovXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG91dGVyQ29tcGFyYXRvcj0oeCx5KT0+XG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9jb21wYXJhdG9yKHgseSl8fDA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhbnRpQ29tcGFyYXRvcj0oeCx5KT0+b3V0ZXJDb21wYXJhdG9yKHkseCk7XG5cbm1lbW9PZlNvcnRlZC5zZXQob3V0ZXJDb21wYXJhdG9yLG5ldyBXZWFrU2V0KCkpO1xubWVtb09mU29ydGVkLnNldChhbnRpQ29tcGFyYXRvcixuZXcgV2Vha1NldCgpKTtcbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuc2V0KG91dGVyQ29tcGFyYXRvcixhbnRpQ29tcGFyYXRvcik7XG5jb21wYXJhdG9yTWlycm9ySW1hZ2VzLnNldChhbnRpQ29tcGFyYXRvcixvdXRlckNvbXBhcmF0b3IpO1xuXG5yZXR1cm4gaGFyZGVuKHtjb21wYXJhdG9yOm91dGVyQ29tcGFyYXRvcixhbnRpQ29tcGFyYXRvcn0pO1xuIH07XG4vKlxuXG5cbiAqLyRozY9fb25jZS5tYWtlQ29tcGFyYXRvcktpdChtYWtlQ29tcGFyYXRvcktpdCk7XG5jb25zdCAgICAgICAgY29tcGFyYXRvck1pcnJvckltYWdlPShjb21wYXJhdG9yKT0+XG5jb21wYXJhdG9yTWlycm9ySW1hZ2VzLmdldChjb21wYXJhdG9yKTtcblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5jb21wYXJhdG9yTWlycm9ySW1hZ2UoY29tcGFyYXRvck1pcnJvckltYWdlKTtcbmNvbnN0ICAgICAgICBpc1JhbmtTb3J0ZWQ9KHBhc3NhYmxlcyxjb21wYXJlKT0+e1xuY29uc3Qgc3ViTWVtb09mU29ydGVkPW1lbW9PZlNvcnRlZC5nZXQoY29tcGFyZSk7XG5hc3NlcnQoc3ViTWVtb09mU29ydGVkIT09dW5kZWZpbmVkKTtcbmlmKHN1Yk1lbW9PZlNvcnRlZC5oYXMocGFzc2FibGVzKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5hc3NlcnQocGFzc1N0eWxlT2YocGFzc2FibGVzKT09PSdjb3B5QXJyYXknKTtcbmZvcihsZXQgaT0xO2k8cGFzc2FibGVzLmxlbmd0aDtpKz0xKXtcbmlmKGNvbXBhcmUocGFzc2FibGVzW2ktMV0scGFzc2FibGVzW2ldKT49MSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnN1Yk1lbW9PZlNvcnRlZC5hZGQocGFzc2FibGVzKTtcbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmlzUmFua1NvcnRlZChpc1JhbmtTb3J0ZWQpO1xuaGFyZGVuKGlzUmFua1NvcnRlZCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0UmFua1NvcnRlZD0oc29ydGVkLGNvbXBhcmUpPT5cbmlzUmFua1NvcnRlZChzb3J0ZWQsY29tcGFyZSl8fFxuLy9cbi8vXG5GYWlsIGBNdXN0IGJlIHJhbmsgc29ydGVkOiAke3NvcnRlZH0gdnMgJHtzb3J0QnlSYW5rKHNvcnRlZCxjb21wYXJlKX1gOyRozY9fb25jZS5hc3NlcnRSYW5rU29ydGVkKGFzc2VydFJhbmtTb3J0ZWQpO1xuaGFyZGVuKGFzc2VydFJhbmtTb3J0ZWQpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzb3J0QnlSYW5rPShwYXNzYWJsZXMsY29tcGFyZSk9PntcbmlmKEFycmF5LmlzQXJyYXkocGFzc2FibGVzKSl7XG5oYXJkZW4ocGFzc2FibGVzKTtcbi8vXG4vL1xuLy9cbmlmKGlzUmFua1NvcnRlZChwYXNzYWJsZXMsY29tcGFyZSkpe1xucmV0dXJuIHBhc3NhYmxlcztcbiB9XG4gfVxuY29uc3QgdW5zb3J0ZWQ9Wy4uLnBhc3NhYmxlc107XG51bnNvcnRlZC5mb3JFYWNoKGhhcmRlbik7XG5jb25zdCBzb3J0ZWQ9dW5zb3J0ZWQuc29ydChjb21wYXJlKTtcbi8vXG4vL1xuLy9cbmlmKGNvbXBhcmUodHJ1ZSx1bmRlZmluZWQpPjApe1xubGV0IGk9c29ydGVkLmxlbmd0aC0xO1xud2hpbGUoaT49MCYmc29ydGVkW2ldPT09dW5kZWZpbmVkKWktPTE7XG5jb25zdCBuPXNvcnRlZC5sZW5ndGgtaS0xO1xuaWYobj4wJiZuPHNvcnRlZC5sZW5ndGgpe1xuc29ydGVkLmNvcHlXaXRoaW4obiwwKTtcbnNvcnRlZC5maWxsKC8qICAgICAgICAgICAgKi91bmRlZmluZWQsMCxuKTtcbiB9XG4gfVxuaGFyZGVuKHNvcnRlZCk7XG5jb25zdCBzdWJNZW1vT2ZTb3J0ZWQ9bWVtb09mU29ydGVkLmdldChjb21wYXJlKTtcbmFzc2VydChzdWJNZW1vT2ZTb3J0ZWQhPT11bmRlZmluZWQpO1xuc3ViTWVtb09mU29ydGVkLmFkZChzb3J0ZWQpO1xucmV0dXJuIHNvcnRlZDtcbiB9OyRozY9fb25jZS5zb3J0QnlSYW5rKHNvcnRCeVJhbmspO1xuaGFyZGVuKHNvcnRCeVJhbmspO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcmFua1NlYXJjaD0oc29ydGVkLGNvbXBhcmUsa2V5LGJpYXM9J2xlZnRNb3N0Jyk9PntcbmFzc2VydFJhbmtTb3J0ZWQoc29ydGVkLGNvbXBhcmUpO1xubGV0IGxlZnQ9MDtcbmxldCByaWdodD1zb3J0ZWQubGVuZ3RoO1xud2hpbGUobGVmdDxyaWdodCl7XG5jb25zdCBtPU1hdGguZmxvb3IoKGxlZnQrcmlnaHQpLzIpO1xuY29uc3QgY29tcD1jb21wYXJlKHNvcnRlZFttXSxrZXkpO1xuaWYoY29tcDw9LTF8fGNvbXA9PT0wJiZiaWFzPT09J3JpZ2h0TW9zdCcpe1xubGVmdD1tKzE7XG4gfWVsc2V7XG5hc3NlcnQoY29tcD49MXx8Y29tcD09PTAmJmJpYXM9PT0nbGVmdE1vc3QnKTtcbnJpZ2h0PW07XG4gfVxuIH1cbnJldHVybiBiaWFzPT09J2xlZnRNb3N0Jz9sZWZ0OnJpZ2h0LTE7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW5kZXhDb3Zlcj0oc29ydGVkLGNvbXBhcmUsW2xlZnRLZXkscmlnaHRLZXldKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChzb3J0ZWQsY29tcGFyZSk7XG5jb25zdCBsZWZ0SW5kZXg9cmFua1NlYXJjaChzb3J0ZWQsY29tcGFyZSxsZWZ0S2V5LCdsZWZ0TW9zdCcpO1xuY29uc3QgcmlnaHRJbmRleD1yYW5rU2VhcmNoKHNvcnRlZCxjb21wYXJlLHJpZ2h0S2V5LCdyaWdodE1vc3QnKTtcbnJldHVybltsZWZ0SW5kZXgscmlnaHRJbmRleF07XG4gfTskaM2PX29uY2UuZ2V0SW5kZXhDb3ZlcihnZXRJbmRleENvdmVyKTtcbmhhcmRlbihnZXRJbmRleENvdmVyKTtcblxuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgRnVsbFJhbmtDb3Zlcj1oYXJkZW4oWycnLCd7J10pO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLkZ1bGxSYW5rQ292ZXIoRnVsbFJhbmtDb3Zlcik7XG5jb25zdCAgICAgICAgY292ZXJlZEVudHJpZXM9KHNvcnRlZCxbbGVmdEluZGV4LHJpZ2h0SW5kZXhdKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXRlcmFibGU9aGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5sZXQgaT1sZWZ0SW5kZXg7XG5yZXR1cm4gaGFyZGVuKHtcbm5leHQ6KCk9PntcbmlmKGk8PXJpZ2h0SW5kZXgpe1xuY29uc3QgZWxlbWVudD1zb3J0ZWRbaV07XG5pKz0xO1xucmV0dXJuIGhhcmRlbih7dmFsdWU6W2ksZWxlbWVudF0sZG9uZTpmYWxzZX0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7dmFsdWU6dW5kZWZpbmVkLGRvbmU6dHJ1ZX0pO1xuIH1cbiB9fSk7XG5cbiB9fSk7XG5cbnJldHVybiBpdGVyYWJsZTtcbiB9OyRozY9fb25jZS5jb3ZlcmVkRW50cmllcyhjb3ZlcmVkRW50cmllcyk7XG5oYXJkZW4oY292ZXJlZEVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWF4UmFuaz0oY29tcGFyZSxhLGIpPT5jb21wYXJlKGEsYik+PTA/YTpiO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWluUmFuaz0oY29tcGFyZSxhLGIpPT5jb21wYXJlKGEsYik8PTA/YTpiO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgdW5pb25SYW5rQ292ZXJzPShjb21wYXJlLGNvdmVycyk9Pntcbi8qXG5cblxuXG4gICAqL1xuY29uc3QgdW5pb25SYW5rQ292ZXJQYWlyPShbbGVmdEEscmlnaHRBXSxbbGVmdEIscmlnaHRCXSk9Pltcbm1pblJhbmsoY29tcGFyZSxsZWZ0QSxsZWZ0QiksXG5tYXhSYW5rKGNvbXBhcmUscmlnaHRBLHJpZ2h0QildO1xuXG5yZXR1cm4gY292ZXJzLnJlZHVjZSh1bmlvblJhbmtDb3ZlclBhaXIsWyd7JywnJ10pO1xuIH07JGjNj19vbmNlLnVuaW9uUmFua0NvdmVycyh1bmlvblJhbmtDb3ZlcnMpO1xuaGFyZGVuKHVuaW9uUmFua0NvdmVycyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpbnRlcnNlY3RSYW5rQ292ZXJzPShjb21wYXJlLGNvdmVycyk9Pntcbi8qXG5cblxuXG4gICAqL1xuY29uc3QgaW50ZXJzZWN0UmFua0NvdmVyUGFpcj0oW2xlZnRBLHJpZ2h0QV0sW2xlZnRCLHJpZ2h0Ql0pPT5bXG5tYXhSYW5rKGNvbXBhcmUsbGVmdEEsbGVmdEIpLFxubWluUmFuayhjb21wYXJlLHJpZ2h0QSxyaWdodEIpXTtcblxucmV0dXJuIGNvdmVycy5yZWR1Y2UoaW50ZXJzZWN0UmFua0NvdmVyUGFpcixbJycsJ3snXSk7XG4gfTskaM2PX29uY2UuaW50ZXJzZWN0UmFua0NvdmVycyhpbnRlcnNlY3RSYW5rQ292ZXJzKTtcblxuY29uc3QgICAgICAge2NvbXBhcmF0b3I6Y29tcGFyZVJhbmssYW50aUNvbXBhcmF0b3I6Y29tcGFyZUFudGlSYW5rfT1cbm1ha2VDb21wYXJhdG9yS2l0KCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuY29tcGFyZVJhbmsoY29tcGFyZVJhbmspOyRozY9fb25jZS5jb21wYXJlQW50aVJhbmsoY29tcGFyZUFudGlSYW5rKTtcbmNvbnN0ICAgICAgICBtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdD0obG9uZ0xpdmVkPWZhbHNlKT0+e1xubGV0IG51bVNlZW49MDtcbi8vXG4vL1xuLy9cbmNvbnN0IE1hcENvbnN0cnVjdG9yPWxvbmdMaXZlZD9XZWFrTWFwOk1hcDtcbmNvbnN0IHNlZW49bmV3IE1hcENvbnN0cnVjdG9yKCk7XG5jb25zdCB0YWc9KHIpPT57XG5pZihzZWVuLmhhcyhyKSl7XG5yZXR1cm4gc2Vlbi5nZXQocik7XG4gfVxubnVtU2Vlbis9MTtcbnNlZW4uc2V0KHIsbnVtU2Vlbik7XG5yZXR1cm4gbnVtU2VlbjtcbiB9O1xuY29uc3QgY29tcGFyZVJlbW90YWJsZXM9KHgseSk9PmNvbXBhcmVSYW5rKHRhZyh4KSx0YWcoeSkpO1xucmV0dXJuIG1ha2VDb21wYXJhdG9yS2l0KGNvbXBhcmVSZW1vdGFibGVzKTtcbiB9OyRozY9fb25jZS5tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCk7XG5oYXJkZW4obWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJpdmlhbENvbXBhcmF0b3IiOlsidHJpdmlhbENvbXBhcmF0b3IiXSwiZ2V0UGFzc1N0eWxlQ292ZXIiOlsiZ2V0UGFzc1N0eWxlQ292ZXIiXSwibWFrZUNvbXBhcmF0b3JLaXQiOlsibWFrZUNvbXBhcmF0b3JLaXQiXSwiY29tcGFyYXRvck1pcnJvckltYWdlIjpbImNvbXBhcmF0b3JNaXJyb3JJbWFnZSJdLCJpc1JhbmtTb3J0ZWQiOlsiaXNSYW5rU29ydGVkIl0sImFzc2VydFJhbmtTb3J0ZWQiOlsiYXNzZXJ0UmFua1NvcnRlZCJdLCJzb3J0QnlSYW5rIjpbInNvcnRCeVJhbmsiXSwiZ2V0SW5kZXhDb3ZlciI6WyJnZXRJbmRleENvdmVyIl0sIkZ1bGxSYW5rQ292ZXIiOlsiRnVsbFJhbmtDb3ZlciJdLCJjb3ZlcmVkRW50cmllcyI6WyJjb3ZlcmVkRW50cmllcyJdLCJ1bmlvblJhbmtDb3ZlcnMiOlsidW5pb25SYW5rQ292ZXJzIl0sImludGVyc2VjdFJhbmtDb3ZlcnMiOlsiaW50ZXJzZWN0UmFua0NvdmVycyJdLCJjb21wYXJlUmFuayI6WyJjb21wYXJlUmFuayJdLCJjb21wYXJlQW50aVJhbmsiOlsiY29tcGFyZUFudGlSYW5rIl0sIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0IjpbIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAS6w5NKAQAASgEAACEAAABAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAF/qToJZBQAAWQUAAB4AAABAZW5kby9uYXQtdjUuMC4xMy9zcmMvaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIk5hdCIsImlzTmF0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXNOYXQsICduYW1lJywge3ZhbHVlOiBcImlzTmF0XCJ9KTskaM2PX29uY2UuaXNOYXQoaXNOYXQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXQsICduYW1lJywge3ZhbHVlOiBcIk5hdFwifSk7JGjNj19vbmNlLk5hdChOYXQpOyAgIC8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBpc05hdChhbGxlZ2VkTnVtKXtcbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J2JpZ2ludCcpe1xucmV0dXJuIGFsbGVnZWROdW0+PTA7XG4gfVxuaWYodHlwZW9mIGFsbGVnZWROdW0hPT0nbnVtYmVyJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5yZXR1cm4gTnVtYmVyLmlzU2FmZUludGVnZXIoYWxsZWdlZE51bSkmJmFsbGVnZWROdW0+PTA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gTmF0KGFsbGVnZWROdW0pe1xuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nYmlnaW50Jyl7XG5pZihhbGxlZ2VkTnVtPDApe1xudGhyb3cgUmFuZ2VFcnJvciggYCR7YWxsZWdlZE51bX0gaXMgbmVnYXRpdmVgKTtcbiB9XG5yZXR1cm4gYWxsZWdlZE51bTtcbiB9XG5cbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J251bWJlcicpe1xuaWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGFsbGVnZWROdW0pKXtcbnRocm93IFJhbmdlRXJyb3IoIGAke2FsbGVnZWROdW19IGlzIG5vdCBhIHNhZmUgaW50ZWdlcmApO1xuIH1cbmlmKGFsbGVnZWROdW08MCl7XG50aHJvdyBSYW5nZUVycm9yKCBgJHthbGxlZ2VkTnVtfSBpcyBuZWdhdGl2ZWApO1xuIH1cbnJldHVybiBCaWdJbnQoYWxsZWdlZE51bSk7XG4gfVxuXG50aHJvdyBUeXBlRXJyb3IoXG4gYCR7YWxsZWdlZE51bX0gaXMgYSAke3R5cGVvZiBhbGxlZ2VkTnVtfSBidXQgbXVzdCBiZSBhIGJpZ2ludCBvciBhIG51bWJlcmApO1xuXG4gfVxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNOYXQiOlsiaXNOYXQiXSwiTmF0IjpbIk5hdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAChKaq8PwoAAD8KAAAgAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjcvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvaXRlci1oZWxwZXJzLmpzIiwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3NyYy9lcnJvci5qcyIsIi4vc3JjL3JlbW90YWJsZS5qcyIsIi4vc3JjL3N5bWJvbC5qcyIsIi4vc3JjL3N0cmluZy5qcyIsIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIiwiLi9zcmMvbWFrZVRhZ2dlZC5qcyIsIi4vc3JjL21ha2UtZmFyLmpzIiwiLi9zcmMvdHlwZUd1YXJkcy5qcyIsIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiRmFyIiwiRmFyIiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJmaWx0ZXJJdGVyYWJsZSIsImZpbHRlckl0ZXJhYmxlIiwiaXNFcnJvckxpa2UiLCJpc0Vycm9yTGlrZSIsImlzT2JqZWN0IiwiaXNPYmplY3QiLCJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSIsImlzUGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIixudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2l0ZXItaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW11dLFtcIi4vc3JjL2Vycm9yLmpzXCIsIFtdXSxbXCIuL3NyYy9yZW1vdGFibGUuanNcIiwgW11dLFtcIi4vc3JjL3N5bWJvbC5qc1wiLCBbXV0sW1wiLi9zcmMvc3RyaW5nLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGVPZi5qc1wiLCBbXV0sW1wiLi9zcmMvbWFrZVRhZ2dlZC5qc1wiLCBbXV0sW1wiLi9zcmMvbWFrZS1mYXIuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVHdWFyZHMuanNcIiwgW11dLFtcIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9pdGVyLWhlbHBlcnMuanMiOltbIm1hcEl0ZXJhYmxlIiwibWFwSXRlcmFibGUiXSxbImZpbHRlckl0ZXJhYmxlIiwiZmlsdGVySXRlcmFibGUiXV0sIi4vc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIjpbWyJQQVNTX1NUWUxFIiwiUEFTU19TVFlMRSJdLFsiaXNPYmplY3QiLCJpc09iamVjdCJdLFsiYXNzZXJ0Q2hlY2tlciIsImFzc2VydENoZWNrZXIiXSxbImdldFRhZyIsImdldFRhZyJdLFsiaGFzT3duUHJvcGVydHlPZiIsImhhc093blByb3BlcnR5T2YiXV0sIi4vc3JjL2Vycm9yLmpzIjpbWyJnZXRFcnJvckNvbnN0cnVjdG9yIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciJdLFsiaXNFcnJvckxpa2UiLCJpc0Vycm9yTGlrZSJdXSwiLi9zcmMvcmVtb3RhYmxlLmpzIjpbWyJnZXRJbnRlcmZhY2VPZiIsImdldEludGVyZmFjZU9mIl1dLCIuL3NyYy9zeW1ib2wuanMiOltbImFzc2VydFBhc3NhYmxlU3ltYm9sIiwiYXNzZXJ0UGFzc2FibGVTeW1ib2wiXSxbImlzUGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIl0sWyJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiXSxbInBhc3NhYmxlU3ltYm9sRm9yTmFtZSIsInBhc3NhYmxlU3ltYm9sRm9yTmFtZSJdXSwiLi9zcmMvc3RyaW5nLmpzIjpbWyJpc1dlbGxGb3JtZWRTdHJpbmciLCJpc1dlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIl0sWyJhc3NlcnRQYXNzYWJsZVN0cmluZyIsImFzc2VydFBhc3NhYmxlU3RyaW5nIl1dLCIuL3NyYy9wYXNzU3R5bGVPZi5qcyI6W1sicGFzc1N0eWxlT2YiLCJwYXNzU3R5bGVPZiJdLFsiaXNQYXNzYWJsZSIsImlzUGFzc2FibGUiXSxbImFzc2VydFBhc3NhYmxlIiwiYXNzZXJ0UGFzc2FibGUiXSxbInRvUGFzc2FibGVFcnJvciIsInRvUGFzc2FibGVFcnJvciJdLFsidG9UaHJvd2FibGUiLCJ0b1Rocm93YWJsZSJdXSwiLi9zcmMvbWFrZVRhZ2dlZC5qcyI6W1sibWFrZVRhZ2dlZCIsIm1ha2VUYWdnZWQiXV0sIi4vc3JjL21ha2UtZmFyLmpzIjpbWyJSZW1vdGFibGUiLCJSZW1vdGFibGUiXSxbIkZhciIsIkZhciJdLFsiVG9GYXJGdW5jdGlvbiIsIlRvRmFyRnVuY3Rpb24iXSxbIkdFVF9NRVRIT0RfTkFNRVMiLCJHRVRfTUVUSE9EX05BTUVTIl1dLCIuL3NyYy90eXBlR3VhcmRzLmpzIjpbWyJhc3NlcnRSZWNvcmQiLCJhc3NlcnRSZWNvcmQiXSxbImFzc2VydENvcHlBcnJheSIsImFzc2VydENvcHlBcnJheSJdLFsiYXNzZXJ0UmVtb3RhYmxlIiwiYXNzZXJ0UmVtb3RhYmxlIl0sWyJpc1JlbW90YWJsZSIsImlzUmVtb3RhYmxlIl0sWyJpc1JlY29yZCIsImlzUmVjb3JkIl0sWyJpc0NvcHlBcnJheSIsImlzQ29weUFycmF5Il1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACXqL8lVAYAAFQGAAAoAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2NvcHlBcnJheS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiQ29weUFycmF5SGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsYXNzZXJ0Q2hlY2tlcixnZXRPd25EYXRhRGVzY3JpcHRvcjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImdldE93bkRhdGFEZXNjcmlwdG9yXCIsIFskaM2PX2EgPT4gKGdldE93bkRhdGFEZXNjcmlwdG9yID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuY29uc3R7Z2V0UHJvdG90eXBlT2Z9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5LHByb3RvdHlwZTphcnJheVByb3RvdHlwZX09QXJyYXk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNhbkJlVmFsaWQ9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT5cbmlzQXJyYXkoY2FuZGlkYXRlKXx8XG4hIWNoZWNrJiZjaGVjayhmYWxzZSxYIGBBcnJheSBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgQ29weUFycmF5SGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J2NvcHlBcnJheScsXG5cbmNhbkJlVmFsaWQsXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cik9PntcbmNhbkJlVmFsaWQoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuZ2V0UHJvdG90eXBlT2YoY2FuZGlkYXRlKT09PWFycmF5UHJvdG90eXBlfHxcbmFzc2VydC5mYWlsKFggYE1hbGZvcm1lZCBhcnJheTogJHtjYW5kaWRhdGV9YCxUeXBlRXJyb3IpO1xuLy9cbi8vXG5jb25zdCBsZW49LyogICAgICAgICAgICAgICAgICovXG5nZXRPd25EYXRhRGVzY3JpcHRvcihjYW5kaWRhdGUsJ2xlbmd0aCcsZmFsc2UsYXNzZXJ0Q2hlY2tlcikudmFsdWU7XG5cbi8vXG4vL1xuZm9yKGxldCBpPTA7aTxsZW47aSs9MSl7XG5wYXNzU3R5bGVPZlJlY3VyKFxuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLGksdHJ1ZSxhc3NlcnRDaGVja2VyKS52YWx1ZSk7XG5cbiB9XG4vL1xub3duS2V5cyhjYW5kaWRhdGUpLmxlbmd0aD09PWxlbisxfHxcbmFzc2VydC5mYWlsKFggYEFycmF5cyBtdXN0IG5vdCBoYXZlIG5vbi1pbmRleGVzOiAke2NhbmRpZGF0ZX1gLFR5cGVFcnJvcik7XG4gfX0pOyRozY9fb25jZS5Db3B5QXJyYXlIZWxwZXIoQ29weUFycmF5SGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNvcHlBcnJheUhlbHBlciI6WyJDb3B5QXJyYXlIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAMs9KtSkIAAApCAAAKQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9jb3B5UmVjb3JkLmpzeyJpbXBvcnRzIjpbIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5UmVjb3JkSGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsY2FuQmVNZXRob2QsZ2V0T3duRGF0YURlc2NyaXB0b3IsQ1g7JGjNj19pbXBvcnRzKFtbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiY2FuQmVNZXRob2RcIiwgWyRozY9fYSA9PiAoY2FuQmVNZXRob2QgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0UHJvdG90eXBlT2YscHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgY2hlY2tPYmplY3RQcm90b3R5cGU9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09b2JqZWN0UHJvdG90eXBlfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBSZWNvcmRzIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBjaGVja1Byb3BlcnR5Q2FuQmVWYWxpZD0oY2FuZGlkYXRlLGtleSx2YWx1ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG4odHlwZW9mIGtleT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUmVjb3JkcyBjYW4gb25seSBoYXZlIHN0cmluZy1uYW1lZCBwcm9wZXJ0aWVzOiAke2NhbmRpZGF0ZX1gKSYmKFxuIWNhbkJlTWV0aG9kKHZhbHVlKXx8XG4hIWNoZWNrJiZcbi8vXG5DWChcbmNoZWNrKVxuIGBSZWNvcmRzIGNhbm5vdCBjb250YWluIG5vbi1mYXIgZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBtYXkgYmUgbWV0aG9kcyBvZiBhbiBpbXBsaWNpdCBSZW1vdGFibGU6ICR7Y2FuZGlkYXRlfWApKTtcblxuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgQ29weVJlY29yZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidjb3B5UmVjb3JkJyxcblxuY2FuQmVWYWxpZDooY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbmNoZWNrT2JqZWN0UHJvdG90eXBlKGNhbmRpZGF0ZSxjaGVjaykmJlxuLy9cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkuZXZlcnkoKGtleSk9PlxuY2hlY2tQcm9wZXJ0eUNhbkJlVmFsaWQoY2FuZGlkYXRlLGtleSxjYW5kaWRhdGVba2V5XSxjaGVjaykpKTtcblxuXG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tPYmplY3RQcm90b3R5cGUoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuLy9cbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoY2FuZGlkYXRlKSl7XG5jb25zdHt2YWx1ZX09Z2V0T3duRGF0YURlc2NyaXB0b3IoXG5jYW5kaWRhdGUsXG5uYW1lLFxudHJ1ZSxcbmFzc2VydENoZWNrZXIpO1xuXG5jaGVja1Byb3BlcnR5Q2FuQmVWYWxpZChjYW5kaWRhdGUsbmFtZSx2YWx1ZSxhc3NlcnRDaGVja2VyKTtcbnBhc3NTdHlsZU9mUmVjdXIodmFsdWUpO1xuIH1cbiB9fSk7JGjNj19vbmNlLkNvcHlSZWNvcmRIZWxwZXIoQ29weVJlY29yZEhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJDb3B5UmVjb3JkSGVscGVyIjpbIkNvcHlSZWNvcmRIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAcCLlelYKAABWCgAALgAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9kZWVwbHlGdWxmaWxsZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcGFzc1N0eWxlT2YuanMiLCIuL21ha2VUYWdnZWQuanMiXSwiZXhwb3J0cyI6WyJkZWVwbHlGdWxmaWxsZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxxLEUsaXNQcm9taXNlLGdldFRhZyxpc09iamVjdCxwYXNzU3R5bGVPZixtYWtlVGFnZ2VkOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGVPZi5qc1wiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV1dXSxbXCIuL21ha2VUYWdnZWQuanNcIiwgW1tcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2Zyb21FbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZXBseUZ1bGZpbGxlZD1hc3luYyh2YWwpPT57XG4vL1xuLy9cbi8vXG5cbmlmKCFpc09iamVjdCh2YWwpKXtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL3ZhbCk7XG4gfVxuaWYoaXNQcm9taXNlKHZhbCkpe1xucmV0dXJuIEUud2hlbih2YWwsKG5vbnApPT5kZWVwbHlGdWxmaWxsZWQobm9ucCkpO1xuIH1cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZih2YWwpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmNvbnN0IHJlYz0vKiAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgbmFtZXM9LyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJlYyk7XG5jb25zdCB2YWxQcz1uYW1lcy5tYXAoKG5hbWUpPT5kZWVwbHlGdWxmaWxsZWQocmVjW25hbWVdKSk7XG4vL1xucmV0dXJuIEUud2hlbihQcm9taXNlLmFsbCh2YWxQcyksKHZhbHMpPT5cbmhhcmRlbihmcm9tRW50cmllcyh2YWxzLm1hcCgoYyxpKT0+W25hbWVzW2ldLGNdKSkpKTtcblxuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5jb25zdCBhcnI9LyogICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgdmFsUHM9YXJyLm1hcCgocCk9PmRlZXBseUZ1bGZpbGxlZChwKSk7XG4vL1xucmV0dXJuIEUud2hlbihQcm9taXNlLmFsbCh2YWxQcyksKHZhbHMpPT5oYXJkZW4odmFscykpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdCB0Z2Q9LyogICAgICAgICAgICAgICAgICAgICAqL3ZhbDtcbmNvbnN0IHRhZz1nZXRUYWcodGdkKTtcbi8vXG5yZXR1cm4gRS53aGVuKGRlZXBseUZ1bGZpbGxlZCh0Z2QucGF5bG9hZCksKHBheWxvYWQpPT5cbm1ha2VUYWdnZWQodGFnLHBheWxvYWQpKTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCByZW09LyogICAgICAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuLy9cbnJldHVybiByZW07XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZXJyPS8qICAgICAgICAgICAgICAgICovdmFsO1xuLy9cbnJldHVybiBlcnI7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCBwcm9tPS8qICAgICAgICAgICAgICAgICAgKi8gLyogICAgICAgICAgICAgICAgICAqL3ZhbDtcbnJldHVybiBFLndoZW4ocHJvbSwobm9ucCk9PmRlZXBseUZ1bGZpbGxlZChub25wKSk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChYIGBVbmV4cGVjdGVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX1gLFR5cGVFcnJvcik7XG4gfX1cblxuIH07JGjNj19vbmNlLmRlZXBseUZ1bGZpbGxlZChkZWVwbHlGdWxmaWxsZWQpO1xuaGFyZGVuKGRlZXBseUZ1bGZpbGxlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWVwbHlGdWxmaWxsZWQiOlsiZGVlcGx5RnVsZmlsbGVkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEObiqg0EgAANBIAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvZXJyb3IuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIkVycm9ySGVscGVyIiwiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyIsImdldEVycm9yQ29uc3RydWN0b3IiLCJpc0Vycm9yTGlrZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLGFzc2VydENoZWNrZXIsQ1g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJDWFwiLCBbJGjNj19hID0+IChDWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7Z2V0UHJvdG90eXBlT2YsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxoYXNPd24sZW50cmllc309T2JqZWN0O1xuXG4vL1xuLy9cbmNvbnN0IGVycm9yQ29uc3RydWN0b3JzPW5ldyBNYXAoXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuW1xuWydFcnJvcicsRXJyb3JdLFxuWydFdmFsRXJyb3InLEV2YWxFcnJvcl0sXG5bJ1JhbmdlRXJyb3InLFJhbmdlRXJyb3JdLFxuWydSZWZlcmVuY2VFcnJvcicsUmVmZXJlbmNlRXJyb3JdLFxuWydTeW50YXhFcnJvcicsU3ludGF4RXJyb3JdLFxuWydUeXBlRXJyb3InLFR5cGVFcnJvcl0sXG5bJ1VSSUVycm9yJyxVUklFcnJvcl1cblxuLy9cbi8vXG4vL1xuLy9cbl0pO1xuXG5cbmlmKHR5cGVvZiBBZ2dyZWdhdGVFcnJvciE9PSd1bmRlZmluZWQnKXtcbi8vXG5lcnJvckNvbnN0cnVjdG9ycy5zZXQoJ0FnZ3JlZ2F0ZUVycm9yJyxBZ2dyZWdhdGVFcnJvcik7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEVycm9yQ29uc3RydWN0b3I9KG5hbWUpPT5lcnJvckNvbnN0cnVjdG9ycy5nZXQobmFtZSk7JGjNj19vbmNlLmdldEVycm9yQ29uc3RydWN0b3IoZ2V0RXJyb3JDb25zdHJ1Y3Rvcik7XG5oYXJkZW4oZ2V0RXJyb3JDb25zdHJ1Y3Rvcik7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrRXJyb3JMaWtlPShjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xuLy9cbnJldHVybihcbmNhbmRpZGF0ZSBpbnN0YW5jZW9mIEVycm9yfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgRXJyb3IgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfTtcbmhhcmRlbihjaGVja0Vycm9yTGlrZSk7XG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0Vycm9yTGlrZT0oY2FuZGlkYXRlKT0+Y2hlY2tFcnJvckxpa2UoY2FuZGlkYXRlKTskaM2PX29uY2UuaXNFcnJvckxpa2UoaXNFcnJvckxpa2UpO1xuaGFyZGVuKGlzRXJyb3JMaWtlKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0oXG5wcm9wTmFtZSxcbmRlc2MsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2s9dW5kZWZpbmVkKT0+XG57XG5pZihkZXNjLmVudW1lcmFibGUpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3Qgbm90IGJlIGVudW1lcmFibGU6ICR7ZGVzY31gKTtcblxuIH1cbmlmKCFoYXNPd24oZGVzYywndmFsdWUnKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIGRhdGEgcHJvcGVydHk6ICR7ZGVzY31gKTtcblxuIH1cbmNvbnN0e3ZhbHVlfT1kZXNjO1xuc3dpdGNoKHByb3BOYW1lKXtcbmNhc2UnbWVzc2FnZSc6XG5jYXNlJ3N0YWNrJzp7XG5yZXR1cm4oXG50eXBlb2YgdmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZzogJHt2YWx1ZX1gKTtcblxuIH1cbmNhc2UnY2F1c2UnOntcbi8vXG5yZXR1cm4gY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IodmFsdWUscGFzc1N0eWxlT2ZSZWN1cixjaGVjayk7XG4gfVxuY2FzZSdlcnJvcnMnOntcbmlmKCFBcnJheS5pc0FycmF5KHZhbHVlKXx8cGFzc1N0eWxlT2ZSZWN1cih2YWx1ZSkhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIGNvcHlBcnJheTogJHt2YWx1ZX1gKTtcblxuIH1cbnJldHVybiB2YWx1ZS5ldmVyeSgoZXJyKT0+XG4vL1xuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoZXJyLHBhc3NTdHlsZU9mUmVjdXIsY2hlY2spKTtcblxuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7XG4gfX1cblxucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yIGhhcyBleHRyYSB1bnBhc3NlZCBwcm9wZXJ0eSAke3EocHJvcE5hbWUpfWApO1xuXG4gfTskaM2PX29uY2UuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MpO1xuaGFyZGVuKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3I9KFxuY2FuZGlkYXRlLFxucGFzc1N0eWxlT2ZSZWN1cixcbmNoZWNrPXVuZGVmaW5lZCk9Plxue1xuaWYoIWNoZWNrRXJyb3JMaWtlKGNhbmRpZGF0ZSxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHByb3RvPWdldFByb3RvdHlwZU9mKGNhbmRpZGF0ZSk7XG5jb25zdHtuYW1lfT1wcm90bztcbmNvbnN0IGVyckNvbnN0cnVjdG9yPWdldEVycm9yQ29uc3RydWN0b3IobmFtZSk7XG5pZihlcnJDb25zdHJ1Y3Rvcj09PXVuZGVmaW5lZHx8ZXJyQ29uc3RydWN0b3IucHJvdG90eXBlIT09cHJvdG8pe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBQYXNzYWJsZSBFcnJvciBtdXN0IGluaGVyaXQgZnJvbSBhbiBlcnJvciBjbGFzcyAucHJvdG90eXBlOiAke2NhbmRpZGF0ZX1gKTtcblxuIH1cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbmlmKCEoJ21lc3NhZ2UnaW4gZGVzY3MpKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUGFzc2FibGUgRXJyb3IgbXVzdCBoYXZlIGFuIG93biBcIm1lc3NhZ2VcIiBzdHJpbmcgcHJvcGVydHk6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfVxuXG5yZXR1cm4gZW50cmllcyhkZXNjcykuZXZlcnkoKFtwcm9wTmFtZSxkZXNjXSk9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MoXG5wcm9wTmFtZSxcbmRlc2MsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2spKTtcblxuXG4gfTskaM2PX29uY2UuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IpO1xuaGFyZGVuKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKTtcblxuLypcblxuICovXG5jb25zdCAgICAgICAgRXJyb3JIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZTonZXJyb3InLFxuXG5jYW5CZVZhbGlkOmNoZWNrRXJyb3JMaWtlLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT5cbmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyLGFzc2VydENoZWNrZXIpfSk7JGjNj19vbmNlLkVycm9ySGVscGVyKEVycm9ySGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldEVycm9yQ29uc3RydWN0b3IiOlsiZ2V0RXJyb3JDb25zdHJ1Y3RvciJdLCJpc0Vycm9yTGlrZSI6WyJpc0Vycm9yTGlrZSJdLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyI6WyJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyJdLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciI6WyJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciJdLCJFcnJvckhlbHBlciI6WyJFcnJvckhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABBT/xPjwUAAI8FAAArAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2l0ZXItaGVscGVycy5qc3siaW1wb3J0cyI6WyIuL21ha2UtZmFyLmpzIl0sImV4cG9ydHMiOlsiZmlsdGVySXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXI7JGjNj19pbXBvcnRzKFtbXCIuL21ha2UtZmFyLmpzXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcEl0ZXJhYmxlPShiYXNlSXRlcmFibGUsZnVuYyk9PlxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbkZhcignbWFwcGVkIGl0ZXJhYmxlJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgYmFzZUl0ZXJhdG9yPWJhc2VJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gRmFyKCdtYXBwZWQgaXRlcmF0b3InLHtcbm5leHQ6KCk9PntcbmNvbnN0e3ZhbHVlOmJhc2VWYWx1ZSxkb25lfT1iYXNlSXRlcmF0b3IubmV4dCgpO1xuY29uc3QgdmFsdWU9ZG9uZT9iYXNlVmFsdWU6ZnVuYyhiYXNlVmFsdWUpO1xucmV0dXJuIGhhcmRlbih7dmFsdWUsZG9uZX0pO1xuIH19KTtcblxuIH19KTskaM2PX29uY2UubWFwSXRlcmFibGUobWFwSXRlcmFibGUpO1xuXG5oYXJkZW4obWFwSXRlcmFibGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZmlsdGVySXRlcmFibGU9KGJhc2VJdGVyYWJsZSxwcmVkKT0+XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuRmFyKCdmaWx0ZXJlZCBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmNvbnN0IGJhc2VJdGVyYXRvcj1iYXNlSXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIEZhcignZmlsdGVyZWQgaXRlcmF0b3InLHtcbm5leHQ6KCk9PntcbmZvcig7Oyl7XG5jb25zdCByZXN1bHQ9YmFzZUl0ZXJhdG9yLm5leHQoKTtcbmNvbnN0e3ZhbHVlLGRvbmV9PXJlc3VsdDtcbmlmKGRvbmV8fHByZWQodmFsdWUpKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbiB9fSk7XG5cbiB9fSk7JGjNj19vbmNlLmZpbHRlckl0ZXJhYmxlKGZpbHRlckl0ZXJhYmxlKTtcblxuaGFyZGVuKGZpbHRlckl0ZXJhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1hcEl0ZXJhYmxlIjpbIm1hcEl0ZXJhYmxlIl0sImZpbHRlckl0ZXJhYmxlIjpbImZpbHRlckl0ZXJhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGTP4m9BEQAAQREAACcAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvbWFrZS1mYXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3JlbW90YWJsZS5qcyJdLCJleHBvcnRzIjpbIkZhciIsIkdFVF9NRVRIT0RfTkFNRVMiLCJSZW1vdGFibGUiLCJUb0ZhckZ1bmN0aW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldE1ldGhvZE5hbWVzLHEsRmFpbCxhc3NlcnRDaGVja2VyLFBBU1NfU1RZTEUsYXNzZXJ0SWZhY2UsZ2V0SW50ZXJmYWNlT2YsUmVtb3RhYmxlSGVscGVyOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qc1wiLCBbW1wiZ2V0TWV0aG9kTmFtZXNcIiwgWyRozY9fYSA9PiAoZ2V0TWV0aG9kTmFtZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcImFzc2VydElmYWNlXCIsIFskaM2PX2EgPT4gKGFzc2VydElmYWNlID0gJGjNj19hKV1dLFtcImdldEludGVyZmFjZU9mXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZU9mID0gJGjNj19hKV1dLFtcIlJlbW90YWJsZUhlbHBlclwiLCBbJGjNj19hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7cHJvdG90eXBlOmZ1bmN0aW9uUHJvdG90eXBlfT1GdW5jdGlvbjtcbmNvbnN0e1xuZ2V0UHJvdG90eXBlT2YsXG5zZXRQcm90b3R5cGVPZixcbmNyZWF0ZSxcbmlzRnJvemVuLFxucHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09XG5PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVJlbW90YWJsZVByb3RvPShyZW1vdGFibGUsaWZhY2UpPT57XG5sZXQgb2xkUHJvdG89Z2V0UHJvdG90eXBlT2YocmVtb3RhYmxlKTtcbmlmKHR5cGVvZiByZW1vdGFibGU9PT0nb2JqZWN0Jyl7XG5pZihvbGRQcm90bz09PW51bGwpe1xub2xkUHJvdG89b2JqZWN0UHJvdG90eXBlO1xuIH1cbm9sZFByb3RvPT09b2JqZWN0UHJvdG90eXBlfHxcbkZhaWwgYEZvciBub3csIHJlbW90YWJsZXMgY2Fubm90IGluaGVyaXQgZnJvbSBhbnl0aGluZyB1bnVzdWFsLCBpbiAke3JlbW90YWJsZX1gO1xuIH1lbHNlIGlmKHR5cGVvZiByZW1vdGFibGU9PT0nZnVuY3Rpb24nKXtcbm9sZFByb3RvIT09bnVsbHx8XG5GYWlsIGBPcmlnaW5hbCBmdW5jdGlvbiBtdXN0IG5vdCBpbmhlcml0IGZyb20gbnVsbDogJHtyZW1vdGFibGV9YDtcbm9sZFByb3RvPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuZ2V0UHJvdG90eXBlT2Yob2xkUHJvdG8pPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuRmFpbCBgRmFyIGZ1bmN0aW9ucyBtdXN0IG9yaWdpbmFsbHkgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZSwgaW4gJHtyZW1vdGFibGV9YDtcbiB9ZWxzZXtcbkZhaWwgYHVucmVjb2duaXplZCB0eXBlb2YgJHtyZW1vdGFibGV9YDtcbiB9XG5yZXR1cm4gaGFyZGVuKFxuY3JlYXRlKG9sZFByb3RvLHtcbltQQVNTX1NUWUxFXTp7dmFsdWU6J3JlbW90YWJsZSd9LFxuW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOmlmYWNlfX0pKTtcblxuXG4gfTtcblxuY29uc3QgYXNzZXJ0Q2FuQmVSZW1vdGFibGU9KGNhbmRpZGF0ZSk9PlxuUmVtb3RhYmxlSGVscGVyLmNhbkJlVmFsaWQoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgUmVtb3RhYmxlPShcbi8vXG5pZmFjZT0nUmVtb3RhYmxlJyxcbnByb3BzPXVuZGVmaW5lZCxcbnJlbW90YWJsZT0vKiAgICAgICAgICAgICove30pPT5cbntcbmFzc2VydElmYWNlKGlmYWNlKTtcbmFzc2VydChpZmFjZSk7XG4vL1xuLy9cbnByb3BzPT09dW5kZWZpbmVkfHxGYWlsIGBSZW1vdGFibGUgcHJvcHMgbm90IHlldCBpbXBsZW1lbnRlZCAke3Byb3BzfWA7XG5cbi8vXG5hc3NlcnRDYW5CZVJlbW90YWJsZShyZW1vdGFibGUpO1xuXG4vL1xuIShQQVNTX1NUWUxFIGluIHJlbW90YWJsZSl8fFxuRmFpbCBgUmVtb3RhYmxlICR7cmVtb3RhYmxlfSBpcyBhbHJlYWR5IG1hcmtlZCBhcyBhICR7cShcbnJlbW90YWJsZVtQQVNTX1NUWUxFXSlcbiB9YDtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuaGFyZGVuLmlzRmFrZXx8XG4vL1xuIWlzRnJvemVuKHJlbW90YWJsZSl8fFxuRmFpbCBgUmVtb3RhYmxlICR7cmVtb3RhYmxlfSBpcyBhbHJlYWR5IGZyb3plbmA7XG5jb25zdCByZW1vdGFibGVQcm90bz1tYWtlUmVtb3RhYmxlUHJvdG8ocmVtb3RhYmxlLGlmYWNlKTtcblxuLy9cbi8vXG5jb25zdCBtdXRhdGVIYXJkZW5BbmRDaGVjaz0odGFyZ2V0KT0+e1xuLy9cbnNldFByb3RvdHlwZU9mKHRhcmdldCxyZW1vdGFibGVQcm90byk7XG5oYXJkZW4odGFyZ2V0KTtcbmFzc2VydENhbkJlUmVtb3RhYmxlKHRhcmdldCk7XG4gfTtcblxuLy9cbm11dGF0ZUhhcmRlbkFuZENoZWNrKHt9KTtcblxuLy9cbm11dGF0ZUhhcmRlbkFuZENoZWNrKHJlbW90YWJsZSk7XG5cbi8vXG4vL1xuYXNzZXJ0KGlmYWNlIT09dW5kZWZpbmVkKTsvL1xucmV0dXJuICgvKiAgICAgICAgICAgICAgKi9yZW1vdGFibGUpO1xuIH07JGjNj19vbmNlLlJlbW90YWJsZShSZW1vdGFibGUpO1xuaGFyZGVuKFJlbW90YWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBHRVRfTUVUSE9EX05BTUVTPSdfX2dldE1ldGhvZE5hbWVzX18nO1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuR0VUX01FVEhPRF9OQU1FUyhHRVRfTUVUSE9EX05BTUVTKTtcbmNvbnN0IGdldE1ldGhvZE5hbWVzTWV0aG9kPWhhcmRlbih7XG5bR0VUX01FVEhPRF9OQU1FU10oKXtcbnJldHVybiBnZXRNZXRob2ROYW1lcyh0aGlzKTtcbiB9fSlbXG5HRVRfTUVUSE9EX05BTUVTXTtcblxuY29uc3QgZ2V0TWV0aG9kTmFtZXNEZXNjcmlwdG9yPWhhcmRlbih7XG52YWx1ZTpnZXRNZXRob2ROYW1lc01ldGhvZCxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2UsXG53cml0YWJsZTpmYWxzZX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBGYXI9KGZhck5hbWUscmVtb3RhYmxlPXVuZGVmaW5lZCk9PntcbmNvbnN0IHI9cmVtb3RhYmxlPT09dW5kZWZpbmVkPy8qICAgICAgICAgICAgKi97fTpyZW1vdGFibGU7XG5pZih0eXBlb2Ygcj09PSdvYmplY3QnJiYhKEdFVF9NRVRIT0RfTkFNRVMgaW4gcikpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLEdFVF9NRVRIT0RfTkFNRVMsZ2V0TWV0aG9kTmFtZXNEZXNjcmlwdG9yKTtcbiB9XG5yZXR1cm4gUmVtb3RhYmxlKCBgQWxsZWdlZDogJHtmYXJOYW1lfWAsdW5kZWZpbmVkLHIpO1xuIH07JGjNj19vbmNlLkZhcihGYXIpO1xuaGFyZGVuKEZhcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBUb0ZhckZ1bmN0aW9uPShmYXJOYW1lLGZ1bmMpPT57XG5pZihnZXRJbnRlcmZhY2VPZihmdW5jKSE9PXVuZGVmaW5lZCl7XG4vL1xucmV0dXJuIGZ1bmM7XG4gfVxuLy9cbnJldHVybiBGYXIoZmFyTmFtZSwoLi4uYXJncyk9PmZ1bmMoLi4uYXJncykpO1xuIH07JGjNj19vbmNlLlRvRmFyRnVuY3Rpb24oVG9GYXJGdW5jdGlvbik7XG5oYXJkZW4oVG9GYXJGdW5jdGlvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJSZW1vdGFibGUiOlsiUmVtb3RhYmxlIl0sIkdFVF9NRVRIT0RfTkFNRVMiOlsiR0VUX01FVEhPRF9OQU1FUyJdLCJGYXIiOlsiRmFyIl0sIlRvRmFyRnVuY3Rpb24iOlsiVG9GYXJGdW5jdGlvbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAr0aC/gAQAAIAEAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL21ha2VUYWdnZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcGFzc1N0eWxlT2YuanMiXSwiZXhwb3J0cyI6WyJtYWtlVGFnZ2VkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsUEFTU19TVFlMRSxhc3NlcnRQYXNzYWJsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGVPZi5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbmNvbnN0e2NyZWF0ZSxwcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVRhZ2dlZD0odGFnLHBheWxvYWQpPT57XG50eXBlb2YgdGFnPT09J3N0cmluZyd8fFxuRmFpbCBgVGhlIHRhZyBvZiBhIHRhZ2dlZCByZWNvcmQgbXVzdCBiZSBhIHN0cmluZzogJHt0YWd9YDtcbmFzc2VydFBhc3NhYmxlKGhhcmRlbihwYXlsb2FkKSk7XG5yZXR1cm4gaGFyZGVuKFxuY3JlYXRlKG9iamVjdFByb3RvdHlwZSx7XG5bUEFTU19TVFlMRV06e3ZhbHVlOid0YWdnZWQnfSxcbltTeW1ib2wudG9TdHJpbmdUYWddOnt2YWx1ZTp0YWd9LFxucGF5bG9hZDp7dmFsdWU6cGF5bG9hZCxlbnVtZXJhYmxlOnRydWV9fSkpO1xuXG5cbiB9OyRozY9fb25jZS5tYWtlVGFnZ2VkKG1ha2VUYWdnZWQpO1xuaGFyZGVuKG1ha2VUYWdnZWQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRhZ2dlZCI6WyJtYWtlVGFnZ2VkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA0ikncUFQAAFBUAADAAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiQ1giLCJQQVNTX1NUWUxFIiwiYXNzZXJ0Q2hlY2tlciIsImNhbkJlTWV0aG9kIiwiY2hlY2tGdW5jdGlvblRhZ1JlY29yZCIsImNoZWNrUGFzc1N0eWxlIiwiY2hlY2tUYWdSZWNvcmQiLCJnZXRPd25EYXRhRGVzY3JpcHRvciIsImdldFRhZyIsImhhc093blByb3BlcnR5T2YiLCJpc09iamVjdCIsImlzVHlwZWRBcnJheSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtwcm90b3R5cGU6ZnVuY3Rpb25Qcm90b3R5cGV9PUZ1bmN0aW9uO1xuY29uc3R7XG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG5nZXRQcm90b3R5cGVPZixcbmhhc093blByb3BlcnR5Om9iamVjdEhhc093blByb3BlcnR5LFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1cbk9iamVjdDtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuY29uc3R7dG9TdHJpbmdUYWc6dG9TdHJpbmdUYWdTeW1ib2x9PVN5bWJvbDtcblxuY29uc3QgdHlwZWRBcnJheVByb3RvdHlwZT1nZXRQcm90b3R5cGVPZihVaW50OEFycmF5LnByb3RvdHlwZSk7XG5jb25zdCB0eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjPWdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbnR5cGVkQXJyYXlQcm90b3R5cGUsXG50b1N0cmluZ1RhZ1N5bWJvbCk7XG5cbmFzc2VydCh0eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjKTtcbmNvbnN0IGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZz10eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjLmdldDtcbmFzc2VydCh0eXBlb2YgZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnPT09J2Z1bmN0aW9uJyk7XG5cbmNvbnN0ICAgICAgICBoYXNPd25Qcm9wZXJ0eU9mPShvYmoscHJvcCk9PlxuYXBwbHkob2JqZWN0SGFzT3duUHJvcGVydHksb2JqLFtwcm9wXSk7JGjNj19vbmNlLmhhc093blByb3BlcnR5T2YoaGFzT3duUHJvcGVydHlPZik7XG5oYXJkZW4oaGFzT3duUHJvcGVydHlPZik7XG5cbi8vXG5jb25zdCAgICAgICAgaXNPYmplY3Q9KHZhbCk9Pk9iamVjdCh2YWwpPT09dmFsOyRozY9fb25jZS5pc09iamVjdChpc09iamVjdCk7XG5oYXJkZW4oaXNPYmplY3QpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNUeXBlZEFycmF5PShvYmplY3QpPT57XG4vL1xuY29uc3QgdGFnPWFwcGx5KGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZyxvYmplY3QsW10pO1xucmV0dXJuIHRhZyE9PXVuZGVmaW5lZDtcbiB9OyRozY9fb25jZS5pc1R5cGVkQXJyYXkoaXNUeXBlZEFycmF5KTtcbmhhcmRlbihpc1R5cGVkQXJyYXkpO1xuXG5jb25zdCAgICAgICAgUEFTU19TVFlMRT1TeW1ib2wuZm9yKCdwYXNzU3R5bGUnKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUEFTU19TVFlMRShQQVNTX1NUWUxFKTtcbmNvbnN0ICAgICAgICBjYW5CZU1ldGhvZD0oZnVuYyk9PlxudHlwZW9mIGZ1bmM9PT0nZnVuY3Rpb24nJiYhKFBBU1NfU1RZTEUgaW4gZnVuYyk7JGjNj19vbmNlLmNhbkJlTWV0aG9kKGNhbkJlTWV0aG9kKTtcbmhhcmRlbihjYW5CZU1ldGhvZCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDaGVja2VyPShjb25kLGRldGFpbHMpPT57XG5hc3NlcnQoY29uZCxkZXRhaWxzKTtcbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmFzc2VydENoZWNrZXIoYXNzZXJ0Q2hlY2tlcik7XG5oYXJkZW4oYXNzZXJ0Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIENYPShjaGVjayk9PntcbmNvbnN0IHJlamVjdD0oVCwuLi5zdWJzKT0+Y2hlY2soZmFsc2UsWChULC4uLnN1YnMpKTtcbnJldHVybiByZWplY3Q7XG4gfTskaM2PX29uY2UuQ1goQ1gpO1xuaGFyZGVuKENYKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRPd25EYXRhRGVzY3JpcHRvcj0oXG5jYW5kaWRhdGUsXG5wcm9wTmFtZSxcbnNob3VsZEJlRW51bWVyYWJsZSxcbmNoZWNrKT0+XG57XG5jb25zdCBkZXNjPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNhbmRpZGF0ZSxwcm9wTmFtZSk7XG5cbnJldHVybihkZXNjIT09dW5kZWZpbmVkfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgJHtxKHByb3BOYW1lKX0gcHJvcGVydHkgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApJiYoXG5oYXNPd25Qcm9wZXJ0eU9mKGRlc2MsJ3ZhbHVlJyl8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGAke3EocHJvcE5hbWUpfSBtdXN0IG5vdCBiZSBhbiBhY2Nlc3NvciBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YCkmJihcbnNob3VsZEJlRW51bWVyYWJsZT9cbmRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3QgYmUgYW4gZW51bWVyYWJsZSBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YDpcbiFkZXNjLmVudW1lcmFibGV8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGAke3EocHJvcE5hbWUpfSBtdXN0IG5vdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKT9cbmRlc2M6XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gLyogICAgICAgICAgICAgICAgICAqL3VuZGVmaW5lZDtcbiB9OyRozY9fb25jZS5nZXRPd25EYXRhRGVzY3JpcHRvcihnZXRPd25EYXRhRGVzY3JpcHRvcik7XG5oYXJkZW4oZ2V0T3duRGF0YURlc2NyaXB0b3IpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0VGFnPSh0YWdSZWNvcmQpPT50YWdSZWNvcmRbU3ltYm9sLnRvU3RyaW5nVGFnXTskaM2PX29uY2UuZ2V0VGFnKGdldFRhZyk7XG5oYXJkZW4oZ2V0VGFnKTtcblxuY29uc3QgICAgICAgIGNoZWNrUGFzc1N0eWxlPShvYmoscGFzc1N0eWxlLGV4cGVjdGVkUGFzc1N0eWxlLGNoZWNrKT0+e1xucmV0dXJuKFxucGFzc1N0eWxlPT09ZXhwZWN0ZWRQYXNzU3R5bGV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEV4cGVjdGVkICR7cShleHBlY3RlZFBhc3NTdHlsZSl9LCBub3QgJHtxKHBhc3NTdHlsZSl9OiAke29ian1gKTtcblxuIH07JGjNj19vbmNlLmNoZWNrUGFzc1N0eWxlKGNoZWNrUGFzc1N0eWxlKTtcbmhhcmRlbihjaGVja1Bhc3NTdHlsZSk7XG5cbmNvbnN0IG1ha2VDaGVja1RhZ1JlY29yZD0oY2hlY2tQcm90byk9Pntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1RhZ1JlY29yZD0odGFnUmVjb3JkLGV4cGVjdGVkUGFzc1N0eWxlLGNoZWNrKT0+e1xucmV0dXJuKFxuKGlzT2JqZWN0KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgbm9uLW9iamVjdCBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiYoXG5pc0Zyb3plbih0YWdSZWNvcmQpfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgQSB0YWdSZWNvcmQgbXVzdCBiZSBmcm96ZW46ICR7dGFnUmVjb3JkfWApJiYoXG4haXNBcnJheSh0YWdSZWNvcmQpfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgQW4gYXJyYXkgY2Fubm90IGJlIGEgdGFnUmVjb3JkOiAke3RhZ1JlY29yZH1gKSYmXG5jaGVja1Bhc3NTdHlsZShcbnRhZ1JlY29yZCxcbmdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxQQVNTX1NUWUxFLGZhbHNlLGNoZWNrKS52YWx1ZSxcbmV4cGVjdGVkUGFzc1N0eWxlLFxuY2hlY2spJiYoXG5cbnR5cGVvZiBnZXRPd25EYXRhRGVzY3JpcHRvcih0YWdSZWNvcmQsU3ltYm9sLnRvU3RyaW5nVGFnLGZhbHNlLGNoZWNrKS5cbnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBBIFtTeW1ib2wudG9TdHJpbmdUYWddLW5hbWVkIHByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmc6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUHJvdG8odGFnUmVjb3JkLGdldFByb3RvdHlwZU9mKHRhZ1JlY29yZCksY2hlY2spKTtcblxuIH07XG5yZXR1cm4gaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcbiB9O1xuXG5jb25zdCAgICAgICAgY2hlY2tUYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuISFjaGVjayYmXG5jaGVjayhmYWxzZSxYIGBBIHRhZ1JlY29yZCBtdXN0IGluaGVyaXQgZnJvbSBPYmplY3QucHJvdG90eXBlOiAke3ZhbH1gKSk7JGjNj19vbmNlLmNoZWNrVGFnUmVjb3JkKGNoZWNrVGFnUmVjb3JkKTtcblxuaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcblxuY29uc3QgICAgICAgIGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5wcm90byE9PW51bGwmJmdldFByb3RvdHlwZU9mKHByb3RvKT09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbiEhY2hlY2smJlxuY2hlY2soXG5mYWxzZSxcblggYEZvciBmdW5jdGlvbnMsIGEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZTogJHt2YWx9YCkpOyRozY9fb25jZS5jaGVja0Z1bmN0aW9uVGFnUmVjb3JkKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQpO1xuXG5cbmhhcmRlbihjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Imhhc093blByb3BlcnR5T2YiOlsiaGFzT3duUHJvcGVydHlPZiJdLCJpc09iamVjdCI6WyJpc09iamVjdCJdLCJpc1R5cGVkQXJyYXkiOlsiaXNUeXBlZEFycmF5Il0sIlBBU1NfU1RZTEUiOlsiUEFTU19TVFlMRSJdLCJjYW5CZU1ldGhvZCI6WyJjYW5CZU1ldGhvZCJdLCJhc3NlcnRDaGVja2VyIjpbImFzc2VydENoZWNrZXIiXSwiQ1giOlsiQ1giXSwiZ2V0T3duRGF0YURlc2NyaXB0b3IiOlsiZ2V0T3duRGF0YURlc2NyaXB0b3IiXSwiZ2V0VGFnIjpbImdldFRhZyJdLCJjaGVja1Bhc3NTdHlsZSI6WyJjaGVja1Bhc3NTdHlsZSJdLCJjaGVja1RhZ1JlY29yZCI6WyJjaGVja1RhZ1JlY29yZCJdLCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIjpbImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAFAxNfrAkAACwJAAAKgAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9wYXNzU3R5bGVPZi5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL2NvcHlBcnJheS5qcyIsIi4vY29weVJlY29yZC5qcyIsIi4vdGFnZ2VkLmpzIiwiLi9lcnJvci5qcyIsIi4vcmVtb3RhYmxlLmpzIiwiLi9zeW1ib2wuanMiLCIuL3NhZmUtcHJvbWlzZS5qcyIsIi4vc3RyaW5nLmpzIl0sImV4cG9ydHMiOlsiUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZSIsImlzUGFzc2FibGUiLCJwYXNzU3R5bGVPZiIsInRvUGFzc2FibGVFcnJvciIsInRvVGhyb3dhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGlzUHJvbWlzZSxYLEZhaWwscSxhbm5vdGF0ZUVycm9yLG1ha2VFcnJvcixpc09iamVjdCxpc1R5cGVkQXJyYXksUEFTU19TVFlMRSxDb3B5QXJyYXlIZWxwZXIsQ29weVJlY29yZEhlbHBlcixUYWdnZWRIZWxwZXIsRXJyb3JIZWxwZXIsY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MsY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IsZ2V0RXJyb3JDb25zdHJ1Y3Rvcixpc0Vycm9yTGlrZSxSZW1vdGFibGVIZWxwZXIsYXNzZXJ0UGFzc2FibGVTeW1ib2wsYXNzZXJ0U2FmZVByb21pc2UsYXNzZXJ0UGFzc2FibGVTdHJpbmc7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaM2PX2EgPT4gKGlzUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJpc1R5cGVkQXJyYXlcIiwgWyRozY9fYSA9PiAoaXNUeXBlZEFycmF5ID0gJGjNj19hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXV1dLFtcIi4vY29weUFycmF5LmpzXCIsIFtbXCJDb3B5QXJyYXlIZWxwZXJcIiwgWyRozY9fYSA9PiAoQ29weUFycmF5SGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5UmVjb3JkLmpzXCIsIFtbXCJDb3B5UmVjb3JkSGVscGVyXCIsIFskaM2PX2EgPT4gKENvcHlSZWNvcmRIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL3RhZ2dlZC5qc1wiLCBbW1wiVGFnZ2VkSGVscGVyXCIsIFskaM2PX2EgPT4gKFRhZ2dlZEhlbHBlciA9ICRozY9fYSldXV1dLFtcIi4vZXJyb3IuanNcIiwgW1tcIkVycm9ySGVscGVyXCIsIFskaM2PX2EgPT4gKEVycm9ySGVscGVyID0gJGjNj19hKV1dLFtcImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjXCIsIFskaM2PX2EgPT4gKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjID0gJGjNj19hKV1dLFtcImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yXCIsIFskaM2PX2EgPT4gKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yID0gJGjNj19hKV1dLFtcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRozY9fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXV1dLFtcIi4vcmVtb3RhYmxlLmpzXCIsIFtbXCJSZW1vdGFibGVIZWxwZXJcIiwgWyRozY9fYSA9PiAoUmVtb3RhYmxlSGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9zeW1ib2wuanNcIiwgW1tcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dXV0sW1wiLi9zYWZlLXByb21pc2UuanNcIiwgW1tcImFzc2VydFNhZmVQcm9taXNlXCIsIFskaM2PX2EgPT4gKGFzc2VydFNhZmVQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiLi9zdHJpbmcuanNcIiwgW1tcImFzc2VydFBhc3NhYmxlU3RyaW5nXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlU3RyaW5nID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNGcm96ZW4sZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyx2YWx1ZXN9PU9iamVjdDtcblxuLypcblxuXG4gKi9cblxuY29uc3QgbWFrZUhlbHBlclRhYmxlPShwYXNzU3R5bGVIZWxwZXJzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBIZWxwZXJUYWJsZT17XG5fX3Byb3RvX186bnVsbCxcbmNvcHlBcnJheTp1bmRlZmluZWQsXG5jb3B5UmVjb3JkOnVuZGVmaW5lZCxcbnRhZ2dlZDp1bmRlZmluZWQsXG5lcnJvcjp1bmRlZmluZWQsXG5yZW1vdGFibGU6dW5kZWZpbmVkfTtcblxuZm9yKGNvbnN0IGhlbHBlciBvZiBwYXNzU3R5bGVIZWxwZXJzKXtcbmNvbnN0e3N0eWxlTmFtZX09aGVscGVyO1xuc3R5bGVOYW1lIGluIEhlbHBlclRhYmxlfHxGYWlsIGBVbnJlY29nbml6ZWQgaGVscGVyOiAke3Eoc3R5bGVOYW1lKX1gO1xuSGVscGVyVGFibGVbc3R5bGVOYW1lXT09PXVuZGVmaW5lZHx8XG5GYWlsIGBjb25mbGljdGluZyBoZWxwZXJzIGZvciAke3Eoc3R5bGVOYW1lKX1gO1xuSGVscGVyVGFibGVbc3R5bGVOYW1lXT1oZWxwZXI7XG4gfVxuZm9yKGNvbnN0IHN0eWxlTmFtZSBvZiBvd25LZXlzKEhlbHBlclRhYmxlKSl7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdIT09dW5kZWZpbmVkfHxcbkZhaWwgYG1pc3NpbmcgaGVscGVyIGZvciAke3Eoc3R5bGVOYW1lKX1gO1xuIH1cblxucmV0dXJuIGhhcmRlbihIZWxwZXJUYWJsZSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VQYXNzU3R5bGVPZj0ocGFzc1N0eWxlSGVscGVycyk9PntcbmNvbnN0IEhlbHBlclRhYmxlPW1ha2VIZWxwZXJUYWJsZShwYXNzU3R5bGVIZWxwZXJzKTtcbmNvbnN0IHJlbW90YWJsZUhlbHBlcj1IZWxwZXJUYWJsZS5yZW1vdGFibGU7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHBhc3NTdHlsZU1lbW89bmV3IFdlYWtNYXAoKTtcblxuLypcblxuICAgKi9cbi8vXG5jb25zdCBwYXNzU3R5bGVPZj0ocGFzc2FibGUpPT57XG4vL1xuLy9cbi8vXG5jb25zdCBpblByb2dyZXNzPW5ldyBTZXQoKTtcblxuY29uc3QgcGFzc1N0eWxlT2ZSZWN1cj0oaW5uZXIpPT57XG5jb25zdCBpbm5lcklzT2JqZWN0PWlzT2JqZWN0KGlubmVyKTtcbmlmKGlubmVySXNPYmplY3Qpe1xuY29uc3QgaW5uZXJTdHlsZT1wYXNzU3R5bGVNZW1vLmdldChpbm5lcik7XG5pZihpbm5lclN0eWxlKXtcbnJldHVybiBpbm5lclN0eWxlO1xuIH1cbiFpblByb2dyZXNzLmhhcyhpbm5lcil8fFxuRmFpbCBgUGFzcy1ieS1jb3B5IGRhdGEgY2Fubm90IGJlIGN5Y2xpYyAke2lubmVyfWA7XG5pblByb2dyZXNzLmFkZChpbm5lcik7XG4gfVxuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZkludGVybmFsKGlubmVyKTtcbmlmKGlubmVySXNPYmplY3Qpe1xucGFzc1N0eWxlTWVtby5zZXQoaW5uZXIscGFzc1N0eWxlKTtcbmluUHJvZ3Jlc3MuZGVsZXRlKGlubmVyKTtcbiB9XG5yZXR1cm4gcGFzc1N0eWxlO1xuIH07XG5cbmNvbnN0IHBhc3NTdHlsZU9mSW50ZXJuYWw9KGlubmVyKT0+e1xuY29uc3QgdHlwZXN0cj10eXBlb2YgaW5uZXI7XG5zd2l0Y2godHlwZXN0cil7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdudW1iZXInOlxuY2FzZSdiaWdpbnQnOntcbnJldHVybiB0eXBlc3RyO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5hc3NlcnRQYXNzYWJsZVN0cmluZyhpbm5lcik7XG5yZXR1cm4nc3RyaW5nJztcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuYXNzZXJ0UGFzc2FibGVTeW1ib2woaW5uZXIpO1xucmV0dXJuJ3N5bWJvbCc7XG4gfVxuY2FzZSdvYmplY3QnOntcbmlmKGlubmVyPT09bnVsbCl7XG5yZXR1cm4nbnVsbCc7XG4gfVxuaWYoIWlzRnJvemVuKGlubmVyKSl7XG5hc3NlcnQuZmFpbChcbi8vXG4vL1xuaXNUeXBlZEFycmF5KGlubmVyKT9cblggYENhbm5vdCBwYXNzIG11dGFibGUgdHlwZWQgYXJyYXlzIGxpa2UgJHtpbm5lcn0uYDpcblggYENhbm5vdCBwYXNzIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7aW5uZXJ9LiBVc2UgaGFyZGVuKClgKTtcblxuIH1cbmlmKGlzUHJvbWlzZShpbm5lcikpe1xuYXNzZXJ0U2FmZVByb21pc2UoaW5uZXIpO1xucmV0dXJuJ3Byb21pc2UnO1xuIH1cbnR5cGVvZiBpbm5lci50aGVuIT09J2Z1bmN0aW9uJ3x8XG5GYWlsIGBDYW5ub3QgcGFzcyBub24tcHJvbWlzZSB0aGVuYWJsZXNgO1xuY29uc3QgcGFzc1N0eWxlVGFnPWlubmVyW1BBU1NfU1RZTEVdO1xuaWYocGFzc1N0eWxlVGFnIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YocGFzc1N0eWxlVGFnLCdzdHJpbmcnKTtcbmNvbnN0IGhlbHBlcj1IZWxwZXJUYWJsZVtwYXNzU3R5bGVUYWddO1xuaGVscGVyIT09dW5kZWZpbmVkfHxcbkZhaWwgYFVucmVjb2duaXplZCBQYXNzU3R5bGU6ICR7cShwYXNzU3R5bGVUYWcpfWA7XG5oZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAqL3Bhc3NTdHlsZVRhZyk7XG4gfVxuZm9yKGNvbnN0IGhlbHBlciBvZiBwYXNzU3R5bGVIZWxwZXJzKXtcbmlmKGhlbHBlci5jYW5CZVZhbGlkKGlubmVyKSl7XG5oZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4gaGVscGVyLnN0eWxlTmFtZTtcbiB9XG4gfVxucmVtb3RhYmxlSGVscGVyLmFzc2VydFZhbGlkKGlubmVyLHBhc3NTdHlsZU9mUmVjdXIpO1xucmV0dXJuJ3JlbW90YWJsZSc7XG4gfVxuY2FzZSdmdW5jdGlvbic6e1xuaXNGcm96ZW4oaW5uZXIpfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7aW5uZXJ9LiBVc2UgaGFyZGVuKClgO1xudHlwZW9mIGlubmVyLnRoZW4hPT0nZnVuY3Rpb24nfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1wcm9taXNlIHRoZW5hYmxlc2A7XG5yZW1vdGFibGVIZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4ncmVtb3RhYmxlJztcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVucmVjb2duaXplZCB0eXBlb2YgJHtxKHR5cGVzdHIpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTtcblxucmV0dXJuIHBhc3NTdHlsZU9mUmVjdXIocGFzc2FibGUpO1xuIH07XG5yZXR1cm4gaGFyZGVuKHBhc3NTdHlsZU9mKTtcbiB9O1xuXG5jb25zdCAgICAgICAgUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2w9U3ltYm9sLmZvcignQGVuZG8gcGFzc1N0eWxlT2YnKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sKFBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sKTtcbmNvbnN0ICAgICAgICBwYXNzU3R5bGVPZj1cbmdsb2JhbFRoaXMmJmdsb2JhbFRoaXNbUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2xdfHxcbm1ha2VQYXNzU3R5bGVPZihbXG5Db3B5QXJyYXlIZWxwZXIsXG5Db3B5UmVjb3JkSGVscGVyLFxuVGFnZ2VkSGVscGVyLFxuRXJyb3JIZWxwZXIsXG5SZW1vdGFibGVIZWxwZXJdKTskaM2PX29uY2UucGFzc1N0eWxlT2YocGFzc1N0eWxlT2YpO1xuXG5cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZT0odmFsKT0+e1xucGFzc1N0eWxlT2YodmFsKTsvL1xuIH07JGjNj19vbmNlLmFzc2VydFBhc3NhYmxlKGFzc2VydFBhc3NhYmxlKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQYXNzYWJsZT0oc3BlY2ltZW4pPT57XG50cnl7XG4vL1xuLy9cbnJldHVybiBwYXNzU3R5bGVPZihzcGVjaW1lbikhPT11bmRlZmluZWQ7XG4gfWNhdGNoKF8pe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9OyRozY9fb25jZS5pc1Bhc3NhYmxlKGlzUGFzc2FibGUpO1xuaGFyZGVuKGlzUGFzc2FibGUpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpc1Bhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2M9KG5hbWUsZGVzYyk9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MobmFtZSxkZXNjLHBhc3NTdHlsZU9mKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB0b1Bhc3NhYmxlRXJyb3I9KGVycik9PntcbmhhcmRlbihlcnIpO1xuaWYoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoZXJyLHBhc3NTdHlsZU9mKSl7XG5yZXR1cm4gZXJyO1xuIH1cbmNvbnN0e25hbWUsbWVzc2FnZX09ZXJyO1xuY29uc3R7Y2F1c2U6Y2F1c2VEZXNjLGVycm9yczplcnJvcnNEZXNjfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZXJyKTtcbmxldCBjYXVzZTtcbmxldCBlcnJvcnM7XG5pZihjYXVzZURlc2MmJmlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYygnY2F1c2UnLGNhdXNlRGVzYykpe1xuY2F1c2U9Y2F1c2VEZXNjLnZhbHVlO1xuIH1cbmlmKGVycm9yc0Rlc2MmJmlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYygnZXJyb3JzJyxlcnJvcnNEZXNjKSl7XG5lcnJvcnM9ZXJyb3JzRGVzYy52YWx1ZTtcbiB9XG5cbmNvbnN0IGVyckNvbnN0cnVjdG9yPWdldEVycm9yQ29uc3RydWN0b3IoIGAke25hbWV9YCl8fEVycm9yO1xuY29uc3QgbmV3RXJyb3I9bWFrZUVycm9yKCBgJHttZXNzYWdlfWAsZXJyQ29uc3RydWN0b3Ise1xuLy9cbmNhdXNlLFxuZXJyb3JzfSk7XG5cbi8vXG5oYXJkZW4obmV3RXJyb3IpO1xuLy9cbi8vXG4vL1xuYW5ub3RhdGVFcnJvcihuZXdFcnJvcixYIGBjb3BpZWQgZnJvbSBlcnJvciAke2Vycn1gKTtcbnBhc3NTdHlsZU9mKG5ld0Vycm9yKT09PSdlcnJvcid8fFxuRmFpbCBgRXhwZWN0ZWQgJHtuZXdFcnJvcn0gdG8gYmUgYSBwYXNzYWJsZSBlcnJvcmA7XG5yZXR1cm4gbmV3RXJyb3I7XG4gfTskaM2PX29uY2UudG9QYXNzYWJsZUVycm9yKHRvUGFzc2FibGVFcnJvcik7XG5oYXJkZW4odG9QYXNzYWJsZUVycm9yKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRvVGhyb3dhYmxlPShzcGVjaW1lbik9PntcbmhhcmRlbihzcGVjaW1lbik7XG5pZihpc0Vycm9yTGlrZShzcGVjaW1lbikpe1xucmV0dXJuIHRvUGFzc2FibGVFcnJvcigvKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuKTtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2Yoc3BlY2ltZW4pO1xuaWYoaXNPYmplY3Qoc3BlY2ltZW4pKXtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdjb3B5QXJyYXknOntcbmNvbnN0IGVsZW1lbnRzPS8qICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuZm9yKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpe1xuZWxlbWVudD09PXRvVGhyb3dhYmxlKGVsZW1lbnQpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VsZW1lbnR9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmNvbnN0IHJlYz0vKiAgICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgdmFsIG9mIHZhbHVlcyhyZWMpKXtcbnZhbD09PXRvVGhyb3dhYmxlKHZhbCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7dmFsfWA7XG4gfVxuYnJlYWs7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRnPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmNvbnN0e3BheWxvYWR9PXRnO1xucGF5bG9hZD09PXRvVGhyb3dhYmxlKHBheWxvYWQpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke3BheWxvYWR9YDtcbmJyZWFrO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IGVyPS8qICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5lcj09PXRvVGhyb3dhYmxlKGVyKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHtlcn1gO1xuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBBICR7cShwYXNzU3R5bGUpfSBpcyBub3QgdGhyb3dhYmxlOiAke3NwZWNpbWVufWA7XG4gfX1cblxuIH1cbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH07JGjNj19vbmNlLnRvVGhyb3dhYmxlKHRvVGhyb3dhYmxlKTtcbmhhcmRlbih0b1Rocm93YWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCI6WyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCJdLCJwYXNzU3R5bGVPZiI6WyJwYXNzU3R5bGVPZiJdLCJhc3NlcnRQYXNzYWJsZSI6WyJhc3NlcnRQYXNzYWJsZSJdLCJpc1Bhc3NhYmxlIjpbImlzUGFzc2FibGUiXSwidG9QYXNzYWJsZUVycm9yIjpbInRvUGFzc2FibGVFcnJvciJdLCJ0b1Rocm93YWJsZSI6WyJ0b1Rocm93YWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABShHt6phcAAKYXAAAoAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3JlbW90YWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiUmVtb3RhYmxlSGVscGVyIiwiYXNzZXJ0SWZhY2UiLCJnZXRJbnRlcmZhY2VPZiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsYXNzZXJ0Q2hlY2tlcixjYW5CZU1ldGhvZCxoYXNPd25Qcm9wZXJ0eU9mLFBBU1NfU1RZTEUsY2hlY2tUYWdSZWNvcmQsY2hlY2tGdW5jdGlvblRhZ1JlY29yZCxpc09iamVjdCxnZXRUYWcsQ1g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiY2FuQmVNZXRob2RcIiwgWyRozY9fYSA9PiAoY2FuQmVNZXRob2QgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXSxbXCJjaGVja1RhZ1JlY29yZFwiLCBbJGjNj19hID0+IChjaGVja1RhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkXCIsIFskaM2PX2EgPT4gKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJDWFwiLCBbJGjNj19hID0+IChDWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e1xuZ2V0UHJvdG90eXBlT2YsXG5pc0Zyb3plbixcbnByb3RvdHlwZTpvYmplY3RQcm90b3R5cGUsXG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1cbk9iamVjdDtcblxuLypcblxuXG4gKi9cbmNvbnN0IGNoZWNrSWZhY2U9KGlmYWNlLGNoZWNrKT0+e1xucmV0dXJuKFxuLy9cbih0eXBlb2YgaWZhY2U9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZvciBub3csIGludGVyZmFjZSAke2lmYWNlfSBtdXN0IGJlIGEgc3RyaW5nOyB1bmltcGxlbWVudGVkYCkmJihcbmlmYWNlPT09J1JlbW90YWJsZSd8fFxuaWZhY2Uuc3RhcnRzV2l0aCgnQWxsZWdlZDogJyl8fFxuaWZhY2Uuc3RhcnRzV2l0aCgnRGVidWdOYW1lOiAnKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRm9yIG5vdywgaWZhY2UgJHtxKFxuaWZhY2UpXG4gfSBtdXN0IGJlIFwiUmVtb3RhYmxlXCIgb3IgYmVnaW4gd2l0aCBcIkFsbGVnZWQ6IFwiIG9yIFwiRGVidWdOYW1lOiBcIjsgdW5pbXBsZW1lbnRlZGApKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0SWZhY2U9KGlmYWNlKT0+Y2hlY2tJZmFjZShpZmFjZSxhc3NlcnRDaGVja2VyKTskaM2PX29uY2UuYXNzZXJ0SWZhY2UoYXNzZXJ0SWZhY2UpO1xuaGFyZGVuKGFzc2VydElmYWNlKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tSZW1vdGFibGVQcm90b09mPShvcmlnaW5hbCxjaGVjayk9PntcbmlzT2JqZWN0KG9yaWdpbmFsKXx8XG5GYWlsIGBSZW1vdGFibGVzIG11c3QgYmUgb2JqZWN0cyBvciBmdW5jdGlvbnM6ICR7b3JpZ2luYWx9YDtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBwcm90bz1nZXRQcm90b3R5cGVPZihvcmlnaW5hbCk7XG5pZihcbnByb3RvPT09b2JqZWN0UHJvdG90eXBlfHxcbnByb3RvPT09bnVsbHx8XG5wcm90bz09PUZ1bmN0aW9uLnByb3RvdHlwZSlcbntcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBSZW1vdGFibGVzIG11c3QgYmUgZXhwbGljaXRseSBkZWNsYXJlZDogJHtxKG9yaWdpbmFsKX1gKTtcblxuIH1cblxuaWYodHlwZW9mIG9yaWdpbmFsPT09J29iamVjdCcpe1xuY29uc3QgcHJvdG9Qcm90bz1nZXRQcm90b3R5cGVPZihwcm90byk7XG5pZihwcm90b1Byb3RvIT09b2JqZWN0UHJvdG90eXBlJiZwcm90b1Byb3RvIT09bnVsbCl7XG4vL1xucmV0dXJuIGNoZWNrUmVtb3RhYmxlKHByb3RvLGNoZWNrKTtcbiB9XG5pZighY2hlY2tUYWdSZWNvcmQocHJvdG8sJ3JlbW90YWJsZScsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfWVsc2UgaWYodHlwZW9mIG9yaWdpbmFsPT09J2Z1bmN0aW9uJyl7XG5pZighY2hlY2tGdW5jdGlvblRhZ1JlY29yZChwcm90bywncmVtb3RhYmxlJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5cbi8vXG5jb25zdCBwYXNzU3R5bGVLZXk9LyogICAgICAgICAgICAgICAgICAqL1BBU1NfU1RZTEU7XG5jb25zdCB0YWdLZXk9LyogICAgICAgICAgICAgICAgICAqL1N5bWJvbC50b1N0cmluZ1RhZztcbmNvbnN0e1xuLy9cblsvKiAgICAgICAgICAgICAgICAgKi9wYXNzU3R5bGVLZXldOl9wYXNzU3R5bGVEZXNjLFxuWy8qICAgICAgICAgICAgICAgICAqL3RhZ0tleV06e3ZhbHVlOmlmYWNlfSxcbi4uLnJlc3REZXNjc309XG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHByb3RvKTtcblxucmV0dXJuKFxuKG93bktleXMocmVzdERlc2NzKS5sZW5ndGg9PT0wfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgVW5leHBlY3RlZCBwcm9wZXJ0aWVzIG9uIFJlbW90YWJsZSBQcm90byAke293bktleXMocmVzdERlc2NzKX1gKSYmXG5jaGVja0lmYWNlKGlmYWNlLGNoZWNrKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbmZpcm1lZFJlbW90YWJsZXM9bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tSZW1vdGFibGU9KHZhbCxjaGVjayk9PntcbmlmKGNvbmZpcm1lZFJlbW90YWJsZXMuaGFzKHZhbCkpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoIWlzRnJvemVuKHZhbCkpe1xucmV0dXJuKFxuISFjaGVjayYmQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7dmFsfWApO1xuXG4gfVxuLy9cbmlmKCFSZW1vdGFibGVIZWxwZXIuY2FuQmVWYWxpZCh2YWwsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCByZXN1bHQ9Y2hlY2tSZW1vdGFibGVQcm90b09mKHZhbCxjaGVjayk7XG5pZihyZXN1bHQpe1xuY29uZmlybWVkUmVtb3RhYmxlcy5hZGQodmFsKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEludGVyZmFjZU9mPSh2YWwpPT57XG5pZihcbiFpc09iamVjdCh2YWwpfHxcbnZhbFtQQVNTX1NUWUxFXSE9PSdyZW1vdGFibGUnfHxcbiFjaGVja1JlbW90YWJsZSh2YWwpKVxue1xuLy9cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuLy9cbnJldHVybiBnZXRUYWcodmFsKTtcbiB9OyRozY9fb25jZS5nZXRJbnRlcmZhY2VPZihnZXRJbnRlcmZhY2VPZik7XG5oYXJkZW4oZ2V0SW50ZXJmYWNlT2YpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIFJlbW90YWJsZUhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidyZW1vdGFibGUnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+e1xuY29uc3QgdmFsaWRUeXBlPVxuKGlzT2JqZWN0KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgbm9uLW9iamVjdHMgYXMgUmVtb3RhYmxlICR7Y2FuZGlkYXRlfWApJiYoXG4haXNBcnJheShjYW5kaWRhdGUpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIGFycmF5cyBhcyBSZW1vdGFibGUgJHtjYW5kaWRhdGV9YCk7XG5pZighdmFsaWRUeXBlKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbmlmKHR5cGVvZiBjYW5kaWRhdGU9PT0nb2JqZWN0Jyl7XG4vL1xuLy9cbnJldHVybiBvd25LZXlzKGRlc2NzKS5ldmVyeSgoa2V5KT0+e1xucmV0dXJuKFxuLy9cbihoYXNPd25Qcm9wZXJ0eU9mKGRlc2NzWy8qICAgICAgICAgICAgICAgICAqL2tleV0sJ3ZhbHVlJyl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgUmVtb3RhYmxlcyB3aXRoIGFjY2Vzc29ycyBsaWtlICR7cShcblN0cmluZyhrZXkpKVxuIH0gaW4gJHtjYW5kaWRhdGV9YCkmJihcbmtleT09PVN5bWJvbC50b1N0cmluZ1RhZyYmY2hlY2tJZmFjZShjYW5kaWRhdGVba2V5XSxjaGVjayl8fFxuKGNhbkJlTWV0aG9kKGNhbmRpZGF0ZVtrZXldKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBSZW1vdGFibGVzIHdpdGggbm9uLW1ldGhvZHMgbGlrZSAke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGluICR7Y2FuZGlkYXRlfWApJiYoXG5rZXkhPT1QQVNTX1NUWUxFfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBBIHBhc3MtYnktcmVtb3RlIGNhbm5vdCBzaGFkb3cgJHtxKFBBU1NfU1RZTEUpfWApKSk7XG5cbiB9KTtcbiB9ZWxzZSBpZih0eXBlb2YgY2FuZGlkYXRlPT09J2Z1bmN0aW9uJyl7XG4vL1xuLy9cbmNvbnN0e1xubmFtZTpuYW1lRGVzYyxcbmxlbmd0aDpsZW5ndGhEZXNjLFxuLy9cbltTeW1ib2wudG9TdHJpbmdUYWddOnRvU3RyaW5nVGFnRGVzYyxcbi4uLnJlc3REZXNjc309XG5kZXNjcztcbmNvbnN0IHJlc3RLZXlzPW93bktleXMocmVzdERlc2NzKTtcbnJldHVybihcbihuYW1lRGVzYyYmdHlwZW9mIG5hbWVEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEZhciBmdW5jdGlvbiBuYW1lIG11c3QgYmUgYSBzdHJpbmcsIGluICR7Y2FuZGlkYXRlfWApJiYoXG5sZW5ndGhEZXNjJiZ0eXBlb2YgbGVuZ3RoRGVzYy52YWx1ZT09PSdudW1iZXInfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRmFyIGZ1bmN0aW9uIGxlbmd0aCBtdXN0IGJlIGEgbnVtYmVyLCBpbiAke2NhbmRpZGF0ZX1gKSYmKFxudG9TdHJpbmdUYWdEZXNjPT09dW5kZWZpbmVkfHxcbih0eXBlb2YgdG9TdHJpbmdUYWdEZXNjLnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb24gQEB0b1N0cmluZ1RhZyBtdXN0IGJlIGEgc3RyaW5nLCBpbiAke2NhbmRpZGF0ZX1gKSYmXG5jaGVja0lmYWNlKHRvU3RyaW5nVGFnRGVzYy52YWx1ZSxjaGVjaykpJiYoXG5yZXN0S2V5cy5sZW5ndGg9PT0wfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRmFyIGZ1bmN0aW9ucyB1bmV4cGVjdGVkIHByb3BlcnRpZXMgYmVzaWRlcyAubmFtZSBhbmQgLmxlbmd0aCAke3Jlc3RLZXlzfWApKTtcblxuIH1cbnJldHVybiEhY2hlY2smJkNYKGNoZWNrKSBgdW5yZWNvZ25pemVkIHR5cGVvZiAke2NhbmRpZGF0ZX1gO1xuIH0sXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUpPT5jaGVja1JlbW90YWJsZShjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlciksXG5cbmV2ZXJ5OihfcGFzc2FibGUsX2ZuKT0+dHJ1ZX0pOyRozY9fb25jZS5SZW1vdGFibGVIZWxwZXIoUmVtb3RhYmxlSGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzc2VydElmYWNlIjpbImFzc2VydElmYWNlIl0sImdldEludGVyZmFjZU9mIjpbImdldEludGVyZmFjZU9mIl0sIlJlbW90YWJsZUhlbHBlciI6WyJSZW1vdGFibGVIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAxRgAzIYMAACGDAAAKwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9zYWZlLXByb21pc2UuanN7ImltcG9ydHMiOlsiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0U2FmZVByb21pc2UiLCJpc1NhZmVQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGlzUHJvbWlzZSxxLGFzc2VydENoZWNrZXIsaGFzT3duUHJvcGVydHlPZixDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7aXNGcm96ZW4sZ2V0UHJvdG90eXBlT2YsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7dG9TdHJpbmdUYWd9PVN5bWJvbDtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tQcm9taXNlT3duS2V5cz0ocHIsY2hlY2spPT57XG5jb25zdCBrZXlzPW93bktleXMocHIpO1xuXG5pZihrZXlzLmxlbmd0aD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgdW5rbm93bktleXM9a2V5cy5maWx0ZXIoXG4oa2V5KT0+dHlwZW9mIGtleSE9PSdzeW1ib2wnfHwhaGFzT3duUHJvcGVydHlPZihQcm9taXNlLnByb3RvdHlwZSxrZXkpKTtcblxuXG5pZih1bmtub3duS2V5cy5sZW5ndGghPT0wKXtcbnJldHVybiBDWChcbmNoZWNrKVxuIGAke3ByfSAtIE11c3Qgbm90IGhhdmUgYW55IG93biBwcm9wZXJ0aWVzOiAke3EodW5rbm93bktleXMpfWA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tTYWZlT3duS2V5PShrZXkpPT57XG5pZihrZXk9PT10b1N0cmluZ1RhZyl7XG4vL1xuLy9cbmNvbnN0IHRhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByLHRvU3RyaW5nVGFnKTtcbmFzc2VydCh0YWdEZXNjIT09dW5kZWZpbmVkKTtcbnJldHVybihcbihoYXNPd25Qcm9wZXJ0eU9mKHRhZ0Rlc2MsJ3ZhbHVlJyl8fFxuQ1goXG5jaGVjaylcbiBgT3duIEBAdG9TdHJpbmdUYWcgbXVzdCBiZSBhIGRhdGEgcHJvcGVydHksIG5vdCBhbiBhY2Nlc3NvcjogJHtxKHRhZ0Rlc2MpfWApJiYoXG50eXBlb2YgdGFnRGVzYy52YWx1ZT09PSdzdHJpbmcnfHxcbkNYKFxuY2hlY2spXG4gYE93biBAQHRvU3RyaW5nVGFnIHZhbHVlIG11c3QgYmUgYSBzdHJpbmc6ICR7cSh0YWdEZXNjLnZhbHVlKX1gKSYmKFxuIXRhZ0Rlc2MuZW51bWVyYWJsZXx8XG5DWChjaGVjaykgYE93biBAQHRvU3RyaW5nVGFnIG11c3Qgbm90IGJlIGVudW1lcmFibGU6ICR7cSh0YWdEZXNjKX1gKSk7XG5cbiB9XG5jb25zdCB2YWw9cHJba2V5XTtcbmlmKHZhbD09PXVuZGVmaW5lZHx8dHlwZW9mIHZhbD09PSdudW1iZXInKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKFxudHlwZW9mIHZhbD09PSdvYmplY3QnJiZcbnZhbCE9PW51bGwmJlxuaXNGcm96ZW4odmFsKSYmXG5nZXRQcm90b3R5cGVPZih2YWwpPT09T2JqZWN0LnByb3RvdHlwZSlcbntcbmNvbnN0IHN1YktleXM9b3duS2V5cyh2YWwpO1xuaWYoc3ViS2V5cy5sZW5ndGg9PT0wKXtcbnJldHVybiB0cnVlO1xuIH1cblxuaWYoXG5zdWJLZXlzLmxlbmd0aD09PTEmJlxuc3ViS2V5c1swXT09PSdkZXN0cm95ZWQnJiZcbnZhbC5kZXN0cm95ZWQ9PT1mYWxzZSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gQ1goXG5jaGVjaylcbiBgVW5leHBlY3RlZCBOb2RlIGFzeW5jX2hvb2tzIGFkZGl0aW9ucyB0byBwcm9taXNlOiAke3ByfS4ke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGlzICR7dmFsfWA7XG4gfTtcblxucmV0dXJuIGtleXMuZXZlcnkoY2hlY2tTYWZlT3duS2V5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tTYWZlUHJvbWlzZT0ocHIsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNGcm96ZW4ocHIpfHxDWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBiZSBmcm96ZW5gKSYmKFxuaXNQcm9taXNlKHByKXx8Q1goY2hlY2spIGAke3ByfSAtIE11c3QgYmUgYSBwcm9taXNlYCkmJihcbmdldFByb3RvdHlwZU9mKHByKT09PVByb21pc2UucHJvdG90eXBlfHxcbkNYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGluaGVyaXQgZnJvbSBQcm9taXNlLnByb3RvdHlwZTogJHtxKFxuZ2V0UHJvdG90eXBlT2YocHIpKVxuIH1gKSYmXG5jaGVja1Byb21pc2VPd25LZXlzKC8qICAgICAgICAgICAgICAgICAgKi9wcixjaGVjaykpO1xuXG4gfTtcbmhhcmRlbihjaGVja1NhZmVQcm9taXNlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNTYWZlUHJvbWlzZT0ocHIpPT5jaGVja1NhZmVQcm9taXNlKHByLCh4KT0+eCk7JGjNj19vbmNlLmlzU2FmZVByb21pc2UoaXNTYWZlUHJvbWlzZSk7XG5oYXJkZW4oaXNTYWZlUHJvbWlzZSk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRTYWZlUHJvbWlzZT0ocHIpPT5jaGVja1NhZmVQcm9taXNlKHByLGFzc2VydENoZWNrZXIpOyRozY9fb25jZS5hc3NlcnRTYWZlUHJvbWlzZShhc3NlcnRTYWZlUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1NhZmVQcm9taXNlIjpbImlzU2FmZVByb21pc2UiXSwiYXNzZXJ0U2FmZVByb21pc2UiOlsiYXNzZXJ0U2FmZVByb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmJdfLLIHAACyBwAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9zdHJpbmcuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJpc1dlbGxGb3JtZWRTdHJpbmciXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb24sRmFpbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJnZXRFbnZpcm9ubWVudE9wdGlvblwiLCBbJGjNj19hID0+IChnZXRFbnZpcm9ubWVudE9wdGlvbiA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vL1xuY29uc3QgaGFzV2VsbEZvcm1lZFN0cmluZ01ldGhvZD0hIVN0cmluZy5wcm90b3R5cGUuaXNXZWxsRm9ybWVkO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzV2VsbEZvcm1lZFN0cmluZz1oYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kP1xuKHN0cik9PnR5cGVvZiBzdHI9PT0nc3RyaW5nJyYmc3RyLmlzV2VsbEZvcm1lZCgpOlxuKHN0cik9PntcbmlmKHR5cGVvZiBzdHIhPT0nc3RyaW5nJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuZm9yKGNvbnN0IGNoIG9mIHN0cil7XG4vL1xuLy9cbi8vXG5jb25zdCBjcD0vKiAgICAgICAgICAgICAgICAgKi9jaC5jb2RlUG9pbnRBdCgwKTtcbmlmKGNwPj0weGQ4MDAmJmNwPD0weGRmZmYpe1xuLy9cbi8vXG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9OyRozY9fb25jZS5pc1dlbGxGb3JtZWRTdHJpbmcoaXNXZWxsRm9ybWVkU3RyaW5nKTtcbmhhcmRlbihpc1dlbGxGb3JtZWRTdHJpbmcpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFdlbGxGb3JtZWRTdHJpbmc9KHN0cik9PntcbmlzV2VsbEZvcm1lZFN0cmluZyhzdHIpfHxGYWlsIGBFeHBlY3RlZCB3ZWxsLWZvcm1lZCB1bmljb2RlIHN0cmluZzogJHtzdHJ9YDtcbiB9OyRozY9fb25jZS5hc3NlcnRXZWxsRm9ybWVkU3RyaW5nKGFzc2VydFdlbGxGb3JtZWRTdHJpbmcpO1xuaGFyZGVuKGFzc2VydFdlbGxGb3JtZWRTdHJpbmcpO1xuXG5jb25zdCBPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEU9XG5nZXRFbnZpcm9ubWVudE9wdGlvbignT05MWV9XRUxMX0ZPUk1FRF9TVFJJTkdTX1BBU1NBQkxFJywnZGlzYWJsZWQnLFtcbidlbmFibGVkJ10pPT09XG4nZW5hYmxlZCc7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZVN0cmluZz0oc3RyKT0+e1xudHlwZW9mIHN0cj09PSdzdHJpbmcnfHxGYWlsIGBFeHBlY3RlZCBzdHJpbmcgJHtzdHJ9YDtcbiFPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEV8fGFzc2VydFdlbGxGb3JtZWRTdHJpbmcoc3RyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRQYXNzYWJsZVN0cmluZyhhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG5oYXJkZW4oYXNzZXJ0UGFzc2FibGVTdHJpbmcpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNXZWxsRm9ybWVkU3RyaW5nIjpbImlzV2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRXZWxsRm9ybWVkU3RyaW5nIjpbImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSwiYXNzZXJ0UGFzc2FibGVTdHJpbmciOlsiYXNzZXJ0UGFzc2FibGVTdHJpbmciXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAZj9ZlfwJAAD8CQAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9zeW1ib2wuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIiwibmFtZUZvclBhc3NhYmxlU3ltYm9sIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qXG5cbiAqL1xuY29uc3Qgd2VsbEtub3duU3ltYm9sTmFtZXM9bmV3IE1hcChcbm93bktleXMoU3ltYm9sKS5cbmZpbHRlcihcbihuYW1lKT0+dHlwZW9mIG5hbWU9PT0nc3RyaW5nJyYmdHlwZW9mIFN5bWJvbFtuYW1lXT09PSdzeW1ib2wnKS5cblxuZmlsdGVyKChuYW1lKT0+e1xuLy9cbiFuYW1lLnN0YXJ0c1dpdGgoJ0BAJyl8fFxuRmFpbCBgRGlkIG5vdCBleHBlY3QgU3ltYm9sIHRvIGhhdmUgYSBzeW1ib2wtdmFsdWVkIHByb3BlcnR5IG5hbWUgc3RhcnRpbmcgd2l0aCBcIkBAXCIgJHtxKFxubmFtZSlcbiB9YDtcbnJldHVybiB0cnVlO1xuIH0pXG4vL1xuLm1hcCgobmFtZSk9PltTeW1ib2xbbmFtZV0sIGBAQCR7bmFtZX1gXSkpO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlU3ltYm9sPShzeW0pPT5cbnR5cGVvZiBzeW09PT0nc3ltYm9sJyYmKFxudHlwZW9mIFN5bWJvbC5rZXlGb3Ioc3ltKT09PSdzdHJpbmcnfHx3ZWxsS25vd25TeW1ib2xOYW1lcy5oYXMoc3ltKSk7JGjNj19vbmNlLmlzUGFzc2FibGVTeW1ib2woaXNQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4oaXNQYXNzYWJsZVN5bWJvbCk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZVN5bWJvbD0oc3ltKT0+XG5pc1Bhc3NhYmxlU3ltYm9sKHN5bSl8fFxuRmFpbCBgT25seSByZWdpc3RlcmVkIHN5bWJvbHMgb3Igd2VsbC1rbm93biBzeW1ib2xzIGFyZSBwYXNzYWJsZTogJHtxKHN5bSl9YDskaM2PX29uY2UuYXNzZXJ0UGFzc2FibGVTeW1ib2woYXNzZXJ0UGFzc2FibGVTeW1ib2wpO1xuaGFyZGVuKGFzc2VydFBhc3NhYmxlU3ltYm9sKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbmFtZUZvclBhc3NhYmxlU3ltYm9sPShzeW0pPT57XG5jb25zdCBuYW1lPVN5bWJvbC5rZXlGb3Ioc3ltKTtcbmlmKG5hbWU9PT11bmRlZmluZWQpe1xucmV0dXJuIHdlbGxLbm93blN5bWJvbE5hbWVzLmdldChzeW0pO1xuIH1cbmlmKG5hbWUuc3RhcnRzV2l0aCgnQEAnKSl7XG5yZXR1cm4gYEBAJHtuYW1lfWA7XG4gfVxucmV0dXJuIG5hbWU7XG4gfTskaM2PX29uY2UubmFtZUZvclBhc3NhYmxlU3ltYm9sKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4obmFtZUZvclBhc3NhYmxlU3ltYm9sKTtcblxuY29uc3QgQXRBdFByZWZpeFBhdHRlcm49L15AQCguKikkLztcbmhhcmRlbihBdEF0UHJlZml4UGF0dGVybik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFzc2FibGVTeW1ib2xGb3JOYW1lPShuYW1lKT0+e1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNvbnN0IG1hdGNoPUF0QXRQcmVmaXhQYXR0ZXJuLmV4ZWMobmFtZSk7XG5pZihtYXRjaCl7XG5jb25zdCBzdWZmaXg9bWF0Y2hbMV07XG5pZihzdWZmaXguc3RhcnRzV2l0aCgnQEAnKSl7XG5yZXR1cm4gU3ltYm9sLmZvcihzdWZmaXgpO1xuIH1lbHNle1xuY29uc3Qgc3ltPVN5bWJvbFtzdWZmaXhdO1xuaWYodHlwZW9mIHN5bT09PSdzeW1ib2wnKXtcbnJldHVybiBzeW07XG4gfVxuRmFpbCBgUmVzZXJ2ZWQgZm9yIHdlbGwga25vd24gc3ltYm9sICR7cShzdWZmaXgpfTogJHtxKG5hbWUpfWA7XG4gfVxuIH1cbnJldHVybiBTeW1ib2wuZm9yKG5hbWUpO1xuIH07JGjNj19vbmNlLnBhc3NhYmxlU3ltYm9sRm9yTmFtZShwYXNzYWJsZVN5bWJvbEZvck5hbWUpO1xuaGFyZGVuKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Bhc3NhYmxlU3ltYm9sIjpbImlzUGFzc2FibGVTeW1ib2wiXSwiYXNzZXJ0UGFzc2FibGVTeW1ib2wiOlsiYXNzZXJ0UGFzc2FibGVTeW1ib2wiXSwibmFtZUZvclBhc3NhYmxlU3ltYm9sIjpbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiOlsicGFzc2FibGVTeW1ib2xGb3JOYW1lIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGDVY54UBwAAFAcAACUAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvdGFnZ2VkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJUYWdnZWRIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxhc3NlcnRDaGVja2VyLGNoZWNrVGFnUmVjb3JkLFBBU1NfU1RZTEUsZ2V0T3duRGF0YURlc2NyaXB0b3IsY2hlY2tQYXNzU3R5bGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjaGVja1RhZ1JlY29yZFwiLCBbJGjNj19hID0+IChjaGVja1RhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV0sW1wiY2hlY2tQYXNzU3R5bGVcIiwgWyRozY9fYSA9PiAoY2hlY2tQYXNzU3R5bGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRhZ2dlZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOid0YWdnZWQnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+XG5jaGVja1Bhc3NTdHlsZShjYW5kaWRhdGUsY2FuZGlkYXRlW1BBU1NfU1RZTEVdLCd0YWdnZWQnLGNoZWNrKSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tUYWdSZWNvcmQoY2FuZGlkYXRlLCd0YWdnZWQnLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuY29uc3QgcGFzc1N0eWxlS2V5PS8qICAgICAgICAgICAgICAgICAgKi9QQVNTX1NUWUxFO1xuY29uc3QgdGFnS2V5PS8qICAgICAgICAgICAgICAgICAgKi9TeW1ib2wudG9TdHJpbmdUYWc7XG5jb25zdHtcbi8vXG5bLyogICAgICAgICAgICAgICAgICovcGFzc1N0eWxlS2V5XTpfcGFzc1N0eWxlRGVzYyxcblsvKiAgICAgICAgICAgICAgICAgKi90YWdLZXldOl9sYWJlbERlc2MsXG5wYXlsb2FkOl9wYXlsb2FkRGVzYywvL1xuLi4ucmVzdERlc2NzfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbm93bktleXMocmVzdERlc2NzKS5sZW5ndGg9PT0wfHxcbkZhaWwgYFVuZXhwZWN0ZWQgcHJvcGVydGllcyBvbiB0YWdnZWQgcmVjb3JkICR7b3duS2V5cyhyZXN0RGVzY3MpfWA7XG5cbi8vXG4vL1xucGFzc1N0eWxlT2ZSZWN1cihcbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSwncGF5bG9hZCcsdHJ1ZSxhc3NlcnRDaGVja2VyKS52YWx1ZSk7XG5cbiB9fSk7JGjNj19vbmNlLlRhZ2dlZEhlbHBlcihUYWdnZWRIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVGFnZ2VkSGVscGVyIjpbIlRhZ2dlZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAOvwkt/ggAAP4IAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbImFzc2VydENvcHlBcnJheSIsImFzc2VydFJlY29yZCIsImFzc2VydFJlbW90YWJsZSIsImlzQ29weUFycmF5IiwiaXNSZWNvcmQiLCJpc1JlbW90YWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEscGFzc1N0eWxlT2Y7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzQ29weUFycmF5PShhcnIpPT5wYXNzU3R5bGVPZihhcnIpPT09J2NvcHlBcnJheSc7JGjNj19vbmNlLmlzQ29weUFycmF5KGlzQ29weUFycmF5KTtcbmhhcmRlbihpc0NvcHlBcnJheSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBpc1JlY29yZD0ocmVjb3JkKT0+cGFzc1N0eWxlT2YocmVjb3JkKT09PSdjb3B5UmVjb3JkJzskaM2PX29uY2UuaXNSZWNvcmQoaXNSZWNvcmQpO1xuaGFyZGVuKGlzUmVjb3JkKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBpc1JlbW90YWJsZT0ocmVtb3RhYmxlKT0+cGFzc1N0eWxlT2YocmVtb3RhYmxlKT09PSdyZW1vdGFibGUnOyRozY9fb25jZS5pc1JlbW90YWJsZShpc1JlbW90YWJsZSk7XG5oYXJkZW4oaXNSZW1vdGFibGUpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRDb3B5QXJyYXk9KGFycmF5LG9wdE5hbWVPZkFycmF5PSdBbGxlZ2VkIGFycmF5Jyk9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihhcnJheSk7XG5wYXNzU3R5bGU9PT0nY29weUFycmF5J3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mQXJyYXkpfSAke2FycmF5fSBtdXN0IGJlIGEgcGFzcy1ieS1jb3B5IGFycmF5LCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydENvcHlBcnJheShhc3NlcnRDb3B5QXJyYXkpO1xuaGFyZGVuKGFzc2VydENvcHlBcnJheSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlY29yZD0ocmVjb3JkLG9wdE5hbWVPZlJlY29yZD0nQWxsZWdlZCByZWNvcmQnKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlY29yZCk7XG5wYXNzU3R5bGU9PT0nY29weVJlY29yZCd8fFxuRmFpbCBgJHtxKG9wdE5hbWVPZlJlY29yZCl9ICR7cmVjb3JkfSBtdXN0IGJlIGEgcGFzcy1ieS1jb3B5IHJlY29yZCwgbm90ICR7cShcbnBhc3NTdHlsZSlcbiB9YDtcbiB9OyRozY9fb25jZS5hc3NlcnRSZWNvcmQoYXNzZXJ0UmVjb3JkKTtcbmhhcmRlbihhc3NlcnRSZWNvcmQpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBhc3NlcnRSZW1vdGFibGU9KFxucmVtb3RhYmxlLFxub3B0TmFtZU9mUmVtb3RhYmxlPSdBbGxlZ2VkIHJlbW90YWJsZScpPT5cbntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihyZW1vdGFibGUpO1xucGFzc1N0eWxlPT09J3JlbW90YWJsZSd8fFxuRmFpbCBgJHtxKG9wdE5hbWVPZlJlbW90YWJsZSl9ICR7cmVtb3RhYmxlfSBtdXN0IGJlIGEgcmVtb3RhYmxlLCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydFJlbW90YWJsZShhc3NlcnRSZW1vdGFibGUpO1xuaGFyZGVuKGFzc2VydFJlbW90YWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc0NvcHlBcnJheSI6WyJpc0NvcHlBcnJheSJdLCJpc1JlY29yZCI6WyJpc1JlY29yZCJdLCJpc1JlbW90YWJsZSI6WyJpc1JlbW90YWJsZSJdLCJhc3NlcnRDb3B5QXJyYXkiOlsiYXNzZXJ0Q29weUFycmF5Il0sImFzc2VydFJlY29yZCI6WyJhc3NlcnRSZWNvcmQiXSwiYXNzZXJ0UmVtb3RhYmxlIjpbImFzc2VydFJlbW90YWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAkAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADFh1fptw4AALcOAAAeAAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2tleXMvY2hlY2tLZXkuanMiLCIuL3NyYy9rZXlzL2NvcHlTZXQuanMiLCIuL3NyYy9rZXlzL2NvcHlCYWcuanMiLCIuL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzIiwiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzIiwiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIiwiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIiwiLi9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qcyIsIi4vc3JjL3R5cGVzLmpzIiwiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5IiwiYmFnVW5pb24iLCJiYWdVbmlvbiIsImVsZW1lbnRzSXNEaXNqb2ludCIsImVsZW1lbnRzSXNEaXNqb2ludCIsImdldE1ldGhvZEd1YXJkUGF5bG9hZCIsImdldE1ldGhvZEd1YXJkUGF5bG9hZCIsImdldFJhbmtDb3ZlciIsImdldFJhbmtDb3ZlciIsInNldENvbXBhcmUiLCJzZXRDb21wYXJlIixudWxsLG51bGwsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL2NvcHlTZXQuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvY29weUJhZy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanNcIiwgW11dLFtcIi4vc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMva2V5cy9jaGVja0tleS5qcyI6W1siaXNLZXkiLCJpc0tleSJdLFsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5Il0sWyJhc3NlcnRTY2FsYXJLZXkiLCJhc3NlcnRTY2FsYXJLZXkiXSxbImlzQ29weVNldCIsImlzQ29weVNldCJdLFsiYXNzZXJ0Q29weVNldCIsImFzc2VydENvcHlTZXQiXSxbIm1ha2VDb3B5U2V0IiwibWFrZUNvcHlTZXQiXSxbImdldENvcHlTZXRLZXlzIiwiZ2V0Q29weVNldEtleXMiXSxbImlzQ29weUJhZyIsImlzQ29weUJhZyJdLFsiYXNzZXJ0Q29weUJhZyIsImFzc2VydENvcHlCYWciXSxbIm1ha2VDb3B5QmFnIiwibWFrZUNvcHlCYWciXSxbIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiXSxbImdldENvcHlCYWdFbnRyaWVzIiwiZ2V0Q29weUJhZ0VudHJpZXMiXSxbImlzQ29weU1hcCIsImlzQ29weU1hcCJdLFsiYXNzZXJ0Q29weU1hcCIsImFzc2VydENvcHlNYXAiXSxbIm1ha2VDb3B5TWFwIiwibWFrZUNvcHlNYXAiXSxbImdldENvcHlNYXBFbnRyaWVzIiwiZ2V0Q29weU1hcEVudHJpZXMiXV0sIi4vc3JjL2tleXMvY29weVNldC5qcyI6W1siY29lcmNlVG9FbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiXV0sIi4vc3JjL2tleXMvY29weUJhZy5qcyI6W1siY29lcmNlVG9CYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIl1dLCIuL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzIjpbWyJiYWdDb21wYXJlIiwiYmFnQ29tcGFyZSJdLFsic2V0Q29tcGFyZSIsInNldENvbXBhcmUiXSxbImNvbXBhcmVLZXlzIiwiY29tcGFyZUtleXMiXSxbImtleUxUIiwia2V5TFQiXSxbImtleUxURSIsImtleUxURSJdLFsia2V5RVEiLCJrZXlFUSJdLFsia2V5R1RFIiwia2V5R1RFIl0sWyJrZXlHVCIsImtleUdUIl1dLCIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiOltbImVsZW1lbnRzSXNTdXBlcnNldCIsImVsZW1lbnRzSXNTdXBlcnNldCJdLFsiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50Il0sWyJlbGVtZW50c0NvbXBhcmUiLCJlbGVtZW50c0NvbXBhcmUiXSxbImVsZW1lbnRzVW5pb24iLCJlbGVtZW50c1VuaW9uIl0sWyJlbGVtZW50c0Rpc2pvaW50VW5pb24iLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSxbImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSxbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLFsic2V0SXNTdXBlcnNldCIsInNldElzU3VwZXJzZXQiXSxbInNldElzRGlzam9pbnQiLCJzZXRJc0Rpc2pvaW50Il0sWyJzZXRVbmlvbiIsInNldFVuaW9uIl0sWyJzZXREaXNqb2ludFVuaW9uIiwic2V0RGlzam9pbnRVbmlvbiJdLFsic2V0SW50ZXJzZWN0aW9uIiwic2V0SW50ZXJzZWN0aW9uIl0sWyJzZXREaXNqb2ludFN1YnRyYWN0Iiwic2V0RGlzam9pbnRTdWJ0cmFjdCJdXSwiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIjpbWyJiYWdJc1N1cGVyYmFnIiwiYmFnSXNTdXBlcmJhZyJdLFsiYmFnVW5pb24iLCJiYWdVbmlvbiJdLFsiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSW50ZXJzZWN0aW9uIl0sWyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnRGlzam9pbnRTdWJ0cmFjdCJdXSwiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIjpbWyJNIiwiTSJdLFsiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIl0sWyJpc1BhdHRlcm4iLCJpc1BhdHRlcm4iXSxbImFzc2VydFBhdHRlcm4iLCJhc3NlcnRQYXR0ZXJuIl0sWyJtYXRjaGVzIiwibWF0Y2hlcyJdLFsibXVzdE1hdGNoIiwibXVzdE1hdGNoIl0sWyJpc0F3YWl0QXJnR3VhcmQiLCJpc0F3YWl0QXJnR3VhcmQiXSxbImFzc2VydEF3YWl0QXJnR3VhcmQiLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIl0sWyJpc1Jhd0d1YXJkIiwiaXNSYXdHdWFyZCJdLFsiYXNzZXJ0UmF3R3VhcmQiLCJhc3NlcnRSYXdHdWFyZCJdLFsiYXNzZXJ0TWV0aG9kR3VhcmQiLCJhc3NlcnRNZXRob2RHdWFyZCJdLFsiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCJdLFsia2luZE9mIiwia2luZE9mIl1dLCIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIjpbWyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCIsImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIl0sWyJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiXSxbImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCIsImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCJdLFsiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyIsImdldEludGVyZmFjZU1ldGhvZEtleXMiXV0sIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOltbImxpc3REaWZmZXJlbmNlIiwibGlzdERpZmZlcmVuY2UiXV0sIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjpbWyJvYmplY3RNYXAiLCJvYmplY3RNYXAiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFulOQw5MgAAOTIAACoAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY2hlY2tLZXkuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9jb3B5U2V0LmpzIiwiLi9jb3B5QmFnLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29weUJhZyIsImFzc2VydENvcHlNYXAiLCJhc3NlcnRDb3B5U2V0IiwiYXNzZXJ0S2V5IiwiYXNzZXJ0UHJpbWl0aXZlS2V5IiwiYXNzZXJ0U2NhbGFyS2V5IiwiY2hlY2tDb3B5QmFnIiwiY2hlY2tDb3B5TWFwIiwiY2hlY2tDb3B5U2V0IiwiY2hlY2tLZXkiLCJjaGVja1NjYWxhcktleSIsImNvcHlNYXBLZXlTZXQiLCJldmVyeUNvcHlCYWdFbnRyeSIsImV2ZXJ5Q29weU1hcEtleSIsImV2ZXJ5Q29weU1hcFZhbHVlIiwiZXZlcnlDb3B5U2V0S2V5IiwiZ2V0Q29weUJhZ0VudHJpZXMiLCJnZXRDb3B5TWFwRW50cmllcyIsImdldENvcHlNYXBFbnRyeUFycmF5IiwiZ2V0Q29weU1hcEtleXMiLCJnZXRDb3B5TWFwVmFsdWVzIiwiZ2V0Q29weVNldEtleXMiLCJpc0NvcHlCYWciLCJpc0NvcHlNYXAiLCJpc0NvcHlTZXQiLCJpc0tleSIsImlzUHJpbWl0aXZlS2V5IiwiaXNTY2FsYXJLZXkiLCJtYWtlQ29weUJhZyIsIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlNYXAiLCJtYWtlQ29weVNldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLGFzc2VydFBhc3NhYmxlLEZhcixnZXRUYWcsaXNPYmplY3QsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxpZGVudENoZWNrZXIsWCxxLEZhaWwsY2hlY2tFbGVtZW50cyxtYWtlU2V0T2ZFbGVtZW50cyxjaGVja0JhZ0VudHJpZXMsbWFrZUJhZ09mRW50cmllczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXNzYWJsZVwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaM2PX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaM2PX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjNj19hID0+IChzb3J0QnlSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanNcIiwgW1tcImlkZW50Q2hlY2tlclwiLCBbJGjNj19hID0+IChpZGVudENoZWNrZXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5U2V0LmpzXCIsIFtbXCJjaGVja0VsZW1lbnRzXCIsIFskaM2PX2EgPT4gKGNoZWNrRWxlbWVudHMgPSAkaM2PX2EpXV0sW1wibWFrZVNldE9mRWxlbWVudHNcIiwgWyRozY9fYSA9PiAobWFrZVNldE9mRWxlbWVudHMgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlCYWcuanNcIiwgW1tcImNoZWNrQmFnRW50cmllc1wiLCBbJGjNj19hID0+IChjaGVja0JhZ0VudHJpZXMgPSAkaM2PX2EpXV0sW1wibWFrZUJhZ09mRW50cmllc1wiLCBbJGjNj19hID0+IChtYWtlQmFnT2ZFbnRyaWVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuXG5cbiAqL1xuXG4vL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja1ByaW1pdGl2ZUtleT0odmFsLGNoZWNrKT0+e1xuaWYoaXNPYmplY3QodmFsKSl7XG5yZXR1cm4oXG5jaGVjayE9PWlkZW50Q2hlY2tlciYmXG5jaGVjayhmYWxzZSxYIGBBICR7cSh0eXBlb2YgdmFsKX0gY2Fubm90IGJlIGEgcHJpbWl0aXZlOiAke3ZhbH1gKSk7XG5cbiB9XG4vL1xuLy9cbmFzc2VydFBhc3NhYmxlKHZhbCk7XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUHJpbWl0aXZlS2V5PSh2YWwpPT5jaGVja1ByaW1pdGl2ZUtleSh2YWwsaWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNQcmltaXRpdmVLZXkoaXNQcmltaXRpdmVLZXkpO1xuaGFyZGVuKGlzUHJpbWl0aXZlS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQcmltaXRpdmVLZXk9KHZhbCk9PntcbmNoZWNrUHJpbWl0aXZlS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRQcmltaXRpdmVLZXkoYXNzZXJ0UHJpbWl0aXZlS2V5KTtcbmhhcmRlbihhc3NlcnRQcmltaXRpdmVLZXkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tTY2FsYXJLZXk9KHZhbCxjaGVjayk9PntcbmlmKGlzUHJpbWl0aXZlS2V5KHZhbCkpe1xucmV0dXJuIHRydWU7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5pZihwYXNzU3R5bGU9PT0ncmVtb3RhYmxlJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgQSAke3EocGFzc1N0eWxlKX0gY2Fubm90IGJlIGEgc2NhbGFyIGtleTogJHt2YWx9YCk7XG4gfTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuY2hlY2tTY2FsYXJLZXkoY2hlY2tTY2FsYXJLZXkpO1xuY29uc3QgICAgICAgIGlzU2NhbGFyS2V5PSh2YWwpPT5jaGVja1NjYWxhcktleSh2YWwsaWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNTY2FsYXJLZXkoaXNTY2FsYXJLZXkpO1xuaGFyZGVuKGlzU2NhbGFyS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRTY2FsYXJLZXk9KHZhbCk9PntcbmNoZWNrU2NhbGFyS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRTY2FsYXJLZXkoYXNzZXJ0U2NhbGFyS2V5KTtcbmhhcmRlbihhc3NlcnRTY2FsYXJLZXkpO1xuXG4vL1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3Qga2V5TWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tLZXk9KHZhbCxjaGVjayk9PntcbmlmKCFpc09iamVjdCh2YWwpKXtcbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUodmFsKTtcbnJldHVybiB0cnVlO1xuIH1cbi8vXG5pZihrZXlNZW1vLmhhcyh2YWwpKXtcbnJldHVybiB0cnVlO1xuIH1cbi8vXG5jb25zdCByZXN1bHQ9Y2hlY2tLZXlJbnRlcm5hbCh2YWwsY2hlY2spO1xuaWYocmVzdWx0KXtcbi8vXG4vL1xuLy9cbmtleU1lbW8uYWRkKHZhbCk7XG4gfVxuLy9cbi8vXG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmNoZWNrS2V5KGNoZWNrS2V5KTtcbmhhcmRlbihjaGVja0tleSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzS2V5PSh2YWwpPT5jaGVja0tleSh2YWwsaWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNLZXkoaXNLZXkpO1xuaGFyZGVuKGlzS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRLZXk9KHZhbCk9PntcbmNoZWNrS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRLZXkoYXNzZXJ0S2V5KTtcbmhhcmRlbihhc3NlcnRLZXkpO1xuXG4vL1xuXG4vL1xuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29weVNldE1lbW89bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrQ29weVNldD0ocyxjaGVjayk9PntcbmlmKGNvcHlTZXRNZW1vLmhhcyhzKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCByZXN1bHQ9XG4ocGFzc1N0eWxlT2Yocyk9PT0ndGFnZ2VkJyYmZ2V0VGFnKHMpPT09J2NvcHlTZXQnfHxcbmNoZWNrKGZhbHNlLFggYE5vdCBhIGNvcHlTZXQ6ICR7c31gKSkmJlxuY2hlY2tFbGVtZW50cyhzLnBheWxvYWQsY2hlY2spJiZcbmNoZWNrS2V5KHMucGF5bG9hZCxjaGVjayk7XG5pZihyZXN1bHQpe1xuY29weVNldE1lbW8uYWRkKHMpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTskaM2PX29uY2UuY2hlY2tDb3B5U2V0KGNoZWNrQ29weVNldCk7XG5oYXJkZW4oY2hlY2tDb3B5U2V0KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NvcHlTZXQ9KHMpPT5jaGVja0NvcHlTZXQocyxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc0NvcHlTZXQoaXNDb3B5U2V0KTtcbmhhcmRlbihpc0NvcHlTZXQpO1xuXG4vKlxuXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDb3B5U2V0PShzKT0+e1xuY2hlY2tDb3B5U2V0KHMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weVNldChhc3NlcnRDb3B5U2V0KTtcbmhhcmRlbihhc3NlcnRDb3B5U2V0KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlTZXRLZXlzPShzKT0+e1xuYXNzZXJ0Q29weVNldChzKTtcbnJldHVybiBzLnBheWxvYWQ7XG4gfTskaM2PX29uY2UuZ2V0Q29weVNldEtleXMoZ2V0Q29weVNldEtleXMpO1xuaGFyZGVuKGdldENvcHlTZXRLZXlzKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5U2V0S2V5PShzLGZuKT0+XG5nZXRDb3B5U2V0S2V5cyhzKS5ldmVyeSgoa2V5LGluZGV4KT0+Zm4oa2V5LGluZGV4KSk7JGjNj19vbmNlLmV2ZXJ5Q29weVNldEtleShldmVyeUNvcHlTZXRLZXkpO1xuaGFyZGVuKGV2ZXJ5Q29weVNldEtleSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29weVNldD0oZWxlbWVudEl0ZXIpPT57XG5jb25zdCByZXN1bHQ9bWFrZVNldE9mRWxlbWVudHMoZWxlbWVudEl0ZXIpO1xuYXNzZXJ0Q29weVNldChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5tYWtlQ29weVNldChtYWtlQ29weVNldCk7XG5oYXJkZW4obWFrZUNvcHlTZXQpO1xuXG4vL1xuXG4vL1xuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29weUJhZ01lbW89bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrQ29weUJhZz0oYixjaGVjayk9PntcbmlmKGNvcHlCYWdNZW1vLmhhcyhiKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCByZXN1bHQ9XG4ocGFzc1N0eWxlT2YoYik9PT0ndGFnZ2VkJyYmZ2V0VGFnKGIpPT09J2NvcHlCYWcnfHxcbmNoZWNrKGZhbHNlLFggYE5vdCBhIGNvcHlCYWc6ICR7Yn1gKSkmJlxuY2hlY2tCYWdFbnRyaWVzKGIucGF5bG9hZCxjaGVjaykmJlxuY2hlY2tLZXkoYi5wYXlsb2FkLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb3B5QmFnTWVtby5hZGQoYik7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5jaGVja0NvcHlCYWcoY2hlY2tDb3B5QmFnKTtcbmhhcmRlbihjaGVja0NvcHlCYWcpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weUJhZz0oYik9PmNoZWNrQ29weUJhZyhiLGlkZW50Q2hlY2tlcik7JGjNj19vbmNlLmlzQ29weUJhZyhpc0NvcHlCYWcpO1xuaGFyZGVuKGlzQ29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGFzc2VydENvcHlCYWc9KGIpPT57XG5jaGVja0NvcHlCYWcoYixhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRDb3B5QmFnKGFzc2VydENvcHlCYWcpO1xuaGFyZGVuKGFzc2VydENvcHlCYWcpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weUJhZ0VudHJpZXM9KGIpPT57XG5hc3NlcnRDb3B5QmFnKGIpO1xucmV0dXJuIGIucGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRDb3B5QmFnRW50cmllcyhnZXRDb3B5QmFnRW50cmllcyk7XG5oYXJkZW4oZ2V0Q29weUJhZ0VudHJpZXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVyeUNvcHlCYWdFbnRyeT0oYixmbik9PlxuZ2V0Q29weUJhZ0VudHJpZXMoYikuZXZlcnkoKGVudHJ5LGluZGV4KT0+Zm4oZW50cnksaW5kZXgpKTskaM2PX29uY2UuZXZlcnlDb3B5QmFnRW50cnkoZXZlcnlDb3B5QmFnRW50cnkpO1xuaGFyZGVuKGV2ZXJ5Q29weUJhZ0VudHJ5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5QmFnPShiYWdFbnRyeUl0ZXIpPT57XG5jb25zdCByZXN1bHQ9bWFrZUJhZ09mRW50cmllcyhiYWdFbnRyeUl0ZXIpO1xuYXNzZXJ0Q29weUJhZyhyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5tYWtlQ29weUJhZyhtYWtlQ29weUJhZyk7XG5oYXJkZW4obWFrZUNvcHlCYWcpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvcHlCYWdGcm9tRWxlbWVudHM9KGVsZW1lbnRJdGVyKT0+e1xuLy9cbi8vXG5jb25zdCBmdWxsQ29tcGFyZT1tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuY29uc3Qgc29ydGVkPXNvcnRCeVJhbmsoZWxlbWVudEl0ZXIsZnVsbENvbXBhcmUpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbnRyaWVzPVtdO1xuZm9yKGxldCBpPTA7aTxzb3J0ZWQubGVuZ3RoOyl7XG5jb25zdCBrPXNvcnRlZFtpXTtcbmxldCBqPWkrMTtcbndoaWxlKGo8c29ydGVkLmxlbmd0aCYmZnVsbENvbXBhcmUoayxzb3J0ZWRbal0pPT09MCl7XG5qKz0xO1xuIH1cbmVudHJpZXMucHVzaChbayxCaWdJbnQoai1pKV0pO1xuaT1qO1xuIH1cbnJldHVybiBtYWtlQ29weUJhZyhlbnRyaWVzKTtcbiB9OyRozY9fb25jZS5tYWtlQ29weUJhZ0Zyb21FbGVtZW50cyhtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyk7XG5oYXJkZW4obWFrZUNvcHlCYWdGcm9tRWxlbWVudHMpO1xuXG4vL1xuXG4vL1xuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29weU1hcE1lbW89bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrQ29weU1hcD0obSxjaGVjayk9PntcbmlmKGNvcHlNYXBNZW1vLmhhcyhtKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZighKHBhc3NTdHlsZU9mKG0pPT09J3RhZ2dlZCcmJmdldFRhZyhtKT09PSdjb3B5TWFwJykpe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYE5vdCBhIGNvcHlNYXA6ICR7bX1gKTtcbiB9XG5jb25zdHtwYXlsb2FkfT1tO1xuaWYocGFzc1N0eWxlT2YocGF5bG9hZCkhPT0nY29weVJlY29yZCcpe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgY29weU1hcCdzIHBheWxvYWQgbXVzdCBiZSBhIHJlY29yZDogJHttfWApO1xuIH1cbmNvbnN0e2tleXMsdmFsdWVzLC4uLnJlc3R9PXBheWxvYWQ7XG5jb25zdCByZXN1bHQ9XG4ob3duS2V5cyhyZXN0KS5sZW5ndGg9PT0wfHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBBIGNvcHlNYXAncyBwYXlsb2FkIG11c3Qgb25seSBoYXZlIC5rZXlzIGFuZCAudmFsdWVzOiAke219YCkpJiZcblxuY2hlY2tFbGVtZW50cyhrZXlzLGNoZWNrKSYmXG5jaGVja0tleShrZXlzLGNoZWNrKSYmKFxucGFzc1N0eWxlT2YodmFsdWVzKT09PSdjb3B5QXJyYXknfHxcbmNoZWNrKGZhbHNlLFggYEEgY29weU1hcCdzIC52YWx1ZXMgbXVzdCBiZSBhIGNvcHlBcnJheTogJHttfWApKSYmKFxua2V5cy5sZW5ndGg9PT12YWx1ZXMubGVuZ3RofHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBBIGNvcHlNYXAgbXVzdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBrZXlzIGFuZCB2YWx1ZXM6ICR7bX1gKSk7XG5cbmlmKHJlc3VsdCl7XG5jb3B5TWFwTWVtby5hZGQobSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5jaGVja0NvcHlNYXAoY2hlY2tDb3B5TWFwKTtcbmhhcmRlbihjaGVja0NvcHlNYXApO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weU1hcD0obSk9PmNoZWNrQ29weU1hcChtLGlkZW50Q2hlY2tlcik7JGjNj19vbmNlLmlzQ29weU1hcChpc0NvcHlNYXApO1xuaGFyZGVuKGlzQ29weU1hcCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Q29weU1hcD0obSk9PntcbmNoZWNrQ29weU1hcChtLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydENvcHlNYXAoYXNzZXJ0Q29weU1hcCk7XG5oYXJkZW4oYXNzZXJ0Q29weU1hcCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBLZXlzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbnJldHVybiBtLnBheWxvYWQua2V5cztcbiB9OyRozY9fb25jZS5nZXRDb3B5TWFwS2V5cyhnZXRDb3B5TWFwS2V5cyk7XG5oYXJkZW4oZ2V0Q29weU1hcEtleXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5TWFwVmFsdWVzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbnJldHVybiBtLnBheWxvYWQudmFsdWVzO1xuIH07JGjNj19vbmNlLmdldENvcHlNYXBWYWx1ZXMoZ2V0Q29weU1hcFZhbHVlcyk7XG5oYXJkZW4oZ2V0Q29weU1hcFZhbHVlcyk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5TWFwRW50cnlBcnJheT0obSk9PntcbmFzc2VydENvcHlNYXAobSk7XG5jb25zdHtcbnBheWxvYWQ6e2tleXMsdmFsdWVzfX09XG5tO1xucmV0dXJuIGhhcmRlbihrZXlzLm1hcCgoa2V5LGkpPT5ba2V5LHZhbHVlc1tpXV0pKTtcbiB9OyRozY9fb25jZS5nZXRDb3B5TWFwRW50cnlBcnJheShnZXRDb3B5TWFwRW50cnlBcnJheSk7XG5oYXJkZW4oZ2V0Q29weU1hcEVudHJ5QXJyYXkpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5TWFwRW50cmllcz0obSk9PntcbmFzc2VydENvcHlNYXAobSk7XG5jb25zdHtcbnBheWxvYWQ6e2tleXMsdmFsdWVzfX09XG5tO1xuY29uc3R7bGVuZ3RofT0vKiAgICAgICAgICAgICAgICAqL2tleXM7XG5yZXR1cm4gRmFyKCdDb3B5TWFwIGVudHJpZXMgaXRlcmFibGUnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5sZXQgaT0wO1xucmV0dXJuIEZhcignQ29weU1hcCBlbnRyaWVzIGl0ZXJhdG9yJyx7XG5uZXh0OigpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHJlc3VsdDtcbmlmKGk8bGVuZ3RoKXtcbnJlc3VsdD1oYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6W2tleXNbaV0sdmFsdWVzW2ldXX0pO1xuaSs9MTtcbnJldHVybiByZXN1bHQ7XG4gfWVsc2V7XG5yZXN1bHQ9aGFyZGVuKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9OyRozY9fb25jZS5nZXRDb3B5TWFwRW50cmllcyhnZXRDb3B5TWFwRW50cmllcyk7XG5oYXJkZW4oZ2V0Q29weU1hcEVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weU1hcEtleT0obSxmbik9PlxuZ2V0Q29weU1hcEtleXMobSkuZXZlcnkoKGtleSxpbmRleCk9PmZuKGtleSxpbmRleCkpOyRozY9fb25jZS5ldmVyeUNvcHlNYXBLZXkoZXZlcnlDb3B5TWFwS2V5KTtcbmhhcmRlbihldmVyeUNvcHlNYXBLZXkpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weU1hcFZhbHVlPShtLGZuKT0+XG5nZXRDb3B5TWFwVmFsdWVzKG0pLmV2ZXJ5KCh2YWx1ZSxpbmRleCk9PmZuKHZhbHVlLGluZGV4KSk7JGjNj19vbmNlLmV2ZXJ5Q29weU1hcFZhbHVlKGV2ZXJ5Q29weU1hcFZhbHVlKTtcbmhhcmRlbihldmVyeUNvcHlNYXBWYWx1ZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvcHlNYXBLZXlTZXQ9KG0pPT5cbi8vXG5tYWtlVGFnZ2VkKCdjb3B5U2V0JyxtLnBheWxvYWQua2V5cyk7JGjNj19vbmNlLmNvcHlNYXBLZXlTZXQoY29weU1hcEtleVNldCk7XG5oYXJkZW4oY29weU1hcEtleVNldCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5TWFwPShlbnRyaWVzKT0+e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBzb3J0ZWRFbnRyaWVzPXNvcnRCeVJhbmsoZW50cmllcyxjb21wYXJlQW50aVJhbmspO1xuY29uc3Qga2V5cz1zb3J0ZWRFbnRyaWVzLm1hcCgoW2ssX3ZdKT0+ayk7XG5jb25zdCB2YWx1ZXM9c29ydGVkRW50cmllcy5tYXAoKFtfayx2XSk9PnYpO1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2NvcHlNYXAnLHtrZXlzLHZhbHVlc30pO1xuYXNzZXJ0Q29weU1hcChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5tYWtlQ29weU1hcChtYWtlQ29weU1hcCk7XG5oYXJkZW4obWFrZUNvcHlNYXApO1xuXG4vL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja0tleUludGVybmFsPSh2YWwsY2hlY2spPT57XG5jb25zdCBjaGVja0l0PShjaGlsZCk9PmNoZWNrS2V5KGNoaWxkLGNoZWNrKTtcblxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbnJldHVybiBPYmplY3QudmFsdWVzKHZhbCkuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG5yZXR1cm4gdmFsLmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdCB0YWc9Z2V0VGFnKHZhbCk7XG5zd2l0Y2godGFnKXtcbmNhc2UnY29weVNldCc6e1xucmV0dXJuIGNoZWNrQ29weVNldCh2YWwsY2hlY2spO1xuIH1cbmNhc2UnY29weUJhZyc6e1xucmV0dXJuIGNoZWNrQ29weUJhZyh2YWwsY2hlY2spO1xuIH1cbmNhc2UnY29weU1hcCc6e1xucmV0dXJuKFxuY2hlY2tDb3B5TWFwKHZhbCxjaGVjaykmJlxuLy9cbi8vXG4vL1xuZXZlcnlDb3B5TWFwVmFsdWUodmFsLGNoZWNrSXQpKTtcblxuIH1cbmRlZmF1bHQ6e1xucmV0dXJuKFxuY2hlY2shPT1pZGVudENoZWNrZXImJlxuY2hlY2soZmFsc2UsWCBgQSBwYXNzYWJsZSB0YWdnZWQgJHtxKHRhZyl9IGlzIG5vdCBhIGtleTogJHt2YWx9YCkpO1xuXG4gfX1cblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG4vL1xucmV0dXJuIHRydWU7XG4gfVxuY2FzZSdlcnJvcic6XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBjaGVjayhmYWxzZSxYIGBBICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgYSBrZXlgKTtcbiB9XG5kZWZhdWx0Ontcbi8vXG4vL1xudGhyb3cgRmFpbCBgdW5leHBlY3RlZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9OiAke3ZhbH1gO1xuIH19XG5cbiB9O1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQcmltaXRpdmVLZXkiOlsiaXNQcmltaXRpdmVLZXkiXSwiYXNzZXJ0UHJpbWl0aXZlS2V5IjpbImFzc2VydFByaW1pdGl2ZUtleSJdLCJjaGVja1NjYWxhcktleSI6WyJjaGVja1NjYWxhcktleSJdLCJpc1NjYWxhcktleSI6WyJpc1NjYWxhcktleSJdLCJhc3NlcnRTY2FsYXJLZXkiOlsiYXNzZXJ0U2NhbGFyS2V5Il0sImNoZWNrS2V5IjpbImNoZWNrS2V5Il0sImlzS2V5IjpbImlzS2V5Il0sImFzc2VydEtleSI6WyJhc3NlcnRLZXkiXSwiY2hlY2tDb3B5U2V0IjpbImNoZWNrQ29weVNldCJdLCJpc0NvcHlTZXQiOlsiaXNDb3B5U2V0Il0sImFzc2VydENvcHlTZXQiOlsiYXNzZXJ0Q29weVNldCJdLCJnZXRDb3B5U2V0S2V5cyI6WyJnZXRDb3B5U2V0S2V5cyJdLCJldmVyeUNvcHlTZXRLZXkiOlsiZXZlcnlDb3B5U2V0S2V5Il0sIm1ha2VDb3B5U2V0IjpbIm1ha2VDb3B5U2V0Il0sImNoZWNrQ29weUJhZyI6WyJjaGVja0NvcHlCYWciXSwiaXNDb3B5QmFnIjpbImlzQ29weUJhZyJdLCJhc3NlcnRDb3B5QmFnIjpbImFzc2VydENvcHlCYWciXSwiZ2V0Q29weUJhZ0VudHJpZXMiOlsiZ2V0Q29weUJhZ0VudHJpZXMiXSwiZXZlcnlDb3B5QmFnRW50cnkiOlsiZXZlcnlDb3B5QmFnRW50cnkiXSwibWFrZUNvcHlCYWciOlsibWFrZUNvcHlCYWciXSwibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiOlsibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiXSwiY2hlY2tDb3B5TWFwIjpbImNoZWNrQ29weU1hcCJdLCJpc0NvcHlNYXAiOlsiaXNDb3B5TWFwIl0sImFzc2VydENvcHlNYXAiOlsiYXNzZXJ0Q29weU1hcCJdLCJnZXRDb3B5TWFwS2V5cyI6WyJnZXRDb3B5TWFwS2V5cyJdLCJnZXRDb3B5TWFwVmFsdWVzIjpbImdldENvcHlNYXBWYWx1ZXMiXSwiZ2V0Q29weU1hcEVudHJ5QXJyYXkiOlsiZ2V0Q29weU1hcEVudHJ5QXJyYXkiXSwiZ2V0Q29weU1hcEVudHJpZXMiOlsiZ2V0Q29weU1hcEVudHJpZXMiXSwiZXZlcnlDb3B5TWFwS2V5IjpbImV2ZXJ5Q29weU1hcEtleSJdLCJldmVyeUNvcHlNYXBWYWx1ZSI6WyJldmVyeUNvcHlNYXBWYWx1ZSJdLCJjb3B5TWFwS2V5U2V0IjpbImNvcHlNYXBLZXlTZXQiXSwibWFrZUNvcHlNYXAiOlsibWFrZUNvcHlNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAhD+LBxMVAAATFQAALQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9jb21wYXJlS2V5cy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIiwiLi9jaGVja0tleS5qcyIsIi4va2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanMiXSwiZXhwb3J0cyI6WyJiYWdDb21wYXJlIiwiY29tcGFyZUtleXMiLCJrZXlFUSIsImtleUdUIiwia2V5R1RFIiwia2V5TFQiLCJrZXlMVEUiLCJzZXRDb21wYXJlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhc3NTdHlsZU9mLGdldFRhZyxjb21wYXJlUmFuayxyZWNvcmROYW1lcyxyZWNvcmRWYWx1ZXMsdHJpdmlhbENvbXBhcmF0b3IscSxGYWlsLGFzc2VydEtleSxnZXRDb3B5QmFnRW50cmllcyxnZXRDb3B5TWFwRW50cnlBcnJheSxnZXRDb3B5U2V0S2V5cyxtYWtlQ29tcGFyZUNvbGxlY3Rpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcImNvbXBhcmVSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjNj19hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZE5hbWVzID0gJGjNj19hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjNj19hID0+IChyZWNvcmRWYWx1ZXMgPSAkaM2PX2EpXV0sW1widHJpdmlhbENvbXBhcmF0b3JcIiwgWyRozY9fYSA9PiAodHJpdmlhbENvbXBhcmF0b3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NoZWNrS2V5LmpzXCIsIFtbXCJhc3NlcnRLZXlcIiwgWyRozY9fYSA9PiAoYXNzZXJ0S2V5ID0gJGjNj19hKV1dLFtcImdldENvcHlCYWdFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdldENvcHlCYWdFbnRyaWVzID0gJGjNj19hKV1dLFtcImdldENvcHlNYXBFbnRyeUFycmF5XCIsIFskaM2PX2EgPT4gKGdldENvcHlNYXBFbnRyeUFycmF5ID0gJGjNj19hKV1dLFtcImdldENvcHlTZXRLZXlzXCIsIFskaM2PX2EgPT4gKGdldENvcHlTZXRLZXlzID0gJGjNj19hKV1dXV0sW1wiLi9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qc1wiLCBbW1wibWFrZUNvbXBhcmVDb2xsZWN0aW9uXCIsIFskaM2PX2EgPT4gKG1ha2VDb21wYXJlQ29sbGVjdGlvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzZXRDb21wYXJlPW1ha2VDb21wYXJlQ29sbGVjdGlvbihcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4ocyk9PmhhcmRlbihnZXRDb3B5U2V0S2V5cyhzKS5tYXAoKGtleSk9PltrZXksMV0pKSxcblxuMCxcbnRyaXZpYWxDb21wYXJhdG9yKTskaM2PX29uY2Uuc2V0Q29tcGFyZShzZXRDb21wYXJlKTtcblxuaGFyZGVuKHNldENvbXBhcmUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYmFnQ29tcGFyZT1tYWtlQ29tcGFyZUNvbGxlY3Rpb24oXG5nZXRDb3B5QmFnRW50cmllcyxcbjBuLFxudHJpdmlhbENvbXBhcmF0b3IpOyRozY9fb25jZS5iYWdDb21wYXJlKGJhZ0NvbXBhcmUpO1xuXG5oYXJkZW4oYmFnQ29tcGFyZSk7XG5cbi8vXG4vL1xuLy9cbi8vXG4vKlxuXG5cbiAqL1xuY29uc3QgQUJTRU5UPVN5bWJvbCgnYWJzZW50Jyk7XG4vKlxuXG5cblxuXG5cblxuICovXG4vL1xuY29uc3QgX21hcENvbXBhcmU9bWFrZUNvbXBhcmVDb2xsZWN0aW9uKFxuZ2V0Q29weU1hcEVudHJ5QXJyYXksXG5BQlNFTlQsXG4obGVmdFZhbHVlLHJpZ2h0VmFsdWUpPT57XG5pZihsZWZ0VmFsdWU9PT1BQlNFTlQmJnJpZ2h0VmFsdWU9PT1BQlNFTlQpe1xudGhyb3cgRmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgYWJzZW50IGVudHJ5IHBhaXJgO1xuIH1lbHNlIGlmKGxlZnRWYWx1ZT09PUFCU0VOVCl7XG5yZXR1cm4tMTtcbiB9ZWxzZSBpZihyaWdodFZhbHVlPT09QUJTRU5UKXtcbnJldHVybiAxO1xuIH1lbHNle1xuLy9cbnJldHVybiBjb21wYXJlS2V5cyhsZWZ0VmFsdWUscmlnaHRWYWx1ZSk7XG4gfVxuIH0pO1xuXG5oYXJkZW4oX21hcENvbXBhcmUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgY29tcGFyZUtleXM9KGxlZnQscmlnaHQpPT57XG5hc3NlcnRLZXkobGVmdCk7XG5hc3NlcnRLZXkocmlnaHQpO1xuY29uc3QgbGVmdFN0eWxlPXBhc3NTdHlsZU9mKGxlZnQpO1xuY29uc3QgcmlnaHRTdHlsZT1wYXNzU3R5bGVPZihyaWdodCk7XG5pZihsZWZ0U3R5bGUhPT1yaWdodFN0eWxlKXtcbi8vXG5yZXR1cm4gTmFOO1xuIH1cbnN3aXRjaChsZWZ0U3R5bGUpe1xuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ2JpZ2ludCc6XG5jYXNlJ3N0cmluZyc6XG5jYXNlJ3N5bWJvbCc6e1xuLy9cbnJldHVybiBjb21wYXJlUmFuayhsZWZ0LHJpZ2h0KTtcbiB9XG5jYXNlJ251bWJlcic6e1xuY29uc3QgcmFua0NvbXA9Y29tcGFyZVJhbmsobGVmdCxyaWdodCk7XG5pZihyYW5rQ29tcD09PTApe1xucmV0dXJuIDA7XG4gfVxuaWYoTnVtYmVyLmlzTmFOKGxlZnQpfHxOdW1iZXIuaXNOYU4ocmlnaHQpKXtcbi8vXG5hc3NlcnQoIU51bWJlci5pc05hTihsZWZ0KXx8IU51bWJlci5pc05hTihyaWdodCkpO1xucmV0dXJuIE5hTjtcbiB9XG4vL1xuLy9cbnJldHVybiByYW5rQ29tcDtcbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xuaWYobGVmdD09PXJpZ2h0KXtcbnJldHVybiAwO1xuIH1cbi8vXG4vL1xucmV0dXJuIE5hTjtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBsZW49TWF0aC5taW4obGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xuLy9cbmNvbnN0IHJlc3VsdD1jb21wYXJlS2V5cyhsZWZ0W2ldLHJpZ2h0W2ldKTtcbmlmKHJlc3VsdCE9PTApe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuLy9cbi8vXG4vL1xucmV0dXJuIGNvbXBhcmVSYW5rKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbmNvbnN0IGxlZnROYW1lcz1yZWNvcmROYW1lcyhsZWZ0KTtcbi8vXG5jb25zdCByaWdodE5hbWVzPXJlY29yZE5hbWVzKHJpZ2h0KTtcblxuLy9cbmlmKCFrZXlFUShsZWZ0TmFtZXMscmlnaHROYW1lcykpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gTmFOO1xuIH1cbi8vXG5jb25zdCBsZWZ0VmFsdWVzPXJlY29yZFZhbHVlcyhsZWZ0LGxlZnROYW1lcyk7XG4vL1xuY29uc3QgcmlnaHRWYWx1ZXM9cmVjb3JkVmFsdWVzKHJpZ2h0LHJpZ2h0TmFtZXMpO1xuLy9cbi8vXG5sZXQgcmVzdWx0PTA7XG5mb3IobGV0IGk9MDtpPGxlZnRWYWx1ZXMubGVuZ3RoO2krPTEpe1xuY29uc3QgY29tcD1jb21wYXJlS2V5cyhsZWZ0VmFsdWVzW2ldLHJpZ2h0VmFsdWVzW2ldKTtcbmlmKE51bWJlci5pc05hTihjb21wKSl7XG5yZXR1cm4gTmFOO1xuIH1cbmlmKHJlc3VsdCE9PWNvbXAmJmNvbXAhPT0wKXtcbmlmKHJlc3VsdD09PTApe1xucmVzdWx0PWNvbXA7XG4gfWVsc2V7XG5hc3NlcnQoXG5yZXN1bHQ9PT0tMSYmY29tcD09PTF8fHJlc3VsdD09PTEmJmNvbXA9PT0tMSk7XG5cbnJldHVybiBOYU47XG4gfVxuIH1cbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIHJlc3VsdDtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuLy9cbmNvbnN0IGxlZnRUYWc9Z2V0VGFnKGxlZnQpO1xuLy9cbmNvbnN0IHJpZ2h0VGFnPWdldFRhZyhyaWdodCk7XG5pZihsZWZ0VGFnIT09cmlnaHRUYWcpe1xuLy9cbnJldHVybiBOYU47XG4gfVxuc3dpdGNoKGxlZnRUYWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG4vL1xucmV0dXJuIHNldENvbXBhcmUobGVmdCxyaWdodCk7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG4vL1xucmV0dXJuIGJhZ0NvbXBhcmUobGVmdCxyaWdodCk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG4vL1xuLy9cbnRocm93IEZhaWwgYE1hcCBjb21wYXJpc29uIG5vdCB5ZXQgaW1wbGVtZW50ZWQ6ICR7bGVmdH0gdnMgJHtyaWdodH1gO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgdW5leHBlY3RlZCB0YWcgJHtxKGxlZnRUYWcpfTogJHtsZWZ0fWA7XG4gfX1cblxuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgdW5leHBlY3RlZCBwYXNzU3R5bGUgJHtxKGxlZnRTdHlsZSl9OiAke2xlZnR9YDtcbiB9fVxuXG4gfTskaM2PX29uY2UuY29tcGFyZUtleXMoY29tcGFyZUtleXMpO1xuaGFyZGVuKGNvbXBhcmVLZXlzKTtcblxuY29uc3QgICAgICAgIGtleUxUPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk8MDskaM2PX29uY2Uua2V5TFQoa2V5TFQpO1xuaGFyZGVuKGtleUxUKTtcblxuY29uc3QgICAgICAgIGtleUxURT0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPD0wOyRozY9fb25jZS5rZXlMVEUoa2V5TFRFKTtcbmhhcmRlbihrZXlMVEUpO1xuXG5jb25zdCAgICAgICAga2V5RVE9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KT09PTA7JGjNj19vbmNlLmtleUVRKGtleUVRKTtcbmhhcmRlbihrZXlFUSk7XG5cbmNvbnN0ICAgICAgICBrZXlHVEU9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KT49MDskaM2PX29uY2Uua2V5R1RFKGtleUdURSk7XG5oYXJkZW4oa2V5R1RFKTtcblxuY29uc3QgICAgICAgIGtleUdUPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk+MDskaM2PX29uY2Uua2V5R1Qoa2V5R1QpO1xuaGFyZGVuKGtleUdUKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InNldENvbXBhcmUiOlsic2V0Q29tcGFyZSJdLCJiYWdDb21wYXJlIjpbImJhZ0NvbXBhcmUiXSwiY29tcGFyZUtleXMiOlsiY29tcGFyZUtleXMiXSwia2V5TFQiOlsia2V5TFQiXSwia2V5TFRFIjpbImtleUxURSJdLCJrZXlFUSI6WyJrZXlFUSJdLCJrZXlHVEUiOlsia2V5R1RFIl0sImtleUdUIjpbImtleUdUIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEybZhbHDQAAxw0AACkAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY29weUJhZy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiYXNzZXJ0QmFnRW50cmllcyIsImFzc2VydE5vRHVwbGljYXRlS2V5cyIsImNoZWNrQmFnRW50cmllcyIsImNvZXJjZVRvQmFnRW50cmllcyIsIm1ha2VCYWdPZkVudHJpZXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGNvbXBhcmVBbnRpUmFuayxpc1JhbmtTb3J0ZWQsbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcImlzUmFua1NvcnRlZFwiLCBbJGjNj19hID0+IChpc1JhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaM2PX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjNj19hID0+IChzb3J0QnlSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrTm9EdXBsaWNhdGVLZXlzPShiYWdFbnRyaWVzLGZ1bGxDb21wYXJlLGNoZWNrKT0+e1xuLy9cbi8vXG4vL1xuLy9cbmZ1bGxDb21wYXJlPWZ1bGxDb21wYXJlfHxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG4vL1xuLy9cbi8vXG5iYWdFbnRyaWVzPXNvcnRCeVJhbmsoYmFnRW50cmllcyxmdWxsQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWJhZ0VudHJpZXM7XG5mb3IobGV0IGk9MTtpPGxlbmd0aDtpKz0xKXtcbmNvbnN0IGswPWJhZ0VudHJpZXNbaS0xXVswXTtcbmNvbnN0IGsxPWJhZ0VudHJpZXNbaV1bMF07XG5pZihmdWxsQ29tcGFyZShrMCxrMSk9PT0wKXtcbnJldHVybiBjaGVjayhmYWxzZSxYIGB2YWx1ZSBoYXMgZHVwbGljYXRlIGtleXM6ICR7azB9YCk7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydE5vRHVwbGljYXRlS2V5cz0oYmFnRW50cmllcyxmdWxsQ29tcGFyZT11bmRlZmluZWQpPT57XG5jaGVja05vRHVwbGljYXRlS2V5cyhiYWdFbnRyaWVzLGZ1bGxDb21wYXJlLGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKGFzc2VydE5vRHVwbGljYXRlS2V5cyk7XG5jb25zdCAgICAgICAgY2hlY2tCYWdFbnRyaWVzPShiYWdFbnRyaWVzLGNoZWNrKT0+e1xuaWYocGFzc1N0eWxlT2YoYmFnRW50cmllcykhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBlbnRyaWVzIG9mIGEgY29weUJhZyBtdXN0IGJlIGEgY29weUFycmF5OiAke2JhZ0VudHJpZXN9YCk7XG5cbiB9XG5pZighaXNSYW5rU29ydGVkKGJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rKSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBlbnRyaWVzIG9mIGEgY29weUJhZyBtdXN0IGJlIHNvcnRlZCBpbiByZXZlcnNlIHJhbmsgb3JkZXI6ICR7YmFnRW50cmllc31gKTtcblxuIH1cbmZvcihjb25zdCBlbnRyeSBvZiBiYWdFbnRyaWVzKXtcbmlmKFxucGFzc1N0eWxlT2YoZW50cnkpIT09J2NvcHlBcnJheSd8fFxuZW50cnkubGVuZ3RoIT09Mnx8XG50eXBlb2YgZW50cnlbMV0hPT0nYmlnaW50JylcbntcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgRWFjaCBlbnRyeSBvZiBhIGNvcHlCYWcgbXVzdCBiZSBwYWlyIG9mIGEga2V5IGFuZCBhIGJpZ2ludCByZXByZXNlbnRpbmcgYSBjb3VudDogJHtlbnRyeX1gKTtcblxuIH1cbmlmKGVudHJ5WzFdPDEpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBFYWNoIGVudHJ5IG9mIGEgY29weUJhZyBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBjb3VudDogJHtlbnRyeX1gKTtcblxuIH1cbiB9XG4vL1xucmV0dXJuIGNoZWNrTm9EdXBsaWNhdGVLZXlzKGJhZ0VudHJpZXMsdW5kZWZpbmVkLGNoZWNrKTtcbiB9OyRozY9fb25jZS5jaGVja0JhZ0VudHJpZXMoY2hlY2tCYWdFbnRyaWVzKTtcbmhhcmRlbihjaGVja0JhZ0VudHJpZXMpO1xuXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRCYWdFbnRyaWVzPShiYWdFbnRyaWVzKT0+e1xuY2hlY2tCYWdFbnRyaWVzKGJhZ0VudHJpZXMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0QmFnRW50cmllcyhhc3NlcnRCYWdFbnRyaWVzKTtcbmhhcmRlbihhc3NlcnRCYWdFbnRyaWVzKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBjb2VyY2VUb0JhZ0VudHJpZXM9KGJhZ0VudHJpZXNMaXN0KT0+e1xuY29uc3QgYmFnRW50cmllcz1zb3J0QnlSYW5rKGJhZ0VudHJpZXNMaXN0LGNvbXBhcmVBbnRpUmFuayk7XG5hc3NlcnRCYWdFbnRyaWVzKGJhZ0VudHJpZXMpO1xucmV0dXJuIGJhZ0VudHJpZXM7XG4gfTskaM2PX29uY2UuY29lcmNlVG9CYWdFbnRyaWVzKGNvZXJjZVRvQmFnRW50cmllcyk7XG5oYXJkZW4oY29lcmNlVG9CYWdFbnRyaWVzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VCYWdPZkVudHJpZXM9KGJhZ0VudHJ5SXRlcik9PlxubWFrZVRhZ2dlZCgnY29weUJhZycsY29lcmNlVG9CYWdFbnRyaWVzKGJhZ0VudHJ5SXRlcikpOyRozY9fb25jZS5tYWtlQmFnT2ZFbnRyaWVzKG1ha2VCYWdPZkVudHJpZXMpO1xuaGFyZGVuKG1ha2VCYWdPZkVudHJpZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzIjpbImFzc2VydE5vRHVwbGljYXRlS2V5cyJdLCJjaGVja0JhZ0VudHJpZXMiOlsiY2hlY2tCYWdFbnRyaWVzIl0sImFzc2VydEJhZ0VudHJpZXMiOlsiYXNzZXJ0QmFnRW50cmllcyJdLCJjb2VyY2VUb0JhZ0VudHJpZXMiOlsiY29lcmNlVG9CYWdFbnRyaWVzIl0sIm1ha2VCYWdPZkVudHJpZXMiOlsibWFrZUJhZ09mRW50cmllcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAApnmdszgsAAM4LAAApAAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2NvcHlTZXQuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydEVsZW1lbnRzIiwiYXNzZXJ0Tm9EdXBsaWNhdGVzIiwiY2hlY2tFbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiLCJtYWtlU2V0T2ZFbGVtZW50cyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsY29tcGFyZUFudGlSYW5rLGlzUmFua1NvcnRlZCxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLFg7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaM2PX2EpXV0sW1wiaXNSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGlzUmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tOb0R1cGxpY2F0ZXM9KGVsZW1lbnRzLGZ1bGxDb21wYXJlLGNoZWNrKT0+e1xuLy9cbi8vXG4vL1xuLy9cbmZ1bGxDb21wYXJlPWZ1bGxDb21wYXJlfHxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG5lbGVtZW50cz1zb3J0QnlSYW5rKGVsZW1lbnRzLGZ1bGxDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09ZWxlbWVudHM7XG5mb3IobGV0IGk9MTtpPGxlbmd0aDtpKz0xKXtcbmNvbnN0IGswPWVsZW1lbnRzW2ktMV07XG5jb25zdCBrMT1lbGVtZW50c1tpXTtcbmlmKGZ1bGxDb21wYXJlKGswLGsxKT09PTApe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYHZhbHVlIGhhcyBkdXBsaWNhdGUga2V5czogJHtrMH1gKTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGVzPShlbGVtZW50cyxmdWxsQ29tcGFyZT11bmRlZmluZWQpPT57XG5jaGVja05vRHVwbGljYXRlcyhlbGVtZW50cyxmdWxsQ29tcGFyZSxhc3NlcnRDaGVja2VyKTtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmFzc2VydE5vRHVwbGljYXRlcyhhc3NlcnROb0R1cGxpY2F0ZXMpO1xuY29uc3QgICAgICAgIGNoZWNrRWxlbWVudHM9KGVsZW1lbnRzLGNoZWNrKT0+e1xuaWYocGFzc1N0eWxlT2YoZWxlbWVudHMpIT09J2NvcHlBcnJheScpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBUaGUga2V5cyBvZiBhIGNvcHlTZXQgb3IgY29weU1hcCBtdXN0IGJlIGEgY29weUFycmF5OiAke2VsZW1lbnRzfWApO1xuXG4gfVxuaWYoIWlzUmFua1NvcnRlZChlbGVtZW50cyxjb21wYXJlQW50aVJhbmspKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGtleXMgb2YgYSBjb3B5U2V0IG9yIGNvcHlNYXAgbXVzdCBiZSBzb3J0ZWQgaW4gcmV2ZXJzZSByYW5rIG9yZGVyOiAke2VsZW1lbnRzfWApO1xuXG4gfVxucmV0dXJuIGNoZWNrTm9EdXBsaWNhdGVzKGVsZW1lbnRzLHVuZGVmaW5lZCxjaGVjayk7XG4gfTskaM2PX29uY2UuY2hlY2tFbGVtZW50cyhjaGVja0VsZW1lbnRzKTtcbmhhcmRlbihjaGVja0VsZW1lbnRzKTtcblxuY29uc3QgICAgICAgIGFzc2VydEVsZW1lbnRzPShlbGVtZW50cyk9PntcbmNoZWNrRWxlbWVudHMoZWxlbWVudHMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0RWxlbWVudHMoYXNzZXJ0RWxlbWVudHMpO1xuaGFyZGVuKGFzc2VydEVsZW1lbnRzKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBjb2VyY2VUb0VsZW1lbnRzPShlbGVtZW50c0xpc3QpPT57XG5jb25zdCBlbGVtZW50cz1zb3J0QnlSYW5rKGVsZW1lbnRzTGlzdCxjb21wYXJlQW50aVJhbmspO1xuYXNzZXJ0RWxlbWVudHMoZWxlbWVudHMpO1xucmV0dXJuIGVsZW1lbnRzO1xuIH07JGjNj19vbmNlLmNvZXJjZVRvRWxlbWVudHMoY29lcmNlVG9FbGVtZW50cyk7XG5oYXJkZW4oY29lcmNlVG9FbGVtZW50cyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU2V0T2ZFbGVtZW50cz0oZWxlbWVudEl0ZXIpPT5cbm1ha2VUYWdnZWQoJ2NvcHlTZXQnLGNvZXJjZVRvRWxlbWVudHMoZWxlbWVudEl0ZXIpKTskaM2PX29uY2UubWFrZVNldE9mRWxlbWVudHMobWFrZVNldE9mRWxlbWVudHMpO1xuaGFyZGVuKG1ha2VTZXRPZkVsZW1lbnRzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzc2VydE5vRHVwbGljYXRlcyI6WyJhc3NlcnROb0R1cGxpY2F0ZXMiXSwiY2hlY2tFbGVtZW50cyI6WyJjaGVja0VsZW1lbnRzIl0sImFzc2VydEVsZW1lbnRzIjpbImFzc2VydEVsZW1lbnRzIl0sImNvZXJjZVRvRWxlbWVudHMiOlsiY29lcmNlVG9FbGVtZW50cyJdLCJtYWtlU2V0T2ZFbGVtZW50cyI6WyJtYWtlU2V0T2ZFbGVtZW50cyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABNkSIn4BIAAOASAAA5AAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyIsIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMiLCJtYWtlQ29tcGFyZUNvbGxlY3Rpb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UmFua1NvcnRlZCxjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxtYWtlSXRlcmF0b3IsbWFrZUFycmF5SXRlcmF0b3IscSxGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0UmFua1NvcnRlZFwiLCBbJGjNj19hID0+IChhc3NlcnRSYW5rU29ydGVkID0gJGjNj19hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaM2PX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaM2PX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjNj19hID0+IChzb3J0QnlSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanNcIiwgW1tcIm1ha2VJdGVyYXRvclwiLCBbJGjNj19hID0+IChtYWtlSXRlcmF0b3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qc1wiLCBbW1wibWFrZUFycmF5SXRlcmF0b3JcIiwgWyRozY9fYSA9PiAobWFrZUFycmF5SXRlcmF0b3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBnZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzPShlbnRyaWVzLHJhbmtDb21wYXJlLGZ1bGxDb21wYXJlKT0+e1xuLy9cbmFzc2VydFJhbmtTb3J0ZWQoZW50cmllcyxyYW5rQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWVudHJpZXM7XG5sZXQgaT0wO1xubGV0IHNhbWVSYW5rSXRlcmF0b3I7XG5yZXR1cm4gbWFrZUl0ZXJhdG9yKCgpPT57XG5pZihzYW1lUmFua0l0ZXJhdG9yKXtcbmNvbnN0IHJlc3VsdD1zYW1lUmFua0l0ZXJhdG9yLm5leHQoKTtcbmlmKCFyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbnNhbWVSYW5rSXRlcmF0b3I9dW5kZWZpbmVkO1xuIH1cbmlmKGk8bGVuZ3RoKXtcbmNvbnN0IGVudHJ5PWVudHJpZXNbaV07XG4vL1xubGV0IGo9aSsxO1xud2hpbGUoajxsZW5ndGgmJnJhbmtDb21wYXJlKGVudHJ5WzBdLGVudHJpZXNbal1bMF0pPT09MCl7XG5qKz0xO1xuIH1cbmlmKGo9PT1pKzEpe1xuLy9cbmk9ajtcbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6ZW50cnl9KTtcbiB9XG5jb25zdCB0aWVzPWVudHJpZXMuc2xpY2UoaSxqKTtcbmk9ajtcblxuLy9cbi8vXG4vL1xuY29uc3Qgc29ydGVkVGllcz1zb3J0QnlSYW5rKHRpZXMsZnVsbENvbXBhcmUpO1xuZm9yKGxldCBrPTE7azxzb3J0ZWRUaWVzLmxlbmd0aDtrKz0xKXtcbi8vXG5jb25zdFtrZXkwXT1zb3J0ZWRUaWVzW2stMV07XG5jb25zdFtrZXkxXT1zb3J0ZWRUaWVzW2tdO1xuTWF0aC5zaWduKGZ1bGxDb21wYXJlKGtleTAsa2V5MSkpfHxcbkZhaWwgYER1cGxpY2F0ZSBlbnRyeSBrZXk6ICR7a2V5MH1gO1xuIH1cbnNhbWVSYW5rSXRlcmF0b3I9bWFrZUFycmF5SXRlcmF0b3Ioc29ydGVkVGllcyk7XG5yZXR1cm4gc2FtZVJhbmtJdGVyYXRvci5uZXh0KCk7XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuIH0pO1xuIH07XG5oYXJkZW4oZ2VuZXJhdGVGdWxsU29ydGVkRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcz0oXG5jMSxcbmMyLFxuZ2V0RW50cmllcyxcbmFic2VudFZhbHVlKT0+XG57XG5jb25zdCBlMT1nZXRFbnRyaWVzKGMxKTtcbmNvbnN0IGUyPWdldEVudHJpZXMoYzIpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBmdWxsQ29tcGFyZT1tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuY29uc3QgeD1nZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzKGUxLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5jb25zdCB5PWdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXMoZTIsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcblxuLy9cbi8vXG5sZXQgeERvbmU7XG5sZXQgeEtleTtcbmxldCB4VmFsdWU7XG5sZXQgeURvbmU7XG5sZXQgeUtleTtcbmxldCB5VmFsdWU7XG5jb25zdCBub25FbnRyeT1bdW5kZWZpbmVkLHVuZGVmaW5lZF07XG5jb25zdCBuZXh0WD0oKT0+e1xuIXhEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFggbXVzdCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG5jb25zdCByZXN1bHQ9eFZhbHVlO1xuKHtkb25lOnhEb25lLHZhbHVlOlt4S2V5LHhWYWx1ZV09bm9uRW50cnl9PXgubmV4dCgpKTtcbnJldHVybiByZXN1bHQ7XG4gfTtcbm5leHRYKCk7XG5jb25zdCBuZXh0WT0oKT0+e1xuIXlEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFkgbXVzdCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG5jb25zdCByZXN1bHQ9eVZhbHVlO1xuKHtkb25lOnlEb25lLHZhbHVlOlt5S2V5LHlWYWx1ZV09bm9uRW50cnl9PXkubmV4dCgpKTtcbnJldHVybiByZXN1bHQ7XG4gfTtcbm5leHRZKCk7XG5yZXR1cm4gbWFrZUl0ZXJhdG9yKCgpPT57XG5sZXQgZG9uZT1mYWxzZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoeERvbmUmJnlEb25lKXtcbmRvbmU9dHJ1ZTtcbnZhbHVlPVt1bmRlZmluZWQsYWJzZW50VmFsdWUsYWJzZW50VmFsdWVdO1xuIH1lbHNlIGlmKHhEb25lKXtcbnZhbHVlPVt5S2V5LGFic2VudFZhbHVlLG5leHRZKCldO1xuIH1lbHNlIGlmKHlEb25lKXtcbnZhbHVlPVt4S2V5LG5leHRYKCksYWJzZW50VmFsdWVdO1xuIH1lbHNle1xuLy9cbi8vXG5jb25zdCBjb21wPWZ1bGxDb21wYXJlKHhLZXkseUtleSk7XG5pZihjb21wPT09MCl7XG52YWx1ZT1beEtleSxuZXh0WCgpLG5leHRZKCldO1xuIH1lbHNlIGlmKGNvbXA8MCl7XG52YWx1ZT1beEtleSxuZXh0WCgpLGFic2VudFZhbHVlXTtcbiB9ZWxzZSBpZihjb21wPjApe1xudmFsdWU9W3lLZXksYWJzZW50VmFsdWUsbmV4dFkoKV07XG4gfWVsc2V7XG50aHJvdyBGYWlsIGBVbmV4cGVjdGVkIGtleSBjb21wYXJpc29uICR7cShjb21wKX0gZm9yICR7eEtleX0gdnMgJHt5S2V5fWA7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2RvbmUsdmFsdWV9KTtcbiB9KTtcbiB9OyRozY9fb25jZS5nZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyhnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyk7XG5oYXJkZW4oZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb21wYXJlQ29sbGVjdGlvbj0oZ2V0RW50cmllcyxhYnNlbnRWYWx1ZSxjb21wYXJlVmFsdWVzKT0+XG5oYXJkZW4oKGxlZnQscmlnaHQpPT57XG5jb25zdCBtZXJnZWQ9Z2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMoXG5sZWZ0LFxucmlnaHQsXG5nZXRFbnRyaWVzLFxuYWJzZW50VmFsdWUpO1xuXG5sZXQgbGVmdElzQmlnZ2VyPWZhbHNlO1xubGV0IHJpZ2h0SXNCaWdnZXI9ZmFsc2U7XG5mb3IoY29uc3RbX2tleSxsZWZ0VmFsdWUscmlnaHRWYWx1ZV1vZiBtZXJnZWQpe1xuY29uc3QgY29tcD1jb21wYXJlVmFsdWVzKGxlZnRWYWx1ZSxyaWdodFZhbHVlKTtcbmlmKGNvbXA9PT0wKXtcbi8vXG5jb250aW51ZTtcbiB9ZWxzZSBpZihjb21wPDApe1xuLy9cbnJpZ2h0SXNCaWdnZXI9dHJ1ZTtcbiB9ZWxzZSBpZihjb21wPjApe1xuLy9cbmxlZnRJc0JpZ2dlcj10cnVlO1xuIH1lbHNle1xuTnVtYmVyLmlzTmFOKGNvbXApfHxcbi8vXG5GYWlsIGBVbmV4cGVjdGVkIHZhbHVlIGNvbXBhcmlzb24gJHtxKGNvbXApfSBmb3IgJHtsZWZ0VmFsdWV9IHZzICR7cmlnaHRWYWx1ZX1gO1xucmV0dXJuIE5hTjtcbiB9XG5pZihsZWZ0SXNCaWdnZXImJnJpZ2h0SXNCaWdnZXIpe1xucmV0dXJuIE5hTjtcbiB9XG4gfVxuLy9cbnJldHVybiBsZWZ0SXNCaWdnZXI/MTpyaWdodElzQmlnZ2VyPy0xOjA7XG4gfSk7JGjNj19vbmNlLm1ha2VDb21wYXJlQ29sbGVjdGlvbihtYWtlQ29tcGFyZUNvbGxlY3Rpb24pO1xuaGFyZGVuKG1ha2VDb21wYXJlQ29sbGVjdGlvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyI6WyJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyJdLCJtYWtlQ29tcGFyZUNvbGxlY3Rpb24iOlsibWFrZUNvbXBhcmVDb2xsZWN0aW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFs61ctSFgAAUhYAADUAAABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vZXJyb3JzIiwiLi9jb3B5QmFnLmpzIl0sImV4cG9ydHMiOlsiYmFnRGlzam9pbnRTdWJ0cmFjdCIsImJhZ0ludGVyc2VjdGlvbiIsImJhZ0lzRGlzam9pbnQiLCJiYWdJc1N1cGVyYmFnIiwiYmFnVW5pb24iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UmFua1NvcnRlZCxjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxxLEZhaWwsYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzLG1ha2VCYWdPZkVudHJpZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlCYWcuanNcIiwgW1tcImFzc2VydE5vRHVwbGljYXRlS2V5c1wiLCBbJGjNj19hID0+IChhc3NlcnROb0R1cGxpY2F0ZUtleXMgPSAkaM2PX2EpXV0sW1wibWFrZUJhZ09mRW50cmllc1wiLCBbJGjNj19hID0+IChtYWtlQmFnT2ZFbnRyaWVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBiYWdXaW5kb3dSZXNvcnQ9KGJhZ0VudHJpZXMscmFua0NvbXBhcmUsZnVsbENvbXBhcmUpPT57XG5hc3NlcnRSYW5rU29ydGVkKGJhZ0VudHJpZXMscmFua0NvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1iYWdFbnRyaWVzO1xubGV0IGk9MDtcbmxldCBvcHRJbm5lckl0ZXJhdG9yO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+XG5oYXJkZW4oe1xubmV4dDooKT0+e1xuaWYob3B0SW5uZXJJdGVyYXRvcil7XG5jb25zdCByZXN1bHQ9b3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG5pZihyZXN1bHQuZG9uZSl7XG5vcHRJbm5lckl0ZXJhdG9yPXVuZGVmaW5lZDtcbi8vXG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5pZihpPGxlbmd0aCl7XG5jb25zdCBlbnRyeT1iYWdFbnRyaWVzW2ldO1xubGV0IGo9aSsxO1xud2hpbGUoXG5qPGxlbmd0aCYmXG5yYW5rQ29tcGFyZShlbnRyeVswXSxiYWdFbnRyaWVzW2pdWzBdKT09PTApXG57XG5qKz0xO1xuIH1cbmlmKGo9PT1pKzEpe1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTplbnRyeX0pO1xuIH1cbmNvbnN0IHNpbWlsYXJSdW49YmFnRW50cmllcy5zbGljZShpLGopO1xuaT1qO1xuY29uc3QgcmVzb3J0ZWQ9c29ydEJ5UmFuayhzaW1pbGFyUnVuLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbmFzc2VydE5vRHVwbGljYXRlS2V5cyhyZXNvcnRlZCxmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbm9wdElubmVySXRlcmF0b3I9cmVzb3J0ZWRbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIG9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOltudWxsLDBuXX0pO1xuIH1cbiB9fSl9KTtcblxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1lcmdlPSh4YmFnRW50cmllcyx5YmFnRW50cmllcyk9Pntcbi8vXG4vL1xuY29uc3QgZnVsbENvbXBhcmU9bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcblxuY29uc3QgeHM9YmFnV2luZG93UmVzb3J0KHhiYWdFbnRyaWVzLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5jb25zdCB5cz1iYWdXaW5kb3dSZXNvcnQoeWJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9Pntcbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgKi9cbmxldCB4O1xubGV0IHhjO1xubGV0IHhEb25lO1xuLyogICAgICAgICAgICAqL1xubGV0IHk7XG5sZXQgeWM7XG5sZXQgeURvbmU7XG5cbmNvbnN0IHhpPXhzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtcbmRvbmU6eERvbmUsXG52YWx1ZTpbeCx4Y119PVxueGkubmV4dCgpKTtcbiB9O1xubmV4dFgoKTtcblxuY29uc3QgeWk9eXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFk9KCk9PntcbiF5RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRZIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe1xuZG9uZTp5RG9uZSxcbnZhbHVlOlt5LHljXX09XG55aS5uZXh0KCkpO1xuIH07XG5uZXh0WSgpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbm5leHQ6KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgKi9cbmxldCBkb25lPWZhbHNlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB2YWx1ZTtcbmlmKHhEb25lJiZ5RG9uZSl7XG5kb25lPXRydWU7XG4vL1xudmFsdWU9W251bGwsMG4sMG5dO1xuIH1lbHNlIGlmKHhEb25lKXtcbi8vXG52YWx1ZT1beSwwbix5Y107XG5uZXh0WSgpO1xuIH1lbHNlIGlmKHlEb25lKXtcbi8vXG52YWx1ZT1beCx4Yywwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuY29uc3QgY29tcD1mdWxsQ29tcGFyZSh4LHkpO1xuaWYoY29tcD09PTApe1xuLy9cbnZhbHVlPVt4LHhjLHljXTtcbm5leHRYKCk7XG5uZXh0WSgpO1xuIH1lbHNlIGlmKGNvbXA8MCl7XG4vL1xudmFsdWU9W3gseGMsMG5dO1xubmV4dFgoKTtcbiB9ZWxzZXtcbi8vXG5jb21wPjB8fEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGNvbXAgJHtxKGNvbXApfWA7XG52YWx1ZT1beSwwbix5Y107XG5uZXh0WSgpO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lLHZhbHVlfSk7XG4gfX0pO1xuXG4gfX0pO1xuXG4gfTtcbmhhcmRlbihtZXJnZSk7XG5cbi8vXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlcklzU3VwZXJiYWc9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM8eWMpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLy9cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVySXNEaXNqb2ludD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MW4mJnljPj0xbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVyVW5pb249KHh5aSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnJlc3VsdC5wdXNoKFttLHhjK3ljXSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVySW50ZXJzZWN0aW9uPSh4eWkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5jb25zdCBtYz14Yzw9eWM/eGM6eWM7XG5yZXN1bHQucHVzaChbbSxtY10pO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlckRpc2pvaW50U3VidHJhY3Q9KHh5aSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmNvbnN0IG1jPXhjLXljO1xubWM+PTBufHxGYWlsIGByaWdodCBlbGVtZW50ICR7bX0gd2FzIG5vdCBpbiBsZWZ0YDtcbmlmKG1jPj0xbil7XG4vL1xucmVzdWx0LnB1c2goW20sbWNdKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG5jb25zdCBtZXJnZWlmeT0oYmFnSXRlck9wKT0+KHhiYWdFbnRyaWVzLHliYWdFbnRyaWVzKT0+XG5iYWdJdGVyT3AobWVyZ2UoeGJhZ0VudHJpZXMseWJhZ0VudHJpZXMpKTtcblxuY29uc3QgYmFnRW50cmllc0lzU3VwZXJiYWc9bWVyZ2VpZnkoYmFnSXRlcklzU3VwZXJiYWcpO1xuY29uc3QgYmFnRW50cmllc0lzRGlzam9pbnQ9bWVyZ2VpZnkoYmFnSXRlcklzRGlzam9pbnQpO1xuY29uc3QgYmFnRW50cmllc1VuaW9uPW1lcmdlaWZ5KGJhZ0l0ZXJVbmlvbik7XG5jb25zdCBiYWdFbnRyaWVzSW50ZXJzZWN0aW9uPW1lcmdlaWZ5KGJhZ0l0ZXJJbnRlcnNlY3Rpb24pO1xuY29uc3QgYmFnRW50cmllc0Rpc2pvaW50U3VidHJhY3Q9bWVyZ2VpZnkoYmFnSXRlckRpc2pvaW50U3VidHJhY3QpO1xuXG5jb25zdCByYXdCYWdpZnk9KGJhZ0VudHJpZXNPcCk9Pih4YmFnLHliYWcpPT5cbmJhZ0VudHJpZXNPcCh4YmFnLnBheWxvYWQseWJhZy5wYXlsb2FkKTtcblxuY29uc3QgYmFnaWZ5PShiYWdFbnRyaWVzT3ApPT4oeGJhZyx5YmFnKT0+XG5tYWtlQmFnT2ZFbnRyaWVzKGJhZ0VudHJpZXNPcCh4YmFnLnBheWxvYWQseWJhZy5wYXlsb2FkKSk7XG5cbmNvbnN0ICAgICAgICBiYWdJc1N1cGVyYmFnPXJhd0JhZ2lmeShiYWdFbnRyaWVzSXNTdXBlcmJhZyk7JGjNj19vbmNlLmJhZ0lzU3VwZXJiYWcoYmFnSXNTdXBlcmJhZyk7XG5jb25zdCAgICAgICAgYmFnSXNEaXNqb2ludD1yYXdCYWdpZnkoYmFnRW50cmllc0lzRGlzam9pbnQpOyRozY9fb25jZS5iYWdJc0Rpc2pvaW50KGJhZ0lzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIGJhZ1VuaW9uPWJhZ2lmeShiYWdFbnRyaWVzVW5pb24pOyRozY9fb25jZS5iYWdVbmlvbihiYWdVbmlvbik7XG5jb25zdCAgICAgICAgYmFnSW50ZXJzZWN0aW9uPWJhZ2lmeShiYWdFbnRyaWVzSW50ZXJzZWN0aW9uKTskaM2PX29uY2UuYmFnSW50ZXJzZWN0aW9uKGJhZ0ludGVyc2VjdGlvbik7XG5jb25zdCAgICAgICAgYmFnRGlzam9pbnRTdWJ0cmFjdD1iYWdpZnkoYmFnRW50cmllc0Rpc2pvaW50U3VidHJhY3QpOyRozY9fb25jZS5iYWdEaXNqb2ludFN1YnRyYWN0KGJhZ0Rpc2pvaW50U3VidHJhY3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYmFnSXNTdXBlcmJhZyI6WyJiYWdJc1N1cGVyYmFnIl0sImJhZ0lzRGlzam9pbnQiOlsiYmFnSXNEaXNqb2ludCJdLCJiYWdVbmlvbiI6WyJiYWdVbmlvbiJdLCJiYWdJbnRlcnNlY3Rpb24iOlsiYmFnSW50ZXJzZWN0aW9uIl0sImJhZ0Rpc2pvaW50U3VidHJhY3QiOlsiYmFnRGlzam9pbnRTdWJ0cmFjdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB9YIszixwAAIscAAA1AAAAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyIsIi4vY29weVNldC5qcyJdLCJleHBvcnRzIjpbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNVbmlvbiIsInNldERpc2pvaW50U3VidHJhY3QiLCJzZXREaXNqb2ludFVuaW9uIiwic2V0SW50ZXJzZWN0aW9uIiwic2V0SXNEaXNqb2ludCIsInNldElzU3VwZXJzZXQiLCJzZXRVbmlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRSYW5rU29ydGVkLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLHEsRmFpbCxhc3NlcnROb0R1cGxpY2F0ZXMsbWFrZVNldE9mRWxlbWVudHM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlTZXQuanNcIiwgW1tcImFzc2VydE5vRHVwbGljYXRlc1wiLCBbJGjNj19hID0+IChhc3NlcnROb0R1cGxpY2F0ZXMgPSAkaM2PX2EpXV0sW1wibWFrZVNldE9mRWxlbWVudHNcIiwgWyRozY9fYSA9PiAobWFrZVNldE9mRWxlbWVudHMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgd2luZG93UmVzb3J0PShlbGVtZW50cyxyYW5rQ29tcGFyZSxmdWxsQ29tcGFyZSk9PntcbmFzc2VydFJhbmtTb3J0ZWQoZWxlbWVudHMscmFua0NvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1lbGVtZW50cztcbmxldCBpPTA7XG5sZXQgb3B0SW5uZXJJdGVyYXRvcjtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PlxuaGFyZGVuKHtcbm5leHQ6KCk9PntcbmlmKG9wdElubmVySXRlcmF0b3Ipe1xuY29uc3QgcmVzdWx0PW9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuaWYocmVzdWx0LmRvbmUpe1xub3B0SW5uZXJJdGVyYXRvcj11bmRlZmluZWQ7XG4vL1xuIH1lbHNle1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuaWYoaTxsZW5ndGgpe1xuY29uc3QgdmFsdWU9ZWxlbWVudHNbaV07XG5sZXQgaj1pKzE7XG53aGlsZShqPGxlbmd0aCYmcmFua0NvbXBhcmUodmFsdWUsZWxlbWVudHNbal0pPT09MCl7XG5qKz0xO1xuIH1cbmlmKGo9PT1pKzEpe1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH1cbmNvbnN0IHNpbWlsYXJSdW49ZWxlbWVudHMuc2xpY2UoaSxqKTtcbmk9ajtcbmNvbnN0IHJlc29ydGVkPXNvcnRCeVJhbmsoc2ltaWxhclJ1bixmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG5hc3NlcnROb0R1cGxpY2F0ZXMocmVzb3J0ZWQsZnVsbENvbXBhcmUpO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5vcHRJbm5lckl0ZXJhdG9yPXJlc29ydGVkW1N5bWJvbC5pdGVyYXRvcl0oKTtcbnJldHVybiBvcHRJbm5lckl0ZXJhdG9yLm5leHQoKTtcbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTpudWxsfSk7XG4gfVxuIH19KX0pO1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWVyZ2U9KHhlbGVtZW50cyx5ZWxlbWVudHMpPT57XG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbmNvbnN0IHhzPXdpbmRvd1Jlc29ydCh4ZWxlbWVudHMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbmNvbnN0IHlzPXdpbmRvd1Jlc29ydCh5ZWxlbWVudHMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9Pntcbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgKi9cbmxldCB4O1xubGV0IHhEb25lO1xuLyogICAgICAgICAgICAqL1xubGV0IHk7XG5sZXQgeURvbmU7XG5cbmNvbnN0IHhpPXhzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtkb25lOnhEb25lLHZhbHVlOnh9PXhpLm5leHQoKSk7XG4gfTtcbm5leHRYKCk7XG5cbmNvbnN0IHlpPXlzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRZPSgpPT57XG4heURvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WSBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtkb25lOnlEb25lLHZhbHVlOnl9PXlpLm5leHQoKSk7XG4gfTtcbm5leHRZKCk7XG5cbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IGRvbmU9ZmFsc2U7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoeERvbmUmJnlEb25lKXtcbmRvbmU9dHJ1ZTtcbi8vXG52YWx1ZT1bbnVsbCwwbiwwbl07XG4gfWVsc2UgaWYoeERvbmUpe1xuLy9cbnZhbHVlPVt5LDBuLDFuXTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoeURvbmUpe1xuLy9cbnZhbHVlPVt4LDFuLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG5jb25zdCBjb21wPWZ1bGxDb21wYXJlKHgseSk7XG5pZihjb21wPT09MCl7XG4vL1xudmFsdWU9W3gsMW4sMW5dO1xubmV4dFgoKTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoY29tcDwwKXtcbi8vXG52YWx1ZT1beCwxbiwwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuLy9cbmNvbXA+MHx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY29tcCAke3EoY29tcCl9YDtcbnZhbHVlPVt5LDBuLDFuXTtcbm5leHRZKCk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2RvbmUsdmFsdWV9KTtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9O1xuaGFyZGVuKG1lcmdlKTtcblxuY29uc3QgaXRlcklzU3VwZXJzZXQ9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4YyxfeWNdb2YgeHlpKXtcbmlmKHhjPT09MG4pe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlcklzRGlzam9pbnQ9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM+PTFuJiZ5Yz49MW4pe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckNvbXBhcmU9KHh5aSk9PntcbmxldCBsb25lWT1mYWxzZTtcbmxldCBsb25lWD1mYWxzZTtcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM9PT0wbil7XG4vL1xubG9uZVk9dHJ1ZTtcbiB9XG5pZih5Yz09PTBuKXtcbi8vXG5sb25lWD10cnVlO1xuIH1cbmlmKGxvbmVYJiZsb25lWSl7XG5yZXR1cm4gTmFOO1xuIH1cbiB9XG5pZihsb25lWCl7XG5yZXR1cm4gMTtcbiB9ZWxzZSBpZihsb25lWSl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbiFsb25lWCYmIWxvbmVZfHxcbkZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGxvbmUgcGFpciAke3EoW2xvbmVYLGxvbmVZXSl9YDtcbnJldHVybiAwO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyVW5pb249KHh5aSk9PntcbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MG4pe1xucmVzdWx0LnB1c2gobSk7XG4gfWVsc2V7XG55Yz49MG58fEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGNvdW50ICR7cSh5Yyl9YDtcbi8vXG4vL1xucmVzdWx0LnB1c2gobSk7XG4gfVxuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckRpc2pvaW50VW5pb249KHh5aSk9PntcbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG54Yz09PTBufHx5Yz09PTBufHxGYWlsIGBTZXRzIG11c3Qgbm90IGhhdmUgY29tbW9uIGVsZW1lbnRzOiAke219YDtcbmlmKHhjPj0xbil7XG5yZXN1bHQucHVzaChtKTtcbiB9ZWxzZXtcbnljPj0xbnx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY291bnQgJHtxKHljKX1gO1xucmVzdWx0LnB1c2gobSk7XG4gfVxuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckludGVyc2VjdGlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0xbiYmeWM+PTFuKXtcbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyRGlzam9pbnRTdWJ0cmFjdD0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnhjPj0xbnx8RmFpbCBgcmlnaHQgZWxlbWVudCAke219IHdhcyBub3QgaW4gbGVmdGA7XG5pZih5Yz09PTBuKXtcbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG5jb25zdCBtZXJnZWlmeT0oaXRlck9wKT0+KHhlbGVtZW50cyx5ZWxlbWVudHMpPT5cbml0ZXJPcChtZXJnZSh4ZWxlbWVudHMseWVsZW1lbnRzKSk7XG5cbmNvbnN0ICAgICAgICBlbGVtZW50c0lzU3VwZXJzZXQ9bWVyZ2VpZnkoaXRlcklzU3VwZXJzZXQpOyRozY9fb25jZS5lbGVtZW50c0lzU3VwZXJzZXQoZWxlbWVudHNJc1N1cGVyc2V0KTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0lzRGlzam9pbnQ9bWVyZ2VpZnkoaXRlcklzRGlzam9pbnQpOyRozY9fb25jZS5lbGVtZW50c0lzRGlzam9pbnQoZWxlbWVudHNJc0Rpc2pvaW50KTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0NvbXBhcmU9bWVyZ2VpZnkoaXRlckNvbXBhcmUpOyRozY9fb25jZS5lbGVtZW50c0NvbXBhcmUoZWxlbWVudHNDb21wYXJlKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c1VuaW9uPW1lcmdlaWZ5KGl0ZXJVbmlvbik7JGjNj19vbmNlLmVsZW1lbnRzVW5pb24oZWxlbWVudHNVbmlvbik7XG5jb25zdCAgICAgICAgZWxlbWVudHNEaXNqb2ludFVuaW9uPW1lcmdlaWZ5KGl0ZXJEaXNqb2ludFVuaW9uKTskaM2PX29uY2UuZWxlbWVudHNEaXNqb2ludFVuaW9uKGVsZW1lbnRzRGlzam9pbnRVbmlvbik7XG5jb25zdCAgICAgICAgZWxlbWVudHNJbnRlcnNlY3Rpb249bWVyZ2VpZnkoaXRlckludGVyc2VjdGlvbik7JGjNj19vbmNlLmVsZW1lbnRzSW50ZXJzZWN0aW9uKGVsZW1lbnRzSW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0Rpc2pvaW50U3VidHJhY3Q9bWVyZ2VpZnkoaXRlckRpc2pvaW50U3VidHJhY3QpOyRozY9fb25jZS5lbGVtZW50c0Rpc2pvaW50U3VidHJhY3QoZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0KTtcblxuY29uc3QgcmF3U2V0aWZ5PShlbGVtZW50c09wKT0+KHhzZXQseXNldCk9PlxuZWxlbWVudHNPcCh4c2V0LnBheWxvYWQseXNldC5wYXlsb2FkKTtcblxuY29uc3Qgc2V0aWZ5PShlbGVtZW50c09wKT0+KHhzZXQseXNldCk9PlxubWFrZVNldE9mRWxlbWVudHMoZWxlbWVudHNPcCh4c2V0LnBheWxvYWQseXNldC5wYXlsb2FkKSk7XG5cbmNvbnN0ICAgICAgICBzZXRJc1N1cGVyc2V0PXJhd1NldGlmeShlbGVtZW50c0lzU3VwZXJzZXQpOyRozY9fb25jZS5zZXRJc1N1cGVyc2V0KHNldElzU3VwZXJzZXQpO1xuY29uc3QgICAgICAgIHNldElzRGlzam9pbnQ9cmF3U2V0aWZ5KGVsZW1lbnRzSXNEaXNqb2ludCk7JGjNj19vbmNlLnNldElzRGlzam9pbnQoc2V0SXNEaXNqb2ludCk7XG5jb25zdCAgICAgICAgc2V0VW5pb249c2V0aWZ5KGVsZW1lbnRzVW5pb24pOyRozY9fb25jZS5zZXRVbmlvbihzZXRVbmlvbik7XG5jb25zdCAgICAgICAgc2V0RGlzam9pbnRVbmlvbj1zZXRpZnkoZWxlbWVudHNEaXNqb2ludFVuaW9uKTskaM2PX29uY2Uuc2V0RGlzam9pbnRVbmlvbihzZXREaXNqb2ludFVuaW9uKTtcbmNvbnN0ICAgICAgICBzZXRJbnRlcnNlY3Rpb249c2V0aWZ5KGVsZW1lbnRzSW50ZXJzZWN0aW9uKTskaM2PX29uY2Uuc2V0SW50ZXJzZWN0aW9uKHNldEludGVyc2VjdGlvbik7XG5jb25zdCAgICAgICAgc2V0RGlzam9pbnRTdWJ0cmFjdD1zZXRpZnkoZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0KTskaM2PX29uY2Uuc2V0RGlzam9pbnRTdWJ0cmFjdChzZXREaXNqb2ludFN1YnRyYWN0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImVsZW1lbnRzSXNTdXBlcnNldCI6WyJlbGVtZW50c0lzU3VwZXJzZXQiXSwiZWxlbWVudHNJc0Rpc2pvaW50IjpbImVsZW1lbnRzSXNEaXNqb2ludCJdLCJlbGVtZW50c0NvbXBhcmUiOlsiZWxlbWVudHNDb21wYXJlIl0sImVsZW1lbnRzVW5pb24iOlsiZWxlbWVudHNVbmlvbiJdLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iOlsiZWxlbWVudHNEaXNqb2ludFVuaW9uIl0sImVsZW1lbnRzSW50ZXJzZWN0aW9uIjpbImVsZW1lbnRzSW50ZXJzZWN0aW9uIl0sImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCI6WyJlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QiXSwic2V0SXNTdXBlcnNldCI6WyJzZXRJc1N1cGVyc2V0Il0sInNldElzRGlzam9pbnQiOlsic2V0SXNEaXNqb2ludCJdLCJzZXRVbmlvbiI6WyJzZXRVbmlvbiJdLCJzZXREaXNqb2ludFVuaW9uIjpbInNldERpc2pvaW50VW5pb24iXSwic2V0SW50ZXJzZWN0aW9uIjpbInNldEludGVyc2VjdGlvbiJdLCJzZXREaXNqb2ludFN1YnRyYWN0IjpbInNldERpc2pvaW50U3VidHJhY3QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAApEMnKO0YAADtGAAANgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qc3siaW1wb3J0cyI6WyJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIi4vcGF0dGVybk1hdGNoZXJzLmpzIiwiLi4va2V5cy9jaGVja0tleS5qcyJdLCJleHBvcnRzIjpbImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIiwiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIiwiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyIsImdldE1ldGhvZEd1YXJkUGF5bG9hZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBvYmplY3RNYXAsQXJnR3VhcmRMaXN0U2hhcGUsQXdhaXRBcmdHdWFyZFNoYXBlLEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlLEludGVyZmFjZUd1YXJkU2hhcGUsTSxNZXRob2RHdWFyZFBheWxvYWRTaGFwZSxNZXRob2RHdWFyZFNoYXBlLFJhd0d1YXJkU2hhcGUsU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsU3luY1ZhbHVlR3VhcmRTaGFwZSxhc3NlcnRBd2FpdEFyZ0d1YXJkLG1hdGNoZXMsbXVzdE1hdGNoLGdldENvcHlNYXBLZXlzLG1ha2VDb3B5TWFwOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjNj19hID0+IChvYmplY3RNYXAgPSAkaM2PX2EpXV1dXSxbXCIuL3BhdHRlcm5NYXRjaGVycy5qc1wiLCBbW1wiQXJnR3VhcmRMaXN0U2hhcGVcIiwgWyRozY9fYSA9PiAoQXJnR3VhcmRMaXN0U2hhcGUgPSAkaM2PX2EpXV0sW1wiQXdhaXRBcmdHdWFyZFNoYXBlXCIsIFskaM2PX2EgPT4gKEF3YWl0QXJnR3VhcmRTaGFwZSA9ICRozY9fYSldXSxbXCJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZVwiLCBbJGjNj19hID0+IChJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSA9ICRozY9fYSldXSxbXCJJbnRlcmZhY2VHdWFyZFNoYXBlXCIsIFskaM2PX2EgPT4gKEludGVyZmFjZUd1YXJkU2hhcGUgPSAkaM2PX2EpXV0sW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlXCIsIFskaM2PX2EgPT4gKE1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlID0gJGjNj19hKV1dLFtcIk1ldGhvZEd1YXJkU2hhcGVcIiwgWyRozY9fYSA9PiAoTWV0aG9kR3VhcmRTaGFwZSA9ICRozY9fYSldXSxbXCJSYXdHdWFyZFNoYXBlXCIsIFskaM2PX2EgPT4gKFJhd0d1YXJkU2hhcGUgPSAkaM2PX2EpXV0sW1wiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGVcIiwgWyRozY9fYSA9PiAoU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUgPSAkaM2PX2EpXV0sW1wiU3luY1ZhbHVlR3VhcmRTaGFwZVwiLCBbJGjNj19hID0+IChTeW5jVmFsdWVHdWFyZFNoYXBlID0gJGjNj19hKV1dLFtcImFzc2VydEF3YWl0QXJnR3VhcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0QXdhaXRBcmdHdWFyZCA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIi4uL2tleXMvY2hlY2tLZXkuanNcIiwgW1tcImdldENvcHlNYXBLZXlzXCIsIFskaM2PX2EgPT4gKGdldENvcHlNYXBLZXlzID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5TWFwXCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5TWFwID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlPWhhcmRlbih7XG5rbGFzczonYXdhaXRBcmcnLFxuYXJnR3VhcmQ6TS5wYXR0ZXJuKCl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQ9KGF3YWl0QXJnR3VhcmQpPT57XG5pZihtYXRjaGVzKGF3YWl0QXJnR3VhcmQsTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlKSl7XG4vL1xuY29uc3R7a2xhc3M6XywuLi5wYXlsb2FkfT1hd2FpdEFyZ0d1YXJkO1xuLy9cbnJldHVybiBwYXlsb2FkO1xuIH1cbmFzc2VydEF3YWl0QXJnR3VhcmQoYXdhaXRBcmdHdWFyZCk7XG5yZXR1cm4gYXdhaXRBcmdHdWFyZC5wYXlsb2FkO1xuIH07JGjNj19vbmNlLmdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKTtcbmhhcmRlbihnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeVN5bmNNZXRob2RHdWFyZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5rbGFzczonbWV0aG9kR3VhcmQnLFxuY2FsbEtpbmQ6J3N5bmMnLFxuYXJnR3VhcmRzOlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlLFxucmV0dXJuR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0sXG5cbntcbm9wdGlvbmFsQXJnR3VhcmRzOlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlLFxucmVzdEFyZ0d1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUFyZ0d1YXJkU2hhcGU9TS5vcihcblJhd0d1YXJkU2hhcGUsXG5Bd2FpdEFyZ0d1YXJkU2hhcGUsXG5MZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGUsXG5NLnBhdHRlcm4oKSk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUFyZ0d1YXJkTGlzdFNoYXBlPU0uYXJyYXlPZihMZWdhY3lBcmdHdWFyZFNoYXBlKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXN5bmNNZXRob2RHdWFyZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5rbGFzczonbWV0aG9kR3VhcmQnLFxuY2FsbEtpbmQ6J2FzeW5jJyxcbmFyZ0d1YXJkczpMZWdhY3lBcmdHdWFyZExpc3RTaGFwZSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9LFxuXG57XG5vcHRpb25hbEFyZ0d1YXJkczpBcmdHdWFyZExpc3RTaGFwZSxcbnJlc3RBcmdHdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSk7XG5cblxuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lNZXRob2RHdWFyZFNoYXBlPU0ub3IoXG5MZWdhY3lTeW5jTWV0aG9kR3VhcmRTaGFwZSxcbkxlZ2FjeUFzeW5jTWV0aG9kR3VhcmRTaGFwZSk7XG5cblxuY29uc3QgYWRhcHRMZWdhY3lBcmdHdWFyZD0oYXJnR3VhcmQpPT5cbm1hdGNoZXMoYXJnR3VhcmQsTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlKT9cbk0uYXdhaXQoZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQoYXJnR3VhcmQpLmFyZ0d1YXJkKTpcbmFyZ0d1YXJkO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE1ldGhvZEd1YXJkUGF5bG9hZD0obWV0aG9kR3VhcmQpPT57XG5pZihtYXRjaGVzKG1ldGhvZEd1YXJkLE1ldGhvZEd1YXJkU2hhcGUpKXtcbnJldHVybiBtZXRob2RHdWFyZC5wYXlsb2FkO1xuIH1cbm11c3RNYXRjaChtZXRob2RHdWFyZCxMZWdhY3lNZXRob2RHdWFyZFNoYXBlLCdsZWdhY3lNZXRob2RHdWFyZCcpO1xuY29uc3R7XG4vL1xua2xhc3M6Xyxcbi8vXG5jYWxsS2luZCxcbi8vXG5yZXR1cm5HdWFyZCxcbi8vXG5yZXN0QXJnR3VhcmR9PVxubWV0aG9kR3VhcmQ7XG5sZXR7XG4vL1xuYXJnR3VhcmRzLFxuLy9cbm9wdGlvbmFsQXJnR3VhcmRzfT1cbm1ldGhvZEd1YXJkO1xuaWYoY2FsbEtpbmQ9PT0nYXN5bmMnKXtcbmFyZ0d1YXJkcz1hcmdHdWFyZHMubWFwKGFkYXB0TGVnYWN5QXJnR3VhcmQpO1xub3B0aW9uYWxBcmdHdWFyZHM9XG5vcHRpb25hbEFyZ0d1YXJkcyYmb3B0aW9uYWxBcmdHdWFyZHMubWFwKGFkYXB0TGVnYWN5QXJnR3VhcmQpO1xuIH1cbmNvbnN0IHBheWxvYWQ9aGFyZGVuKHtcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yZXN0QXJnR3VhcmQsXG5yZXR1cm5HdWFyZH0pO1xuXG4vL1xubXVzdE1hdGNoKHBheWxvYWQsTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUsJ2ludGVybmFsTWV0aG9kR3VhcmRBZGFwdG9yJyk7XG5yZXR1cm4gcGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRNZXRob2RHdWFyZFBheWxvYWQoZ2V0TWV0aG9kR3VhcmRQYXlsb2FkKTtcbmhhcmRlbihnZXRNZXRob2RHdWFyZFBheWxvYWQpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lJbnRlcmZhY2VHdWFyZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5rbGFzczonSW50ZXJmYWNlJyxcbmludGVyZmFjZU5hbWU6TS5zdHJpbmcoKSxcbm1ldGhvZEd1YXJkczpNLnJlY29yZE9mKFxuTS5zdHJpbmcoKSxcbk0ub3IoTWV0aG9kR3VhcmRTaGFwZSxMZWdhY3lNZXRob2RHdWFyZFNoYXBlKSl9LFxuXG5cbntcbmRlZmF1bHRHdWFyZHM6TS5vcihNLnVuZGVmaW5lZCgpLCdwYXNzYWJsZScsJ3JhdycpLFxuc2xvcHB5Ok0uYm9vbGVhbigpLFxuLy9cbi8vXG4vL1xuc3ltYm9sTWV0aG9kR3VhcmRzOk0ubWFwT2YoTS5zeW1ib2woKSxNZXRob2RHdWFyZFNoYXBlKX0pO1xuXG5cblxuY29uc3QgYWRhcHRNZXRob2RHdWFyZD0obWV0aG9kR3VhcmQpPT57XG5pZihtYXRjaGVzKG1ldGhvZEd1YXJkLExlZ2FjeU1ldGhvZEd1YXJkU2hhcGUpKXtcbmNvbnN0e1xuY2FsbEtpbmQsXG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcz1bXSxcbnJlc3RBcmdHdWFyZD1NLmFueSgpLFxucmV0dXJuR3VhcmR9PVxuZ2V0TWV0aG9kR3VhcmRQYXlsb2FkKG1ldGhvZEd1YXJkKTtcbmNvbnN0IG1DYWxsPWNhbGxLaW5kPT09J3N5bmMnP00uY2FsbDpNLmNhbGxXaGVuO1xucmV0dXJuIG1DYWxsKC4uLmFyZ0d1YXJkcykuXG5vcHRpb25hbCguLi5vcHRpb25hbEFyZ0d1YXJkcykuXG5yZXN0KHJlc3RBcmdHdWFyZCkuXG5yZXR1cm5zKHJldHVybkd1YXJkKTtcbiB9XG5yZXR1cm4gbWV0aG9kR3VhcmQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEludGVyZmFjZUd1YXJkUGF5bG9hZD0oaW50ZXJmYWNlR3VhcmQpPT57XG5pZihtYXRjaGVzKGludGVyZmFjZUd1YXJkLEludGVyZmFjZUd1YXJkU2hhcGUpKXtcbnJldHVybiBpbnRlcmZhY2VHdWFyZC5wYXlsb2FkO1xuIH1cbm11c3RNYXRjaChpbnRlcmZhY2VHdWFyZCxMZWdhY3lJbnRlcmZhY2VHdWFyZFNoYXBlLCdsZWdhY3lJbnRlcmZhY2VHdWFyZCcpO1xuLy9cbi8vXG5sZXR7a2xhc3M6XyxpbnRlcmZhY2VOYW1lLG1ldGhvZEd1YXJkcywuLi5yZXN0fT1pbnRlcmZhY2VHdWFyZDtcbm1ldGhvZEd1YXJkcz1vYmplY3RNYXAobWV0aG9kR3VhcmRzLGFkYXB0TWV0aG9kR3VhcmQpO1xuY29uc3QgcGF5bG9hZD1oYXJkZW4oe1xuaW50ZXJmYWNlTmFtZSxcbm1ldGhvZEd1YXJkcyxcbi4uLnJlc3R9KTtcblxubXVzdE1hdGNoKFxucGF5bG9hZCxcbkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlLFxuJ2ludGVybmFsSW50ZXJmYWNlR3VhcmRBZGFwdG9yJyk7XG5cbnJldHVybiBwYXlsb2FkO1xuIH07JGjNj19vbmNlLmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQpO1xuaGFyZGVuKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCk7XG5cbmNvbnN0IGVtcHR5Q29weU1hcD1tYWtlQ29weU1hcChbXSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cz0oaW50ZXJmYWNlR3VhcmQpPT57XG5jb25zdHttZXRob2RHdWFyZHMsc3ltYm9sTWV0aG9kR3VhcmRzPWVtcHR5Q29weU1hcH09XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoaW50ZXJmYWNlR3VhcmQpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKFtcbi4uLlJlZmxlY3Qub3duS2V5cyhtZXRob2RHdWFyZHMpLFxuLi4uZ2V0Q29weU1hcEtleXMoc3ltYm9sTWV0aG9kR3VhcmRzKV0pO1xuXG4gfTskaM2PX29uY2UuZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyhnZXRJbnRlcmZhY2VNZXRob2RLZXlzKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VNZXRob2RLZXlzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIjpbImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIl0sImdldE1ldGhvZEd1YXJkUGF5bG9hZCI6WyJnZXRNZXRob2RHdWFyZFBheWxvYWQiXSwiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIjpbImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCJdLCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIjpbImdldEludGVyZmFjZU1ldGhvZEtleXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAHTgMlMitAADIrQAANQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyIsIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIsIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIiwiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyIsIkBlbmRvL2Vycm9ycyIsIi4uL2tleXMvY29tcGFyZUtleXMuanMiLCIuLi9rZXlzL2NoZWNrS2V5LmpzIiwiLi4va2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyJdLCJleHBvcnRzIjpbIkFyZ0d1YXJkTGlzdFNoYXBlIiwiQXdhaXRBcmdHdWFyZFNoYXBlIiwiSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUiLCJJbnRlcmZhY2VHdWFyZFNoYXBlIiwiTSIsIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIiwiTWV0aG9kR3VhcmRTaGFwZSIsIlJhd0d1YXJkU2hhcGUiLCJTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSIsIlN5bmNWYWx1ZUd1YXJkU2hhcGUiLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIiwiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiLCJhc3NlcnRNZXRob2RHdWFyZCIsImFzc2VydFBhdHRlcm4iLCJhc3NlcnRSYXdHdWFyZCIsImNoZWNrTWF0Y2hlcyIsImRlZmF1bHRMaW1pdHMiLCJnZXRSYW5rQ292ZXIiLCJpc0F3YWl0QXJnR3VhcmQiLCJpc1BhdHRlcm4iLCJpc1Jhd0d1YXJkIiwia2luZE9mIiwibWF0Y2hlcyIsIm11c3RNYXRjaCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLEZhcixnZXRUYWcsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixoYXNPd25Qcm9wZXJ0eU9mLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxjb21wYXJlUmFuayxnZXRQYXNzU3R5bGVDb3ZlcixpbnRlcnNlY3RSYW5rQ292ZXJzLHVuaW9uUmFua0NvdmVycyxyZWNvcmROYW1lcyxyZWNvcmRWYWx1ZXMsaWRlbnRDaGVja2VyLGFwcGx5TGFiZWxpbmdFcnJvcixmcm9tVW5pcXVlRW50cmllcyxsaXN0RGlmZmVyZW5jZSxxLGIsWCxGYWlsLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLGtleUVRLGtleUdULGtleUdURSxrZXlMVCxrZXlMVEUsYXNzZXJ0S2V5LGNoZWNrS2V5LGlzS2V5LGNoZWNrU2NhbGFyS2V5LGNoZWNrQ29weVNldCxjaGVja0NvcHlNYXAsY29weU1hcEtleVNldCxjaGVja0NvcHlCYWcsZ2V0Q29weU1hcEVudHJ5QXJyYXksbWFrZUNvcHlNYXAsZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJjb21wYXJlUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlUmFuayA9ICRozY9fYSldXSxbXCJnZXRQYXNzU3R5bGVDb3ZlclwiLCBbJGjNj19hID0+IChnZXRQYXNzU3R5bGVDb3ZlciA9ICRozY9fYSldXSxbXCJpbnRlcnNlY3RSYW5rQ292ZXJzXCIsIFskaM2PX2EgPT4gKGludGVyc2VjdFJhbmtDb3ZlcnMgPSAkaM2PX2EpXV0sW1widW5pb25SYW5rQ292ZXJzXCIsIFskaM2PX2EgPT4gKHVuaW9uUmFua0NvdmVycyA9ICRozY9fYSldXSxbXCJyZWNvcmROYW1lc1wiLCBbJGjNj19hID0+IChyZWNvcmROYW1lcyA9ICRozY9fYSldXSxbXCJyZWNvcmRWYWx1ZXNcIiwgWyRozY9fYSA9PiAocmVjb3JkVmFsdWVzID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanNcIiwgW1tcImlkZW50Q2hlY2tlclwiLCBbJGjNj19hID0+IChpZGVudENoZWNrZXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanNcIiwgW1tcImFwcGx5TGFiZWxpbmdFcnJvclwiLCBbJGjNj19hID0+IChhcHBseUxhYmVsaW5nRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qc1wiLCBbW1wiZnJvbVVuaXF1ZUVudHJpZXNcIiwgWyRozY9fYSA9PiAoZnJvbVVuaXF1ZUVudHJpZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzXCIsIFtbXCJsaXN0RGlmZmVyZW5jZVwiLCBbJGjNj19hID0+IChsaXN0RGlmZmVyZW5jZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcImJcIiwgWyRozY9fYSA9PiAoYiA9ICRozY9fYSldXSxbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV0sW1wiLi4va2V5cy9jb21wYXJlS2V5cy5qc1wiLCBbW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV0sW1wia2V5R1RcIiwgWyRozY9fYSA9PiAoa2V5R1QgPSAkaM2PX2EpXV0sW1wia2V5R1RFXCIsIFskaM2PX2EgPT4gKGtleUdURSA9ICRozY9fYSldXSxbXCJrZXlMVFwiLCBbJGjNj19hID0+IChrZXlMVCA9ICRozY9fYSldXSxbXCJrZXlMVEVcIiwgWyRozY9fYSA9PiAoa2V5TFRFID0gJGjNj19hKV1dXV0sW1wiLi4va2V5cy9jaGVja0tleS5qc1wiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJjaGVja0tleVwiLCBbJGjNj19hID0+IChjaGVja0tleSA9ICRozY9fYSldXSxbXCJpc0tleVwiLCBbJGjNj19hID0+IChpc0tleSA9ICRozY9fYSldXSxbXCJjaGVja1NjYWxhcktleVwiLCBbJGjNj19hID0+IChjaGVja1NjYWxhcktleSA9ICRozY9fYSldXSxbXCJjaGVja0NvcHlTZXRcIiwgWyRozY9fYSA9PiAoY2hlY2tDb3B5U2V0ID0gJGjNj19hKV1dLFtcImNoZWNrQ29weU1hcFwiLCBbJGjNj19hID0+IChjaGVja0NvcHlNYXAgPSAkaM2PX2EpXV0sW1wiY29weU1hcEtleVNldFwiLCBbJGjNj19hID0+IChjb3B5TWFwS2V5U2V0ID0gJGjNj19hKV1dLFtcImNoZWNrQ29weUJhZ1wiLCBbJGjNj19hID0+IChjaGVja0NvcHlCYWcgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weU1hcEVudHJ5QXJyYXlcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEVudHJ5QXJyYXkgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlNYXBcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlNYXAgPSAkaM2PX2EpXV1dXSxbXCIuLi9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzXCIsIFtbXCJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllc1wiLCBbJGjNj19hID0+IChnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuY29uc3R7ZW50cmllcyx2YWx1ZXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBhdHRlcm5NZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IE1NO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmF1bHRMaW1pdHM9aGFyZGVuKHtcbmRlY2ltYWxEaWdpdHNMaW1pdDoxMDAsXG5zdHJpbmdMZW5ndGhMaW1pdDoxMDBfMDAwLFxuc3ltYm9sTmFtZUxlbmd0aExpbWl0OjEwMCxcbm51bVByb3BlcnRpZXNMaW1pdDo4MCxcbnByb3BlcnR5TmFtZUxlbmd0aExpbWl0OjEwMCxcbmFycmF5TGVuZ3RoTGltaXQ6MTBfMDAwLFxubnVtU2V0RWxlbWVudHNMaW1pdDoxMF8wMDAsXG5udW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0OjEwXzAwMCxcbm51bU1hcEVudHJpZXNMaW1pdDo1MDAwfSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZWZhdWx0TGltaXRzKGRlZmF1bHRMaW1pdHMpO1xuY29uc3QgbGltaXQ9KGxpbWl0cz17fSk9PlxuLyogICAgICAgICAgICAgICAgICAgICovaGFyZGVuKHtfX3Byb3RvX186ZGVmYXVsdExpbWl0cywuLi5saW1pdHN9KTtcblxuY29uc3QgY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQ9KFxucGF5bG9hZCxcbm1haW5QYXlsb2FkU2hhcGUsXG5jaGVjayxcbmxhYmVsKT0+XG57XG5hc3NlcnQoQXJyYXkuaXNBcnJheShtYWluUGF5bG9hZFNoYXBlKSk7XG5pZighQXJyYXkuaXNBcnJheShwYXlsb2FkKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgJHtxKGxhYmVsKX0gcGF5bG9hZCBtdXN0IGJlIGFuIGFycmF5OiAke3BheWxvYWR9YCk7XG4gfVxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuY29uc3QgbWFpbkxlbmd0aD1tYWluUGF5bG9hZFNoYXBlLmxlbmd0aDtcbmlmKCEocGF5bG9hZC5sZW5ndGg9PT1tYWluTGVuZ3RofHxwYXlsb2FkLmxlbmd0aD09PW1haW5MZW5ndGgrMSkpe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYCR7cShsYWJlbCl9IHBheWxvYWQgdW5leHBlY3RlZCBzaXplOiAke3BheWxvYWR9YCk7XG4gfVxuY29uc3QgbGltaXRzPXBheWxvYWRbbWFpbkxlbmd0aF07XG5wYXlsb2FkPWhhcmRlbihwYXlsb2FkLnNsaWNlKDAsbWFpbkxlbmd0aCkpO1xuLy9cbmlmKCFjaGVja01hdGNoZXMocGF5bG9hZCxtYWluUGF5bG9hZFNoYXBlLGNoZWNrLGxhYmVsKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuaWYobGltaXRzPT09dW5kZWZpbmVkKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybihcbihwYXNzU3R5bGVPZihsaW1pdHMpPT09J2NvcHlSZWNvcmQnfHxcbmNoZWNrKGZhbHNlLFggYExpbWl0cyBtdXN0IGJlIGEgcmVjb3JkOiAke3EobGltaXRzKX1gKSkmJlxuZW50cmllcyhsaW1pdHMpLmV2ZXJ5KFxuKFtrZXksdmFsdWVdKT0+XG5wYXNzU3R5bGVPZih2YWx1ZSk9PT0nbnVtYmVyJ3x8XG5jaGVjayhmYWxzZSxYIGBWYWx1ZSBvZiBsaW1pdCAke3Eoa2V5KX0gYnV0IGJlIGEgbnVtYmVyOiAke3EodmFsdWUpfWApKSk7XG5cblxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrRGVjaW1hbERpZ2l0c0xpbWl0PShzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spPT57XG5pZihcbk1hdGguZmxvb3IoTWF0aC5sb2cxMChNYXRoLmFicyhOdW1iZXIoc3BlY2ltZW4pKSkpKzE8PVxuZGVjaW1hbERpZ2l0c0xpbWl0KVxue1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBiaWdpbnQgJHtzcGVjaW1lbn0gbXVzdCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtkZWNpbWFsRGlnaXRzTGltaXR9IGRpZ2l0c2ApO1xuXG4gfTtcblxuLypcblxuICovXG5jb25zdCBtYWtlUGF0dGVybktpdD0oKT0+e1xuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWF5YmVNYXRjaEhlbHBlcj0odGFnKT0+XG4vL1xuSGVscGVyc0J5TWF0Y2hUYWdbdGFnXTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZVBheWxvYWRTaGFwZT0odGFnKT0+XG4vL1xuR3VhcmRQYXlsb2FkU2hhcGVzW3RhZ107XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2luZ2xldG9uS2luZHM9bmV3IE1hcChbXG5bJ251bGwnLG51bGxdLFxuWyd1bmRlZmluZWQnLHVuZGVmaW5lZF1dKTtcblxuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHRhZ01lbW89bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrVGFnZ2VkPSh0YWdnZWQsdGFnLGNoZWNrKT0+e1xuY29uc3QgbWF0Y2hIZWxwZXI9bWF5YmVNYXRjaEhlbHBlcih0YWcpO1xuaWYobWF0Y2hIZWxwZXIpe1xuLy9cbi8vXG5yZXR1cm4gbWF0Y2hIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQodGFnZ2VkLnBheWxvYWQsY2hlY2spO1xuIH1lbHNle1xuY29uc3QgcGF5bG9hZFNoYXBlPW1heWJlUGF5bG9hZFNoYXBlKHRhZyk7XG5pZihwYXlsb2FkU2hhcGUhPT11bmRlZmluZWQpe1xuLy9cbnJldHVybiBjaGVja01hdGNoZXModGFnZ2VkLnBheWxvYWQscGF5bG9hZFNoYXBlLGNoZWNrLHRhZyk7XG4gfVxuIH1cbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG5yZXR1cm4gY2hlY2tDb3B5U2V0KHRhZ2dlZCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG5yZXR1cm4gY2hlY2tDb3B5QmFnKHRhZ2dlZCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5yZXR1cm4gY2hlY2tDb3B5TWFwKHRhZ2dlZCxjaGVjayk7XG4gfVxuZGVmYXVsdDp7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYGNhbm5vdCBjaGVjayB1bnJlY29nbml6ZWQgdGFnICR7cSh0YWcpfTogJHt0YWdnZWR9YCk7XG5cbiB9fVxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGtpbmRPZj0oc3BlY2ltZW4sY2hlY2s9aWRlbnRDaGVja2VyKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHNwZWNpbWVuKTtcbmlmKHBhc3NTdHlsZSE9PSd0YWdnZWQnKXtcbnJldHVybiBwYXNzU3R5bGU7XG4gfVxuLy9cbi8vXG4vL1xuaWYodGFnTWVtby5oYXMoc3BlY2ltZW4pKXtcbnJldHVybiB0YWdNZW1vLmdldChzcGVjaW1lbik7XG4gfVxuY29uc3QgdGFnPWdldFRhZyhzcGVjaW1lbik7XG5pZihjaGVja1RhZ2dlZChzcGVjaW1lbix0YWcsY2hlY2spKXtcbnRhZ01lbW8uc2V0KHNwZWNpbWVuLHRhZyk7XG5yZXR1cm4gdGFnO1xuIH1cbmlmKGNoZWNrIT09aWRlbnRDaGVja2VyKXtcbmNoZWNrKGZhbHNlLFggYGNhbm5vdCBjaGVjayB1bnJlY29nbml6ZWQgdGFnICR7cSh0YWcpfWApO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfTtcbmhhcmRlbihraW5kT2YpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tLaW5kPShzcGVjaW1lbixraW5kLGNoZWNrKT0+e1xuLy9cbmlmKHNpbmdsZXRvbktpbmRzLmhhcyhraW5kKSl7XG4vL1xucmV0dXJuIGNoZWNrQXNLZXlQYXR0KHNwZWNpbWVuLHNpbmdsZXRvbktpbmRzLmdldChraW5kKSxjaGVjayk7XG4gfVxuXG5jb25zdCByZWFsS2luZD1raW5kT2Yoc3BlY2ltZW4sY2hlY2spO1xuaWYoa2luZD09PXJlYWxLaW5kKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKGNoZWNrIT09aWRlbnRDaGVja2VyKXtcbi8vXG4vL1xuY2hlY2soZmFsc2UsWCBgJHtiKHJlYWxLaW5kKX0gJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgJHtiKGtpbmQpfWApO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGlzS2luZD0oc3BlY2ltZW4sa2luZCk9PmNoZWNrS2luZChzcGVjaW1lbixraW5kLGlkZW50Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja0FzS2V5UGF0dD0oc3BlY2ltZW4sa2V5QXNQYXR0ZXJuLGNoZWNrKT0+e1xuaWYoaXNLZXkoc3BlY2ltZW4pJiZrZXlFUShzcGVjaW1lbixrZXlBc1BhdHRlcm4pKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybihcbmNoZWNrIT09aWRlbnRDaGVja2VyJiZcbi8vXG4vL1xuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlOiAke2tleUFzUGF0dGVybn1gKSk7XG5cbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNoZWNrUGF0dGVybj0ocGF0dCxjaGVjayk9PntcbmlmKGlzS2V5KHBhdHQpKXtcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihwYXR0ZXJuTWVtby5oYXMocGF0dCkpe1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmNvbnN0IHJlc3VsdD1jaGVja1BhdHRlcm5JbnRlcm5hbChwYXR0LGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5wYXR0ZXJuTWVtby5hZGQocGF0dCk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tQYXR0ZXJuSW50ZXJuYWw9KHBhdHQsY2hlY2spPT57XG4vL1xuLy9cbi8vXG5jb25zdCBjaGVja0l0PShjaGlsZCk9PmNoZWNrUGF0dGVybihjaGlsZCxjaGVjayk7XG5cbmNvbnN0IGtpbmQ9a2luZE9mKHBhdHQsY2hlY2spO1xuc3dpdGNoKGtpbmQpe1xuY2FzZSB1bmRlZmluZWQ6e1xucmV0dXJuIGZhbHNlO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG5yZXR1cm4gdmFsdWVzKHBhdHQpLmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuLy9cbnJldHVybiBwYXR0LmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UnY29weU1hcCc6e1xuLy9cbi8vXG4vL1xucmV0dXJuIGNoZWNrUGF0dGVybihwYXR0LnZhbHVlcyxjaGVjayk7XG4gfVxuY2FzZSdlcnJvcic6XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBjaGVjayhmYWxzZSxYIGBBICR7cShraW5kKX0gY2Fubm90IGJlIGEgcGF0dGVybmApO1xuIH1cbmRlZmF1bHQ6e1xuaWYobWF5YmVNYXRjaEhlbHBlcihraW5kKSE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYEEgcGFzc2FibGUgb2Yga2luZCAke3Eoa2luZCl9IGlzIG5vdCBhIHBhdHRlcm46ICR7cGF0dH1gKTtcblxuIH19XG5cbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBpc1BhdHRlcm49KHBhdHQpPT5jaGVja1BhdHRlcm4ocGF0dCxpZGVudENoZWNrZXIpO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYXNzZXJ0UGF0dGVybj0ocGF0dCk9PntcbmNoZWNrUGF0dGVybihwYXR0LGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8vXG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrTWF0Y2hlcz0oc3BlY2ltZW4scGF0dGVybixjaGVjayxsYWJlbD11bmRlZmluZWQpPT5cbi8vXG5hcHBseUxhYmVsaW5nRXJyb3IoY2hlY2tNYXRjaGVzSW50ZXJuYWwsW3NwZWNpbWVuLHBhdHRlcm4sY2hlY2tdLGxhYmVsKTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrTWF0Y2hlc0ludGVybmFsPShzcGVjaW1lbixwYXR0LGNoZWNrKT0+e1xuLy9cbmNvbnN0IHBhdHRlcm5LaW5kPWtpbmRPZihwYXR0LGNoZWNrKTtcbmNvbnN0IHNwZWNpbWVuS2luZD1raW5kT2Yoc3BlY2ltZW4pOy8vXG5zd2l0Y2gocGF0dGVybktpbmQpe1xuY2FzZSB1bmRlZmluZWQ6e1xucmV0dXJuIEZhaWwgYHBhdHRlcm4gZXhwZWN0ZWQ6ICR7cGF0dH1gO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIEZhaWwgYHByb21pc2VzIGNhbm5vdCBiZSBwYXR0ZXJuczogJHtwYXR0fWA7XG4gfVxuY2FzZSdlcnJvcic6e1xucmV0dXJuIEZhaWwgYGVycm9ycyBjYW5ub3QgYmUgcGF0dGVybnM6ICR7cGF0dH1gO1xuIH1cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdudW1iZXInOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOlxuY2FzZSdzeW1ib2wnOlxuY2FzZSdjb3B5U2V0JzpcbmNhc2UnY29weUJhZyc6XG5jYXNlJ3JlbW90YWJsZSc6e1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuaWYoaXNLZXkocGF0dCkpe1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4scGF0dCxjaGVjayk7XG4gfVxuaWYoc3BlY2ltZW5LaW5kIT09J2NvcHlBcnJheScpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSBjb3B5QXJyYXkgdG8gbWF0Y2ggYSBjb3B5QXJyYXkgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG5jb25zdHtsZW5ndGh9PXBhdHQ7XG5pZihzcGVjaW1lbi5sZW5ndGghPT1sZW5ndGgpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBBcnJheSAke3NwZWNpbWVufSAtIE11c3QgYmUgYXMgbG9uZyBhcyBjb3B5QXJyYXkgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG5yZXR1cm4gcGF0dC5ldmVyeSgocCxpKT0+Y2hlY2tNYXRjaGVzKHNwZWNpbWVuW2ldLHAsY2hlY2ssaSkpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuaWYoaXNLZXkocGF0dCkpe1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4scGF0dCxjaGVjayk7XG4gfVxuaWYoc3BlY2ltZW5LaW5kIT09J2NvcHlSZWNvcmQnKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgY29weVJlY29yZCB0byBtYXRjaCBhIGNvcHlSZWNvcmQgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHNwZWNpbWVuTmFtZXM9cmVjb3JkTmFtZXMoc3BlY2ltZW4pO1xuY29uc3QgcGF0dE5hbWVzPXJlY29yZE5hbWVzKHBhdHQpO1xuY29uc3QgbWlzc2luZz1saXN0RGlmZmVyZW5jZShwYXR0TmFtZXMsc3BlY2ltZW5OYW1lcyk7XG5pZihtaXNzaW5nLmxlbmd0aD49MSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBoYXZlIG1pc3NpbmcgcHJvcGVydGllcyAke3EobWlzc2luZyl9YCk7XG5cbiB9XG5jb25zdCB1bmV4cGVjdGVkPWxpc3REaWZmZXJlbmNlKHNwZWNpbWVuTmFtZXMscGF0dE5hbWVzKTtcbmlmKHVuZXhwZWN0ZWQubGVuZ3RoPj0xKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IG5vdCBoYXZlIHVuZXhwZWN0ZWQgcHJvcGVydGllczogJHtxKFxudW5leHBlY3RlZClcbiB9YCk7XG5cbiB9XG5jb25zdCBzcGVjaW1lblZhbHVlcz1yZWNvcmRWYWx1ZXMoc3BlY2ltZW4sc3BlY2ltZW5OYW1lcyk7XG5jb25zdCBwYXR0VmFsdWVzPXJlY29yZFZhbHVlcyhwYXR0LHBhdHROYW1lcyk7XG5yZXR1cm4gcGF0dE5hbWVzLmV2ZXJ5KChsYWJlbCxpKT0+XG5jaGVja01hdGNoZXMoc3BlY2ltZW5WYWx1ZXNbaV0scGF0dFZhbHVlc1tpXSxjaGVjayxsYWJlbCkpO1xuXG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5pZihpc0tleShwYXR0KSl7XG4vL1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5pZihzcGVjaW1lbktpbmQhPT0nY29weU1hcCcpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSBjb3B5TWFwIHRvIG1hdGNoIGEgY29weU1hcCBwYXR0ZXJuOiAke3EoXG5wYXR0KVxuIH1gKTtcblxuIH1cbi8vXG5jb25zdCBwYXR0S2V5U2V0PWNvcHlNYXBLZXlTZXQocGF0dCk7XG5jb25zdCBzcGVjaW1lbktleVNldD1jb3B5TWFwS2V5U2V0KHNwZWNpbWVuKTtcbmlmKCFjaGVja01hdGNoZXMoc3BlY2ltZW5LZXlTZXQscGF0dEtleVNldCxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhdHRWYWx1ZXM9W107XG5jb25zdCBzcGVjaW1lblZhbHVlcz1bXTtcbmNvbnN0IGVudHJ5UGFpcnM9Z2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMoXG5wYXR0LFxuc3BlY2ltZW4sXG5nZXRDb3B5TWFwRW50cnlBcnJheSxcbnVuZGVmaW5lZCk7XG5cbmZvcihjb25zdFtfa2V5LHBhdHRWYWx1ZSxzcGVjaW1lblZhbHVlXW9mIGVudHJ5UGFpcnMpe1xucGF0dFZhbHVlcy5wdXNoKHBhdHRWYWx1ZSk7XG5zcGVjaW1lblZhbHVlcy5wdXNoKHNwZWNpbWVuVmFsdWUpO1xuIH1cbnJldHVybiBjaGVja01hdGNoZXMoaGFyZGVuKHNwZWNpbWVuVmFsdWVzKSxoYXJkZW4ocGF0dFZhbHVlcyksY2hlY2spO1xuIH1cbmRlZmF1bHQ6e1xuY29uc3QgbWF0Y2hIZWxwZXI9bWF5YmVNYXRjaEhlbHBlcihwYXR0ZXJuS2luZCk7XG5pZihtYXRjaEhlbHBlcil7XG5yZXR1cm4gbWF0Y2hIZWxwZXIuY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQucGF5bG9hZCxjaGVjayk7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IHNob3VsZCBoYXZlIHJlY29nbml6ZWQgJHtxKHBhdHRlcm5LaW5kKX0gYDtcbiB9fVxuXG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBtYXRjaGVzPShzcGVjaW1lbixwYXR0KT0+XG5jaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dCxpZGVudENoZWNrZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG11c3RNYXRjaD0oc3BlY2ltZW4scGF0dCxsYWJlbD11bmRlZmluZWQpPT57XG5sZXQgaW5uZXJFcnJvcjtcbnRyeXtcbmlmKGNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LGlkZW50Q2hlY2tlcix1bmRlZmluZWQpKXtcbnJldHVybjtcbiB9XG4gfWNhdGNoKGVyKXtcbmlubmVyRXJyb3I9ZXI7XG4gfVxuLy9cbmNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LGFzc2VydENoZWNrZXIsbGFiZWwpO1xuY29uc3Qgb3V0ZXJFcnJvcj1tYWtlRXJyb3IoXG5YIGBpbnRlcm5hbDogJHtsYWJlbH06IGluY29uc2lzdGVudCBwYXR0ZXJuIG1hdGNoOiAke3EocGF0dCl9YCk7XG5cbmlmKGlubmVyRXJyb3IhPT11bmRlZmluZWQpe1xuYW5ub3RhdGVFcnJvcihvdXRlckVycm9yLFggYGNhdXNlZCBieSAke2lubmVyRXJyb3J9YCk7XG4gfVxudGhyb3cgb3V0ZXJFcnJvcjtcbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdldFJhbmtDb3Zlcj0ocGF0dCxlbmNvZGVQYXNzYWJsZSk9PntcbmlmKGlzS2V5KHBhdHQpKXtcbmNvbnN0IGVuY29kZWQ9ZW5jb2RlUGFzc2FibGUocGF0dCk7XG5pZihlbmNvZGVkIT09dW5kZWZpbmVkKXtcbnJldHVybltlbmNvZGVkLCBgJHtlbmNvZGVkfX5gXTtcbiB9XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhdHQpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYnJlYWs7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGFnPWdldFRhZyhwYXR0KTtcbmNvbnN0IG1hdGNoSGVscGVyPW1heWJlTWF0Y2hIZWxwZXIodGFnKTtcbmlmKG1hdGNoSGVscGVyKXtcbi8vXG4vL1xucmV0dXJuIG1hdGNoSGVscGVyLmdldFJhbmtDb3ZlcihwYXR0LnBheWxvYWQsZW5jb2RlUGFzc2FibGUpO1xuIH1cbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYnJlYWs7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmJyZWFrO1xuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7Ly9cbiB9fVxuXG5icmVhazsvL1xuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7Ly9cbiB9fVxuXG5yZXR1cm4gZ2V0UGFzc1N0eWxlQ292ZXIocGFzc1N0eWxlKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuPShhcnJheSxwYXR0LGNoZWNrLGxhYmVsUHJlZml4PScnKT0+e1xuaWYoaXNLaW5kKHBhdHQsJ21hdGNoOmFueScpKXtcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gYXJyYXkuZXZlcnkoKGVsLGkpPT5cbmNoZWNrTWF0Y2hlcyhlbCxwYXR0LGNoZWNrLCBgJHtsYWJlbFByZWZpeH1bJHtpfV1gKSk7XG5cbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hBbnlIZWxwZXI9RmFyKCdtYXRjaDphbnkgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KF9zcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsX2NoZWNrKT0+dHJ1ZSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KG1hdGNoZXJQYXlsb2FkLGNoZWNrKT0+XG5tYXRjaGVyUGF5bG9hZD09PXVuZGVmaW5lZHx8XG5jaGVjayhmYWxzZSxYIGBtYXRjaDphbnkgcGF5bG9hZDogJHttYXRjaGVyUGF5bG9hZH0gLSBNdXN0IGJlIHVuZGVmaW5lZGApLFxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+WycnLCd7J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hBbmRIZWxwZXI9RmFyKCdtYXRjaDphbmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHBhdHRzLGNoZWNrKT0+e1xucmV0dXJuIHBhdHRzLmV2ZXJ5KChwYXR0KT0+Y2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQsY2hlY2spKTtcbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDooYWxsZWdlZFBhdHRzLGNoZWNrKT0+e1xuY29uc3QgY2hlY2tJdD0ocGF0dCk9PmNoZWNrUGF0dGVybihwYXR0LGNoZWNrKTtcbnJldHVybihcbihwYXNzU3R5bGVPZihhbGxlZ2VkUGF0dHMpPT09J2NvcHlBcnJheSd8fFxuY2hlY2soZmFsc2UsWCBgTmVlZHMgYXJyYXkgb2Ygc3ViLXBhdHRlcm5zOiAke3EoYWxsZWdlZFBhdHRzKX1gKSkmJlxuYWxsZWdlZFBhdHRzLmV2ZXJ5KGNoZWNrSXQpKTtcblxuIH0sXG5cbmdldFJhbmtDb3ZlcjoocGF0dHMsZW5jb2RlUGFzc2FibGUpPT5cbmludGVyc2VjdFJhbmtDb3ZlcnMoXG5jb21wYXJlUmFuayxcbnBhdHRzLm1hcCgocCk9PmdldFJhbmtDb3ZlcihwLGVuY29kZVBhc3NhYmxlKSkpfSk7XG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hPckhlbHBlcj1GYXIoJ21hdGNoOm9yIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixwYXR0cyxjaGVjayk9PntcbmNvbnN0e2xlbmd0aH09cGF0dHM7XG5pZihsZW5ndGg9PT0wKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBubyBwYXR0ZXJuIGRpc2p1bmN0cyB0byBtYXRjaDogJHtxKHBhdHRzKX1gKTtcblxuIH1cbmlmKFxucGF0dHMubGVuZ3RoPT09MiYmXG4hbWF0Y2hlcyhzcGVjaW1lbixwYXR0c1swXSkmJlxuaXNLaW5kKHBhdHRzWzBdLCdtYXRjaDpraW5kJykmJlxucGF0dHNbMF0ucGF5bG9hZD09PSd1bmRlZmluZWQnKVxue1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHRzWzFdLGNoZWNrKTtcbiB9XG5pZihwYXR0cy5zb21lKChwYXR0KT0+bWF0Y2hlcyhzcGVjaW1lbixwYXR0KSkpe1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBtYXRjaCBvbmUgb2YgJHtxKHBhdHRzKX1gKTtcbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDptYXRjaEFuZEhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCxcblxuZ2V0UmFua0NvdmVyOihwYXR0cyxlbmNvZGVQYXNzYWJsZSk9PlxudW5pb25SYW5rQ292ZXJzKFxuY29tcGFyZVJhbmssXG5wYXR0cy5tYXAoKHApPT5nZXRSYW5rQ292ZXIocCxlbmNvZGVQYXNzYWJsZSkpKX0pO1xuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoTm90SGVscGVyPUZhcignbWF0Y2g6bm90IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixwYXR0LGNoZWNrKT0+e1xuaWYobWF0Y2hlcyhzcGVjaW1lbixwYXR0KSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBmYWlsIG5lZ2F0ZWQgcGF0dGVybjogJHtxKHBhdHQpfWApO1xuXG4gfWVsc2V7XG5yZXR1cm4gdHJ1ZTtcbiB9XG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tQYXR0ZXJuLFxuXG5nZXRSYW5rQ292ZXI6KF9wYXR0LF9lbmNvZGVQYXNzYWJsZSk9PlsnJywneyddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU2NhbGFySGVscGVyPUZhcignbWF0Y2g6c2NhbGFyIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsY2hlY2spPT5cbmNoZWNrU2NhbGFyS2V5KHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoS2V5SGVscGVyPUZhcignbWF0Y2g6a2V5IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsY2hlY2spPT5cbmNoZWNrS2V5KHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoUGF0dGVybkhlbHBlcj1GYXIoJ21hdGNoOnBhdHRlcm4gaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLF9tYXRjaGVyUGF5bG9hZCxjaGVjayk9PlxuY2hlY2tQYXR0ZXJuKHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoS2luZEhlbHBlcj1GYXIoJ21hdGNoOmtpbmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6Y2hlY2tLaW5kLFxuXG5jaGVja0lzV2VsbEZvcm1lZDooYWxsZWdlZEtleUtpbmQsY2hlY2spPT5cbnR5cGVvZiBhbGxlZ2VkS2V5S2luZD09PSdzdHJpbmcnfHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBtYXRjaDpraW5kOiBwYXlsb2FkOiAke2FsbGVnZWRLZXlLaW5kfSAtIEEga2luZCBuYW1lIG11c3QgYmUgYSBzdHJpbmdgKSxcblxuXG5nZXRSYW5rQ292ZXI6KGtpbmQsX2VuY29kZVBhc3NhYmxlKT0+e1xubGV0IHN0eWxlO1xuc3dpdGNoKGtpbmQpe1xuY2FzZSdjb3B5U2V0JzpcbmNhc2UnY29weU1hcCc6e1xuc3R5bGU9J3RhZ2dlZCc7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnN0eWxlPWtpbmQ7XG5icmVhaztcbiB9fVxuXG5yZXR1cm4gZ2V0UGFzc1N0eWxlQ292ZXIoc3R5bGUpO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hUYWdnZWRIZWxwZXI9RmFyKCdtYXRjaDp0YWdnZWQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFt0YWdQYXR0LHBheWxvYWRQYXR0XSxjaGVjayk9PntcbmlmKHBhc3NTdHlsZU9mKHNwZWNpbWVuKSE9PSd0YWdnZWQnKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgRXhwZWN0ZWQgdGFnZ2VkIG9iamVjdCwgbm90ICR7cShcbnBhc3NTdHlsZU9mKHNwZWNpbWVuKSlcbiB9OiAke3NwZWNpbWVufWApO1xuXG4gfVxucmV0dXJuKFxuY2hlY2tNYXRjaGVzKGdldFRhZyhzcGVjaW1lbiksdGFnUGF0dCxjaGVjaywndGFnJykmJlxuY2hlY2tNYXRjaGVzKHNwZWNpbWVuLnBheWxvYWQscGF5bG9hZFBhdHQsY2hlY2ssJ3BheWxvYWQnKSk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tNYXRjaGVzKFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpLE1NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6dGFnZ2VkIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9raW5kLF9lbmNvZGVQYXNzYWJsZSk9PmdldFBhc3NTdHlsZUNvdmVyKCd0YWdnZWQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEJpZ2ludEhlbHBlcj1GYXIoJ21hdGNoOmJpZ2ludCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2xpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7ZGVjaW1hbERpZ2l0c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdiaWdpbnQnLGNoZWNrKSYmXG5jaGVja0RlY2ltYWxEaWdpdHNMaW1pdChzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW10pLFxuY2hlY2ssXG4nbWF0Y2g6YmlnaW50IHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcignYmlnaW50Jyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hOYXRIZWxwZXI9RmFyKCdtYXRjaDpuYXQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFtsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e2RlY2ltYWxEaWdpdHNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnYmlnaW50JyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbj49MG4sXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgbm9uLW5lZ2F0aXZlYCkmJlxuXG5jaGVja0RlY2ltYWxEaWdpdHNMaW1pdChzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW10pLFxuY2hlY2ssXG4nbWF0Y2g6bmF0IHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+XG4vL1xuZ2V0UGFzc1N0eWxlQ292ZXIoJ2JpZ2ludCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU3RyaW5nSGVscGVyPUZhcignbWF0Y2g6c3RyaW5nIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtzdHJpbmdMZW5ndGhMaW1pdH09bGltaXQobGltaXRzKTtcbi8vXG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ3N0cmluZycsY2hlY2spJiYoXG4vL1xuLyogICAgICAgICAgICAgICAgICovc3BlY2ltZW4ubGVuZ3RoPD1zdHJpbmdMZW5ndGhMaW1pdHx8XG5jaGVjayhcbmZhbHNlLFxuWCBgc3RyaW5nICR7c3BlY2ltZW59IG11c3Qgbm90IGJlIGJpZ2dlciB0aGFuICR7c3RyaW5nTGVuZ3RoTGltaXR9YCkpKTtcblxuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbXSksXG5jaGVjayxcbidtYXRjaDpzdHJpbmcgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdzdHJpbmcnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFN5bWJvbEhlbHBlcj1GYXIoJ21hdGNoOnN5bWJvbCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2xpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7c3ltYm9sTmFtZUxlbmd0aExpbWl0fT1saW1pdChsaW1pdHMpO1xuaWYoIWNoZWNrS2luZChzcGVjaW1lbiwnc3ltYm9sJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHN5bWJvbE5hbWU9bmFtZUZvclBhc3NhYmxlU3ltYm9sKHNwZWNpbWVuKTtcblxuaWYodHlwZW9mIHN5bWJvbE5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUGFzc2FibGUgc3ltYm9sICR7c3BlY2ltZW59IG11c3QgaGF2ZSBhIHBhc3NhYmxlIG5hbWVgO1xuIH1cbnJldHVybiBjaGVjayhcbnN5bWJvbE5hbWUubGVuZ3RoPD1zeW1ib2xOYW1lTGVuZ3RoTGltaXQsXG5YIGBTeW1ib2wgbmFtZSAke3EoXG5zeW1ib2xOYW1lKVxuIH0gbXVzdCBub3QgYmUgYmlnZ2VyIHRoYW4gJHtzeW1ib2xOYW1lTGVuZ3RoTGltaXR9YCk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtdKSxcbmNoZWNrLFxuJ21hdGNoOnN5bWJvbCBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlxuZ2V0UGFzc1N0eWxlQ292ZXIoJ3N5bWJvbCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoUmVtb3RhYmxlSGVscGVyPUZhcignbWF0Y2g6cmVtb3RhYmxlIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyZW1vdGFibGVEZXNjLGNoZWNrKT0+e1xuaWYoaXNLaW5kKHNwZWNpbWVuLCdyZW1vdGFibGUnKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihjaGVjaz09PWlkZW50Q2hlY2tlcil7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7bGFiZWx9PXJlbW90YWJsZURlc2M7XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2Yoc3BlY2ltZW4pO1xuY29uc3Qga2luZERldGFpbHM9XG5wYXNzU3R5bGUhPT0ndGFnZ2VkJz9cbi8vXG5iKHBhc3NTdHlsZSk6XG4vL1xuLy9cbnEoZ2V0VGFnKHNwZWNpbWVuKSk7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcbi8vXG4vL1xuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgcmVtb3RhYmxlICR7YihsYWJlbCl9LCBub3QgJHtraW5kRGV0YWlsc31gKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihhbGxlZ2VkUmVtb3RhYmxlRGVzYyxjaGVjayk9PlxuY2hlY2tNYXRjaGVzKFxuYWxsZWdlZFJlbW90YWJsZURlc2MsXG5oYXJkZW4oe2xhYmVsOk1NLnN0cmluZygpfSksXG5jaGVjayxcbidtYXRjaDpyZW1vdGFibGUgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX3JlbW90YWJsZURlc2MsX2VuY29kZVBhc3NhYmxlKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcigncmVtb3RhYmxlJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hMVEVIZWxwZXI9RmFyKCdtYXRjaDpsdGUgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5TFRFKHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCl8fFxuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIDw9ICR7cmlnaHRPcGVyYW5kfWApLFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja0tleSxcblxuZ2V0UmFua0NvdmVyOihyaWdodE9wZXJhbmQsZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmlnaHRPcGVyYW5kKTtcbi8vXG4vL1xuLy9cbmxldFtsZWZ0Qm91bmQscmlnaHRCb3VuZF09Z2V0UGFzc1N0eWxlQ292ZXIocGFzc1N0eWxlKTtcbmNvbnN0IG5ld1JpZ2h0Qm91bmQ9IGAke2VuY29kZVBhc3NhYmxlKHJpZ2h0T3BlcmFuZCl9fmA7XG5pZihuZXdSaWdodEJvdW5kIT09dW5kZWZpbmVkKXtcbnJpZ2h0Qm91bmQ9bmV3UmlnaHRCb3VuZDtcbiB9XG5yZXR1cm5bbGVmdEJvdW5kLHJpZ2h0Qm91bmRdO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hMVEhlbHBlcj1GYXIoJ21hdGNoOmx0IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyaWdodE9wZXJhbmQsY2hlY2spPT5cbmtleUxUKHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCl8fFxuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIDwgJHtyaWdodE9wZXJhbmR9YCksXG5cbmNoZWNrSXNXZWxsRm9ybWVkOmNoZWNrS2V5LFxuXG5nZXRSYW5rQ292ZXI6bWF0Y2hMVEVIZWxwZXIuZ2V0UmFua0NvdmVyfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoR1RFSGVscGVyPUZhcignbWF0Y2g6Z3RlIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyaWdodE9wZXJhbmQsY2hlY2spPT5cbmtleUdURShzcGVjaW1lbixyaWdodE9wZXJhbmQpfHxcbmNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSA+PSAke3JpZ2h0T3BlcmFuZH1gKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tLZXksXG5cbmdldFJhbmtDb3ZlcjoocmlnaHRPcGVyYW5kLGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJpZ2h0T3BlcmFuZCk7XG4vL1xuLy9cbi8vXG5sZXRbbGVmdEJvdW5kLHJpZ2h0Qm91bmRdPWdldFBhc3NTdHlsZUNvdmVyKHBhc3NTdHlsZSk7XG5jb25zdCBuZXdMZWZ0Qm91bmQ9ZW5jb2RlUGFzc2FibGUocmlnaHRPcGVyYW5kKTtcbmlmKG5ld0xlZnRCb3VuZCE9PXVuZGVmaW5lZCl7XG5sZWZ0Qm91bmQ9bmV3TGVmdEJvdW5kO1xuIH1cbnJldHVybltsZWZ0Qm91bmQscmlnaHRCb3VuZF07XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEdUSGVscGVyPUZhcignbWF0Y2g6Z3QgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5R1Qoc3BlY2ltZW4scmlnaHRPcGVyYW5kKXx8XG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmUgPiAke3JpZ2h0T3BlcmFuZH1gKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tLZXksXG5cbmdldFJhbmtDb3ZlcjptYXRjaEdURUhlbHBlci5nZXRSYW5rQ292ZXJ9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hSZWNvcmRPZkhlbHBlcj1GYXIoJ21hdGNoOnJlY29yZE9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW2tleVBhdHQsdmFsdWVQYXR0LGxpbWl0cz11bmRlZmluZWRdLFxuY2hlY2spPT5cbntcbmNvbnN0e251bVByb3BlcnRpZXNMaW1pdCxwcm9wZXJ0eU5hbWVMZW5ndGhMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weVJlY29yZCcsY2hlY2spJiZcbmNoZWNrKFxub3duS2V5cyhzcGVjaW1lbikubGVuZ3RoPD1udW1Qcm9wZXJ0aWVzTGltaXQsXG5YIGBNdXN0IG5vdCBoYXZlIG1vcmUgdGhhbiAke3EoXG5udW1Qcm9wZXJ0aWVzTGltaXQpXG4gfSBwcm9wZXJ0aWVzOiAke3NwZWNpbWVufWApJiZcblxuZW50cmllcyhzcGVjaW1lbikuZXZlcnkoXG4oW2tleSx2YWx1ZV0pPT5cbmFwcGx5TGFiZWxpbmdFcnJvcihcbmNoZWNrLFxuW1xua2V5Lmxlbmd0aDw9cHJvcGVydHlOYW1lTGVuZ3RoTGltaXQsXG5YIGBQcm9wZXJ0eSBuYW1lIG11c3Qgbm90IGJlIGxvbmdlciB0aGFuICR7cShcbnByb3BlcnR5TmFtZUxlbmd0aExpbWl0KVxuIH1gXSxcblxua2V5KSYmXG5cbmNoZWNrTWF0Y2hlcyhcbmhhcmRlbihba2V5LHZhbHVlXSksXG5oYXJkZW4oW2tleVBhdHQsdmFsdWVQYXR0XSksXG5jaGVjayxcbmtleSkpKTtcblxuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDpyZWNvcmRPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfZW50cnlQYXR0KT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ2NvcHlSZWNvcmQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEFycmF5T2ZIZWxwZXI9RmFyKCdtYXRjaDphcnJheU9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbc3ViUGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e2FycmF5TGVuZ3RoTGltaXR9PWxpbWl0KGxpbWl0cyk7XG4vL1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5QXJyYXknLGNoZWNrKSYmKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5sZW5ndGg8PWFycmF5TGVuZ3RoTGltaXR8fFxuY2hlY2soXG5mYWxzZSxcblggYEFycmF5IGxlbmd0aCAke3NwZWNpbWVuLmxlbmd0aH0gbXVzdCBiZSA8PSBsaW1pdCAke2FycmF5TGVuZ3RoTGltaXR9YCkpJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihzcGVjaW1lbixzdWJQYXR0LGNoZWNrKSk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCldKSxcbmNoZWNrLFxuJ21hdGNoOmFycmF5T2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooKT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ2NvcHlBcnJheScpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU2V0T2ZIZWxwZXI9RmFyKCdtYXRjaDpzZXRPZiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2tleVBhdHQsbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtudW1TZXRFbGVtZW50c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5U2V0JyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLnBheWxvYWQubGVuZ3RoPG51bVNldEVsZW1lbnRzTGltaXQsXG5YIGBTZXQgbXVzdCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtxKG51bVNldEVsZW1lbnRzTGltaXQpfSBlbGVtZW50czogJHtcbnNwZWNpbWVuLnBheWxvYWQubGVuZ3RoXG4gfWApJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihzcGVjaW1lbi5wYXlsb2FkLGtleVBhdHQsY2hlY2ssJ3NldCBlbGVtZW50cycpKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6c2V0T2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooKT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ3RhZ2dlZCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoQmFnT2ZIZWxwZXI9RmFyKCdtYXRjaDpiYWdPZiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltrZXlQYXR0LGNvdW50UGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxcbmNoZWNrKT0+XG57XG5jb25zdHtudW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0LGRlY2ltYWxEaWdpdHNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weUJhZycsY2hlY2spJiZcbmNoZWNrKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5wYXlsb2FkLmxlbmd0aDw9XG5udW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0LFxuWCBgQmFnIG11c3Qgbm90IGhhdmUgbW9yZSB0aGFuICR7cShcbm51bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQpXG4gfSB1bmlxdWUgZWxlbWVudHM6ICR7c3BlY2ltZW59YCkmJlxuXG5zcGVjaW1lbi5wYXlsb2FkLmV2ZXJ5KFxuKFtrZXksY291bnRdLGkpPT5cbmNoZWNrTWF0Y2hlcyhrZXksa2V5UGF0dCxjaGVjaywgYGJhZyBrZXlzWyR7aX1dYCkmJlxuYXBwbHlMYWJlbGluZ0Vycm9yKFxuY2hlY2tEZWNpbWFsRGlnaXRzTGltaXQsXG5bY291bnQsZGVjaW1hbERpZ2l0c0xpbWl0LGNoZWNrXSxcbiBgYmFnIGNvdW50c1ske2l9XWApJiZcblxuY2hlY2tNYXRjaGVzKGNvdW50LGNvdW50UGF0dCxjaGVjaywgYGJhZyBjb3VudHNbJHtpfV1gKSkpO1xuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDpiYWdPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOigpPT5nZXRQYXNzU3R5bGVDb3ZlcigndGFnZ2VkJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hNYXBPZkhlbHBlcj1GYXIoJ21hdGNoOm1hcE9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW2tleVBhdHQsdmFsdWVQYXR0LGxpbWl0cz11bmRlZmluZWRdLFxuY2hlY2spPT5cbntcbmNvbnN0e251bU1hcEVudHJpZXNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weU1hcCcsY2hlY2spJiZcbmNoZWNrKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5wYXlsb2FkLmtleXMubGVuZ3RoPD1cbm51bU1hcEVudHJpZXNMaW1pdCxcblggYENvcHlNYXAgbXVzdCBoYXZlIG5vIG1vcmUgdGhhbiAke3EoXG5udW1NYXBFbnRyaWVzTGltaXQpXG4gfSBlbnRyaWVzOiAke3NwZWNpbWVufWApJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihcbnNwZWNpbWVuLnBheWxvYWQua2V5cyxcbmtleVBhdHQsXG5jaGVjayxcbidtYXAga2V5cycpJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihcbnNwZWNpbWVuLnBheWxvYWQudmFsdWVzLFxudmFsdWVQYXR0LFxuY2hlY2ssXG4nbWFwIHZhbHVlcycpKTtcblxuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpLE1NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6bWFwT2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX2VudHJ5UGF0dCk9PmdldFBhc3NTdHlsZUNvdmVyKCd0YWdnZWQnKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHNwbGl0QXJyYXlQYXJ0cz0oc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk9PntcbmNvbnN0IG51bVJlcXVpcmVkPXJlcXVpcmVkUGF0dC5sZW5ndGg7XG5jb25zdCBudW1PcHRpb25hbD1vcHRpb25hbFBhdHQubGVuZ3RoO1xuY29uc3QgcmVxdWlyZWRTcGVjaW1lbj1zcGVjaW1lbi5zbGljZSgwLG51bVJlcXVpcmVkKTtcbmNvbnN0IG9wdGlvbmFsU3BlY2ltZW49c3BlY2ltZW4uc2xpY2UoXG5udW1SZXF1aXJlZCxcbm51bVJlcXVpcmVkK251bU9wdGlvbmFsKTtcblxuY29uc3QgcmVzdFNwZWNpbWVuPXNwZWNpbWVuLnNsaWNlKG51bVJlcXVpcmVkK251bU9wdGlvbmFsKTtcbnJldHVybiBoYXJkZW4oe3JlcXVpcmVkU3BlY2ltZW4sb3B0aW9uYWxTcGVjaW1lbixyZXN0U3BlY2ltZW59KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgYWRhcHRBcnJheVBhdHRlcm49KG9wdGlvbmFsUGF0dCxsZW5ndGgpPT5cbmhhcmRlbihvcHRpb25hbFBhdHQuc2xpY2UoMCxsZW5ndGgpLm1hcCgocGF0dCk9Pk1NLm9wdChwYXR0KSkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTcGxpdEFycmF5SGVscGVyPUZhcignbWF0Y2g6c3BsaXRBcnJheSBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0PVtdLHJlc3RQYXR0PU1NLmFueSgpXSxcbmNoZWNrKT0+XG57XG5pZighY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5QXJyYXknLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7cmVxdWlyZWRTcGVjaW1lbixvcHRpb25hbFNwZWNpbWVuLHJlc3RTcGVjaW1lbn09XG5zcGxpdEFycmF5UGFydHMoc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk7XG5jb25zdCBwYXJ0aWFsUGF0dD1hZGFwdEFycmF5UGF0dGVybihcbm9wdGlvbmFsUGF0dCxcbm9wdGlvbmFsU3BlY2ltZW4ubGVuZ3RoKTtcblxubGV0IGFyZ051bT0wO1xucmV0dXJuKFxuKHJlcXVpcmVkU3BlY2ltZW4ubGVuZ3RoPT09cmVxdWlyZWRQYXR0Lmxlbmd0aHx8XG5jaGVjayhcbmZhbHNlLFxuWCBgRXhwZWN0ZWQgYXQgbGVhc3QgJHtxKFxucmVxdWlyZWRQYXR0Lmxlbmd0aClcbiB9IGFyZ3VtZW50czogJHtzcGVjaW1lbn1gKSkmJlxuXG5yZXF1aXJlZFBhdHQuZXZlcnkoKHAsaSk9PlxuLy9cbmNoZWNrTWF0Y2hlcyhyZXF1aXJlZFNwZWNpbWVuW2ldLHAsY2hlY2ssIGBhcmcgJHthcmdOdW0rK31gKSkmJlxuXG5wYXJ0aWFsUGF0dC5ldmVyeSgocCxpKT0+XG4vL1xuY2hlY2tNYXRjaGVzKG9wdGlvbmFsU3BlY2ltZW5baV0scCxjaGVjaywgYGFyZyAke2FyZ051bSsrfT9gKSkmJlxuXG5jaGVja01hdGNoZXMocmVzdFNwZWNpbWVuLHJlc3RQYXR0LGNoZWNrLCcuLi5yZXN0JykpO1xuXG4gfSxcblxuLypcblxuXG4gICAgICovXG5jaGVja0lzV2VsbEZvcm1lZDooc3BsaXRBcnJheSxjaGVjayk9PntcbmlmKFxucGFzc1N0eWxlT2Yoc3BsaXRBcnJheSk9PT0nY29weUFycmF5JyYmKFxuc3BsaXRBcnJheS5sZW5ndGg+PTF8fHNwbGl0QXJyYXkubGVuZ3RoPD0zKSlcbntcbmNvbnN0W3JlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQ9dW5kZWZpbmVkLHJlc3RQYXR0PXVuZGVmaW5lZF09XG5zcGxpdEFycmF5O1xuaWYoXG5pc1BhdHRlcm4ocmVxdWlyZWRQYXR0KSYmXG5wYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpPT09J2NvcHlBcnJheScmJihcbm9wdGlvbmFsUGF0dD09PXVuZGVmaW5lZHx8XG5pc1BhdHRlcm4ob3B0aW9uYWxQYXR0KSYmXG5wYXNzU3R5bGVPZihvcHRpb25hbFBhdHQpPT09J2NvcHlBcnJheScpJiYoXG5yZXN0UGF0dD09PXVuZGVmaW5lZHx8aXNQYXR0ZXJuKHJlc3RQYXR0KSkpXG57XG5yZXR1cm4gdHJ1ZTtcbiB9XG4gfVxucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBNdXN0IGJlIGFuIGFycmF5IG9mIGEgcmVxdWlyZWRQYXR0IGFycmF5LCBhbiBvcHRpb25hbCBvcHRpb25hbFBhdHQgYXJyYXksIGFuZCBhbiBvcHRpb25hbCByZXN0UGF0dDogJHtxKFxuc3BsaXRBcnJheSlcbiB9YCk7XG5cbiB9LFxuXG5nZXRSYW5rQ292ZXI6KFtcbl9yZXF1aXJlZFBhdHQsXG5fb3B0aW9uYWxQYXR0PXVuZGVmaW5lZCxcbl9yZXN0UGF0dD11bmRlZmluZWRdKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcignY29weUFycmF5Jyl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBzcGxpdFJlY29yZFBhcnRzPShzcGVjaW1lbixyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0KT0+e1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXF1aXJlZEVudHJpZXM9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgb3B0aW9uYWxFbnRyaWVzPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3RFbnRyaWVzPVtdO1xuZm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgZW50cmllcyhzcGVjaW1lbikpe1xuaWYoaGFzT3duUHJvcGVydHlPZihyZXF1aXJlZFBhdHQsbmFtZSkpe1xucmVxdWlyZWRFbnRyaWVzLnB1c2goW25hbWUsdmFsdWVdKTtcbiB9ZWxzZSBpZihoYXNPd25Qcm9wZXJ0eU9mKG9wdGlvbmFsUGF0dCxuYW1lKSl7XG5vcHRpb25hbEVudHJpZXMucHVzaChbbmFtZSx2YWx1ZV0pO1xuIH1lbHNle1xucmVzdEVudHJpZXMucHVzaChbbmFtZSx2YWx1ZV0pO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtcbnJlcXVpcmVkU3BlY2ltZW46ZnJvbVVuaXF1ZUVudHJpZXMocmVxdWlyZWRFbnRyaWVzKSxcbm9wdGlvbmFsU3BlY2ltZW46ZnJvbVVuaXF1ZUVudHJpZXMob3B0aW9uYWxFbnRyaWVzKSxcbnJlc3RTcGVjaW1lbjpmcm9tVW5pcXVlRW50cmllcyhyZXN0RW50cmllcyl9KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhZGFwdFJlY29yZFBhdHRlcm49KG9wdGlvbmFsUGF0dCxuYW1lcyk9PlxuZnJvbVVuaXF1ZUVudHJpZXMobmFtZXMubWFwKChuYW1lKT0+W25hbWUsTU0ub3B0KG9wdGlvbmFsUGF0dFtuYW1lXSldKSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFNwbGl0UmVjb3JkSGVscGVyPUZhcignbWF0Y2g6c3BsaXRSZWNvcmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KFxuc3BlY2ltZW4sXG5bcmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dD17fSxyZXN0UGF0dD1NTS5hbnkoKV0sXG5jaGVjayk9Plxue1xuaWYoIWNoZWNrS2luZChzcGVjaW1lbiwnY29weVJlY29yZCcsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdHtyZXF1aXJlZFNwZWNpbWVuLG9wdGlvbmFsU3BlY2ltZW4scmVzdFNwZWNpbWVufT1cbnNwbGl0UmVjb3JkUGFydHMoc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk7XG5cbmNvbnN0IHBhcnRpYWxOYW1lcz0vKiAgICAgICAgICAgICAgICAgICAqL293bktleXMob3B0aW9uYWxTcGVjaW1lbik7XG5jb25zdCBwYXJ0aWFsUGF0dD1hZGFwdFJlY29yZFBhdHRlcm4ob3B0aW9uYWxQYXR0LHBhcnRpYWxOYW1lcyk7XG5yZXR1cm4oXG5jaGVja01hdGNoZXMocmVxdWlyZWRTcGVjaW1lbixyZXF1aXJlZFBhdHQsY2hlY2spJiZcbnBhcnRpYWxOYW1lcy5ldmVyeSgobmFtZSk9PlxuY2hlY2tNYXRjaGVzKFxub3B0aW9uYWxTcGVjaW1lbltuYW1lXSxcbnBhcnRpYWxQYXR0W25hbWVdLFxuY2hlY2ssXG4gYCR7bmFtZX0/YCkpJiZcblxuXG5jaGVja01hdGNoZXMocmVzdFNwZWNpbWVuLHJlc3RQYXR0LGNoZWNrLCcuLi5yZXN0JykpO1xuXG4gfSxcblxuLypcblxuXG4gICAgICovXG5jaGVja0lzV2VsbEZvcm1lZDooc3BsaXRBcnJheSxjaGVjayk9PntcbmlmKFxucGFzc1N0eWxlT2Yoc3BsaXRBcnJheSk9PT0nY29weUFycmF5JyYmKFxuc3BsaXRBcnJheS5sZW5ndGg+PTF8fHNwbGl0QXJyYXkubGVuZ3RoPD0zKSlcbntcbmNvbnN0W3JlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQ9dW5kZWZpbmVkLHJlc3RQYXR0PXVuZGVmaW5lZF09XG5zcGxpdEFycmF5O1xuaWYoXG5pc1BhdHRlcm4ocmVxdWlyZWRQYXR0KSYmXG5wYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpPT09J2NvcHlSZWNvcmQnJiYoXG5vcHRpb25hbFBhdHQ9PT11bmRlZmluZWR8fFxuaXNQYXR0ZXJuKG9wdGlvbmFsUGF0dCkmJlxucGFzc1N0eWxlT2Yob3B0aW9uYWxQYXR0KT09PSdjb3B5UmVjb3JkJykmJihcbnJlc3RQYXR0PT09dW5kZWZpbmVkfHxpc1BhdHRlcm4ocmVzdFBhdHQpKSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYE11c3QgYmUgYW4gYXJyYXkgb2YgYSByZXF1aXJlZFBhdHQgcmVjb3JkLCBhbiBvcHRpb25hbCBvcHRpb25hbFBhdHQgcmVjb3JkLCBhbmQgYW4gb3B0aW9uYWwgcmVzdFBhdHQ6ICR7cShcbnNwbGl0QXJyYXkpXG4gfWApO1xuXG4gfSxcblxuZ2V0UmFua0NvdmVyOihbXG5yZXF1aXJlZFBhdHQsXG5fb3B0aW9uYWxQYXR0PXVuZGVmaW5lZCxcbl9yZXN0UGF0dD11bmRlZmluZWRdKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcihwYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgSGVscGVyc0J5TWF0Y2hUYWc9aGFyZGVuKHtcbidtYXRjaDphbnknOm1hdGNoQW55SGVscGVyLFxuJ21hdGNoOmFuZCc6bWF0Y2hBbmRIZWxwZXIsXG4nbWF0Y2g6b3InOm1hdGNoT3JIZWxwZXIsXG4nbWF0Y2g6bm90JzptYXRjaE5vdEhlbHBlcixcblxuJ21hdGNoOnNjYWxhcic6bWF0Y2hTY2FsYXJIZWxwZXIsXG4nbWF0Y2g6a2V5JzptYXRjaEtleUhlbHBlcixcbidtYXRjaDpwYXR0ZXJuJzptYXRjaFBhdHRlcm5IZWxwZXIsXG4nbWF0Y2g6a2luZCc6bWF0Y2hLaW5kSGVscGVyLFxuJ21hdGNoOnRhZ2dlZCc6bWF0Y2hUYWdnZWRIZWxwZXIsXG4nbWF0Y2g6YmlnaW50JzptYXRjaEJpZ2ludEhlbHBlcixcbidtYXRjaDpuYXQnOm1hdGNoTmF0SGVscGVyLFxuJ21hdGNoOnN0cmluZyc6bWF0Y2hTdHJpbmdIZWxwZXIsXG4nbWF0Y2g6c3ltYm9sJzptYXRjaFN5bWJvbEhlbHBlcixcbidtYXRjaDpyZW1vdGFibGUnOm1hdGNoUmVtb3RhYmxlSGVscGVyLFxuXG4nbWF0Y2g6bHQnOm1hdGNoTFRIZWxwZXIsXG4nbWF0Y2g6bHRlJzptYXRjaExURUhlbHBlcixcbidtYXRjaDpndGUnOm1hdGNoR1RFSGVscGVyLFxuJ21hdGNoOmd0JzptYXRjaEdUSGVscGVyLFxuXG4nbWF0Y2g6YXJyYXlPZic6bWF0Y2hBcnJheU9mSGVscGVyLFxuJ21hdGNoOnJlY29yZE9mJzptYXRjaFJlY29yZE9mSGVscGVyLFxuJ21hdGNoOnNldE9mJzptYXRjaFNldE9mSGVscGVyLFxuJ21hdGNoOmJhZ09mJzptYXRjaEJhZ09mSGVscGVyLFxuJ21hdGNoOm1hcE9mJzptYXRjaE1hcE9mSGVscGVyLFxuJ21hdGNoOnNwbGl0QXJyYXknOm1hdGNoU3BsaXRBcnJheUhlbHBlcixcbidtYXRjaDpzcGxpdFJlY29yZCc6bWF0Y2hTcGxpdFJlY29yZEhlbHBlcn0pO1xuXG5cbmNvbnN0IG1ha2VNYXRjaGVyPSh0YWcscGF5bG9hZCk9PntcbmNvbnN0IG1hdGNoZXI9bWFrZVRhZ2dlZCh0YWcscGF5bG9hZCk7XG5hc3NlcnRQYXR0ZXJuKG1hdGNoZXIpO1xucmV0dXJuIG1hdGNoZXI7XG4gfTtcblxuY29uc3QgbWFrZUtpbmRNYXRjaGVyPShraW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmtpbmQnLGtpbmQpO1xuXG5jb25zdCBBbnlTaGFwZT1tYWtlTWF0Y2hlcignbWF0Y2g6YW55Jyx1bmRlZmluZWQpO1xuY29uc3QgU2NhbGFyU2hhcGU9bWFrZU1hdGNoZXIoJ21hdGNoOnNjYWxhcicsdW5kZWZpbmVkKTtcbmNvbnN0IEtleVNoYXBlPW1ha2VNYXRjaGVyKCdtYXRjaDprZXknLHVuZGVmaW5lZCk7XG5jb25zdCBQYXR0ZXJuU2hhcGU9bWFrZU1hdGNoZXIoJ21hdGNoOnBhdHRlcm4nLHVuZGVmaW5lZCk7XG5jb25zdCBCb29sZWFuU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdib29sZWFuJyk7XG5jb25zdCBOdW1iZXJTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ251bWJlcicpO1xuY29uc3QgQmlnSW50U2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6YmlnaW50JyxbXSk7XG5jb25zdCBOYXRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpuYXQnLFtdKTtcbmNvbnN0IFN0cmluZ1NoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOnN0cmluZycsW10pO1xuY29uc3QgU3ltYm9sU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6c3ltYm9sJyxbXSk7XG5jb25zdCBSZWNvcmRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpyZWNvcmRPZicsW0FueVNoYXBlLEFueVNoYXBlXSk7XG5jb25zdCBBcnJheVNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOmFycmF5T2YnLFtBbnlTaGFwZV0pO1xuY29uc3QgU2V0U2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6c2V0T2YnLFtBbnlTaGFwZV0pO1xuY29uc3QgQmFnU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6YmFnT2YnLFtBbnlTaGFwZSxBbnlTaGFwZV0pO1xuY29uc3QgTWFwU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6bWFwT2YnLFtBbnlTaGFwZSxBbnlTaGFwZV0pO1xuY29uc3QgUmVtb3RhYmxlU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdyZW1vdGFibGUnKTtcbmNvbnN0IEVycm9yU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdlcnJvcicpO1xuY29uc3QgUHJvbWlzZVNoYXBlPW1ha2VLaW5kTWF0Y2hlcigncHJvbWlzZScpO1xuY29uc3QgVW5kZWZpbmVkU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCd1bmRlZmluZWQnKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlTGltaXRzTWF0Y2hlcj0odGFnLHBheWxvYWQpPT57XG5pZihwYXlsb2FkW3BheWxvYWQubGVuZ3RoLTFdPT09dW5kZWZpbmVkKXtcbnBheWxvYWQ9aGFyZGVuKHBheWxvYWQuc2xpY2UoMCxwYXlsb2FkLmxlbmd0aC0xKSk7XG4gfVxucmV0dXJuIG1ha2VNYXRjaGVyKHRhZyxwYXlsb2FkKTtcbiB9O1xuXG5jb25zdCBtYWtlUmVtb3RhYmxlTWF0Y2hlcj0obGFiZWw9dW5kZWZpbmVkKT0+XG5sYWJlbD09PXVuZGVmaW5lZD9cblJlbW90YWJsZVNoYXBlOlxubWFrZU1hdGNoZXIoJ21hdGNoOnJlbW90YWJsZScsaGFyZGVuKHtsYWJlbH0pKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlU3BsaXRQYXlsb2FkPShcbmVtcHR5LFxuYmFzZSxcbm9wdGlvbmFsPXVuZGVmaW5lZCxcbnJlc3Q9dW5kZWZpbmVkKT0+XG57XG5pZihyZXN0KXtcbnJldHVybltiYXNlLG9wdGlvbmFsfHxlbXB0eSxyZXN0XTtcbiB9XG5pZihvcHRpb25hbCl7XG5yZXR1cm5bYmFzZSxvcHRpb25hbF07XG4gfVxucmV0dXJuW2Jhc2VdO1xuIH07XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IE09aGFyZGVuKHtcbmFueTooKT0+QW55U2hhcGUsXG5hbmQ6KC4uLnBhdHRzKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmFuZCcscGF0dHMpLFxub3I6KC4uLnBhdHRzKT0+bWFrZU1hdGNoZXIoJ21hdGNoOm9yJyxwYXR0cyksXG5ub3Q6KHN1YlBhdHQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6bm90JyxzdWJQYXR0KSxcblxuc2NhbGFyOigpPT5TY2FsYXJTaGFwZSxcbmtleTooKT0+S2V5U2hhcGUsXG5wYXR0ZXJuOigpPT5QYXR0ZXJuU2hhcGUsXG5raW5kOm1ha2VLaW5kTWF0Y2hlcixcbnRhZ2dlZDoodGFnUGF0dD1NLnN0cmluZygpLHBheWxvYWRQYXR0PU0uYW55KCkpPT5cbm1ha2VNYXRjaGVyKCdtYXRjaDp0YWdnZWQnLGhhcmRlbihbdGFnUGF0dCxwYXlsb2FkUGF0dF0pKSxcbmJvb2xlYW46KCk9PkJvb2xlYW5TaGFwZSxcbm51bWJlcjooKT0+TnVtYmVyU2hhcGUsXG5iaWdpbnQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6YmlnaW50JyxbbGltaXRzXSk6QmlnSW50U2hhcGUsXG5uYXQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6bmF0JyxbbGltaXRzXSk6TmF0U2hhcGUsXG5zdHJpbmc6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c3RyaW5nJyxbbGltaXRzXSk6U3RyaW5nU2hhcGUsXG5zeW1ib2w6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c3ltYm9sJyxbbGltaXRzXSk6U3ltYm9sU2hhcGUsXG5yZWNvcmQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9NLnJlY29yZE9mKE0uYW55KCksTS5hbnkoKSxsaW1pdHMpOlJlY29yZFNoYXBlLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmFycmF5OihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/TS5hcnJheU9mKE0uYW55KCksbGltaXRzKTpBcnJheVNoYXBlLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuc2V0OihsaW1pdHM9dW5kZWZpbmVkKT0+bGltaXRzP00uc2V0T2YoTS5hbnkoKSxsaW1pdHMpOlNldFNoYXBlLFxuYmFnOihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/TS5iYWdPZihNLmFueSgpLE0uYW55KCksbGltaXRzKTpCYWdTaGFwZSxcbm1hcDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP00ubWFwT2YoTS5hbnkoKSxNLmFueSgpLGxpbWl0cyk6TWFwU2hhcGUsXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmVtb3RhYmxlOm1ha2VSZW1vdGFibGVNYXRjaGVyLFxuZXJyb3I6KCk9PkVycm9yU2hhcGUsXG5wcm9taXNlOigpPT5Qcm9taXNlU2hhcGUsXG51bmRlZmluZWQ6KCk9PlVuZGVmaW5lZFNoYXBlLFxubnVsbDooKT0+bnVsbCxcblxubHQ6KHJpZ2h0T3BlcmFuZCk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpsdCcscmlnaHRPcGVyYW5kKSxcbmx0ZToocmlnaHRPcGVyYW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmx0ZScscmlnaHRPcGVyYW5kKSxcbmVxOihrZXkpPT57XG5hc3NlcnRLZXkoa2V5KTtcbnJldHVybiBrZXk9PT11bmRlZmluZWQ/TS51bmRlZmluZWQoKTprZXk7XG4gfSxcbm5lcTooa2V5KT0+TS5ub3QoTS5lcShrZXkpKSxcbmd0ZToocmlnaHRPcGVyYW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmd0ZScscmlnaHRPcGVyYW5kKSxcbmd0OihyaWdodE9wZXJhbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6Z3QnLHJpZ2h0T3BlcmFuZCksXG5cbnJlY29yZE9mOihrZXlQYXR0PU0uYW55KCksdmFsdWVQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOnJlY29yZE9mJyxba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzXSksXG5hcnJheU9mOihzdWJQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOmFycmF5T2YnLFtzdWJQYXR0LGxpbWl0c10pLFxuc2V0T2Y6KGtleVBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c2V0T2YnLFtrZXlQYXR0LGxpbWl0c10pLFxuYmFnT2Y6KGtleVBhdHQ9TS5hbnkoKSxjb3VudFBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6YmFnT2YnLFtrZXlQYXR0LGNvdW50UGF0dCxsaW1pdHNdKSxcbm1hcE9mOihrZXlQYXR0PU0uYW55KCksdmFsdWVQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOm1hcE9mJyxba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzXSksXG5zcGxpdEFycmF5OihiYXNlLG9wdGlvbmFsPXVuZGVmaW5lZCxyZXN0PXVuZGVmaW5lZCk9PlxubWFrZU1hdGNoZXIoXG4nbWF0Y2g6c3BsaXRBcnJheScsXG5tYWtlU3BsaXRQYXlsb2FkKFtdLGJhc2Usb3B0aW9uYWwscmVzdCkpLFxuXG5zcGxpdFJlY29yZDooYmFzZSxvcHRpb25hbD11bmRlZmluZWQscmVzdD11bmRlZmluZWQpPT5cbm1ha2VNYXRjaGVyKFxuJ21hdGNoOnNwbGl0UmVjb3JkJyxcbm1ha2VTcGxpdFBheWxvYWQoe30sYmFzZSxvcHRpb25hbCxyZXN0KSksXG5cbnNwbGl0OihiYXNlLHJlc3Q9dW5kZWZpbmVkKT0+e1xuaWYocGFzc1N0eWxlT2YoaGFyZGVuKGJhc2UpKT09PSdjb3B5QXJyYXknKXtcbi8vXG4vL1xucmV0dXJuIE0uc3BsaXRBcnJheShiYXNlLHJlc3QmJltdLHJlc3QpO1xuIH1lbHNle1xucmV0dXJuIE0uc3BsaXRSZWNvcmQoYmFzZSxyZXN0JiZ7fSxyZXN0KTtcbiB9XG4gfSxcbnBhcnRpYWw6KGJhc2UscmVzdD11bmRlZmluZWQpPT57XG5pZihwYXNzU3R5bGVPZihoYXJkZW4oYmFzZSkpPT09J2NvcHlBcnJheScpe1xuLy9cbi8vXG5yZXR1cm4gTS5zcGxpdEFycmF5KFtdLGJhc2UscmVzdCk7XG4gfWVsc2V7XG5yZXR1cm4gTS5zcGxpdFJlY29yZCh7fSxiYXNlLHJlc3QpO1xuIH1cbiB9LFxuXG5lcmVmOih0KT0+TS5vcih0LE0ucHJvbWlzZSgpKSxcbm9wdDoodCk9Pk0ub3IoTS51bmRlZmluZWQoKSx0KSxcblxuaW50ZXJmYWNlOihpbnRlcmZhY2VOYW1lLG1ldGhvZEd1YXJkcyxvcHRpb25zKT0+XG4vL1xubWFrZUludGVyZmFjZUd1YXJkKGludGVyZmFjZU5hbWUsbWV0aG9kR3VhcmRzLG9wdGlvbnMpLFxuY2FsbDooLi4uYXJnUGF0dGVybnMpPT5cbi8vXG5tYWtlTWV0aG9kR3VhcmRNYWtlcignc3luYycsYXJnUGF0dGVybnMpLFxuY2FsbFdoZW46KC4uLmFyZ0d1YXJkcyk9PlxuLy9cbm1ha2VNZXRob2RHdWFyZE1ha2VyKCdhc3luYycsYXJnR3VhcmRzKSxcblxuYXdhaXQ6KGFyZ1BhdHRlcm4pPT5cbi8vXG5tYWtlQXdhaXRBcmdHdWFyZChhcmdQYXR0ZXJuKSxcbnJhdzooKT0+XG4vL1xubWFrZVJhd0d1YXJkKCl9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmNoZWNrTWF0Y2hlcyxcbm1hdGNoZXMsXG5tdXN0TWF0Y2gsXG5hc3NlcnRQYXR0ZXJuLFxuaXNQYXR0ZXJuLFxuZ2V0UmFua0NvdmVyLFxuTSxcbmtpbmRPZn0pO1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgICAgICAge1xuY2hlY2tNYXRjaGVzLFxubWF0Y2hlcyxcbm11c3RNYXRjaCxcbmFzc2VydFBhdHRlcm4sXG5pc1BhdHRlcm4sXG5nZXRSYW5rQ292ZXIsXG5NLFxua2luZE9mfT1cbm1ha2VQYXR0ZXJuS2l0KCk7JGjNj19vbmNlLmNoZWNrTWF0Y2hlcyhjaGVja01hdGNoZXMpOyRozY9fb25jZS5tYXRjaGVzKG1hdGNoZXMpOyRozY9fb25jZS5tdXN0TWF0Y2gobXVzdE1hdGNoKTskaM2PX29uY2UuYXNzZXJ0UGF0dGVybihhc3NlcnRQYXR0ZXJuKTskaM2PX29uY2UuaXNQYXR0ZXJuKGlzUGF0dGVybik7JGjNj19vbmNlLmdldFJhbmtDb3ZlcihnZXRSYW5rQ292ZXIpOyRozY9fb25jZS5NKE0pOyRozY9fb25jZS5raW5kT2Yoa2luZE9mKTtcblxuTU09TTtcblxuLy9cblxuLy9cbmNvbnN0IEF3YWl0QXJnR3VhcmRQYXlsb2FkU2hhcGU9aGFyZGVuKHtcbmFyZ0d1YXJkOk0ucGF0dGVybigpfSk7XG5cblxuY29uc3QgICAgICAgIEF3YWl0QXJnR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOmF3YWl0QXJnR3VhcmQnKTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuQXdhaXRBcmdHdWFyZFNoYXBlKEF3YWl0QXJnR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgaXNBd2FpdEFyZ0d1YXJkPShzcGVjaW1lbik9PlxubWF0Y2hlcyhzcGVjaW1lbixBd2FpdEFyZ0d1YXJkU2hhcGUpOyRozY9fb25jZS5pc0F3YWl0QXJnR3VhcmQoaXNBd2FpdEFyZ0d1YXJkKTtcbmhhcmRlbihpc0F3YWl0QXJnR3VhcmQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydEF3YWl0QXJnR3VhcmQ9KHNwZWNpbWVuKT0+e1xubXVzdE1hdGNoKHNwZWNpbWVuLEF3YWl0QXJnR3VhcmRTaGFwZSwnYXdhaXRBcmdHdWFyZCcpO1xuIH07JGjNj19vbmNlLmFzc2VydEF3YWl0QXJnR3VhcmQoYXNzZXJ0QXdhaXRBcmdHdWFyZCk7XG5oYXJkZW4oYXNzZXJ0QXdhaXRBcmdHdWFyZCk7XG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlQXdhaXRBcmdHdWFyZD0oYXJnUGF0dGVybik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1tYWtlVGFnZ2VkKCdndWFyZDphd2FpdEFyZ0d1YXJkJyx7XG5hcmdHdWFyZDphcmdQYXR0ZXJufSk7XG5cbmFzc2VydEF3YWl0QXJnR3VhcmQocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLy9cblxuY29uc3QgUmF3R3VhcmRQYXlsb2FkU2hhcGU9TS5yZWNvcmQoKTtcblxuY29uc3QgICAgICAgIFJhd0d1YXJkU2hhcGU9TS5raW5kKCdndWFyZDpyYXdHdWFyZCcpOyRozY9fb25jZS5SYXdHdWFyZFNoYXBlKFJhd0d1YXJkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgaXNSYXdHdWFyZD0oc3BlY2ltZW4pPT5tYXRjaGVzKHNwZWNpbWVuLFJhd0d1YXJkU2hhcGUpOyRozY9fb25jZS5pc1Jhd0d1YXJkKGlzUmF3R3VhcmQpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0UmF3R3VhcmQ9KHNwZWNpbWVuKT0+XG5tdXN0TWF0Y2goc3BlY2ltZW4sUmF3R3VhcmRTaGFwZSwncmF3R3VhcmQnKTtcblxuLypcblxuICovJGjNj19vbmNlLmFzc2VydFJhd0d1YXJkKGFzc2VydFJhd0d1YXJkKTtcbmNvbnN0IG1ha2VSYXdHdWFyZD0oKT0+bWFrZVRhZ2dlZCgnZ3VhcmQ6cmF3R3VhcmQnLHt9KTtcblxuLy9cbi8vXG5cbmNvbnN0ICAgICAgICBTeW5jVmFsdWVHdWFyZFNoYXBlPU0ub3IoUmF3R3VhcmRTaGFwZSxNLnBhdHRlcm4oKSk7JGjNj19vbmNlLlN5bmNWYWx1ZUd1YXJkU2hhcGUoU3luY1ZhbHVlR3VhcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBTeW5jVmFsdWVHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoU3luY1ZhbHVlR3VhcmRTaGFwZSk7JGjNj19vbmNlLlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKTtcblxuY29uc3QgQXJnR3VhcmRTaGFwZT1NLm9yKFJhd0d1YXJkU2hhcGUsQXdhaXRBcmdHdWFyZFNoYXBlLE0ucGF0dGVybigpKTtcbmNvbnN0ICAgICAgICBBcmdHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoQXJnR3VhcmRTaGFwZSk7JGjNj19vbmNlLkFyZ0d1YXJkTGlzdFNoYXBlKEFyZ0d1YXJkTGlzdFNoYXBlKTtcblxuY29uc3QgU3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlPWhhcmRlbih7XG5jYWxsS2luZDonc3luYycsXG5hcmdHdWFyZHM6U3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsXG5vcHRpb25hbEFyZ0d1YXJkczpNLm9wdChTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSksXG5yZXN0QXJnR3VhcmQ6TS5vcHQoU3luY1ZhbHVlR3VhcmRTaGFwZSksXG5yZXR1cm5HdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSk7XG5cblxuY29uc3QgQXN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZT1oYXJkZW4oe1xuY2FsbEtpbmQ6J2FzeW5jJyxcbmFyZ0d1YXJkczpBcmdHdWFyZExpc3RTaGFwZSxcbm9wdGlvbmFsQXJnR3VhcmRzOk0ub3B0KEFyZ0d1YXJkTGlzdFNoYXBlKSxcbnJlc3RBcmdHdWFyZDpNLm9wdChTeW5jVmFsdWVHdWFyZFNoYXBlKSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5jb25zdCAgICAgICAgTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGU9TS5vcihcblN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZSxcbkFzeW5jTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUpOyRozY9fb25jZS5NZXRob2RHdWFyZFBheWxvYWRTaGFwZShNZXRob2RHdWFyZFBheWxvYWRTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIE1ldGhvZEd1YXJkU2hhcGU9TS5raW5kKCdndWFyZDptZXRob2RHdWFyZCcpO1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5NZXRob2RHdWFyZFNoYXBlKE1ldGhvZEd1YXJkU2hhcGUpO1xuY29uc3QgICAgICAgIGFzc2VydE1ldGhvZEd1YXJkPShzcGVjaW1lbik9Pntcbm11c3RNYXRjaChzcGVjaW1lbixNZXRob2RHdWFyZFNoYXBlLCdtZXRob2RHdWFyZCcpO1xuIH07JGjNj19vbmNlLmFzc2VydE1ldGhvZEd1YXJkKGFzc2VydE1ldGhvZEd1YXJkKTtcbmhhcmRlbihhc3NlcnRNZXRob2RHdWFyZCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlTWV0aG9kR3VhcmRNYWtlcj0oXG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPXVuZGVmaW5lZCxcbnJlc3RBcmdHdWFyZD11bmRlZmluZWQpPT5cblxuaGFyZGVuKHtcbm9wdGlvbmFsOiguLi5vcHRBcmdHdWFyZHMpPT57XG5vcHRpb25hbEFyZ0d1YXJkcz09PXVuZGVmaW5lZHx8XG5GYWlsIGBDYW4gb25seSBoYXZlIG9uZSBzZXQgb2Ygb3B0aW9uYWwgZ3VhcmRzYDtcbnJlc3RBcmdHdWFyZD09PXVuZGVmaW5lZHx8XG5GYWlsIGBvcHRpb25hbCBhcmcgZ3VhcmRzIG11c3QgY29tZSBiZWZvcmUgcmVzdCBhcmdgO1xucmV0dXJuIG1ha2VNZXRob2RHdWFyZE1ha2VyKGNhbGxLaW5kLGFyZ0d1YXJkcyxvcHRBcmdHdWFyZHMpO1xuIH0sXG5yZXN0OihyQXJnR3VhcmQpPT57XG5yZXN0QXJnR3VhcmQ9PT11bmRlZmluZWR8fEZhaWwgYENhbiBvbmx5IGhhdmUgb25lIHJlc3QgYXJnYDtcbnJldHVybiBtYWtlTWV0aG9kR3VhcmRNYWtlcihcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yQXJnR3VhcmQpO1xuXG4gfSxcbnJldHVybnM6KHJldHVybkd1YXJkPU0udW5kZWZpbmVkKCkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOm1ldGhvZEd1YXJkJyx7XG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzLFxucmVzdEFyZ0d1YXJkLFxucmV0dXJuR3VhcmR9KTtcblxuYXNzZXJ0TWV0aG9kR3VhcmQocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfX0pO1xuXG5cbmNvbnN0ICAgICAgICBJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xuaW50ZXJmYWNlTmFtZTpNLnN0cmluZygpLFxubWV0aG9kR3VhcmRzOk0ucmVjb3JkT2YoTS5zdHJpbmcoKSxNZXRob2RHdWFyZFNoYXBlKX0sXG5cbntcbmRlZmF1bHRHdWFyZHM6TS5vcihNLnVuZGVmaW5lZCgpLCdwYXNzYWJsZScsJ3JhdycpLFxuc2xvcHB5Ok0uYm9vbGVhbigpLFxuc3ltYm9sTWV0aG9kR3VhcmRzOk0ubWFwT2YoTS5zeW1ib2woKSxNZXRob2RHdWFyZFNoYXBlKX0pOyRozY9fb25jZS5JbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZShJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSk7XG5cblxuXG5jb25zdCAgICAgICAgSW50ZXJmYWNlR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOmludGVyZmFjZUd1YXJkJyk7XG5cbi8qXG5cblxuICovJGjNj19vbmNlLkludGVyZmFjZUd1YXJkU2hhcGUoSW50ZXJmYWNlR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgYXNzZXJ0SW50ZXJmYWNlR3VhcmQ9KHNwZWNpbWVuKT0+e1xubXVzdE1hdGNoKHNwZWNpbWVuLEludGVyZmFjZUd1YXJkU2hhcGUsJ2ludGVyZmFjZUd1YXJkJyk7XG4gfTskaM2PX29uY2UuYXNzZXJ0SW50ZXJmYWNlR3VhcmQoYXNzZXJ0SW50ZXJmYWNlR3VhcmQpO1xuaGFyZGVuKGFzc2VydEludGVyZmFjZUd1YXJkKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbnRlcmZhY2VHdWFyZD0oaW50ZXJmYWNlTmFtZSxtZXRob2RHdWFyZHMsb3B0aW9ucz17fSk9PntcbmNvbnN0e3Nsb3BweT1mYWxzZSxkZWZhdWx0R3VhcmRzPXNsb3BweT8ncGFzc2FibGUnOnVuZGVmaW5lZH09XG5vcHRpb25zO1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdNZXRob2RHdWFyZHM9e307XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzPVtdO1xuZm9yKGNvbnN0IGtleSBvZiBvd25LZXlzKG1ldGhvZEd1YXJkcykpe1xuY29uc3QgdmFsdWU9bWV0aG9kR3VhcmRzWy8qICAgICAgICAgICAgICAgICAqL2tleV07XG5pZih0eXBlb2Yga2V5PT09J3N5bWJvbCcpe1xuc3ltYm9sTWV0aG9kR3VhcmRzRW50cmllcy5wdXNoKFtrZXksdmFsdWVdKTtcbiB9ZWxzZXtcbnN0cmluZ01ldGhvZEd1YXJkc1trZXldPXZhbHVlO1xuIH1cbiB9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOmludGVyZmFjZUd1YXJkJyx7XG5pbnRlcmZhY2VOYW1lLFxubWV0aG9kR3VhcmRzOnN0cmluZ01ldGhvZEd1YXJkcyxcbi4uLihzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzLmxlbmd0aD9cbntzeW1ib2xNZXRob2RHdWFyZHM6bWFrZUNvcHlNYXAoc3ltYm9sTWV0aG9kR3VhcmRzRW50cmllcyl9Olxue30pLFxuZGVmYXVsdEd1YXJkc30pO1xuXG5hc3NlcnRJbnRlcmZhY2VHdWFyZChyZXN1bHQpO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3Jlc3VsdCk7XG4gfTtcblxuY29uc3QgR3VhcmRQYXlsb2FkU2hhcGVzPWhhcmRlbih7XG4nZ3VhcmQ6YXdhaXRBcmdHdWFyZCc6QXdhaXRBcmdHdWFyZFBheWxvYWRTaGFwZSxcbidndWFyZDpyYXdHdWFyZCc6UmF3R3VhcmRQYXlsb2FkU2hhcGUsXG4nZ3VhcmQ6bWV0aG9kR3VhcmQnOk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLFxuJ2d1YXJkOmludGVyZmFjZUd1YXJkJzpJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZX0pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdExpbWl0cyI6WyJkZWZhdWx0TGltaXRzIl0sImNoZWNrTWF0Y2hlcyI6WyJjaGVja01hdGNoZXMiXSwibWF0Y2hlcyI6WyJtYXRjaGVzIl0sIm11c3RNYXRjaCI6WyJtdXN0TWF0Y2giXSwiYXNzZXJ0UGF0dGVybiI6WyJhc3NlcnRQYXR0ZXJuIl0sImlzUGF0dGVybiI6WyJpc1BhdHRlcm4iXSwiZ2V0UmFua0NvdmVyIjpbImdldFJhbmtDb3ZlciJdLCJNIjpbIk0iXSwia2luZE9mIjpbImtpbmRPZiJdLCJBd2FpdEFyZ0d1YXJkU2hhcGUiOlsiQXdhaXRBcmdHdWFyZFNoYXBlIl0sImlzQXdhaXRBcmdHdWFyZCI6WyJpc0F3YWl0QXJnR3VhcmQiXSwiYXNzZXJ0QXdhaXRBcmdHdWFyZCI6WyJhc3NlcnRBd2FpdEFyZ0d1YXJkIl0sIlJhd0d1YXJkU2hhcGUiOlsiUmF3R3VhcmRTaGFwZSJdLCJpc1Jhd0d1YXJkIjpbImlzUmF3R3VhcmQiXSwiYXNzZXJ0UmF3R3VhcmQiOlsiYXNzZXJ0UmF3R3VhcmQiXSwiU3luY1ZhbHVlR3VhcmRTaGFwZSI6WyJTeW5jVmFsdWVHdWFyZFNoYXBlIl0sIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIjpbIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIl0sIkFyZ0d1YXJkTGlzdFNoYXBlIjpbIkFyZ0d1YXJkTGlzdFNoYXBlIl0sIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIjpbIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIl0sIk1ldGhvZEd1YXJkU2hhcGUiOlsiTWV0aG9kR3VhcmRTaGFwZSJdLCJhc3NlcnRNZXRob2RHdWFyZCI6WyJhc3NlcnRNZXRob2RHdWFyZCJdLCJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSI6WyJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSJdLCJJbnRlcmZhY2VHdWFyZFNoYXBlIjpbIkludGVyZmFjZUd1YXJkU2hhcGUiXSwiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiOlsiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABLrDk0oBAABKAQAAIgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANIBosRCBgAAQgYAACEAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiLCIuL3NyYy9tZW1vLXJhY2UuanMiLCIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJtYWtlUHJvbWlzZUtpdCIsInJhY2VQcm9taXNlcyJdLCJyZWV4cG9ydHMiOlsiLi9zcmMvaXMtcHJvbWlzZS5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCxtZW1vUmFjZTskaM2PX2ltcG9ydHMoW1tcIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzXCIsIFtbXCJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9zcmMvbWVtby1yYWNlLmpzXCIsIFtbXCJtZW1vUmFjZVwiLCBbJGjNj19hID0+IChtZW1vUmFjZSA9ICRozY9fYSldXV1dLFtcIi4vc3JjL2lzLXByb21pc2UuanNcIiwgW11dLFtcIi4vc3JjL3R5cGVzLmpzXCIsIFtdXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlUHJvbWlzZUtpdCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZVByb21pc2VLaXRcIn0pOyRozY9fb25jZS5tYWtlUHJvbWlzZUtpdChtYWtlUHJvbWlzZUtpdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJhY2VQcm9taXNlcywgJ25hbWUnLCB7dmFsdWU6IFwicmFjZVByb21pc2VzXCJ9KTskaM2PX29uY2UucmFjZVByb21pc2VzKHJhY2VQcm9taXNlcyk7ICAgXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBCZXN0UGlwZWxpbmFibGVQcm9taXNlPWdsb2JhbFRoaXMuSGFuZGxlZFByb21pc2V8fFByb21pc2U7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBtYWtlUHJvbWlzZUtpdCgpe1xuY29uc3R7cmVzb2x2ZSxyZWplY3QsZXhlY3V0b3J9PW1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCgpO1xuXG5jb25zdCBwcm9taXNlPW5ldyBCZXN0UGlwZWxpbmFibGVQcm9taXNlKGV4ZWN1dG9yKTtcblxucmV0dXJuIGhhcmRlbih7cHJvbWlzZSxyZXNvbHZlLHJlamVjdH0pO1xuIH1cbmhhcmRlbihtYWtlUHJvbWlzZUtpdCk7XG5cbi8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIHJhY2VQcm9taXNlcyh2YWx1ZXMpe1xucmV0dXJuIGhhcmRlbihtZW1vUmFjZS5jYWxsKEJlc3RQaXBlbGluYWJsZVByb21pc2UsdmFsdWVzKSk7XG4gfVxuaGFyZGVuKHJhY2VQcm9taXNlcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUHJvbWlzZUtpdCI6WyJtYWtlUHJvbWlzZUtpdCJdLCJyYWNlUHJvbWlzZXMiOlsicmFjZVByb21pc2VzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALNdW0ZVAgAAVQIAACoAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgvc3JjL2lzLXByb21pc2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImlzUHJvbWlzZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlzUHJvbWlzZSwgJ25hbWUnLCB7dmFsdWU6IFwiaXNQcm9taXNlXCJ9KTskaM2PX29uY2UuaXNQcm9taXNlKGlzUHJvbWlzZSk7ICAgLypcblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgaXNQcm9taXNlKG1heWJlUHJvbWlzZSl7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1heWJlUHJvbWlzZSk9PT1tYXliZVByb21pc2U7XG4gfVxuaGFyZGVuKGlzUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Byb21pc2UiOlsiaXNQcm9taXNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPpm8JGcBwAAnAcAACkAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgvc3JjL21lbW8tcmFjZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWVtb1JhY2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4qL1xuXG5jb25zdCBpc09iamVjdD0odmFsdWUpPT5PYmplY3QodmFsdWUpPT09dmFsdWU7XG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBrbm93blByb21pc2VzPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuICovXG5jb25zdCBtYXJrU2V0dGxlZD0ocmVjb3JkKT0+e1xuaWYoIXJlY29yZHx8cmVjb3JkLnNldHRsZWQpe1xucmV0dXJuIG5ldyBTZXQoKTtcbiB9XG5cbmNvbnN0e2RlZmVycmVkc309cmVjb3JkO1xuT2JqZWN0LmFzc2lnbihyZWNvcmQse1xuZGVmZXJyZWRzOnVuZGVmaW5lZCxcbnNldHRsZWQ6dHJ1ZX0pO1xuXG5PYmplY3QuZnJlZXplKHJlY29yZCk7XG5yZXR1cm4gZGVmZXJyZWRzO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGdldE1lbW9SZWNvcmQ9KHZhbHVlKT0+e1xuaWYoIWlzT2JqZWN0KHZhbHVlKSl7XG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGhhcmRlbih7c2V0dGxlZDp0cnVlfSk7XG4gfVxuXG5sZXQgcmVjb3JkPWtub3duUHJvbWlzZXMuZ2V0KHZhbHVlKTtcblxuaWYoIXJlY29yZCl7XG5yZWNvcmQ9e2RlZmVycmVkczpuZXcgU2V0KCksc2V0dGxlZDpmYWxzZX07XG5rbm93blByb21pc2VzLnNldCh2YWx1ZSxyZWNvcmQpO1xuLy9cblByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihcbih2YWwpPT57XG5mb3IoY29uc3R7cmVzb2x2ZX1vZiBtYXJrU2V0dGxlZChyZWNvcmQpKXtcbnJlc29sdmUodmFsKTtcbiB9XG4gfSxcbihlcnIpPT57XG5mb3IoY29uc3R7cmVqZWN0fW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVqZWN0KGVycik7XG4gfVxuIH0pO1xuXG4gfVxucmV0dXJuIHJlY29yZDtcbiB9O1xuXG5jb25zdHtyYWNlfT17XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5yYWNlKHZhbHVlcyl7XG5sZXQgZGVmZXJyZWQ7XG4vKiAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBjYWNoZWRWYWx1ZXM9W107XG5jb25zdCBDPXRoaXM7XG5jb25zdCByZXN1bHQ9bmV3IEMoKHJlc29sdmUscmVqZWN0KT0+e1xuZGVmZXJyZWQ9e3Jlc29sdmUscmVqZWN0fTtcbmZvcihjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpe1xuY2FjaGVkVmFsdWVzLnB1c2godmFsdWUpO1xuY29uc3R7c2V0dGxlZCxkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoc2V0dGxlZCl7XG4vL1xuLy9cbkMucmVzb2x2ZSh2YWx1ZSkudGhlbihyZXNvbHZlLHJlamVjdCk7XG4gfWVsc2V7XG5kZWZlcnJlZHMuYWRkKGRlZmVycmVkKTtcbiB9XG4gfVxuIH0pO1xuXG4vL1xuLy9cbnJldHVybiByZXN1bHQuZmluYWxseSgoKT0+e1xuZm9yKGNvbnN0IHZhbHVlIG9mIGNhY2hlZFZhbHVlcyl7XG5jb25zdHtkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoZGVmZXJyZWRzKXtcbmRlZmVycmVkcy5kZWxldGUoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG4gfX07JGjNj19vbmNlLnJhY2UocmFjZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtZW1vUmFjZSI6WyJyYWNlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJxtxLJ8BQAAfAUAADQAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjgvc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlc29sdmU7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZWplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXNvbHZlPSh2YWx1ZSk9PntcbmlmKGludGVybmFsUmVzb2x2ZSl7XG5pbnRlcm5hbFJlc29sdmUodmFsdWUpO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PW51bGwpO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlamVjdD0ocmVhc29uKT0+e1xuaWYoaW50ZXJuYWxSZWplY3Qpe1xuaW50ZXJuYWxSZWplY3QocmVhc29uKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlamVjdD09PW51bGwpO1xuIH1cbiB9O1xuXG5jb25zdCBleGVjdXRvcj0ocmVzLHJlaik9PntcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT11bmRlZmluZWQmJmludGVybmFsUmVqZWN0PT09dW5kZWZpbmVkKTtcbmludGVybmFsUmVzb2x2ZT1yZXM7XG5pbnRlcm5hbFJlamVjdD1yZWo7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7cmVzb2x2ZSxyZWplY3QsZXhlY3V0b3J9KTtcbiB9OyRozY9fb25jZS5tYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQobWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KTtcbmhhcmRlbihtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0IjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAEusOTSgEAAEoBAAAlAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44L3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA3Gj3QpARAACQEQAAHAAAAEBlbmRvL3N0cmVhbS12MS4yLjgvaW5kZXguanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0Il0sImV4cG9ydHMiOlsibWFrZVBpcGUiLCJtYWtlUXVldWUiLCJtYWtlU3RyZWFtIiwibWFwUmVhZGVyIiwibWFwV3JpdGVyIiwicHJpbWUiLCJwdW1wIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsbWFrZVByb21pc2VLaXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy9cbi8vXG4vL1xuY29uc3QgZnJlZXplPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9PYmplY3QuZnJlZXplO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VRdWV1ZT0oKT0+e1xubGV0e3Byb21pc2U6dGFpbFByb21pc2UscmVzb2x2ZTp0YWlsUmVzb2x2ZX09bWFrZVByb21pc2VLaXQoKTtcbnJldHVybntcbnB1dCh2YWx1ZSl7XG5jb25zdHtyZXNvbHZlLHByb21pc2V9PW1ha2VQcm9taXNlS2l0KCk7XG50YWlsUmVzb2x2ZShmcmVlemUoe3ZhbHVlLHByb21pc2V9KSk7XG50YWlsUmVzb2x2ZT1yZXNvbHZlO1xuIH0sXG5nZXQoKXtcbmNvbnN0IHByb21pc2U9dGFpbFByb21pc2UudGhlbigobmV4dCk9Pm5leHQudmFsdWUpO1xudGFpbFByb21pc2U9dGFpbFByb21pc2UudGhlbigobmV4dCk9Pm5leHQucHJvbWlzZSk7XG5yZXR1cm4gaGFyZGVuKHByb21pc2UpO1xuIH19O1xuXG4gfTskaM2PX29uY2UubWFrZVF1ZXVlKG1ha2VRdWV1ZSk7XG5oYXJkZW4obWFrZVF1ZXVlKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTdHJlYW09KGFja3MsZGF0YSk9PntcbmNvbnN0IHN0cmVhbT1oYXJkZW4oe1xuLypcblxuICAgICAqL1xubmV4dCh2YWx1ZSl7XG4vL1xuLy9cbmRhdGEucHV0KGZyZWV6ZSh7dmFsdWUsZG9uZTpmYWxzZX0pKTtcbnJldHVybiBhY2tzLmdldCgpO1xuIH0sXG4vKlxuXG4gICAgICovXG5yZXR1cm4odmFsdWUpe1xuZGF0YS5wdXQoZnJlZXplKHt2YWx1ZSxkb25lOnRydWV9KSk7XG5yZXR1cm4gYWNrcy5nZXQoKTtcbiB9LFxuLypcblxuICAgICAqL1xudGhyb3coZXJyb3Ipe1xuZGF0YS5wdXQoaGFyZGVuKFByb21pc2UucmVqZWN0KGVycm9yKSkpO1xucmV0dXJuIGFja3MuZ2V0KCk7XG4gfSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtcbnJldHVybiBzdHJlYW07XG4gfX0pO1xuXG5yZXR1cm4gc3RyZWFtO1xuIH07JGjNj19vbmNlLm1ha2VTdHJlYW0obWFrZVN0cmVhbSk7XG5oYXJkZW4obWFrZVN0cmVhbSk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0ICAgICAgICBtYWtlUGlwZT0oKT0+e1xuY29uc3QgZGF0YT1tYWtlUXVldWUoKTtcbmNvbnN0IGFja3M9bWFrZVF1ZXVlKCk7XG5jb25zdCByZWFkZXI9bWFrZVN0cmVhbShhY2tzLGRhdGEpO1xuY29uc3Qgd3JpdGVyPW1ha2VTdHJlYW0oZGF0YSxhY2tzKTtcbnJldHVybiBoYXJkZW4oW3dyaXRlcixyZWFkZXJdKTtcbiB9OyRozY9fb25jZS5tYWtlUGlwZShtYWtlUGlwZSk7XG5oYXJkZW4obWFrZVBpcGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwdW1wPWFzeW5jKHdyaXRlcixyZWFkZXIscHJpbWVyKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdGljaz0ocHJvbWlzZSk9PlxuRS53aGVuKFxucHJvbWlzZSxcbihyZXN1bHQpPT57XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gd3JpdGVyLnJldHVybihyZXN1bHQudmFsdWUpO1xuIH1lbHNle1xuLy9cbi8vXG5yZXR1cm4gdG9jayh3cml0ZXIubmV4dChyZXN1bHQudmFsdWUpKTtcbiB9XG4gfSxcbigvKiAgICAgICAgICAgICAgICAqL2Vycm9yKT0+e1xucmV0dXJuIHdyaXRlci50aHJvdyhlcnJvcik7XG4gfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdG9jaz0ocHJvbWlzZSk9PlxuRS53aGVuKFxucHJvbWlzZSxcbihyZXN1bHQpPT57XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVhZGVyLnJldHVybihyZXN1bHQudmFsdWUpO1xuIH1lbHNle1xucmV0dXJuIHRpY2socmVhZGVyLm5leHQocmVzdWx0LnZhbHVlKSk7XG4gfVxuIH0sXG4oLyogICAgICAgICAgICAgICAgKi9lcnJvcik9PntcbnJldHVybiByZWFkZXIudGhyb3coZXJyb3IpO1xuIH0pO1xuXG5hd2FpdCB0aWNrKHJlYWRlci5uZXh0KHByaW1lcikpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9OyRozY9fb25jZS5wdW1wKHB1bXApO1xuaGFyZGVuKHB1bXApO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByaW1lPShnZW5lcmF0b3IscHJpbWVyKT0+e1xuLy9cbmNvbnN0IGZpcnN0PWdlbmVyYXRvci5uZXh0KHByaW1lcik7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmVzdWx0O1xuY29uc3QgcHJpbWVkPWhhcmRlbih7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICBhc3luYyBuZXh0KHZhbHVlKXtcbmlmKHJlc3VsdD09PXVuZGVmaW5lZCl7XG4vL1xucmVzdWx0PWF3YWl0IGZpcnN0O1xuaWYocmVzdWx0LmRvbmUpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxucmV0dXJuIGdlbmVyYXRvci5uZXh0KHZhbHVlKTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIHJldHVybih2YWx1ZSl7XG5pZihyZXN1bHQ9PT11bmRlZmluZWQpe1xuLy9cbnJlc3VsdD1hd2FpdCBmaXJzdDtcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbnJldHVybiBnZW5lcmF0b3IucmV0dXJuKHZhbHVlKTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICBhc3luYyB0aHJvdyhlcnJvcil7XG5pZihyZXN1bHQ9PT11bmRlZmluZWQpe1xuLy9cbnJlc3VsdD1hd2FpdCBmaXJzdDtcbmlmKHJlc3VsdC5kb25lKXtcbnRocm93IGVycm9yO1xuIH1cbiB9XG5yZXR1cm4gZ2VuZXJhdG9yLnRocm93KGVycm9yKTtcbiB9fSk7XG5cbnJldHVybiBwcmltZWQ7XG4gfTskaM2PX29uY2UucHJpbWUocHJpbWUpO1xuaGFyZGVuKHByaW1lKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYXBSZWFkZXI9KHJlYWRlcix0cmFuc2Zvcm0pPT57XG5hc3luYyBmdW5jdGlvbip0cmFuc2Zvcm1HZW5lcmF0b3IoKXtcbmZvciBhd2FpdChjb25zdCB2YWx1ZSBvZiByZWFkZXIpe1xueWllbGQgdHJhbnNmb3JtKHZhbHVlKTtcbiB9XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmhhcmRlbih0cmFuc2Zvcm1HZW5lcmF0b3IpO1xucmV0dXJuIGhhcmRlbih0cmFuc2Zvcm1HZW5lcmF0b3IoKSk7XG4gfTskaM2PX29uY2UubWFwUmVhZGVyKG1hcFJlYWRlcik7XG5oYXJkZW4obWFwUmVhZGVyKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYXBXcml0ZXI9KHdyaXRlcix0cmFuc2Zvcm0pPT57XG5jb25zdCB0cmFuc2Zvcm1lZFdyaXRlcj1oYXJkZW4oe1xuLypcblxuICAgICAqL1xuICAgICAgYXN5bmMgbmV4dCh2YWx1ZSl7XG5yZXR1cm4gd3JpdGVyLm5leHQodHJhbnNmb3JtKHZhbHVlKSk7XG4gfSxcbi8qXG5cbiAgICAgKi9cbiAgICAgIGFzeW5jIHRocm93KGVycm9yKXtcbnJldHVybiB3cml0ZXIudGhyb3coZXJyb3IpO1xuIH0sXG4vKlxuXG4gICAgICovXG4gICAgICBhc3luYyByZXR1cm4odmFsdWUpe1xucmV0dXJuIHdyaXRlci5yZXR1cm4odmFsdWUpO1xuIH0sXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7XG5yZXR1cm4gdHJhbnNmb3JtZWRXcml0ZXI7XG4gfX0pO1xuXG5yZXR1cm4gdHJhbnNmb3JtZWRXcml0ZXI7XG4gfTskaM2PX29uY2UubWFwV3JpdGVyKG1hcFdyaXRlcik7XG5oYXJkZW4obWFwV3JpdGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VRdWV1ZSI6WyJtYWtlUXVldWUiXSwibWFrZVN0cmVhbSI6WyJtYWtlU3RyZWFtIl0sIm1ha2VQaXBlIjpbIm1ha2VQaXBlIl0sInB1bXAiOlsicHVtcCJdLCJwcmltZSI6WyJwcmltZSJdLCJtYXBSZWFkZXIiOlsibWFwUmVhZGVyIl0sIm1hcFdyaXRlciI6WyJtYXBXcml0ZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAZlcRCcMBAADDAQAAHAAAAGplc3NpZS5qcy12MC4zLjQvc3JjL21haW4uanN7ImltcG9ydHMiOlsiLi9yaW5nMC9tYWluLmpzIiwiLi9yaW5nMS9tYWluLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9yaW5nMC9tYWluLmpzIiwiLi9yaW5nMS9tYWluLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3JpbmcwL21haW4uanNcIiwgW11dLFtcIi4vcmluZzEvbWFpbi5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACQYc8DcwEAAHMBAAAfAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvRS5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyJAZW5kby9mYXIiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADg9bkfbwIAAG8CAAAsAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImFzeW5jR2VuZXJhdGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3luY0dlbmVyYXRlPShuZXh0KT0+e1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT57XG5yZXR1cm4gaGFyZGVuKHtcbm5leHQ6YXN5bmMoKT0+aGFyZGVuKG5leHQoKSl9KTtcblxuIH19KTtcblxuIH07JGjNj19vbmNlLmFzeW5jR2VuZXJhdGUoYXN5bmNHZW5lcmF0ZSk7XG5oYXJkZW4oYXN5bmNHZW5lcmF0ZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3luY0dlbmVyYXRlIjpbImFzeW5jR2VuZXJhdGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA/34fduYBAADmAQAAIgAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL21haW4uanN7ImltcG9ydHMiOlsiLi9FLmpzIiwiLi9tYWtlcnMuanMiLCIuL2FzeW5jLWdlbmVyYXRlLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9FLmpzIiwiLi9hc3luYy1nZW5lcmF0ZS5qcyIsIi4vbWFrZXJzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL0UuanNcIiwgW11dLFtcIi4vbWFrZXJzLmpzXCIsIFtdXSxbXCIuL2FzeW5jLWdlbmVyYXRlLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADcX0E7MBwAAzAcAACQAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9tYWtlcnMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VNYXAiLCJtYWtlUHJvbWlzZSIsIm1ha2VTZXQiLCJtYWtlV2Vha01hcCIsIm1ha2VXZWFrU2V0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VQcm9taXNlPShleGVjdXRvcik9PmhhcmRlbihuZXcgUHJvbWlzZShleGVjdXRvcikpOyRozY9fb25jZS5tYWtlUHJvbWlzZShtYWtlUHJvbWlzZSk7XG5oYXJkZW4obWFrZVByb21pc2UpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZU1hcD0oZW50cmllc09ySXRlcmFibGUpPT5oYXJkZW4obmV3IE1hcChlbnRyaWVzT3JJdGVyYWJsZSkpOyRozY9fb25jZS5tYWtlTWFwKG1ha2VNYXApO1xuaGFyZGVuKG1ha2VNYXApO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VTZXQ9KHZhbHVlcyk9PmhhcmRlbihuZXcgU2V0KHZhbHVlcykpOyRozY9fb25jZS5tYWtlU2V0KG1ha2VTZXQpO1xuaGFyZGVuKG1ha2VTZXQpO1xuXG4vKlxuXG5cblxuICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtNYXA9KGVudHJpZXMpPT5oYXJkZW4obmV3IFdlYWtNYXAoZW50cmllcykpOyRozY9fb25jZS5tYWtlV2Vha01hcChtYWtlV2Vha01hcCk7XG5oYXJkZW4obWFrZVdlYWtNYXApO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlV2Vha1NldD0odmFsdWVzKT0+aGFyZGVuKG5ldyBXZWFrU2V0KHZhbHVlcykpOyRozY9fb25jZS5tYWtlV2Vha1NldChtYWtlV2Vha1NldCk7XG5oYXJkZW4obWFrZVdlYWtTZXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVByb21pc2UiOlsibWFrZVByb21pc2UiXSwibWFrZU1hcCI6WyJtYWtlTWFwIl0sIm1ha2VTZXQiOlsibWFrZVNldCJdLCJtYWtlV2Vha01hcCI6WyJtYWtlV2Vha01hcCJdLCJtYWtlV2Vha1NldCI6WyJtYWtlV2Vha1NldCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACKNuO+SQMAAEkDAAApAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanN7ImltcG9ydHMiOlsiLi4vcmluZzAvbWFpbi5qcyJdLCJleHBvcnRzIjpbImFzeW5jRG9XaGlsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlUHJvbWlzZTskaM2PX2ltcG9ydHMoW1tcIi4uL3JpbmcwL21haW4uanNcIiwgW1tcIm1ha2VQcm9taXNlXCIsIFskaM2PX2EgPT4gKG1ha2VQcm9taXNlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXN5bmNEb1doaWxlPShib2R5KT0+e1xucmV0dXJuIG1ha2VQcm9taXNlKChyZXNvbHZlLHJlamVjdCk9PntcbmNvbnN0IGxvb3A9YXN5bmMoKT0+e1xuY29uc3QgZG9Db250aW51ZT1hd2FpdCBib2R5KCk7XG5pZighZG9Db250aW51ZSl7XG4vL1xucmVzb2x2ZSh1bmRlZmluZWQpO1xucmV0dXJuO1xuIH1cblxuLy9cbi8vXG5sb29wKCkuY2F0Y2gocmVqZWN0KTtcbiB9O1xuXG5sb29wKCkuY2F0Y2gocmVqZWN0KTtcbiB9KTtcbiB9OyRozY9fb25jZS5hc3luY0RvV2hpbGUoYXN5bmNEb1doaWxlKTtcbmhhcmRlbihhc3luY0RvV2hpbGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXN5bmNEb1doaWxlIjpbImFzeW5jRG9XaGlsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAGbyZCiAEAAIgBAAAiAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvbWFpbi5qc3siaW1wb3J0cyI6WyIuL2FzeW5jLXRvb2xzLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9hc3luYy10b29scy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9hc3luYy10b29scy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsBAh4DCgAAAAAAAAAAAA+yW2MF+wAABfsAABQAAAAAAAAAAAAAAKSBAAAAAGNvbXBhcnRtZW50LW1hcC5qc29uUEsBAh4DCgAAAAAAAAAAAAULvaB/AQAAfwEAACYAAAAAAAAAAAAAAKSBN/sAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTguMS9oZWFwLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAAC0AAAAAAAAAAAAAAKSB+vwAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTguMS9zcmMvZXhwb3J0cy5qc1BLAQIeAwoAAAAAAAAAAAAS3H/kWQoAAFkKAAAqAAAAAAAAAAAAAACkgY/+AABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE4LjEvc3JjL2hlYXAuanNQSwECHgMKAAAAAAAAAAAA7lq3z2sCAABrAgAAKwAAAAAAAAAAAAAApIEwCQEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4xLXUxOC4xL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAB16UGuWAIAAFgCAAAxAAAAAAAAAAAAAACkgeQLAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE4LjEvc3JjL2lzLXBhc3NhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAB5pTBl1AwAAdQMAACoAAAAAAAAAAAAAAKSBiw4BAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMS11MTguMS9zcmMva2V5cy5qc1BLAQIeAwoAAAAAAAAAAAAfQoYp4gYAAOIGAAAvAAAAAAAAAAAAAACkgUgSAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE4LjEvc3JjL21ha2Utb25jZS5qc1BLAQIeAwoAAAAAAAAAAADvarSSXwkAAF8JAAAzAAAAAAAAAAAAAACkgXcZAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjEtdTE4LjEvc3JjL3dhdGNoLXByb21pc2UuanNQSwECHgMKAAAAAAAAAAAAdfTNnPkEAAD5BAAAJwAAAAAAAAAAAAAApIEnIwEAQGFnb3JpYy9jYWNoZS12MC4zLjMtdTE4LjEvc3JjL2NhY2hlLmpzUEsBAh4DCgAAAAAAAAAAAL0AucgDAgAAAwIAACYAAAAAAAAAAAAAAKSBZSgBAEBhZ29yaWMvY2FjaGUtdjAuMy4zLXUxOC4xL3NyYy9tYWluLmpzUEsBAh4DCgAAAAAAAAAAAB7Z1uwMBAAADAQAACcAAAAAAAAAAAAAAKSBrCoBAEBhZ29yaWMvY2FjaGUtdjAuMy4zLXUxOC4xL3NyYy9zdGF0ZS5qc1BLAQIeAwoAAAAAAAAAAADte8F7ghcAAIIXAAAnAAAAAAAAAAAAAACkgf0uAQBAYWdvcmljL2NhY2hlLXYwLjMuMy11MTguMS9zcmMvc3RvcmUuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAJwAAAAAAAAAAAAAApIHERgEAQGFnb3JpYy9jYWNoZS12MC4zLjMtdTE4LjEvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAFzNqocAHQAAAB0AACwAAAAAAAAAAAAAAKSBU0gBAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxOC4xL3NyYy9hbW91bnRNYXRoLmpzUEsBAh4DCgAAAAAAAAAAAIFGxYXUAwAA1AMAAC0AAAAAAAAAAAAAAKSBnWUBAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxOC4xL3NyYy9hbW91bnRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAADood0axwUAAMcFAAAtAAAAAAAAAAAAAACkgbxpAQBAYWdvcmljL2VydHAtdjAuMTYuMy11MTguMS9zcmMvZGlzcGxheUluZm8uanNQSwECHgMKAAAAAAAAAAAAI44yaj8CAAA/AgAAJwAAAAAAAAAAAAAApIHObwEAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE4LjEvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAGiU08lqFgAAahYAACsAAAAAAAAAAAAAAKSBUnIBAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxOC4xL3NyYy9pc3N1ZXJLaXQuanNQSwECHgMKAAAAAAAAAAAA5Ktj7uEFAADhBQAAQAAAAAAAAAAAAAAApIEFiQEAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE4LjEvc3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAABBhY94nwUAAJ8FAABAAAAAAAAAAAAAAACkgUSPAQBAYWdvcmljL2VydHAtdjAuMTYuMy11MTguMS9zcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAJUrcMlnBAAAZwQAADwAAAAAAAAAAAAAAKSBQZUBAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxOC4xL3NyYy9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAABHCrnjSAYAAEgGAAA8AAAAAAAAAAAAAACkgQKaAQBAYWdvcmljL2VydHAtdjAuMTYuMy11MTguMS9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAANj9K1X8DAAB/AwAAKQAAAAAAAAAAAAAApIGkoAEAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE4LjEvc3JjL3BheW1lbnQuanNQSwECHgMKAAAAAAAAAAAASy2n++sfAADrHwAALwAAAAAAAAAAAAAApIFqpAEAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE4LjEvc3JjL3BheW1lbnRMZWRnZXIuanNQSwECHgMKAAAAAAAAAAAAHcTRCroQAAC6EAAAJwAAAAAAAAAAAAAApIGixAEAQGFnb3JpYy9lcnRwLXYwLjE2LjMtdTE4LjEvc3JjL3B1cnNlLmpzUEsBAh4DCgAAAAAAAAAAAIqZY8jWBQAA1gUAADMAAAAAAAAAAAAAAKSBodUBAEBhZ29yaWMvZXJ0cC12MC4xNi4zLXUxOC4xL3NyYy90cmFuc2llbnROb3RpZmllci5qc1BLAQIeAwoAAAAAAAAAAAASMHBOzBgAAMwYAAAsAAAAAAAAAAAAAACkgcjbAQBAYWdvcmljL2VydHAtdjAuMTYuMy11MTguMS9zcmMvdHlwZUd1YXJkcy5qc1BLAQIeAwoAAAAAAAAAAAAEusOTSgEAAEoBAAAtAAAAAAAAAAAAAACkgd70AQBAYWdvcmljL2VydHAtdjAuMTYuMy11MTguMS9zcmMvdHlwZXMtaW5kZXguanNQSwECHgMKAAAAAAAAAAAAVtFXEekZAADpGQAALQAAAAAAAAAAAAAApIFz9gEAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE4LjEvc3JjL2NhbGxiYWNrLmpzUEsBAh4DCgAAAAAAAAAAADID/RnNBQAAzQUAACsAAAAAAAAAAAAAAKSBpxACAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xL3NyYy9jb25maWcuanNQSwECHgMKAAAAAAAAAAAAnKi0l0gEAABIBAAAKgAAAAAAAAAAAAAApIG9FgIAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE4LjEvc3JjL2RlYnVnLmpzUEsBAh4DCgAAAAAAAAAAAALV4MKOAgAAjgIAACsAAAAAAAAAAAAAAKSBTRsCAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xL3NyYy9lcnJvcnMuanNQSwECHgMKAAAAAAAAAAAA5/KMFHMFAABzBQAAKgAAAAAAAAAAAAAApIEkHgIAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE4LjEvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAMwvptUfBwAAHwcAAC0AAAAAAAAAAAAAAKSB3yMCAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xL3NyYy9qcy11dGlscy5qc1BLAQIeAwoAAAAAAAAAAAAmbRSr0xUAANMVAAA1AAAAAAAAAAAAAACkgUkrAgBAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMS9zcmMvbGliLWNoYWluU3RvcmFnZS5qc1BLAQIeAwoAAAAAAAAAAADVVbjWERAAABEQAAAsAAAAAAAAAAAAAACkgW9BAgBAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMS9zcmMvbWFyc2hhbC5qc1BLAQIeAwoAAAAAAAAAAAC2vSFeawgAAGsIAAAxAAAAAAAAAAAAAACkgcpRAgBAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMS9zcmMvbWV0aG9kLXRvb2xzLmpzUEsBAh4DCgAAAAAAAAAAAJoFH6+GHQAAhh0AAC4AAAAAAAAAAAAAAKSBhFoCAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xL3NyYy9zZXMtdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAAnV2/RUhAAAVIQAANwAAAAAAAAAAAAAApIFWeAIAQGFnb3JpYy9pbnRlcm5hbC12MC40LjAtdTE4LjEvc3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qc1BLAQIeAwoAAAAAAAAAAABJ+VBFIQYAACEGAAAyAAAAAAAAAAAAAACkgcCZAgBAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMS9zcmMvdGVzdGluZy11dGlscy5qc1BLAQIeAwoAAAAAAAAAAACHqlog/QIAAP0CAAAuAAAAAAAAAAAAAACkgTGgAgBAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMS9zcmMvdHlwZUNoZWNrLmpzUEsBAh4DCgAAAAAAAAAAAKKVARBOAwAATgMAAC8AAAAAAAAAAAAAAKSBeqMCAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xL3NyYy90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAADAAAAAAAAAAAAAAAKSBFacCAEBhZ29yaWMvaW50ZXJuYWwtdjAuNC4wLXUxOC4xL3NyYy90eXBlcy1pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACbh0FqEgcAABIHAAAwAAAAAAAAAAAAAACkga2oAgBAYWdvcmljL2ludGVybmFsLXYwLjQuMC11MTguMS9zcmMvdXBncmFkZS1hcGkuanNQSwECHgMKAAAAAAAAAAAArvhjAwcIAAAHCAAAOQAAAAAAAAAAAAAApIENsAIAQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE4LjEvc3JjL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzUEsBAh4DCgAAAAAAAAAAALUW0pDdBwAA3QcAACoAAAAAAAAAAAAAAKSBa7gCAEBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxOC4xL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADZW6LCcRAAAHEQAAAtAAAAAAAAAAAAAACkgZDAAgBAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTguMS9zcmMvbm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAAdHozoS0rAAAtKwAAMAAAAAAAAAAAAAAApIFM0QIAQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE4LjEvc3JjL3B1Ymxpc2gta2l0LmpzUEsBAh4DCgAAAAAAAAAAAKidGFwRCAAAEQgAADQAAAAAAAAAAAAAAKSBx/wCAEBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxOC4xL3NyYy9zdG9yZWQtbm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAApxMCM+0VAADtFQAALQAAAAAAAAAAAAAApIEqBQMAQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE4LjEvc3JjL3N0b3Jlc3ViLmpzUEsBAh4DCgAAAAAAAAAAABUHXvMhEgAAIRIAAC4AAAAAAAAAAAAAAKSBYhsDAEBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxOC4xL3NyYy9zdWJzY3JpYmUuanNQSwECHgMKAAAAAAAAAAAAh2h7X9EHAADRBwAALwAAAAAAAAAAAAAApIHPLQMAQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE4LjEvc3JjL3N1YnNjcmliZXIuanNQSwECHgMKAAAAAAAAAAAAR1oa2u0DAADtAwAAKgAAAAAAAAAAAAAApIHtNQMAQGFnb3JpYy9ub3RpZmllci12MC43LjAtdTE4LjEvc3JjL3RvcGljLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAADAAAAAAAAAAAAAAAKSBIjoDAEBhZ29yaWMvbm90aWZpZXItdjAuNy4wLXUxOC4xL3NyYy90eXBlcy1pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADxRYUyggYAAIIGAAAzAAAAAAAAAAAAAACkgbo7AwBAYWdvcmljL25vdGlmaWVyLXYwLjcuMC11MTguMS90b29scy90ZXN0U3VwcG9ydHMuanNQSwECHgMKAAAAAAAAAAAAQe7fmosdAACLHQAAOQAAAAAAAAAAAAAApIGNQgMAQGFnb3JpYy9zbWFydC13YWxsZXQtdjAuNS40LXUxOC41L3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzUEsBAh4DCgAAAAAAAAAAAMhA0AaUDQAAlA0AACcAAAAAAAAAAAAAAKSBb2ADAEBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxOC4xL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADwIquuNQUAADUFAAAyAAAAAAAAAAAAAACkgUhuAwBAYWdvcmljL3N0b3JlLXYwLjkuMy11MTguMS9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qc1BLAQIeAwoAAAAAAAAAAAC6xE3t9wQAAPcEAAA2AAAAAAAAAAAAAACkgc1zAwBAYWdvcmljL3N0b3JlLXYwLjkuMy11MTguMS9zcmMvbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanNQSwECHgMKAAAAAAAAAAAAO148gpwQAACcEAAANwAAAAAAAAAAAAAApIEYeQMAQGFnb3JpYy9zdG9yZS12MC45LjMtdTE4LjEvc3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAACYLN8lzQsAAM0LAAA3AAAAAAAAAAAAAACkgQmKAwBAYWdvcmljL3N0b3JlLXYwLjkuMy11MTguMS9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAOkOOdywDQAAsA0AADsAAAAAAAAAAAAAAKSBK5YDAEBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxOC4xL3NyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAFR9JxVzCgAAcwoAADsAAAAAAAAAAAAAAKSBNKQDAEBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxOC4xL3NyYy9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAHnbC4erDgAAqw4AADQAAAAAAAAAAAAAAKSBAK8DAEBhZ29yaWMvc3RvcmUtdjAuOS4zLXUxOC4xL3NyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAJwAAAAAAAAAAAAAApIH9vQMAQGFnb3JpYy9zdG9yZS12MC45LjMtdTE4LjEvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAAX/5sCgFgAAoBYAAC4AAAAAAAAAAAAAAKSBjL8DAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLXUxOC4xL3NyYy9leG8tdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAuPUWMKgIAACoCAAAKgAAAAAAAAAAAAAApIF41gMAQGFnb3JpYy92YXQtZGF0YS12MC41LjMtdTE4LjEvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAAwRcumsFgAArBYAADYAAAAAAAAAAAAAAKSBaN8DAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4zLXUxOC4xL3NyYy92YXQtZGF0YS1iaW5kaW5ncy5qc1BLAQIeAwoAAAAAAAAAAAAztm34NhEAADYRAAAlAAAAAAAAAAAAAACkgWj2AwBAYWdvcmljL3ZhdHMtdjAuMTYuMC11MTguNS9zcmMvY3JjLmpzUEsBAh4DCgAAAAAAAAAAAPKPlJY0IQAANCEAACsAAAAAAAAAAAAAAKSB4QcEAEBhZ29yaWMvdmF0cy12MC4xNi4wLXUxOC41L3NyYy9saWItYm9hcmQuanNQSwECHgMKAAAAAAAAAAAAtFBdQrYLAAC2CwAAMwAAAAAAAAAAAAAApIFeKQQAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxOC41L3NyYy9hY3Rpb25zLmpzUEsBAh4DCgAAAAAAAAAAAI2FLjWoAgAAqAIAADsAAAAAAAAAAAAAAKSBZTUEAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTguNS9zcmMvYmlnaW50U3RyaW5naWZ5LmpzUEsBAh4DCgAAAAAAAAAAAL0613haCQAAWgkAADQAAAAAAAAAAAAAAKSBZjgEAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTguNS9zcmMvZGF0ZS1ub3cuanNQSwECHgMKAAAAAAAAAAAAQsLNztoSAADaEgAAQAAAAAAAAAAAAAAApIESQgQAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxOC41L3NyYy9maW5kT3JNYWtlSW52aXRhdGlvbi5qc1BLAQIeAwoAAAAAAAAAAAB0LQgqSwIAAEsCAAA6AAAAAAAAAAAAAACkgUpVBABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE4LjUvc3JjL2ludGVybmFsLXR5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAMq7/cOcCAAAnAgAADcAAAAAAAAAAAAAAKSB7VcEAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTguNS9zcmMvaXNzdWVyVGFibGUuanNQSwECHgMKAAAAAAAAAAAASFDr2gUeAAAFHgAAOQAAAAAAAAAAAAAApIHeYAQAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNS4wLXUxOC41L3NyYy9saWItZGVoeWRyYXRlLmpzUEsBAh4DCgAAAAAAAAAAAOGw46YvpQAAL6UAADYAAAAAAAAAAAAAAKSBOn8EAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTUuMC11MTguNS9zcmMvbGliLXdhbGxldC5qc1BLAQIeAwoAAAAAAAAAAAAMMdWluQIAALkCAAAyAAAAAAAAAAAAAACkgb0kBQBAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE4LjUvc3JjL3B1YnN1Yi5qc1BLAQIeAwoAAAAAAAAAAADv7GHEkTUAAJE1AAAyAAAAAAAAAAAAAACkgcYnBQBAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE1LjAtdTE4LjUvc3JjL3dhbGxldC5qc1BLAQIeAwoAAAAAAAAAAADJaiyDURgAAFEYAAA5AAAAAAAAAAAAAACkgaddBQBAYWdvcmljL3pvZS12MC4yNi4zLXUxOC4xL3NyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanNQSwECHgMKAAAAAAAAAAAA23U6/4gBAACIAQAAJAAAAAAAAAAAAAAApIFPdgUAQGFnb3JpYy96b25lLXYwLjMuMC11MTguMS9kdXJhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAPe62dYKEQAAChEAACgAAAAAAAAAAAAAAKSBGXgFAEBhZ29yaWMvem9uZS12MC4zLjAtdTE4LjEvc3JjL2R1cmFibGUuanNQSwECHgMKAAAAAAAAAAAAVOJbuMcEAADHBAAAKwAAAAAAAAAAAAAApIFpiQUAQGVuZG8vY29tbW9uLXYxLjIuOC9hcHBseS1sYWJlbGluZy1lcnJvci5qc1BLAQIeAwoAAAAAAAAAAACQBleGXAQAAFwEAAAqAAAAAAAAAAAAAACkgXmOBQBAZW5kby9jb21tb24tdjEuMi44L2Zyb20tdW5pcXVlLWVudHJpZXMuanNQSwECHgMKAAAAAAAAAAAAUXMNpDcCAAA3AgAAJAAAAAAAAAAAAAAApIEdkwUAQGVuZG8vY29tbW9uLXYxLjIuOC9pZGVudC1jaGVja2VyLmpzUEsBAh4DCgAAAAAAAAAAAGFY/oZ4AgAAeAIAACYAAAAAAAAAAAAAAKSBlpUFAEBlbmRvL2NvbW1vbi12MS4yLjgvbGlzdC1kaWZmZXJlbmNlLmpzUEsBAh4DCgAAAAAAAAAAAA+bwKhdAwAAXQMAACoAAAAAAAAAAAAAAKSBUpgFAEBlbmRvL2NvbW1vbi12MS4yLjgvbWFrZS1hcnJheS1pdGVyYXRvci5qc1BLAQIeAwoAAAAAAAAAAABWiwnjOQIAADkCAAAkAAAAAAAAAAAAAACkgfebBQBAZW5kby9jb21tb24tdjEuMi44L21ha2UtaXRlcmF0b3IuanNQSwECHgMKAAAAAAAAAAAArVcGfgIDAAACAwAAIQAAAAAAAAAAAAAApIFyngUAQGVuZG8vY29tbW9uLXYxLjIuOC9vYmplY3QtbWFwLmpzUEsBAh4DCgAAAAAAAAAAADufX47hAwAA4QMAACYAAAAAAAAAAAAAAKSBs6EFAEBlbmRvL2NvbW1vbi12MS4yLjgvb2JqZWN0LW1ldGEtbWFwLmpzUEsBAh4DCgAAAAAAAAAAAMICGsvhAwAA4QMAACQAAAAAAAAAAAAAAKSB2KUFAEBlbmRvL2NvbW1vbi12MS4yLjgvdGhyb3ctbGFiZWxlZC5qc1BLAQIeAwoAAAAAAAAAAADFGOc6lAEAAJQBAAAhAAAAAAAAAAAAAACkgfupBQBAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAkrdHfuwNAADsDQAAKwAAAAAAAAAAAAAApIHOqwUAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44L3NyYy9lbnYtb3B0aW9ucy5qc1BLAQIeAwoAAAAAAAAAAAD8cGkx3wcAAN8HAAAcAAAAAAAAAAAAAACkgQO6BQBAZW5kby9lcnJvcnMtdjEuMi44L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAH5dVSulEAAApRAAACMAAAAAAAAAAAAAAKSBHMIFAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9FLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACkAAAAAAAAAAAAAAKSBAtMFAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9leHBvcnRzLmpzUEsBAh4DCgAAAAAAAAAAABAg46yqDAAAqgwAACcAAAAAAAAAAAAAAKSBk9QFAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi44L3NyYy9sb2NhbC5qc1BLAQIeAwoAAAAAAAAAAAABjnBM6QwAAOkMAAA1AAAAAAAAAAAAAACkgYLhBQBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qc1BLAQIeAwoAAAAAAAAAAAAZbLtFMwMAADMDAAApAAAAAAAAAAAAAACkgb7uBQBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvbm8tc2hpbS5qc1BLAQIeAwoAAAAAAAAAAACGqKbHXwkAAF8JAAAtAAAAAAAAAAAAAACkgTjyBQBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuOC9zcmMvdHJhY2stdHVybnMuanNQSwECHgMKAAAAAAAAAAAAP/DnOlYCAABWAgAAIwAAAAAAAAAAAAAApIHi+wUAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjgvdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAsVg2mFICAABSAgAAGQAAAAAAAAAAAAAApIF5/gUAQGVuZG8vZXhvLXYxLjUuNy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAA+gd+91xQAANcUAAAiAAAAAAAAAAAAAACkgQIBBgBAZW5kby9leG8tdjEuNS43L3NyYy9leG8tbWFrZXJzLmpzUEsBAh4DCgAAAAAAAAAAAM7uWwbmLwAA5i8AACEAAAAAAAAAAAAAAKSBGRYGAEBlbmRvL2V4by12MS41Ljcvc3JjL2V4by10b29scy5qc1BLAQIeAwoAAAAAAAAAAABGkzxuNgIAADYCAAAlAAAAAAAAAAAAAACkgT5GBgBAZW5kby9leG8tdjEuNS43L3NyYy9nZXQtaW50ZXJmYWNlLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAAB0AAAAAAAAAAAAAAKSBt0gGAEBlbmRvL2V4by12MS41Ljcvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAAtKmDhWAgAAVgIAAB0AAAAAAAAAAAAAAKSBPEoGAEBlbmRvL2Zhci12MS4xLjkvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAALiBafB0BwAAdAcAAB0AAAAAAAAAAAAAAKSBzUwGAEBlbmRvL21hcnNoYWwtdjEuNi4yL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAANdsW6VZQwAAWUMAACoAAAAAAAAAAAAAAKSBfFQGAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVQYXNzYWJsZS5qc1BLAQIeAwoAAAAAAAAAAABfnPAyUiIAAFIiAAArAAAAAAAAAAAAAACkgR2YBgBAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzUEsBAh4DCgAAAAAAAAAAAA9KG6suIgAALiIAAC0AAAAAAAAAAAAAAKSBuLoGAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qc1BLAQIeAwoAAAAAAAAAAABFCzL9ECMAABAjAAAqAAAAAAAAAAAAAACkgTHdBgBAZW5kby9tYXJzaGFsLXYxLjYuMi9zcmMvbWFyc2hhbC1qdXN0aW4uanNQSwECHgMKAAAAAAAAAAAARBKm51wGAABcBgAALQAAAAAAAAAAAAAApIGJAAcAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzUEsBAh4DCgAAAAAAAAAAACnDUk4qJwAAKicAACMAAAAAAAAAAAAAAKSBMAcHAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9tYXJzaGFsLmpzUEsBAh4DCgAAAAAAAAAAALvjTYmcJwAAnCcAACUAAAAAAAAAAAAAAKSBmy4HAEBlbmRvL21hcnNoYWwtdjEuNi4yL3NyYy9yYW5rT3JkZXIuanNQSwECHgMKAAAAAAAAAAAABLrDk0oBAABKAQAAIQAAAAAAAAAAAAAApIF6VgcAQGVuZG8vbWFyc2hhbC12MS42LjIvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAF/qToJZBQAAWQUAAB4AAAAAAAAAAAAAAKSBA1gHAEBlbmRvL25hdC12NS4wLjEzL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAChKaq8PwoAAD8KAAAgAAAAAAAAAAAAAACkgZhdBwBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAACXqL8lVAYAAFQGAAAoAAAAAAAAAAAAAACkgRVoBwBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvY29weUFycmF5LmpzUEsBAh4DCgAAAAAAAAAAADLPSrUpCAAAKQgAACkAAAAAAAAAAAAAAKSBr24HAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9jb3B5UmVjb3JkLmpzUEsBAh4DCgAAAAAAAAAAAHAi5XpWCgAAVgoAAC4AAAAAAAAAAAAAAKSBH3cHAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9kZWVwbHlGdWxmaWxsZWQuanNQSwECHgMKAAAAAAAAAAAAQ5uKqDQSAAA0EgAAJAAAAAAAAAAAAAAApIHBgQcAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL2Vycm9yLmpzUEsBAh4DCgAAAAAAAAAAAEFP/E+PBQAAjwUAACsAAAAAAAAAAAAAAKSBN5QHAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9pdGVyLWhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAZM/ib0ERAABBEQAAJwAAAAAAAAAAAAAApIEPmgcAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL21ha2UtZmFyLmpzUEsBAh4DCgAAAAAAAAAAACvRoL+ABAAAgAQAACkAAAAAAAAAAAAAAKSBlasHAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9tYWtlVGFnZ2VkLmpzUEsBAh4DCgAAAAAAAAAAAA0ikncUFQAAFBUAADAAAAAAAAAAAAAAAKSBXLAHAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAAAUDE1+sCQAALAkAAAqAAAAAAAAAAAAAACkgb7FBwBAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvcGFzc1N0eWxlT2YuanNQSwECHgMKAAAAAAAAAAAAUoR7eqYXAACmFwAAKAAAAAAAAAAAAAAApIG26gcAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3JlbW90YWJsZS5qc1BLAQIeAwoAAAAAAAAAAADFGADMhgwAAIYMAAArAAAAAAAAAAAAAACkgaICCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvc2FmZS1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAJiXXyyyBwAAsgcAACUAAAAAAAAAAAAAAKSBcQ8IAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy9zdHJpbmcuanNQSwECHgMKAAAAAAAAAAAAZj9ZlfwJAAD8CQAAJQAAAAAAAAAAAAAApIFmFwgAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljcvc3JjL3N5bWJvbC5qc1BLAQIeAwoAAAAAAAAAAABg1WOeFAcAABQHAAAlAAAAAAAAAAAAAACkgaUhCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuNy9zcmMvdGFnZ2VkLmpzUEsBAh4DCgAAAAAAAAAAAA6/CS3+CAAA/ggAACkAAAAAAAAAAAAAAKSB/CgIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACQAAAAAAAAAAAAAAKSBQTIIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC43L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADFh1fptw4AALcOAAAeAAAAAAAAAAAAAACkgc0zCABAZW5kby9wYXR0ZXJucy12MS40LjcvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAW6U5DDkyAAA5MgAAKgAAAAAAAAAAAAAApIHAQggAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL2NoZWNrS2V5LmpzUEsBAh4DCgAAAAAAAAAAAIQ/iwcTFQAAExUAAC0AAAAAAAAAAAAAAKSBQXUIAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMva2V5cy9jb21wYXJlS2V5cy5qc1BLAQIeAwoAAAAAAAAAAABMm2YWxw0AAMcNAAApAAAAAAAAAAAAAACkgZ+KCABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY29weUJhZy5qc1BLAQIeAwoAAAAAAAAAAAApnmdszgsAAM4LAAApAAAAAAAAAAAAAACkga2YCABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMvY29weVNldC5qc1BLAQIeAwoAAAAAAAAAAABNkSIn4BIAAOASAAA5AAAAAAAAAAAAAACkgcKkCABAZW5kby9wYXR0ZXJucy12MS40Ljcvc3JjL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAAWzrVy1IWAABSFgAANQAAAAAAAAAAAAAApIH5twgAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAAfWCLM4scAACLHAAANQAAAAAAAAAAAAAApIGezggAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAApEMnKO0YAADtGAAANgAAAAAAAAAAAAAApIF86wgAQGVuZG8vcGF0dGVybnMtdjEuNC43L3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzUEsBAh4DCgAAAAAAAAAAAB04DJTIrQAAyK0AADUAAAAAAAAAAAAAAKSBvQQJAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACIAAAAAAAAAAAAAAKSB2LIJAEBlbmRvL3BhdHRlcm5zLXYxLjQuNy9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAA0gGixEIGAABCBgAAIQAAAAAAAAAAAAAApIFitAkAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS44L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAALNdW0ZVAgAAVQIAACoAAAAAAAAAAAAAAKSB47oJAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC9zcmMvaXMtcHJvbWlzZS5qc1BLAQIeAwoAAAAAAAAAAAD6ZvCRnAcAAJwHAAApAAAAAAAAAAAAAACkgYC9CQBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgvc3JjL21lbW8tcmFjZS5qc1BLAQIeAwoAAAAAAAAAAACcbcSyfAUAAHwFAAA0AAAAAAAAAAAAAACkgWPFCQBAZW5kby9wcm9taXNlLWtpdC12MS4xLjgvc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzUEsBAh4DCgAAAAAAAAAAAAS6w5NKAQAASgEAACUAAAAAAAAAAAAAAKSBMcsJAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOC9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAA3Gj3QpARAACQEQAAHAAAAAAAAAAAAAAApIG+zAkAQGVuZG8vc3RyZWFtLXYxLjIuOC9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABmVxEJwwEAAMMBAAAcAAAAAAAAAAAAAACkgYjeCQBqZXNzaWUuanMtdjAuMy40L3NyYy9tYWluLmpzUEsBAh4DCgAAAAAAAAAAAJBhzwNzAQAAcwEAAB8AAAAAAAAAAAAAAKSBheAJAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL0UuanNQSwECHgMKAAAAAAAAAAAA4PW5H28CAABvAgAALAAAAAAAAAAAAAAApIE14gkAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanNQSwECHgMKAAAAAAAAAAAA/34fduYBAADmAQAAIgAAAAAAAAAAAAAApIHu5AkAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFpbi5qc1BLAQIeAwoAAAAAAAAAAAA3F9BOzAcAAMwHAAAkAAAAAAAAAAAAAACkgRTnCQBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9tYWtlcnMuanNQSwECHgMKAAAAAAAAAAAAijbjvkkDAABJAwAAKQAAAAAAAAAAAAAApIEi7wkAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanNQSwECHgMKAAAAAAAAAAAABm8mQogBAACIAQAAIgAAAAAAAAAAAAAApIGy8gkAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvbWFpbi5qc1BLBQYAAAAAoACgAPM3AAB69AkAAAA=","endoZipBase64Sha512":"6e94ed3dcb6cbc0fd32520abfb96453dafbccdcd51ac4768e5779d8b8b770b48ed918c88c42ef766b4083bba7346a5af391b911418180bc40dab4449cb5643c2"};