@agoric/wallet-backend 0.14.4-dev-681b352.0 → 0.14.4-dev-7d1dfc0.0

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":"UEsDBAoAAAAAAAAAAADMzkIRLeUBAC3lAQAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zIiwKICAgICJtb2R1bGUiOiAiLi9zcmMvd2FsbGV0LmpzIgogIH0sCiAgImNvbXBhcnRtZW50cyI6IHsKICAgICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvYmFzZS16b25lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvdG9vbHMvKiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLyoiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvem9uZS1oZWxwZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vem9uZS1oZWxwZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pZGVudC1jaGVja2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGlzdC1kaWZmZXJlbmNlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1hc3NpZ24uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtYXNzaWduLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi90aHJvdy1sYWJlbGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rocm93LWxhYmVsZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vaGVhcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJoZWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDg5Zjg3MGM4MGJiY2MwYzBmMzc3MDk0YTI2NGQ1YjIwNmM1OTkxZWRjYzM0MmQzNmQwOTYyYTRlZTEyNWE0MzAyNzRhNGRhYzljMzlhZTczZTBiZjc3MWYwYWRiZmRiOThhMmQ2YmQxYmNlMmFlODg0NjYyMmMxMjJjZDk3MjAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhwb3J0cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhwb3J0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3NjdiOWRlODMwYTZlZDFiZGJhMjRlMTc3YTFjZTUwZjA4M2JjZDc2Y2QzMzcwMzIzNmEyNDQ4YzQxNzgyYzE0MDdjNWZkODVmOTA1ZWY4ZGVjNzljMTJlZGQwMjk1MjE4N2MyMTYxNjZmYTM0YzVmYWEwYjE1NTNkMjA4YTdhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2hlYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2hlYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5ZGUzYjE2NWYzNTc0MGJlMzE4NzQyZGE5YTc1YzkyOTEwNmYyYTc4NDQwYTBjMTY5MTc5OGZlZWMzZDhhMzFlOGEwZDNlZjVjMDlkZmEzNjIxZjgwYzQ4NmQxZDk1OTk3YWUzYjc1YjdiYjRiZDZmMDZkNDZhYzJjMWFhMDY5MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMWJiN2Y1YTdjNjIyY2E1Y2UzZDIyMmZiMWU2NjY0ZmY4NDg3YjA0NjU2YjViOWQ4ZmU3MGM1OGJhNWM2ZWViNDMyMzEzYzliN2IxYTEwNjdhYjAxZDcxMWFjZDEyNGUwNmUxZWUzNmYyNzk3MjQ2NjU1ZDVkMzY5Njg0MTM3ZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pcy1wYXNzYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXMtcGFzc2FibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1YTAwM2QwZTdkMDkzZGQ2MWUyMGFlMWJmMGVlYzY4OTE5NjBlYmE5ZWVkMTNkM2FjMDEzODlmYWFiMjQwMmY4NTllMmJjYTcwOTcwZjg1NDdjMDliNWY5YjQ2M2ZlNDhiYjdjZGQzMDZiZjhmMzNlYjQ0NDFjMmJmYzc4Y2NmMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjBmZDI2YTk3YTA1YjY0NGY4YTk5N2Y1MDQ2ZGFiZjlhMmUzZTE0ZWMwZDU5YmMyYjA3YjMwZDI3NGM5MDAyMWRiMjU1YTYzNjFmNmFkZDYxMDMwODUxNzg0OGEwOTYzNDk4OTgzMjM4NDYyM2E0MjZhNTZkYzBlNGM0ZTU0YzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZS1vbmNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlLW9uY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhYzYzODJhYmM2NDlhM2ZlMGQ2ZTMwYTAzOWExYjhjMzg3MjA2OWZlZjE2NjQ0ZjMzYjNhNTRlZGI1MGJjYzQ4MTliODZkMThmY2RmY2RkMTAyMDNmZTRlMDRlOTM3ZDY1YjY4ZWMxYTZmNDM2MzVkZmI4MmIwOTVkNzBhY2ViNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy93YXRjaC1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy93YXRjaC1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZGNkZWExMDc0ZmE2NGRhMjRjZDk5NmI3ODM0MDM5Y2FlNDlmODFhZDE4M2JlNmJlYjUzOTU5MzQ5MGJkZjM2YmRhYzZjZGY1NGQ3NWRiMTc0ZGUzMDhmYTFmYzk2Y2IyMzQ3NjMyNjJiZDUzZGNmNmI5OTY5NGJhYTRmODE1ZDYiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvY2FjaGUtdjAuMy4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2NhY2hlIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvY2FjaGUtdjAuMy4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvY2FjaGUtdjAuMy4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvY2FjaGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jYWNoZS12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3N1YnNjcmliZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NhY2hlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jYWNoZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjllOWY3NDU1YTJlYWJjODYyNjI2ZWVmMjNmNGJhN2ZiOGU4Yjk4YWQzOGEyOWYzZTAzNjRjMDQ5NmJkZTg5ZDg0YjBjOTlkMjJjOWU1NGYxNzIyYTIyZTBlODZjYmQzNDNhNTQxZGY3MTE5MDYzZTRhYWU5YjgwYjUzYWZhNDNlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmODk2MTc0N2U0MWNhM2M2ZGJlYWYzMDViZjFkZTk3MmEyNWMzZDM0MzlmM2FjNGQ2MjUyYzEyMjI5N2E5ZGQ3NjliMmQ3MTY5NWQ0NzZmYWRlNjY2MmIyNWI5NDcwNzBkOWU0YWUzNTczMGI0N2I2YzU0NWQ3MGFhYzZkYWI2NSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdGF0ZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RhdGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkYzQ4MDdmNDRiNGQwODQ1ZWJiNWYyMzY4ZWIxMmEwZjk5MDZmZGIxMTQxNmIzMmVkMWE2MTcxNDE0ZDM5YjdkZjBiZDUxNjVhZjVlODczZWI4YWVlNWM0YWRmZGY3MmQwMjJjZTVhY2VjN2E1YjgzYTcyZTExYzdjMWE5ZTA5NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlNmYyODQyYjQ1ZDE5N2FiZmMwOTk1NGRhMWQxYjg4MjlkMGJiMWMyNmYzNTdiODA2YWJmM2JhMDg3NGQ0ZDczN2YxNjFiYTk0ODY3ODUyNDJmNmY1NDlmYWFkOWQ2MWRhNGU2YWNlNWJjMzEzNDI2NTZjNmIzNmY1NDgxNDY3NSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmNzY3YjlkZTgzMGE2ZWQxYmRiYTI0ZTE3N2ExY2U1MGYwODNiY2Q3NmNkMzM3MDMyMzZhMjQ0OGM0MTc4MmMxNDA3YzVmZDg1ZjkwNWVmOGRlYzc5YzEyZWRkMDI5NTIxODdjMjE2MTY2ZmEzNGM1ZmFhMGIxNTUzZDIwOGE3YSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvZXJ0cCIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL2VydHAtdjAuMTYuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2VydHAtdjAuMTYuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2VydHAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3N1YnNjcmliZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kdXJhYmxlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9oZWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL3ZpcnR1YWwuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdmlydHVhbC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hbW91bnRNYXRoLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9hbW91bnRNYXRoLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmQ1ZTljYmY0ZWQ4NDVkZGM5NGJlY2JjMzc3ZTIxZWFlM2Y4MDA3ZDI5NDI3YmMxNWMzZTViY2RhY2VkNWNhNzRkYWIyODQzNTk4NGJhNThlNzZkMTdkMGFkNzAxYmQ4NDAzNGJlNzJjNWIxMDA4ZmMwZWM1MDJjZDUwZmM5YzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYW1vdW50U3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Ftb3VudFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDFhMWU2MzQzOTg0MTg5YTc4MGFjNDYyY2YyYTBhYzhkYzljNDA1MDViYTExODBmODJiZDZiY2YxNGE4ZDBkN2Y2OThhNGM2YTQ4NzdhZTY2MWRhNzhjYTVmZmEyZWQ3NTM5M2MwNWMwM2MyZTk5Njk1ZjAyMjA3MjAzZDNiNDgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGlzcGxheUluZm8uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Rpc3BsYXlJbmZvLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDgyZjI4NjMxOTljN2YzNWM2OTI3ODhkYjMxN2U5MDQ4YWNkNmYxMWU1Y2IzZDQ0MWNiODE1MTViZTFkY2E4NmY0MjA0ZjBhMmE1OWU2Yzk5NzA5OGQ0NDlhMDhjMTJiOTFjZWEyYTcwZWM4NzI4N2Y2YzUzODI3YWQ4MDk5OGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZGRmNDAwZmRjMGU3YmJkZWJkMTk2YmU0OTUxYWRhZjE2ZmM4ODk3OTMzMjk3OWQ3ODZlYTUzYTAwZTZlMGFjZDUwODYzYWQ1ZDQxZTA2NjZmMDQ5N2M0NTc0MTYyZjA0MGVkNzZiZmY5OTY0Y2M1OTdmZGQ1M2RjNTE5YmRiZTIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXNzdWVyS2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pc3N1ZXJLaXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3MTc0NmUzNTM4ODk4NjI4OGU1NjA4ZjZkNDY3MmM0NmNlNTQyMTMyOTRiMGZmMGUxYWM3NzhkY2Q3NmJlMDMwZjM0NTBmMDZjMjJkOGU2ZDIzMWRlODYyMzlkODE4NmE2MmZkYTZlNjc4YzkzN2I0OGI2ZjJlZmZjYWM4ZDUyMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUzZDU5ODA0NzYyNzg1NmExZDMyMWJiMGFhNThlNzM5OTlkZWNjN2YzYWFhNzE4NzBhYmIwYmIwZDc0YmJhNDYxOGQ1MDU0NDJjZDU3OGJmZTljNDcxYmZmOTVmMjAwMGFlM2I3NGIxZDFjMmNlYzc4ZmFmMzM5ZjVjODE3NTBmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjM3YzAxODA2NTM4M2M0MmQyNWMyNzY1MTRjNDYyMDJlYWU3ZDFmMWVhMzk3NTU5NjVmMGJhOTljNmRlYWRlM2JjM2MyYmQ2NjU5NjlmOWZkOTBkOWE0NGI3MmM4NjI4Y2JkZjkxMDJlMzJjZDQ5ZDI5NTEyM2RlZTAxN2I1ZDAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGYxYjdlYTljYzA1NmNiNTZjYTM0YmNjNWYzYThlNTdiNTcwMzYwZTNlYzRkZmJjYjIwY2E3YTI4NDZmZDIxNGFjYzNiYWU5MmI4NzBjOWIzY2VjMDE5MjI5NTAyNmM5NTA1ZGFmZTA5NjM5MDMwZjhiZmUwM2I4MzJhNGFjMzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGQ2MTYzYzU0MzQ5MDdmNzQ5N2E4ZDVhOGFjYTRmZmQ3OGMxNGY4MjZiOTA4NzViMTUzMjY2MzgyNzE3OTVlYjU0ZmJhYTIxOTdmYmYxNDA0NTMwNDVmZmFjYmEwYTFiNzYzYjMxNDlkYTRkZWY1NDRiNTUzZTIxMjc0NTlmYWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF5bWVudC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGF5bWVudC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA5OGQxMzQ4YmQ2ODJiYTI0YTlkZTc3NzgzMmRmMzM3YzRmYWI5MWU4OTY0ODZlNzcyNTgxNjc3OTk5MTM0OWJkZmZhYWRkYTkyYzQwZDM0Yzc3YTM3MmI4NjM3ZTNhN2U0NTU5MWExZjliMDczNGNmMGFkYjQ4YWNkZGQ1NTVhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BheW1lbnRMZWRnZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BheW1lbnRMZWRnZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1ODZhM2M5M2FhZjkzYTM2NTMwMGExNjIzOTBlZTA1ODhlMDg1N2NhMjU3NGYwNTAwN2EwNTg5YmFlZTIzYTM4MjdjMDdmYTYyNjE0NjhlZGQ0MDVlZjkzZWVlYTEzZmMzOWViOTFkZmNiODY5YTA2OGZhYTk3NmRkMDkzN2MwYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdXJzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHVyc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3NTY2ZThlNjMwN2ZhZGI1NzQxYTJlMWYyNDZlNTdjODRmMGU3MTk1NWQ4OTc2ZmZjNzEzMzZkZTJkNWM4MzQ5NDJhYTkzNGJlNDE1NDA5ZWIzN2Y2OGNjOWMyMGM3OWFhMTk2MWJjMmE4MDVlN2U1NTVkZjVlZDc3Njg5NDRmZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90cmFuc2llbnROb3RpZmllci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHJhbnNpZW50Tm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhODI0ZDU2ZmEwNWYzZTRhYWYwOGQ1MjQ1NTM5NzY2Y2FkNjVlNjU0YzM2YTU1ZWIyOTYyN2Y4ODU4YzQ3YjgxZTU3NmU0ZDk4OTQxMzFkYTQ3OGI0ZmI4ODAwNGYwOTk1OWYwNzdhZGYyMTQ1YWI1NjA5YmVjMGExOTQ3OGUzNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjM3N2U4MDA1NDJkYjI4ZWYzNzk3NGJiMGFjNmI1NTljODA1Yjk0MmJkZDM0ZDk5NDljOGQ5NWE5ZjBmMTIxZTVmYWQwOGFhZTEyOGJmMDRlM2MxMTU5MjVhNTQ5OTVmOTYwMmU0YTY1MzZiOWE5MjY5NjlkYWViNmIyOGQ3MmIiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2ludGVybmFsIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3Rvb2xzLyoiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy8qIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3pvbmUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3pvbmUtaGVscGVycy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtYXNzaWduLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLWFzc2lnbi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90aHJvdy1sYWJlbGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvZGVidWcuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2RlYnVnLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvbGVnYWN5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sZWdhY3kuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW5pdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbml0L3ByZS1idW5kbGUtc291cmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wcmUtYnVuZGxlLXNvdXJjZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbml0L3ByZS1yZW1vdGluZy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbml0LXYxLjEuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcHJlLXJlbW90aW5nLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvcHJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wcmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW5pdC91bnNhZmUtZmFzdC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbml0LXYxLjEuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdW5zYWZlLWZhc3QuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3N0cmVhbSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9zdHJlYW0tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9zdHJlYW0vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3N0cmVhbS12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJhbnlsb2dnZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiYW55bG9nZ2VyLXYwLjIxLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FueWxvZ2dlci5qcyIKICAgICAgICB9LAogICAgICAgICJqZXNzaWUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL21haW4uanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY2FsbGJhY2suanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NhbGxiYWNrLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODFmZDUyOGUyNDdhMmZiMmY4MjdjMjgxZGU0NDM5YjYxNmRjNmUwNzhiMmI3MzQyZjZmNjY3NDc3NjY5OTJhMmI1MDMwZDcxMzU3YjZlYTIyMGIzYWRiY2VmM2Y1NzE1YmJlZmZlZDNhNDI5NDMyMGI1ZDlhZTU2MDQwMzljNzEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29uZmlnLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb25maWcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiZmE2OTdiOGMyNzEyZmFjYzQ3ZmUyOWY2NmQyYTE5YTFlMjAwNGVkZDY3MmFiY2M3ZDBiYjgxZmY4ZGNhYWIyNDk4YzFmNGFiZDgzZTM1ZTU4YjQ4MTcyNThlZmNlZTM5ZDJiNjFmOWU3ZTQzNjdkMmYzZDQ5MThjMTFjZjAxZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kZWJ1Zy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZGVidWcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4OTI5ODZmMzA4YzIxYWI0MzZjZTdiNmMxZjFjYTIyM2JmMGI2NjE0YzBjZjU4MTA0ZGY5MWRmODhhOGJlY2JhZGY1YmE3ZDg2ZDRjZjU1MTM1Yzg3NWYzNWI3ODZjMWU3Mjk4Y2YxNDg3YjFiM2RiYTA0OTU4YTllMzk0MTM5YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lcnJvcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vycm9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjRjOWVmMGEwNTI0MGI5ZWUxYzJjNDdhMGFlMzQxYzg3NjY1Y2JlMWU5NDhlNmQxNjJmMGJlNDQxNzUxMjg3OGRlZjQ4ZGIzY2U0MWNhN2U4Njg1ODYxMWVhYTdjYzE3NmQwMGRhYzgxMDFlNGMyNDNiNzUyOWM5MTdhNDI2NGFiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk2OGE4ODI2ZWIwMTEzOGIyMjJkZmQ0NGFiZjY2YTJkYzVmNzBmOTQ4ZDEzN2IzYTRjYjBjYWUzOWI2ZWQ5MTI2ODQ3NjE4OTdlMDgzYWY5ZTZkODgzZGM1MDcxMGEyOGQ1MDQ5Nzc2NjFjYWRkZWZmMGU2MTUzOWFmN2EwMzk3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjMGIwZTBlMmU5MjJlMTY3OGU2YzY1ZWI3Y2QzZGVmNjMxMjczZWJiM2IwNzVkZmNhODI4NzI0MDM0ODM2ZTllMmQ3MzVkMTY5NWI1NDAyNDg0NGQyYjZhNDdkNGI4ZTFlNDNmNThmM2Y5N2ZhOGNlODM3Y2M4ZTkzZTE1YTAyYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDViMWI3ZTlmMmQzMWQ2NmZlNTQ4ZDk2MTMzZjkyOTNlNjAzMzk2NTFiNWIxZTgyYjJjNTM5YThlMmQ5OGQzOWYxYWM1NDFlODQwNTJjYWI0YjI4MzBiZDYwYmYwODVlOGI4Mjg2Yzg5YzQ4MDk4MzZmZWQyN2Q0ZjdjMmJiNTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWV0aG9kLXRvb2xzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZXRob2QtdG9vbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YjljZWM4ODNiNWZkYmI4YmNlZTJlYTJiNWI3MmNiMjliYzU4NDlhYzZmNDRmMDYzMDE4NjMxMGQ2M2Q3MGZhZjU0YzU2YTdmMmRhYzZlMjYzZjhhMjliY2U1OTE0N2VkMmNmYTUwODA1ZTYzZGQwYmFmZDI2M2M5NzhkMmMyYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImRkOGU5OWY0OTBkNjEzMzliMGM1NmNmY2Y3ZWM1ZmI1MjM2MTUyODEwOGYwMWY2ZGFjMjhlN2U5MzM5ZDYwYmQ4M2IzZGM0YmUxYjIyM2Q0ZGZiMDk5MGU2NWRhMjkwYzA2OTQ4OTRmOWQ5MjVhYTQxZmQxMzNmMDg1NDc1MTEzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Rlc3RpbmctdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Rlc3RpbmctdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2YjY2ZjBhYTdlYmE0YzQ0M2MwMTUyOTRjODExYmMyYWZlNmU0MmQ3MWRmODMxNDQ3NzA0YjAyZDk2MjJjOTQwNmMzOGFiYTQwMjhlZWRiZDExZDg1YjI3M2Y5MTgzMDhjNmIxNjRlNDRiMDM3ZGMxNTY3NmIyNGYxNGVmMDhjMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlQ2hlY2suanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVDaGVjay5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhjZTMyNGRiZWQxYjBkOTE2NzE3ZWQxMjYxNDE2ZjdlZmY4OTc2MzQ5MzA3MTdiMGM2NmVkNTczZTg4MzUyOTNmMmM1MTBjM2YwZTk2ZGI2MjU2MzM1YWY2ODc2N2Y0NzVmMTdhNTM1YWMzZGM2NjVlMTM1ZjA1MzEyMmMwNzc2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5YjQ2MTQ3MGE2ZjVkNDMzMGM4ZGVlZDUxNzc5N2EzMTVjZjI0MzYzNTdhMmM0ZDc2YTY1YmFhOGZjZWE0ODU0YWJjYTdlNjZkODIxOTk5MzA2ZmFjMmY1N2JjNzRjYWZkNWU5Yjg0ZGQzN2U4M2U3NDE5OTZjMjJhMzFkMWJkNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy1pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMtaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmNzY3YjlkZTgzMGE2ZWQxYmRiYTI0ZTE3N2ExY2U1MGYwODNiY2Q3NmNkMzM3MDMyMzZhMjQ0OGM0MTc4MmMxNDA3YzVmZDg1ZjkwNWVmOGRlYzc5YzEyZWRkMDI5NTIxODdjMjE2MTY2ZmEzNGM1ZmFhMGIxNTUzZDIwOGE3YSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy91cGdyYWRlLWFwaS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdXBncmFkZS1hcGkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3YTU2NWQwMjQ2YzBhYmQ5NWVkN2M1MWFkYzllMDA2NmYwMDMwZTFjNTY1ZTI4MzUzOTYxODI3ZTI4MWE5ZjQwN2MzNWNiMTVjNjllZmUwNTRhODU5ZGJiM2E1YTczOWI5OGMyYWI4YTZiMmM0NmVmODg5YjBhMzkxNDE0NGUwYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy91dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0ZWNjMzlhZjQyODczNzAxMTE4OWJhMGNhZDgwODRmZjE0MGRiYWIzMjg4NjBkZjBiODI0ZjkyY2NlMjRmNWE5MjI1NTY3NzgxZDdmNDlmZTMwZDNiNTA0MTAzNjEzZWRlMTI2NmM5ZDI2NmZkZjlmYTc5NjI4MTUyNGYwNWUxZCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvbm90aWZpZXIiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3Rlc3RpbmctdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy90ZXN0aW5nLXV0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3VwZ3JhZGUtYXBpLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvdXBncmFkZS1hcGkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvZXhwb3J0ZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2V4cG9ydGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvc3Vic2NyaWJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zdWJzY3JpYmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci90b29scy90ZXN0U3VwcG9ydHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YWI1YjRkYjRmN2IyMWQ0ZDQxM2ZjNjIzNzRjNjkzZGU3ZWFlZmE2NTg5MGY5NWU2ZTQ4ZGMwZWNkZDM0YzA3OGRjZDRiOWMyNTQ3NmQwODRiZDZjMGYyZWU4ZGE0OWEzN2RjOTU1MmFkYzA5N2UyYTQyMjMzMmI3YTJkOWU0MSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOGY2NTI5ZGQ3NmE3OTMzMjU5N2NjOThiZWY0ODA3ZTIyZTJlOTFjYTEyMjFjNzRmNjM5NTkyNTQ3MDM2OTZjOWYzZGY4YmNiZGVmY2I2Njg3OTcwY2RlZjQ5MjJjMDk1MTkwNGUxNWU4ZTdhZmMzYzU2ZGNmNTg4ZDYzNTVmYyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9ub3RpZmllci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyNGE5NGUzN2Q1MzI5NmYwOGZjOWVkOTU5ZjRhY2FjOTNmMzA4ZWY1YjBkMzVmZWQ3YmJjOTc1MDdiYzc0OWNmZTgyYzkwZWQ5NmU1NGFjMDUxZjEwNWIzY2NmNWFmMTk1MjhkZDFmMDA1MDZiNmI5ODJmYzc5MzdkNjk3ZTljZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdWJsaXNoLWtpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHVibGlzaC1raXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2NjAyYTlkMmQzZGY1YTFlMTg3OWViYzNkODkwZmMwODY2YzdhNTc1M2E5N2RmZGVlODQzMTQ3MTQ0ZWUzMzViYmZiMmIzMmE5NGQ4ZjJhMTcyNGQwN2UyMjI1YTExOTFlNjdhMTg4ZTcyZmQ5Yzg2NGZhYjQzYmI0YzQzNTVmNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZWQtbm90aWZpZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3JlZC1ub3RpZmllci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA0NTg2Y2Q4NjdhY2M4NmFmMTQ5MjRiYmUyZDM1MzJhY2IyNDUyZDVkZDRmZDMzNzM0MTgzYWFmMGIxYWJjNmU4NDZlMjU0YWFlYTkyNjZlMjA5YWYxMDAxMGZmMTg0MGVjNDkxY2VkZWZjNDZjZTQ2YjhjYTM2MDQ4OTViN2UzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlc3ViLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXN1Yi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUzMzNlY2Q1NjU4NGQyNzY4YjgxZTc2NjJhOWZhZTRlOWQwOGIyMWE3NjMyOWE5Y2MzNGUxNTc0ZGIxZjA1ZTMzYTZlZWIxOTU4YWFjMDkxNDJkNjE2ZjA3N2YyZTc0YzRlYzU3MzkyNDdiMjZkMDE4NDY0NGM2M2RmMjJiNDMxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N1YnNjcmliZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3Vic2NyaWJlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmJmNjM3NDQ1Nzg5NjZhYmY5OWJkMDQ5MzUyOGI4Y2Q5Zjc3MjIyYTAwMjJkYWM4MDM4ZGM5Njc1OWJhMjAyMGVmN2FmZGU5ZDQ3MTY3MTBjMjMzNGEzODgzZTlmMzM4OGE4NDYxMDQ5ZTQyYjkwZTYwZGQwYWIxMWEyMTliZmIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3Vic2NyaWJlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3Vic2NyaWJlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImVmNzk1ZmNkMmVlNzg4MDY4MDAzODkxNzdlMTE3ZGYwM2ZkODY4ZTIxMTIyMjk4ZGE2MDQyOTQzZjczMzg1OGQwNDA5OTFmYjI3NDk5MGEyMjBkNzAxN2NjMzg1ODBlOTNlMjA2MjlmNjJjNjRmYzdjOGY5NTNmMTJlZWQ4MTMxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RvcGljLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90b3BpYy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3MGVlNDNkMTI3ZjQzNTAwZmE4N2FmMDFiMTY4MGQ5OThiZTExYWU5NzExNDBiYmZmNmExNTgzMjI1NDMwODA0MTA1NGNlMjgwNTQ0OWUzMjc0ZTI1MjcxNTBkYzdlNGJlODM1YmQ1ZDZhZjFiMzZhMWQ0ZGRlM2M3YzAxZGIxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLWluZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy1pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3NjdiOWRlODMwYTZlZDFiZGJhMjRlMTc3YTFjZTUwZjA4M2JjZDc2Y2QzMzcwMzIzNmEyNDQ4YzQxNzgyYzE0MDdjNWZkODVmOTA1ZWY4ZGVjNzljMTJlZGQwMjk1MjE4N2MyMTYxNjZmYTM0YzVmYWEwYjE1NTNkMjA4YTdhIgogICAgICAgIH0sCiAgICAgICAgIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInRvb2xzL3Rlc3RTdXBwb3J0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA0ZDkxYzA4MmVmMTkxOTk4OWM1MDlhYWQwNmM4MmZiMmQwZjA2YjI1MjFiODIwMTM1NTM2NjBiNDJlYjdkZjc3YjdlODc5MzE0MjMwZDg0OWYyYTg2ZWJkNjQ0YjUzNDg0ODZmMmY5ZTU0OWZhMzM5NDQ1NmVmN2Q5MGM5ZWZhIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3NtYXJ0LXdhbGxldC12MC41LjMiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvc21hcnQtd2FsbGV0IiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3NtYXJ0LXdhbGxldC12MC41LjMiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9jYXN0aW5nIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY2FzdGluZy12MC40LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvZXJ0cCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2VydHAtdjAuMTYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3N1YnNjcmliZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc21hcnQtd2FsbGV0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXRzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0cy12MC4xNS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdHMvc3JjL2xpYi1ib2FyZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdHMtdjAuMTUuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2xpYi1ib2FyZC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZvdyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3Zvdy12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvZS12MC4yNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvem9lU2VydmljZS96b2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kdXJhYmxlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9oZWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL3ZpcnR1YWwuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdmlydHVhbC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLWNvbnRleHRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjZiZjlkMjc1MTVlYjVlOWExOTdmNmFjMWVkODcwZjc1MDFkNGViNGZlZTRhZjI1NjUyYTBhMTBhNGE5N2MwMmIwNTFjNjZjMzkxZjU0YTQ0MTUzODY1M2I1NTNjM2M2MjBiOTE1YzY0YmE0YzdjNGVhNjQxZjQ5ZTc1MjdlNmIiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvc3RvcmUtdjAuOS4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3N0b3JlIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjI5MDY4NzhiNDRiZjgxNjlmNWVlNGI2YWJkYjI1ZGM0YmQ4OWZlYWNhZDEwYzE4YmU3MTRjNWRlYmRhMjM4MzQ1NzkxNDc1MWViYWQyNjAzMTA2ZjMzZTQ0ODUwNTU2OWE3ZWNiZjgwNmYwZWIyMTVhYmIwMjJmZTZkYmRiOWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGVnYWN5L2xlZ2FjeU1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJiMTlmY2I4MmRiZDBjYzBjYzU4MGUyOTRhYWQwNDAwYjM0MTViMWU3MzdkZGNlYWQxMzUyNmMzOTRkNzAxYWEwNGYwMzk2OTk4ZjdlNDQ3M2IwMjEyNmIwNzE4YmJlYzM5NWNkMjI0NWU2OTllZjJmMWEzNmQwY2I1NzRlYTRiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImE1NWQ3M2Y4NDJkZmU0NDE2MjMwZjYwZDFlMjI0ODNhZTNmZDI5MzIzNDNkZmZlODE2MWU1MWQ5MWE2MDM5Y2RjOTJhZDQ1NmI3OGFkODczNzMwYWQ4NWI2ZWU4ZWRkOGU1MDMzYTc3MDdhNGQwYTE5NGY4MjYwMWUzNDEzMGE4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjU4ZTFiNmEwYjljYWVjZWUzODY0MTU0OTVjMDllYjFlMzNkYzM2ZTM4M2JhYjM3MGY2NDEwMDJkNjcwYjEwNWNjZmNhYzFkNTViZmVhZDExOGM5NDliYThiMDQzNjFjNDgxZDE1ZDA1OTAxNmVhZTZmODg1YzA3ODA4ZTRjYjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YTZmZjM3Yjc1YzA1ODAwYmE1MzRmMzcyZjA0MzFkYjVlMjg0YzUzNjdjYjAwZjdmNGQxMTZjY2ZkMGFjOWY5OWYzMmMwYjhhNzM3YjE4YjFjYzM5OGQyYjRlYjgyYWIyMmUzZmQ0ZjczZTc3OTk2ZjE4NDI2ZThmOTgzNzQwNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOWEyYjRjOGYyYThiMzdlYWYyMjg5MGJmYTNiMzZkYjg5N2I4YTM1NTU0Y2UwNmExOGI4MDk5MDBiYmE2NmJmMjY5YTYwYzc0ZGVkZjU3MjRmY2E3NWJiNzRkOGIxNDZhODA0NjZlMjIyN2Y0Zjc1YzUzMzVmMzBhYWY4YTBlMGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY3NDRlNDE2NmQ0NmNiNGQwY2EyZmEzZTY1YTQ2ODZjMjAxNzIyY2QyMzMxN2I5ZTdkZjUyMzVlNWViYTJlYWIyNTAwZTcxN2NkZmE1OGMwNDJiNTJmZmMxZjE1MjA5NTAxMTdlOTI5Y2VmOThiYzk2N2E1YjE2ODdjYzc0ZjY3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zdG9yZS11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmM4YzI0OGRmZTM4NjA3OGNkYmE4OWM4YmU5MjQzYTE1NzUwOTgzNDE5NjQ3NGEyN2Q4YjhhZDE2M2VkZTNmOWUxZDU2YjViYTUxMTBkMWY2ZWM2ZmFlOThjZDUwODFiOTlhYTJlMjFhN2I2ZDdkNTkxNmJiMDMxYmQyYWY1ZTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjc2N2I5ZGU4MzBhNmVkMWJkYmEyNGUxNzdhMWNlNTBmMDgzYmNkNzZjZDMzNzAzMjM2YTI0NDhjNDE3ODJjMTQwN2M1ZmQ4NWY5MDVlZjhkZWM3OWMxMmVkZDAyOTUyMTg3YzIxNjE2NmZhMzRjNWZhYTBiMTU1M2QyMDhhN2EiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3ZhdC1kYXRhIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3Rvb2xzLyoiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy8qIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3pvbmUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3pvbmUtaGVscGVycy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zd2luZ3NldC1saXZlc2xvdHMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zd2luZ3NldC1saXZlc2xvdHMtdjAuMTAuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leG8tdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by11dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzZGMyMTlmMjhmYjhlMjk4ODVmNTU0M2EwNjFmM2RiMGNlZWEwYmVmOTllYWI5N2Q3MTY0MzljMGM0YmQ0NTQwZDM4NDU0MjBlY2FlYzRhNmU4ZTczZmVhNjYwZmE2NWQxZDQ4MTUzYzc5MmE2NzE2NTFhZWQ1NDk5MWM0YjRlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjc3ZWYwZjRiMDZkZTczNTNlYjg1ZDkyNjgxNDhjMDg3NWVhN2ZmNmI1NzJmMjM0YjFmZGJlODA4M2YzZWVjMWVlNDdkZmFkYjQyY2I3N2EzYWJiOWU4MGM3ZjU4NzliOTQ5NWJlYjJhYWEwZGVkNjA2ODQwNGFjZWQzMjU0Mzc2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy92YXQtZGF0YS1iaW5kaW5ncy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjc3NDJlNDA4M2IyNjc3MmNlYWExMDdjZjQzZmExOTFmMmM2NGJjYTI2YmRhZWZjOGUwNjUzMDU0MGQ2N2I5ZGFkNGJjNDYxMTVjMzM0YWIzMDE1Y2ExN2MxOWU5OTNlY2M3YWFjYWE4NGEwZTc1ODQzMTM0YTNjNGE3ZGI1YjkwIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3ZhdHMtdjAuMTUuMSI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy92YXRzIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvdmF0cy12MC4xNS4xIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvdmF0cy12MC4xNS4xIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9hZ29yaWMvKi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9hZ29yaWMvKi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3MvKi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3MvKi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3MvYmFuay92MWJldGExL3F1ZXJ5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy9iYW5rL3YxYmV0YTEvcXVlcnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL2JhbmsvdjFiZXRhMS90eC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3MvYmFuay92MWJldGExL3R4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy9kaXN0cmlidXRpb24vdjFiZXRhMS9xdWVyeS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3MvZGlzdHJpYnV0aW9uL3YxYmV0YTEvcXVlcnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL2Rpc3RyaWJ1dGlvbi92MWJldGExL3R4LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy9kaXN0cmlidXRpb24vdjFiZXRhMS90eC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3Mvc3Rha2luZy92MWJldGExL3F1ZXJ5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy9zdGFraW5nL3YxYmV0YTEvcXVlcnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL3N0YWtpbmcvdjFiZXRhMS90eC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3Mvc3Rha2luZy92MWJldGExL3R4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy90eC92MWJldGExL3R4LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy90eC92MWJldGExL3R4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2dvb2dsZS8qLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2dvb2dsZS8qLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2dvb2dsZS9wcm90b2J1Zi9hbnkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vZ29vZ2xlL3Byb3RvYnVmL2FueS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pYmMvKi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9pYmMvKi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pYmMvYXBwbGljYXRpb25zL2ludGVyY2hhaW5fYWNjb3VudHMvdjEvcGFja2V0LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2liYy9hcHBsaWNhdGlvbnMvaW50ZXJjaGFpbl9hY2NvdW50cy92MS9wYWNrZXQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWJjL2FwcGxpY2F0aW9ucy90cmFuc2Zlci92MS90eC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9pYmMvYXBwbGljYXRpb25zL3RyYW5zZmVyL3YxL3R4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2liYy9jb3JlL2NoYW5uZWwvdjEvY2hhbm5lbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9pYmMvY29yZS9jaGFubmVsL3YxL2NoYW5uZWwuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWJjL2NvcmUvY29ubmVjdGlvbi92MS9jb25uZWN0aW9uLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2liYy9jb3JlL2Nvbm5lY3Rpb24vdjEvY29ubmVjdGlvbi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pY3EvKi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9pY3EvdjEvKi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pY3EvdjEvcGFja2V0LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2ljcS92MS9wYWNrZXQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3N3aW5nc2V0L21zZ3MuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vYWdvcmljL3N3aW5nc2V0L21zZ3MuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vc3dpbmdzZXQvcXVlcnkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vYWdvcmljL3N3aW5nc2V0L3F1ZXJ5LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3N3aW5nc2V0L3N3aW5nc2V0LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Fnb3JpYy9zd2luZ3NldC9zd2luZ3NldC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by90ZW5kZXJtaW50LyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vdGVuZGVybWludC8qLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3RlbmRlcm1pbnQvYWJjaS90eXBlcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi90ZW5kZXJtaW50L2FiY2kvdHlwZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vdnN0b3JhZ2UvcXVlcnkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vYWdvcmljL3ZzdG9yYWdlL3F1ZXJ5LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvZXJ0cCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2VydHAtdjAuMTYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvZ292ZXJuYW5jZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2dvdmVybmFuY2UtdjAuMTAuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25ldHdvcmsiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9uZXR3b3JrLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL2V4cG9ydGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9leHBvcnRlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3N1YnNjcmliZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3Vic2NyaWJlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy90ZXN0U3VwcG9ydHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3dpbmdzZXQtdmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3dpbmdzZXQtdmF0LXYwLjMyLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3RpbWUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy90aW1lLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0cyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdHMtdjAuMTUuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92b3ciOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92b3ctdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b2UiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b2UtdjAuMjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL3pvZVNlcnZpY2Uvem9lLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9lL3NyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b2UtdjAuMjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvdmlydHVhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi92aXJ0dWFsLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUvc291cmNlLW1hcC1ub2RlLXBvd2Vycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc291cmNlLW1hcC1ub2RlLXBvd2Vycy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3NvdXJjZS1tYXAtbm9kZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc291cmNlLW1hcC1ub2RlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEwIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiaW1wb3J0LW1ldGEtcmVzb2x2ZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJpbXBvcnQtbWV0YS1yZXNvbHZlLXYyLjIuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiamVzc2llLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogImplc3NpZS5qcy12MC4zLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NyYy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY3JjLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzgwODJjNzQwOGUyODMyY2NhNDc0NDc4MTA4YWQzMjNiOTBiOGZiNjBlYzM0MmFiZGU2NmRjNDEwM2JkYmFjM2ZiN2E3MGJkYTAxZDdlN2E0ZjJlMTFkMDUxOTJhNzUwZDMxMmUwOTViYTM5MDI2NjRhYjNiZDA0Njg0YzM4NjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGliLWJvYXJkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9saWItYm9hcmQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZGFlMTQ3ODFiZTlmYzcwMzM5N2E1Y2UwNDcxYmIyOGU2Mjk2NGFlZWYxYTQxOTJlZTNiMGE2ZDdhNmY5NDA5OTM1Mzc3ZGZhOGQzYWVkYjY2ZmU5NGQxMzEwNDE5NjNjYzczMDZkMzlhNjQ2OGJkYmYzYWIyMThlZjE5YmZhYiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3dhbGxldC1iYWNrZW5kIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9jYWNoZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2NhY2hlLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL21haW4uanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9lcnRwIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZXJ0cC12MC4xNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3N1YnNjcmliZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc21hcnQtd2FsbGV0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc21hcnQtd2FsbGV0L3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL21hcnNoYWwtY29udGV4dHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdGltZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3RpbWUtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy93YWxsZXQtYmFja2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9lLXYwLjI2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy96b2VTZXJ2aWNlL3pvZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvdmlydHVhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi92aXJ0dWFsLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJpbXBvcnQtbWV0YS1yZXNvbHZlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogImltcG9ydC1tZXRhLXJlc29sdmUtdjIuMi4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hY3Rpb25zLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9hY3Rpb25zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDIwZmY2MzFjYjRiYWViODFjM2YyNzE4YmQ3Y2Q0MTBkZTljYThlZjIyMzEyMjQzNDZjOTA4ZjMxZDg0NDc5ZTM2MDJmZmE1MjUxMzcxYWExY2RmYmZkODY5YmNhZDNmZTM0OGY5Nzc2MzIzZTNmM2ZhZTEwMmMwZGNlMzIxYzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYmlnaW50U3RyaW5naWZ5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9iaWdpbnRTdHJpbmdpZnkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2YWNmY2QxMWE5YWNkYmUyZmM2M2E0ZDk4NzM3OWRkYzBiYTBkMzY3NTY1MDRkMTc2M2U0OGI5ZTY1M2FiMjYxYzkwMjM3NmFhYmU2ZTdjNzViNzhjM2VlMDgwYzYwOWQ2YmNjZDEzZDJjZTNiZDJhNjE2OGY5OGE0ZmQzYTdlMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kYXRlLW5vdy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZGF0ZS1ub3cuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMjJlNjA4MDEwYmVjODQ3YTZmNDUxZmFmNWIzMjQ2MTc2MjkyNTY3ZmNiNjEwYTAwNDhhNTJlNDk4NTk4Y2E1MDA3MDIwYTkyMGZiZDAyZTZiYmY2NWYyZTA4NTg2ZDU3MjAwNjUzMmU2NThjY2JlM2RhZmRjOGFlNmUwOWExYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9maW5kT3JNYWtlSW52aXRhdGlvbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZmluZE9yTWFrZUludml0YXRpb24uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0ZGZiMjZjZTRlMjYzMDFmMzhiZmIyODU5MTJhNzM0NDYzNGQxNDUwYWIxNzU0MzJjMDc3YTUzZDkxNzIyOTJlMzdlMTA1ZTFkNTVkMjE2YTY4NmJjM2M1ZDUyYjY2OGU2ZTRlZDlhNWM5ZTQ5MTAwMzVjNTVmNzk3N2U1ODA1NSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbnRlcm5hbC10eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW50ZXJuYWwtdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiYzk1MzdjZGJiMmUyNWM0MDE1NzE0YTNmOWFkMTU2YmU0ZmI2NjY5ZjU5MDk1MThhYTk5NTEwZWJmODAwZTNhMzNlNGZjMGJlNmY5YmViNTc4MzFiMTNiNjEyNDQyODViYzAyNWZhOGMzNDc4OWZlZDQwNzE0YmQ0N2VmMzc1OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pc3N1ZXJUYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXNzdWVyVGFibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkNjdiOTM3MmQ3NjYxNTVhYjExZTMzYzM0ZGNmZDg1YWIyMTI5YTlmMDhmYTM4NzllYThiNTRkZjBmNWJjNTcyOWJkNGZmZjVlOTJlZTNlNThmYzJiZjg1ZWY5NWIxOTE2ZmI3MTVjMWIxMzBjYmEwNDg0YzMyZjY4NmZhOGQ1YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9saWItZGVoeWRyYXRlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9saWItZGVoeWRyYXRlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGI0Njc1NjkzYTliNjNjOTExNjBhNjk0ZmVmMDJlODc2YmI4MTFiMTZkOWYyYzEyZTFkZmZkZDMxNTY5Mjc2ZGUxNjA2MWRjMjA0YTc0ODIxYTczNWI2ZWIwNWM0YTRlZGMxOGQzNDk1NTE4YjRhYTBiZTRjYTJkMjdkMmQyZTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGliLXdhbGxldC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGliLXdhbGxldC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQyNzhlNDJiNGQ5NzczNzMzM2UzOGZjYzI4ZTZmODdlMDRlOTE3NjMwZjI2MDA4MTFhZWFkY2QzY2I2ZWY4NzExMjk1MzliNGM3ZWJiYTE3N2NlMDQ0NjMxZmJjNDk5ODFiMmNhZDQwZmM3MTQyZjI5M2M0NjVjYTZiNmM2MGI4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3B1YnN1Yi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHVic3ViLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNWM2NzMyNTExY2NkOTc2ZTk4ODExNWUyYTg2ZjI2YzkzZjg4ODEzZTlmOGI3YTA2OWU1NGI1Y2U0MjNiNmE3YTc2YWZhZmZlYTEzYjE1OTkyZjgxNjEyY2IzNTEwNTJmZmE1NGU5ZGE0ZWI1YjNkNzY1MmFmOGFhMGE4NWQ2NDIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvd2FsbGV0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy93YWxsZXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4MTcwYzRiMTkyN2MzMGZkNTQ2OGE4ZWFhNTBkMTZkYTNhYjgxMjI2ZTUwMjE5YTBjMmYzZjBmMTk4MTJjNTQ0NTRhYmRlOGRmNzRiMTAwZjQzZGVlMDZlNDVkNDU0YjA1ZGM1NjdmYjE3YjgwODk5YTMyY2M2MzU5Y2ViYmE5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy96b2UtdjAuMjYuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy96b2UiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy96b2UtdjAuMjYuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3pvZS12MC4yNi4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3Rvb2xzLyoiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy8qIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3pvbmUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3pvbmUtaGVscGVycy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2VydHAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvZXhwb3J0ZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2V4cG9ydGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvc3Vic2NyaWJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zdWJzY3JpYmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci90b29scy90ZXN0U3VwcG9ydHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zd2luZ3NldC1saXZlc2xvdHMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zd2luZ3NldC1saXZlc2xvdHMtdjAuMTAuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3dpbmdzZXQtdmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3dpbmdzZXQtdmF0LXYwLjMyLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3RpbWUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy90aW1lLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdm93IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdm93LXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9lLXYwLjI2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy96b2VTZXJ2aWNlL3pvZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvdmlydHVhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi92aXJ0dWFsLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2J1bmRsZS1zb3VyY2UiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYnVuZGxlLXNvdXJjZS12My40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9idW5kbGUtc291cmNlL2NhY2hlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2J1bmRsZS1zb3VyY2UtdjMuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jYWNoZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9idW5kbGUtc291cmNlL2V4cG9ydGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2J1bmRsZS1zb3VyY2UtdjMuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9leHBvcnRlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9idW5kbGUtc291cmNlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9idW5kbGUtc291cmNlLXYzLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NhcHRwIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NhcHRwLXY0LjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NhcHRwL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jYXB0cC12NC4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pZGVudC1jaGVja2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGlzdC1kaWZmZXJlbmNlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1hc3NpZ24uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtYXNzaWduLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi90aHJvdy1sYWJlbGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rocm93LWxhYmVsZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3NvdXJjZS1tYXAtbm9kZS1wb3dlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NvdXJjZS1tYXAtbm9kZS1wb3dlcnMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS9zb3VyY2UtbWFwLW5vZGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NvdXJjZS1tYXAtbm9kZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInlhcmdzLXBhcnNlciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJ5YXJncy1wYXJzZXItdjIxLjEuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYnVpbGQvbGliL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInlhcmdzLXBhcnNlci9icm93c2VyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInlhcmdzLXBhcnNlci12MjEuMS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9icm93c2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzRmMTU0MzVlZGQ1OWI5NmRiNmUwYmJlYjE0ODdjZGRlMjAzNzEyYTQ1NmFlODI2Mzg2MDBjZjkyOTk5NTM4MWFhMzc4ODc0NGE4MzZkZWQxZjIxMjUyNjFiN2FkM2FmNzBhMDZkY2JkMWNhYWY5NGRhOTZhNWE4MWZjYjZjNTMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvem9uZS12MC4yLjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvem9uZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvdG9vbHMvKiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLyoiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvem9uZS1oZWxwZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vem9uZS1oZWxwZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvdmlydHVhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi92aXJ0dWFsLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9kdXJhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImR1cmFibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NzhmMTYxN2RlZGZiNTM3NWNkMjBiN2M2MGY4N2YwNjAyYzk3NDNiYmM0NGMzOThiOWIwMTczZmM2NDgwNTBjNjI3OGEzNmI2Y2I1MzZkNzc5NGVlMDJhNjFkOGQxM2UwZTcxNTgyN2RkZTQ1OTkyMmU5YjQ4ZGRlYmY0ZTU3ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kdXJhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kdXJhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDkyNGQxZmZkOGYzZDY5NTZjYThlOGNhNmVlZDEzZWQ5YmNlZjY4ZWM5ODEyYWU3NmY3MGVjMjQxYTE0ZGY0N2JmZTRjYzgxMTIwYmZkYTc3MmU5OTExMWU3ZTNkNmE5YWJlOTI2YmZkZGJiNTVkYWJlYzUzNzQ2ZjAyODUyNDkiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2NvbW1vbi12MS4yLjUiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2NvbW1vbiIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtYXNzaWduLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLWFzc2lnbi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90aHJvdy1sYWJlbGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImFwcGx5LWxhYmVsaW5nLWVycm9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMTA4Y2YyODBiMDA5ZTkwODk3OWU3MzNjZjc0ZjYxMDUwN2JhMWU5YTRhOTJkMWFkZmI0ZmIwNGQ3Y2E4NjE5MjI4MDdkMzJiN2E2MDUyZjZlMDI4MmQ0YWVjZjdkZTI1OWY3OGZkNTM1Y2I4YjI4ZjcyZGMyMDE0Mjc5Y2UyMmEiCiAgICAgICAgfSwKICAgICAgICAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImZyb20tdW5pcXVlLWVudHJpZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0MmRhN2M2NTA4NDU2MDFhODc0ODYwMjhlMDZlOTU1YTlkMjQ4NjAyNGI1Njg1ZjM3M2UwYTFjMGEyOWRhMjAyNGZjOGViNzY5NjRkMTNmM2ZmYTAyYmNmZGRhYTNmOGNiNDhhYzQzNDQ0NzgzYjhhZjI3NDU4OWU2NTkwYWM3MiIKICAgICAgICB9LAogICAgICAgICIuL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaWRlbnQtY2hlY2tlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNiNTNmMTQ0ZDBiYjEzOWU2ODA1NzE3OGY2OWRkYWQ0NzRiMjMxYzk3YTUxMjE1NDg0MWRmNTY4YzQxZDE2Yzg3OTM3N2JjOWI0YmQwOThiZWIyNzY5MDhlNmU5ZjBkNzU0ZDU4Njc4OTQwOWE2NmJhZjJhOGNkMWFkYmRmYThmIgogICAgICAgIH0sCiAgICAgICAgIi4vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImxpc3QtZGlmZmVyZW5jZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjZlZmNjNTAwNjkwMTkwNGM3Y2RkM2EwNDAxOTJlMjE0NTU4ZTYwMzk2NTlkOWUwZjdmMjJiZTZlZGE4ZjRjOTQ5YWU0MDIxNjBkMDYzYTUzZjY5Zjc4ZTVmYmRkNmUyNDk3YzU1NjI2MTU0NGY3NjIxZWQ0Y2NlZmM1MjgwYWFmIgogICAgICAgIH0sCiAgICAgICAgIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJtYWtlLWFycmF5LWl0ZXJhdG9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjZmOTIzNzRlOGQ3N2I4NmVjMjAzNWMyMWJlOWUzYTQwNzZmMGQxZWY1ZThlOWY3ODU5NzBiMjMzNGE3MDcyODQ2MDBkMTIyNWNkOGY0YWY2OWIzNzMyNmUxYjlmNTJjYTVmZjFhNzJjMjNjYzllNmIzNjZiNjEwOTdkN2E0ODciCiAgICAgICAgfSwKICAgICAgICAiLi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm1ha2UtaXRlcmF0b3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2ZWUyNmQwYTZlYjAwM2Y3NzZmODNhYmQ3NDM2MjdmOTZiZTFlMDU0NzFkM2NjMjY2YmViYzU4OTQ5ZmIwNTEwMzQ3NjA3MjBhOWQzMjM0MGYzMmU2ZGE5NjE2NGZjMWEzNzg4MmE4ZDQxMmFmODljZWI0YjhjYjkxODJmZmIyMyIKICAgICAgICB9LAogICAgICAgICIuL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAib2JqZWN0LW1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjEwN2JkODg3YWE4MzRiMzE1MTE1YjgxOGEwYTZlMGMyMWNlMTM4ZmI0NzhkYzM3NDQxMDYzZjMxNzdkMmQ2NzU3NGNkYTQ1OGJkZjA5ODAyZDg3MzRjNTVjMjhkODM1NmNhNGQyZGUwZTA1ZTgzMDNiZTQ4NDk5NTY4MTNjZmNhIgogICAgICAgIH0sCiAgICAgICAgIi4vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm9iamVjdC1tZXRhLW1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjRhNWE2MTYwNmRmZmNkOTlkMmI2NjJmZDQzNDdlYzkyMjFjZTIyYmUwOWI4M2EzZGZhMDQ1NWY4OTI1ZmVlN2IyZDY0NWVkZDRmODA1MWY3MzY4MTFlNTk3Mjk0MjVlMGZiZGU4YjdjMzBlODE0NjIzOGFlMGZlNzhlODg4MWIxIgogICAgICAgIH0sCiAgICAgICAgIi4vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJ0aHJvdy1sYWJlbGVkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2YxNWEyZTE3ZDgzZDZkOGM3YTU2YjYzYTE0OTY0YjYyMjVjNzhhYmM0NTFmZWZkODY2NTUzOTQxNDBjZjRkYmQ4NGZlNDM2MGYxZmU0ZDllMmZhMGRkMzdhNjJmOWZmNmQ0N2Y4NGE4ZmI1MTMxZDk3YjM3MGFiNTYzZTBmNzYiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNiI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZW52LW9wdGlvbnMiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjkzMzBlY2MyZDU1NDljYmI3OGE0Mzc0ZTk2ZmRjZTBkMDIzNGU1NzFlNDgzYTNhZmI4YmNiNDc5MTYwMDM4MTM4ZThiMDAyOTg3YzZlYjhlMzZlZDQ2ZTg2OGMyOGFkZGNjYzI4YTFiMWM4NjJiODBmYmI4YzI2NWMxNjcyZGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW52LW9wdGlvbnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vudi1vcHRpb25zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZWI1MDliOThhY2E0NDgxZjc5NWQwY2E5OGM2OGU4MmJlMzEwNzI5YTVkZDRiZDU5NTlhY2FkNDMzODQ4YjdkMWI3NzllNmVlMTAzMzQ4MDUxNzg3ZjgwM2UzNjI2Yzg0YzhkNzBmYjkwN2ExYzk2YjI2YWZkOWU4MjJmNjM1MjMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vycm9ycy12MS4yLjUiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2Vycm9ycyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvYXNzZXJ0LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXNzZXJ0LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbXBhcnRtZW50LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29tcGFydG1lbnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbG9ja2Rvd24tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJzZXMvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBhYzA5MTQxMTJkZTk0Y2JhYjJlNTZkZTdiMDg0YjA5NjQ0YTcyYjU4MGVhMjgxYjc3YTYzYjU3MGZhNThlNWQ4ZGRlZDFhNGFkOTcxNjRhNTA0MDQ3NGYzMWJiNmM1ZWZiYjFiMDM3NWRlMGEzN2QwYmFhMjRkMmYzMTcyNzI1IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9FLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9FLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzkyM2JiZTcxM2M4ZDdmZjQ3MmE2Njc4OTM5MWVmNDBlZTkzY2I5N2M2OWI2Mzg3NTM0NGFlNDdmMGIzZTBhOWY4MTJmNTRlZTkzOThmNWVkZDU4YmYzODU5NmI5Y2I1Mjc1MzhlZDQ0MzVlYmFhODQ4MjEwZGY3YTlmODcxYWIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhwb3J0cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhwb3J0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3NjdiOWRlODMwYTZlZDFiZGJhMjRlMTc3YTFjZTUwZjA4M2JjZDc2Y2QzMzcwMzIzNmEyNDQ4YzQxNzgyYzE0MDdjNWZkODVmOTA1ZWY4ZGVjNzljMTJlZGQwMjk1MjE4N2MyMTYxNjZmYTM0YzVmYWEwYjE1NTNkMjA4YTdhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xvY2FsLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9sb2NhbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY4NDVlYThlYWViM2ViZTc4ZmVjNjg3NGFjY2VkNGZkOThkYTcyMjExMGExNTY2ODVhMzVmZDkxNWViMmY5MDg2ZDA0ZGU0N2UzMzgxZTk2MDhlNTc5ZDQ2Yzc3MzQ1NGRjMGMyNzkzNWU5ZmQyMjgyZGE1MjkyMWE3OTUzMjhjIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMmYwN2Y1NjdjY2NlNjcwMmUwOGMwNmE3MDQ5YmQ0MTNiNDIwMzAxODY4YjAwMTNmZjFiM2YzY2IwNThmOTJjY2Y5NjMwNmE4YjdkMWNiMjFlZTJhYWQ0OTRkOWQzYTUzNDdiZDJiMmQwNDczNzJmYzExOWNiZTc5MjgwYjczZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9uby1zaGltLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9uby1zaGltLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzMxMzI0ZjFlMWVhMzcwMGQ5OTJkMGNlNzVlM2YwZGY0YjRkNDk0YjBlMTZhY2ZkMzg4ZTE1MjYzOGM4NTg0YTJmYzZkZDJjYmUzMDNhNjI2MGQ4ZDY3OTBjZGIwYmEwMmMxYjI1ZTNmZTg5ZjQxN2NjOTg1MGIwY2YxOTRkODciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHJhY2stdHVybnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RyYWNrLXR1cm5zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTc1ZGM2ZmExZTI3OWE5Y2U3MDZhMjQ3ZTE5YTRjNmQ4ZjM0NTQzMTY0MDJmMDhlODZiYmZhNjM0ZjM2MzA1Y2ViZTE4OWU3YTJjMWEyZjQ4ZjU3OWViMGJmYWY5ZTQyYzIxYjM4OTMxZWMzMGVjZmJhMzhhNjU0NGMyNWZhN2IiCiAgICAgICAgfSwKICAgICAgICAiLi91dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJ1dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUxMTgzZDhiMzNlYmJiZWEwN2ZhZTM1Y2ZkZmI5M2I5MzljY2RhMzg0ZDNiNGMzODc1YjM2MTdmNDY3ZDJlNTI4NmViODA1YjA4ZTY3MzNiZWQzNjQ5YjMzYzU4YzQxMTVkZmU4MmVkOWEzOTIyMDVhZWNmYjJkMzE5MWRlMWRkIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9leG8tdjEuNS4zIjogewogICAgICAibmFtZSI6ICJAZW5kby9leG8iLAogICAgICAibGFiZWwiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2lkZW50LWNoZWNrZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLWFzc2lnbi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1hc3NpZ24uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3Rocm93LWxhYmVsZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdGhyb3ctbGFiZWxlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhmZTRjMWJlNmNlOGMxYzViZTc1ZTA4MzY2ZmZhMDRjOTU5YWQ1ODIzMDEwZTRiNjEwNjI4NmUxM2E4YjhlYmY4OGYzZWY4ZDcxZmY4Y2U0OThmZjA1ZGYxZjcxOWUyZGFlNDBlZDUzMDFiNzRlMGM2OTMzNWQyYTAyOTFlOWY4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4by1tYWtlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by1tYWtlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5OWI1MGYxNTNhNWZkMDZlOGJkZmQwMGMwZGZiOWE3MTVkOTQwMDYxNGM3OWQ0NGRiYmM0MDAyM2FiMTRmOWFkYTA2NDI5NjRlOTZmOWQ2NjQ1ZTgwNmMyOTI1ZDIwNGI4NmEyYmMyZWFjZTVjZGE2ZTY4Mzk3NzMxZjlkZjIzMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leG8tdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNkNGY4MGI1MDdmNGFjZTNkMmUwM2FkMzRiZTI1YzY2Yzg3YzA4NGYzNGU3YWY5NGJkOWFjYjcwMWU2NGFmMjdiNzM0OGQ3NmY5NWYxYmMwNTA4ODAzMzAzZTBmNGJiMjFlOTI3YmVlMmNkNjJkNjFjN2VlOTE2MjhjYzRmZDY4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2dldC1pbnRlcmZhY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2dldC1pbnRlcmZhY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxN2E3N2UwMzhiOWQ1ZDVlMTM2MmY4N2NmM2M0YTA5YzcwNjE0YjI4ZGU1NDljNGQ2MjY2ZDg1MGJhZjM4NTg5ZDAxOWZhNGJjYWU1YTFmNzFhNTQ0MzRiZWVlOWFmMjk5Nzc1Y2IwODRhNDNiNWE2NjM3N2U0ZTZiMDVlZjBlMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmNzY3YjlkZTgzMGE2ZWQxYmRiYTI0ZTE3N2ExY2U1MGYwODNiY2Q3NmNkMzM3MDMyMzZhMjQ0OGM0MTc4MmMxNDA3YzVmZDg1ZjkwNWVmOGRlYzc5YzEyZWRkMDI5NTIxODdjMjE2MTY2ZmEzNGM1ZmFhMGIxNTUzZDIwOGE3YSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZmFyLXYxLjEuNSI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZmFyIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQwNmY0MzUzZjVjNjg4MTdhMmRlZTdjODFkYTE1NjNhZWZmNWYyZWM4ODNiZmVkYjkxNTc1MWYzNzVjYTg1NTA1MWRjNDUzYWJmNjU2OWMxOGIyZDljMzAxMmE4MGE0NWY2N2YxOWFlNTgyNjUxNTc5YjY3YzI2ZGZlMTU5NjcxIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9tYXJzaGFsLXYxLjUuMyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vbWFyc2hhbCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pZGVudC1jaGVja2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGlzdC1kaWZmZXJlbmNlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1hc3NpZ24uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtYXNzaWduLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi90aHJvdy1sYWJlbGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rocm93LWxhYmVsZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEwIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBjMzM3MDAxMDg1Mzk2NDZjZjBmZDM3MmU3NzM5OGE3ODQ2ODJkZGExYWVmZjQyYmNiNjYzYjZjYmJmNzA5ZWY0NzlhYjRmMmY1YWNmYWNjZDE3MTFlMDMyYTAxM2FhYWZhZmYyMmRmMjljOGViY2UyMmFlOWI1MThiZDkyYWRiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbmNvZGVQYXNzYWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY0MmY3OTMyZmE5NzUyNWJlOThlMjdlNTE4YWI4M2ZjMjEwZWQwNGZjNmE2ODc4ZTY0NTVhOTBkMjA3NDA5NWYwNzcwOTBjMzRlZDFjNGVkMDhiMjI2OWM2MmJhMTk2Mjc3YzQzM2NlNzgzMDQyYTBkMDI4ZjE5MWU3Y2NjNGI2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW5jb2RlVG9DYXBEYXRhLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjM4NGVlYzRjNzE5ODUwNzRmNmQ1NDdiMWNkMTAxYzhlNWI1ZTNkMGEyODA5M2ZiZDgzZDJkNTQzYjIxNmM0NmQ5MzQ0NGY1MmFjMmZhYmEzNzgzMTk5MTYwNjllMjg3MjdjNWYxYTk3MzVlZWEzZmYxZWE0MmQwZDQ0OTI3NzgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW5jb2RlVG9TbWFsbGNhcHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZVRvU21hbGxjYXBzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTY2ZGM2ZjBiYmE4Y2I0ZTU1YmI5NTBmMjAxMzY0ZmNmNGEwMWY2NzYwMmVjM2QxNTk3MjQ0NmFkMWZhMzZhYzA0OTU1OGFiYWM3NWU3ZjFlNDhhMTM3NDQzMGQyNjYwOTAzODMxMzE2OWRmOWVmYWEyNGExMjcxZjU2ZTE5ZTIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFyc2hhbC1qdXN0aW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwtanVzdGluLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjI0ZmFiY2I2MDQzMDNmMTM3YmVhYWY5ZGMxOThmYTU2YTViYjA4YmE4NzUwMGY2NGZjNzZiNzJjOWEwZmI0ODgzMDVjMTVhNWZkYjY1NDQ3ZTBkMzI3M2MwOTUzOGJkOWY4NmJiMDkxZWFmMzkzNzJkMjM4YWM0YWJkMWMzZmYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYWQ0NWZhYmUwYzcxNzZmNjg3M2ZjYzhiYmMxMTVjNjZkMzU4MDc1ZDhiMTU4YzczY2U5NWZmMmJiNWI3YjVkZmYxNmZiMmMzYzk1MWZjMDZlNzVmNWVlMDUyNWZiZmZkOTU5ODA2MzQyOWQxOTliZGRhNjg5ZTc3MjkyYWNiNDkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFyc2hhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFyc2hhbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjVkYWZhZWNhMThhYzhhYzAxM2RiYzZkZTQ1MGVlZmVlNjQzNGIzZDVmMmM0ZjYxMDRjMzhhMTcyNDliODkyMmE1ZmVmNDgwZDU1OThjMjliYjJjOTZjMzViYzYwNDA4Njc1ZTFlYzExZGRlNWFlZDhiYzE5ZDQxMTMzMWVlYTdmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JhbmtPcmRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmFua09yZGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTM1NDY5NGMwZDM2YWY4MDA2YWI4MThmM2I0Yzg0NWFlZDYwODAwMWMzYjllNmI1NWIwNjBmMjAzNTAxMTdhZGI3NGNhNzU1ODcxZDEwYTQ5ODY5ZjM3MTAyMjdjOTY4NmI0NDE5NTM1YTZiNDI5NTE0ZGVlNGNjNWMxODdlOTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjc2N2I5ZGU4MzBhNmVkMWJkYmEyNGUxNzdhMWNlNTBmMDgzYmNkNzZjZDMzNzAzMjM2YTI0NDhjNDE3ODJjMTQwN2M1ZmQ4NWY5MDVlZjhkZWM3OWMxMmVkZDAyOTUyMTg3YzIxNjE2NmZhMzRjNWZhYTBiMTU1M2QyMDhhN2EiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL25hdC12NS4wLjEwIjogewogICAgICAibmFtZSI6ICJAZW5kby9uYXQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEwIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjc0MDYxMzdlMWJkM2I1NTg0YzVmMjdkYmZjYmFlMmVjNzdjYmE2M2RmMDgxYzJkNDQwNWJhZGVhYjc5ZGY1ZWQyZTc2NTY0YTAwOTUzNTUzYWYxYzFjMGYzNTcxMDQ5NjM0OGY3ZWZlYzNhOTE2NzkwZTRiNWZjZmUzMTVlZjIxIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcGFzcy1zdHlsZSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9lbmRvdy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5kb3cuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZmFzdC1jaGVjay9hdmEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGZhc3QtY2hlY2svYXZhLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGliL2VzbS9hdmEtZmFzdC1jaGVjay5qcyIKICAgICAgICB9LAogICAgICAgICJAZmFzdC1jaGVjay9hdmEvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBmYXN0LWNoZWNrL2F2YS12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmU3OGMyNGZhYmEwN2Y2NGEwY2Y4NDI5N2EzZmUxZWRjNmE1NzVkNjk0M2U2M2VlNjBhMTgxZTdmYWQ2NDQ0NGU2YTI3MzRkYTY4ZmRhNzgwMzZmMGZiZWUzYWExYjFlZGNkNzgzYzM5NTk4NGVkMTNhNTg0ZWZiZjlkZjFkNjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29weUFycmF5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb3B5QXJyYXkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5NjAwZjhjY2Q3MzE0YzA3MDkwNWVmODdjZGFmMTU2NWNjNjY0NWYzOGE0ZmNhYmMxYjNhMjVkYTAxODhmYmNjODBjMDZjMzM1OTZjYTllNTljODgyYWMzNjVhYWFmODk3NTg5ZGY3ZDI1OGI5NDIxNmFjN2E0NzRmYzQzNDJlNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb3B5UmVjb3JkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb3B5UmVjb3JkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTg5NjA3MzQwYjI1MDc5N2Y5MzAzMjM3M2I4NGJkNWUzY2MyZmE2NjdmNWUxNTJmNjI5NGZmZDA2ZjUzMGQzZDZiMDUwYmJjZTcxM2UzMTllZmQ1MTMxNjQyMGVhNTlkZDg3NWMwN2Y4MzBkNDc1ZDgwNWIyYmJjNzFlZGZmMjUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kZWVwbHlGdWxmaWxsZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyNTY2ZmRjNWFiZDA3NzdmYWRjNDQ0ZWZmNmM5N2NhYWQ1OTI5N2QyYzk1NGI2NDIxMzIzYzFmOTc4NjliY2Y5Y2RhYTQzZjNmNTJkZDQxODAxMWM3YWJkYjEzMzdlMGM5OWNiNjU0YzgwOWM4MmE4Njk4NmNhMzRkYzgzYzIyMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lcnJvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXJyb3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4MGRhN2UzNjY5M2FmMzk5NDdmYTNiM2RkZjZmYTcwODQ4OTViNzhiZDYwNGU1ZTYwNmI1NTc2MTE4ZmIxZDQ5YzQ4MTQ2NzA0MWE1NzcyY2ZjNTQ5YjJjMTk0NzZkNzNmNDhkN2FmNzYxOWViMDU5YzI5ZGYzNzJjNjMwOGQ1MCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pdGVyLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2l0ZXItaGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjkzM2YxZjY5YmU2OGQzNTFmMzEyZWQ4NWQyY2YyMzIxNGE3ZjFmMGQ5YmJmYTE1M2I1M2ZmMDFiMDhjNDE2N2NkZmMzYjI3NWViZmU3YTYwOTI3YjI2YTljMjA4ZWMwYWY4MDhkZWE5MmQ4NzJjNDJmYTExNzRmOWFlZGZkYWMwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2UtZmFyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlLWZhci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU5NzEzN2VkYmIyMGUwMTM0YzZmNWZmY2NmYjhhNzc1MGMyNmEzMGY4NzQ3YjhjMzZjZTE3ZTMzNGJkMTg1YzRjYzkzMjY5NzI2YTUwYjllZjk4MzA2NDc1NGRiMTU2YzllMGVmMDIzZGE0YTg0ZDQ5NDkxOGJhNGQwMDUwODQ5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2VUYWdnZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ha2VUYWdnZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwNGI0OGI1NDUyNmY1NTA4NTAxMWFkZWQ0Yjg1MmU5Zjc3ODVkYTYxM2ZkNzQ0MTFhMjFkMWM1NWEyZTc0NjdlYTU4NmJjMDMzZTNkYzEzNGM2Nzc1YjQ2Mzg0ZjE4NjkzNjQ2Mzc4MGIwYmJiNGZiYjM0M2RjZWUxYjA5ZTk4YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZGRhMzkwNzk0NzQ4YmIxYTVhMjk2OTMzZTY1M2Y2NGM0ZDQ5YjkzMDgxYmM1NTEwYjI1YmMxYjUzZTRjZWJhMWExNWEyNmUyNDQ0Y2FmYWQ2N2EwZjgxNmQyZWI0MTI4MDdhMzA0ODA5NDNjMjIxNjYwM2U0N2M4YTAyZDI5OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXNzU3R5bGVPZi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFzc1N0eWxlT2YuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjNjk0OWVhNmYwZDg4NGYyNDY5ZWFkYzc3YzQ3NjU5NDYwZWJmNTA2NjZlYmI5ZTVhZmNiNmU5ZTlkMTEzY2Q4M2ZkMGQ3MDU2MDZkMDZkYmU1MjdhYTg4NGU3MTI4MWZhZTFlNTlmZjQwZTY2YzZiYTcyY2M5MTAyZjkzMDMzNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yZW1vdGFibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JlbW90YWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjM0ZDljZTU1YjNlOTY5MWQ0ZDRmOTU2OGM0YjI0YzJhNDA5MThiYmNlNmY0NzdhOTAxNTk5M2Q5MmZlNTU0YWY2MTQxZjQwYzBiNGM5OGU2ZDMwYWUyNWUwNmMwYWEyMzM4ZjZlZDQyYTliOGJkZGM2YWU3ZGE0NGFlNmQwODZjIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3NhZmUtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc2FmZS1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjUxYWE0YTE5OTMzOTQ4NjY3ODMwMzA3NWM2MWUyYWQyMGFhZDY1MjBmZjJiMGQ5ODE2MjY5NWFlNTc3ZTdlYzM3YTFlNTNmZjNiNDEzYWE3MmJhMGNhZTI5OGMxMzM2NTI4ZWJiMWFiMGFjNDAyYTc4Mjg1ODIyMWYzOTJiOGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RyaW5nLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdHJpbmcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3Y2Y4ODkxOTk0YmY0ZmUwYjUxZWYzYmY3ZjFkODZhOWMwNThmZWE4NjJlNGRlYzQ4ZThhNjYwZjBlODdlNTQ0OGEzZjdjMmJkMzc2OGFiYThiOGY2NTE1NDI5ZTU2MzM3MmE1YmEwMGYwZGI4MjZhMzZiNTI3ZTMyMGUyNjhhZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zeW1ib2wuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N5bWJvbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNjYTliZTU1NzM0YjEyYzIzZWNiY2NjM2VmYWIzMjRiYjM0NGE1NzFjZGI0ZmRjN2NkN2M1YTgwMTFlNWZkMjIxYWQyMzdmNDc2YzVmYjI2ZjE2ZThhNzNkZTE1ZWQ3YzQ5NzkzYzlmNTU3YWUwMDNiOWRjY2Q5ZDNiNDQ2ODAwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RhZ2dlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdGFnZ2VkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGY3Njg3NzYyN2FhZTg0NjVlZDZhNjdiNDNkOGY3ZmUwZjYyMjMwMTAzOTA5MzE5NmQzZTUwN2ZhMzM3YjE2ZDFhY2FmYTliYWQ5MDhhMTA2M2FmODU0ZjNlOWVkNWNhYzg2MzgxMWJhZTkxY2VhY2ZiNWJmNDAxMmU4ODU0MmIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUd1YXJkcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZUd1YXJkcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ4Mzg5N2ZjNDc2YWE4ZGFhNmQ0ODc0YmI2YmIyNGQ2ODIzZTYxMTA3MTMwZmQ4ZTM0NDc0YWMwMWUzYmNjMTJkYWQ2M2VmNzc5MmE4MzFiYWNmZGVkNjc2MzFmMDE1ZTVmOGYyZTQ2NmE2NmZjOThmNGUxMGNlNTliOThlNGZmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3NjdiOWRlODMwYTZlZDFiZGJhMjRlMTc3YTFjZTUwZjA4M2JjZDc2Y2QzMzcwMzIzNmEyNDQ4YzQxNzgyYzE0MDdjNWZkODVmOTA1ZWY4ZGVjNzljMTJlZGQwMjk1MjE4N2MyMTYxNjZmYTM0YzVmYWEwYjE1NTNkMjA4YTdhIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wYXR0ZXJucy12MS40LjMiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3BhdHRlcm5zIiwKICAgICAgImxhYmVsIjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtYXNzaWduLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLWFzc2lnbi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90aHJvdy1sYWJlbGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhYTNjMTRhZWI3ZWY0ZTFhNjAwYWY5ZGExYTI5NWQ3NzNhYzdmNzI5YTI3NWVlYWE0ZGNlMzkyYWQ4ZTE4YTc2M2QwMzZjOTdmNWFkZGZlYTliMWIwMjQxMDIwNmVlMjk1YWI5YzFmMjllNDc4ODdhMTY4YWIxZDFlYjBhMmU1YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2NoZWNrS2V5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNWQzYjIzNWM4YzI3NWJiMjBkZTFkMzAzNmZiODllZmYxMWJlMmY3MDcyNjU1YWJjMDYwZGI2MGI0YWFmZGI0MmVhYzlhNDE5YmFjNzA0YjM1OWVlY2FhYzIzYTU0MmM5N2VjNzhkYTk2MmQwZWY4MmYxOTcwNWE0ZDdiZTAwMDEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb21wYXJlS2V5cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBjZjQwMzZkNGI4NGM4YWVlNWY1MDFiMzZiNzQ4N2EyNmM1YjM5ZWMwODY0MzFjNGRjNmY4MGI5NjdjNTY2MGUwYzM2MWZjYzI2ODRiNDQ5ZWNlMWJlOTQzMDUwYmNhYTU3OTMxMWMzZWZhODg1OTYyNzk4N2U1M2MyMzc5MjJhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29weUJhZy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb3B5QmFnLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDUyNjNjOWZmODE4MTdiOGY1NDcxMTVhYzU4NjdmNDkyNGNjZDcxYjE2MmQ0ODQ5MTc0ZjZlN2VjYzBlOGEzMjk0ZjgzOTI1NWIxMjIyYTZjNjMxYzY0NDMzZDg4MTQ5NWJjN2JlNjRlYWIxNjY5ODlhODJiZTQ0ZTVmODQ1YzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jb3B5U2V0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2NvcHlTZXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlYmYyOTBmNDFhMzU0ODdkNTNhMTQ5ZDQ1NGRmMWRhMTA0MWZlMGE3NmExMzg4YzJhYWFhNjRlODMwMTI1ODgzYzNiZWE2OGNhNzU1YzczNGM2MWFhNGM0ZjkzZTE5MjA3N2FkMDM1NTE5NDY3YjQ4MzdmZjhjMDgxYjU5OGZkMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYThjOTBjMTJjZGI4ZTY0ZGRlNTcxNTA3ZjczMWVmZDkyYmUyYjdhYTMzZjZiOTJkNjJmYTU3NzExMzMwMmQ2MDU5MmE0NWZlNjliYjJiMTZiYzRmZTI2ODI4NGI0M2ViYmM5NzY3YTcyM2Q2YjllYzQzMjEyM2FhMTYxMWE1YTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwNzM0YTdlYjA4NGQ3ZTU0N2VlYjJiZDcxMGM0ZmFhMDEyYjRjYWFkMmRlYmM4MTQ5Nzg0NDVlZThhZjA1Y2IyN2U4MDIzMWIwYjk0NTk4OWNkOWUxNWFjMjJiNGNkMTg4NDYzY2Q1NDQ5OGFlMjgzNmIwZmQ4YTYzYjEyMzIwMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjljYTdmODExMjVmZDcwZDg1YzM5Mzc2YzdhMGRkOGE2M2Y4MzJkMjJjMTM4NDdjMWQxNmNjZTJiYmY5ZTE3MjU0N2EyNTA0NjIxNDMwODRiMzc5N2Y0MjJhMWQ4NTc2YWM0MWZlYzg2YjA0YzFjZTA0Zjk0YThkMzNhYmJjYTIxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMTRhM2RiOGUyM2YzNmFlMDU3MTlmZGYyN2ExYTk3ZmNkODJlOTgyNDA1Y2JlM2M1NDlkNmQzMjZmOTc3YTkzNDhiNDUwN2E5NDgxYTZjZDQ2ZDg5N2YxNjYzOTZiYmI0NjVkMWI5ODYyZjJjOTUxNDA3ZDI1OTRkYzYyZTU0MCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM1NGU0MGFiYTc2M2Y4YzdjZGY2MjBlZDhjZjUyMWY1NzM2Nzg5MjAwZWUyMDNkODBiZmIzMGRmZGI4ZjA5YTMxZjI3YWFiZTg3ZDExNGU4MjY2ZjhlODhlZTIwNWI2NDg5NDljZDc4ODJkMzVmZTc5YzQ2MDI2YzY4NmJhOGI4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3NjdiOWRlODMwYTZlZDFiZGJhMjRlMTc3YTFjZTUwZjA4M2JjZDc2Y2QzMzcwMzIzNmEyNDQ4YzQxNzgyYzE0MDdjNWZkODVmOTA1ZWY4ZGVjNzljMTJlZGQwMjk1MjE4N2MyMTYxNjZmYTM0YzVmYWEwYjE1NTNkMjA4YTdhIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Byb21pc2Uta2l0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9hc3NlcnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hc3NlcnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29tcGFydG1lbnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb21wYXJ0bWVudC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93biI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24tc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sb2NrZG93bi1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcy90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjAwYjgxYzVlODRlYThlZTYwMjBmMDNkNzI5YzdlMGFhNjllOTliZTM3YmRiNzcyYjc0YjkxZWE3ZTNhMjA4NGI0ZDE0NDk0ZmI0NzcyMDU1MTg2ZTViNzY3OTBkNmEzMDBmMmIxYTY3OGYwZjljYmZjNTg2ZDE4MGY0NGFmNjciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXMtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXMtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImFmNWM2MTU5MTdkNTQ0ZjMzZmMyOGY1YmRhZTJlOTAwYzU2MTY0NDY3OGIwMmEzZmI1YzgwYjgxMTA2NjExYmI2ZDA5NWM1NzU5NTY2YmFjYmFlY2YzNjNhNWU3MjM4NmQxN2ZkZjEyNzQ4NWEwY2JhMGFkMTk2MGRkNDkwMDA5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21lbW8tcmFjZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWVtby1yYWNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDllOGZjNGRjYTIxYWUzNmRhM2QyYjY2ODA0YTJhZmJhNDg4M2NhNWIxMGRhOTgwM2E4MThkYzMxNTgzZWUwNDAwYzliYTQyZWQ1M2YyYTk4MGZiZjU1Y2E0YjQ4ZDEzYzc4NTJlMzViNWFkZTVhZDc1ZGRjY2FkOTg3YTRkMmEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzg1ZDRlZmI4YzE3ZTBhZTYyOWJkMDk1ZjQ4NDdiNjY4NDM5ZGE0ZDFlN2VkMTQyNTU5Y2FhNTY1YTEyYzEwZjExOGMyMDM5ZDYxNWFhZDNhMTUzZTY3OWU2NzVmOGU0N2ZlOGJkMGI3YWQxYTc4YzMxZmNhYjNlMTdiYTM1NzkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjc2N2I5ZGU4MzBhNmVkMWJkYmEyNGUxNzdhMWNlNTBmMDgzYmNkNzZjZDMzNzAzMjM2YTI0NDhjNDE3ODJjMTQwN2M1ZmQ4NWY5MDVlZjhkZWM3OWMxMmVkZDAyOTUyMTg3YzIxNjE2NmZhMzRjNWZhYTBiMTU1M2QyMDhhN2EiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3N0cmVhbS12MS4yLjUiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3N0cmVhbSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9zdHJlYW0tdjEuMi41IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3N0cmVhbS12MS4yLjUiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vc3RyZWFtIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3N0cmVhbS12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3N0cmVhbS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vc3RyZWFtLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvYXNzZXJ0LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXNzZXJ0LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbXBhcnRtZW50LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29tcGFydG1lbnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbG9ja2Rvd24tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJzZXMvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJkZjc2Y2NiZTc2ZDA4MjgzMzQ5ZGFlNzJlNDAxOWYwYTA5MjNmZjBiMjYzNDA4NGE2YzE5YjVlYTI2NzdhNTE4OWYyYTA0Zjc0NWY5N2EwNWY3ODQxYjZiMjM3NDlhNzhiZDQyZTZkOTFmMGQ5N2E1MmJlY2ZlZTc0YmM0NWFkIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJqZXNzaWUuanMtdjAuMy40IjogewogICAgICAibmFtZSI6ICJqZXNzaWUuanMiLAogICAgICAibGFiZWwiOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICJsb2NhdGlvbiI6ICJqZXNzaWUuanMtdjAuMy40IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiamVzc2llLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogImplc3NpZS5qcy12MC4zLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhNDI1NjAxYTg2M2YwMzNiOWZlODUyM2JkZjc4OGYyZGYxZjAxN2E1YjU0NTllNTAxNWJjYjg1NmY0MDYxYzFhMmYyMTkyZjE0YTRhNDhhMWYyMjQyZjFhZjJjNGVhOGY0NjVjYjc1OGIzYzhlMzU5NDlmNTE3YTdmZGI5MTZiMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMC9FLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMC9FLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTI4ZThmM2RhNGQ2MTFmNzk3OThjMDU4MWI4MWIyY2FhNDBkNzM1NDVkZmM3ZDI5ZDQ2NDY1OTYwYWMwOThiOTkxZmYwMGIzN2Q2OWFhMWY3ZTdhY2I3NWM0NzllYmFiODU0MzQ2NjBiYWEyMzVmNjMyNTRjZjYwY2YzZTE2YjYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcwL2FzeW5jLWdlbmVyYXRlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGNlMzcwMjZiYWIwOWYxZWIyODBkZTMwNjViYmMyNjNlN2Y4YTdlNTVjNzhlNmIzMmJhMWIwMTY1NzFiYTQ3ODQ5MjMyYWU0OTBmM2IwNTgwNGJkZjM3YjYxMTQyYmFkOWViMWI0NTRmMzE5NzM0YTRhODc1YTkwMGRjYzIwNDgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImU0ODEzNTJkYzA5Nzk5MmUxNGQ3NzYzYjljY2ZkZWY0ZjRjZTMyMjJhOWQ1NmZiOWRkNWNjYzkwYTQ2ODllNTk2NjdhYmFiODE3MzVkODk2NzcwZThiZmU5NTMxNDg4YTYxOGZhY2Y3YTJjMmM4ZTY4OThiZDk4M2E3ZGUxMzUxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcwL21ha2Vycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvbWFrZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTA1YzIyM2U1ZjQwNWJmMzljMjJkYTdhMjI2ZGUyODYxNTVlMjM4MmY3YmJhZjE2NTA4ZmM5MWIxYjZmNWZjYjM2NWE1MDMwNjg2NDVlNDUzNThjYWUyNmE2OTRlMTkwOTU1ZDY1ZDdiMjYxMjhlMGM0MmM0ZmNhZDE1NDA0ZjQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcxL2FzeW5jLXRvb2xzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzJmNzAyOWUyYWNiNzk3YjgzY2FlODNiZDkxYjAwMzk4ZDIxMmVmYTg5NDEzZTY2NDg1ZjYwYmY2YmZhMGU0NWY0MmU1N2E4MGRjNTE0MGQ2MDU3M2UxNjNlNzFjNDZhZDJkZDAyNjFlMWQzMGZjNTAxZDJlMDZkNzgzMGM0ZjIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzEvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzEvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhmMDIxZDI5NDVhNzcyYzMyYmRiYWUwZjk0ZGI2MGM4ZWZiMTNjMjgyZWQ1NTdiN2Q5ZmEwMGY5MWM0YzlkMzAyYWQ4NGUyNWUyMjY2NmZlYTdjZmRkMGEzZmJjM2M5MjEyNDU0YmRiMzFjZGUzYzY5OTc1YzBkYTdmYmRlZWY4IgogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfVBLAwQKAAAAAAAAAAAAp4DtHYQBAACEAQAAIAAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9oZWFwLmpzeyJpbXBvcnRzIjpbIi4vc3JjL2hlYXAuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9oZWFwLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vc3JjL2hlYXAuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh5JSp08BAABPAQAAJwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvZXhwb3J0cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACbQYZgdwoAAHcKAAAkAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9oZWFwLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9leG8iLCJAYWdvcmljL3N0b3JlIiwiLi9tYWtlLW9uY2UuanMiLCIuL2tleXMuanMiLCIuL3dhdGNoLXByb21pc2UuanMiXSwiZXhwb3J0cyI6WyJtYWtlSGVhcFpvbmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcixpc1Bhc3NhYmxlLG1ha2VFeG8sZGVmaW5lRXhvQ2xhc3MsZGVmaW5lRXhvQ2xhc3NLaXQsbWFrZVNjYWxhck1hcFN0b3JlLG1ha2VTY2FsYXJTZXRTdG9yZSxtYWtlU2NhbGFyV2Vha01hcFN0b3JlLG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUsbWFrZU9uY2VLaXQsa2V5cyx3YXRjaFByb21pc2U7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dLFtcImlzUGFzc2FibGVcIiwgWyRo4oCNX2EgPT4gKGlzUGFzc2FibGUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXhvXCIsIFtbXCJtYWtlRXhvXCIsIFskaOKAjV9hID0+IChtYWtlRXhvID0gJGjigI1fYSldXSxbXCJkZWZpbmVFeG9DbGFzc1wiLCBbJGjigI1fYSA9PiAoZGVmaW5lRXhvQ2xhc3MgPSAkaOKAjV9hKV1dLFtcImRlZmluZUV4b0NsYXNzS2l0XCIsIFskaOKAjV9hID0+IChkZWZpbmVFeG9DbGFzc0tpdCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlU2NhbGFyTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRo4oCNX2EpXV0sW1wibWFrZVNjYWxhclNldFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyU2V0U3RvcmUgPSAkaOKAjV9hKV1dLFtcIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUgPSAkaOKAjV9hKV1dLFtcIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUgPSAkaOKAjV9hKV1dXV0sW1wiLi9tYWtlLW9uY2UuanNcIiwgW1tcIm1ha2VPbmNlS2l0XCIsIFskaOKAjV9hID0+IChtYWtlT25jZUtpdCA9ICRo4oCNX2EpXV1dXSxbXCIuL2tleXMuanNcIiwgW1tcImFnb3JpY1ZhdERhdGFLZXlzXCIsIFskaOKAjV9hID0+IChrZXlzID0gJGjigI1fYSldXV1dLFtcIi4vd2F0Y2gtcHJvbWlzZS5qc1wiLCBbW1wid2F0Y2hQcm9taXNlXCIsIFskaOKAjV9hID0+ICh3YXRjaFByb21pc2UgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuY29uc3QgZGV0YWNoZWRIZWFwU3RvcmVzPUZhcignaGVhcFN0b3Jlcycse1xuZGV0YWNoZWQ6KCk9PmRldGFjaGVkSGVhcFN0b3JlcyxcbmlzU3RvcmFibGU6aXNQYXNzYWJsZSxcblxuc2V0U3RvcmU6bWFrZVNjYWxhclNldFN0b3JlLFxubWFwU3RvcmU6bWFrZVNjYWxhck1hcFN0b3JlLFxud2Vha01hcFN0b3JlOm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUsXG53ZWFrU2V0U3RvcmU6bWFrZVNjYWxhcldlYWtTZXRTdG9yZX0pO1xuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VIZWFwWm9uZT0oYmFzZUxhYmVsPSdoZWFwWm9uZScpPT57XG5jb25zdHttYWtlT25jZSx3cmFwUHJvdmlkZXJ9PW1ha2VPbmNlS2l0KGJhc2VMYWJlbCxkZXRhY2hlZEhlYXBTdG9yZXMpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBtYWtlU3ViWm9uZT0obGFiZWwsX29wdGlvbnMpPT5cbm1ha2VIZWFwWm9uZSggYCR7YmFzZUxhYmVsfS4ke2xhYmVsfWApO1xuXG5yZXR1cm4gRmFyKCdoZWFwWm9uZScse1xuZXhvOndyYXBQcm92aWRlcihtYWtlRXhvLGtleXMuZXhvKSxcbmV4b0NsYXNzOndyYXBQcm92aWRlcihkZWZpbmVFeG9DbGFzcyxrZXlzLmV4b0NsYXNzKSxcbmV4b0NsYXNzS2l0OndyYXBQcm92aWRlcihkZWZpbmVFeG9DbGFzc0tpdCxrZXlzLmV4b0NsYXNzS2l0KSxcbnN1YlpvbmU6d3JhcFByb3ZpZGVyKG1ha2VTdWJab25lKSxcblxubWFrZU9uY2UsXG53YXRjaFByb21pc2UsXG5kZXRhY2hlZDpkZXRhY2hlZEhlYXBTdG9yZXMuZGV0YWNoZWQsXG5pc1N0b3JhYmxlOmRldGFjaGVkSGVhcFN0b3Jlcy5pc1N0b3JhYmxlLFxuXG5tYXBTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLm1hcFN0b3JlKSxcbnNldFN0b3JlOndyYXBQcm92aWRlcihkZXRhY2hlZEhlYXBTdG9yZXMuc2V0U3RvcmUpLFxud2Vha01hcFN0b3JlOndyYXBQcm92aWRlcihkZXRhY2hlZEhlYXBTdG9yZXMud2Vha01hcFN0b3JlKSxcbndlYWtTZXRTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLndlYWtTZXRTdG9yZSl9KTtcblxuIH07JGjigI1fb25jZS5tYWtlSGVhcFpvbmUobWFrZUhlYXBab25lKTtcbmhhcmRlbihtYWtlSGVhcFpvbmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUhlYXBab25lIjpbIm1ha2VIZWFwWm9uZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAARN05ccAIAAHACAAAlAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL2V4cG9ydHMuanMiLCIuL21ha2Utb25jZS5qcyIsIi4va2V5cy5qcyIsIi4vaXMtcGFzc2FibGUuanMiLCIuL3dhdGNoLXByb21pc2UuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2V4cG9ydHMuanMiLCIuL2lzLXBhc3NhYmxlLmpzIiwiLi9rZXlzLmpzIiwiLi9tYWtlLW9uY2UuanMiLCIuL3dhdGNoLXByb21pc2UuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9leHBvcnRzLmpzXCIsIFtdXSxbXCIuL21ha2Utb25jZS5qc1wiLCBbXV0sW1wiLi9rZXlzLmpzXCIsIFtdXSxbXCIuL2lzLXBhc3NhYmxlLmpzXCIsIFtdXSxbXCIuL3dhdGNoLXByb21pc2UuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAKi20+WACAABgAgAAKwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaXMtcGFzc2FibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSJdLCJleHBvcnRzIjpbImlzUGFzc2FibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHJlYWxJc1Bhc3NhYmxlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImlzUGFzc2FibGVcIiwgWyRo4oCNX2EgPT4gKHJlYWxJc1Bhc3NhYmxlID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlPShzcGVjaW1lbik9PnJlYWxJc1Bhc3NhYmxlKHNwZWNpbWVuKTskaOKAjV9vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Bhc3NhYmxlIjpbImlzUGFzc2FibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAhp/JKHsDAAB7AwAAJAAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMva2V5cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYWdvcmljVmF0RGF0YUtleXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qga2luZD0obGFiZWwpPT4gYCR7bGFiZWx9X2tpbmRIYW5kbGVgO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzaW5nbGV0b249KGxhYmVsKT0+IGAke2xhYmVsfV9zaW5nbGV0b25gO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgYWdvcmljVmF0RGF0YUtleXM9e1xuZXhvQ2xhc3M6KGxhYmVsKT0+aGFyZGVuKFtraW5kKGxhYmVsKV0pLFxuZXhvQ2xhc3NLaXQ6KGxhYmVsKT0+aGFyZGVuKFtraW5kKGxhYmVsKV0pLFxuZXhvOihsYWJlbCk9PmhhcmRlbihba2luZChsYWJlbCksc2luZ2xldG9uKGxhYmVsKV0pLFxuc3RvcmU6KGxhYmVsKT0+aGFyZGVuKFtsYWJlbF0pLFxuem9uZToobGFiZWwpPT5oYXJkZW4oW2xhYmVsXSl9OyRo4oCNX29uY2UuYWdvcmljVmF0RGF0YUtleXMoYWdvcmljVmF0RGF0YUtleXMpO1xuXG5oYXJkZW4oYWdvcmljVmF0RGF0YUtleXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYWdvcmljVmF0RGF0YUtleXMiOlsiYWdvcmljVmF0RGF0YUtleXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAApX0TfuoGAADqBgAAKQAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvbWFrZS1vbmNlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIm1ha2VPbmNlS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRlZmF1bHRMYWJlbFRvS2V5cz0obGFiZWwpPT5oYXJkZW4oW2xhYmVsXSk7XG5oYXJkZW4oZGVmYXVsdExhYmVsVG9LZXlzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VPbmNlS2l0PShkZWJ1Z05hbWUsc3RvcmVzLGJhY2tpbmdTdG9yZT11bmRlZmluZWQpPT57XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHVzZWRLZXlzPXN0b3Jlcy5kZXRhY2hlZCgpLnNldFN0b3JlKCBgJHtkZWJ1Z05hbWV9IHVzZWQga2V5c2ApO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYXNzZXJ0T25seU9uY2U9KGtleSk9PntcbnR5cGVvZiBrZXk9PT0nc3RyaW5nJ3x8RmFpbCBga2V5ICR7a2V5fSBtdXN0IGJlIGEgc3RyaW5nYDtcbiF1c2VkS2V5cy5oYXMoa2V5KXx8XG5GYWlsIGBrZXkgJHtrZXl9IGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpbiB0aGlzIHpvbmUgYW5kIGluY2FybmF0aW9uYDtcblxuLy9cbi8vXG51c2VkS2V5cy5hZGQoa2V5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgd3JhcFByb3ZpZGVyPShwcm92aWRlcixsYWJlbFRvS2V5cz1kZWZhdWx0TGFiZWxUb0tleXMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd3JhcHBlcj0obGFiZWwsLi4ucmVzdCk9PntcbmZvcihjb25zdCBrZXkgb2YgbGFiZWxUb0tleXMobGFiZWwpKXtcbmFzc2VydE9ubHlPbmNlKGtleSk7XG4gfVxucmV0dXJuIHByb3ZpZGVyKGxhYmVsLC4uLnJlc3QpO1xuIH07XG5yZXR1cm4gKC8qICAgICAgICAgICAgKi93cmFwcGVyKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZU9uY2U9KGtleSxtYWtlcik9PntcbmFzc2VydE9ubHlPbmNlKGtleSk7XG5pZihiYWNraW5nU3RvcmUmJmJhY2tpbmdTdG9yZS5oYXMoa2V5KSl7XG5yZXR1cm4gYmFja2luZ1N0b3JlLmdldChrZXkpO1xuIH1cbmNvbnN0IHZhbHVlPW1ha2VyKGtleSk7XG5zdG9yZXMuaXNTdG9yYWJsZSh2YWx1ZSl8fFxuRmFpbCBgbWFrZXIgcmV0dXJuIHZhbHVlICR7dmFsdWV9IGlzIG5vdCBzdG9yYWJsZWA7XG5iYWNraW5nU3RvcmUmJmJhY2tpbmdTdG9yZS5pbml0KGtleSx2YWx1ZSk7XG5yZXR1cm4gdmFsdWU7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7bWFrZU9uY2Usd3JhcFByb3ZpZGVyfSk7XG4gfTskaOKAjV9vbmNlLm1ha2VPbmNlS2l0KG1ha2VPbmNlS2l0KTtcbmhhcmRlbihtYWtlT25jZUtpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlT25jZUtpdCI6WyJtYWtlT25jZUtpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABoc8uBbwkAAG8JAAAtAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy93YXRjaC1wcm9taXNlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3BhdHRlcm5zIiwiQGVuZG8vZmFyIl0sImV4cG9ydHMiOlsiUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWRJIiwiUHJvbWlzZVdhdGNoZXJIYW5kbGVyIiwiUHJvbWlzZVdhdGNoZXJJIiwiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiLCJ3YXRjaFByb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsTSxFOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5cbi8qXG5cbiAqL1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVySGFuZGxlcj1NLmNhbGwoTS5yYXcoKSkucmVzdChNLnJhdygpKS5yZXR1cm5zKCk7XG5cbi8qXG5cbiAqLyRo4oCNX29uY2UuUHJvbWlzZVdhdGNoZXJIYW5kbGVyKFByb21pc2VXYXRjaGVySGFuZGxlcik7XG5jb25zdCAgICAgICAgUHJvbWlzZVdhdGNoZXJJPU0uaW50ZXJmYWNlKCdQcm9taXNlV2F0Y2hlcicse1xub25GdWxmaWxsZWQ6UHJvbWlzZVdhdGNoZXJIYW5kbGVyLFxub25SZWplY3RlZDpQcm9taXNlV2F0Y2hlckhhbmRsZXJ9KTtcblxuXG4vKlxuXG4gKi8kaOKAjV9vbmNlLlByb21pc2VXYXRjaGVySShQcm9taXNlV2F0Y2hlckkpO1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVyRnVsZmlsbGVkST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWQnLHtcbm9uRnVsZmlsbGVkOlByb21pc2VXYXRjaGVySGFuZGxlcn0pO1xuXG5cbi8qXG5cbiAqLyRo4oCNX29uY2UuUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWRJKFByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSk7XG5jb25zdCAgICAgICAgUHJvbWlzZVdhdGNoZXJSZWplY3RlZEk9TS5pbnRlcmZhY2UoJ1Byb21pc2VXYXRjaGVyUmVqZWN0ZWQnLHtcbm9uUmVqZWN0ZWQ6UHJvbWlzZVdhdGNoZXJIYW5kbGVyfSk7XG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLlByb21pc2VXYXRjaGVyUmVqZWN0ZWRJKFByb21pc2VXYXRjaGVyUmVqZWN0ZWRJKTtcbmNvbnN0IGNhbGxNZU1heWJlPSh0aGF0LHByb3AscG9zdEFyZ3MpPT57XG5jb25zdCBmbj10aGF0W3Byb3BdO1xuaWYoIWZuKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuYXNzZXJ0LnR5cGVvZihmbiwnZnVuY3Rpb24nKTtcbi8qXG5cbiAgICovXG5jb25zdCB3cmFwcGVkPShhcmcpPT57XG4vL1xuLy9cbmFwcGx5KGZuLHRoYXQsW2FyZywuLi5wb3N0QXJnc10pO1xuIH07XG5yZXR1cm4gd3JhcHBlZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgd2F0Y2hQcm9taXNlPShwLHdhdGNoZXIsLi4ud2F0Y2hlckFyZ3MpPT57XG5Qcm9taXNlLnJlc29sdmUocCk9PT1wfHxGYWlsIGB3YXRjaFByb21pc2Ugb25seSB3YXRjaGVzIHByb21pc2VzYDtcbmNvbnN0IG9uRnVsZmlsbGVkPWNhbGxNZU1heWJlKHdhdGNoZXIsJ29uRnVsZmlsbGVkJyx3YXRjaGVyQXJncyk7XG5jb25zdCBvblJlamVjdGVkPWNhbGxNZU1heWJlKHdhdGNoZXIsJ29uUmVqZWN0ZWQnLHdhdGNoZXJBcmdzKTtcbm9uRnVsZmlsbGVkfHxcbm9uUmVqZWN0ZWR8fFxuRmFpbCBgcHJvbWlzZSB3YXRjaGVyIG11c3QgaW1wbGVtZW50IGF0IGxlYXN0IG9uZSBoYW5kbGVyIG1ldGhvZGA7XG52b2lkIEUud2hlbihwLG9uRnVsZmlsbGVkLG9uUmVqZWN0ZWQpO1xuIH07JGjigI1fb25jZS53YXRjaFByb21pc2Uod2F0Y2hQcm9taXNlKTtcbmhhcmRlbih3YXRjaFByb21pc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUHJvbWlzZVdhdGNoZXJIYW5kbGVyIjpbIlByb21pc2VXYXRjaGVySGFuZGxlciJdLCJQcm9taXNlV2F0Y2hlckkiOlsiUHJvbWlzZVdhdGNoZXJJIl0sIlByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSI6WyJQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkiXSwiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiOlsiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiXSwid2F0Y2hQcm9taXNlIjpbIndhdGNoUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACdAa0jBQUAAAUFAAAhAAAAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL2NhY2hlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIi4vc3RvcmUuanMiXSwiZXhwb3J0cyI6WyJtYWtlQ2FjaGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV0sW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dXV0sW1wiLi9zdG9yZS5qc1wiLCBbW1wibWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3JcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ2FjaGU9KGNvb3JkaW5hdG9yPW1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yKCkpPT57XG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjYWNoZT0oa2V5LC4uLm9wdFVwZGF0ZUd1YXJkUGF0dGVybik9PntcbmlmKG9wdFVwZGF0ZUd1YXJkUGF0dGVybi5sZW5ndGg9PT0wKXtcbnJldHVybiBFKGNvb3JkaW5hdG9yKS5nZXRSZWNlbnRWYWx1ZShrZXkpO1xuIH1cblxuY29uc3RbdXBkYXRlLGd1YXJkUGF0dGVybl09b3B0VXBkYXRlR3VhcmRQYXR0ZXJuO1xuaWYodHlwZW9mIHVwZGF0ZSE9PSdmdW5jdGlvbicpe1xucmV0dXJuIEUoY29vcmRpbmF0b3IpLnNldENhY2hlVmFsdWUoa2V5LHVwZGF0ZSxndWFyZFBhdHRlcm4pO1xuIH1cblxuY29uc3QgdXBkYXRlcj1GYXIoJ2NhY2hlIHVwZGF0ZXInLHtcbnVwZGF0ZToob2xkVmFsdWUpPT57XG5yZXR1cm4gdXBkYXRlKG9sZFZhbHVlKTtcbiB9fSk7XG5cbnJldHVybiBFKGNvb3JkaW5hdG9yKS51cGRhdGVDYWNoZVZhbHVlKGtleSx1cGRhdGVyLGd1YXJkUGF0dGVybik7XG4gfTtcblxucmV0dXJuIGNhY2hlO1xuIH07JGjigI1fb25jZS5tYWtlQ2FjaGUobWFrZUNhY2hlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VDYWNoZSI6WyJtYWtlQ2FjaGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAefCRTggCAAAIAgAAIAAAAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy9tYWluLmpzeyJpbXBvcnRzIjpbIi4vdHlwZXMuanMiLCIuL3N0b3JlLmpzIiwiLi9jYWNoZS5qcyIsIi4vc3RhdGUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2NhY2hlLmpzIiwiLi9zdGF0ZS5qcyIsIi4vc3RvcmUuanMiLCIuL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vdHlwZXMuanNcIiwgW11dLFtcIi4vc3RvcmUuanNcIiwgW11dLFtcIi4vY2FjaGUuanNcIiwgW11dLFtcIi4vc3RhdGUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAACnXpwxQEAAAUBAAAIQAAAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy9zdGF0ZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiR1JPVU5EX1NUQVRFIiwibWFrZVN0YXRlIiwid2l0aEdyb3VuZFN0YXRlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgR1JPVU5EX1NUQVRFPWhhcmRlbih7Z2VuZXJhdGlvbjowbix2YWx1ZTp1bmRlZmluZWR9KTtcblxuLypcblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLkdST1VORF9TVEFURShHUk9VTkRfU1RBVEUpO1xuY29uc3QgICAgICAgIG1ha2VTdGF0ZT0odmFsdWUscHJpb3JTdGF0ZT1HUk9VTkRfU1RBVEUpPT5cbmhhcmRlbih7XG5nZW5lcmF0aW9uOnByaW9yU3RhdGUuZ2VuZXJhdGlvbisxbixcbnZhbHVlfSk7XG5cblxuLypcblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZVN0YXRlKG1ha2VTdGF0ZSk7XG5jb25zdCAgICAgICAgd2l0aEdyb3VuZFN0YXRlPShzdGF0ZVN0b3JlKT0+KHtcbi4uLnN0YXRlU3RvcmUsXG5nZXQ6KGtleSk9PntcbmlmKCFzdGF0ZVN0b3JlLmhhcyhrZXkpKXtcbnJldHVybiBHUk9VTkRfU1RBVEU7XG4gfVxucmV0dXJuIHN0YXRlU3RvcmUuZ2V0KGtleSk7XG4gfX0pOyRo4oCNX29uY2Uud2l0aEdyb3VuZFN0YXRlKHdpdGhHcm91bmRTdGF0ZSk7XG5cbmhhcmRlbih3aXRoR3JvdW5kU3RhdGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiR1JPVU5EX1NUQVRFIjpbIkdST1VORF9TVEFURSJdLCJtYWtlU3RhdGUiOlsibWFrZVN0YXRlIl0sIndpdGhHcm91bmRTdGF0ZSI6WyJ3aXRoR3JvdW5kU3RhdGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA9bduiZ0XAACdFwAAIQAAAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy9zdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL2ludGVybmFsIiwiLi9zdGF0ZS5qcyJdLCJleHBvcnRzIjpbIm1ha2VDaGFpblN0b3JhZ2VDb29yZGluYXRvciIsIm1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLEZhcixkZWVwbHlGdWxmaWxsZWQsbWFrZU1hcnNoYWwsbWF0Y2hlcyxtYWtlU2NhbGFyTWFwU3RvcmUsbWFrZVNjYWxhckJpZ01hcFN0b3JlLHVudGlsVHJ1ZSx3aXRoR3JvdW5kU3RhdGUsbWFrZVN0YXRlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV0sW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiZGVlcGx5RnVsZmlsbGVkXCIsIFskaOKAjV9hID0+IChkZWVwbHlGdWxmaWxsZWQgPSAkaOKAjV9hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaOKAjV9hID0+IChtYWtlTWFyc2hhbCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYXRjaGVzXCIsIFskaOKAjV9hID0+IChtYXRjaGVzID0gJGjigI1fYSldXSxbXCJtYWtlU2NhbGFyTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJ1bnRpbFRydWVcIiwgWyRo4oCNX2EgPT4gKHVudGlsVHJ1ZSA9ICRo4oCNX2EpXV1dXSxbXCIuL3N0YXRlLmpzXCIsIFtbXCJ3aXRoR3JvdW5kU3RhdGVcIiwgWyRo4oCNX2EgPT4gKHdpdGhHcm91bmRTdGF0ZSA9ICRo4oCNX2EpXV0sW1wibWFrZVN0YXRlXCIsIFskaOKAjV9hID0+IChtYWtlU3RhdGUgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlS2V5VG9TdHJpbmc9KHNhbml0aXplPShvYmopPT5vYmopPT57XG5sZXQgbGFzdE5vbmNlPTA7XG5jb25zdCB2YWxUb05vbmNlPW5ldyBXZWFrTWFwKCk7XG5jb25zdCB2YWxUb1Nsb3Q9KHZhbCk9PntcbmxldCBzbG90PXZhbFRvTm9uY2UuZ2V0KHZhbCk7XG5pZighc2xvdCl7XG5sYXN0Tm9uY2UrPTE7XG5zbG90PWxhc3ROb25jZTtcbnZhbFRvTm9uY2Uuc2V0KHZhbCxzbG90KTtcbiB9XG5yZXR1cm4gc2xvdDtcbiB9O1xuXG5jb25zdHt0b0NhcERhdGE6a2V5VG9Kc29uYWJsZX09bWFrZU1hcnNoYWwodmFsVG9TbG90LHVuZGVmaW5lZCx7XG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cbmNvbnN0IGtleVRvU3RyaW5nPWFzeW5jKGtleVApPT57XG5jb25zdCBrZXk9YXdhaXQgc2FuaXRpemUoa2V5UCk7XG5jb25zdCBvYmo9a2V5VG9Kc29uYWJsZShrZXkpO1xucmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XG4gfTtcbnJldHVybiBrZXlUb1N0cmluZztcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgYXBwbHlDYWNoZVRyYW5zYWN0aW9uPWFzeW5jKFxua2V5U3RyLFxudHhuLFxuZ3VhcmRQYXR0ZXJuLFxuc2FuaXRpemUsXG5zdGF0ZVN0b3JlKT0+XG57XG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0VXBkYXRlZFN0YXRlPWFzeW5jKGJhc2lzU3RhdGUpPT57XG5jb25zdHt2YWx1ZX09YmFzaXNTdGF0ZTtcbmlmKCFtYXRjaGVzKHZhbHVlLGd1YXJkUGF0dGVybikpe1xuLy9cbnJldHVybiBudWxsO1xuIH1cblxuY29uc3QgbmV3VmFsdWU9YXdhaXQgc2FuaXRpemUodHhuKHZhbHVlKSk7XG5yZXR1cm4gbWFrZVN0YXRlKG5ld1ZhbHVlLGJhc2lzU3RhdGUpO1xuIH07XG5cbmxldCBiYXNpc1N0YXRlPXN0YXRlU3RvcmUuZ2V0KGtleVN0cik7XG5sZXQgdXBkYXRlZFN0YXRlPWF3YWl0IGdldFVwZGF0ZWRTdGF0ZShiYXNpc1N0YXRlKTtcblxuLy9cblxuLy9cbmJhc2lzU3RhdGU9c3RhdGVTdG9yZS5nZXQoa2V5U3RyKTtcbmNvbnN0IHVudGlsVXBkYXRlU3luY2VkPXVudGlsVHJ1ZShcbigpPT4hdXBkYXRlZFN0YXRlfHx1cGRhdGVkU3RhdGUuZ2VuZXJhdGlvbj5iYXNpc1N0YXRlLmdlbmVyYXRpb24pO1xuXG5mb3IgYXdhaXQoY29uc3QgXyBvZiB1bnRpbFVwZGF0ZVN5bmNlZCl7XG51cGRhdGVkU3RhdGU9YXdhaXQgZ2V0VXBkYXRlZFN0YXRlKGJhc2lzU3RhdGUpO1xuLy9cbmJhc2lzU3RhdGU9c3RhdGVTdG9yZS5nZXQoa2V5U3RyKTtcbiB9XG5cbmlmKCF1cGRhdGVkU3RhdGUpe1xuLy9cbi8vXG5yZXR1cm4gYmFzaXNTdGF0ZS52YWx1ZTtcbiB9XG5cbi8vXG4vL1xuaWYoYmFzaXNTdGF0ZS5nZW5lcmF0aW9uPDFuKXtcbi8vXG5zdGF0ZVN0b3JlLmluaXQoa2V5U3RyLHVwZGF0ZWRTdGF0ZSk7XG4gfWVsc2V7XG5zdGF0ZVN0b3JlLnNldChrZXlTdHIsdXBkYXRlZFN0YXRlKTtcbiB9XG5cbi8vXG5yZXR1cm4gdXBkYXRlZFN0YXRlLnZhbHVlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IHN0cmluZ2lmeVN0YXRlU3RvcmU9YXN5bmMoc3RhdGVTdG9yZSxtYXJzaGFsbGVyKT0+e1xuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9iaj17fTtcbmZvcihjb25zdFtrZXksdmFsdWVdb2Ygc3RhdGVTdG9yZS5lbnRyaWVzKCkpe1xub2JqW2tleV09RShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuIH1cbnJldHVybiBkZWVwbHlGdWxmaWxsZWQoaGFyZGVuKG9iaikpLnRoZW4oKGZ1bGZpbGxlZE9iaik9PlxuSlNPTi5zdHJpbmdpZnkoZnVsZmlsbGVkT2JqKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3I9KFxuc3RhdGVTdG9yZT1tYWtlU2NhbGFyTWFwU3RvcmUoKSxcbnNhbml0aXplPWRlZXBseUZ1bGZpbGxlZCk9Plxue1xuY29uc3Qgc2VyaWFsaXplUGFzc2FibGU9bWFrZUtleVRvU3RyaW5nKHNhbml0aXplKTtcblxuY29uc3QgZGVmYXVsdFN0YXRlU3RvcmU9d2l0aEdyb3VuZFN0YXRlKHN0YXRlU3RvcmUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29vcmQ9RmFyKCdzdG9yZSBjYWNoZSBjb29yZGluYXRvcicse1xuZ2V0UmVjZW50VmFsdWU6YXN5bmMoa2V5KT0+e1xuY29uc3Qga2V5U3RyPWF3YWl0IHNlcmlhbGl6ZVBhc3NhYmxlKGtleSk7XG5yZXR1cm4gZGVmYXVsdFN0YXRlU3RvcmUuZ2V0KGtleVN0cikudmFsdWU7XG4gfSxcbnNldENhY2hlVmFsdWU6YXN5bmMoa2V5LG5ld1ZhbHVlLGd1YXJkUGF0dGVybik9PntcbmNvbnN0IGtleVN0cj1hd2FpdCBzZXJpYWxpemVQYXNzYWJsZShrZXkpO1xucmV0dXJuIGFwcGx5Q2FjaGVUcmFuc2FjdGlvbihcbmtleVN0cixcbigpPT5uZXdWYWx1ZSxcbmd1YXJkUGF0dGVybixcbnNhbml0aXplLFxuZGVmYXVsdFN0YXRlU3RvcmUpO1xuXG4gfSxcbnVwZGF0ZUNhY2hlVmFsdWU6YXN5bmMoa2V5LHVwZGF0ZXIsZ3VhcmRQYXR0ZXJuKT0+e1xuY29uc3Qga2V5U3RyPWF3YWl0IHNlcmlhbGl6ZVBhc3NhYmxlKGtleSk7XG5yZXR1cm4gYXBwbHlDYWNoZVRyYW5zYWN0aW9uKFxua2V5U3RyLFxuKG9sZFZhbHVlKT0+RSh1cGRhdGVyKS51cGRhdGUob2xkVmFsdWUpLFxuZ3VhcmRQYXR0ZXJuLFxuc2FuaXRpemUsXG5kZWZhdWx0U3RhdGVTdG9yZSk7XG5cbiB9fSk7XG5cbnJldHVybiBjb29yZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvcihtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvcik7XG5jb25zdCBtYWtlTGFzdFdpbnNVcGRhdGVyPShzdGF0ZVN0b3JlLG1hcnNoYWxsZXIsc3RvcmFnZU5vZGUpPT57XG5sZXQgbGFzdFByZXBhcmVUaWNrZXQ9MG47XG5sZXQgbGFzdENvbW1pdFRpY2tldD0wbjtcblxucmV0dXJuIGFzeW5jKHN0b3JlZFZhbHVlKT0+e1xuLy9cbi8vXG4vL1xubGFzdFByZXBhcmVUaWNrZXQrPTFuO1xuY29uc3QgbWFyc2hhbGxUaWNrZXQ9bGFzdFByZXBhcmVUaWNrZXQ7XG5jb25zdCBzZXJpYWxpemVkU3RvcmU9YXdhaXQgc3RyaW5naWZ5U3RhdGVTdG9yZShzdGF0ZVN0b3JlLG1hcnNoYWxsZXIpO1xuaWYobWFyc2hhbGxUaWNrZXQ8bGFzdENvbW1pdFRpY2tldCl7XG4vL1xucmV0dXJuIHN0b3JlZFZhbHVlO1xuIH1cbmF3YWl0IEUoc3RvcmFnZU5vZGUpLnNldFZhbHVlKHNlcmlhbGl6ZWRTdG9yZSk7XG5sYXN0Q29tbWl0VGlja2V0PW1hcnNoYWxsVGlja2V0O1xucmV0dXJuIHN0b3JlZFZhbHVlO1xuIH07XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ2hhaW5TdG9yYWdlQ29vcmRpbmF0b3I9KHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5jb25zdCBzdGF0ZVN0b3JlPW1ha2VTY2FsYXJCaWdNYXBTdG9yZSgnc3RhdGVLZXknKTtcblxuY29uc3Qgc2FuaXRpemU9ZGVlcGx5RnVsZmlsbGVkO1xuY29uc3Qgc2VyaWFsaXplUGFzc2FibGU9bWFrZUtleVRvU3RyaW5nKHNhbml0aXplKTtcblxuY29uc3QgZGVmYXVsdFN0YXRlU3RvcmU9d2l0aEdyb3VuZFN0YXRlKHN0YXRlU3RvcmUpO1xuXG5jb25zdCB1cGRhdGVTdG9yYWdlTm9kZT1tYWtlTGFzdFdpbnNVcGRhdGVyKFxuZGVmYXVsdFN0YXRlU3RvcmUsXG5tYXJzaGFsbGVyLFxuc3RvcmFnZU5vZGUpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb29yZD1GYXIoJ3N0b3JlIGNhY2hlIGNvb3JkaW5hdG9yJyx7XG5nZXRSZWNlbnRWYWx1ZTphc3luYyhrZXkpPT57XG5jb25zdCBrZXlTdHI9YXdhaXQgc2VyaWFsaXplUGFzc2FibGUoa2V5KTtcbnJldHVybiBkZWZhdWx0U3RhdGVTdG9yZS5nZXQoa2V5U3RyKS52YWx1ZTtcbiB9LFxuc2V0Q2FjaGVWYWx1ZTphc3luYyhrZXksbmV3VmFsdWUsZ3VhcmRQYXR0ZXJuKT0+e1xuY29uc3Qga2V5U3RyPWF3YWl0IHNlcmlhbGl6ZVBhc3NhYmxlKGtleSk7XG5jb25zdCBzdG9yZWRWYWx1ZT1hd2FpdCBhcHBseUNhY2hlVHJhbnNhY3Rpb24oXG5rZXlTdHIsXG4oKT0+bmV3VmFsdWUsXG5ndWFyZFBhdHRlcm4sXG5zYW5pdGl6ZSxcbmRlZmF1bHRTdGF0ZVN0b3JlKTtcblxucmV0dXJuIHVwZGF0ZVN0b3JhZ2VOb2RlKHN0b3JlZFZhbHVlKTtcbiB9LFxudXBkYXRlQ2FjaGVWYWx1ZTphc3luYyhrZXksdXBkYXRlcixndWFyZFBhdHRlcm4pPT57XG5jb25zdCBrZXlTdHI9YXdhaXQgc2VyaWFsaXplUGFzc2FibGUoa2V5KTtcbmNvbnN0IHN0b3JlZFZhbHVlPWF3YWl0IGFwcGx5Q2FjaGVUcmFuc2FjdGlvbihcbmtleVN0cixcbihvbGRWYWx1ZSk9PkUodXBkYXRlcikudXBkYXRlKG9sZFZhbHVlKSxcbmd1YXJkUGF0dGVybixcbnNhbml0aXplLFxuZGVmYXVsdFN0YXRlU3RvcmUpO1xuXG5yZXR1cm4gdXBkYXRlU3RvcmFnZU5vZGUoc3RvcmVkVmFsdWUpO1xuIH19KTtcblxucmV0dXJuIGNvb3JkO1xuIH07JGjigI1fb25jZS5tYWtlQ2hhaW5TdG9yYWdlQ29vcmRpbmF0b3IobWFrZUNoYWluU3RvcmFnZUNvb3JkaW5hdG9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yIjpbIm1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yIl0sIm1ha2VDaGFpblN0b3JhZ2VDb29yZGluYXRvciI6WyJtYWtlQ2hhaW5TdG9yYWdlQ29vcmRpbmF0b3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh5JSp08BAABPAQAAIQAAAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADhfIU76hwAAOocAAAmAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Ftb3VudE1hdGguanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvc3RvcmUiLCIuL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzIiwiLi9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzIiwiLi9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJBbW91bnRNYXRoIiwiQXNzZXRLaW5kIiwiYXNzZXJ0QXNzZXRLaW5kIiwiYXNzZXJ0VmFsdWVHZXRIZWxwZXJzIiwiZ2V0QXNzZXRLaW5kIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwscGFzc1N0eWxlT2YsYXNzZXJ0UmVtb3RhYmxlLGFzc2VydFJlY29yZCxNLG1hdGNoZXMsbmF0TWF0aEhlbHBlcnMsc2V0TWF0aEhlbHBlcnMsY29weVNldE1hdGhIZWxwZXJzLGNvcHlCYWdNYXRoSGVscGVyczskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJhc3NlcnRSZW1vdGFibGVcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFJlbW90YWJsZSA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0UmVjb3JkXCIsIFskaOKAjV9hID0+IChhc3NlcnRSZWNvcmQgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjigI1fYSA9PiAobWF0Y2hlcyA9ICRo4oCNX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzXCIsIFtbXCJuYXRNYXRoSGVscGVyc1wiLCBbJGjigI1fYSA9PiAobmF0TWF0aEhlbHBlcnMgPSAkaOKAjV9hKV1dXV0sW1wiLi9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qc1wiLCBbW1wic2V0TWF0aEhlbHBlcnNcIiwgWyRo4oCNX2EgPT4gKHNldE1hdGhIZWxwZXJzID0gJGjigI1fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzXCIsIFtbXCJjb3B5U2V0TWF0aEhlbHBlcnNcIiwgWyRo4oCNX2EgPT4gKGNvcHlTZXRNYXRoSGVscGVycyA9ICRo4oCNX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qc1wiLCBbW1wiY29weUJhZ01hdGhIZWxwZXJzXCIsIFskaOKAjV9hID0+IChjb3B5QmFnTWF0aEhlbHBlcnMgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgQXNzZXRLaW5kPWhhcmRlbih7XG5OQVQ6J25hdCcsXG5TRVQ6J3NldCcsXG5DT1BZX1NFVDonY29weVNldCcsXG5DT1BZX0JBRzonY29weUJhZyd9KTskaOKAjV9vbmNlLkFzc2V0S2luZChBc3NldEtpbmQpO1xuXG5jb25zdCBhc3NldEtpbmROYW1lcz1oYXJkZW4oT2JqZWN0LnZhbHVlcyhBc3NldEtpbmQpLnNvcnQoKSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhc3NlcnRBc3NldEtpbmQ9KGFsbGVnZWRBSyk9PntcbmFzc2V0S2luZE5hbWVzLmluY2x1ZGVzKGFsbGVnZWRBSyl8fFxuRmFpbCBgVGhlIGFzc2V0S2luZCAke2FsbGVnZWRBS30gbXVzdCBiZSBvbmUgb2YgJHtxKGFzc2V0S2luZE5hbWVzKX1gO1xuIH07JGjigI1fb25jZS5hc3NlcnRBc3NldEtpbmQoYXNzZXJ0QXNzZXRLaW5kKTtcbmhhcmRlbihhc3NlcnRBc3NldEtpbmQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgaGVscGVycz17XG5uYXQ6bmF0TWF0aEhlbHBlcnMsXG5zZXQ6c2V0TWF0aEhlbHBlcnMsXG5jb3B5U2V0OmNvcHlTZXRNYXRoSGVscGVycyxcbmNvcHlCYWc6Y29weUJhZ01hdGhIZWxwZXJzfTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYXNzZXJ0VmFsdWVHZXRBc3NldEtpbmQ9KHZhbHVlKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbHVlKTtcbmlmKHBhc3NTdHlsZT09PSdiaWdpbnQnKXtcbnJldHVybiduYXQnO1xuIH1cbmlmKHBhc3NTdHlsZT09PSdjb3B5QXJyYXknKXtcbnJldHVybidzZXQnO1xuIH1cbmlmKG1hdGNoZXModmFsdWUsTS5zZXQoKSkpe1xucmV0dXJuJ2NvcHlTZXQnO1xuIH1cbmlmKG1hdGNoZXModmFsdWUsTS5iYWcoKSkpe1xucmV0dXJuJ2NvcHlCYWcnO1xuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xudGhyb3cgRmFpbCBgdmFsdWUgJHt2YWx1ZX0gbXVzdCBiZSBhIGJpZ2ludCwgY29weVNldCwgY29weUJhZywgb3IgYW4gYXJyYXksIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0VmFsdWVHZXRIZWxwZXJzPSh2YWx1ZSk9PlxuLy9cbmhlbHBlcnNbYXNzZXJ0VmFsdWVHZXRBc3NldEtpbmQodmFsdWUpXTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaOKAjV9vbmNlLmFzc2VydFZhbHVlR2V0SGVscGVycyhhc3NlcnRWYWx1ZUdldEhlbHBlcnMpO1xuY29uc3Qgb3B0aW9uYWxCcmFuZENoZWNrPShhbGxlZ2VkQnJhbmQsYnJhbmQpPT57XG5pZihicmFuZCE9PXVuZGVmaW5lZCl7XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5hbGxlZ2VkQnJhbmQ9PT1icmFuZHx8XG5GYWlsIGBhbW91bnQncyBicmFuZCAke3EoYWxsZWdlZEJyYW5kKX0gZGlkIG5vdCBtYXRjaCBleHBlY3RlZCBicmFuZCAke3EoXG5icmFuZClcbiB9YDtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrTFJBbmRHZXRIZWxwZXJzPShsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmFzc2VydFJlY29yZChsZWZ0QW1vdW50LCdsZWZ0QW1vdW50Jyk7XG5hc3NlcnRSZWNvcmQocmlnaHRBbW91bnQsJ3JpZ2h0QW1vdW50Jyk7XG5jb25zdHt2YWx1ZTpsZWZ0VmFsdWUsYnJhbmQ6bGVmdEJyYW5kfT1sZWZ0QW1vdW50O1xuY29uc3R7dmFsdWU6cmlnaHRWYWx1ZSxicmFuZDpyaWdodEJyYW5kfT1yaWdodEFtb3VudDtcbmFzc2VydFJlbW90YWJsZShsZWZ0QnJhbmQsJ2xlZnRCcmFuZCcpO1xuYXNzZXJ0UmVtb3RhYmxlKHJpZ2h0QnJhbmQsJ3JpZ2h0QnJhbmQnKTtcbm9wdGlvbmFsQnJhbmRDaGVjayhsZWZ0QnJhbmQsYnJhbmQpO1xub3B0aW9uYWxCcmFuZENoZWNrKHJpZ2h0QnJhbmQsYnJhbmQpO1xubGVmdEJyYW5kPT09cmlnaHRCcmFuZHx8XG5GYWlsIGBCcmFuZHMgaW4gbGVmdCAke3EobGVmdEJyYW5kKX0gYW5kIHJpZ2h0ICR7cShcbnJpZ2h0QnJhbmQpXG4gfSBzaG91bGQgbWF0Y2ggYnV0IGRvIG5vdGA7XG5jb25zdCBsZWZ0SGVscGVycz1hc3NlcnRWYWx1ZUdldEhlbHBlcnMobGVmdFZhbHVlKTtcbmNvbnN0IHJpZ2h0SGVscGVycz1hc3NlcnRWYWx1ZUdldEhlbHBlcnMocmlnaHRWYWx1ZSk7XG5sZWZ0SGVscGVycz09PXJpZ2h0SGVscGVyc3x8XG5GYWlsIGBUaGUgbGVmdCAke2xlZnRBbW91bnR9IGFuZCByaWdodCBhbW91bnQgJHtyaWdodEFtb3VudH0gaGFkIGRpZmZlcmVudCBhc3NldEtpbmRzYDtcbnJldHVybiBsZWZ0SGVscGVycztcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29lcmNlTFI9KGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCk9Pntcbi8vXG5yZXR1cm5baC5kb0NvZXJjZShsZWZ0QW1vdW50LnZhbHVlKSxoLmRvQ29lcmNlKHJpZ2h0QW1vdW50LnZhbHVlKV07XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzR1RFPShsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmNvbnN0IGg9Y2hlY2tMUkFuZEdldEhlbHBlcnMobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZCk7XG5yZXR1cm4gaC5kb0lzR1RFKC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IEFtb3VudE1hdGg9e1xuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xubWFrZTooYnJhbmQsYWxsZWdlZFZhbHVlKT0+e1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuY29uc3QgaD1hc3NlcnRWYWx1ZUdldEhlbHBlcnMoYWxsZWdlZFZhbHVlKTtcbmNvbnN0IHZhbHVlPWguZG9Db2VyY2UoYWxsZWdlZFZhbHVlKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZCx2YWx1ZX0pO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29lcmNlOihicmFuZCxhbGxlZ2VkQW1vdW50KT0+e1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuYXNzZXJ0UmVjb3JkKGFsbGVnZWRBbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7YnJhbmQ6YWxsZWdlZEJyYW5kLHZhbHVlOmFsbGVnZWRWYWx1ZX09YWxsZWdlZEFtb3VudDtcbmJyYW5kPT09YWxsZWdlZEJyYW5kfHxcbkZhaWwgYFRoZSBicmFuZCBpbiB0aGUgYWxsZWdlZEFtb3VudCAke2FsbGVnZWRBbW91bnR9IGluICdjb2VyY2UnIGRpZG4ndCBtYXRjaCB0aGUgc3BlY2lmaWVkIGJyYW5kICR7YnJhbmR9LmA7XG4vL1xuLy9cbnJldHVybiBBbW91bnRNYXRoLm1ha2UoYnJhbmQsYWxsZWdlZFZhbHVlKTtcbiB9LFxuLypcblxuXG5cblxuXG5cbiAgICovXG5nZXRWYWx1ZTooYnJhbmQsYW1vdW50KT0+QW1vdW50TWF0aC5jb2VyY2UoYnJhbmQsYW1vdW50KS52YWx1ZSxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5tYWtlRW1wdHk6KGJyYW5kLGFzc2V0S2luZD0vKiAgICAgICAgICAgICAgICAqLyduYXQnKT0+e1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuYXNzZXJ0QXNzZXRLaW5kKGFzc2V0S2luZCk7XG5jb25zdCB2YWx1ZT1oZWxwZXJzW2Fzc2V0S2luZF0uZG9NYWtlRW1wdHkoKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZCx2YWx1ZX0pO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbm1ha2VFbXB0eUZyb21BbW91bnQ6KGFtb3VudCk9PntcbmFzc2VydFJlY29yZChhbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7YnJhbmQsdmFsdWV9PWFtb3VudDtcbmNvbnN0IGFzc2V0S2luZD1hc3NlcnRWYWx1ZUdldEFzc2V0S2luZCh2YWx1ZSk7XG4vL1xucmV0dXJuIEFtb3VudE1hdGgubWFrZUVtcHR5KGJyYW5kLGFzc2V0S2luZCk7XG4gfSxcbi8qXG5cblxuXG5cblxuICAgKi9cbmlzRW1wdHk6KGFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5hc3NlcnRSZWNvcmQoYW1vdW50LCdhbW91bnQnKTtcbmNvbnN0e2JyYW5kOmFsbGVnZWRCcmFuZCx2YWx1ZX09YW1vdW50O1xuYXNzZXJ0UmVtb3RhYmxlKGFsbGVnZWRCcmFuZCwnYnJhbmQnKTtcbm9wdGlvbmFsQnJhbmRDaGVjayhhbGxlZ2VkQnJhbmQsYnJhbmQpO1xuY29uc3QgaD1hc3NlcnRWYWx1ZUdldEhlbHBlcnModmFsdWUpO1xucmV0dXJuIGguZG9Jc0VtcHR5KGguZG9Db2VyY2UodmFsdWUpKTtcbiB9LFxuaXNHVEUsXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5pc0VxdWFsOihsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmNvbnN0IGg9Y2hlY2tMUkFuZEdldEhlbHBlcnMobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZCk7XG5yZXR1cm4gaC5kb0lzRXF1YWwoLi4uY29lcmNlTFIoaCxsZWZ0QW1vdW50LHJpZ2h0QW1vdW50KSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmFkZDoobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xuY29uc3QgdmFsdWU9aC5kb0FkZCguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZDpsZWZ0QW1vdW50LmJyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuc3VidHJhY3Q6KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuY29uc3QgaD1jaGVja0xSQW5kR2V0SGVscGVycyhsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kKTtcbmNvbnN0IHZhbHVlPWguZG9TdWJ0cmFjdCguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZDpsZWZ0QW1vdW50LmJyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5taW46KHgseSxicmFuZD11bmRlZmluZWQpPT5cbi8vXG5pc0dURSh4LHksYnJhbmQpP1xueTpcbmlzR1RFKHkseCxicmFuZCk/XG54OlxuRmFpbCBgJHt4fSBhbmQgJHt5fSBhcmUgaW5jb21wYXJhYmxlYCxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5tYXg6KHgseSxicmFuZD11bmRlZmluZWQpPT5cbi8vXG5pc0dURSh4LHksYnJhbmQpP1xueDpcbmlzR1RFKHkseCk/XG55OlxuRmFpbCBgJHt4fSBhbmQgJHt5fSBhcmUgaW5jb21wYXJhYmxlYH07JGjigI1fb25jZS5BbW91bnRNYXRoKEFtb3VudE1hdGgpO1xuXG5oYXJkZW4oQW1vdW50TWF0aCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBnZXRBc3NldEtpbmQ9KGFtb3VudCk9PntcbmFzc2VydFJlY29yZChhbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7dmFsdWV9PWFtb3VudDtcbnJldHVybiBhc3NlcnRWYWx1ZUdldEFzc2V0S2luZCh2YWx1ZSk7XG4gfTskaOKAjV9vbmNlLmdldEFzc2V0S2luZChnZXRBc3NldEtpbmQpO1xuaGFyZGVuKGdldEFzc2V0S2luZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJBc3NldEtpbmQiOlsiQXNzZXRLaW5kIl0sImFzc2VydEFzc2V0S2luZCI6WyJhc3NlcnRBc3NldEtpbmQiXSwiQW1vdW50TWF0aCI6WyJBbW91bnRNYXRoIl0sImdldEFzc2V0S2luZCI6WyJnZXRBc3NldEtpbmQiXSwiYXNzZXJ0VmFsdWVHZXRIZWxwZXJzIjpbImFzc2VydFZhbHVlR2V0SGVscGVycyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADok/8vIwQAACMEAAAnAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Ftb3VudFN0b3JlLmpzeyJpbXBvcnRzIjpbIi4vYW1vdW50TWF0aC5qcyJdLCJleHBvcnRzIjpbIm1ha2VBbW91bnRTdG9yZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgQW1vdW50TWF0aDskaOKAjV9pbXBvcnRzKFtbXCIuL2Ftb3VudE1hdGguanNcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRo4oCNX2EgPT4gKEFtb3VudE1hdGggPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VBbW91bnRTdG9yZT0oc3RhdGUsa2V5KT0+e1xucmV0dXJuIGhhcmRlbih7XG5nZXRBbW91bnQ6KCk9PnN0YXRlW2tleV0sXG5pbmNyZW1lbnQ6KGRlbHRhKT0+e1xuc3RhdGVba2V5XT1BbW91bnRNYXRoLmFkZChzdGF0ZVtrZXldLGRlbHRhKTtcbiB9LFxuZGVjcmVtZW50OihkZWx0YSk9PntcbmlmKEFtb3VudE1hdGguaXNHVEUoc3RhdGVba2V5XSxkZWx0YSkpe1xuc3RhdGVba2V5XT1BbW91bnRNYXRoLnN1YnRyYWN0KHN0YXRlW2tleV0sZGVsdGEpO1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGZhbHNlO1xuIH19KTtcblxuIH07JGjigI1fb25jZS5tYWtlQW1vdW50U3RvcmUobWFrZUFtb3VudFN0b3JlKTtcbmhhcmRlbihtYWtlQW1vdW50U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUFtb3VudFN0b3JlIjpbIm1ha2VBbW91bnRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADLEMbG0wUAANMFAAAnAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Rpc3BsYXlJbmZvLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCIuL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJjb2VyY2VEaXNwbGF5SW5mbyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtdXN0TWF0Y2gsRGlzcGxheUluZm9TaGFwZTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaOKAjV9hID0+IChtdXN0TWF0Y2ggPSAkaOKAjV9hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJEaXNwbGF5SW5mb1NoYXBlXCIsIFskaOKAjV9hID0+IChEaXNwbGF5SW5mb1NoYXBlID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY29lcmNlRGlzcGxheUluZm89KGFsbGVnZWREaXNwbGF5SW5mbyxhc3NldEtpbmQpPT57XG5tdXN0TWF0Y2goYWxsZWdlZERpc3BsYXlJbmZvLERpc3BsYXlJbmZvU2hhcGUsJ2Rpc3BsYXlJbmZvJyk7XG5cbmlmKGFsbGVnZWREaXNwbGF5SW5mby5hc3NldEtpbmQhPT11bmRlZmluZWQpe1xuYWxsZWdlZERpc3BsYXlJbmZvLmFzc2V0S2luZD09PWFzc2V0S2luZHx8XG5GYWlsIGBkaXNwbGF5SW5mby5hc3NldEtpbmQgd2FzIHByZXNlbnQgKCR7YWxsZWdlZERpc3BsYXlJbmZvLmFzc2V0S2luZH0pIGFuZCBkaWQgbm90IG1hdGNoIHRoZSBhc3NldEtpbmQgYXJndW1lbnQgKCR7YXNzZXRLaW5kfSlgO1xuIH1cbmNvbnN0IGRpc3BsYXlJbmZvPWhhcmRlbih7Li4uYWxsZWdlZERpc3BsYXlJbmZvLGFzc2V0S2luZH0pO1xuXG5pZihkaXNwbGF5SW5mby5kZWNpbWFsUGxhY2VzIT09dW5kZWZpbmVkKXtcbk51bWJlci5pc1NhZmVJbnRlZ2VyKGRpc3BsYXlJbmZvLmRlY2ltYWxQbGFjZXMpfHxcbkZhaWwgYGRlY2ltYWxQbGFjZXMgJHtkaXNwbGF5SW5mby5kZWNpbWFsUGxhY2VzfSBpcyBub3QgYSBzYWZlIGludGVnZXJgO1xuIH1cblxucmV0dXJuIGRpc3BsYXlJbmZvO1xuIH07JGjigI1fb25jZS5jb2VyY2VEaXNwbGF5SW5mbyhjb2VyY2VEaXNwbGF5SW5mbyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb2VyY2VEaXNwbGF5SW5mbyI6WyJjb2VyY2VEaXNwbGF5SW5mbyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABR8HKWAwIAAAMCAAAhAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vYW1vdW50TWF0aC5qcyIsIi4vaXNzdWVyS2l0LmpzIiwiLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9hbW91bnRNYXRoLmpzIiwiLi9pc3N1ZXJLaXQuanMiLCIuL3R5cGVHdWFyZHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtdXSxbXCIuL2lzc3VlcktpdC5qc1wiLCBbXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFYNhUWGFgAAhhYAACUAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvaXNzdWVyS2l0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy96b25lL2R1cmFibGUuanMiLCIuL2Ftb3VudE1hdGguanMiLCIuL2Rpc3BsYXlJbmZvLmpzIiwiLi9wYXltZW50TGVkZ2VyLmpzIl0sImV4cG9ydHMiOlsiaGFzSXNzdWVyIiwibWFrZUR1cmFibGVJc3N1ZXJLaXQiLCJtYWtlSXNzdWVyS2l0IiwicHJlcGFyZUlzc3VlcktpdCIsInVwZ3JhZGVJc3N1ZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxGYWlsLGFzc2VydFBhdHRlcm4sbWFrZVNjYWxhckJpZ01hcFN0b3JlLG1ha2VEdXJhYmxlWm9uZSxBc3NldEtpbmQsYXNzZXJ0QXNzZXRLaW5kLGNvZXJjZURpc3BsYXlJbmZvLHByZXBhcmVQYXltZW50TGVkZ2VyOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaOKAjV9hID0+IChhc3NlcnQgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3pvbmUvZHVyYWJsZS5qc1wiLCBbW1wibWFrZUR1cmFibGVab25lXCIsIFskaOKAjV9hID0+IChtYWtlRHVyYWJsZVpvbmUgPSAkaOKAjV9hKV1dXV0sW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBc3NldEtpbmRcIiwgWyRo4oCNX2EgPT4gKEFzc2V0S2luZCA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0QXNzZXRLaW5kXCIsIFskaOKAjV9hID0+IChhc3NlcnRBc3NldEtpbmQgPSAkaOKAjV9hKV1dXV0sW1wiLi9kaXNwbGF5SW5mby5qc1wiLCBbW1wiY29lcmNlRGlzcGxheUluZm9cIiwgWyRo4oCNX2EgPT4gKGNvZXJjZURpc3BsYXlJbmZvID0gJGjigI1fYSldXV1dLFtcIi4vcGF5bWVudExlZGdlci5qc1wiLCBbW1wicHJlcGFyZVBheW1lbnRMZWRnZXJcIiwgWyRo4oCNX2EgPT4gKHByZXBhcmVQYXltZW50TGVkZ2VyID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNldHVwSXNzdWVyS2l0PShcbntuYW1lLGFzc2V0S2luZCxkaXNwbGF5SW5mbyxlbGVtZW50U2hhcGV9LFxuaXNzdWVyWm9uZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQpPT5cbntcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5hc3NlcnRBc3NldEtpbmQoYXNzZXRLaW5kKTtcblxuLy9cbmNvbnN0IGNsZWFuRGlzcGxheUluZm89Y29lcmNlRGlzcGxheUluZm8oZGlzcGxheUluZm8sYXNzZXRLaW5kKTtcbmlmKG9wdFNodXRkb3duV2l0aEZhaWx1cmUhPT11bmRlZmluZWQpe1xuYXNzZXJ0LnR5cGVvZihvcHRTaHV0ZG93bldpdGhGYWlsdXJlLCdmdW5jdGlvbicpO1xuIH1cblxuaWYoZWxlbWVudFNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4oZWxlbWVudFNoYXBlKTtcbiB9XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3R7aXNzdWVyLG1pbnQsYnJhbmQsbWludFJlY292ZXJ5UHVyc2V9PXByZXBhcmVQYXltZW50TGVkZ2VyKFxuaXNzdWVyWm9uZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5jbGVhbkRpc3BsYXlJbmZvLFxuZWxlbWVudFNoYXBlLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmJyYW5kLFxuaXNzdWVyLFxubWludCxcbm1pbnRSZWNvdmVyeVB1cnNlLFxuZGlzcGxheUluZm86Y2xlYW5EaXNwbGF5SW5mb30pO1xuXG4gfTtcbmhhcmRlbihzZXR1cElzc3VlcktpdCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IElOU1RBTkNFX0tFWT0naXNzdWVyJztcbi8qXG5cblxuXG4gKi9cbmNvbnN0IFJFQ09WRVJZX1NFVFNfU1RBVEU9J3JlY292ZXJ5U2V0c1N0YXRlJztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHVwZ3JhZGVJc3N1ZXJLaXQ9KFxuaXNzdWVyQmFnZ2FnZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkLFxucmVjb3ZlcnlTZXRzT3B0aW9uPXVuZGVmaW5lZCk9Plxue1xuY29uc3QgaXNzdWVyUmVjb3JkPWlzc3VlckJhZ2dhZ2UuZ2V0KElOU1RBTkNFX0tFWSk7XG5jb25zdCBpc3N1ZXJab25lPW1ha2VEdXJhYmxlWm9uZShpc3N1ZXJCYWdnYWdlKTtcbmNvbnN0IG9sZFJlY292ZXJ5U2V0c1N0YXRlPWlzc3VlckJhZ2dhZ2UuaGFzKFJFQ09WRVJZX1NFVFNfU1RBVEUpP1xuaXNzdWVyQmFnZ2FnZS5nZXQoUkVDT1ZFUllfU0VUU19TVEFURSk6XG4naGFzUmVjb3ZlcnlTZXRzJztcbmlmKFxub2xkUmVjb3ZlcnlTZXRzU3RhdGU9PT0nbm9SZWNvdmVyeVNldHMnJiZcbnJlY292ZXJ5U2V0c09wdGlvbj09PSdoYXNSZWNvdmVyeVNldHMnKVxue1xuRmFpbCBgQ2Fubm90ICh5ZXQ/KSB1cGdyYWRlIGZyb20gJ25vUmVjb3ZlcnlTZXRzJyB0byAnaGFzUmVjb3ZlcnlTZXRzJ2A7XG4gfVxuLy9cbi8vXG4vL1xuY29uc3QgcmVjb3ZlcnlTZXRzU3RhdGU9cmVjb3ZlcnlTZXRzT3B0aW9ufHxvbGRSZWNvdmVyeVNldHNTdGF0ZTtcbnJldHVybiBzZXR1cElzc3VlcktpdChcbmlzc3VlclJlY29yZCxcbmlzc3VlclpvbmUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUpO1xuXG4gfTskaOKAjV9vbmNlLnVwZ3JhZGVJc3N1ZXJLaXQodXBncmFkZUlzc3VlcktpdCk7XG5oYXJkZW4odXBncmFkZUlzc3VlcktpdCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBoYXNJc3N1ZXI9KGJhZ2dhZ2UpPT5iYWdnYWdlLmhhcyhJTlNUQU5DRV9LRVkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmhhc0lzc3VlcihoYXNJc3N1ZXIpO1xuY29uc3QgICAgICAgIG1ha2VEdXJhYmxlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5uYW1lLFxuLy9cbmFzc2V0S2luZD1Bc3NldEtpbmQuTkFULFxuZGlzcGxheUluZm89aGFyZGVuKHt9KSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkLFxue2VsZW1lbnRTaGFwZT11bmRlZmluZWQscmVjb3ZlcnlTZXRzT3B0aW9uPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGlzc3VlckRhdGE9aGFyZGVuKHtcbm5hbWUsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbmVsZW1lbnRTaGFwZX0pO1xuXG5pc3N1ZXJCYWdnYWdlLmluaXQoSU5TVEFOQ0VfS0VZLGlzc3VlckRhdGEpO1xuY29uc3QgaXNzdWVyWm9uZT1tYWtlRHVyYWJsZVpvbmUoaXNzdWVyQmFnZ2FnZSk7XG5jb25zdCByZWNvdmVyeVNldHNTdGF0ZT1yZWNvdmVyeVNldHNPcHRpb258fCdoYXNSZWNvdmVyeVNldHMnO1xuaXNzdWVyQmFnZ2FnZS5pbml0KFJFQ09WRVJZX1NFVFNfU1RBVEUscmVjb3ZlcnlTZXRzU3RhdGUpO1xucmV0dXJuIHNldHVwSXNzdWVyS2l0KFxuaXNzdWVyRGF0YSxcbmlzc3VlclpvbmUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUpO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VEdXJhYmxlSXNzdWVyS2l0KG1ha2VEdXJhYmxlSXNzdWVyS2l0KTtcbmhhcmRlbihtYWtlRHVyYWJsZUlzc3VlcktpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVJc3N1ZXJLaXQ9KFxuaXNzdWVyQmFnZ2FnZSxcbm5hbWUsXG4vL1xuYXNzZXRLaW5kPUFzc2V0S2luZC5OQVQsXG5kaXNwbGF5SW5mbz1oYXJkZW4oe30pLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQsXG5vcHRpb25zPXt9KT0+XG57XG5pZihoYXNJc3N1ZXIoaXNzdWVyQmFnZ2FnZSkpe1xuY29uc3R7ZWxlbWVudFNoYXBlOl89dW5kZWZpbmVkLHJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWR9PVxub3B0aW9ucztcbmNvbnN0IGlzc3VlcktpdD11cGdyYWRlSXNzdWVyS2l0KFxuaXNzdWVyQmFnZ2FnZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUsXG5yZWNvdmVyeVNldHNPcHRpb24pO1xuXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xucmV0dXJuIGlzc3VlcktpdDtcbiB9ZWxzZXtcbmNvbnN0IGlzc3VlcktpdD1tYWtlRHVyYWJsZUlzc3VlcktpdChcbmlzc3VlckJhZ2dhZ2UsXG5uYW1lLFxuYXNzZXRLaW5kLFxuZGlzcGxheUluZm8sXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlLFxub3B0aW9ucyk7XG5cbnJldHVybiBpc3N1ZXJLaXQ7XG4gfVxuIH07JGjigI1fb25jZS5wcmVwYXJlSXNzdWVyS2l0KHByZXBhcmVJc3N1ZXJLaXQpO1xuaGFyZGVuKHByZXBhcmVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VJc3N1ZXJLaXQ9KFxubmFtZSxcbi8vXG5hc3NldEtpbmQ9QXNzZXRLaW5kLk5BVCxcbmRpc3BsYXlJbmZvPWhhcmRlbih7fSksXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbntlbGVtZW50U2hhcGU9dW5kZWZpbmVkLHJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWR9PXt9KT0+XG5cbm1ha2VEdXJhYmxlSXNzdWVyS2l0KFxubWFrZVNjYWxhckJpZ01hcFN0b3JlKCdkcm9wcGVkIGlzc3VlciBraXQnLHtkdXJhYmxlOnRydWV9KSxcbm5hbWUsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUsXG57ZWxlbWVudFNoYXBlLHJlY292ZXJ5U2V0c09wdGlvbn0pOyRo4oCNX29uY2UubWFrZUlzc3VlcktpdChtYWtlSXNzdWVyS2l0KTtcblxuaGFyZGVuKG1ha2VJc3N1ZXJLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidXBncmFkZUlzc3VlcktpdCI6WyJ1cGdyYWRlSXNzdWVyS2l0Il0sImhhc0lzc3VlciI6WyJoYXNJc3N1ZXIiXSwibWFrZUR1cmFibGVJc3N1ZXJLaXQiOlsibWFrZUR1cmFibGVJc3N1ZXJLaXQiXSwicHJlcGFyZUlzc3VlcktpdCI6WyJwcmVwYXJlSXNzdWVyS2l0Il0sIm1ha2VJc3N1ZXJLaXQiOlsibWFrZUlzc3VlcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADvYXmr9wUAAPcFAAA6AAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIl0sImV4cG9ydHMiOlsiY29weUJhZ01hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBrZXlFUSxtYWtlQ29weUJhZyxtdXN0TWF0Y2gsTSxnZXRDb3B5QmFnRW50cmllcyxiYWdJc1N1cGVyYmFnLGJhZ1VuaW9uLGJhZ0Rpc2pvaW50U3VidHJhY3Q7JGjigI1faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wia2V5RVFcIiwgWyRo4oCNX2EgPT4gKGtleUVRID0gJGjigI1fYSldXSxbXCJtYWtlQ29weUJhZ1wiLCBbJGjigI1fYSA9PiAobWFrZUNvcHlCYWcgPSAkaOKAjV9hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAobXVzdE1hdGNoID0gJGjigI1fYSldXSxbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJnZXRDb3B5QmFnRW50cmllc1wiLCBbJGjigI1fYSA9PiAoZ2V0Q29weUJhZ0VudHJpZXMgPSAkaOKAjV9hKV1dLFtcImJhZ0lzU3VwZXJiYWdcIiwgWyRo4oCNX2EgPT4gKGJhZ0lzU3VwZXJiYWcgPSAkaOKAjV9hKV1dLFtcImJhZ1VuaW9uXCIsIFskaOKAjV9hID0+IChiYWdVbmlvbiA9ICRo4oCNX2EpXV0sW1wiYmFnRGlzam9pbnRTdWJ0cmFjdFwiLCBbJGjigI1fYSA9PiAoYmFnRGlzam9pbnRTdWJ0cmFjdCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PW1ha2VDb3B5QmFnKFtdKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgY29weUJhZ01hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZTooYmFnKT0+e1xubXVzdE1hdGNoKGJhZyxNLmJhZygpLCdiYWcgb2YgYW1vdW50Jyk7XG5yZXR1cm4gYmFnO1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KGJhZyk9PmdldENvcHlCYWdFbnRyaWVzKGJhZykubGVuZ3RoPT09MCxcbmRvSXNHVEU6YmFnSXNTdXBlcmJhZyxcbmRvSXNFcXVhbDprZXlFUSxcbmRvQWRkOmJhZ1VuaW9uLFxuZG9TdWJ0cmFjdDpiYWdEaXNqb2ludFN1YnRyYWN0fSk7JGjigI1fb25jZS5jb3B5QmFnTWF0aEhlbHBlcnMoY29weUJhZ01hdGhIZWxwZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImNvcHlCYWdNYXRoSGVscGVycyI6WyJjb3B5QmFnTWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAE07tPrUFAAC1BQAAOgAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9jb3B5U2V0TWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbImNvcHlTZXRNYXRoSGVscGVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQga2V5RVEsbWFrZUNvcHlTZXQsbXVzdE1hdGNoLE0sZ2V0Q29weVNldEtleXMsc2V0SXNTdXBlcnNldCxzZXREaXNqb2ludFVuaW9uLHNldERpc2pvaW50U3VidHJhY3Q7JGjigI1faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wia2V5RVFcIiwgWyRo4oCNX2EgPT4gKGtleUVRID0gJGjigI1fYSldXSxbXCJtYWtlQ29weVNldFwiLCBbJGjigI1fYSA9PiAobWFrZUNvcHlTZXQgPSAkaOKAjV9hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAobXVzdE1hdGNoID0gJGjigI1fYSldXSxbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjigI1fYSA9PiAoZ2V0Q29weVNldEtleXMgPSAkaOKAjV9hKV1dLFtcInNldElzU3VwZXJzZXRcIiwgWyRo4oCNX2EgPT4gKHNldElzU3VwZXJzZXQgPSAkaOKAjV9hKV1dLFtcInNldERpc2pvaW50VW5pb25cIiwgWyRo4oCNX2EgPT4gKHNldERpc2pvaW50VW5pb24gPSAkaOKAjV9hKV1dLFtcInNldERpc2pvaW50U3VidHJhY3RcIiwgWyRo4oCNX2EgPT4gKHNldERpc2pvaW50U3VidHJhY3QgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PW1ha2VDb3B5U2V0KFtdKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb3B5U2V0TWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihzZXQpPT57XG5tdXN0TWF0Y2goc2V0LE0uc2V0KCksJ3NldCBvZiBhbW91bnQnKTtcbnJldHVybiBzZXQ7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eTooc2V0KT0+Z2V0Q29weVNldEtleXMoc2V0KS5sZW5ndGg9PT0wLFxuZG9Jc0dURTpzZXRJc1N1cGVyc2V0LFxuZG9Jc0VxdWFsOmtleUVRLFxuZG9BZGQ6c2V0RGlzam9pbnRVbmlvbixcbmRvU3VidHJhY3Q6c2V0RGlzam9pbnRTdWJ0cmFjdH0pOyRo4oCNX29uY2UuY29weVNldE1hdGhIZWxwZXJzKGNvcHlTZXRNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb3B5U2V0TWF0aEhlbHBlcnMiOlsiY29weVNldE1hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEOT4BZzBAAAcwQAADYAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbmF0Il0sImV4cG9ydHMiOlsibmF0TWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsTmF0LGlzTmF0OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjigI1fYSA9PiAoTmF0ID0gJGjigI1fYSldXSxbXCJpc05hdFwiLCBbJGjigI1fYSA9PiAoaXNOYXQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0IGVtcHR5PTBuO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbmF0TWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihuYXQpPT57XG4vL1xuYXNzZXJ0LnR5cGVvZihuYXQsJ2JpZ2ludCcpO1xuaXNOYXQobmF0KXx8RmFpbCBgdmFsdWUgJHtuYXR9IG11c3QgYmUgYSBuYXR1cmFsIG51bWJlcmA7XG5yZXR1cm4gTmF0KG5hdCk7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eToobmF0KT0+bmF0PT09ZW1wdHksXG5kb0lzR1RFOihsZWZ0LHJpZ2h0KT0+bGVmdD49cmlnaHQsXG5kb0lzRXF1YWw6KGxlZnQscmlnaHQpPT5sZWZ0PT09cmlnaHQsXG4vL1xuZG9BZGQ6KGxlZnQscmlnaHQpPT5sZWZ0K3JpZ2h0LFxuZG9TdWJ0cmFjdDoobGVmdCxyaWdodCk9Pk5hdChsZWZ0LXJpZ2h0KX0pOyRo4oCNX29uY2UubmF0TWF0aEhlbHBlcnMobmF0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibmF0TWF0aEhlbHBlcnMiOlsibmF0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAA/JGylwGAABcBgAANgAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbInNldE1hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixhc3NlcnRLZXksZWxlbWVudHNJc1N1cGVyc2V0LGVsZW1lbnRzRGlzam9pbnRVbmlvbixlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QsY29lcmNlVG9FbGVtZW50cyxlbGVtZW50c0NvbXBhcmU7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImFzc2VydEtleVwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0S2V5ID0gJGjigI1fYSldXSxbXCJlbGVtZW50c0lzU3VwZXJzZXRcIiwgWyRo4oCNX2EgPT4gKGVsZW1lbnRzSXNTdXBlcnNldCA9ICRo4oCNX2EpXV0sW1wiZWxlbWVudHNEaXNqb2ludFVuaW9uXCIsIFskaOKAjV9hID0+IChlbGVtZW50c0Rpc2pvaW50VW5pb24gPSAkaOKAjV9hKV1dLFtcImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdFwiLCBbJGjigI1fYSA9PiAoZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0ID0gJGjigI1fYSldXSxbXCJjb2VyY2VUb0VsZW1lbnRzXCIsIFskaOKAjV9hID0+IChjb2VyY2VUb0VsZW1lbnRzID0gJGjigI1fYSldXSxbXCJlbGVtZW50c0NvbXBhcmVcIiwgWyRo4oCNX2EgPT4gKGVsZW1lbnRzQ29tcGFyZSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbXB0eT1oYXJkZW4oW10pO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNldE1hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZToobGlzdCk9Pntcbmxpc3Q9Y29lcmNlVG9FbGVtZW50cyhsaXN0KTtcbi8vXG4vL1xuLy9cbi8vXG5hc3NlcnRLZXkobGlzdCk7XG5yZXR1cm4gbGlzdDtcbiB9LFxuZG9NYWtlRW1wdHk6KCk9PmVtcHR5LFxuZG9Jc0VtcHR5OihsaXN0KT0+cGFzc1N0eWxlT2YobGlzdCk9PT0nY29weUFycmF5JyYmbGlzdC5sZW5ndGg9PT0wLFxuZG9Jc0dURTplbGVtZW50c0lzU3VwZXJzZXQsXG5kb0lzRXF1YWw6KHgseSk9PmVsZW1lbnRzQ29tcGFyZSh4LHkpPT09MCxcbmRvQWRkOmVsZW1lbnRzRGlzam9pbnRVbmlvbixcbmRvU3VidHJhY3Q6ZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0fSk7JGjigI1fb25jZS5zZXRNYXRoSGVscGVycyhzZXRNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzZXRNYXRoSGVscGVycyI6WyJzZXRNYXRoSGVscGVycyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACqHW8/hwMAAIcDAAAjAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3BheW1lbnQuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbInByZXBhcmVQYXltZW50S2luZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaW5pdEVtcHR5OyRo4oCNX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImluaXRFbXB0eVwiLCBbJGjigI1fYSA9PiAoaW5pdEVtcHR5ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLy9cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUGF5bWVudEtpbmQ9KGlzc3VlclpvbmUsbmFtZSxicmFuZCxQYXltZW50SSk9PntcbmNvbnN0IG1ha2VQYXltZW50PWlzc3VlclpvbmUuZXhvQ2xhc3MoXG4gYCR7bmFtZX0gcGF5bWVudGAsXG5QYXltZW50SSxcbmluaXRFbXB0eSxcbntcbmdldEFsbGVnZWRCcmFuZCgpe1xucmV0dXJuIGJyYW5kO1xuIH19KTtcblxuXG5yZXR1cm4gbWFrZVBheW1lbnQ7XG4gfTskaOKAjV9vbmNlLnByZXBhcmVQYXltZW50S2luZChwcmVwYXJlUGF5bWVudEtpbmQpO1xuaGFyZGVuKHByZXBhcmVQYXltZW50S2luZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwcmVwYXJlUGF5bWVudEtpbmQiOlsicHJlcGFyZVBheW1lbnRLaW5kIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACH5x/cNIAAADSAAACkAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvcGF5bWVudExlZGdlci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBhZ29yaWMvc3RvcmUiLCIuL2Ftb3VudE1hdGguanMiLCIuL3BheW1lbnQuanMiLCIuL3B1cnNlLmpzIiwiLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsicHJlcGFyZVBheW1lbnRMZWRnZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgscSxGYWlsLGFubm90YXRlRXJyb3IsaXNQcm9taXNlLG11c3RNYXRjaCxNLGtleUVRLEFtb3VudE1hdGgscHJlcGFyZVBheW1lbnRLaW5kLHByZXBhcmVQdXJzZUtpbmQsQnJhbmRJLG1ha2VJc3N1ZXJJbnRlcmZhY2VzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjigI1fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaOKAjV9hID0+IChpc1Byb21pc2UgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaOKAjV9hID0+IChtdXN0TWF0Y2ggPSAkaOKAjV9hKV1dLFtcIk1cIiwgWyRo4oCNX2EgPT4gKE0gPSAkaOKAjV9hKV1dLFtcImtleUVRXCIsIFskaOKAjV9hID0+IChrZXlFUSA9ICRo4oCNX2EpXV1dXSxbXCIuL2Ftb3VudE1hdGguanNcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRo4oCNX2EgPT4gKEFtb3VudE1hdGggPSAkaOKAjV9hKV1dXV0sW1wiLi9wYXltZW50LmpzXCIsIFtbXCJwcmVwYXJlUGF5bWVudEtpbmRcIiwgWyRo4oCNX2EgPT4gKHByZXBhcmVQYXltZW50S2luZCA9ICRo4oCNX2EpXV1dXSxbXCIuL3B1cnNlLmpzXCIsIFtbXCJwcmVwYXJlUHVyc2VLaW5kXCIsIFskaOKAjV9hID0+IChwcmVwYXJlUHVyc2VLaW5kID0gJGjigI1fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiQnJhbmRJXCIsIFskaOKAjV9hID0+IChCcmFuZEkgPSAkaOKAjV9hKV1dLFtcIm1ha2VJc3N1ZXJJbnRlcmZhY2VzXCIsIFskaOKAjV9hID0+IChtYWtlSXNzdWVySW50ZXJmYWNlcyA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBhbW91bnRTaGFwZUZyb21FbGVtZW50U2hhcGU9KGJyYW5kLGFzc2V0S2luZCxlbGVtZW50U2hhcGUpPT57XG5sZXQgdmFsdWVTaGFwZTtcbnN3aXRjaChhc3NldEtpbmQpe1xuY2FzZSduYXQnOntcbnZhbHVlU2hhcGU9TS5uYXQoKTtcbmVsZW1lbnRTaGFwZT09PXVuZGVmaW5lZHx8XG5GYWlsIGBGdW5naWJsZSBhc3NldHMgY2Fubm90IGhhdmUgYW4gZWxlbWVudFNoYXBlOiAke3EoZWxlbWVudFNoYXBlKX1gO1xuYnJlYWs7XG4gfVxuY2FzZSdzZXQnOntcbmlmKGVsZW1lbnRTaGFwZT09PXVuZGVmaW5lZCl7XG52YWx1ZVNoYXBlPU0uYXJyYXlPZihNLmtleSgpKTtcbiB9ZWxzZXtcbnZhbHVlU2hhcGU9TS5hcnJheU9mKE0uYW5kKE0ua2V5KCksZWxlbWVudFNoYXBlKSk7XG4gfVxuYnJlYWs7XG4gfVxuY2FzZSdjb3B5U2V0Jzp7XG5pZihlbGVtZW50U2hhcGU9PT11bmRlZmluZWQpe1xudmFsdWVTaGFwZT1NLnNldCgpO1xuIH1lbHNle1xudmFsdWVTaGFwZT1NLnNldE9mKGVsZW1lbnRTaGFwZSk7XG4gfVxuYnJlYWs7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG5pZihlbGVtZW50U2hhcGU9PT11bmRlZmluZWQpe1xudmFsdWVTaGFwZT1NLmJhZygpO1xuIH1lbHNle1xudmFsdWVTaGFwZT1NLmJhZ09mKGVsZW1lbnRTaGFwZSk7XG4gfVxuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG5GYWlsIGB1bmV4cGVjdGVkIGFzc2V0IGtpbmQgJHtxKGFzc2V0S2luZCl9YDtcbiB9fVxuXG5cbmNvbnN0IGFtb3VudFNoYXBlPWhhcmRlbih7XG5icmFuZCwvL1xudmFsdWU6dmFsdWVTaGFwZX0pO1xuXG5yZXR1cm4gYW1vdW50U2hhcGU7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVQYXltZW50TGVkZ2VyPShcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuZGlzcGxheUluZm8sXG5lbGVtZW50U2hhcGUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkKT0+XG57XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGJyYW5kPWlzc3VlclpvbmUuZXhvKCBgJHtuYW1lfSBicmFuZGAsQnJhbmRJLHtcbmlzTXlJc3N1ZXIoYWxsZWdlZElzc3Vlcil7XG4vL1xucmV0dXJuIGFsbGVnZWRJc3N1ZXI9PT1pc3N1ZXI7XG4gfSxcbmdldEFsbGVnZWROYW1lKCl7XG5yZXR1cm4gbmFtZTtcbiB9LFxuLy9cbmdldERpc3BsYXlJbmZvKCl7XG5yZXR1cm4gZGlzcGxheUluZm87XG4gfSxcbmdldEFtb3VudFNoYXBlKCl7XG5yZXR1cm4gYW1vdW50U2hhcGU7XG4gfX0pO1xuXG5cbmNvbnN0IGFtb3VudFNoYXBlPWFtb3VudFNoYXBlRnJvbUVsZW1lbnRTaGFwZShcbmJyYW5kLFxuYXNzZXRLaW5kLFxuZWxlbWVudFNoYXBlKTtcblxuXG5jb25zdHtJc3N1ZXJJLE1pbnRJLFBheW1lbnRJLFB1cnNlSUtpdH09bWFrZUlzc3VlckludGVyZmFjZXMoXG5icmFuZCxcbmFzc2V0S2luZCxcbmFtb3VudFNoYXBlKTtcblxuXG5jb25zdCBtYWtlUGF5bWVudD1wcmVwYXJlUGF5bWVudEtpbmQoaXNzdWVyWm9uZSxuYW1lLGJyYW5kLFBheW1lbnRJKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZT0ocmVhc29uKT0+e1xuLy9cbi8vXG5pZihvcHRTaHV0ZG93bldpdGhGYWlsdXJlIT09dW5kZWZpbmVkKXtcbnRyeXtcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUocmVhc29uKTtcbiB9Y2F0Y2goZXJySW5TaHV0ZG93bil7XG5hbm5vdGF0ZUVycm9yKGVyckluU2h1dGRvd24sWCBgQ2F1c2VkIGJ5OiAke3JlYXNvbn1gKTtcbnRocm93IGVyckluU2h1dGRvd247XG4gfVxuIH1cbnRocm93IHJlYXNvbjtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGF5bWVudExlZGdlcj1pc3N1ZXJab25lLndlYWtNYXBTdG9yZSgncGF5bWVudExlZGdlcicse1xudmFsdWVTaGFwZTphbW91bnRTaGFwZX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHBheW1lbnRSZWNvdmVyeVNldHM9aXNzdWVyWm9uZS53ZWFrTWFwU3RvcmUoJ3BheW1lbnRSZWNvdmVyeVNldHMnKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBpbml0UGF5bWVudD0ocGF5bWVudCxhbW91bnQsb3B0UmVjb3ZlcnlTZXQ9dW5kZWZpbmVkKT0+e1xuaWYocmVjb3ZlcnlTZXRzU3RhdGU9PT0nbm9SZWNvdmVyeVNldHMnKXtcbm9wdFJlY292ZXJ5U2V0PT09dW5kZWZpbmVkfHxcbkZhaWwgYHdoZW4gcmVjb3ZlclNldHNTdGF0ZSA9PT0gJ25vUmVjb3ZlcnlTZXRzJywgb3B0UmVjb3ZlcnlTZXQgbXVzdCBiZSBlbXB0eWA7XG4gfVxuaWYob3B0UmVjb3ZlcnlTZXQhPT11bmRlZmluZWQmJiFBbW91bnRNYXRoLmlzRW1wdHkoYW1vdW50KSl7XG5vcHRSZWNvdmVyeVNldC5hZGQocGF5bWVudCk7XG5wYXltZW50UmVjb3ZlcnlTZXRzLmluaXQocGF5bWVudCxvcHRSZWNvdmVyeVNldCk7XG4gfVxucGF5bWVudExlZGdlci5pbml0KHBheW1lbnQsYW1vdW50KTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVsZXRlUGF5bWVudD0ocGF5bWVudCk9PntcbnBheW1lbnRMZWRnZXIuZGVsZXRlKHBheW1lbnQpO1xuaWYocGF5bWVudFJlY292ZXJ5U2V0cy5oYXMocGF5bWVudCkpe1xuY29uc3QgcmVjb3ZlcnlTZXQ9cGF5bWVudFJlY292ZXJ5U2V0cy5nZXQocGF5bWVudCk7XG5wYXltZW50UmVjb3ZlcnlTZXRzLmRlbGV0ZShwYXltZW50KTtcbnJlY292ZXJ5U2V0LmRlbGV0ZShwYXltZW50KTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb2VyY2U9KGFsbGVnZWRBbW91bnQpPT5BbW91bnRNYXRoLmNvZXJjZShicmFuZCxhbGxlZ2VkQW1vdW50KTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhc3NlcnRBbW91bnRDb25zaXN0ZW50PShwYXltZW50QmFsYW5jZSxvcHRBbW91bnRTaGFwZSk9PntcbmlmKG9wdEFtb3VudFNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChwYXltZW50QmFsYW5jZSxvcHRBbW91bnRTaGFwZSwnYW1vdW50Jyk7XG4gfVxuIH07XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGFzc2VydExpdmVQYXltZW50PShwYXltZW50KT0+e1xucGF5bWVudExlZGdlci5oYXMocGF5bWVudCl8fFxuRmFpbCBgJHtwYXltZW50fSB3YXMgbm90IGEgbGl2ZSBwYXltZW50IGZvciBicmFuZCAke3EoXG5icmFuZClcbiB9LiBJdCBjb3VsZCBiZSBhIHVzZWQtdXAgcGF5bWVudCwgYSBwYXltZW50IGZvciBhbm90aGVyIGJyYW5kLCBvciBpdCBtaWdodCBub3QgYmUgYSBwYXltZW50IGF0IGFsbC5gO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVwb3NpdEludGVybmFsPShcbmJhbGFuY2VTdG9yZSxcbnNyY1BheW1lbnQsXG5vcHRBbW91bnRTaGFwZT11bmRlZmluZWQpPT5cbntcbiFpc1Byb21pc2Uoc3JjUGF5bWVudCl8fFxuYXNzZXJ0LmZhaWwoXG4gYGRlcG9zaXQgZG9lcyBub3QgYWNjZXB0IHByb21pc2VzIGFzIGZpcnN0IGFyZ3VtZW50LiBJbnN0ZWFkIG9mIHBhc3NpbmcgdGhlIHByb21pc2UgKGRlcG9zaXQocGF5bWVudFByb21pc2UpKSwgY29uc2lkZXIgdW53cmFwcGluZyB0aGUgcHJvbWlzZSBmaXJzdDogRS53aGVuKHBheW1lbnRQcm9taXNlLCAoYWN0dWFsUGF5bWVudCA9PiBkZXBvc2l0KGFjdHVhbFBheW1lbnQpKWAsXG5UeXBlRXJyb3IpO1xuXG5hc3NlcnRMaXZlUGF5bWVudChzcmNQYXltZW50KTtcbmNvbnN0IHNyY1BheW1lbnRCYWxhbmNlPXBheW1lbnRMZWRnZXIuZ2V0KHNyY1BheW1lbnQpO1xuYXNzZXJ0QW1vdW50Q29uc2lzdGVudChzcmNQYXltZW50QmFsYW5jZSxvcHRBbW91bnRTaGFwZSk7XG50cnl7XG4vL1xuLy9cbi8vXG5kZWxldGVQYXltZW50KHNyY1BheW1lbnQpO1xuYmFsYW5jZVN0b3JlLmluY3JlbWVudChzcmNQYXltZW50QmFsYW5jZSk7XG4gfWNhdGNoKGVycil7XG5zaHV0ZG93bkxlZGdlcldpdGhGYWlsdXJlKGVycik7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIHNyY1BheW1lbnRCYWxhbmNlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgd2l0aGRyYXdJbnRlcm5hbD0oYmFsYW5jZVN0b3JlLGFtb3VudCxyZWNvdmVyeVNldD11bmRlZmluZWQpPT57XG5hbW91bnQ9Y29lcmNlKGFtb3VudCk7XG5jb25zdCBwYXltZW50PW1ha2VQYXltZW50KCk7XG4vL1xuLy9cbmJhbGFuY2VTdG9yZS5kZWNyZW1lbnQoYW1vdW50KXx8XG5GYWlsIGBXaXRoZHJhd2FsIG9mICR7YW1vdW50fSBmYWlsZWQgYmVjYXVzZSB0aGUgcHVyc2Ugb25seSBjb250YWluZWQgJHtiYWxhbmNlU3RvcmUuZ2V0QW1vdW50KCl9YDtcbnRyeXtcbmluaXRQYXltZW50KHBheW1lbnQsYW1vdW50LHJlY292ZXJ5U2V0KTtcbiB9Y2F0Y2goZXJyKXtcbnNodXRkb3duTGVkZ2VyV2l0aEZhaWx1cmUoZXJyKTtcbnRocm93IGVycjtcbiB9XG5yZXR1cm4gcGF5bWVudDtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IG1ha2VFbXB0eVB1cnNlPXByZXBhcmVQdXJzZUtpbmQoXG5pc3N1ZXJab25lLFxubmFtZSxcbmFzc2V0S2luZCxcbmJyYW5kLFxuUHVyc2VJS2l0LFxuaGFyZGVuKHtcbmRlcG9zaXRJbnRlcm5hbCxcbndpdGhkcmF3SW50ZXJuYWx9KSxcblxucmVjb3ZlcnlTZXRzU3RhdGUsXG5wYXltZW50UmVjb3ZlcnlTZXRzKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBpc3N1ZXI9aXNzdWVyWm9uZS5leG8oIGAke25hbWV9IGlzc3VlcmAsSXNzdWVySSx7XG5nZXRCcmFuZCgpe1xucmV0dXJuIGJyYW5kO1xuIH0sXG5nZXRBbGxlZ2VkTmFtZSgpe1xucmV0dXJuIG5hbWU7XG4gfSxcbmdldEFzc2V0S2luZCgpe1xucmV0dXJuIGFzc2V0S2luZDtcbiB9LFxuZ2V0RGlzcGxheUluZm8oKXtcbnJldHVybiBkaXNwbGF5SW5mbztcbiB9LFxubWFrZUVtcHR5UHVyc2UoKXtcbnJldHVybiBtYWtlRW1wdHlQdXJzZSgpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmlzTGl2ZShwYXltZW50KXtcbi8vXG5yZXR1cm4gcGF5bWVudExlZGdlci5oYXMocGF5bWVudCk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0QW1vdW50T2YocGF5bWVudCl7XG4vL1xuYXNzZXJ0TGl2ZVBheW1lbnQocGF5bWVudCk7XG5yZXR1cm4gcGF5bWVudExlZGdlci5nZXQocGF5bWVudCk7XG4gfSxcbi8qXG5cblxuICAgICAqL1xuYnVybihwYXltZW50LG9wdEFtb3VudFNoYXBlPXVuZGVmaW5lZCl7XG4vL1xuYXNzZXJ0TGl2ZVBheW1lbnQocGF5bWVudCk7XG5jb25zdCBwYXltZW50QmFsYW5jZT1wYXltZW50TGVkZ2VyLmdldChwYXltZW50KTtcbmFzc2VydEFtb3VudENvbnNpc3RlbnQocGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUpO1xudHJ5e1xuLy9cbmRlbGV0ZVBheW1lbnQocGF5bWVudCk7XG4gfWNhdGNoKGVycil7XG5zaHV0ZG93bkxlZGdlcldpdGhGYWlsdXJlKGVycik7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIHBheW1lbnRCYWxhbmNlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtaW50UmVjb3ZlcnlQdXJzZT0vKiAgICAgICAgICAgICAgICAgICAqL1xuaXNzdWVyWm9uZS5tYWtlT25jZSgnbWludFJlY292ZXJ5UHVyc2UnLCgpPT5tYWtlRW1wdHlQdXJzZSgpKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtaW50PWlzc3VlclpvbmUuZXhvKCBgJHtuYW1lfSBtaW50YCxNaW50SSx7XG5nZXRJc3N1ZXIoKXtcbnJldHVybiBpc3N1ZXI7XG4gfSxcbm1pbnRQYXltZW50KG5ld0Ftb3VudCl7XG5uZXdBbW91bnQ9Y29lcmNlKG5ld0Ftb3VudCk7XG5tdXN0TWF0Y2gobmV3QW1vdW50LGFtb3VudFNoYXBlLCdtaW50ZWQgYW1vdW50Jyk7XG4vL1xuLy9cbmNvbnN0IHJhd1BheW1lbnQ9bWFrZVBheW1lbnQoKTtcbmluaXRQYXltZW50KHJhd1BheW1lbnQsbmV3QW1vdW50LHVuZGVmaW5lZCk7XG5cbmNvbnN0IG1pbnRSZWNvdmVyeVB1cnNlQmVmb3JlPW1pbnRSZWNvdmVyeVB1cnNlLmdldEN1cnJlbnRBbW91bnQoKTtcbm1pbnRSZWNvdmVyeVB1cnNlLmRlcG9zaXQocmF3UGF5bWVudCxuZXdBbW91bnQpO1xuY29uc3QgcGF5bWVudD1taW50UmVjb3ZlcnlQdXJzZS53aXRoZHJhdyhuZXdBbW91bnQpO1xuY29uc3QgbWludFJlY292ZXJ5UHVyc2VBZnRlcj1taW50UmVjb3ZlcnlQdXJzZS5nZXRDdXJyZW50QW1vdW50KCk7XG5hc3NlcnQoa2V5RVEobWludFJlY292ZXJ5UHVyc2VCZWZvcmUsbWludFJlY292ZXJ5UHVyc2VBZnRlcikpO1xucmV0dXJuIHBheW1lbnQ7XG4gfX0pO1xuXG5cbmNvbnN0IGlzc3VlcktpdD1oYXJkZW4oe2lzc3VlcixtaW50LGJyYW5kLG1pbnRSZWNvdmVyeVB1cnNlfSk7XG5yZXR1cm4gaXNzdWVyS2l0O1xuIH07JGjigI1fb25jZS5wcmVwYXJlUGF5bWVudExlZGdlcihwcmVwYXJlUGF5bWVudExlZGdlcik7XG5oYXJkZW4ocHJlcGFyZVBheW1lbnRMZWRnZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicHJlcGFyZVBheW1lbnRMZWRnZXIiOlsicHJlcGFyZVBheW1lbnRMZWRnZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA2cc3cfQQAAD0EAAAIQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wdXJzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiLi9hbW91bnRNYXRoLmpzIiwiLi90cmFuc2llbnROb3RpZmllci5qcyIsIi4vYW1vdW50U3RvcmUuanMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUHVyc2VLaW5kIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLE0sbWFrZUNvcHlTZXQsQW1vdW50TWF0aCxtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQsbWFrZUFtb3VudFN0b3JlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJtYWtlQ29weVNldFwiLCBbJGjigI1fYSA9PiAobWFrZUNvcHlTZXQgPSAkaOKAjV9hKV1dXV0sW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaOKAjV9hID0+IChBbW91bnRNYXRoID0gJGjigI1fYSldXV1dLFtcIi4vdHJhbnNpZW50Tm90aWZpZXIuanNcIiwgW1tcIm1ha2VUcmFuc2llbnROb3RpZmllcktpdFwiLCBbJGjigI1fYSA9PiAobWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0ID0gJGjigI1fYSldXV1dLFtcIi4vYW1vdW50U3RvcmUuanNcIiwgW1tcIm1ha2VBbW91bnRTdG9yZVwiLCBbJGjigI1fYSA9PiAobWFrZUFtb3VudFN0b3JlID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0IEVNUFRZX0NPUFlfU0VUPW1ha2VDb3B5U2V0KFtdKTtcblxuLy9cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZVB1cnNlS2luZD0oXG5pc3N1ZXJab25lLFxubmFtZSxcbmFzc2V0S2luZCxcbmJyYW5kLFxuUHVyc2VJS2l0LFxucHVyc2VNZXRob2RzLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5wYXltZW50UmVjb3ZlcnlTZXRzKT0+XG57XG5jb25zdCBhbW91bnRTaGFwZT1icmFuZC5nZXRBbW91bnRTaGFwZSgpO1xuXG4vL1xuLy9cbi8vXG5jb25zdHtwcm92aWRlTm90aWZpZXIsdXBkYXRlOnVwZGF0ZUJhbGFuY2V9PW1ha2VUcmFuc2llbnROb3RpZmllcktpdCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWF5YmVSZWNvdmVyeVNldD0oc3RhdGUpPT57XG5jb25zdHtyZWNvdmVyeVNldH09c3RhdGU7XG5pZihyZWNvdmVyeVNldHNTdGF0ZT09PSdoYXNSZWNvdmVyeVNldHMnKXtcbnJldHVybiByZWNvdmVyeVNldDtcbiB9ZWxzZXtcbnJlY292ZXJ5U2V0c1N0YXRlPT09J25vUmVjb3ZlcnlTZXRzJ3x8XG5GYWlsIGByZWNvdmVyU2V0c1N0YXRlIG11c3QgYmUgbm9SZWNvdmVyeVNldHMgaWYgaXQgaXNuJ3QgaGFzUmVjb3ZlclNldHNgO1xucGF5bWVudFJlY292ZXJ5U2V0cyE9PXVuZGVmaW5lZHx8XG5GYWlsIGBwYXltZW50UmVjb3ZlcnlTZXRzIG11c3QgYWx3YXlzIGJlIGRlZmluZWRgO1xucmVjb3ZlcnlTZXQuZ2V0U2l6ZSgpPT09MHx8XG5GYWlsIGBXaXRoIG5vUmVjb3ZlcnlTZXRzLCByZWNvdmVyeVNldCBtdXN0IGJlIGVtcHR5YDtcblxucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3R7ZGVwb3NpdEludGVybmFsLHdpdGhkcmF3SW50ZXJuYWx9PXB1cnNlTWV0aG9kcztcbmNvbnN0IG1ha2VQdXJzZUtpdD1pc3N1ZXJab25lLmV4b0NsYXNzS2l0KFxuIGAke25hbWV9IFB1cnNlYCxcblB1cnNlSUtpdCxcbigpPT57XG5jb25zdCBjdXJyZW50QmFsYW5jZT1BbW91bnRNYXRoLm1ha2VFbXB0eShicmFuZCxhc3NldEtpbmQpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVjb3ZlcnlTZXQ9aXNzdWVyWm9uZS5kZXRhY2hlZCgpLnNldFN0b3JlKCdyZWNvdmVyeSBzZXQnKTtcblxucmV0dXJue1xuY3VycmVudEJhbGFuY2UsXG5yZWNvdmVyeVNldH07XG5cbiB9LFxue1xucHVyc2U6e1xuZGVwb3NpdChzcmNQYXltZW50LG9wdEFtb3VudFNoYXBlPXVuZGVmaW5lZCl7XG4vL1xuLy9cbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3R7cHVyc2V9PXRoaXMuZmFjZXRzO1xuY29uc3QgYmFsYW5jZVN0b3JlPW1ha2VBbW91bnRTdG9yZShzdGF0ZSwnY3VycmVudEJhbGFuY2UnKTtcbi8vXG5jb25zdCBzcmNQYXltZW50QmFsYW5jZT1kZXBvc2l0SW50ZXJuYWwoXG5iYWxhbmNlU3RvcmUsXG5zcmNQYXltZW50LFxub3B0QW1vdW50U2hhcGUpO1xuXG51cGRhdGVCYWxhbmNlKHB1cnNlLGJhbGFuY2VTdG9yZS5nZXRBbW91bnQoKSk7XG5yZXR1cm4gc3JjUGF5bWVudEJhbGFuY2U7XG4gfSxcbndpdGhkcmF3KGFtb3VudCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0e3B1cnNlfT10aGlzLmZhY2V0cztcblxuY29uc3Qgb3B0UmVjb3ZlcnlTZXQ9bWF5YmVSZWNvdmVyeVNldChzdGF0ZSk7XG5jb25zdCBiYWxhbmNlU3RvcmU9bWFrZUFtb3VudFN0b3JlKHN0YXRlLCdjdXJyZW50QmFsYW5jZScpO1xuLy9cbmNvbnN0IHBheW1lbnQ9d2l0aGRyYXdJbnRlcm5hbChcbmJhbGFuY2VTdG9yZSxcbmFtb3VudCxcbm9wdFJlY292ZXJ5U2V0KTtcblxudXBkYXRlQmFsYW5jZShwdXJzZSxiYWxhbmNlU3RvcmUuZ2V0QW1vdW50KCkpO1xucmV0dXJuIHBheW1lbnQ7XG4gfSxcbmdldEN1cnJlbnRBbW91bnQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3QgYmFsYW5jZVN0b3JlPW1ha2VBbW91bnRTdG9yZShzdGF0ZSwnY3VycmVudEJhbGFuY2UnKTtcbnJldHVybiBiYWxhbmNlU3RvcmUuZ2V0QW1vdW50KCk7XG4gfSxcbmdldEN1cnJlbnRBbW91bnROb3RpZmllcigpe1xucmV0dXJuIHByb3ZpZGVOb3RpZmllcih0aGlzLmZhY2V0cy5wdXJzZSk7XG4gfSxcbmdldEFsbGVnZWRCcmFuZCgpe1xucmV0dXJuIGJyYW5kO1xuIH0sXG5cbmdldERlcG9zaXRGYWNldCgpe1xucmV0dXJuIHRoaXMuZmFjZXRzLmRlcG9zaXRGYWNldDtcbiB9LFxuXG5nZXRSZWNvdmVyeVNldCgpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5jb25zdCBvcHRSZWNvdmVyeVNldD1tYXliZVJlY292ZXJ5U2V0KHN0YXRlKTtcbmlmKG9wdFJlY292ZXJ5U2V0PT09dW5kZWZpbmVkKXtcbnJldHVybiBFTVBUWV9DT1BZX1NFVDtcbiB9XG5yZXR1cm4gb3B0UmVjb3ZlcnlTZXQuc25hcHNob3QoKTtcbiB9LFxucmVjb3ZlckFsbCgpe1xuY29uc3R7c3RhdGUsZmFjZXRzfT10aGlzO1xubGV0IGFtb3VudD1BbW91bnRNYXRoLm1ha2VFbXB0eShicmFuZCxhc3NldEtpbmQpO1xuY29uc3Qgb3B0UmVjb3ZlcnlTZXQ9bWF5YmVSZWNvdmVyeVNldChzdGF0ZSk7XG5pZihvcHRSZWNvdmVyeVNldD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gYW1vdW50Oy8vXG4gfVxuZm9yKGNvbnN0IHBheW1lbnQgb2Ygb3B0UmVjb3ZlcnlTZXQua2V5cygpKXtcbi8vXG4vL1xuY29uc3QgZGVsdGE9ZmFjZXRzLnB1cnNlLmRlcG9zaXQocGF5bWVudCk7XG5hbW91bnQ9QW1vdW50TWF0aC5hZGQoYW1vdW50LGRlbHRhLGJyYW5kKTtcbiB9XG5vcHRSZWNvdmVyeVNldC5nZXRTaXplKCk9PT0wfHxcbkZhaWwgYGludGVybmFsOiBSZW1haW5pbmcgdW5yZWNvdmVyZWQgcGF5bWVudHM6ICR7ZmFjZXRzLnB1cnNlLmdldFJlY292ZXJ5U2V0KCl9YDtcbnJldHVybiBhbW91bnQ7XG4gfX0sXG5cbmRlcG9zaXRGYWNldDp7XG5yZWNlaXZlKC4uLmFyZ3Mpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnB1cnNlLmRlcG9zaXQoLi4uYXJncyk7XG4gfX19LFxuXG5cbntcbnN0YXRlU2hhcGU6e1xuY3VycmVudEJhbGFuY2U6YW1vdW50U2hhcGUsXG5yZWNvdmVyeVNldDpNLnJlbW90YWJsZSgncmVjb3ZlcnlTZXQnKX19KTtcblxuXG5cbnJldHVybigpPT5tYWtlUHVyc2VLaXQoKS5wdXJzZTtcbiB9OyRo4oCNX29uY2UucHJlcGFyZVB1cnNlS2luZChwcmVwYXJlUHVyc2VLaW5kKTtcbmhhcmRlbihwcmVwYXJlUHVyc2VLaW5kKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVQdXJzZUtpbmQiOlsicHJlcGFyZVB1cnNlS2luZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC7Qwwc4gUAAOIFAAAtAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3RyYW5zaWVudE5vdGlmaWVyLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy9ub3RpZmllciJdLCJleHBvcnRzIjpbIm1ha2VUcmFuc2llbnROb3RpZmllcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSxwcm92aWRlTGF6eSxtYWtlTm90aWZpZXJLaXQ7JGjigI1faW1wb3J0cyhbW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZVwiLCBbJGjigI1fYSA9PiAobWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJwcm92aWRlTGF6eVwiLCBbJGjigI1fYSA9PiAocHJvdmlkZUxhenkgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wibWFrZU5vdGlmaWVyS2l0XCIsIFskaOKAjV9hID0+IChtYWtlTm90aWZpZXJLaXQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vL1xuLy9cbmNvbnN0ICAgICAgICBtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQ9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHRyYW5zaWVudE5vdGlmZXJLaXRzPW1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUoXG4ndHJhbnNpZW50Tm90aWZlcktpdHMnKTtcblxuXG5jb25zdCBwcm92aWRlTm90aWZpZXJLaXQ9KGtleSk9PlxucHJvdmlkZUxhenkodHJhbnNpZW50Tm90aWZlcktpdHMsa2V5LCgpPT5cbm1ha2VOb3RpZmllcktpdChrZXkuZ2V0Q3VycmVudEFtb3VudCgpKSk7XG5cblxuY29uc3QgcHJvdmlkZU5vdGlmaWVyPShrZXkpPT5wcm92aWRlTm90aWZpZXJLaXQoa2V5KS5ub3RpZmllcjtcbmNvbnN0IHVwZGF0ZT0oa2V5LG5ld1ZhbHVlKT0+e1xuaWYodHJhbnNpZW50Tm90aWZlcktpdHMuaGFzKGtleSkpe1xuY29uc3R7dXBkYXRlcn09dHJhbnNpZW50Tm90aWZlcktpdHMuZ2V0KGtleSk7XG51cGRhdGVyLnVwZGF0ZVN0YXRlKG5ld1ZhbHVlKTtcbiB9XG4gfTtcblxucmV0dXJue3Byb3ZpZGVOb3RpZmllcix1cGRhdGV9O1xuIH07JGjigI1fb25jZS5tYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQobWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KTtcbmhhcmRlbihtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0IjpbIm1ha2VUcmFuc2llbnROb3RpZmllcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABy3Wqx+BgAAPgYAAAmAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJBbW91bnRQYXR0ZXJuU2hhcGUiLCJBbW91bnRTaGFwZSIsIkFzc2V0S2luZFNoYXBlIiwiQnJhbmRJIiwiQnJhbmRTaGFwZSIsIkRlcG9zaXRGYWNldFNoYXBlIiwiRGlzcGxheUluZm9TaGFwZSIsIklzc3VlcktpdFNoYXBlIiwiSXNzdWVyU2hhcGUiLCJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiLCJNaW50U2hhcGUiLCJOb3RpZmllclNoYXBlIiwiUGF5bWVudFNoYXBlIiwiUHVyc2VTaGFwZSIsIlJhdGlvU2hhcGUiLCJpc0NvcHlCYWdWYWx1ZSIsImlzQ29weVNldFZhbHVlIiwiaXNOYXRWYWx1ZSIsImlzU2V0VmFsdWUiLCJtYWtlSXNzdWVySW50ZXJmYWNlcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTSxtYXRjaGVzLGdldEludGVyZmFjZUd1YXJkUGF5bG9hZDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjigI1fYSA9PiAobWF0Y2hlcyA9ICRo4oCNX2EpXV0sW1wiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkXCIsIFskaOKAjV9hID0+IChnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCAgICAgICAgQnJhbmRTaGFwZT1NLnJlbW90YWJsZSgnQnJhbmQnKTskaOKAjV9vbmNlLkJyYW5kU2hhcGUoQnJhbmRTaGFwZSk7XG5jb25zdCAgICAgICAgSXNzdWVyU2hhcGU9TS5yZW1vdGFibGUoJ0lzc3VlcicpOyRo4oCNX29uY2UuSXNzdWVyU2hhcGUoSXNzdWVyU2hhcGUpO1xuY29uc3QgICAgICAgIFBheW1lbnRTaGFwZT1NLnJlbW90YWJsZSgnUGF5bWVudCcpOyRo4oCNX29uY2UuUGF5bWVudFNoYXBlKFBheW1lbnRTaGFwZSk7XG5jb25zdCAgICAgICAgUHVyc2VTaGFwZT1NLnJlbW90YWJsZSgnUHVyc2UnKTskaOKAjV9vbmNlLlB1cnNlU2hhcGUoUHVyc2VTaGFwZSk7XG5jb25zdCAgICAgICAgRGVwb3NpdEZhY2V0U2hhcGU9TS5yZW1vdGFibGUoJ0RlcG9zaXRGYWNldCcpOyRo4oCNX29uY2UuRGVwb3NpdEZhY2V0U2hhcGUoRGVwb3NpdEZhY2V0U2hhcGUpO1xuY29uc3QgICAgICAgIE5vdGlmaWVyU2hhcGU9TS5yZW1vdGFibGUoJ05vdGlmaWVyJyk7JGjigI1fb25jZS5Ob3RpZmllclNoYXBlKE5vdGlmaWVyU2hhcGUpO1xuY29uc3QgICAgICAgIE1pbnRTaGFwZT1NLnJlbW90YWJsZSgnTWludCcpO1xuXG4vKlxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLk1pbnRTaGFwZShNaW50U2hhcGUpO1xuY29uc3QgTmF0VmFsdWVTaGFwZT1NLm5hdCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgQ29weVNldFZhbHVlU2hhcGU9TS5zZXQoKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IFNldFZhbHVlU2hhcGU9TS5hcnJheU9mKE0ua2V5KCkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBDb3B5QmFnVmFsdWVTaGFwZT1NLmJhZygpO1xuXG5jb25zdCBBbW91bnRWYWx1ZVNoYXBlPU0ub3IoXG5OYXRWYWx1ZVNoYXBlLFxuQ29weVNldFZhbHVlU2hhcGUsXG5TZXRWYWx1ZVNoYXBlLFxuQ29weUJhZ1ZhbHVlU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBBbW91bnRTaGFwZT1oYXJkZW4oe1xuYnJhbmQ6QnJhbmRTaGFwZSxcbnZhbHVlOkFtb3VudFZhbHVlU2hhcGV9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5BbW91bnRTaGFwZShBbW91bnRTaGFwZSk7XG5jb25zdCAgICAgICAgQW1vdW50UGF0dGVyblNoYXBlPU0ucGF0dGVybigpOyRo4oCNX29uY2UuQW1vdW50UGF0dGVyblNoYXBlKEFtb3VudFBhdHRlcm5TaGFwZSk7XG5cbmNvbnN0ICAgICAgICBSYXRpb1NoYXBlPWhhcmRlbih7XG5udW1lcmF0b3I6QW1vdW50U2hhcGUsXG5kZW5vbWluYXRvcjpBbW91bnRTaGFwZX0pO1xuXG5cbi8qXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuUmF0aW9TaGFwZShSYXRpb1NoYXBlKTtcbmNvbnN0ICAgICAgICBpc05hdFZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsTmF0VmFsdWVTaGFwZSk7JGjigI1fb25jZS5pc05hdFZhbHVlKGlzTmF0VmFsdWUpO1xuaGFyZGVuKGlzTmF0VmFsdWUpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NvcHlTZXRWYWx1ZT0odmFsdWUpPT5tYXRjaGVzKHZhbHVlLENvcHlTZXRWYWx1ZVNoYXBlKTskaOKAjV9vbmNlLmlzQ29weVNldFZhbHVlKGlzQ29weVNldFZhbHVlKTtcbmhhcmRlbihpc0NvcHlTZXRWYWx1ZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzU2V0VmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxTZXRWYWx1ZVNoYXBlKTskaOKAjV9vbmNlLmlzU2V0VmFsdWUoaXNTZXRWYWx1ZSk7XG5oYXJkZW4oaXNTZXRWYWx1ZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weUJhZ1ZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsQ29weUJhZ1ZhbHVlU2hhcGUpOyRo4oCNX29uY2UuaXNDb3B5QmFnVmFsdWUoaXNDb3B5QmFnVmFsdWUpO1xuaGFyZGVuKGlzQ29weUJhZ1ZhbHVlKTtcblxuLy9cbmNvbnN0ICAgICAgICBNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVM9MTAwOyRo4oCNX29uY2UuTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTKE1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyk7XG5cbmNvbnN0ICAgICAgICBBc3NldEtpbmRTaGFwZT1NLm9yKCduYXQnLCdzZXQnLCdjb3B5U2V0JywnY29weUJhZycpOyRo4oCNX29uY2UuQXNzZXRLaW5kU2hhcGUoQXNzZXRLaW5kU2hhcGUpO1xuXG5jb25zdCAgICAgICAgRGlzcGxheUluZm9TaGFwZT1NLnNwbGl0UmVjb3JkKFxue30sXG57XG5kZWNpbWFsUGxhY2VzOk0uYW5kKFxuTS5ndGUoLU1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyksXG5NLmx0ZShNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMpKSxcblxuYXNzZXRLaW5kOkFzc2V0S2luZFNoYXBlfSxcblxue1xuLy9cbi8vXG59KTskaOKAjV9vbmNlLkRpc3BsYXlJbmZvU2hhcGUoRGlzcGxheUluZm9TaGFwZSk7XG5cblxuY29uc3QgICAgICAgIElzc3VlcktpdFNoYXBlPWhhcmRlbih7XG5icmFuZDpCcmFuZFNoYXBlLFxubWludDpNaW50U2hhcGUsXG5taW50UmVjb3ZlcnlQdXJzZTpQdXJzZVNoYXBlLFxuaXNzdWVyOklzc3VlclNoYXBlLFxuZGlzcGxheUluZm86RGlzcGxheUluZm9TaGFwZX0pO1xuXG5cbi8vXG4kaOKAjV9vbmNlLklzc3VlcktpdFNoYXBlKElzc3VlcktpdFNoYXBlKTtcbmNvbnN0ICAgICAgICBCcmFuZEk9TS5pbnRlcmZhY2UoJ0JyYW5kJyx7XG5pc015SXNzdWVyOk0uY2FsbFdoZW4oTS5hd2FpdChJc3N1ZXJTaGFwZSkpLnJldHVybnMoTS5ib29sZWFuKCkpLFxuZ2V0QWxsZWdlZE5hbWU6TS5jYWxsKCkucmV0dXJucyhNLnN0cmluZygpKSxcbmdldERpc3BsYXlJbmZvOk0uY2FsbCgpLnJldHVybnMoRGlzcGxheUluZm9TaGFwZSksXG5nZXRBbW91bnRTaGFwZTpNLmNhbGwoKS5yZXR1cm5zKE0ucGF0dGVybigpKX0pO1xuXG5cbi8qXG5cblxuXG4gKi8kaOKAjV9vbmNlLkJyYW5kSShCcmFuZEkpO1xuY29uc3QgICAgICAgIG1ha2VJc3N1ZXJJbnRlcmZhY2VzPShcbmJyYW5kU2hhcGU9QnJhbmRTaGFwZSxcbmFzc2V0S2luZFNoYXBlPUFzc2V0S2luZFNoYXBlLFxuYW1vdW50U2hhcGU9QW1vdW50U2hhcGUpPT5cbntcbmNvbnN0IElzc3Vlckk9TS5pbnRlcmZhY2UoJ0lzc3Vlcicse1xuZ2V0QnJhbmQ6TS5jYWxsKCkucmV0dXJucyhicmFuZFNoYXBlKSxcbmdldEFsbGVnZWROYW1lOk0uY2FsbCgpLnJldHVybnMoTS5zdHJpbmcoKSksXG5nZXRBc3NldEtpbmQ6TS5jYWxsKCkucmV0dXJucyhhc3NldEtpbmRTaGFwZSksXG5nZXREaXNwbGF5SW5mbzpNLmNhbGwoKS5yZXR1cm5zKERpc3BsYXlJbmZvU2hhcGUpLFxubWFrZUVtcHR5UHVyc2U6TS5jYWxsKCkucmV0dXJucyhQdXJzZVNoYXBlKSxcblxuaXNMaXZlOk0uY2FsbFdoZW4oTS5hd2FpdChQYXltZW50U2hhcGUpKS5yZXR1cm5zKE0uYm9vbGVhbigpKSxcbmdldEFtb3VudE9mOk0uY2FsbFdoZW4oTS5hd2FpdChQYXltZW50U2hhcGUpKS5yZXR1cm5zKGFtb3VudFNoYXBlKSxcbmJ1cm46TS5jYWxsV2hlbihNLmF3YWl0KFBheW1lbnRTaGFwZSkpLlxub3B0aW9uYWwoQW1vdW50UGF0dGVyblNoYXBlKS5cbnJldHVybnMoYW1vdW50U2hhcGUpfSk7XG5cblxuY29uc3QgTWludEk9TS5pbnRlcmZhY2UoJ01pbnQnLHtcbmdldElzc3VlcjpNLmNhbGwoKS5yZXR1cm5zKElzc3VlclNoYXBlKSxcbm1pbnRQYXltZW50Ok0uY2FsbChhbW91bnRTaGFwZSkucmV0dXJucyhQYXltZW50U2hhcGUpfSk7XG5cblxuY29uc3QgUGF5bWVudEk9TS5pbnRlcmZhY2UoJ1BheW1lbnQnLHtcbmdldEFsbGVnZWRCcmFuZDpNLmNhbGwoKS5yZXR1cm5zKGJyYW5kU2hhcGUpfSk7XG5cblxuY29uc3QgUHVyc2VJPU0uaW50ZXJmYWNlKCdQdXJzZScse1xuZ2V0QWxsZWdlZEJyYW5kOk0uY2FsbCgpLnJldHVybnMoYnJhbmRTaGFwZSksXG5nZXRDdXJyZW50QW1vdW50Ok0uY2FsbCgpLnJldHVybnMoYW1vdW50U2hhcGUpLFxuZ2V0Q3VycmVudEFtb3VudE5vdGlmaWVyOk0uY2FsbCgpLnJldHVybnMoTm90aWZpZXJTaGFwZSksXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuZGVwb3NpdDpNLmNhbGwoUGF5bWVudFNoYXBlKS5cbm9wdGlvbmFsKEFtb3VudFBhdHRlcm5TaGFwZSkuXG5yZXR1cm5zKGFtb3VudFNoYXBlKSxcbmdldERlcG9zaXRGYWNldDpNLmNhbGwoKS5yZXR1cm5zKERlcG9zaXRGYWNldFNoYXBlKSxcbndpdGhkcmF3Ok0uY2FsbChhbW91bnRTaGFwZSkucmV0dXJucyhQYXltZW50U2hhcGUpLFxuZ2V0UmVjb3ZlcnlTZXQ6TS5jYWxsKCkucmV0dXJucyhNLnNldE9mKFBheW1lbnRTaGFwZSkpLFxucmVjb3ZlckFsbDpNLmNhbGwoKS5yZXR1cm5zKGFtb3VudFNoYXBlKX0pO1xuXG5cbmNvbnN0IERlcG9zaXRGYWNldEk9TS5pbnRlcmZhY2UoJ0RlcG9zaXRGYWNldCcse1xucmVjZWl2ZTpnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoUHVyc2VJKS5tZXRob2RHdWFyZHMuZGVwb3NpdH0pO1xuXG5cbmNvbnN0IFB1cnNlSUtpdD1oYXJkZW4oe1xucHVyc2U6UHVyc2VJLFxuZGVwb3NpdEZhY2V0OkRlcG9zaXRGYWNldEl9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbklzc3VlckksXG5NaW50SSxcblBheW1lbnRJLFxuUHVyc2VJS2l0fSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZUlzc3VlckludGVyZmFjZXMobWFrZUlzc3VlckludGVyZmFjZXMpO1xuaGFyZGVuKG1ha2VJc3N1ZXJJbnRlcmZhY2VzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkJyYW5kU2hhcGUiOlsiQnJhbmRTaGFwZSJdLCJJc3N1ZXJTaGFwZSI6WyJJc3N1ZXJTaGFwZSJdLCJQYXltZW50U2hhcGUiOlsiUGF5bWVudFNoYXBlIl0sIlB1cnNlU2hhcGUiOlsiUHVyc2VTaGFwZSJdLCJEZXBvc2l0RmFjZXRTaGFwZSI6WyJEZXBvc2l0RmFjZXRTaGFwZSJdLCJOb3RpZmllclNoYXBlIjpbIk5vdGlmaWVyU2hhcGUiXSwiTWludFNoYXBlIjpbIk1pbnRTaGFwZSJdLCJBbW91bnRTaGFwZSI6WyJBbW91bnRTaGFwZSJdLCJBbW91bnRQYXR0ZXJuU2hhcGUiOlsiQW1vdW50UGF0dGVyblNoYXBlIl0sIlJhdGlvU2hhcGUiOlsiUmF0aW9TaGFwZSJdLCJpc05hdFZhbHVlIjpbImlzTmF0VmFsdWUiXSwiaXNDb3B5U2V0VmFsdWUiOlsiaXNDb3B5U2V0VmFsdWUiXSwiaXNTZXRWYWx1ZSI6WyJpc1NldFZhbHVlIl0sImlzQ29weUJhZ1ZhbHVlIjpbImlzQ29weUJhZ1ZhbHVlIl0sIk1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyI6WyJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiXSwiQXNzZXRLaW5kU2hhcGUiOlsiQXNzZXRLaW5kU2hhcGUiXSwiRGlzcGxheUluZm9TaGFwZSI6WyJEaXNwbGF5SW5mb1NoYXBlIl0sIklzc3VlcktpdFNoYXBlIjpbIklzc3VlcktpdFNoYXBlIl0sIkJyYW5kSSI6WyJCcmFuZEkiXSwibWFrZUlzc3VlckludGVyZmFjZXMiOlsibWFrZUlzc3VlckludGVyZmFjZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA/v5WjgUaAAAFGgAAJwAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9jYWxsYmFjay5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJjYWxsRSIsImNhbGxTeW5jIiwiaXNDYWxsYmFjayIsIm1ha2VGdW5jdGlvbkNhbGxiYWNrIiwibWFrZU1ldGhvZENhbGxiYWNrIiwibWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrIiwibWFrZVN5bmNNZXRob2RDYWxsYmFjayIsInByZXBhcmVBdHRlbnVhdG9yIiwicHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLG1ha2VFcnJvcixxLEUsaXNPYmplY3QsaXNQYXNzYWJsZVN5bWJvbCxnZXRJbnRlcmZhY2VNZXRob2RLZXlzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaOKAjV9hID0+IChtYWtlRXJyb3IgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaOKAjV9hID0+IChpc09iamVjdCA9ICRo4oCNX2EpXV0sW1wiaXNQYXNzYWJsZVN5bWJvbFwiLCBbJGjigI1fYSA9PiAoaXNQYXNzYWJsZVN5bWJvbCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5c1wiLCBbJGjigI1fYSA9PiAoZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuY29uc3R7b3duS2V5czpyYXdPd25LZXlzfT1SZWZsZWN0O1xuY29uc3Qgb3duS2V5cz1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yYXdPd25LZXlzO1xuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpc1Byb3BlcnR5S2V5PShrZXkpPT57XG5zd2l0Y2godHlwZW9mIGtleSl7XG5jYXNlJ3N0cmluZyc6XG5jYXNlJ251bWJlcic6XG5jYXNlJ3N5bWJvbCc6XG5yZXR1cm4gdHJ1ZTtcbmRlZmF1bHQ6XG5yZXR1cm4gZmFsc2U7fVxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNhbGxTeW5jPShjYWxsYmFjaywuLi5hcmdzKT0+e1xuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdGFyZ2V0KC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH1cbnJldHVybiB0YXJnZXRbbWV0aG9kTmFtZV0oLi4uYm91bmQsLi4uYXJncyk7XG4gfTskaOKAjV9vbmNlLmNhbGxTeW5jKGNhbGxTeW5jKTtcbmhhcmRlbihjYWxsU3luYyk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjYWxsRT0oY2FsbGJhY2ssLi4uYXJncyk9PntcbmNvbnN0e3RhcmdldCxtZXRob2ROYW1lLGJvdW5kfT1jYWxsYmFjaztcbmlmKG1ldGhvZE5hbWU9PT11bmRlZmluZWQpe1xucmV0dXJuIEUodGFyZ2V0KSguLi5ib3VuZCwuLi5hcmdzKTtcbiB9XG5yZXR1cm4gRSh0YXJnZXQpW21ldGhvZE5hbWVdKC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH07JGjigI1fb25jZS5jYWxsRShjYWxsRSk7XG5oYXJkZW4oY2FsbEUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjaz0odGFyZ2V0LC4uLmJvdW5kKT0+e1xudHlwZW9mIHRhcmdldD09PSdmdW5jdGlvbid8fFxuRmFpbCBgc3luYyBmdW5jdGlvbiBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhIGZ1bmN0aW9uOiAke3RhcmdldH1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsYm91bmQsaXNTeW5jOnRydWV9KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICovY2IpO1xuIH07JGjigI1fb25jZS5tYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2sobWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrKTtcbmhhcmRlbihtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VGdW5jdGlvbkNhbGxiYWNrPSh0YXJnZXQsLi4uYm91bmQpPT57XG5pc09iamVjdCh0YXJnZXQpfHxcbkZhaWwgYGZ1bmN0aW9uIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGEgZnVuY3Rpb24gcHJlc2VuY2U6ICR7dGFyZ2V0fWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxib3VuZH0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRo4oCNX29uY2UubWFrZUZ1bmN0aW9uQ2FsbGJhY2sobWFrZUZ1bmN0aW9uQ2FsbGJhY2spO1xuaGFyZGVuKG1ha2VGdW5jdGlvbkNhbGxiYWNrKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTeW5jTWV0aG9kQ2FsbGJhY2s9KHRhcmdldCxtZXRob2ROYW1lLC4uLmJvdW5kKT0+e1xuaXNPYmplY3QodGFyZ2V0KXx8XG5GYWlsIGBzeW5jIG1ldGhvZCBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3Q6ICR7dGFyZ2V0fWA7XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSl8fFxuRmFpbCBgbWV0aG9kIG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBwYXNzYWJsZSBzeW1ib2w6ICR7bWV0aG9kTmFtZX1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsbWV0aG9kTmFtZSxib3VuZCxpc1N5bmM6dHJ1ZX0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9jYik7XG4gfTskaOKAjV9vbmNlLm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2sobWFrZVN5bmNNZXRob2RDYWxsYmFjayk7XG5oYXJkZW4obWFrZVN5bmNNZXRob2RDYWxsYmFjayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWV0aG9kQ2FsbGJhY2s9KHRhcmdldCxtZXRob2ROYW1lLC4uLmJvdW5kKT0+e1xuaXNPYmplY3QodGFyZ2V0KXx8RmFpbCBgbWV0aG9kIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGFuIG9iamVjdDogJHt0YXJnZXR9YDtcbnR5cGVvZiBtZXRob2ROYW1lPT09J3N0cmluZyd8fFxuaXNQYXNzYWJsZVN5bWJvbChtZXRob2ROYW1lKXx8XG5GYWlsIGBtZXRob2QgbmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIHBhc3NhYmxlIHN5bWJvbDogJHttZXRob2ROYW1lfWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxtZXRob2ROYW1lLGJvdW5kfSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICovY2IpO1xuIH07JGjigI1fb25jZS5tYWtlTWV0aG9kQ2FsbGJhY2sobWFrZU1ldGhvZENhbGxiYWNrKTtcbmhhcmRlbihtYWtlTWV0aG9kQ2FsbGJhY2spO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ2FsbGJhY2s9KGNhbGxiYWNrKT0+e1xuaWYoIWlzT2JqZWN0KGNhbGxiYWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xucmV0dXJuKFxuaXNPYmplY3QodGFyZ2V0KSYmKFxubWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSkpJiZcbkFycmF5LmlzQXJyYXkoYm91bmQpKTtcblxuIH07JGjigI1fb25jZS5pc0NhbGxiYWNrKGlzQ2FsbGJhY2spO1xuaGFyZGVuKGlzQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUF0dGVudWF0b3I9KFxuem9uZSxcbm1ldGhvZE5hbWVzLFxue2ludGVyZmFjZUd1YXJkLHRhZz0nQXR0ZW51YXRvcid9PXt9KT0+XG57XG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtZXRob2RzPS8qICAgICAgICAgICAgICAgICAgKi9cbmZyb21FbnRyaWVzKFxubWV0aG9kTmFtZXMubWFwKChrZXkpPT57XG4vL1xuaWYoIWlzUHJvcGVydHlLZXkoa2V5KSl7XG50aHJvdyBGYWlsIGBrZXkgJHtxKGtleSl9IGlzIG5vdCBhIFByb3BlcnR5S2V5YDtcbiB9XG5cbmNvbnN0IG09LyogICAgICAgICAgICAgICAgICAqL3tcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICovXG5ba2V5XSguLi5hcmdzKXtcbi8vXG5jb25zdCBjYj10aGlzLnN0YXRlLmNic1trZXldO1xuaWYoIWNiKXtcbmNvbnN0IGVycj1tYWtlRXJyb3IoIGB1bmltcGxlbWVudGVkICR7cSh0YWcpfSBtZXRob2QgJHtxKGtleSl9YCk7XG5pZih0aGlzLnN0YXRlLmlzU3luYyl7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gfVxuaWYoY2IuaXNTeW5jKXtcbnJldHVybiBjYWxsU3luYyhjYiwuLi5hcmdzKTtcbiB9XG5yZXR1cm4gY2FsbEUoY2IsLi4uYXJncyk7XG4gfX1bXG5rZXldO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAqL1trZXksbV0pO1xuIH0pKTtcblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VBdHRlbnVhdG9yPXpvbmUuZXhvQ2xhc3MoXG50YWcsXG5pbnRlcmZhY2VHdWFyZCxcbi8qXG5cblxuXG5cbiAgICAgKi9cbih7XG50YXJnZXQ9bnVsbCxcbmlzU3luYz1mYWxzZSxcbm92ZXJyaWRlcz0vKiAgICAgICAgICAgICAgICAgICAgKi97fX0pPT5cbntcbmNvbnN0IGNicz0vKiAgICAgICAgICAgICAgICAgICAgKi97fTtcblxuY29uc3QgcmVtYWluaW5nPW5ldyBTZXQobWV0aG9kTmFtZXMpO1xuZm9yKGNvbnN0IGtleSBvZiBvd25LZXlzKG92ZXJyaWRlcykpe1xucmVtYWluaW5nLmhhcyhrZXkpfHxcbkZhaWwgYCR7cSh0YWcpfSBvdmVycmlkZXNbJHtxKGtleSl9XSBub3QgYWxsb3dlZCBieSBtZXRob2ROYW1lc2A7XG5cbnJlbWFpbmluZy5kZWxldGUoa2V5KTtcbmNvbnN0IGNiPW92ZXJyaWRlc1trZXldO1xuY2I9PW51bGx8fFxuaXNDYWxsYmFjayhjYil8fFxuRmFpbCBgJHtxKHRhZyl9IG92ZXJyaWRlc1ske3Eoa2V5KX1dIGlzIG5vdCBhIGNhbGxiYWNrOyBnb3QgJHtjYn1gO1xuY2JzW2tleV09Y2I7XG4gfVxuZm9yKGNvbnN0IGtleSBvZiByZW1haW5pbmcpe1xuaWYoaXNTeW5jKXtcbmNic1trZXldPW1ha2VTeW5jTWV0aG9kQ2FsbGJhY2sodGFyZ2V0LGtleSk7XG4gfWVsc2V7XG5jYnNba2V5XT1tYWtlTWV0aG9kQ2FsbGJhY2sodGFyZ2V0LGtleSk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2Nicyxpc1N5bmN9KTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAqL21ldGhvZHMpO1xuXG5yZXR1cm4gbWFrZUF0dGVudWF0b3I7XG4gfTskaOKAjV9vbmNlLnByZXBhcmVBdHRlbnVhdG9yKHByZXBhcmVBdHRlbnVhdG9yKTtcbmhhcmRlbihwcmVwYXJlQXR0ZW51YXRvcik7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcj0oem9uZSxpbnRlcmZhY2VHdWFyZCxvcHRzPXt9KT0+e1xuY29uc3QgbWV0aG9kTmFtZXM9Z2V0SW50ZXJmYWNlTWV0aG9kS2V5cyhpbnRlcmZhY2VHdWFyZCk7XG5jb25zdCBtYWtlQXR0ZW51YXRvcj1wcmVwYXJlQXR0ZW51YXRvcih6b25lLG1ldGhvZE5hbWVzLHtcbi4uLm9wdHMsXG5pbnRlcmZhY2VHdWFyZH0pO1xuXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9tYWtlQXR0ZW51YXRvcik7XG4gfTskaOKAjV9vbmNlLnByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcihwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IpO1xuaGFyZGVuKHByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjYWxsU3luYyI6WyJjYWxsU3luYyJdLCJjYWxsRSI6WyJjYWxsRSJdLCJtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2siOlsibWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrIl0sIm1ha2VGdW5jdGlvbkNhbGxiYWNrIjpbIm1ha2VGdW5jdGlvbkNhbGxiYWNrIl0sIm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2siOlsibWFrZVN5bmNNZXRob2RDYWxsYmFjayJdLCJtYWtlTWV0aG9kQ2FsbGJhY2siOlsibWFrZU1ldGhvZENhbGxiYWNrIl0sImlzQ2FsbGJhY2siOlsiaXNDYWxsYmFjayJdLCJwcmVwYXJlQXR0ZW51YXRvciI6WyJwcmVwYXJlQXR0ZW51YXRvciJdLCJwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IiOlsicHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABI+V8UcBgAAHAYAACUAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvY29uZmlnLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJCcmlkZ2VJZCIsIkNvc21vc0luaXRLZXlUb0JyaWRnZUlkIiwiVkJhbmtBY2NvdW50IiwiV2FsbGV0TmFtZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBCcmlkZ2VJZD0vKiAgICAgICAgICAgICAgICAqL3tcbkJBTks6J2JhbmsnLFxuQ09SRTonY29yZScsXG5ESUJDOidkaWJjJyxcblNUT1JBR0U6J3N0b3JhZ2UnLFxuUFJPVklTSU9OOidwcm92aXNpb24nLFxuUFJPVklTSU9OX1NNQVJUX1dBTExFVDoncHJvdmlzaW9uV2FsbGV0JyxcblZMT0NBTENIQUlOOid2bG9jYWxjaGFpbicsXG5WVFJBTlNGRVI6J3Z0cmFuc2ZlcicsXG5XQUxMRVQ6J3dhbGxldCd9OyRo4oCNX29uY2UuQnJpZGdlSWQoQnJpZGdlSWQpO1xuXG5oYXJkZW4oQnJpZGdlSWQpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0ICAgICAgICBDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZD17XG52YmFua1BvcnQ6QnJpZGdlSWQuQkFOSyxcbnZpYmNQb3J0OkJyaWRnZUlkLkRJQkN9OyRo4oCNX29uY2UuQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQoQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQpO1xuXG5cbmNvbnN0ICAgICAgICBXYWxsZXROYW1lPS8qICAgICAgICAgICAgICAgICove1xuZGVwb3NpdEZhY2V0OidkZXBvc2l0RmFjZXQnfTskaOKAjV9vbmNlLldhbGxldE5hbWUoV2FsbGV0TmFtZSk7XG5cbmhhcmRlbihXYWxsZXROYW1lKTtcblxuLy9cbmNvbnN0ICAgICAgICBWQmFua0FjY291bnQ9LyogICAgICAgICAgICAgICAgKi97XG5yZXNlcnZlOntcbm1vZHVsZTondmJhbmsvcmVzZXJ2ZScsXG5hZGRyZXNzOidhZ29yaWMxYWUwbG10emxncmNubGE5eGprcGFhcnE1ZDVkZmV6NjNoM251Y2wnfSxcblxucHJvdmlzaW9uOntcbm1vZHVsZTondmJhbmsvcHJvdmlzaW9uJyxcbmFkZHJlc3M6J2Fnb3JpYzFtZWd6eXRnNjVjeXJnenM2ZnZ6eGdyY3F2d3dsN3VncHQ2MjM0Nid9fTskaOKAjV9vbmNlLlZCYW5rQWNjb3VudChWQmFua0FjY291bnQpO1xuXG5cbmhhcmRlbihWQmFua0FjY291bnQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQnJpZGdlSWQiOlsiQnJpZGdlSWQiXSwiQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQiOlsiQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQiXSwiV2FsbGV0TmFtZSI6WyJXYWxsZXROYW1lIl0sIlZCYW5rQWNjb3VudCI6WyJWQmFua0FjY291bnQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA0N+uT04EAABOBAAAJAAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9kZWJ1Zy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZVRyYWNlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvL1xuXG5sZXQgZGVidWdJbnN0YW5jZT0xO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VUcmFjZXI9KG5hbWUsZW5hYmxlPXRydWUpPT57XG5kZWJ1Z0luc3RhbmNlKz0xO1xubGV0IGRlYnVnQ291bnQ9MTtcbmNvbnN0IGtleT0gYC0tLS0tICR7bmFtZX0uJHtkZWJ1Z0luc3RhbmNlfSBgO1xuLy9cbnN3aXRjaChlbmFibGUpe1xuY2FzZSBmYWxzZTp7XG5jb25zdCBsb2dEaXNhYmxlZD0oLi4uX2FyZ3MpPT57IH07XG5yZXR1cm4gbG9nRGlzYWJsZWQ7XG4gfVxuY2FzZSd2ZXJib3NlJzp7XG5jb25zdCBpbmZvVGljaz0ob3B0TG9nLC4uLmFyZ3MpPT57XG5pZihvcHRMb2cubG9nKXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSwuLi5hcmdzKTtcbiB9ZWxzZXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSxvcHRMb2csLi4uYXJncyk7XG4gfVxuIH07XG5yZXR1cm4gaW5mb1RpY2s7XG4gfVxuZGVmYXVsdDp7XG5jb25zdCBkZWJ1Z1RpY2s9KG9wdExvZywuLi5hcmdzKT0+e1xuaWYob3B0TG9nLmxvZyl7XG5vcHRMb2cubG9nKGtleSxkZWJ1Z0NvdW50Kz0xLC4uLmFyZ3MpO1xuIH1lbHNle1xuY29uc29sZS5pbmZvKGtleSxkZWJ1Z0NvdW50Kz0xLG9wdExvZywuLi5hcmdzKTtcbiB9XG4gfTtcbnJldHVybiBkZWJ1Z1RpY2s7XG4gfX1cblxuIH07JGjigI1fb25jZS5tYWtlVHJhY2VyKG1ha2VUcmFjZXIpO1xuaGFyZGVuKG1ha2VUcmFjZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYWNlciI6WyJtYWtlVHJhY2VyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACZplWaWAgAAlgIAACUAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZXJyb3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIk5vbk51bGxpc2giXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHE7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIE5vbk51bGxpc2g9KHZhbCxvcHREZXRhaWxzPSBgdW5leHBlY3RlZCAke3EodmFsKX1gKT0+e1xuaWYodmFsIT1udWxsKXtcbi8vXG5yZXR1cm4gdmFsO1xuIH1cbmFzc2VydC5mYWlsKG9wdERldGFpbHMpO1xuIH07JGjigI1fb25jZS5Ob25OdWxsaXNoKE5vbk51bGxpc2gpO1xuaGFyZGVuKE5vbk51bGxpc2gpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiTm9uTnVsbGlzaCI6WyJOb25OdWxsaXNoIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAM16pCnMBAAAzAQAACQAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9jb25maWcuanMiLCIuL2RlYnVnLmpzIiwiLi9lcnJvcnMuanMiLCIuL3V0aWxzLmpzIiwiLi9tZXRob2QtdG9vbHMuanMiLCIuL3R5cGVDaGVjay5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vdHlwZXMtaW5kZXguanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiLCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyJdLCJleHBvcnRzIjpbbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9jb25maWcuanMiLCIuL2RlYnVnLmpzIiwiLi9lcnJvcnMuanMiLCIuL21ldGhvZC10b29scy5qcyIsIi4vdHlwZUNoZWNrLmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi90eXBlcy1pbmRleC5qcyIsIi4vdXRpbHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9jb25maWcuanNcIiwgW11dLFtcIi4vZGVidWcuanNcIiwgW11dLFtcIi4vZXJyb3JzLmpzXCIsIFtdXSxbXCIuL3V0aWxzLmpzXCIsIFtdXSxbXCIuL21ldGhvZC10b29scy5qc1wiLCBbXV0sW1wiLi90eXBlQ2hlY2suanNcIiwgW11dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi90eXBlcy1pbmRleC5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOltbIm9iamVjdE1hcCIsIm9iamVjdE1hcCJdXSwiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6W1sib2JqZWN0TWV0YU1hcCIsIm9iamVjdE1ldGFNYXAiXV0sIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjpbWyJmcm9tVW5pcXVlRW50cmllcyIsImZyb21VbmlxdWVFbnRyaWVzIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADntro8pBUAAKQVAAAvAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vcGF0dGVybnMiLCJAYWdvcmljL2Jhc2Utem9uZS9oZWFwLmpzIiwiLi9jYWxsYmFjay5qcyJdLCJleHBvcnRzIjpbImFzc2VydENhcERhdGEiLCJhc3NlcnRQYXRoU2VnbWVudCIsImlzU3RyZWFtQ2VsbCIsIm1ha2VDaGFpblN0b3JhZ2VSb290IiwibWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSIsIm1ha2VTdG9yYWdlTm9kZUNoaWxkIiwicHJlcGFyZUNoYWluU3RvcmFnZU5vZGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRSxNLG1ha2VIZWFwWm9uZSxjYjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanNcIiwgW1tcIm1ha2VIZWFwWm9uZVwiLCBbJGjigI1fYSA9PiAobWFrZUhlYXBab25lID0gJGjigI1fYSldXV1dLFtcIi4vY2FsbGJhY2suanNcIiwgW1tcIipcIiwgWyRo4oCNX2EgPT4gKGNiID0gJGjigI1fYSldXV1dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VDaGFpblN0b3JhZ2VSb290LCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlQ2hhaW5TdG9yYWdlUm9vdFwifSk7JGjigI1fb25jZS5tYWtlQ2hhaW5TdG9yYWdlUm9vdChtYWtlQ2hhaW5TdG9yYWdlUm9vdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VTdG9yYWdlTm9kZUNoaWxkLCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlU3RvcmFnZU5vZGVDaGlsZFwifSk7JGjigI1fb25jZS5tYWtlU3RvcmFnZU5vZGVDaGlsZChtYWtlU3RvcmFnZU5vZGVDaGlsZCk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgQ2hhaW5TdG9yYWdlTm9kZUk9TS5pbnRlcmZhY2UoJ1N0b3JhZ2VOb2RlJyx7XG5zZXRWYWx1ZTpNLmNhbGxXaGVuKE0uc3RyaW5nKCkpLnJldHVybnMoKSxcbmdldFBhdGg6TS5jYWxsKCkucmV0dXJucyhNLnN0cmluZygpKSxcbmdldFN0b3JlS2V5Ok0uY2FsbFdoZW4oKS5yZXR1cm5zKE0ucmVjb3JkKCkpLFxubWFrZUNoaWxkTm9kZTpNLmNhbGwoTS5zdHJpbmcoKSkuXG5vcHRpb25hbChNLnNwbGl0UmVjb3JkKHt9LHtzZXF1ZW5jZTpNLmJvb2xlYW4oKX0se30pKS5cbnJldHVybnMoTS5yZW1vdGFibGUoJ1N0b3JhZ2VOb2RlJykpfSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzU3RyZWFtQ2VsbD0oY2VsbCk9PlxuY2VsbCYmXG50eXBlb2YgY2VsbD09PSdvYmplY3QnJiZcbkFycmF5LmlzQXJyYXkoY2VsbC52YWx1ZXMpJiZcbnR5cGVvZiBjZWxsLmJsb2NrSGVpZ2h0PT09J3N0cmluZycmJlxuL14wJHxeWzEtOV1bMC05XSokLy50ZXN0KGNlbGwuYmxvY2tIZWlnaHQpOyRo4oCNX29uY2UuaXNTdHJlYW1DZWxsKGlzU3RyZWFtQ2VsbCk7XG5oYXJkZW4oaXNTdHJlYW1DZWxsKTtcblxuLy9cbi8vXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydENhcERhdGE9KGRhdGEpPT57XG5hc3NlcnQudHlwZW9mKGRhdGEsJ29iamVjdCcpO1xuYXNzZXJ0KGRhdGEpO1xuYXNzZXJ0LnR5cGVvZihkYXRhLmJvZHksJ3N0cmluZycpO1xuYXNzZXJ0KEFycmF5LmlzQXJyYXkoZGF0YS5zbG90cykpO1xuLy9cbiB9OyRo4oCNX29uY2UuYXNzZXJ0Q2FwRGF0YShhc3NlcnRDYXBEYXRhKTtcbmhhcmRlbihhc3NlcnRDYXBEYXRhKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHBhdGhTZWdtZW50UGF0dGVybj0vXlthLXpBLVowLTlfLV17MSwxMDB9JC87XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQYXRoU2VnbWVudD0obmFtZSk9PntcbnBhdGhTZWdtZW50UGF0dGVybi50ZXN0KG5hbWUpfHxcbkZhaWwgYFBhdGggc2VnbWVudCBuYW1lcyBtdXN0IGNvbnNpc3Qgb2YgMSB0byAxMDAgY2hhcmFjdGVycyBsaW1pdGVkIHRvIEFTQ0lJIGFscGhhbnVtZXJpY3MsIHVuZGVyc2NvcmVzLCBhbmQvb3IgZGFzaGVzOiAke25hbWV9YDtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0UGF0aFNlZ21lbnQoYXNzZXJ0UGF0aFNlZ21lbnQpO1xuaGFyZGVuKGFzc2VydFBhdGhTZWdtZW50KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUNoYWluU3RvcmFnZU5vZGU9KHpvbmUpPT57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlQ2hhaW5TdG9yYWdlTm9kZT16b25lLmV4b0NsYXNzKFxuJ0NoYWluU3RvcmFnZU5vZGUnLFxuQ2hhaW5TdG9yYWdlTm9kZUksXG4vKlxuXG5cblxuXG5cblxuICAgICAqL1xuKG1lc3NlbmdlcixwYXRoLHtzZXF1ZW5jZT1mYWxzZX09e30pPT57XG5hc3NlcnQudHlwZW9mKHBhdGgsJ3N0cmluZycpO1xuYXNzZXJ0LnR5cGVvZihzZXF1ZW5jZSwnYm9vbGVhbicpO1xucmV0dXJuIGhhcmRlbih7cGF0aCxtZXNzZW5nZXIsc2VxdWVuY2V9KTtcbiB9LFxue1xuZ2V0UGF0aCgpe1xucmV0dXJuIHRoaXMuc3RhdGUucGF0aDtcbiB9LFxuLypcblxuXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIGdldFN0b3JlS2V5KCl7XG5jb25zdHtwYXRoLG1lc3Nlbmdlcn09dGhpcy5zdGF0ZTtcbnJldHVybiBjYi5jYWxsRShtZXNzZW5nZXIse1xubWV0aG9kOidnZXRTdG9yZUtleScsXG5hcmdzOltwYXRoXX0pO1xuXG4gfSxcbi8qXG5cblxuXG5cbiAgICAgICAqL1xubWFrZUNoaWxkTm9kZShuYW1lLGNoaWxkTm9kZU9wdGlvbnM9e30pe1xuY29uc3R7c2VxdWVuY2UscGF0aCxtZXNzZW5nZXJ9PXRoaXMuc3RhdGU7XG5hc3NlcnRQYXRoU2VnbWVudChuYW1lKTtcbmNvbnN0IG1lcmdlZE9wdGlvbnM9e3NlcXVlbmNlLC4uLmNoaWxkTm9kZU9wdGlvbnN9O1xucmV0dXJuIG1ha2VDaGFpblN0b3JhZ2VOb2RlKFxubWVzc2VuZ2VyLFxuIGAke3BhdGh9LiR7bmFtZX1gLFxubWVyZ2VkT3B0aW9ucyk7XG5cbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIHNldFZhbHVlKHZhbHVlKXtcbmNvbnN0e3NlcXVlbmNlLHBhdGgsbWVzc2VuZ2VyfT10aGlzLnN0YXRlO1xuYXNzZXJ0LnR5cGVvZih2YWx1ZSwnc3RyaW5nJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBlbnRyeTtcbmlmKCFzZXF1ZW5jZSYmIXZhbHVlKXtcbmVudHJ5PVtwYXRoXTtcbiB9ZWxzZXtcbmVudHJ5PVtwYXRoLHZhbHVlXTtcbiB9XG5hd2FpdCBjYi5jYWxsRShtZXNzZW5nZXIse1xubWV0aG9kOnNlcXVlbmNlPydhcHBlbmQnOidzZXQnLFxuYXJnczpbZW50cnldfSk7XG5cbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xufSk7XG5cbnJldHVybiBtYWtlQ2hhaW5TdG9yYWdlTm9kZTtcbiB9OyRo4oCNX29uY2UucHJlcGFyZUNoYWluU3RvcmFnZU5vZGUocHJlcGFyZUNoYWluU3RvcmFnZU5vZGUpO1xuXG5jb25zdCBtYWtlSGVhcENoYWluU3RvcmFnZU5vZGU9cHJlcGFyZUNoYWluU3RvcmFnZU5vZGUobWFrZUhlYXBab25lKCkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIG1ha2VDaGFpblN0b3JhZ2VSb290KFxuaGFuZGxlU3RvcmFnZU1lc3NhZ2UsXG5yb290UGF0aCxcbnJvb3RPcHRpb25zPXt9KVxue1xuY29uc3QgbWVzc2VuZ2VyPWNiLm1ha2VGdW5jdGlvbkNhbGxiYWNrKGhhbmRsZVN0b3JhZ2VNZXNzYWdlKTtcblxuLy9cbmNvbnN0IHJvb3ROb2RlPW1ha2VIZWFwQ2hhaW5TdG9yYWdlTm9kZShtZXNzZW5nZXIscm9vdFBhdGgscm9vdE9wdGlvbnMpO1xucmV0dXJuIHJvb3ROb2RlO1xuIH1cblxuLypcblxuXG4gKi9cbmNvbnN0IG1ha2VOdWxsU3RvcmFnZU5vZGU9KCk9Pntcbi8vXG5yZXR1cm4gbWFrZUNoYWluU3RvcmFnZVJvb3QoKCk9Pm51bGwsJ251bGwnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uICAgICAgICBtYWtlU3RvcmFnZU5vZGVDaGlsZChzdG9yYWdlTm9kZVJlZixjaGlsZE5hbWUpe1xuY29uc3QgZXhpc3RpbmdTdG9yYWdlTm9kZT1hd2FpdCBzdG9yYWdlTm9kZVJlZjtcbmNvbnN0IHN0b3JhZ2VOb2RlPWV4aXN0aW5nU3RvcmFnZU5vZGV8fG1ha2VOdWxsU3RvcmFnZU5vZGUoKTtcbnJldHVybiBFKHN0b3JhZ2VOb2RlKS5tYWtlQ2hpbGROb2RlKGNoaWxkTmFtZSk7XG4gfVxuaGFyZGVuKG1ha2VTdG9yYWdlTm9kZUNoaWxkKTtcblxuLy9cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU2VyaWFsaXplVG9TdG9yYWdlPShzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKT0+e1xucmV0dXJuIGFzeW5jKHZhbHVlKT0+e1xuY29uc3QgbWFyc2hhbGxlZD1hd2FpdCBFKG1hcnNoYWxsZXIpLnRvQ2FwRGF0YSh2YWx1ZSk7XG5jb25zdCBzZXJpYWxpemVkPUpTT04uc3RyaW5naWZ5KG1hcnNoYWxsZWQpO1xucmV0dXJuIEUoc3RvcmFnZU5vZGUpLnNldFZhbHVlKHNlcmlhbGl6ZWQpO1xuIH07XG4gfTskaOKAjV9vbmNlLm1ha2VTZXJpYWxpemVUb1N0b3JhZ2UobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1N0cmVhbUNlbGwiOlsiaXNTdHJlYW1DZWxsIl0sImFzc2VydENhcERhdGEiOlsiYXNzZXJ0Q2FwRGF0YSJdLCJhc3NlcnRQYXRoU2VnbWVudCI6WyJhc3NlcnRQYXRoU2VnbWVudCJdLCJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSI6WyJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSJdLCJtYWtlQ2hhaW5TdG9yYWdlUm9vdCI6WyJtYWtlQ2hhaW5TdG9yYWdlUm9vdCJdLCJtYWtlU3RvcmFnZU5vZGVDaGlsZCI6WyJtYWtlU3RvcmFnZU5vZGVDaGlsZCJdLCJtYWtlU2VyaWFsaXplVG9TdG9yYWdlIjpbIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAACTqpybAOAACwDgAAJgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9tYXJzaGFsLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCIuL2xpYi1jaGFpblN0b3JhZ2UuanMiXSwiZXhwb3J0cyI6WyJib2FyZFNsb3R0aW5nTWFyc2hhbGxlciIsIm1ha2VCb2FyZFJlbW90ZSIsIm1ha2VIaXN0b3J5UmV2aXZlciIsInNsb3RUb0JvYXJkUmVtb3RlIiwidW5tYXJzaGFsRnJvbVZzdG9yYWdlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEZhcixtYWtlTWFyc2hhbCxpc1N0cmVhbUNlbGw7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wibWFrZU1hcnNoYWxcIiwgWyRo4oCNX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjigI1fYSldXV1dLFtcIi4vbGliLWNoYWluU3RvcmFnZS5qc1wiLCBbW1wiaXNTdHJlYW1DZWxsXCIsIFskaOKAjV9hID0+IChpc1N0cmVhbUNlbGwgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQm9hcmRSZW1vdGU9KHtib2FyZElkLGlmYWNlfSk9PntcbmNvbnN0IG5vbmFsbGVnZWQ9aWZhY2U/aWZhY2UucmVwbGFjZSgvXkFsbGVnZWQ6IC8sJycpOicnO1xucmV0dXJuIEZhciggYEJvYXJkUmVtb3RlJHtub25hbGxlZ2VkfWAse2dldEJvYXJkSWQ6KCk9PmJvYXJkSWR9KTtcbiB9O1xuXG4vKlxuXG5cbiAqLyRo4oCNX29uY2UubWFrZUJvYXJkUmVtb3RlKG1ha2VCb2FyZFJlbW90ZSk7XG5jb25zdCAgICAgICAgc2xvdFRvQm9hcmRSZW1vdGU9KGJvYXJkSWQsaWZhY2UpPT5cbm1ha2VCb2FyZFJlbW90ZSh7Ym9hcmRJZCxpZmFjZX0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjigI1fb25jZS5zbG90VG9Cb2FyZFJlbW90ZShzbG90VG9Cb2FyZFJlbW90ZSk7XG5jb25zdCBib2FyZFZhbFRvU2xvdD0odmFsKT0+e1xuaWYoJ2dldEJvYXJkSWQnaW4gdmFsKXtcbnJldHVybiB2YWwuZ2V0Qm9hcmRJZCgpO1xuIH1cbnRocm93IEZhaWwgYHVua25vd24gb2JqIGluIGJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyLnZhbFRvU2xvdCAke3ZhbH1gO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBib2FyZFNsb3R0aW5nTWFyc2hhbGxlcj0oc2xvdFRvVmFsPXVuZGVmaW5lZCk9PntcbnJldHVybiBtYWtlTWFyc2hhbChib2FyZFZhbFRvU2xvdCxzbG90VG9WYWwse1xuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pO1xuXG4gfTtcblxuLy9cbi8vXG4vKlxuXG5cbiAqLyRo4oCNX29uY2UuYm9hcmRTbG90dGluZ01hcnNoYWxsZXIoYm9hcmRTbG90dGluZ01hcnNoYWxsZXIpO1xuY29uc3QgYXNzZXJ0Q2FwRGF0YT0oZGF0YSk9PntcbmFzc2VydC50eXBlb2YoZGF0YSwnb2JqZWN0Jyk7XG5hc3NlcnQoZGF0YSk7XG5hc3NlcnQudHlwZW9mKGRhdGEuYm9keSwnc3RyaW5nJyk7XG5hc3NlcnQoQXJyYXkuaXNBcnJheShkYXRhLnNsb3RzKSk7XG4vL1xuIH07XG5oYXJkZW4oYXNzZXJ0Q2FwRGF0YSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHVubWFyc2hhbEZyb21Wc3RvcmFnZT0oZGF0YSxrZXksZnJvbUNhcERhdGEsaW5kZXgpPT57XG5jb25zdCBzZXJpYWxpemVkPWRhdGEuZ2V0KGtleSl8fEZhaWwgYG5vIGRhdGEgZm9yICR7a2V5fWA7XG5hc3NlcnQudHlwZW9mKHNlcmlhbGl6ZWQsJ3N0cmluZycpO1xuYXNzZXJ0LnR5cGVvZihpbmRleCwnbnVtYmVyJyk7XG5cbmNvbnN0IHN0cmVhbUNlbGw9SlNPTi5wYXJzZShzZXJpYWxpemVkKTtcbmlmKCFpc1N0cmVhbUNlbGwoc3RyZWFtQ2VsbCkpe1xudGhyb3cgRmFpbCBgbm90IGEgU3RyZWFtQ2VsbDogJHtzdHJlYW1DZWxsfWA7XG4gfVxuXG5jb25zdHt2YWx1ZXN9PXN0cmVhbUNlbGw7XG52YWx1ZXMubGVuZ3RoPjB8fEZhaWwgYG5vIFN0cmVhbUNlbGwgdmFsdWVzOiAke3N0cmVhbUNlbGx9YDtcblxuY29uc3QgbWFyc2hhbGxlZD12YWx1ZXMuYXQoaW5kZXgpO1xuYXNzZXJ0LnR5cGVvZihtYXJzaGFsbGVkLCdzdHJpbmcnKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYXBEYXRhPWhhcmRlbihKU09OLnBhcnNlKG1hcnNoYWxsZWQpKTtcbmFzc2VydENhcERhdGEoY2FwRGF0YSk7XG5cbmNvbnN0IHVubWFyc2hhbGxlZD1mcm9tQ2FwRGF0YShjYXBEYXRhKTtcbnJldHVybiB1bm1hcnNoYWxsZWQ7XG4gfTskaOKAjV9vbmNlLnVubWFyc2hhbEZyb21Wc3RvcmFnZSh1bm1hcnNoYWxGcm9tVnN0b3JhZ2UpO1xuaGFyZGVuKHVubWFyc2hhbEZyb21Wc3RvcmFnZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VIaXN0b3J5UmV2aXZlcj0oZW50cmllcyxzbG90VG9WYWw9dW5kZWZpbmVkKT0+e1xuY29uc3QgYm9hcmQ9Ym9hcmRTbG90dGluZ01hcnNoYWxsZXIoc2xvdFRvVmFsKTtcbmNvbnN0IHZzTWFwPW5ldyBNYXAoZW50cmllcyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGZyb21DYXBEYXRhPSguLi5hcmdzKT0+XG5SZWZsZWN0LmFwcGx5KGJvYXJkLmZyb21DYXBEYXRhLGJvYXJkLGFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2V0SXRlbT0oa2V5KT0+dW5tYXJzaGFsRnJvbVZzdG9yYWdlKHZzTWFwLGtleSxmcm9tQ2FwRGF0YSwtMSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjaGlsZHJlbj0ocHJlZml4KT0+e1xucHJlZml4LmVuZHNXaXRoKCcuJyl8fEZhaWwgYHByZWZpeCBtdXN0IGVuZCB3aXRoICcuJ2A7XG5yZXR1cm4gaGFyZGVuKFtcbi4uLm5ldyBTZXQoXG5lbnRyaWVzLlxubWFwKChbayxfXSk9PmspLlxuZmlsdGVyKChrKT0+ay5zdGFydHNXaXRoKHByZWZpeCkpLlxubWFwKChrKT0+ay5zbGljZShwcmVmaXgubGVuZ3RoKS5zcGxpdCgnLicpWzBdKSldKTtcblxuXG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBoYXM9KGspPT52c01hcC5nZXQoaykhPT11bmRlZmluZWQ7XG5cbnJldHVybiBoYXJkZW4oe2dldEl0ZW0sY2hpbGRyZW4saGFzfSk7XG4gfTskaOKAjV9vbmNlLm1ha2VIaXN0b3J5UmV2aXZlcihtYWtlSGlzdG9yeVJldml2ZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUJvYXJkUmVtb3RlIjpbIm1ha2VCb2FyZFJlbW90ZSJdLCJzbG90VG9Cb2FyZFJlbW90ZSI6WyJzbG90VG9Cb2FyZFJlbW90ZSJdLCJib2FyZFNsb3R0aW5nTWFyc2hhbGxlciI6WyJib2FyZFNsb3R0aW5nTWFyc2hhbGxlciJdLCJ1bm1hcnNoYWxGcm9tVnN0b3JhZ2UiOlsidW5tYXJzaGFsRnJvbVZzdG9yYWdlIl0sIm1ha2VIaXN0b3J5UmV2aXZlciI6WyJtYWtlSGlzdG9yeVJldml2ZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAleyqvXUIAAB1CAAAKwAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9tZXRob2QtdG9vbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCJdLCJleHBvcnRzIjpbImJpbmRBbGxNZXRob2RzIiwiZ2V0TWV0aG9kTmFtZXMiLCJnZXRTdHJpbmdNZXRob2ROYW1lcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNPYmplY3Q7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiaXNPYmplY3RcIiwgWyRo4oCNX2EgPT4gKGlzT2JqZWN0ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuLypcblxuXG4gKi9cblxuY29uc3R7Z2V0UHJvdG90eXBlT2YsY3JlYXRlLGZyb21FbnRyaWVzLGdldE93blByb3BlcnR5RGVzY3JpcHRvcnN9PVxuT2JqZWN0O1xuY29uc3R7b3duS2V5cyxhcHBseX09UmVmbGVjdDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbXBhcmVTdHJpbmdpZmllZD0oYSxiKT0+e1xuaWYodHlwZW9mIGE9PT10eXBlb2YgYil7XG5jb25zdCBsZWZ0PVN0cmluZyhhKTtcbmNvbnN0IHJpZ2h0PVN0cmluZyhiKTtcbi8vXG5yZXR1cm4gbGVmdDxyaWdodD8tMTpsZWZ0PnJpZ2h0PzE6MDtcbiB9XG5pZih0eXBlb2YgYT09PSdzeW1ib2wnKXtcbmFzc2VydCh0eXBlb2YgYj09PSdzdHJpbmcnKTtcbnJldHVybi0xO1xuIH1cbmFzc2VydCh0eXBlb2YgYT09PSdzdHJpbmcnKTtcbmFzc2VydCh0eXBlb2YgYj09PSdzeW1ib2wnKTtcbnJldHVybiAxO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kTmFtZXM9KHZhbCk9PntcbmxldCBsYXllcj12YWw7XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7Ly9cbndoaWxlKGxheWVyIT09bnVsbCYmbGF5ZXIhPT1PYmplY3QucHJvdG90eXBlKXtcbi8vXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGxheWVyKTtcbmNvbnN0IG93bk5hbWVzPS8qICAgICAgICAgICAgICAqL293bktleXMoZGVzY3MpO1xuZm9yKGNvbnN0IG5hbWUgb2Ygb3duTmFtZXMpe1xuLy9cbi8vXG5pZih0eXBlb2YgdmFsW25hbWVdPT09J2Z1bmN0aW9uJyl7XG5uYW1lcy5hZGQobmFtZSk7XG4gfVxuIH1cbmlmKCFpc09iamVjdCh2YWwpKXtcbmJyZWFrO1xuIH1cbmxheWVyPWdldFByb3RvdHlwZU9mKGxheWVyKTtcbiB9XG5yZXR1cm4gaGFyZGVuKFsuLi5uYW1lc10uc29ydChjb21wYXJlU3RyaW5naWZpZWQpKTtcbiB9OyRo4oCNX29uY2UuZ2V0TWV0aG9kTmFtZXMoZ2V0TWV0aG9kTmFtZXMpO1xuaGFyZGVuKGdldE1ldGhvZE5hbWVzKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRTdHJpbmdNZXRob2ROYW1lcz0odmFsKT0+XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuZ2V0TWV0aG9kTmFtZXModmFsKS5maWx0ZXIoKG5hbWUpPT50eXBlb2YgbmFtZT09PSdzdHJpbmcnKTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5nZXRTdHJpbmdNZXRob2ROYW1lcyhnZXRTdHJpbmdNZXRob2ROYW1lcyk7XG5jb25zdCAgICAgICAgYmluZEFsbE1ldGhvZHM9KG9iaik9PlxuaGFyZGVuKFxuY3JlYXRlKFxub2JqLFxuZnJvbUVudHJpZXMoXG5nZXRNZXRob2ROYW1lcyhvYmopLm1hcCgobmFtZSk9Pltcbm5hbWUsXG57XG52YWx1ZTooLyogICAgICAgICAgICAgICAgICAgICovLi4uYXJncyk9PlxuYXBwbHkob2JqW25hbWVdLG9iaixhcmdzKSxcbmVudW1lcmFibGU6dHJ1ZX1dKSkpKTskaOKAjV9vbmNlLmJpbmRBbGxNZXRob2RzKGJpbmRBbGxNZXRob2RzKTtcblxuXG5cblxuXG5oYXJkZW4oYmluZEFsbE1ldGhvZHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2V0TWV0aG9kTmFtZXMiOlsiZ2V0TWV0aG9kTmFtZXMiXSwiZ2V0U3RyaW5nTWV0aG9kTmFtZXMiOlsiZ2V0U3RyaW5nTWV0aG9kTmFtZXMiXSwiYmluZEFsbE1ldGhvZHMiOlsiYmluZEFsbE1ldGhvZHMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA5oecrxYdAAAWHQAAMQAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIi4vbWFyc2hhbC5qcyIsIi4vZGVidWcuanMiLCIuL2xpYi1jaGFpblN0b3JhZ2UuanMiLCIuL21ldGhvZC10b29scy5qcyIsIi4vdGVzdGluZy11dGlscy5qcyJdLCJleHBvcnRzIjpbImRlZmF1bHRNYXJzaGFsbGVyIiwiZG9jdW1lbnRTdG9yYWdlU2NoZW1hIiwibWFrZUZha2VTdG9yYWdlS2l0IiwibWFrZU1vY2tDaGFpblN0b3JhZ2VSb290Iiwic2xvdFN0cmluZ1Vuc2VyaWFsaXplIiwic2xvdFRvUmVtb3RhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEZhcixtYWtlTWFyc2hhbCxSZW1vdGFibGUsdW5tYXJzaGFsRnJvbVZzdG9yYWdlLG1ha2VUcmFjZXIsaXNTdHJlYW1DZWxsLG1ha2VDaGFpblN0b3JhZ2VSb290LGJpbmRBbGxNZXRob2RzLGV2ZW50TG9vcEl0ZXJhdGlvbjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjigI1fYSA9PiAobWFrZU1hcnNoYWwgPSAkaOKAjV9hKV1dLFtcIlJlbW90YWJsZVwiLCBbJGjigI1fYSA9PiAoUmVtb3RhYmxlID0gJGjigI1fYSldXV1dLFtcIi4vbWFyc2hhbC5qc1wiLCBbW1widW5tYXJzaGFsRnJvbVZzdG9yYWdlXCIsIFskaOKAjV9hID0+ICh1bm1hcnNoYWxGcm9tVnN0b3JhZ2UgPSAkaOKAjV9hKV1dXV0sW1wiLi9kZWJ1Zy5qc1wiLCBbW1wibWFrZVRyYWNlclwiLCBbJGjigI1fYSA9PiAobWFrZVRyYWNlciA9ICRo4oCNX2EpXV1dXSxbXCIuL2xpYi1jaGFpblN0b3JhZ2UuanNcIiwgW1tcImlzU3RyZWFtQ2VsbFwiLCBbJGjigI1fYSA9PiAoaXNTdHJlYW1DZWxsID0gJGjigI1fYSldXSxbXCJtYWtlQ2hhaW5TdG9yYWdlUm9vdFwiLCBbJGjigI1fYSA9PiAobWFrZUNoYWluU3RvcmFnZVJvb3QgPSAkaOKAjV9hKV1dXV0sW1wiLi9tZXRob2QtdG9vbHMuanNcIiwgW1tcImJpbmRBbGxNZXRob2RzXCIsIFskaOKAjV9hID0+IChiaW5kQWxsTWV0aG9kcyA9ICRo4oCNX2EpXV1dXSxbXCIuL3Rlc3RpbmctdXRpbHMuanNcIiwgW1tcImV2ZW50TG9vcEl0ZXJhdGlvblwiLCBbJGjigI1fYSA9PiAoZXZlbnRMb29wSXRlcmF0aW9uID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCB0cmFjZT1tYWtlVHJhY2VyKCdTdG9yVFUnLGZhbHNlKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzbG90VG9SZW1vdGFibGU9KF9zbG90SWQsaWZhY2U9J1JlbW90YWJsZScpPT5cblJlbW90YWJsZShpZmFjZSk7XG5cbi8qXG5cblxuICovJGjigI1fb25jZS5zbG90VG9SZW1vdGFibGUoc2xvdFRvUmVtb3RhYmxlKTtcbmNvbnN0ICAgICAgICBkZWZhdWx0TWFyc2hhbGxlcj1tYWtlTWFyc2hhbCh1bmRlZmluZWQsc2xvdFRvUmVtb3RhYmxlLHtcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuZGVmYXVsdE1hcnNoYWxsZXIoZGVmYXVsdE1hcnNoYWxsZXIpO1xuY29uc3QgbWFrZVNsb3RTdHJpbmdVbnNlcmlhbGl6ZT0oKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpZGVudGl0eVNsb3RUb1ZhbEZuPShzbG90LF8pPT5GYXIoJ3Vuaycse3RvSlNPTjooKT0+c2xvdH0pO1xuY29uc3R7ZnJvbUNhcERhdGF9PW1ha2VNYXJzaGFsKHVuZGVmaW5lZCxpZGVudGl0eVNsb3RUb1ZhbEZuKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdW5zZXJpYWxpemU9KGNhcERhdGEpPT5cbkpTT04ucGFyc2UoXG5KU09OLnN0cmluZ2lmeShmcm9tQ2FwRGF0YShjYXBEYXRhKSwoXyx2YWwpPT57XG5pZih0eXBlb2YgdmFsPT09J2JpZ2ludCcpe1xuLy9cbi8vXG5yZXR1cm4gYEBlbmNyb211bGF0ZToke3ZhbH1gO1xuIH1lbHNle1xucmV0dXJuIHZhbDtcbiB9XG4gfSksXG4oX2tleSx2YWwpPT57XG5pZih0eXBlb2YgdmFsPT09J3N0cmluZycmJnZhbC5zdGFydHNXaXRoKCdAZW5jcm9tdWxhdGUnKSl7XG5yZXR1cm4gQmlnSW50KHZhbC5zcGxpdCgnOicpWzFdKTtcbiB9ZWxzZXtcbnJldHVybiB2YWw7XG4gfVxuIH0pO1xuXG5yZXR1cm4gaGFyZGVuKHVuc2VyaWFsaXplKTtcbiB9O1xuY29uc3QgICAgICAgIHNsb3RTdHJpbmdVbnNlcmlhbGl6ZT1tYWtlU2xvdFN0cmluZ1Vuc2VyaWFsaXplKCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLnNsb3RTdHJpbmdVbnNlcmlhbGl6ZShzbG90U3RyaW5nVW5zZXJpYWxpemUpO1xuY29uc3QgICAgICAgIG1ha2VGYWtlU3RvcmFnZUtpdD0ocm9vdFBhdGgscm9vdE9wdGlvbnMpPT57XG5jb25zdCByZXNvbHZlZE9wdGlvbnM9e3NlcXVlbmNlOnRydWUsLi4ucm9vdE9wdGlvbnN9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkYXRhPW5ldyBNYXAoKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBnZXRDaGlsZEVudHJpZXM9KHByZWZpeCk9PntcbmFzc2VydChwcmVmaXguZW5kc1dpdGgoJy4nKSk7XG5jb25zdCBjaGlsZEVudHJpZXM9bmV3IE1hcCgpO1xuZm9yKGNvbnN0W3BhdGgsdmFsdWVdb2YgZGF0YS5lbnRyaWVzKCkpe1xuaWYoIXBhdGguc3RhcnRzV2l0aChwcmVmaXgpKXtcbmNvbnRpbnVlO1xuIH1cbmNvbnN0W3NlZ21lbnQsLi4uc3VmZml4XT1wYXRoLnNsaWNlKHByZWZpeC5sZW5ndGgpLnNwbGl0KCcuJyk7XG5pZihzdWZmaXgubGVuZ3RoPT09MCl7XG5jaGlsZEVudHJpZXMuc2V0KHNlZ21lbnQsdmFsdWUpO1xuIH1lbHNlIGlmKCFjaGlsZEVudHJpZXMuaGFzKHNlZ21lbnQpKXtcbmNoaWxkRW50cmllcy5zZXQoc2VnbWVudCxudWxsKTtcbiB9XG4gfVxucmV0dXJuIGNoaWxkRW50cmllcztcbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWVzc2FnZXM9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCB0b1N0b3JhZ2U9KG1lc3NhZ2UpPT57XG5tZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuc3dpdGNoKG1lc3NhZ2UubWV0aG9kKXtcbmNhc2UnZ2V0U3RvcmVLZXknOntcbmNvbnN0W2tleV09bWVzc2FnZS5hcmdzO1xucmV0dXJue3N0b3JlTmFtZTonc3dpbmdzZXQnLHN0b3JlU3Via2V5OiBgZmFrZToke2tleX1gfTtcbiB9XG5jYXNlJ2dldCc6e1xuY29uc3Rba2V5XT1tZXNzYWdlLmFyZ3M7XG5yZXR1cm4gZGF0YS5oYXMoa2V5KT9kYXRhLmdldChrZXkpOm51bGw7XG4gfVxuY2FzZSdjaGlsZHJlbic6e1xuY29uc3Rba2V5XT1tZXNzYWdlLmFyZ3M7XG5jb25zdCBjaGlsZEVudHJpZXM9Z2V0Q2hpbGRFbnRyaWVzKCBgJHtrZXl9LmApO1xucmV0dXJuWy4uLmNoaWxkRW50cmllcy5rZXlzKCldO1xuIH1cbmNhc2UnZW50cmllcyc6e1xuY29uc3Rba2V5XT1tZXNzYWdlLmFyZ3M7XG5jb25zdCBjaGlsZEVudHJpZXM9Z2V0Q2hpbGRFbnRyaWVzKCBgJHtrZXl9LmApO1xucmV0dXJuWy4uLmNoaWxkRW50cmllcy5lbnRyaWVzKCldLm1hcCgoZW50cnkpPT5cbmVudHJ5WzFdIT1udWxsP2VudHJ5OltlbnRyeVswXV0pO1xuXG4gfVxuY2FzZSdzZXQnOlxuY2FzZSdzZXRXaXRob3V0Tm90aWZ5Jzp7XG50cmFjZSgndG9TdG9yYWdlIHNldCcsbWVzc2FnZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbmV3RW50cmllcz1tZXNzYWdlLmFyZ3M7XG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mIG5ld0VudHJpZXMpe1xuaWYodmFsdWUhPW51bGwpe1xuZGF0YS5zZXQoa2V5LHZhbHVlKTtcbiB9ZWxzZXtcbmRhdGEuZGVsZXRlKGtleSk7XG4gfVxuIH1cbmJyZWFrO1xuIH1cbmNhc2UnYXBwZW5kJzp7XG50cmFjZSgndG9TdG9yYWdlIGFwcGVuZCcsbWVzc2FnZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbmV3RW50cmllcz1tZXNzYWdlLmFyZ3M7XG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mIG5ld0VudHJpZXMpe1xudmFsdWUhPW51bGx8fEZhaWwgYGF0dGVtcHQgdG8gYXBwZW5kIHdpdGggbm8gdmFsdWVgO1xuLy9cbmNvbnN0IG9sZFZhbD1kYXRhLmdldChrZXkpO1xubGV0IHN0cmVhbUNlbGw7XG5pZihvbGRWYWwhPW51bGwpe1xudHJ5e1xuc3RyZWFtQ2VsbD1KU09OLnBhcnNlKG9sZFZhbCk7XG5hc3NlcnQoaXNTdHJlYW1DZWxsKHN0cmVhbUNlbGwpKTtcbiB9Y2F0Y2goX2Vycil7XG5zdHJlYW1DZWxsPXVuZGVmaW5lZDtcbiB9XG4gfVxuaWYoc3RyZWFtQ2VsbD09PXVuZGVmaW5lZCl7XG5zdHJlYW1DZWxsPXtcbmJsb2NrSGVpZ2h0OicwJyxcbnZhbHVlczpvbGRWYWwhPW51bGw/W29sZFZhbF06W119O1xuXG4gfVxuc3RyZWFtQ2VsbC52YWx1ZXMucHVzaCh2YWx1ZSk7XG5kYXRhLnNldChrZXksSlNPTi5zdHJpbmdpZnkoc3RyZWFtQ2VsbCkpO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2Unc2l6ZSc6XG4vL1xuLy9cbnJldHVyblsuLi5kYXRhLmtleXMoKV0uZmlsdGVyKChrKT0+ay5zdGFydHNXaXRoKCBgJHttZXNzYWdlLmFyZ3NbMF19LmApKS5cbmxlbmd0aDtcbmRlZmF1bHQ6XG50aHJvdyBFcnJvciggYHVuc3VwcG9ydGVkIG1ldGhvZDogJHttZXNzYWdlLm1ldGhvZH1gKTt9XG5cbiB9O1xuY29uc3Qgcm9vdE5vZGU9bWFrZUNoYWluU3RvcmFnZVJvb3QodG9TdG9yYWdlLHJvb3RQYXRoLHJlc29sdmVkT3B0aW9ucyk7XG5yZXR1cm57XG5yb290Tm9kZSxcbi8vXG5kYXRhOi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9kYXRhLFxubWVzc2FnZXMsXG50b1N0b3JhZ2V9O1xuXG4gfTskaOKAjV9vbmNlLm1ha2VGYWtlU3RvcmFnZUtpdChtYWtlRmFrZVN0b3JhZ2VLaXQpO1xuaGFyZGVuKG1ha2VGYWtlU3RvcmFnZUtpdCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdD0oKT0+e1xuY29uc3R7cm9vdE5vZGUsZGF0YX09bWFrZUZha2VTdG9yYWdlS2l0KCdtb2NrQ2hhaW5TdG9yYWdlUm9vdCcpO1xucmV0dXJuIEZhcignbW9ja0NoYWluU3RvcmFnZScse1xuLi4uYmluZEFsbE1ldGhvZHMocm9vdE5vZGUpLFxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmdldEJvZHk6KHBhdGgsbWFyc2hhbGxlcj1kZWZhdWx0TWFyc2hhbGxlcixpbmRleD0tMSk9PntcbmRhdGEuc2l6ZXx8RmFpbCBgbm8gZGF0YSBpbiBzdG9yYWdlYDtcbi8qXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGZyb21DYXBEYXRhPSguLi5hcmdzKT0+XG5SZWZsZWN0LmFwcGx5KG1hcnNoYWxsZXIuZnJvbUNhcERhdGEsbWFyc2hhbGxlcixhcmdzKTtcbnJldHVybiB1bm1hcnNoYWxGcm9tVnN0b3JhZ2UoZGF0YSxwYXRoLGZyb21DYXBEYXRhLGluZGV4KTtcbiB9LFxua2V5czooKT0+Wy4uLmRhdGEua2V5cygpXX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlTW9ja0NoYWluU3RvcmFnZVJvb3QobWFrZU1vY2tDaGFpblN0b3JhZ2VSb290KTtcbmNvbnN0ICAgICAgICBkb2N1bWVudFN0b3JhZ2VTY2hlbWE9YXN5bmModCxzdG9yYWdlLG9wdHMpPT57XG4vL1xuYXdhaXQgZXZlbnRMb29wSXRlcmF0aW9uKCk7XG5cbmNvbnN0W2tleXMsZ2V0Qm9keV09XG4na2V5cydpbiBzdG9yYWdlP1xuW3N0b3JhZ2Uua2V5cygpLCgvKiAgICAgICAgICAgICAgICAgKi9rKT0+c3RvcmFnZS5nZXRCb2R5KGspXTpcbltzdG9yYWdlLmRhdGEua2V5cygpLCgvKiAgICAgICAgICAgICAgICAgKi9rKT0+c3RvcmFnZS5kYXRhLmdldChrKV07XG5cbmNvbnN0e3BhdHRlcm4scmVwbGFjZW1lbnR9PVxuJ3BhdHRlcm4naW4gb3B0cz9cbm9wdHM6XG57cGF0dGVybjonbW9ja0NoYWluU3RvcmFnZVJvb3QuJyxyZXBsYWNlbWVudDoncHVibGlzaGVkLid9O1xuY29uc3QgaWxsdXN0cmF0aW9uPVsuLi5rZXlzXS5zb3J0KCkubWFwKFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbihrZXkpPT5ba2V5LnJlcGxhY2UocGF0dGVybixyZXBsYWNlbWVudCksZ2V0Qm9keShrZXkpXSk7XG5cbmNvbnN0IHBydW5lZD1pbGx1c3RyYXRpb24uZmlsdGVyKFxuJ25vZGUnaW4gb3B0cz9cbihba2V5LF9dKT0+a2V5LnN0YXJ0c1dpdGgoIGBwdWJsaXNoZWQuJHtvcHRzLm5vZGV9YCk6XG4oX2VudHJ5KT0+dHJ1ZSk7XG5cblxuY29uc3Qgbm90ZT1cbidub3RlJ2luIG9wdHM/XG5vcHRzLm5vdGU6XG4gYFVuZGVyIFwicHVibGlzaGVkXCIsIHRoZSBcIiR7b3B0cy5ub2RlfVwiIG5vZGUgaXMgZGVsZWdhdGVkIHRvICR7b3B0cy5vd25lcn0uYDtcbmNvbnN0IGJvaWxlcnBsYXRlPSBgXG5UaGUgZXhhbXBsZSBiZWxvdyBpbGx1c3RyYXRlcyB0aGUgc2NoZW1hIG9mIHRoZSBkYXRhIHB1Ymxpc2hlZCB0aGVyZS5cblxuU2VlIGFsc28gYm9hcmQgbWFyc2hhbGxpbmcgY29udmVudGlvbnMgKF90byBhcHBlYXJfKS5gO1xudC5zbmFwc2hvdChwcnVuZWQsbm90ZStib2lsZXJwbGF0ZSk7XG4gfTskaOKAjV9vbmNlLmRvY3VtZW50U3RvcmFnZVNjaGVtYShkb2N1bWVudFN0b3JhZ2VTY2hlbWEpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2xvdFRvUmVtb3RhYmxlIjpbInNsb3RUb1JlbW90YWJsZSJdLCJkZWZhdWx0TWFyc2hhbGxlciI6WyJkZWZhdWx0TWFyc2hhbGxlciJdLCJzbG90U3RyaW5nVW5zZXJpYWxpemUiOlsic2xvdFN0cmluZ1Vuc2VyaWFsaXplIl0sIm1ha2VGYWtlU3RvcmFnZUtpdCI6WyJtYWtlRmFrZVN0b3JhZ2VLaXQiXSwibWFrZU1vY2tDaGFpblN0b3JhZ2VSb290IjpbIm1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdCJdLCJkb2N1bWVudFN0b3JhZ2VTY2hlbWEiOlsiZG9jdW1lbnRTdG9yYWdlU2NoZW1hIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAC1GjYoBgAAKAYAACwAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdGVzdGluZy11dGlscy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZXZlbnRMb29wSXRlcmF0aW9uIiwiaW5zcGVjdE1hcFN0b3JlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8vXG4vKlxuXG5cbiAqL1xuLyogICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVudExvb3BJdGVyYXRpb249YXN5bmMoKT0+XG5uZXcgUHJvbWlzZSgocmVzb2x2ZSk9PnNldEltbWVkaWF0ZShyZXNvbHZlKSk7JGjigI1fb25jZS5ldmVudExvb3BJdGVyYXRpb24oZXZlbnRMb29wSXRlcmF0aW9uKTtcbmhhcmRlbihldmVudExvb3BJdGVyYXRpb24pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdPclRhZz0odmFsdWUpPT57XG5pZih0eXBlb2YgdmFsdWU9PT0nc3RyaW5nJyl7XG5yZXR1cm4gdmFsdWU7XG4gfWVsc2UgaWYodHlwZW9mIHZhbHVlPT09J29iamVjdCcmJlN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZSl7XG5yZXR1cm4gdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiB9XG5yZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiB9O1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpbnNwZWN0TWFwU3RvcmU9KHN0b3JlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9iaj17fTtcbmZvcihjb25zdCBrZXkgb2Ygc3RvcmUua2V5cygpKXtcbmNvbnN0IHZhbHVlPXN0b3JlLmdldChrZXkpO1xuY29uc3QgaGFzS2V5cz10eXBlb2YgdmFsdWU9PT0nb2JqZWN0JyYmJ2tleXMnaW4gdmFsdWU7XG5jb25zdCBpbmRleD1zdHJpbmdPclRhZyhrZXkpO1xuaWYoaGFzS2V5cyYmJ2dldCdpbiB2YWx1ZSl7XG5vYmpbaW5kZXhdPWluc3BlY3RNYXBTdG9yZSh2YWx1ZSk7XG4gfWVsc2UgaWYoaGFzS2V5cyl7XG5vYmpbaW5kZXhdPUFycmF5LmZyb20odmFsdWUua2V5cygpKTtcbiB9ZWxzZXtcbm9ialtpbmRleF09XG52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCYmU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlP1xudmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXTpcbnZhbHVlO1xuIH1cbiB9XG5yZXR1cm4gb2JqO1xuIH07JGjigI1fb25jZS5pbnNwZWN0TWFwU3RvcmUoaW5zcGVjdE1hcFN0b3JlKTtcbmhhcmRlbihpbnNwZWN0TWFwU3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZXZlbnRMb29wSXRlcmF0aW9uIjpbImV2ZW50TG9vcEl0ZXJhdGlvbiJdLCJpbnNwZWN0TWFwU3RvcmUiOlsiaW5zcGVjdE1hcFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPRK7R4GAwAABgMAACgAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdHlwZUNoZWNrLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiY2FzdCIsIm11c3RNYXRjaCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHlwZWxlc3NNdXN0TWF0Y2g7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAodHlwZWxlc3NNdXN0TWF0Y2ggPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG4vKlxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbXVzdE1hdGNoPXR5cGVsZXNzTXVzdE1hdGNoO1xuXG4vKlxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm11c3RNYXRjaChtdXN0TWF0Y2gpO1xuY29uc3QgICAgICAgIGNhc3Q9KHNwZWNpbWVuLHBhdHQpPT57XG4vL1xuLy9cbi8vXG5tdXN0TWF0Y2goc3BlY2ltZW4scGF0dCk7XG5yZXR1cm4gc3BlY2ltZW47XG4gfTskaOKAjV9vbmNlLmNhc3QoY2FzdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtdXN0TWF0Y2giOlsibXVzdE1hdGNoIl0sImNhc3QiOlsiY2FzdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACtWL4JVwMAAFcDAAApAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJTdG9yYWdlTm9kZVNoYXBlIiwiVW5ndWFyZGVkSGVscGVySSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuY29uc3QgICAgICAgIFN0b3JhZ2VOb2RlU2hhcGU9TS5yZW1vdGFibGUoJ1N0b3JhZ2VOb2RlJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRo4oCNX29uY2UuU3RvcmFnZU5vZGVTaGFwZShTdG9yYWdlTm9kZVNoYXBlKTtcbmNvbnN0ICAgICAgICBVbmd1YXJkZWRIZWxwZXJJPU0uaW50ZXJmYWNlKFxuJ2hlbHBlcicsXG57fSxcbi8vXG57c2xvcHB5OnRydWV9KTskaOKAjV9vbmNlLlVuZ3VhcmRlZEhlbHBlckkoVW5ndWFyZGVkSGVscGVySSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJTdG9yYWdlTm9kZVNoYXBlIjpbIlN0b3JhZ2VOb2RlU2hhcGUiXSwiVW5ndWFyZGVkSGVscGVySSI6WyJVbmd1YXJkZWRIZWxwZXJJIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAACoAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdHlwZXMtaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAHPB1sB8HAAAfBwAAKgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy91cGdyYWRlLWFwaS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUiLCJpc0FiYW5kb25lZEVycm9yIiwiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiIsIm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTSxtYXRjaGVzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJtYXRjaGVzXCIsIFskaOKAjV9hID0+IChtYXRjaGVzID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNvbnN0e2lzRnJvemVufT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlPWhhcmRlbih7XG5uYW1lOid2YXRVcGdyYWRlZCcsXG51cGdyYWRlTWVzc2FnZTpNLnN0cmluZygpLFxuaW5jYXJuYXRpb25OdW1iZXI6TS5udW1iZXIoKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUoVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSk7XG5jb25zdCAgICAgICAgbWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uPSh1cGdyYWRlTWVzc2FnZSx0b0luY2FybmF0aW9uTnVtYmVyKT0+XG5oYXJkZW4oe1xubmFtZTondmF0VXBncmFkZWQnLFxudXBncmFkZU1lc3NhZ2UsXG5pbmNhcm5hdGlvbk51bWJlcjp0b0luY2FybmF0aW9uTnVtYmVyfSk7JGjigI1fb25jZS5tYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24obWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uKTtcblxuaGFyZGVuKG1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzVXBncmFkZURpc2Nvbm5lY3Rpb249KHJlYXNvbik9PlxucmVhc29uIT1udWxsJiYvL1xuaXNGcm96ZW4ocmVhc29uKSYmXG5tYXRjaGVzKHJlYXNvbixVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlKTskaOKAjV9vbmNlLmlzVXBncmFkZURpc2Nvbm5lY3Rpb24oaXNVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5oYXJkZW4oaXNVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNBYmFuZG9uZWRFcnJvcj0ocmVhc29uKT0+XG5yZWFzb24hPW51bGwmJi8vXG5pc0Zyb3plbihyZWFzb24pJiZcbm1hdGNoZXMocmVhc29uLE0uZXJyb3IoKSkmJlxuLy9cbi8vXG5yZWFzb24ubWVzc2FnZT09PSd2YXQgdGVybWluYXRlZCc7JGjigI1fb25jZS5pc0FiYW5kb25lZEVycm9yKGlzQWJhbmRvbmVkRXJyb3IpO1xuaGFyZGVuKGlzQWJhbmRvbmVkRXJyb3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSI6WyJVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlIl0sIm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbiI6WyJtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24iXSwiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiI6WyJpc1VwZ3JhZGVEaXNjb25uZWN0aW9uIl0sImlzQWJhbmRvbmVkRXJyb3IiOlsiaXNBYmFuZG9uZWRFcnJvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABttfUwKCMAACgjAAAkAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3V0aWxzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL3N0cmVhbSIsImplc3NpZS5qcyJdLCJleHBvcnRzIjpbIkJBU0lTX1BPSU5UUyIsIlByb21pc2VBbGxPckVycm9ycyIsImFnZ3JlZ2F0ZVRyeUZpbmFsbHkiLCJhbGxWYWx1ZXMiLCJhc3NlcnRBbGxEZWZpbmVkIiwiZGVlcE1hcE9iamVjdCIsImRlZXBseUZ1bGZpbGxlZE9iamVjdCIsImZvcmV2ZXIiLCJtYWtlTWVhc3VyZVNlY29uZHMiLCJzeW5jaHJvbml6ZWRUZWUiLCJ1bnRpbFRydWUiLCJ3aGlsZVRydWUiLCJ3aXRoRGVmZXJyZWRDbGVhbnVwIiwiemlwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwsbWFrZUVycm9yLGFubm90YXRlRXJyb3IsWCxkZWVwbHlGdWxmaWxsZWQsaXNPYmplY3QsbWFrZVByb21pc2VLaXQsbWFrZVF1ZXVlLGFzeW5jR2VuZXJhdGU7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRo4oCNX2EgPT4gKG1ha2VFcnJvciA9ICRo4oCNX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjigI1fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRo4oCNX2EpXV0sW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJkZWVwbHlGdWxmaWxsZWRcIiwgWyRo4oCNX2EgPT4gKGRlZXBseUZ1bGZpbGxlZCA9ICRo4oCNX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRo4oCNX2EgPT4gKGlzT2JqZWN0ID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjigI1fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vc3RyZWFtXCIsIFtbXCJtYWtlUXVldWVcIiwgWyRo4oCNX2EgPT4gKG1ha2VRdWV1ZSA9ICRo4oCNX2EpXV1dXSxbXCJqZXNzaWUuanNcIiwgW1tcImFzeW5jR2VuZXJhdGVcIiwgWyRo4oCNX2EgPT4gKGFzeW5jR2VuZXJhdGUgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5jb25zdHtmcm9tRW50cmllcyxrZXlzLHZhbHVlc309T2JqZWN0O1xuXG5jb25zdCAgICAgICAgQkFTSVNfUE9JTlRTPTEwXzAwMG47XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLkJBU0lTX1BPSU5UUyhCQVNJU19QT0lOVFMpO1xuY29uc3QgICAgICAgIGRlZXBseUZ1bGZpbGxlZE9iamVjdD1hc3luYyhvYmopPT57XG5pc09iamVjdChvYmopfHxGYWlsIGBwYXJhbSBtdXN0IGJlIGFuIG9iamVjdGA7XG5yZXR1cm4gZGVlcGx5RnVsZmlsbGVkKG9iaik7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmRlZXBseUZ1bGZpbGxlZE9iamVjdChkZWVwbHlGdWxmaWxsZWRPYmplY3QpO1xuY29uc3QgZGVlcE1hcE9iamVjdEludGVybmFsPSh2YWx1ZSxuYW1lLGNvbnRhaW5lcixtYXBwZXIpPT57XG5pZihjb250YWluZXImJnR5cGVvZiBuYW1lPT09J3N0cmluZycpe1xuY29uc3QgbWFwcGVkPW1hcHBlcih2YWx1ZSxuYW1lLGNvbnRhaW5lcik7XG5pZihtYXBwZWQhPT12YWx1ZSl7XG5yZXR1cm4gbWFwcGVkO1xuIH1cbiB9XG5cbmlmKHR5cGVvZiB2YWx1ZSE9PSdvYmplY3QnfHwhdmFsdWUpe1xucmV0dXJuIHZhbHVlO1xuIH1cblxubGV0IHdhc01hcHBlZD1mYWxzZTtcbmNvbnN0IG1hcHBlZEVudHJpZXM9T2JqZWN0LmVudHJpZXModmFsdWUpLm1hcCgoW2lubmVyTmFtZSxpbm5lclZhbHVlXSk9PntcbmNvbnN0IG1hcHBlZElubmVyVmFsdWU9ZGVlcE1hcE9iamVjdEludGVybmFsKFxuaW5uZXJWYWx1ZSxcbmlubmVyTmFtZSxcbnZhbHVlLFxubWFwcGVyKTtcblxud2FzTWFwcGVkfHw9bWFwcGVkSW5uZXJWYWx1ZSE9PWlubmVyVmFsdWU7XG5yZXR1cm5baW5uZXJOYW1lLG1hcHBlZElubmVyVmFsdWVdO1xuIH0pO1xuXG5yZXR1cm4gd2FzTWFwcGVkP09iamVjdC5mcm9tRW50cmllcyhtYXBwZWRFbnRyaWVzKTp2YWx1ZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWVwTWFwT2JqZWN0PShvYmosbWFwcGVyKT0+XG5kZWVwTWFwT2JqZWN0SW50ZXJuYWwob2JqLHVuZGVmaW5lZCx1bmRlZmluZWQsbWFwcGVyKTtcblxuLypcblxuXG5cbiAqLyRo4oCNX29uY2UuZGVlcE1hcE9iamVjdChkZWVwTWFwT2JqZWN0KTtcbmNvbnN0IG1ha2VBZ2dyZWdhdGVFcnJvcj1cbnR5cGVvZiBBZ2dyZWdhdGVFcnJvcj09PSdmdW5jdGlvbic/XG4oZXJyb3JzLG1lc3NhZ2Usb3B0aW9ucyk9PkFnZ3JlZ2F0ZUVycm9yKGVycm9ycyxtZXNzYWdlLG9wdGlvbnMpOlxuKGVycm9ycyxtZXNzYWdlLG9wdGlvbnMpPT57XG5yZXR1cm4gbWFrZUVycm9yKG1lc3NhZ2U/PydtdWx0aXBsZSBlcnJvcnMnLHVuZGVmaW5lZCx7XG4uLi5vcHRpb25zLFxuZXJyb3JzfSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgUHJvbWlzZUFsbE9yRXJyb3JzPWFzeW5jKGl0ZW1zKT0+e1xucmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChpdGVtcykudGhlbigocmVzdWx0cyk9PntcbmNvbnN0IGVycm9ycz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucmVzdWx0cy5maWx0ZXIoKHtzdGF0dXN9KT0+c3RhdHVzPT09J3JlamVjdGVkJykuXG5tYXAoKHJlc3VsdCk9PnJlc3VsdC5yZWFzb24pO1xuaWYoIWVycm9ycy5sZW5ndGgpe1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9yZXN1bHRzLm1hcChcbihyZXN1bHQpPT5yZXN1bHQudmFsdWUpKTtcblxuIH1lbHNlIGlmKGVycm9ycy5sZW5ndGg9PT0xKXtcbnRocm93IGVycm9yc1swXTtcbiB9ZWxzZXtcbnRocm93IG1ha2VBZ2dyZWdhdGVFcnJvcihlcnJvcnMpO1xuIH1cbiB9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLlByb21pc2VBbGxPckVycm9ycyhQcm9taXNlQWxsT3JFcnJvcnMpO1xuY29uc3QgICAgICAgIGFnZ3JlZ2F0ZVRyeUZpbmFsbHk9YXN5bmModHJpZXIsZmluYWxpemVyKT0+XG50cmllcigpLnRoZW4oXG5hc3luYyhyZXN1bHQpPT5maW5hbGl6ZXIoKS50aGVuKCgpPT5yZXN1bHQpLFxuYXN5bmModHJ5RXJyb3IpPT5cbmZpbmFsaXplcih0cnlFcnJvcikuXG50aGVuKFxuKCk9PnRyeUVycm9yLFxuKGZpbmFsaXplRXJyb3IpPT5tYWtlQWdncmVnYXRlRXJyb3IoW3RyeUVycm9yLGZpbmFsaXplRXJyb3JdKSkuXG5cbnRoZW4oKGVycm9yKT0+UHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5hZ2dyZWdhdGVUcnlGaW5hbGx5KGFnZ3JlZ2F0ZVRyeUZpbmFsbHkpO1xuY29uc3QgICAgICAgIHdpdGhEZWZlcnJlZENsZWFudXA9YXN5bmMoZm4pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNsZWFudXBzTElGTz1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWRkQ2xlYW51cD0oY2xlYW51cCk9PntcbmNsZWFudXBzTElGTy51bnNoaWZ0KGNsZWFudXApO1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZmluYWxpemVyPWFzeW5jKGVycik9Pntcbi8vXG5jb25zdCBjbGVhbnVwUmVzdWx0cz1jbGVhbnVwc0xJRk8ubWFwKGFzeW5jKGNsZWFudXApPT57XG5hd2FpdCBudWxsO1xucmV0dXJuIGNsZWFudXAoZXJyKTtcbiB9KTtcbmF3YWl0IFByb21pc2VBbGxPckVycm9ycyhjbGVhbnVwUmVzdWx0cyk7XG4gfTtcbnJldHVybiBhZ2dyZWdhdGVUcnlGaW5hbGx5KCgpPT5mbihhZGRDbGVhbnVwKSxmaW5hbGl6ZXIpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS53aXRoRGVmZXJyZWRDbGVhbnVwKHdpdGhEZWZlcnJlZENsZWFudXApO1xuY29uc3QgICAgICAgIG1ha2VNZWFzdXJlU2Vjb25kcz0oY3VycmVudFRpbWVNaWxsaXNlYyk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1lYXN1cmVTZWNvbmRzPWFzeW5jKGZuKT0+e1xuY29uc3QgdDA9Y3VycmVudFRpbWVNaWxsaXNlYygpO1xuY29uc3QgcmVzdWx0PWF3YWl0IGZuKCk7XG5jb25zdCBkdXJhdGlvbk1pbGxpc2VjPWN1cnJlbnRUaW1lTWlsbGlzZWMoKS10MDtcbnJldHVybntyZXN1bHQsZHVyYXRpb246ZHVyYXRpb25NaWxsaXNlYy8xMDAwfTtcbiB9O1xucmV0dXJuIG1lYXN1cmVTZWNvbmRzO1xuIH07XG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZU1lYXN1cmVTZWNvbmRzKG1ha2VNZWFzdXJlU2Vjb25kcyk7XG5jb25zdCAgICAgICAgYXNzZXJ0QWxsRGVmaW5lZD0ob2JqKT0+e1xuY29uc3QgbWlzc2luZz1bXTtcbmZvcihjb25zdFtrZXksdmFsXW9mIE9iamVjdC5lbnRyaWVzKG9iaikpe1xuaWYodmFsPT09dW5kZWZpbmVkKXtcbm1pc3NpbmcucHVzaChrZXkpO1xuIH1cbiB9XG5pZihtaXNzaW5nLmxlbmd0aD4wKXtcbkZhaWwgYG1pc3NpbmcgJHtxKG1pc3NpbmcpfWA7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjigI1fb25jZS5hc3NlcnRBbGxEZWZpbmVkKGFzc2VydEFsbERlZmluZWQpO1xuY29uc3Qgbm90RG9uZT1oYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6dW5kZWZpbmVkfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWx3YXlzRG9uZT1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcblxuY29uc3QgICAgICAgIGZvcmV2ZXI9YXN5bmNHZW5lcmF0ZSgoKT0+bm90RG9uZSk7XG5cbi8qXG5cblxuXG5cblxuICovJGjigI1fb25jZS5mb3JldmVyKGZvcmV2ZXIpO1xuY29uc3QgICAgICAgIHdoaWxlVHJ1ZT0ocHJvZHVjZSk9PlxuYXN5bmNHZW5lcmF0ZShhc3luYygpPT57XG5jb25zdCB2YWx1ZT1hd2FpdCBwcm9kdWNlKCk7XG5pZighdmFsdWUpe1xucmV0dXJuIGFsd2F5c0RvbmU7XG4gfVxucmV0dXJuIGhhcmRlbih7XG5kb25lOmZhbHNlLFxudmFsdWV9KTtcblxuIH0pO1xuXG4vKlxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2Uud2hpbGVUcnVlKHdoaWxlVHJ1ZSk7XG5jb25zdCAgICAgICAgdW50aWxUcnVlPShwcm9kdWNlKT0+XG5hc3luY0dlbmVyYXRlKGFzeW5jKCk9PntcbmNvbnN0IHZhbHVlPWF3YWl0IHByb2R1Y2UoKTtcbmlmKHZhbHVlKXtcbnJldHVybiBoYXJkZW4oe1xuZG9uZTp0cnVlLFxudmFsdWV9KTtcblxuIH1cbnJldHVybiBoYXJkZW4oe1xuZG9uZTpmYWxzZSxcbnZhbHVlfSk7XG5cbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjigI1fb25jZS51bnRpbFRydWUodW50aWxUcnVlKTtcbmNvbnN0ICAgICAgICB6aXA9KHhzLHlzKT0+aGFyZGVuKHhzLm1hcCgoeCxpKT0+W3gseXNbK2ldXSkpO1xuXG4vKlxuXG5cblxuICovJGjigI1fb25jZS56aXAoemlwKTtcbmNvbnN0ICAgICAgICBhbGxWYWx1ZXM9YXN5bmMob2JqKT0+e1xuY29uc3QgcmVzb2x2ZWQ9YXdhaXQgUHJvbWlzZS5hbGwodmFsdWVzKG9iaikpO1xuLy9cbnJldHVybiBoYXJkZW4oZnJvbUVudHJpZXMoemlwKGtleXMob2JqKSxyZXNvbHZlZCkpKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmFsbFZhbHVlcyhhbGxWYWx1ZXMpO1xuY29uc3QgICAgICAgIHN5bmNocm9uaXplZFRlZT0oc291cmNlU3RyZWFtLHJlYWRlckNvdW50KT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBkb25lUmVzdWx0O1xuXG4vKlxuXG5cblxuICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHF1ZXVlcz1bXTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVsbE5leHQ9YXN5bmMoKT0+e1xuY29uc3QgcmVxdWVzdHM9YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHF1ZXVlcy5tYXAoKHF1ZXVlKT0+cXVldWUuZ2V0KCkpKTtcbmNvbnN0IHJlamVjdGlvbnM9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc29sdmVycz1bXTtcbmxldCBkb25lPWZhbHNlO1xuZm9yKGNvbnN0IHNldHRsZWRSZXN1bHQgb2YgcmVxdWVzdHMpe1xuaWYoc2V0dGxlZFJlc3VsdC5zdGF0dXM9PT0ncmVqZWN0ZWQnKXtcbnJlamVjdGlvbnMucHVzaChzZXR0bGVkUmVzdWx0LnJlYXNvbik7XG4gfWVsc2V7XG5kb25lfHw9ISFzZXR0bGVkUmVzdWx0LnZhbHVlLmRvbmU7XG5yZXNvbHZlcnMucHVzaChzZXR0bGVkUmVzdWx0LnZhbHVlLnZhbHVlKTtcbiB9XG4gfVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZXN1bHQ7XG5pZihkb25lUmVzdWx0KXtcbnJlc3VsdD1Qcm9taXNlLnJlc29sdmUoZG9uZVJlc3VsdCk7XG4gfWVsc2UgaWYocmVqZWN0aW9ucy5sZW5ndGgpe1xuY29uc3QgZXJyb3I9bWFrZUVycm9yKFggYFRlZWQgc3RyZWFtIHRocmV3YCk7XG5hbm5vdGF0ZUVycm9yKGVycm9yLFggYFRlZWQgcmVqZWN0aW9uczogJHtyZWplY3Rpb25zfWApO1xucmVzdWx0PVxuc291cmNlU3RyZWFtLnRocm93Py4oZXJyb3IpfHxcblByb21pc2UucmVzb2x2ZShzb3VyY2VTdHJlYW0ucmV0dXJuPy4oKSkudGhlbigoKT0+XG5Qcm9taXNlLnJlamVjdChlcnJvcikpO1xuXG4gfWVsc2UgaWYoZG9uZSl7XG5yZXN1bHQ9XG5zb3VyY2VTdHJlYW0ucmV0dXJuPy4oKXx8XG5Qcm9taXNlLnJlc29sdmUoe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9ZWxzZXtcbnJlc3VsdD1zb3VyY2VTdHJlYW0ubmV4dCgpO1xuIH1cbnJlc3VsdC50aGVuKFxuKHIpPT57XG5pZihyLmRvbmUpe1xuZG9uZVJlc3VsdD1yO1xuIH1cbiB9LFxuKCk9PntcbmRvbmVSZXN1bHQ9e2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9O1xuIH0pO1xuXG5mb3IoY29uc3QgcmVzb2x2ZSBvZiByZXNvbHZlcnMpe1xucmVzb2x2ZShyZXN1bHQpO1xuIH1cbnJldHVybiBwdWxsTmV4dCgpO1xuIH07XG5cbmNvbnN0IHJlYWRlcnM9QXJyYXkuZnJvbSh7bGVuZ3RoOnJlYWRlckNvdW50fSkubWFwKCgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcXVldWU9bWFrZVF1ZXVlKCk7XG5xdWV1ZXMucHVzaChxdWV1ZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWFkZXI9aGFyZGVuKHtcbiAgICAgIGFzeW5jIG5leHQoKXtcbi8qXG5cblxuXG4gICAgICAgICAqL1xuY29uc3R7cHJvbWlzZSxyZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucXVldWUucHV0KHt2YWx1ZTpyZXNvbHZlLGRvbmU6ZmFsc2V9KTtcbnJldHVybiBwcm9taXNlO1xuIH0sXG4gICAgICBhc3luYyByZXR1cm4oKXtcbi8qXG5cblxuXG4gICAgICAgICAqL1xuY29uc3R7cHJvbWlzZSxyZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucXVldWUucHV0KHt2YWx1ZTpyZXNvbHZlLGRvbmU6dHJ1ZX0pO1xucmV0dXJuIHByb21pc2U7XG4gfSxcbiAgICAgIGFzeW5jIHRocm93KHJlYXNvbil7XG5jb25zdCByZWplY3Rpb249UHJvbWlzZS5yZWplY3QocmVhc29uKTtcbnF1ZXVlLnB1dChyZWplY3Rpb24pO1xucmV0dXJuIHJlamVjdGlvbjtcbiB9LFxuLy9cbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtcbnJldHVybiByZWFkZXI7XG4gfSxcbi8vXG4gICAgICBhc3luY1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpe1xuYXdhaXQgcmVhZGVyLnJldHVybigpO1xuIH19KTtcblxucmV0dXJuIHJlYWRlcjtcbiB9KTtcblxudm9pZCBwdWxsTmV4dCgpO1xucmV0dXJuIHJlYWRlcnM7XG4gfTskaOKAjV9vbmNlLnN5bmNocm9uaXplZFRlZShzeW5jaHJvbml6ZWRUZWUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQkFTSVNfUE9JTlRTIjpbIkJBU0lTX1BPSU5UUyJdLCJkZWVwbHlGdWxmaWxsZWRPYmplY3QiOlsiZGVlcGx5RnVsZmlsbGVkT2JqZWN0Il0sImRlZXBNYXBPYmplY3QiOlsiZGVlcE1hcE9iamVjdCJdLCJQcm9taXNlQWxsT3JFcnJvcnMiOlsiUHJvbWlzZUFsbE9yRXJyb3JzIl0sImFnZ3JlZ2F0ZVRyeUZpbmFsbHkiOlsiYWdncmVnYXRlVHJ5RmluYWxseSJdLCJ3aXRoRGVmZXJyZWRDbGVhbnVwIjpbIndpdGhEZWZlcnJlZENsZWFudXAiXSwibWFrZU1lYXN1cmVTZWNvbmRzIjpbIm1ha2VNZWFzdXJlU2Vjb25kcyJdLCJhc3NlcnRBbGxEZWZpbmVkIjpbImFzc2VydEFsbERlZmluZWQiXSwiZm9yZXZlciI6WyJmb3JldmVyIl0sIndoaWxlVHJ1ZSI6WyJ3aGlsZVRydWUiXSwidW50aWxUcnVlIjpbInVudGlsVHJ1ZSJdLCJ6aXAiOlsiemlwIl0sImFsbFZhbHVlcyI6WyJhbGxWYWx1ZXMiXSwic3luY2hyb25pemVkVGVlIjpbInN5bmNocm9uaXplZFRlZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAglWrIFAgAABQIAAAzAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIi4vc3Vic2NyaWJlLmpzIl0sImV4cG9ydHMiOlsibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiLCJvYnNlcnZlSXRlcmF0aW9uIiwib2JzZXJ2ZUl0ZXJhdG9yIiwib2JzZXJ2ZU5vdGlmaWVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLHN1YnNjcmliZUxhdGVzdDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV0sW1wiLi9zdWJzY3JpYmUuanNcIiwgW1tcInN1YnNjcmliZUxhdGVzdFwiLCBbJGjigI1fYSA9PiAoc3Vic2NyaWJlTGF0ZXN0ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXI9c3Vic2NyaWJlTGF0ZXN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllcihtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllcik7XG5jb25zdCAgICAgICAgb2JzZXJ2ZUl0ZXJhdG9yPShhc3luY0l0ZXJhdG9yUCxpdGVyYXRpb25PYnNlcnZlcik9PntcbnJldHVybiBuZXcgUHJvbWlzZSgoYWNrLG9ic2VydmVyRXJyb3IpPT57XG5jb25zdCByZWN1cj0oKT0+e1xuRS53aGVuKFxuRShhc3luY0l0ZXJhdG9yUCkubmV4dCgpLFxuKHt2YWx1ZSxkb25lfSk9PntcbmlmKGRvbmUpe1xuaXRlcmF0aW9uT2JzZXJ2ZXIuZmluaXNoJiZpdGVyYXRpb25PYnNlcnZlci5maW5pc2godmFsdWUpO1xuYWNrKHVuZGVmaW5lZCk7XG4gfWVsc2V7XG5pdGVyYXRpb25PYnNlcnZlci51cGRhdGVTdGF0ZSYmXG5pdGVyYXRpb25PYnNlcnZlci51cGRhdGVTdGF0ZSh2YWx1ZSk7XG5yZWN1cigpO1xuIH1cbiB9LFxuKHJlYXNvbik9Pntcbml0ZXJhdGlvbk9ic2VydmVyLmZhaWwmJml0ZXJhdGlvbk9ic2VydmVyLmZhaWwocmVhc29uKTtcbmFjayh1bmRlZmluZWQpO1xuIH0pLlxuY2F0Y2gob2JzZXJ2ZXJFcnJvcik7XG4gfTtcbnJlY3VyKCk7XG4gfSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2Uub2JzZXJ2ZUl0ZXJhdG9yKG9ic2VydmVJdGVyYXRvcik7XG5jb25zdCAgICAgICAgb2JzZXJ2ZUl0ZXJhdGlvbj0oYXN5bmNJdGVyYWJsZVAsaXRlcmF0aW9uT2JzZXJ2ZXIpPT57XG5jb25zdCBpdGVyYXRvclA9RShhc3luY0l0ZXJhYmxlUClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5yZXR1cm4gb2JzZXJ2ZUl0ZXJhdG9yKGl0ZXJhdG9yUCxpdGVyYXRpb25PYnNlcnZlcik7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2Uub2JzZXJ2ZUl0ZXJhdGlvbihvYnNlcnZlSXRlcmF0aW9uKTtcbmNvbnN0ICAgICAgICBvYnNlcnZlTm90aWZpZXI9KG5vdGlmaWVyUCxpdGVyYXRpb25PYnNlcnZlcik9Plxub2JzZXJ2ZUl0ZXJhdGlvbihzdWJzY3JpYmVMYXRlc3Qobm90aWZpZXJQKSxpdGVyYXRpb25PYnNlcnZlcik7JGjigI1fb25jZS5vYnNlcnZlTm90aWZpZXIob2JzZXJ2ZU5vdGlmaWVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIjpbIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIl0sIm9ic2VydmVJdGVyYXRvciI6WyJvYnNlcnZlSXRlcmF0b3IiXSwib2JzZXJ2ZUl0ZXJhdGlvbiI6WyJvYnNlcnZlSXRlcmF0aW9uIl0sIm9ic2VydmVOb3RpZmllciI6WyJvYnNlcnZlTm90aWZpZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA6fUBUeIHAADiBwAAJAAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3B1Ymxpc2gta2l0LmpzIiwiLi9zdWJzY3JpYmUuanMiLCIuL25vdGlmaWVyLmpzIiwiLi9zdWJzY3JpYmVyLmpzIiwiLi90b3BpYy5qcyIsIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiLCIuL3N0b3Jlc3ViLmpzIiwiLi9zdG9yZWQtbm90aWZpZXIuanMiLCIuL3R5cGVzLWluZGV4LmpzIl0sImV4cG9ydHMiOlsibWFrZU5vdGlmaWVyS2l0IiwibWFrZU5vdGlmaWVyS2l0IiwibWFrZVN1YnNjcmlwdGlvbktpdCIsIm1ha2VTdWJzY3JpcHRpb25LaXQiLCJvYnNlcnZlSXRlcmF0b3IiLCJvYnNlcnZlSXRlcmF0b3IiLCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiLCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiLCJzdWJzY3JpYmVMYXRlc3QiLCJzdWJzY3JpYmVMYXRlc3QiLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zdG9yZWQtbm90aWZpZXIuanMiLCIuL3N0b3Jlc3ViLmpzIiwiLi90eXBlcy1pbmRleC5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtbXCIuL3B1Ymxpc2gta2l0LmpzXCIsIFtdXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbXV0sW1wiLi9ub3RpZmllci5qc1wiLCBbXV0sW1wiLi9zdWJzY3JpYmVyLmpzXCIsIFtdXSxbXCIuL3RvcGljLmpzXCIsIFtdXSxbXCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzXCIsIFtdXSxbXCIuL3N0b3Jlc3ViLmpzXCIsIFtdXSxbXCIuL3N0b3JlZC1ub3RpZmllci5qc1wiLCBbXV0sW1wiLi90eXBlcy1pbmRleC5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vcHVibGlzaC1raXQuanMiOltbIm1ha2VQdWJsaXNoS2l0IiwibWFrZVB1Ymxpc2hLaXQiXSxbInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCJdLFsiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSIsIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiXSxbIkl0ZXJhYmxlRWFjaFRvcGljSSIsIkl0ZXJhYmxlRWFjaFRvcGljSSJdLFsiSXRlcmFibGVMYXRlc3RUb3BpY0kiLCJJdGVyYWJsZUxhdGVzdFRvcGljSSJdLFsiU3Vic2NyaWJlclNoYXBlIiwiU3Vic2NyaWJlclNoYXBlIl1dLCIuL3N1YnNjcmliZS5qcyI6W1sic3Vic2NyaWJlRWFjaCIsInN1YnNjcmliZUVhY2giXSxbInN1YnNjcmliZUxhdGVzdCIsInN1YnNjcmliZUxhdGVzdCJdXSwiLi9ub3RpZmllci5qcyI6W1sibWFrZU5vdGlmaWVyIiwibWFrZU5vdGlmaWVyIl0sWyJtYWtlTm90aWZpZXJLaXQiLCJtYWtlTm90aWZpZXJLaXQiXSxbIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIiwibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiXSxbIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIiwibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiXV0sIi4vc3Vic2NyaWJlci5qcyI6W1sibWFrZVN1YnNjcmlwdGlvbiIsIm1ha2VTdWJzY3JpcHRpb24iXSxbIm1ha2VTdWJzY3JpcHRpb25LaXQiLCJtYWtlU3Vic2NyaXB0aW9uS2l0Il1dLCIuL3RvcGljLmpzIjpbWyJtYWtlUGlubmVkSGlzdG9yeVRvcGljIiwibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyJdXSwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyI6W1sib2JzZXJ2ZU5vdGlmaWVyIiwib2JzZXJ2ZU5vdGlmaWVyIl0sWyJvYnNlcnZlSXRlcmF0b3IiLCJvYnNlcnZlSXRlcmF0b3IiXSxbIm9ic2VydmVJdGVyYXRpb24iLCJvYnNlcnZlSXRlcmF0aW9uIl0sWyJtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllciIsIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADxQQ7ghBAAAIQQAAAnAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL25vdGlmaWVyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIi4vcHVibGlzaC1raXQuanMiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbIm1ha2VOb3RpZmllciIsIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIiwibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiLCJtYWtlTm90aWZpZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxFLEZhcixtYWtlUHVibGlzaEtpdCxzdWJzY3JpYmVMYXRlc3Q7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhc3NlcnRcIiwgWyRo4oCNX2EgPT4gKGFzc2VydCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dLFtcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIi4vcHVibGlzaC1raXQuanNcIiwgW1tcIm1ha2VQdWJsaXNoS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUHVibGlzaEtpdCA9ICRo4oCNX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlTGF0ZXN0XCIsIFskaOKAjV9hID0+IChzdWJzY3JpYmVMYXRlc3QgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllcj0oc2hhcmFibGVJbnRlcm5hbHNQKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5vdGlmaWVyPUZhcignbm90aWZpZXInLHtcbi4uLnN1YnNjcmliZUxhdGVzdChzaGFyYWJsZUludGVybmFsc1ApLFxuZ2V0VXBkYXRlU2luY2U6YXN5bmModXBkYXRlQ291bnQpPT5cbkUoc2hhcmFibGVJbnRlcm5hbHNQKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCksXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbmdldFNoYXJhYmxlTm90aWZpZXJJbnRlcm5hbHM6YXN5bmMoKT0+c2hhcmFibGVJbnRlcm5hbHNQLFxuLypcblxuXG5cbiAgICAgKi9cbmdldFN0b3JlS2V5OigpPT5oYXJkZW4oe25vdGlmaWVyfSl9KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VOb3RpZmllcihtYWtlTm90aWZpZXIpO1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyPShzdWJzY3JpYmVyKT0+e1xuLypcblxuICAgKi9cbmNvbnN0IGJhc2VOb3RpZmllcj1oYXJkZW4oe1xuZ2V0VXBkYXRlU2luY2U6KHVwZGF0ZUNvdW50PXVuZGVmaW5lZCk9PlxuRShzdWJzY3JpYmVyKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgbm90aWZpZXI9RmFyKCdub3RpZmllcicse1xuLi4ubWFrZU5vdGlmaWVyKGJhc2VOb3RpZmllciksXG4uLi5iYXNlTm90aWZpZXJ9KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH07JGjigI1fb25jZS5tYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcihtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcik7XG5oYXJkZW4obWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU5vdGlmaWVyS2l0PSguLi5pbml0aWFsU3RhdGVBcnIpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxuY29uc3Qgbm90aWZpZXI9bWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIoc3Vic2NyaWJlcik7XG5cbmNvbnN0IHVwZGF0ZXI9RmFyKCd1cGRhdGVyJyx7XG51cGRhdGVTdGF0ZTooc3RhdGUpPT5wdWJsaXNoZXIucHVibGlzaChzdGF0ZSksXG5maW5pc2g6KGNvbXBsZXRpb24pPT5wdWJsaXNoZXIuZmluaXNoKGNvbXBsZXRpb24pLFxuZmFpbDoocmVhc29uKT0+cHVibGlzaGVyLmZhaWwocmVhc29uKX0pO1xuXG5cbmFzc2VydChpbml0aWFsU3RhdGVBcnIubGVuZ3RoPD0xLCd0b28gbWFueSBhcmd1bWVudHMnKTtcbmlmKGluaXRpYWxTdGF0ZUFyci5sZW5ndGg9PT0xKXtcbnVwZGF0ZXIudXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlQXJyWzBdKTtcbiB9XG5cbi8vXG4vL1xucmV0dXJuIGhhcmRlbih7bm90aWZpZXIsdXBkYXRlcn0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZU5vdGlmaWVyS2l0KG1ha2VOb3RpZmllcktpdCk7XG5jb25zdCAgICAgICAgbWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGU9KGFzeW5jSXRlcmFibGVQKT0+e1xuY29uc3QgaXRlcmF0b3JQPUUoYXN5bmNJdGVyYWJsZVApW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgb3B0TmV4dFByb21pc2U7XG5sZXQgY3VycmVudFVwZGF0ZUNvdW50PTBuO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGN1cnJlbnRSZXNwb25zZTtcbmxldCBmaW5hbD1mYWxzZTtcblxuLypcblxuICAgKi9cbmNvbnN0IGJhc2VOb3RpZmllcj1GYXIoJ2Jhc2VOb3RpZmllcicse1xuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQ9LTFuKXtcbmlmKHVwZGF0ZUNvdW50PGN1cnJlbnRVcGRhdGVDb3VudCl7XG5pZihjdXJyZW50UmVzcG9uc2Upe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShjdXJyZW50UmVzcG9uc2UpO1xuIH1cbiB9ZWxzZSBpZih1cGRhdGVDb3VudCE9PWN1cnJlbnRVcGRhdGVDb3VudCl7XG50aHJvdyBFcnJvcihcbidnZXRVcGRhdGVTaW5jZSBhcmd1bWVudCBtdXN0IGJlIGEgcHJldmlvdXNseS1pc3N1ZWQgdXBkYXRlQ291bnQuJyk7XG5cbiB9XG5cbi8vXG5pZihmaW5hbCl7XG5hc3NlcnQoY3VycmVudFJlc3BvbnNlIT09dW5kZWZpbmVkKTtcbnJldHVybiBQcm9taXNlLnJlc29sdmUoY3VycmVudFJlc3BvbnNlKTtcbiB9XG5pZighb3B0TmV4dFByb21pc2Upe1xuY29uc3QgbmV4dEl0ZXJSZXN1bHRQPUUoaXRlcmF0b3JQKS5uZXh0KCk7XG5vcHROZXh0UHJvbWlzZT1FLndoZW4oXG5uZXh0SXRlclJlc3VsdFAsXG4oe2RvbmUsdmFsdWV9KT0+e1xuYXNzZXJ0KCFmaW5hbCk7XG5pZihkb25lKXtcbmZpbmFsPXRydWU7XG4gfVxuY3VycmVudFVwZGF0ZUNvdW50Kz0xbjtcbmN1cnJlbnRSZXNwb25zZT1oYXJkZW4oe1xudmFsdWUsXG51cGRhdGVDb3VudDpkb25lP3VuZGVmaW5lZDpjdXJyZW50VXBkYXRlQ291bnR9KTtcblxub3B0TmV4dFByb21pc2U9dW5kZWZpbmVkO1xucmV0dXJuIGN1cnJlbnRSZXNwb25zZTtcbiB9LFxuKF9yZWFzb24pPT57XG5maW5hbD10cnVlO1xuY3VycmVudFJlc3BvbnNlPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5uZXh0SXRlclJlc3VsdFA7XG5vcHROZXh0UHJvbWlzZT11bmRlZmluZWQ7XG5yZXR1cm4gY3VycmVudFJlc3BvbnNlO1xuIH0pO1xuXG4gfVxucmV0dXJuIG9wdE5leHRQcm9taXNlO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgbm90aWZpZXI9RmFyKCdub3RpZmllcicse1xuLy9cbi8vXG4uLi5tYWtlTm90aWZpZXIoYmFzZU5vdGlmaWVyKSxcbi4uLmJhc2VOb3RpZmllcn0pO1xuXG5yZXR1cm4gbm90aWZpZXI7XG4gfTskaOKAjV9vbmNlLm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlKG1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlKTtcbmhhcmRlbihtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTm90aWZpZXIiOlsibWFrZU5vdGlmaWVyIl0sIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIjpbIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIl0sIm1ha2VOb3RpZmllcktpdCI6WyJtYWtlTm90aWZpZXJLaXQiXSwibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiOlsibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAlQRrDE4rAABOKwAAKgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9wdWJsaXNoLWtpdC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL3BhdHRlcm5zIiwiQGFnb3JpYy92YXQtZGF0YSJdLCJleHBvcnRzIjpbIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiLCJJdGVyYWJsZUVhY2hUb3BpY0kiLCJJdGVyYWJsZUxhdGVzdFRvcGljSSIsIlB1Ymxpc2hlckkiLCJTdWJzY3JpYmVySSIsIlN1YnNjcmliZXJTaGFwZSIsIlVwZGF0ZUNvdW50U2hhcGUiLCJtYWtlUHVibGlzaEtpdCIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInB1Ymxpc2hLaXRJS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsRSxGYXIsbWFrZVByb21pc2VLaXQsTSxnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQsY2FuQmVEdXJhYmxlLHByZXBhcmVFeG9DbGFzc0tpdDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXSxbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VQcm9taXNlS2l0ID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWRcIiwgWyRo4oCNX2EgPT4gKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJjYW5CZUR1cmFibGVcIiwgWyRo4oCNX2EgPT4gKGNhbkJlRHVyYWJsZSA9ICRo4oCNX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaOKAjV9hID0+IChwcmVwYXJlRXhvQ2xhc3NLaXQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3Qgc2luaz0oKT0+eyB9O1xuY29uc3QgbWFrZVF1aWV0UmVqZWN0aW9uPShyZWFzb24pPT57XG5jb25zdCByZWplY3Rpb249aGFyZGVuKFByb21pc2UucmVqZWN0KHJlYXNvbikpO1xudm9pZCBFLndoZW4ocmVqZWN0aW9uLHNpbmssc2luayk7XG5yZXR1cm4gcmVqZWN0aW9uO1xuIH07XG5jb25zdCB0b29GYXJSZWplY3Rpb249bWFrZVF1aWV0UmVqZWN0aW9uKFxuaGFyZGVuKEVycm9yKCdDYW5ub3QgcmVhZCBwYXN0IGVuZCBvZiBpdGVyYXRpb24uJykpKTtcblxuXG5jb25zdCAgICAgICAgUHVibGlzaGVyST1NLmludGVyZmFjZSgnUHVibGlzaGVyJyx7XG5wdWJsaXNoOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCksXG5maW5pc2g6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoKSxcbmZhaWw6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoKX0pO1xuXG5cbi8vXG4kaOKAjV9vbmNlLlB1Ymxpc2hlckkoUHVibGlzaGVySSk7Y29uc3QgVXBkYXRlQ291bnRTaGFwZT1NLm9yKE0uYmlnaW50KCksTS5udW1iZXIoKSk7JGjigI1fb25jZS5VcGRhdGVDb3VudFNoYXBlKFVwZGF0ZUNvdW50U2hhcGUpO1xuY29uc3QgICAgICAgIFN1YnNjcmliZXJJPU0uaW50ZXJmYWNlKCdTdWJzY3JpYmVyJyx7XG5zdWJzY3JpYmVBZnRlcjpNLmNhbGwoKS5vcHRpb25hbChNLmJpZ2ludCgpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldFVwZGF0ZVNpbmNlOk0uY2FsbCgpLm9wdGlvbmFsKFVwZGF0ZUNvdW50U2hhcGUpLnJldHVybnMoTS5wcm9taXNlKCkpfSk7JGjigI1fb25jZS5TdWJzY3JpYmVySShTdWJzY3JpYmVySSk7XG5cbmNvbnN0ICAgICAgICBwdWJsaXNoS2l0SUtpdD1oYXJkZW4oe1xucHVibGlzaGVyOlB1Ymxpc2hlckksXG5zdWJzY3JpYmVyOlN1YnNjcmliZXJJfSk7JGjigI1fb25jZS5wdWJsaXNoS2l0SUtpdChwdWJsaXNoS2l0SUtpdCk7XG5cblxuY29uc3QgICAgICAgIEZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGU9TS5pbnRlcmZhY2UoXG4nRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3InLFxue1xuZm9yazpNLmNhbGwoKS5yZXR1cm5zKE0uYW55KCkpLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTpNLmNhbGwoKS5yZXR1cm5zKE0uYW55KCkpLC8vXG5uZXh0Ok0uY2FsbFdoZW4oKS5yZXR1cm5zKE0uYW55KCkpfSk7JGjigI1fb25jZS5Gb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlKEZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUpO1xuXG5cblxuY29uc3QgICAgICAgIEl0ZXJhYmxlRWFjaFRvcGljST1NLmludGVyZmFjZSgnSXRlcmFibGVFYWNoVG9waWMnLHtcbnN1YnNjcmliZUFmdGVyOlxuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKFN1YnNjcmliZXJJKS5tZXRob2RHdWFyZHMuc3Vic2NyaWJlQWZ0ZXIsXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOk0uY2FsbCgpLnJldHVybnMoXG5NLnJlbW90YWJsZSgnRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3InKSl9KTskaOKAjV9vbmNlLkl0ZXJhYmxlRWFjaFRvcGljSShJdGVyYWJsZUVhY2hUb3BpY0kpO1xuXG5cblxuY29uc3QgICAgICAgIEl0ZXJhYmxlTGF0ZXN0VG9waWNJPU0uaW50ZXJmYWNlKCdJdGVyYWJsZUxhdGVzdFRvcGljJyx7XG5nZXRVcGRhdGVTaW5jZTpcbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChTdWJzY3JpYmVySSkubWV0aG9kR3VhcmRzLmdldFVwZGF0ZVNpbmNlLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTpNLmNhbGwoKS5yZXR1cm5zKFxuTS5yZW1vdGFibGUoJ0ZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJykpfSk7XG5cblxuXG4vKlxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLkl0ZXJhYmxlTGF0ZXN0VG9waWNJKEl0ZXJhYmxlTGF0ZXN0VG9waWNJKTtcbmNvbnN0IHdlYWtNZW1vaXplVW5hcnk9KGZuKT0+e1xuY29uc3QgY2FjaGU9bmV3IFdlYWtNYXAoKTtcbnJldHVybihhcmcpPT57XG4vKiAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9hcmc9YXJnO1xuaWYoY2FjaGUuaGFzKG9hcmcpKXtcbnJldHVybiBjYWNoZS5nZXQob2FyZyk7XG4gfVxuY29uc3QgcmVzdWx0PWZuKGFyZyk7XG5jYWNoZS5zZXQob2FyZyxyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VVcGRhdGVSZWNvcmRGcm9tUHVibGljYXRpb25SZWNvcmQ9KHJlY29yZCk9PntcbmNvbnN0e1xuaGVhZDp7dmFsdWUsZG9uZX0sXG5wdWJsaXNoQ291bnR9PVxucmVjb3JkO1xuaWYoZG9uZSl7XG4vL1xucmV0dXJuIGhhcmRlbih7dmFsdWUsdXBkYXRlQ291bnQ6dW5kZWZpbmVkfSk7XG4gfVxucmV0dXJuIGhhcmRlbih7dmFsdWUsdXBkYXRlQ291bnQ6cHVibGlzaENvdW50fSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VQdWJsaXNoS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHRhaWxQO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdGFpbFI7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG5cbmxldCBjdXJyZW50UHVibGlzaENvdW50PTBuO1xubGV0IGN1cnJlbnRQPXRhaWxQO1xuY29uc3QgYWR2YW5jZUN1cnJlbnQ9KGRvbmUsdmFsdWUscmVqZWN0aW9uKT0+e1xuaWYodGFpbFI9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCB1cGRhdGUgc3RhdGUgYWZ0ZXIgdGVybWluYXRpb24uJyk7XG4gfVxuXG5jdXJyZW50UHVibGlzaENvdW50Kz0xbjtcbmN1cnJlbnRQPXRhaWxQO1xuY29uc3QgcmVzb2x2ZUN1cnJlbnQ9dGFpbFI7XG5cbmlmKGRvbmUpe1xudGFpbFA9dG9vRmFyUmVqZWN0aW9uO1xudGFpbFI9dW5kZWZpbmVkO1xuIH1lbHNle1xuKHtwcm9taXNlOnRhaWxQLHJlc29sdmU6dGFpbFJ9PW1ha2VQcm9taXNlS2l0KCkpO1xuIH1cblxuaWYocmVqZWN0aW9uKXtcbnJlc29sdmVDdXJyZW50KHJlamVjdGlvbik7XG4gfWVsc2V7XG5yZXNvbHZlQ3VycmVudChcbmhhcmRlbih7XG5oZWFkOnt2YWx1ZSxkb25lfSxcbnB1Ymxpc2hDb3VudDpjdXJyZW50UHVibGlzaENvdW50LFxudGFpbDp0YWlsUH0pKTtcblxuXG4gfVxuIH07XG5cbmNvbnN0IG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZD13ZWFrTWVtb2l6ZVVuYXJ5KFxubWFrZVVwZGF0ZVJlY29yZEZyb21QdWJsaWNhdGlvblJlY29yZCk7XG5cblxuLypcblxuXG4gICAqL1xuY29uc3Qgc3Vic2NyaWJlcj1GYXIoJ1N1YnNjcmliZXInLHtcbnN1YnNjcmliZUFmdGVyOihwdWJsaXNoQ291bnQ9LTFuKT0+e1xuYXNzZXJ0LnR5cGVvZihwdWJsaXNoQ291bnQsJ2JpZ2ludCcpO1xuaWYocHVibGlzaENvdW50PT09Y3VycmVudFB1Ymxpc2hDb3VudCl7XG5yZXR1cm4gdGFpbFA7XG4gfWVsc2UgaWYocHVibGlzaENvdW50PGN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIGN1cnJlbnRQO1xuIH1lbHNle1xudGhyb3cgRXJyb3IoXG4nc3Vic2NyaWJlQWZ0ZXIgYXJndW1lbnQgbXVzdCBiZSBhIHByZXZpb3VzbHktaXNzdWVkIHB1Ymxpc2hDb3VudC4nKTtcblxuIH1cbiB9LFxuZ2V0VXBkYXRlU2luY2U6KHVwZGF0ZUNvdW50KT0+e1xuaWYodXBkYXRlQ291bnQ9PT11bmRlZmluZWQpe1xucmV0dXJuIHN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIoKS50aGVuKG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZCk7XG4gfVxudXBkYXRlQ291bnQ9QmlnSW50KHVwZGF0ZUNvdW50KTtcbnJldHVybihcbnN1YnNjcmliZXJcbi8vXG4vL1xuLy9cbi5zdWJzY3JpYmVBZnRlcih1cGRhdGVDb3VudClcbi8vXG4vL1xuLnRoZW4oKCk9PnN1YnNjcmliZXIuZ2V0VXBkYXRlU2luY2UoKSkpO1xuXG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVibGlzaGVyPUZhcignUHVibGlzaGVyJyx7XG5wdWJsaXNoOih2YWx1ZSk9PntcbmFkdmFuY2VDdXJyZW50KGZhbHNlLHZhbHVlKTtcbiB9LFxuZmluaXNoOihmaW5hbFZhbHVlKT0+e1xuYWR2YW5jZUN1cnJlbnQodHJ1ZSxmaW5hbFZhbHVlKTtcbiB9LFxuZmFpbDoocmVhc29uKT0+e1xuYWR2YW5jZUN1cnJlbnQodHJ1ZSx1bmRlZmluZWQsbWFrZVF1aWV0UmVqZWN0aW9uKHJlYXNvbikpO1xuIH19KTtcblxucmV0dXJuIGhhcmRlbih7cHVibGlzaGVyLHN1YnNjcmliZXJ9KTtcbiB9OyRo4oCNX29uY2UubWFrZVB1Ymxpc2hLaXQobWFrZVB1Ymxpc2hLaXQpO1xuaGFyZGVuKG1ha2VQdWJsaXNoS2l0KTtcblxuY29uc3QgRHVyYWJsZVB1Ymxpc2hLaXRTdGF0ZVNoYXBlPWhhcmRlbih7XG52YWx1ZUR1cmFiaWxpdHk6TS5hbnkoKSxcbnB1Ymxpc2hDb3VudDpNLmFueSgpLFxuc3RhdHVzOk0uYW55KCksXG5oYXNWYWx1ZTpNLmFueSgpLFxudmFsdWU6TS5hbnkoKX0pO1xuXG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGluaXREdXJhYmxlUHVibGlzaEtpdFN0YXRlPShvcHRpb25zPXt9KT0+e1xuY29uc3R7dmFsdWVEdXJhYmlsaXR5PSdtYW5kYXRvcnknfT1vcHRpb25zO1xuYXNzZXJ0LmVxdWFsKHZhbHVlRHVyYWJpbGl0eSwnbWFuZGF0b3J5Jyk7XG5yZXR1cm57XG4vL1xudmFsdWVEdXJhYmlsaXR5LFxuXG4vL1xucHVibGlzaENvdW50OjBuLFxuc3RhdHVzOidsaXZlJywvL1xuXG4vL1xuLy9cbi8vXG5oYXNWYWx1ZTpmYWxzZSxcbnZhbHVlOnVuZGVmaW5lZH07XG5cbiB9O1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLypcblxuXG4gKi9cbmNvbnN0IGdldEVwaGVtZXJhbEtleT0oZmFjZXRzKT0+ZmFjZXRzLnB1Ymxpc2hlcjtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGE9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHByb3ZpZGVDdXJyZW50UD0oc3RhdGUsZmFjZXRzLHRhaWwpPT57XG5jb25zdCBlcGhlbWVyYWxLZXk9Z2V0RXBoZW1lcmFsS2V5KGZhY2V0cyk7XG5jb25zdCBmb3VuZERhdGE9ZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhLmdldChlcGhlbWVyYWxLZXkpO1xuY29uc3QgY3VycmVudFA9Zm91bmREYXRhJiZmb3VuZERhdGEuY3VycmVudFA7XG5pZihjdXJyZW50UCl7XG5yZXR1cm4gY3VycmVudFA7XG4gfVxuXG5jb25zdHtwdWJsaXNoQ291bnQsc3RhdHVzLGhhc1ZhbHVlLHZhbHVlfT1zdGF0ZTtcbmlmKCFoYXNWYWx1ZSl7XG5hc3NlcnQoc3RhdHVzPT09J2xpdmUnKTtcbnJldHVybiB0YWlsO1xuIH1cbmlmKHN0YXR1cz09PSdsaXZlJ3x8c3RhdHVzPT09J2ZpbmlzaGVkJyl7XG5jb25zdCBjZWxsPWhhcmRlbih7XG5oZWFkOnt2YWx1ZSxkb25lOnN0YXR1cyE9PSdsaXZlJ30sXG5wdWJsaXNoQ291bnQsXG50YWlsfSk7XG5cbnJldHVybiBFLnJlc29sdmUoY2VsbCk7XG4gfWVsc2UgaWYoc3RhdHVzPT09J2ZhaWxlZCcpe1xucmV0dXJuIG1ha2VRdWlldFJlamVjdGlvbih2YWx1ZSk7XG4gfWVsc2V7XG50aHJvdyBGYWlsIGBJbnZhbGlkIGR1cmFibGUgcHJvbWlzZSBraXQgc3RhdHVzOiAke3Eoc3RhdHVzKX1gO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YT0oc3RhdGUsZmFjZXRzKT0+e1xuY29uc3QgZXBoZW1lcmFsS2V5PWdldEVwaGVtZXJhbEtleShmYWNldHMpO1xuY29uc3QgZm91bmREYXRhPWR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YS5nZXQoZXBoZW1lcmFsS2V5KTtcbmlmKGZvdW5kRGF0YSl7XG5yZXR1cm4gZm91bmREYXRhO1xuIH1cblxuY29uc3R7c3RhdHVzfT1zdGF0ZTtcbmxldCB0YWlsUDtcbmxldCB0YWlsUjtcbmlmKHN0YXR1cz09PSdsaXZlJyl7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG52b2lkIEUud2hlbih0YWlsUCxzaW5rLHNpbmspO1xuIH1lbHNlIGlmKHN0YXR1cz09PSdmaW5pc2hlZCd8fHN0YXR1cz09PSdmYWlsZWQnKXtcbnRhaWxQPXRvb0ZhclJlamVjdGlvbjtcbiB9ZWxzZXtcbnRocm93IEZhaWwgYEludmFsaWQgZHVyYWJsZSBwcm9taXNlIGtpdCBzdGF0dXM6ICR7cShzdGF0dXMpfWA7XG4gfVxuLy9cbmNvbnN0IG9iaj1oYXJkZW4oe2N1cnJlbnRQOnVuZGVmaW5lZCx0YWlsUCx0YWlsUn0pO1xuZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhLnNldChlcGhlbWVyYWxLZXksb2JqKTtcbnJldHVybiBvYmo7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdD0oY29udGV4dCx2YWx1ZSx0YXJnZXRTdGF0dXM9J2xpdmUnKT0+e1xuY29uc3R7c3RhdGUsZmFjZXRzfT1jb250ZXh0O1xuY29uc3R7dmFsdWVEdXJhYmlsaXR5LHN0YXR1c309c3RhdGU7XG5pZihzdGF0dXMhPT0nbGl2ZScpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCB1cGRhdGUgc3RhdGUgYWZ0ZXIgdGVybWluYXRpb24uJyk7XG4gfVxuY29uc3QgZG9uZT10YXJnZXRTdGF0dXMhPT0nbGl2ZSc7XG5pZihkb25lfHx2YWx1ZUR1cmFiaWxpdHk9PT0nbWFuZGF0b3J5Jyl7XG5jYW5CZUR1cmFibGUodmFsdWUpfHxGYWlsIGBDYW5ub3QgYWNjZXB0IG5vbi1kdXJhYmxlIHZhbHVlOiAke3ZhbHVlfWA7XG4gfVxuY29uc3R7dGFpbFA6b2xkVGFpbFAsdGFpbFI6cmVzb2x2ZU9sZFRhaWx9PVxucHJvdmlkZUR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YShzdGF0ZSxmYWNldHMpO1xuYXNzZXJ0LnR5cGVvZihyZXNvbHZlT2xkVGFpbCwnZnVuY3Rpb24nKTtcblxuY29uc3QgcHVibGlzaENvdW50PXN0YXRlLnB1Ymxpc2hDb3VudCsxbjtcbnN0YXRlLnB1Ymxpc2hDb3VudD1wdWJsaXNoQ291bnQ7XG5cbmxldCB0YWlsUDtcbmxldCB0YWlsUjtcbmlmKGRvbmUpe1xuc3RhdGUuc3RhdHVzPXRhcmdldFN0YXR1cztcbnRhaWxQPXRvb0ZhclJlamVjdGlvbjtcbnRhaWxSPXVuZGVmaW5lZDtcbiB9ZWxzZXtcbih7cHJvbWlzZTp0YWlsUCxyZXNvbHZlOnRhaWxSfT1tYWtlUHJvbWlzZUtpdCgpKTtcbnZvaWQgRS53aGVuKHRhaWxQLHNpbmssc2luayk7XG4gfVxuXG5sZXQgY3VycmVudFA7XG5pZih0YXJnZXRTdGF0dXM9PT0nZmFpbGVkJyl7XG5zdGF0ZS5oYXNWYWx1ZT10cnVlO1xuc3RhdGUudmFsdWU9dmFsdWU7XG5jb25zdCByZWplY3Rpb249bWFrZVF1aWV0UmVqZWN0aW9uKHZhbHVlKTtcbnJlc29sdmVPbGRUYWlsKHJlamVjdGlvbik7XG4gfWVsc2V7XG4vL1xuLy9cbmlmKGRvbmV8fHZhbHVlRHVyYWJpbGl0eSE9PSdpZ25vcmVkJyYmY2FuQmVEdXJhYmxlKHZhbHVlKSl7XG5zdGF0ZS5oYXNWYWx1ZT10cnVlO1xuc3RhdGUudmFsdWU9dmFsdWU7XG4gfWVsc2V7XG5zdGF0ZS5oYXNWYWx1ZT1mYWxzZTtcbnN0YXRlLnZhbHVlPXVuZGVmaW5lZDtcbi8vXG5jdXJyZW50UD1vbGRUYWlsUDtcbiB9XG5cbnJlc29sdmVPbGRUYWlsKFxuaGFyZGVuKHtcbmhlYWQ6e3ZhbHVlLGRvbmV9LFxucHVibGlzaENvdW50LFxudGFpbDp0YWlsUH0pKTtcblxuXG4gfVxuXG5kdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEuc2V0KFxuZ2V0RXBoZW1lcmFsS2V5KGZhY2V0cyksXG5oYXJkZW4oe2N1cnJlbnRQLHRhaWxQLHRhaWxSfSkpO1xuXG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQ9KGJhZ2dhZ2Usa2luZE5hbWUpPT57XG4vL1xuLy9cbmNvbnN0IG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZD1tYWtlVXBkYXRlUmVjb3JkRnJvbVB1YmxpY2F0aW9uUmVjb3JkO1xuXG4vKlxuXG4gICAqL1xucmV0dXJuIHByZXBhcmVFeG9DbGFzc0tpdChcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbnB1Ymxpc2hLaXRJS2l0LFxuaW5pdER1cmFibGVQdWJsaXNoS2l0U3RhdGUsXG57XG4vL1xuLy9cbnB1Ymxpc2hlcjp7XG5wdWJsaXNoKHZhbHVlKXtcbmFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdCh0aGlzLHZhbHVlKTtcbiB9LFxuZmluaXNoKGZpbmFsVmFsdWUpe1xuYWR2YW5jZUR1cmFibGVQdWJsaXNoS2l0KHRoaXMsZmluYWxWYWx1ZSwnZmluaXNoZWQnKTtcbiB9LFxuZmFpbChyZWFzb24pe1xuYWR2YW5jZUR1cmFibGVQdWJsaXNoS2l0KHRoaXMscmVhc29uLCdmYWlsZWQnKTtcbiB9fSxcblxuXG4vL1xuLy9cbnN1YnNjcmliZXI6e1xuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50PS0xbil7XG5jb25zdHtzdGF0ZSxmYWNldHN9PXRoaXM7XG5jb25zdHtwdWJsaXNoQ291bnQ6Y3VycmVudFB1Ymxpc2hDb3VudH09c3RhdGU7XG5jb25zdHtjdXJyZW50UCx0YWlsUH09cHJvdmlkZUR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YShcbnN0YXRlLFxuZmFjZXRzKTtcblxuaWYocHVibGlzaENvdW50PT09Y3VycmVudFB1Ymxpc2hDb3VudCl7XG5yZXR1cm4gdGFpbFA7XG4gfWVsc2UgaWYocHVibGlzaENvdW50PGN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIGN1cnJlbnRQfHxwcm92aWRlQ3VycmVudFAoc3RhdGUsZmFjZXRzLHRhaWxQKTtcbiB9ZWxzZXtcbnRocm93IEVycm9yKFxuJ3N1YnNjcmliZUFmdGVyIGFyZ3VtZW50IG11c3QgYmUgYSBwcmV2aW91c2x5LWlzc3VlZCBwdWJsaXNoQ291bnQuJyk7XG5cbiB9XG4gfSxcbmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KXtcbmNvbnN0e1xuZmFjZXRzOntzdWJzY3JpYmVyfX09XG50aGlzO1xuaWYodXBkYXRlQ291bnQ9PT11bmRlZmluZWQpe1xucmV0dXJuIHN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIoKS50aGVuKG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZCk7XG4gfVxudXBkYXRlQ291bnQ9QmlnSW50KHVwZGF0ZUNvdW50KTtcbnJldHVybihcbnN1YnNjcmliZXJcbi8vXG4vL1xuLy9cbi5zdWJzY3JpYmVBZnRlcih1cGRhdGVDb3VudClcbi8vXG4vL1xuLnRoZW4oKCk9PnN1YnNjcmliZXIuZ2V0VXBkYXRlU2luY2UoKSkpO1xuXG4gfX19LFxuXG5cbntcbnN0YXRlU2hhcGU6RHVyYWJsZVB1Ymxpc2hLaXRTdGF0ZVNoYXBlfSk7XG5cblxuIH07JGjigI1fb25jZS5wcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQocHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KTtcbmhhcmRlbihwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQpO1xuXG5jb25zdCAgICAgICAgU3Vic2NyaWJlclNoYXBlPU0ucmVtb3RhYmxlKCdTdWJzY3JpYmVyJyk7JGjigI1fb25jZS5TdWJzY3JpYmVyU2hhcGUoU3Vic2NyaWJlclNoYXBlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlB1Ymxpc2hlckkiOlsiUHVibGlzaGVySSJdLCJVcGRhdGVDb3VudFNoYXBlIjpbIlVwZGF0ZUNvdW50U2hhcGUiXSwiU3Vic2NyaWJlckkiOlsiU3Vic2NyaWJlckkiXSwicHVibGlzaEtpdElLaXQiOlsicHVibGlzaEtpdElLaXQiXSwiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSI6WyJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIl0sIkl0ZXJhYmxlRWFjaFRvcGljSSI6WyJJdGVyYWJsZUVhY2hUb3BpY0kiXSwiSXRlcmFibGVMYXRlc3RUb3BpY0kiOlsiSXRlcmFibGVMYXRlc3RUb3BpY0kiXSwibWFrZVB1Ymxpc2hLaXQiOlsibWFrZVB1Ymxpc2hLaXQiXSwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0IjpbInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCJdLCJTdWJzY3JpYmVyU2hhcGUiOlsiU3Vic2NyaWJlclNoYXBlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADQZ89EhCAAAIQgAAC4AAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3RvcmVkLW5vdGlmaWVyLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvaW50ZXJuYWwiLCJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIiwiQGVuZG8vZmFyIiwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyJdLCJleHBvcnRzIjpbIm1ha2VTdG9yZWROb3RpZmllciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0QWxsRGVmaW5lZCxtYWtlU2VyaWFsaXplVG9TdG9yYWdlLEUsRmFyLG9ic2VydmVOb3RpZmllcjskaOKAjV9pbXBvcnRzKFtbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJhc3NlcnRBbGxEZWZpbmVkXCIsIFskaOKAjV9hID0+IChhc3NlcnRBbGxEZWZpbmVkID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNcIiwgW1tcIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2VcIiwgWyRo4oCNX2EgPT4gKG1ha2VTZXJpYWxpemVUb1N0b3JhZ2UgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXSxbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXSxbXCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzXCIsIFtbXCJvYnNlcnZlTm90aWZpZXJcIiwgWyRo4oCNX2EgPT4gKG9ic2VydmVOb3RpZmllciA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTdG9yZWROb3RpZmllcj0obm90aWZpZXIsc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbmFzc2VydEFsbERlZmluZWQoe25vdGlmaWVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXJ9KTtcblxuY29uc3QgbWFyc2hhbGxUb1N0b3JhZ2U9bWFrZVNlcmlhbGl6ZVRvU3RvcmFnZShzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKTtcblxub2JzZXJ2ZU5vdGlmaWVyKG5vdGlmaWVyLHtcbnVwZGF0ZVN0YXRlKHZhbHVlKXtcbm1hcnNoYWxsVG9TdG9yYWdlKHZhbHVlKS5jYXRjaCgocmVhc29uKT0+XG5jb25zb2xlLmVycm9yKCdTdG9yZWROb3RpZmllciBmYWlsZWQgdG8gdXBkYXRlU3RhdGUnLHJlYXNvbikpO1xuXG4gfSxcbmZhaWwocmVhc29uKXtcbmNvbnNvbGUuZXJyb3IoJ1N0b3JlZE5vdGlmaWVyIGZhaWxlZCB0byBpdGVyYXRlJyxyZWFzb24pO1xuIH19KS5cbmNhdGNoKChyZWFzb24pPT57XG5jb25zb2xlLmVycm9yKCdTdG9yZWROb3RpZmllciBoYWx0ZWQgaXRlcmF0aW9uJyxyZWFzb24pO1xuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHVuc2VyaWFsaXplcj1GYXIoJ3Vuc2VyaWFsaXplcicse1xuZnJvbUNhcERhdGE6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpLFxudW5zZXJpYWxpemU6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3JlZE5vdGlmaWVyPUZhcignU3RvcmVkTm90aWZpZXInLHtcbmdldFVwZGF0ZVNpbmNlOih1cGRhdGVDb3VudCk9PkUobm90aWZpZXIpLmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KSxcbmdldFBhdGg6KCk9PkUoc3RvcmFnZU5vZGUpLmdldFBhdGgoKSxcbmdldFVuc2VyaWFsaXplcjooKT0+dW5zZXJpYWxpemVyfSk7XG5cbnJldHVybiBzdG9yZWROb3RpZmllcjtcbiB9OyRo4oCNX29uY2UubWFrZVN0b3JlZE5vdGlmaWVyKG1ha2VTdG9yZWROb3RpZmllcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU3RvcmVkTm90aWZpZXIiOlsibWFrZVN0b3JlZE5vdGlmaWVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJ2NKpAJFgAACRYAACcAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3RvcmVzdWIuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwiLCJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIiwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyIsIi4vcHVibGlzaC1raXQuanMiLCIuL3N1YnNjcmliZXIuanMiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbImZvckVhY2hQdWJsaWNhdGlvblJlY29yZCIsIm1ha2VTdG9yZWRQdWJsaXNoS2l0IiwibWFrZVN0b3JlZFB1Ymxpc2hlcktpdCIsIm1ha2VTdG9yZWRTdWJzY3JpYmVyIiwibWFrZVN0b3JlZFN1YnNjcmlwdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxGYXIsbWFrZU1hcnNoYWwsYXNzZXJ0QWxsRGVmaW5lZCxtYWtlU2VyaWFsaXplVG9TdG9yYWdlLG9ic2VydmVJdGVyYXRpb24sbWFrZVB1Ymxpc2hLaXQsbWFrZVN1YnNjcmlwdGlvbktpdCxzdWJzY3JpYmVFYWNoOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV0sW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wibWFrZU1hcnNoYWxcIiwgWyRo4oCNX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcImFzc2VydEFsbERlZmluZWRcIiwgWyRo4oCNX2EgPT4gKGFzc2VydEFsbERlZmluZWQgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvbGliLWNoYWluU3RvcmFnZS5qc1wiLCBbW1wibWFrZVNlcmlhbGl6ZVRvU3RvcmFnZVwiLCBbJGjigI1fYSA9PiAobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSA9ICRo4oCNX2EpXV1dXSxbXCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzXCIsIFtbXCJvYnNlcnZlSXRlcmF0aW9uXCIsIFskaOKAjV9hID0+IChvYnNlcnZlSXRlcmF0aW9uID0gJGjigI1fYSldXV1dLFtcIi4vcHVibGlzaC1raXQuanNcIiwgW1tcIm1ha2VQdWJsaXNoS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUHVibGlzaEtpdCA9ICRo4oCNX2EpXV1dXSxbXCIuL3N1YnNjcmliZXIuanNcIiwgW1tcIm1ha2VTdWJzY3JpcHRpb25LaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VTdWJzY3JpcHRpb25LaXQgPSAkaOKAjV9hKV1dXV0sW1wiLi9zdWJzY3JpYmUuanNcIiwgW1tcInN1YnNjcmliZUVhY2hcIiwgWyRo4oCNX2EgPT4gKHN1YnNjcmliZUVhY2ggPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmb3JFYWNoUHVibGljYXRpb25SZWNvcmQ9YXN5bmMoc3Vic2NyaWJlcixjb25zdW1lVmFsdWUpPT57XG4vL1xuLy9cbmNvbnN0IGl0ZXJhdG9yPXN1YnNjcmliZUVhY2goc3Vic2NyaWJlcilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5cbmxldCBmaW5pc2hlZD1mYWxzZTtcbmF3YWl0IG51bGw7XG53aGlsZSghZmluaXNoZWQpe1xuY29uc3R7dmFsdWUsZG9uZX09YXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuYXdhaXQgY29uc3VtZVZhbHVlKHZhbHVlKTtcbmZpbmlzaGVkPSEhZG9uZTtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5mb3JFYWNoUHVibGljYXRpb25SZWNvcmQoZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkKTtcbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkU3Vic2NyaWJlcj0oc3Vic2NyaWJlcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKT0+e1xuYXNzZXJ0QWxsRGVmaW5lZCh7c3Vic2NyaWJlcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyfSk7XG5cbmNvbnN0IG1hcnNoYWxsVG9TdG9yYWdlPW1ha2VTZXJpYWxpemVUb1N0b3JhZ2Uoc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik7XG5cbi8vXG5mb3JFYWNoUHVibGljYXRpb25SZWNvcmQoc3Vic2NyaWJlcixtYXJzaGFsbFRvU3RvcmFnZSkuY2F0Y2goKGVycik9Pntcbi8vXG4vL1xuY29uc29sZS5lcnJvcignU3RvcmVkU3Vic2NyaWJlciBmYWlsZWQgdG8gaXRlcmF0ZScsZXJyKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZXI9RmFyKCd1bnNlcmlhbGl6ZXInLHtcbmZyb21DYXBEYXRhOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKSxcbnVuc2VyaWFsaXplOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3Jlc3ViPUZhcignU3RvcmVkU3Vic2NyaWJlcicse1xuc3Vic2NyaWJlQWZ0ZXI6KHB1Ymxpc2hDb3VudCk9PnN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KSxcbmdldFVwZGF0ZVNpbmNlOih1cGRhdGVDb3VudCk9PnN1YnNjcmliZXIuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpLFxuZ2V0UGF0aDooKT0+RShzdG9yYWdlTm9kZSkuZ2V0UGF0aCgpLFxuZ2V0U3RvcmVLZXk6KCk9PkUoc3RvcmFnZU5vZGUpLmdldFN0b3JlS2V5KCksXG5nZXRVbnNlcmlhbGl6ZXI6KCk9PnVuc2VyaWFsaXplcn0pO1xuXG5yZXR1cm4gc3RvcmVzdWI7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VTdG9yZWRTdWJzY3JpYmVyKG1ha2VTdG9yZWRTdWJzY3JpYmVyKTtcbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkU3Vic2NyaXB0aW9uPShcbnN1YnNjcmlwdGlvbixcbnN0b3JhZ2VOb2RlLFxubWFyc2hhbGxlcj1tYWtlTWFyc2hhbCh1bmRlZmluZWQsdW5kZWZpbmVkLHtcbm1hcnNoYWxTYXZlRXJyb3I6KCk9PnsgfSxcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KSk9PlxuXG57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHVuc2VyaWFsaXplcj1GYXIoJ3Vuc2VyaWFsaXplcicse1xuZnJvbUNhcERhdGE6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpLFxudW5zZXJpYWxpemU6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpfSk7XG5cblxuLy9cbmxldCBwdWJsaXNoRmFpbGVkPWZhbHNlO1xubGV0IHB1Ymxpc2hFeGNlcHRpb247XG5cbmNvbnN0IGZhaWw9KGVycik9PntcbnB1Ymxpc2hGYWlsZWQ9dHJ1ZTtcbnB1Ymxpc2hFeGNlcHRpb249ZXJyO1xuIH07XG5cbi8vXG4vL1xuY29uc3QgcHVibGlzaFZhbHVlPShvYmopPT57XG5hc3NlcnQoc3RvcmFnZU5vZGUpO1xuaWYocHVibGlzaEZhaWxlZCl7XG4vL1xudGhyb3cgcHVibGlzaEV4Y2VwdGlvbjtcbiB9XG5cbi8vXG5FKG1hcnNoYWxsZXIpLlxudG9DYXBEYXRhKG9iaikuXG50aGVuKChzZXJpYWxpemVkKT0+e1xuY29uc3QgZW5jb2RlZD1KU09OLnN0cmluZ2lmeShzZXJpYWxpemVkKTtcbnJldHVybiBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShlbmNvZGVkKTtcbiB9KS5cbmNhdGNoKGZhaWwpO1xuIH07XG5cbmlmKHN0b3JhZ2VOb2RlKXtcbi8vXG5vYnNlcnZlSXRlcmF0aW9uKHN1YnNjcmlwdGlvbix7XG51cGRhdGVTdGF0ZTpwdWJsaXNoVmFsdWUsXG5maW5pc2g6cHVibGlzaFZhbHVlfSkuXG5jYXRjaChmYWlsKTtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RvcmVzdWI9RmFyKCdTdG9yZWRTdWJzY3JpcHRpb24nLHtcbi8vXG5nZXRTdG9yZUtleTphc3luYygpPT57XG5pZighc3RvcmFnZU5vZGUpe1xucmV0dXJuIGhhcmRlbih7c3Vic2NyaXB0aW9ufSk7XG4gfVxuY29uc3Qgc3RvcmVLZXk9YXdhaXQgRShzdG9yYWdlTm9kZSkuZ2V0U3RvcmVLZXkoKTtcbnJldHVybiBoYXJkZW4oey4uLnN0b3JlS2V5LHN1YnNjcmlwdGlvbn0pO1xuIH0sXG5nZXRVbnNlcmlhbGl6ZXI6KCk9PnVuc2VyaWFsaXplcixcbmdldFNoYXJhYmxlU3Vic2NyaXB0aW9uSW50ZXJuYWxzOigpPT5cbnN1YnNjcmlwdGlvbi5nZXRTaGFyYWJsZVN1YnNjcmlwdGlvbkludGVybmFscygpLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+c3Vic2NyaXB0aW9uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpLFxuc3Vic2NyaWJlQWZ0ZXI6KHB1Ymxpc2hDb3VudCk9PnN1YnNjcmlwdGlvbi5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQpfSk7XG5cbnJldHVybiBzdG9yZXN1YjtcbiB9OyRo4oCNX29uY2UubWFrZVN0b3JlZFN1YnNjcmlwdGlvbihtYWtlU3RvcmVkU3Vic2NyaXB0aW9uKTtcbmhhcmRlbihtYWtlU3RvcmVkU3Vic2NyaXB0aW9uKTtcblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFB1Ymxpc2hlcktpdD0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcixjaGlsZFBhdGgpPT57XG5jb25zdHtwdWJsaWNhdGlvbixzdWJzY3JpcHRpb259PW1ha2VTdWJzY3JpcHRpb25LaXQoKTtcblxuaWYoc3RvcmFnZU5vZGUmJmNoaWxkUGF0aCl7XG5zdG9yYWdlTm9kZT1FKHN0b3JhZ2VOb2RlKS5tYWtlQ2hpbGROb2RlKGNoaWxkUGF0aCk7XG4gfVxuXG4vL1xuY29uc3Qgc3Vic2NyaWJlcj1tYWtlU3RvcmVkU3Vic2NyaXB0aW9uKFxuc3Vic2NyaXB0aW9uLFxuc3RvcmFnZU5vZGUsXG5tYXJzaGFsbGVyKTtcblxuXG5yZXR1cm57XG5wdWJsaXNoZXI6cHVibGljYXRpb24sXG5zdWJzY3JpYmVyfTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQobWFrZVN0b3JlZFB1Ymxpc2hlcktpdCk7XG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFB1Ymxpc2hLaXQ9KHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxucmV0dXJue1xucHVibGlzaGVyLFxuLy9cbnN1YnNjcmliZXI6bWFrZVN0b3JlZFN1YnNjcmliZXIoc3Vic2NyaWJlcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKX07XG5cbiB9OyRo4oCNX29uY2UubWFrZVN0b3JlZFB1Ymxpc2hLaXQobWFrZVN0b3JlZFB1Ymxpc2hLaXQpO1xuaGFyZGVuKG1ha2VTdG9yZWRQdWJsaXNoS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImZvckVhY2hQdWJsaWNhdGlvblJlY29yZCI6WyJmb3JFYWNoUHVibGljYXRpb25SZWNvcmQiXSwibWFrZVN0b3JlZFN1YnNjcmliZXIiOlsibWFrZVN0b3JlZFN1YnNjcmliZXIiXSwibWFrZVN0b3JlZFN1YnNjcmlwdGlvbiI6WyJtYWtlU3RvcmVkU3Vic2NyaXB0aW9uIl0sIm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQiOlsibWFrZVN0b3JlZFB1Ymxpc2hlcktpdCJdLCJtYWtlU3RvcmVkUHVibGlzaEtpdCI6WyJtYWtlU3RvcmVkUHVibGlzaEtpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACDPI2zNxIAADcSAAAoAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N1YnNjcmliZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdXBncmFkZS1hcGkuanMiXSwiZXhwb3J0cyI6WyJzdWJzY3JpYmUiLCJzdWJzY3JpYmVFYWNoIiwic3Vic2NyaWJlTGF0ZXN0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLEZhaWwsYW5ub3RhdGVFcnJvcixFLEZhcixpc09iamVjdCxpc1VwZ3JhZGVEaXNjb25uZWN0aW9uOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjigI1fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dLFtcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaOKAjV9hID0+IChpc09iamVjdCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy91cGdyYWRlLWFwaS5qc1wiLCBbW1wiaXNVcGdyYWRlRGlzY29ubmVjdGlvblwiLCBbJGjigI1fYSA9PiAoaXNVcGdyYWRlRGlzY29ubmVjdGlvbiA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCBzaW5rPSgpPT57IH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcmVjb25uZWN0QXNOZWVkZWQ9YXN5bmMoZ2V0dGVyLHNlZWQ9W10pPT57XG5sZXQgZGlzY29ubmVjdGlvbjtcbmxldCBsYXN0VmVyc2lvbj0tSW5maW5pdHk7XG4vL1xuYXdhaXQgbnVsbDtcbmZvcihsZXQgaT0wOztpKz0xKXtcbnRyeXtcbmNvbnN0IHJlc3VsdFA9aTxzZWVkLmxlbmd0aD9zZWVkW2ldOmdldHRlcigpO1xuY29uc3QgcmVzdWx0PWF3YWl0IHJlc3VsdFA7XG5yZXR1cm4gcmVzdWx0O1xuIH1jYXRjaChlcnIpe1xuaWYoaXNVcGdyYWRlRGlzY29ubmVjdGlvbihlcnIpKXtcbmlmKCFkaXNjb25uZWN0aW9uKXtcbmRpc2Nvbm5lY3Rpb249ZXJyO1xuIH1cbmNvbnN0e2luY2FybmF0aW9uTnVtYmVyOnZlcnNpb259PWVycjtcbmlmKHZlcnNpb24+bGFzdFZlcnNpb24pe1xuLy9cbi8vXG4vL1xubGFzdFZlcnNpb249dmVyc2lvbjtcbmNvbnRpbnVlO1xuIH1cbiB9XG4vL1xuLy9cbi8vXG5pZihpc09iamVjdChlcnIpJiZkaXNjb25uZWN0aW9uJiZkaXNjb25uZWN0aW9uIT09ZXJyKXtcbnRyeXtcbmFubm90YXRlRXJyb3IoXG5lcnIsXG5YIGBBdHRlbXB0aW5nIHRvIHJlY292ZXIgZnJvbSBkaXNjb25uZWN0aW9uOiAke2Rpc2Nvbm5lY3Rpb259YCk7XG5cbiB9Y2F0Y2goX2Vycil7XG4vL1xuIH1cbiB9XG50aHJvdyBlcnI7XG4gfVxuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzdWJzY3JpYmU9KGl0UCk9PlxuRmFyKCdBc3luY0l0ZXJhYmxlJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT57XG5jb25zdCBpdD1FKGl0UClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5jb25zdCBzZWxmPUZhcignQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5zZWxmLFxubmV4dDphc3luYygpPT5FKGl0KS5uZXh0KCl9KTtcblxucmV0dXJuIHNlbGY7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLnN1YnNjcmliZShzdWJzY3JpYmUpO1xuY29uc3QgbWFrZUVhY2hJdGVyYXRvcj0odG9waWMsbmV4dENlbGxQKT0+e1xuLy9cbi8vXG5jb25zdCBzZWxmPUZhcignRWFjaEl0ZXJhdG9yJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5zZWxmLFxubmV4dDooKT0+e1xuY29uc3R7XG5oZWFkOnJlc3VsdFAsXG5wdWJsaXNoQ291bnQ6cHVibGlzaENvdW50UCxcbnRhaWw6dGFpbFB9PVxuRS5nZXQobmV4dENlbGxQKTtcblxuLy9cbi8vXG5jb25zdCBnZXRTdWNjZXNzb3I9YXN5bmMoKT0+e1xuY29uc3QgcHVibGlzaENvdW50PWF3YWl0IHB1Ymxpc2hDb3VudFA7XG5hc3NlcnQudHlwZW9mKHB1Ymxpc2hDb3VudCwnYmlnaW50Jyk7XG5jb25zdCBzdWNjZXNzb3I9YXdhaXQgRSh0b3BpYykuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KTtcbmNvbnN0IG5ld1B1Ymxpc2hDb3VudD1zdWNjZXNzb3IucHVibGlzaENvdW50O1xuaWYobmV3UHVibGlzaENvdW50IT09cHVibGlzaENvdW50KzFuKXtcbkZhaWwgYGVhY2hJdGVyYXRvciBicm9rZW4gYnkgZ2FwIGZyb20gcHVibGlzaENvdW50ICR7cHVibGlzaENvdW50fSB0byAke25ld1B1Ymxpc2hDb3VudH1gO1xuIH1cbnJldHVybiBzdWNjZXNzb3I7XG4gfTtcblxuLy9cbi8vXG5uZXh0Q2VsbFA9cmVjb25uZWN0QXNOZWVkZWQoZ2V0U3VjY2Vzc29yLFt0YWlsUF0pO1xuXG4vL1xuLy9cbi8vXG4vL1xudm9pZCBFLndoZW4ocHVibGlzaENvdW50UCxzaW5rLHNpbmspO1xudm9pZCBFLndoZW4obmV4dENlbGxQLHNpbmssc2luayk7XG5yZXR1cm4gcmVzdWx0UDtcbiB9LFxuZm9yazooKT0+bWFrZUVhY2hJdGVyYXRvcih0b3BpYyxuZXh0Q2VsbFApfSk7XG5cbnJldHVybiBzZWxmO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc3Vic2NyaWJlRWFjaD0odG9waWMpPT57XG5jb25zdCBpdGVyYWJsZT1GYXIoJ0VhY2hJdGVyYWJsZScse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+e1xuY29uc3QgZmlyc3RDZWxsUD1yZWNvbm5lY3RBc05lZWRlZCgoKT0+RSh0b3BpYykuc3Vic2NyaWJlQWZ0ZXIoKSk7XG5yZXR1cm4gbWFrZUVhY2hJdGVyYXRvcih0b3BpYyxmaXJzdENlbGxQKTtcbiB9fSk7XG5cbnJldHVybiBpdGVyYWJsZTtcbiB9OyRo4oCNX29uY2Uuc3Vic2NyaWJlRWFjaChzdWJzY3JpYmVFYWNoKTtcbmhhcmRlbihzdWJzY3JpYmVFYWNoKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNsb25lTGF0ZXN0SXRlcmF0b3I9KHRvcGljLGxvY2FsVXBkYXRlQ291bnQsdGVybWluYWxSZXN1bHQpPT57XG5sZXQgbXV0ZXg9UHJvbWlzZS5yZXNvbHZlKCk7XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZVJlcXVlc3ROZXh0UmVzdWx0PWFzeW5jKCk9PntcbmlmKHRlcm1pbmFsUmVzdWx0KXtcbi8vXG4vL1xucmV0dXJuIHRlcm1pbmFsUmVzdWx0O1xuIH1cblxuLy9cbi8vXG5jb25zdHt2YWx1ZSx1cGRhdGVDb3VudH09YXdhaXQgcmVjb25uZWN0QXNOZWVkZWQoKCk9PlxuRSh0b3BpYykuZ2V0VXBkYXRlU2luY2UobG9jYWxVcGRhdGVDb3VudCkpO1xuXG4vL1xubG9jYWxVcGRhdGVDb3VudD11cGRhdGVDb3VudDtcblxuLy9cbmlmKHVwZGF0ZUNvdW50PT09dW5kZWZpbmVkKXtcbnRlcm1pbmFsUmVzdWx0PWhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlfSk7XG5yZXR1cm4gdGVybWluYWxSZXN1bHQ7XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH07XG5cbmNvbnN0IHNlbGY9RmFyKCdMYXRlc3RJdGVyYXRvcicse1xuZm9yazooKT0+Y2xvbmVMYXRlc3RJdGVyYXRvcih0b3BpYyxsb2NhbFVwZGF0ZUNvdW50LHRlcm1pbmFsUmVzdWx0KSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnNlbGYsXG5uZXh0OmFzeW5jKCk9Pntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuaWYodGVybWluYWxSZXN1bHQpe1xuLy9cbi8vXG5yZXR1cm4gdGVybWluYWxSZXN1bHQ7XG4gfVxuXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgbmV4dFJlc3VsdD1tdXRleC50aGVuKG1heWJlUmVxdWVzdE5leHRSZXN1bHQpO1xubXV0ZXg9bmV4dFJlc3VsdC50aGVuKHNpbmssc2luayk7XG4vL1xuXG5yZXR1cm4gbmV4dFJlc3VsdDtcbiB9fSk7XG5cbnJldHVybiBzZWxmO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VMYXRlc3RJdGVyYXRvcj0odG9waWMpPT5jbG9uZUxhdGVzdEl0ZXJhdG9yKHRvcGljKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzdWJzY3JpYmVMYXRlc3Q9KHRvcGljKT0+e1xuY29uc3QgaXRlcmFibGU9RmFyKCdMYXRlc3RJdGVyYWJsZScse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+bWFrZUxhdGVzdEl0ZXJhdG9yKHRvcGljKX0pO1xuXG5yZXR1cm4gaXRlcmFibGU7XG4gfTskaOKAjV9vbmNlLnN1YnNjcmliZUxhdGVzdChzdWJzY3JpYmVMYXRlc3QpO1xuaGFyZGVuKHN1YnNjcmliZUxhdGVzdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzdWJzY3JpYmUiOlsic3Vic2NyaWJlIl0sInN1YnNjcmliZUVhY2giOlsic3Vic2NyaWJlRWFjaCJdLCJzdWJzY3JpYmVMYXRlc3QiOlsic3Vic2NyaWJlTGF0ZXN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABCtad7iBwAA4gcAACkAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3Vic2NyaWJlci5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiLCIuL3N1YnNjcmliZS5qcyIsIi4vcHVibGlzaC1raXQuanMiLCIuL3RvcGljLmpzIl0sImV4cG9ydHMiOlsibWFrZVN1YnNjcmlwdGlvbiIsIm1ha2VTdWJzY3JpcHRpb25LaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLHN1YnNjcmliZUVhY2gsbWFrZVB1Ymxpc2hLaXQsbWFrZVBpbm5lZEhpc3RvcnlUb3BpYzskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dLFtcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtbXCJzdWJzY3JpYmVFYWNoXCIsIFskaOKAjV9hID0+IChzdWJzY3JpYmVFYWNoID0gJGjigI1fYSldXV1dLFtcIi4vcHVibGlzaC1raXQuanNcIiwgW1tcIm1ha2VQdWJsaXNoS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUHVibGlzaEtpdCA9ICRo4oCNX2EpXV1dXSxbXCIuL3RvcGljLmpzXCIsIFtbXCJtYWtlUGlubmVkSGlzdG9yeVRvcGljXCIsIFskaOKAjV9hID0+IChtYWtlUGlubmVkSGlzdG9yeVRvcGljID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZVN1YnNjcmlwdGlvbj0odG9waWMpPT57XG5jb25zdCBzdWJzY3JpcHRpb249RmFyKCdTdWJzY3JpcHRpb24nLHtcbi4uLnN1YnNjcmliZUVhY2godG9waWMpLFxuc3Vic2NyaWJlQWZ0ZXI6YXN5bmMocHVibGlzaENvdW50KT0+RSh0b3BpYykuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KSxcblxuLypcblxuXG5cblxuICAgICAqL1xuZ2V0U2hhcmFibGVTdWJzY3JpcHRpb25JbnRlcm5hbHM6YXN5bmMoKT0+dG9waWMsXG5cbmdldFN0b3JlS2V5OigpPT5oYXJkZW4oe3N1YnNjcmlwdGlvbn0pfSk7XG5cbnJldHVybiBzdWJzY3JpcHRpb247XG4gfTskaOKAjV9vbmNlLm1ha2VTdWJzY3JpcHRpb24obWFrZVN1YnNjcmlwdGlvbik7XG5oYXJkZW4obWFrZVN1YnNjcmlwdGlvbik7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlU3Vic2NyaXB0aW9uS2l0PSgpPT57XG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxuLy9cbi8vXG5cbmNvbnN0IHBpbm5lZEhpc3RvcnlUb3BpYz1tYWtlUGlubmVkSGlzdG9yeVRvcGljKHN1YnNjcmliZXIpO1xuY29uc3Qgc3Vic2NyaXB0aW9uPW1ha2VTdWJzY3JpcHRpb24ocGlubmVkSGlzdG9yeVRvcGljKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1YmxpY2F0aW9uPUZhcigncHVibGljYXRpb24nLHtcbnVwZGF0ZVN0YXRlOihub25GaW5hbFZhbHVlKT0+cHVibGlzaGVyLnB1Ymxpc2gobm9uRmluYWxWYWx1ZSksXG5maW5pc2g6KGNvbXBsZXRpb24pPT5wdWJsaXNoZXIuZmluaXNoKGNvbXBsZXRpb24pLFxuZmFpbDoocmVhc29uKT0+cHVibGlzaGVyLmZhaWwocmVhc29uKX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe3B1YmxpY2F0aW9uLHN1YnNjcmlwdGlvbn0pO1xuIH07JGjigI1fb25jZS5tYWtlU3Vic2NyaXB0aW9uS2l0KG1ha2VTdWJzY3JpcHRpb25LaXQpO1xuaGFyZGVuKG1ha2VTdWJzY3JpcHRpb25LaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVN1YnNjcmlwdGlvbiI6WyJtYWtlU3Vic2NyaXB0aW9uIl0sIm1ha2VTdWJzY3JpcHRpb25LaXQiOlsibWFrZVN1YnNjcmlwdGlvbktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABfaB419QMAAPUDAAAkAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3RvcGljLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciJdLCJleHBvcnRzIjpbIm1ha2VQaW5uZWRIaXN0b3J5VG9waWMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVBpbm5lZEhpc3RvcnlUb3BpYz0odG9waWMpPT57XG4vL1xuXG4vL1xuY29uc3QgcGlubmVkUHViTGlzdD10b3BpYy5zdWJzY3JpYmVBZnRlcigpO1xuXG5yZXR1cm4gRmFyKCdQaW5uZWRIaXN0b3J5VG9waWMnLHtcbnN1YnNjcmliZUFmdGVyOmFzeW5jKHB1Ymxpc2hDb3VudD0tMW4pPT57XG5pZihwdWJsaXNoQ291bnQ9PT0tMW4pe1xucmV0dXJuIHBpbm5lZFB1Ykxpc3Q7XG4gfVxucmV0dXJuIHRvcGljLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCk7XG4gfSxcbmdldFVwZGF0ZVNpbmNlOmFzeW5jKHVwZGF0ZUNvdW50PXVuZGVmaW5lZCk9Pntcbi8vXG5yZXR1cm4gdG9waWMuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpO1xuIH19KTtcblxuIH07JGjigI1fb25jZS5tYWtlUGlubmVkSGlzdG9yeVRvcGljKG1ha2VQaW5uZWRIaXN0b3J5VG9waWMpO1xuaGFyZGVuKG1ha2VQaW5uZWRIaXN0b3J5VG9waWMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyI6WyJtYWtlUGlubmVkSGlzdG9yeVRvcGljIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAACoAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvdHlwZXMtaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAU1jQy40GAACNBgAALQAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdGVzdGluZy11dGlscy5qcyJdLCJleHBvcnRzIjpbIm1ha2VGYWtlTWFyc2hhbGxlciIsIm1ha2VGYWtlU3RvcmFnZSIsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXIsbWFrZU1hcnNoYWw7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaOKAjV9hID0+IChtYWtlTWFyc2hhbCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy90ZXN0aW5nLXV0aWxzLmpzXCIsIFtdXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUZha2VTdG9yYWdlPShwYXRoLHB1YmxpY2F0aW9uKT0+e1xubGV0IHNldFZhbHVlQ2FsbHM9MDtcbmNvbnN0IGZ1bGxQYXRoPSBgcHVibGlzaC4ke3BhdGh9YDtcbmNvbnN0IHN0b3JlS2V5PWhhcmRlbih7XG5zdG9yZU5hbWU6J3N3aW5nc2V0JyxcbnN0b3JlU3Via2V5OiBgc3dpbmdzZXQvZGF0YToke2Z1bGxQYXRofWAsXG5kYXRhUHJlZml4Qnl0ZXM6Jyd9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RvcmFnZT1GYXIoJ1N0b3JhZ2VOb2RlJyx7XG5nZXRQYXRoOigpPT5wYXRoLFxuZ2V0U3RvcmVLZXk6YXN5bmMoKT0+c3RvcmVLZXksXG5zZXRWYWx1ZTphc3luYyh2YWx1ZSk9PntcbnNldFZhbHVlQ2FsbHMrPTE7XG5hc3NlcnQudHlwZW9mKHZhbHVlLCdzdHJpbmcnKTtcbmlmKHB1YmxpY2F0aW9uKXtcbnB1YmxpY2F0aW9uLnVwZGF0ZVN0YXRlKHZhbHVlKTtcbiB9XG4gfSxcbm1ha2VDaGlsZE5vZGU6KCk9PnN0b3JhZ2UsXG5jb3VudFNldFZhbHVlQ2FsbHM6KCk9PnNldFZhbHVlQ2FsbHN9KTtcblxucmV0dXJuIHN0b3JhZ2U7XG4gfTskaOKAjV9vbmNlLm1ha2VGYWtlU3RvcmFnZShtYWtlRmFrZVN0b3JhZ2UpO1xuaGFyZGVuKG1ha2VGYWtlU3RvcmFnZSk7XG5cbmNvbnN0ICAgICAgICBtYWtlRmFrZU1hcnNoYWxsZXI9KCk9PlxubWFrZU1hcnNoYWwodW5kZWZpbmVkLHVuZGVmaW5lZCx7XG5tYXJzaGFsU2F2ZUVycm9yOigpPT57IH19KTskaOKAjV9vbmNlLm1ha2VGYWtlTWFyc2hhbGxlcihtYWtlRmFrZU1hcnNoYWxsZXIpO1xuXG5oYXJkZW4obWFrZUZha2VNYXJzaGFsbGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7IkBhZ29yaWMvaW50ZXJuYWwvc3JjL3Rlc3RpbmctdXRpbHMuanMiOltbImV2ZW50TG9vcEl0ZXJhdGlvbiIsImV2ZW50TG9vcEl0ZXJhdGlvbiJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRmFrZVN0b3JhZ2UiOlsibWFrZUZha2VTdG9yYWdlIl0sIm1ha2VGYWtlTWFyc2hhbGxlciI6WyJtYWtlRmFrZU1hcnNoYWxsZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGjl5naMdAACjHQAAMwAAAEBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMy9zcmMvbWFyc2hhbC1jb250ZXh0cy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGFnb3JpYy9zdG9yZSIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3ZhdHMvc3JjL2xpYi1ib2FyZC5qcyJdLCJleHBvcnRzIjpbIm1ha2VFeHBvcnRDb250ZXh0IiwibWFrZUltcG9ydENvbnRleHQiLCJtYWtlTG9nZ2luZ1ByZXNlbmNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsSGFuZGxlZFByb21pc2UsbWFrZVNjYWxhck1hcFN0b3JlLEZhcixtYWtlTWFyc2hhbCxSZW1vdGFibGUsREVGQVVMVF9QUkVGSVg7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkhhbmRsZWRQcm9taXNlXCIsIFskaOKAjV9hID0+IChIYW5kbGVkUHJvbWlzZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlU2NhbGFyTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV0sW1wibWFrZU1hcnNoYWxcIiwgWyRo4oCNX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjigI1fYSldXSxbXCJSZW1vdGFibGVcIiwgWyRo4oCNX2EgPT4gKFJlbW90YWJsZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3ZhdHMvc3JjL2xpYi1ib2FyZC5qc1wiLCBbW1wiREVGQVVMVF9QUkVGSVhcIiwgWyRo4oCNX2EgPT4gKERFRkFVTFRfUFJFRklYID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCBpc0RlZmF1bHRCb2FyZElkPShzcGVjaW1lbik9PntcbnJldHVybiB0eXBlb2Ygc3BlY2ltZW49PT0nc3RyaW5nJyYmc3BlY2ltZW4uc3RhcnRzV2l0aChERUZBVUxUX1BSRUZJWCk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVdhbGxldFNsb3Q9KF90YWJsZXMsa2luZCxpZCk9PntcbmNvbnN0IGRpZ2l0cz0vKiAgICAgICAgICAgICAgICAgKi8gYCR7aWR9YDtcbnJldHVybiBgJHtraW5kfToke2RpZ2l0c31gO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZmluZEtleT0ocmVjb3JkLHByZWRpY2F0ZSk9PntcbmNvbnN0IGtleT1PYmplY3Qua2V5cyhyZWNvcmQpLmZpbmQocHJlZGljYXRlKTtcbnJldHVybiBrZXk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBwYXJzZVdhbGxldFNsb3Q9KHRhYmxlcyxzbG90KT0+e1xuY29uc3Qga2luZD1maW5kS2V5KHRhYmxlcywoayk9PnNsb3Quc3RhcnRzV2l0aCggYCR7a306YCkpO1xuY29uc3QgaWQ9a2luZD9OdW1iZXIoc2xvdC5zbGljZShraW5kLmxlbmd0aCsxKSk6TmFOO1xucmV0dXJue2tpbmQsaWR9O1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBpbml0U2xvdFZhbD0odGFibGUsc2xvdCx2YWwpPT57XG50YWJsZS5ieVNsb3QuaW5pdChzbG90LHZhbCk7XG50YWJsZS5ieVZhbC5pbml0KHZhbCxzbG90KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFeHBvcnRDb250ZXh0PSgpPT57XG5jb25zdCB3YWxsZXRPYmplY3RzPXtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnB1cnNlOntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfSxcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wYXltZW50OntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfSxcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnVua25vd246e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9fTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYm9hcmRPYmplY3RzPXtcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgc2xvdFRvVmFsPShzbG90LF9pZmFjZSk9PntcbmlmKGlzRGVmYXVsdEJvYXJkSWQoc2xvdCkmJmJvYXJkT2JqZWN0cy5ieVNsb3QuaGFzKHNsb3QpKXtcbnJldHVybiBib2FyZE9iamVjdHMuYnlTbG90LmdldChzbG90KTtcbiB9XG5jb25zdHtraW5kLGlkfT1wYXJzZVdhbGxldFNsb3Qod2FsbGV0T2JqZWN0cyxzbG90KTtcbmtpbmR8fEZhaWwgYGJhZCBzbG90IGtpbmQ6ICR7c2xvdH1gO1xuY29uc3QgdmFsPXdhbGxldE9iamVjdHNba2luZF0uYnlTbG90LmdldChpZCk7Ly9cbnJldHVybiB2YWw7XG4gfTtcblxubGV0IHVua25vd25Ob25jZT0wO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCB2YWxUb1Nsb3Q9KHZhbCk9PntcbmlmKGJvYXJkT2JqZWN0cy5ieVZhbC5oYXModmFsKSl7XG5yZXR1cm4gYm9hcmRPYmplY3RzLmJ5VmFsLmdldCh2YWwpO1xuIH1cbmNvbnN0IGtpbmQ9ZmluZEtleSh3YWxsZXRPYmplY3RzLChrKT0+d2FsbGV0T2JqZWN0c1trXS5ieVZhbC5oYXModmFsKSk7XG5pZihraW5kKXtcbi8vXG5jb25zdCBpZD13YWxsZXRPYmplY3RzW2tpbmRdLmJ5VmFsLmdldCh2YWwpO1xucmV0dXJuIG1ha2VXYWxsZXRTbG90KHdhbGxldE9iamVjdHMsa2luZCxpZCk7XG4gfVxudW5rbm93bk5vbmNlKz0xO1xuY29uc3Qgc2xvdD1tYWtlV2FsbGV0U2xvdCh3YWxsZXRPYmplY3RzLCd1bmtub3duJyx1bmtub3duTm9uY2UpO1xuaW5pdFNsb3RWYWwod2FsbGV0T2JqZWN0cy51bmtub3duLHVua25vd25Ob25jZSx2YWwpO1xucmV0dXJuIHNsb3Q7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBtYWtlU2F2ZXI9KGtpbmQsdGFibGUpPT57XG5sZXQgbm9uY2U9MDtcbi8qICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2F2ZXI9KHZhbCk9Pntcbm5vbmNlKz0xO1xuaW5pdFNsb3RWYWwodGFibGUsbm9uY2UsdmFsKTtcbiB9O1xucmV0dXJuIHNhdmVyO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe1xuc2F2ZVB1cnNlQWN0aW9uczptYWtlU2F2ZXIoJ3B1cnNlJyx3YWxsZXRPYmplY3RzLnB1cnNlKSxcbnNhdmVQYXltZW50QWN0aW9uczptYWtlU2F2ZXIoJ3BheW1lbnQnLHdhbGxldE9iamVjdHMucGF5bWVudCksXG4vKlxuXG5cbiAgICAgKi9cbmluaXRQdXJzZUlkOihpZCxwdXJzZSk9PntcbmluaXRTbG90VmFsKHdhbGxldE9iamVjdHMucHVyc2UsaWQscHVyc2UpO1xuIH0sXG5wdXJzZUVudHJpZXM6d2FsbGV0T2JqZWN0cy5wdXJzZS5ieVNsb3QuZW50cmllcyxcbi8qXG5cblxuICAgICAqL1xuaW5pdEJvYXJkSWQ6KGlkLHZhbCk9PntcbmluaXRTbG90VmFsKGJvYXJkT2JqZWN0cyxpZCx2YWwpO1xuIH0sXG4vKlxuXG5cbiAgICAgKi9cbmVuc3VyZUJvYXJkSWQ6KGlkLHZhbCk9PntcbmlmKGJvYXJkT2JqZWN0cy5ieVZhbC5oYXModmFsKSl7XG5hc3NlcnQuZXF1YWwoYm9hcmRPYmplY3RzLmJ5VmFsLmdldCh2YWwpLGlkKTtcbnJldHVybjtcbiB9XG5pbml0U2xvdFZhbChib2FyZE9iamVjdHMsaWQsdmFsKTtcbiB9LFxuLi4ubWFrZU1hcnNoYWwodmFsVG9TbG90LHNsb3RUb1ZhbCx7c2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pfSk7XG5cbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaOKAjV9vbmNlLm1ha2VFeHBvcnRDb250ZXh0KG1ha2VFeHBvcnRDb250ZXh0KTtcblxuY29uc3QgZGVmYXVsdE1ha2VQcmVzZW5jZT0oaWZhY2UpPT57XG5jb25zdCBzZXZlcmVkPSBgU0VWRVJFRDogJHtpZmFjZS5yZXBsYWNlKC9eQWxsZWdlZDogLywnJyl9YDtcbnJldHVybiBGYXIoc2V2ZXJlZCx7fSk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUltcG9ydENvbnRleHQ9KG1ha2VQcmVzZW5jZT1kZWZhdWx0TWFrZVByZXNlbmNlKT0+e1xuY29uc3Qgd2FsbGV0T2JqZWN0cz17XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wdXJzZTp7XG5ieVNsb3Q6bWFrZVNjYWxhck1hcFN0b3JlKCksXG5ieVZhbDptYWtlU2NhbGFyTWFwU3RvcmUoKX0sXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnBheW1lbnQ6e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9LFxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG51bmtub3duOntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfX07XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGJvYXJkT2JqZWN0cz17XG5ieVNsb3Q6bWFrZVNjYWxhck1hcFN0b3JlKCksXG5ieVZhbDptYWtlU2NhbGFyTWFwU3RvcmUoKX07XG5cblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZVZhbD0odGFibGUsc2xvdCxpZmFjZSk9PntcbmlmKHRhYmxlLmJ5U2xvdC5oYXMoc2xvdCkpe1xucmV0dXJuIHRhYmxlLmJ5U2xvdC5nZXQoc2xvdCk7XG4gfVxuY29uc3QgdmFsPW1ha2VQcmVzZW5jZShpZmFjZSk7XG5pbml0U2xvdFZhbCh0YWJsZSxzbG90LHZhbCk7XG5yZXR1cm4gdmFsO1xuIH07XG5cbmNvbnN0IHNsb3RUb1ZhbD17XG4vKlxuXG5cbiAgICAgKi9cbmZyb21Cb2FyZDooc2xvdCxpZmFjZSk9PntcbmlzRGVmYXVsdEJvYXJkSWQoc2xvdCl8fEZhaWwgYGJhZCBib2FyZCBzbG90ICR7cShzbG90KX1gO1xucmV0dXJuIHByb3ZpZGVWYWwoYm9hcmRPYmplY3RzLHNsb3QsaWZhY2UpO1xuIH0sXG5cbi8qXG5cblxuICAgICAqL1xuZnJvbU15V2FsbGV0OihzbG90LGlmYWNlKT0+e1xuaWYoIXNsb3Qpe1xuLy9cbnJldHVybiBtYWtlUHJlc2VuY2UoIGAke3Nsb3R9YCk7XG4gfVxuY29uc3R7a2luZCxpZH09cGFyc2VXYWxsZXRTbG90KHdhbGxldE9iamVjdHMsc2xvdCk7XG5yZXR1cm4ga2luZD9cbnByb3ZpZGVWYWwod2FsbGV0T2JqZWN0c1traW5kXSxpZCxpZmFjZSk6XG5zbG90VG9WYWwuZnJvbUJvYXJkKHNsb3QsaWZhY2UpO1xuIH19O1xuXG5cbmNvbnN0IHZhbFRvU2xvdD17XG5mcm9tQm9hcmQ6KHZhbCk9PmJvYXJkT2JqZWN0cy5ieVZhbC5nZXQodmFsKSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmZyb21NeVdhbGxldDoodmFsKT0+e1xuY29uc3Qga2luZD1maW5kS2V5KHdhbGxldE9iamVjdHMsKGspPT53YWxsZXRPYmplY3RzW2tdLmJ5VmFsLmhhcyh2YWwpKTtcbmlmKGtpbmQ9PT11bmRlZmluZWQpe1xudGhyb3cgRmFpbCBgY2Fubm90IHNlcmlhbGl6ZSB1bnJlZ2lzdGVyZWQgJHt2YWx9YDtcbiB9XG5cbmNvbnN0IGlkPXdhbGxldE9iamVjdHNba2luZF0uYnlWYWwuZ2V0KHZhbCk7XG5yZXR1cm4gbWFrZVdhbGxldFNsb3Qod2FsbGV0T2JqZWN0cyxraW5kLGlkKTtcbiB9fTtcblxuXG5jb25zdCBtYXJzaGFsPXtcbmZyb21Cb2FyZDptYWtlTWFyc2hhbCh2YWxUb1Nsb3QuZnJvbUJvYXJkLHNsb3RUb1ZhbC5mcm9tQm9hcmQse1xubWFyc2hhbE5hbWU6J2Zyb21Cb2FyZCcsXG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSksXG5cbmZyb21NeVdhbGxldDptYWtlTWFyc2hhbCh2YWxUb1Nsb3QuZnJvbU15V2FsbGV0LHNsb3RUb1ZhbC5mcm9tTXlXYWxsZXQse1xubWFyc2hhbE5hbWU6J2Zyb21NeVdhbGxldCcsXG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSl9O1xuXG5cblxucmV0dXJuIGhhcmRlbih7XG4vKlxuXG5cbiAgICAgKi9cbmluaXRCb2FyZElkOihpZCx2YWwpPT57XG5pbml0U2xvdFZhbChib2FyZE9iamVjdHMsaWQsdmFsKTtcbiB9LFxuLypcblxuXG4gICAgICovXG5lbnN1cmVCb2FyZElkOihpZCx2YWwpPT57XG5pZihib2FyZE9iamVjdHMuYnlWYWwuaGFzKHZhbCkpe1xuYXNzZXJ0LmVxdWFsKGJvYXJkT2JqZWN0cy5ieVZhbC5nZXQodmFsKSxpZCk7XG5yZXR1cm47XG4gfVxuaW5pdFNsb3RWYWwoYm9hcmRPYmplY3RzLGlkLHZhbCk7XG4gfSxcbmZyb21NeVdhbGxldDpGYXIoJ3dhbGxldCBtYXJzaGFsbGVyJyx7Li4ubWFyc2hhbC5mcm9tTXlXYWxsZXR9KSxcbmZyb21Cb2FyZDpGYXIoJ2JvYXJkIG1hcnNoYWxsZXInLHsuLi5tYXJzaGFsLmZyb21Cb2FyZH0pfSk7XG5cbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZUltcG9ydENvbnRleHQobWFrZUltcG9ydENvbnRleHQpO1xuY29uc3QgbWFrZVByZXNlbmNlPShpZmFjZSxoYW5kbGVyKT0+e1xubGV0IG9iajtcblxudm9pZCBuZXcgSGFuZGxlZFByb21pc2UoKHJlc29sdmUscmVqZWN0LHJlc29sdmVXaXRoUHJlc2VuY2UpPT57XG5vYmo9cmVzb2x2ZVdpdGhQcmVzZW5jZShoYW5kbGVyKTtcbiB9KTtcbmFzc2VydChvYmopO1xucmV0dXJuIFJlbW90YWJsZShpZmFjZSx1bmRlZmluZWQsb2JqKTtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VMb2dnaW5nUHJlc2VuY2U9KGlmYWNlLGxvZyk9Pntcbi8qICAgICAgICAgICAgICAqLyAvL1xuY29uc3QgaXQ9bWFrZVByZXNlbmNlKGlmYWNlLHtcbmFwcGx5TWV0aG9kOih0YXJnZXQsbWV0aG9kLGFyZ3MpPT57XG5sb2coaGFyZGVuKFsnYXBwbHlNZXRob2QnLHRhcmdldCxtZXRob2QsYXJnc10pKTtcbiB9LFxuYXBwbHlGdW5jdGlvbjoodGFyZ2V0LGFyZ3MpPT57XG5sb2coaGFyZGVuKFsnYXBwbHlGdW5jdGlvbicsdGFyZ2V0LGFyZ3NdKSk7XG4gfX0pO1xuXG5yZXR1cm4gaXQ7XG4gfTskaOKAjV9vbmNlLm1ha2VMb2dnaW5nUHJlc2VuY2UobWFrZUxvZ2dpbmdQcmVzZW5jZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRXhwb3J0Q29udGV4dCI6WyJtYWtlRXhwb3J0Q29udGV4dCJdLCJtYWtlSW1wb3J0Q29udGV4dCI6WyJtYWtlSW1wb3J0Q29udGV4dCJdLCJtYWtlTG9nZ2luZ1ByZXNlbmNlIjpbIm1ha2VMb2dnaW5nUHJlc2VuY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAqSnWwJwNAACcDQAAIQAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyIsIi4vc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsIi4vc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiLCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qcyIsIkBlbmRvL2V4byIsIi4vbGVnYWN5L2xlZ2FjeU1hcC5qcyIsIi4vbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiLCIuL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5IiwiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzcyIsIm11c3RNYXRjaCIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCB0eXBlbGVzc011c3RNYXRjaDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wibXVzdE1hdGNoXCIsIFskaOKAjV9hID0+ICh0eXBlbGVzc011c3RNYXRjaCA9ICRo4oCNX2EpXV1dXSxbXCIuL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanNcIiwgW11dLFtcIi4vc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanNcIiwgW11dLFtcIi4vc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qc1wiLCBbXV0sW1wiQGVuZG8vZXhvXCIsIFtdXSxbXCIuL2xlZ2FjeS9sZWdhY3lNYXAuanNcIiwgW11dLFtcIi4vbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanNcIiwgW11dLFtcIi4vdHlwZXMuanNcIiwgW11dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbXVzdE1hdGNoPXR5cGVsZXNzTXVzdE1hdGNoOyRo4oCNX29uY2UubXVzdE1hdGNoKG11c3RNYXRjaCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiOltbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qcyI6W1sibWFrZVNjYWxhclNldFN0b3JlIiwibWFrZVNjYWxhclNldFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanMiOltbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyI6W1sibWFrZVNjYWxhck1hcFN0b3JlIiwibWFrZVNjYWxhck1hcFN0b3JlIl1dLCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qcyI6W1sicHJvdmlkZUxhenkiLCJwcm92aWRlTGF6eSJdXSwiQGVuZG8vcGF0dGVybnMiOltbImlzS2V5IiwiaXNLZXkiXSxbImFzc2VydEtleSIsImFzc2VydEtleSJdLFsiYXNzZXJ0U2NhbGFyS2V5IiwiYXNzZXJ0U2NhbGFyS2V5Il0sWyJtYWtlQ29weVNldCIsIm1ha2VDb3B5U2V0Il0sWyJnZXRDb3B5U2V0S2V5cyIsImdldENvcHlTZXRLZXlzIl0sWyJtYWtlQ29weUJhZyIsIm1ha2VDb3B5QmFnIl0sWyJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyIsIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIl0sWyJnZXRDb3B5QmFnRW50cmllcyIsImdldENvcHlCYWdFbnRyaWVzIl0sWyJtYWtlQ29weU1hcCIsIm1ha2VDb3B5TWFwIl0sWyJnZXRDb3B5TWFwRW50cmllcyIsImdldENvcHlNYXBFbnRyaWVzIl0sWyJjb2VyY2VUb0VsZW1lbnRzIiwiY29lcmNlVG9FbGVtZW50cyJdLFsiY29lcmNlVG9CYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIl0sWyJjb21wYXJlS2V5cyIsImNvbXBhcmVLZXlzIl0sWyJrZXlMVCIsImtleUxUIl0sWyJrZXlMVEUiLCJrZXlMVEUiXSxbImtleUVRIiwia2V5RVEiXSxbImtleUdURSIsImtleUdURSJdLFsia2V5R1QiLCJrZXlHVCJdLFsiZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNJc1N1cGVyc2V0Il0sWyJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzRGlzam9pbnQiXSxbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzQ29tcGFyZSJdLFsiZWxlbWVudHNVbmlvbiIsImVsZW1lbnRzVW5pb24iXSxbImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiJdLFsiZWxlbWVudHNJbnRlcnNlY3Rpb24iLCJlbGVtZW50c0ludGVyc2VjdGlvbiJdLFsiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IiwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0Il0sWyJzZXRJc1N1cGVyc2V0Iiwic2V0SXNTdXBlcnNldCJdLFsic2V0SXNEaXNqb2ludCIsInNldElzRGlzam9pbnQiXSxbInNldENvbXBhcmUiLCJzZXRDb21wYXJlIl0sWyJzZXRVbmlvbiIsInNldFVuaW9uIl0sWyJzZXREaXNqb2ludFVuaW9uIiwic2V0RGlzam9pbnRVbmlvbiJdLFsic2V0SW50ZXJzZWN0aW9uIiwic2V0SW50ZXJzZWN0aW9uIl0sWyJzZXREaXNqb2ludFN1YnRyYWN0Iiwic2V0RGlzam9pbnRTdWJ0cmFjdCJdLFsiYmFnSXNTdXBlcmJhZyIsImJhZ0lzU3VwZXJiYWciXSxbImJhZ0NvbXBhcmUiLCJiYWdDb21wYXJlIl0sWyJiYWdVbmlvbiIsImJhZ1VuaW9uIl0sWyJiYWdJbnRlcnNlY3Rpb24iLCJiYWdJbnRlcnNlY3Rpb24iXSxbImJhZ0Rpc2pvaW50U3VidHJhY3QiLCJiYWdEaXNqb2ludFN1YnRyYWN0Il0sWyJNIiwiTSJdLFsiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIl0sWyJpc1BhdHRlcm4iLCJpc1BhdHRlcm4iXSxbImFzc2VydFBhdHRlcm4iLCJhc3NlcnRQYXR0ZXJuIl0sWyJtYXRjaGVzIiwibWF0Y2hlcyJdLFsiaXNDb3B5U2V0IiwiaXNDb3B5U2V0Il0sWyJpc0NvcHlNYXAiLCJpc0NvcHlNYXAiXV0sIkBlbmRvL2V4byI6W1siaW5pdEVtcHR5IiwiaW5pdEVtcHR5Il0sWyJkZWZpbmVFeG9DbGFzcyIsImRlZmluZUV4b0NsYXNzIl0sWyJkZWZpbmVFeG9DbGFzc0tpdCIsImRlZmluZUV4b0NsYXNzS2l0Il0sWyJtYWtlRXhvIiwibWFrZUV4byJdXSwiLi9sZWdhY3kvbGVnYWN5TWFwLmpzIjpbWyJtYWtlTGVnYWN5TWFwIiwibWFrZUxlZ2FjeU1hcCJdXSwiLi9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyI6W1sibWFrZUxlZ2FjeVdlYWtNYXAiLCJtYWtlTGVnYWN5V2Vha01hcCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtdXN0TWF0Y2giOlsibXVzdE1hdGNoIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANezrH4/BQAAPwUAACwAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlTGVnYWN5TWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHE7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VMZWdhY3lNYXA9KHRhZz0na2V5Jyk9PntcbmNvbnN0IG09bmV3IE1hcCgpO1xuY29uc3QgYXNzZXJ0S2V5RG9lc05vdEV4aXN0PShrZXkpPT5cbiFtLmhhcyhrZXkpfHxGYWlsIGAke3EodGFnKX0gYWxyZWFkeSByZWdpc3RlcmVkOiAke2tleX1gO1xuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbm0uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIG0uaGFzKGtleSk7XG4gfSxcbmluaXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleURvZXNOb3RFeGlzdChrZXkpO1xubS5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZ2V0OihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbnJldHVybiBtLmdldChrZXkpO1xuIH0sXG5zZXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xubS5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbm0uZGVsZXRlKGtleSk7XG4gfSxcbmtleXM6KCk9Pm0ua2V5cygpLFxudmFsdWVzOigpPT5tLnZhbHVlcygpLFxuZW50cmllczooKT0+bS5lbnRyaWVzKCksXG5nZXRTaXplOigpPT5tLnNpemUsXG5jbGVhcjooKT0+bS5jbGVhcigpfSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZUxlZ2FjeU1hcChtYWtlTGVnYWN5TWFwKTtcbmhhcmRlbihtYWtlTGVnYWN5TWFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VMZWdhY3lNYXAiOlsibWFrZUxlZ2FjeU1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAyAVX2AQUAAAEFAAAwAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIm1ha2VMZWdhY3lXZWFrTWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHE7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTGVnYWN5V2Vha01hcD0odGFnPSdrZXknKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd209bmV3IFdlYWtNYXAoKTtcbmNvbnN0IGFzc2VydEtleURvZXNOb3RFeGlzdD0oa2V5KT0+XG4hd20uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7a2V5fWA7XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9Plxud20uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIHdtLmhhcyhrZXkpO1xuIH0sXG5pbml0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlEb2VzTm90RXhpc3Qoa2V5KTtcbndtLnNldChrZXksdmFsdWUpO1xuIH0sXG5nZXQ6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuLy9cbnJldHVybiAoLyogICAgICAgICAgICAqL3dtLmdldChrZXkpKTtcbiB9LFxuc2V0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbndtLnNldChrZXksdmFsdWUpO1xuIH0sXG5kZWxldGU6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xud20uZGVsZXRlKGtleSk7XG4gfX0pO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VMZWdhY3lXZWFrTWFwKG1ha2VMZWdhY3lXZWFrTWFwKTtcbmhhcmRlbihtYWtlTGVnYWN5V2Vha01hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTGVnYWN5V2Vha01hcCI6WyJtYWtlTGVnYWN5V2Vha01hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACXjpc7vRAAAL0QAAAxAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIiwiLi9zY2FsYXJXZWFrTWFwU3RvcmUuanMiLCIuL3N0b3JlLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsibWFrZU1hcFN0b3JlTWV0aG9kcyIsIm1ha2VTY2FsYXJNYXBTdG9yZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYXIsYXNzZXJ0UGFzc2FibGUsZmlsdGVySXRlcmFibGUsbWFwSXRlcmFibGUsY29tcGFyZVJhbmssYXNzZXJ0U2NhbGFyS2V5LG1ha2VDb3B5TWFwLG1hdGNoZXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4sbWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMsbWFrZUN1cnJlbnRLZXlzS2l0OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjigI1fYSldXSxbXCJmaWx0ZXJJdGVyYWJsZVwiLCBbJGjigI1fYSA9PiAoZmlsdGVySXRlcmFibGUgPSAkaOKAjV9hKV1dLFtcIm1hcEl0ZXJhYmxlXCIsIFskaOKAjV9hID0+IChtYXBJdGVyYWJsZSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJjb21wYXJlUmFua1wiLCBbJGjigI1fYSA9PiAoY29tcGFyZVJhbmsgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImFzc2VydFNjYWxhcktleVwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0U2NhbGFyS2V5ID0gJGjigI1fYSldXSxbXCJtYWtlQ29weU1hcFwiLCBbJGjigI1fYSA9PiAobWFrZUNvcHlNYXAgPSAkaOKAjV9hKV1dLFtcIm1hdGNoZXNcIiwgWyRo4oCNX2EgPT4gKG1hdGNoZXMgPSAkaOKAjV9hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAobXVzdE1hdGNoID0gJGjigI1fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjigI1fYSldXV1dLFtcIi4vc2NhbGFyV2Vha01hcFN0b3JlLmpzXCIsIFtbXCJtYWtlV2Vha01hcFN0b3JlTWV0aG9kc1wiLCBbJGjigI1fYSA9PiAobWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMgPSAkaOKAjV9hKV1dXV0sW1wiLi9zdG9yZS11dGlscy5qc1wiLCBbW1wibWFrZUN1cnJlbnRLZXlzS2l0XCIsIFskaOKAjV9hID0+IChtYWtlQ3VycmVudEtleXNLaXQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1hcFN0b3JlTWV0aG9kcz0oXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydEtleU9rVG9EZWxldGU9dW5kZWZpbmVkLFxudGFnPSdrZXknKT0+XG57XG5jb25zdHthc3NlcnRVcGRhdGVPbkFkZCxhc3NlcnRVcGRhdGVPbkRlbGV0ZSxpdGVyYWJsZUtleXN9PVxubWFrZUN1cnJlbnRLZXlzS2l0KFxuKCk9PmpzbWFwLmtleXMoKSxcbihrKT0+anNtYXAuaGFzKGspLFxuY29tcGFyZVJhbmssXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlLFxudGFnKTtcblxuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IGtleXM9KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGl0ZXJhYmxlS2V5cztcbiB9XG5jb25zdCBmaWx0ZXI9KGspPT57XG5pZihrZXlQYXR0IT09dW5kZWZpbmVkJiYhbWF0Y2hlcyhrLGtleVBhdHQpKXtcbnJldHVybiBmYWxzZTtcbiB9XG4vL1xuaWYodmFsdWVQYXR0IT09dW5kZWZpbmVkJiYhbWF0Y2hlcyhqc21hcC5nZXQoayksdmFsdWVQYXR0KSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcbnJldHVybiBmaWx0ZXJJdGVyYWJsZShpdGVyYWJsZUtleXMsZmlsdGVyKTtcbiB9O1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHZhbHVlcz0oa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PlxubWFwSXRlcmFibGUoa2V5cyhrZXlQYXR0LHZhbHVlUGF0dCksKGspPT4vKiAgICAgICAgICAgICovanNtYXAuZ2V0KGspKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBlbnRyaWVzPShrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5tYXBJdGVyYWJsZShrZXlzKGtleVBhdHQsdmFsdWVQYXR0KSwoayk9PltcbmssXG4vKiAgICAgICAgICAgICovanNtYXAuZ2V0KGspXSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG4uLi5tYWtlV2Vha01hcFN0b3JlTWV0aG9kcyhcbmpzbWFwLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxudGFnKSxcblxua2V5cyxcbnZhbHVlcyxcbmVudHJpZXMsXG5cbnNuYXBzaG90OihrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5tYWtlQ29weU1hcChlbnRyaWVzKGtleVBhdHQsdmFsdWVQYXR0KSksXG5cbmdldFNpemU6KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQmJnZhbHVlUGF0dD09PXVuZGVmaW5lZD9cbmpzbWFwLnNpemU6XG5bLi4ua2V5cyhrZXlQYXR0LHZhbHVlUGF0dCldLmxlbmd0aCxcblxuY2xlYXI6KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQpe1xuanNtYXAuY2xlYXIoKTtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIGtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpKXtcbmpzbWFwLmRlbGV0ZShrZXkpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VNYXBTdG9yZU1ldGhvZHMobWFrZU1hcFN0b3JlTWV0aG9kcyk7XG5jb25zdCAgICAgICAgbWFrZVNjYWxhck1hcFN0b3JlPShcbnRhZz0na2V5JyxcbntrZXlTaGFwZT11bmRlZmluZWQsdmFsdWVTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc21hcD1uZXcgTWFwKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4odmFsdWVTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLVk9rVG9TZXQ9KF9rZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbih2YWx1ZSk7XG5cbmFzc2VydFBhc3NhYmxlKHZhbHVlKTtcbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKHZhbHVlLHZhbHVlU2hhcGUsJ21hcFN0b3JlIHZhbHVlJyk7XG4gfVxuIH07XG5cbmNvbnN0IGFzc2VydEtWT2tUb0FkZD0oa2V5LHZhbHVlKT0+e1xuLy9cbi8vXG5oYXJkZW4oa2V5KTtcblxuYXNzZXJ0U2NhbGFyS2V5KGtleSk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2goa2V5LGtleVNoYXBlLCdtYXBTdG9yZSBrZXknKTtcbiB9XG5hc3NlcnRLVk9rVG9TZXQoa2V5LHZhbHVlKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIE1hcFN0b3JlIG9mICR7cSh0YWcpfWAse1xuLi4ubWFrZU1hcFN0b3JlTWV0aG9kcyhcbmpzbWFwLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxudW5kZWZpbmVkLFxudGFnKX0pO1xuXG5cbiB9OyRo4oCNX29uY2UubWFrZVNjYWxhck1hcFN0b3JlKG1ha2VTY2FsYXJNYXBTdG9yZSk7XG5oYXJkZW4obWFrZVNjYWxhck1hcFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VNYXBTdG9yZU1ldGhvZHMiOlsibWFrZU1hcFN0b3JlTWV0aG9kcyJdLCJtYWtlU2NhbGFyTWFwU3RvcmUiOlsibWFrZVNjYWxhck1hcFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAI1JSKjqCwAA6gsAADEAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiLCIuL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsIi4vc3RvcmUtdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlU2NhbGFyU2V0U3RvcmUiLCJtYWtlU2V0U3RvcmVNZXRob2RzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhcixmaWx0ZXJJdGVyYWJsZSxjb21wYXJlUmFuayxhc3NlcnRTY2FsYXJLZXksbWFrZUNvcHlTZXQsbWF0Y2hlcyxtdXN0TWF0Y2gsYXNzZXJ0UGF0dGVybixtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyxtYWtlQ3VycmVudEtleXNLaXQ7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXSxbXCJmaWx0ZXJJdGVyYWJsZVwiLCBbJGjigI1fYSA9PiAoZmlsdGVySXRlcmFibGUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiY29tcGFyZVJhbmtcIiwgWyRo4oCNX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJhc3NlcnRTY2FsYXJLZXlcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFNjYWxhcktleSA9ICRo4oCNX2EpXV0sW1wibWFrZUNvcHlTZXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VDb3B5U2V0ID0gJGjigI1fYSldXSxbXCJtYXRjaGVzXCIsIFskaOKAjV9hID0+IChtYXRjaGVzID0gJGjigI1fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRo4oCNX2EgPT4gKG11c3RNYXRjaCA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRo4oCNX2EpXV1dXSxbXCIuL3NjYWxhcldlYWtTZXRTdG9yZS5qc1wiLCBbW1wibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHNcIiwgWyRo4oCNX2EgPT4gKG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzID0gJGjigI1fYSldXV1dLFtcIi4vc3RvcmUtdXRpbHMuanNcIiwgW1tcIm1ha2VDdXJyZW50S2V5c0tpdFwiLCBbJGjigI1fYSA9PiAobWFrZUN1cnJlbnRLZXlzS2l0ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNldFN0b3JlTWV0aG9kcz0oXG5qc3NldCxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmNvbnN0e2Fzc2VydFVwZGF0ZU9uQWRkLGFzc2VydFVwZGF0ZU9uRGVsZXRlLGl0ZXJhYmxlS2V5c309XG5tYWtlQ3VycmVudEtleXNLaXQoXG4oKT0+anNzZXQua2V5cygpLFxuKGspPT5qc3NldC5oYXMoayksXG5jb21wYXJlUmFuayxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlLFxua2V5TmFtZSk7XG5cblxuLypcblxuXG4gICAqL1xuY29uc3Qga2V5cz0oa2V5UGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQ/XG5pdGVyYWJsZUtleXM6XG5maWx0ZXJJdGVyYWJsZShpdGVyYWJsZUtleXMsKGspPT5tYXRjaGVzKGssa2V5UGF0dCkpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbi4uLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKFxuanNzZXQsXG5hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxua2V5TmFtZSksXG5cblxua2V5cyxcblxudmFsdWVzOmtleXMsXG5cbnNuYXBzaG90OihrZXlQYXR0PXVuZGVmaW5lZCk9Pm1ha2VDb3B5U2V0KGtleXMoa2V5UGF0dCkpLFxuXG5nZXRTaXplOihrZXlQYXR0PXVuZGVmaW5lZCk9Plxua2V5UGF0dD09PXVuZGVmaW5lZD9qc3NldC5zaXplOlsuLi5rZXlzKGtleVBhdHQpXS5sZW5ndGgsXG5cbmNsZWFyOihrZXlQYXR0PXVuZGVmaW5lZCk9PntcbmlmKGtleVBhdHQ9PT11bmRlZmluZWQpe1xuanNzZXQuY2xlYXIoKTtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIGtleXMoa2V5UGF0dCkpe1xuanNzZXQuZGVsZXRlKGtleSk7XG4gfVxuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlU2V0U3RvcmVNZXRob2RzKG1ha2VTZXRTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJTZXRTdG9yZT0oXG50YWc9J2tleScsXG57a2V5U2hhcGU9dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QganNzZXQ9bmV3IFNldCgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLZXlPa1RvQWRkPShrZXkpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xuXG5hc3NlcnRTY2FsYXJLZXkoa2V5KTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ3NldFN0b3JlIGtleScpO1xuIH1cbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFNldFN0b3JlIG9mICR7cSh0YWcpfWAse1xuLi4ubWFrZVNldFN0b3JlTWV0aG9kcyhqc3NldCxhc3NlcnRLZXlPa1RvQWRkLHVuZGVmaW5lZCx0YWcpfSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZVNjYWxhclNldFN0b3JlKG1ha2VTY2FsYXJTZXRTdG9yZSk7XG5oYXJkZW4obWFrZVNjYWxhclNldFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VTZXRTdG9yZU1ldGhvZHMiOlsibWFrZVNldFN0b3JlTWV0aG9kcyJdLCJtYWtlU2NhbGFyU2V0U3RvcmUiOlsibWFrZVNjYWxhclNldFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEqRF/XJDQAAyQ0AADUAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIiwibWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxGYXIsYXNzZXJ0UGFzc2FibGUscGFzc1N0eWxlT2YsZ2V0Q29weU1hcEVudHJpZXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4saXNDb3B5TWFwOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjigI1fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjigI1fYSA9PiAocGFzc1N0eWxlT2YgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImdldENvcHlNYXBFbnRyaWVzXCIsIFskaOKAjV9hID0+IChnZXRDb3B5TWFwRW50cmllcyA9ICRo4oCNX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaOKAjV9hID0+IChtdXN0TWF0Y2ggPSAkaOKAjV9hKV1dLFtcImFzc2VydFBhdHRlcm5cIiwgWyRo4oCNX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaOKAjV9hKV1dLFtcImlzQ29weU1hcFwiLCBbJGjigI1fYSA9PiAoaXNDb3B5TWFwID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzPShcbmpzbWFwLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5jb25zdCBhc3NlcnRLZXlEb2VzTm90RXhpc3Q9KGtleSk9PlxuIWpzbWFwLmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IGFscmVhZHkgcmVnaXN0ZXJlZDogJHtrZXl9YDtcblxuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbmpzbWFwLmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IG5vdCBmb3VuZDogJHtrZXl9YDtcblxucmV0dXJuIGhhcmRlbih7XG5oYXM6KGtleSk9Pntcbi8vXG4vL1xuLy9cbnJldHVybiBqc21hcC5oYXMoa2V5KTtcbiB9LFxuZ2V0OihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbi8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgKi9qc21hcC5nZXQoa2V5KSk7XG4gfSxcblxuaW5pdDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RG9lc05vdEV4aXN0KGtleSk7XG5hc3NlcnRLVk9rVG9BZGQoa2V5LHZhbHVlKTtcbmpzbWFwLnNldChrZXksdmFsdWUpO1xuIH0sXG5zZXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuYXNzZXJ0S1ZPa1RvU2V0KGtleSx2YWx1ZSk7XG5qc21hcC5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbmlmKGFzc2VydEtleU9rVG9EZWxldGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0S2V5T2tUb0RlbGV0ZShrZXkpO1xuIH1cbmpzbWFwLmRlbGV0ZShrZXkpO1xuIH0sXG5cbmFkZEFsbDooZW50cmllcyk9PntcbmlmKHR5cGVvZiBlbnRyaWVzW1N5bWJvbC5pdGVyYXRvcl0hPT0nZnVuY3Rpb24nKXtcbmlmKE9iamVjdC5pc0Zyb3plbihlbnRyaWVzKSYmaXNDb3B5TWFwKGVudHJpZXMpKXtcbi8vXG5lbnRyaWVzPWdldENvcHlNYXBFbnRyaWVzKGVudHJpZXMpO1xuIH1lbHNle1xuRmFpbCBgcHJvdmlkZWQgZGF0YSBzb3VyY2UgaXMgbm90IGl0ZXJhYmxlOiAke2VudHJpZXN9YDtcbiB9XG4gfVxuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9lbnRyaWVzKXtcbi8vXG5hc3NlcnRLVk9rVG9BZGQoa2V5LHZhbHVlKTtcbmpzbWFwLnNldChrZXksdmFsdWUpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyV2Vha01hcFN0b3JlPShcbnRhZz0na2V5Jyxcbntsb25nTGl2ZWQ9dHJ1ZSxrZXlTaGFwZT11bmRlZmluZWQsdmFsdWVTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc21hcD1uZXcobG9uZ0xpdmVkP1dlYWtNYXA6TWFwKSgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuaWYodmFsdWVTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKHZhbHVlU2hhcGUpO1xuIH1cblxuY29uc3QgYXNzZXJ0S1ZPa1RvU2V0PShfa2V5LHZhbHVlKT0+e1xuLy9cbi8vXG5oYXJkZW4odmFsdWUpO1xuXG5hc3NlcnRQYXNzYWJsZSh2YWx1ZSk7XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaCh2YWx1ZSx2YWx1ZVNoYXBlLCd3ZWFrTWFwU3RvcmUgdmFsdWUnKTtcbiB9XG4gfTtcblxuY29uc3QgYXNzZXJ0S1ZPa1RvQWRkPShrZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xucGFzc1N0eWxlT2Yoa2V5KT09PSdyZW1vdGFibGUnfHxcbkZhaWwgYE9ubHkgcmVtb3RhYmxlcyBjYW4gYmUga2V5cyBvZiBzY2FsYXIgV2Vha01hcFN0b3JlczogJHtrZXl9YDtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ3dlYWtNYXBTdG9yZSBrZXknKTtcbiB9XG5hc3NlcnRLVk9rVG9TZXQoa2V5LHZhbHVlKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFdlYWtNYXBTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKFxuanNtYXAsXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG51bmRlZmluZWQsXG50YWcpfSk7XG5cblxuIH07JGjigI1fb25jZS5tYWtlU2NhbGFyV2Vha01hcFN0b3JlKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMiOlsibWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhcldlYWtNYXBTdG9yZSI6WyJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACt5d6eKCgAAigoAADUAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIiwibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxGYXIscGFzc1N0eWxlT2YsZ2V0Q29weVNldEtleXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4saXNDb3B5U2V0OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjigI1fYSA9PiAoZ2V0Q29weVNldEtleXMgPSAkaOKAjV9hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAobXVzdE1hdGNoID0gJGjigI1fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjigI1fYSldXSxbXCJpc0NvcHlTZXRcIiwgWyRo4oCNX2EgPT4gKGlzQ29weVNldCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlV2Vha1NldFN0b3JlTWV0aG9kcz0oXG5qc3NldCxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmNvbnN0IGFzc2VydEtleUV4aXN0cz0oa2V5KT0+XG5qc3NldC5oYXMoa2V5KXx8RmFpbCBgJHtxKGtleU5hbWUpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5cbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4ganNzZXQuaGFzKGtleSk7XG4gfSxcblxuYWRkOihrZXkpPT57XG5hc3NlcnRLZXlPa1RvQWRkKGtleSk7XG5qc3NldC5hZGQoa2V5KTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbmlmKGFzc2VydEtleU9rVG9EZWxldGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0S2V5T2tUb0RlbGV0ZShrZXkpO1xuIH1cbmpzc2V0LmRlbGV0ZShrZXkpO1xuIH0sXG5cbmFkZEFsbDooa2V5cyk9PntcbmlmKHR5cGVvZiBrZXlzW1N5bWJvbC5pdGVyYXRvcl0hPT0nZnVuY3Rpb24nKXtcbmlmKE9iamVjdC5pc0Zyb3plbihrZXlzKSYmaXNDb3B5U2V0KGtleXMpKXtcbi8vXG5rZXlzPWdldENvcHlTZXRLZXlzKGtleXMpO1xuIH1lbHNle1xuRmFpbCBgcHJvdmlkZWQgZGF0YSBzb3VyY2UgaXMgbm90IGl0ZXJhYmxlOiAke2tleXN9YDtcbiB9XG4gfVxuZm9yKGNvbnN0IGtleSBvZi8qICAgICAgICAgICAgICAgICAgICAgICova2V5cyl7XG5hc3NlcnRLZXlPa1RvQWRkKGtleSk7XG5qc3NldC5hZGQoa2V5KTtcbiB9XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMobWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJXZWFrU2V0U3RvcmU9KFxudGFnPSdrZXknLFxue2xvbmdMaXZlZD10cnVlLGtleVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzc2V0PW5ldyhsb25nTGl2ZWQ/V2Vha1NldDpTZXQpKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtleU9rVG9BZGQ9KGtleSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5wYXNzU3R5bGVPZihrZXkpPT09J3JlbW90YWJsZSd8fFxuRmFpbCBgT25seSByZW1vdGFibGVzIGNhbiBiZSBrZXlzIG9mIHNjYWxhciBXZWFrU3RvcmVzOiAke2tleX1gO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnd2Vha1NldFN0b3JlIGtleScpO1xuIH1cbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFdlYWtTZXRTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKGpzc2V0LGFzc2VydEtleU9rVG9BZGQsdW5kZWZpbmVkLHRhZyl9KTtcblxuIH07JGjigI1fb25jZS5tYWtlU2NhbGFyV2Vha1NldFN0b3JlKG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMiOlsibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhcldlYWtTZXRTdG9yZSI6WyJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAK1WK+LADgAAwA4AAC4AAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbImFwcGVuZFRvU3RvcmVkQXJyYXkiLCJpc0NvcHlNYXAiLCJpc0NvcHlTZXQiLCJtYWtlQXRvbWljUHJvdmlkZXIiLCJtYWtlQ3VycmVudEtleXNLaXQiLCJwcm92aWRlTGF6eSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEZhcixNLG1hdGNoZXM7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJtYXRjaGVzXCIsIFskaOKAjV9hID0+IChtYXRjaGVzID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5U2V0PShzKT0+bWF0Y2hlcyhzLE0uc2V0KCkpO1xuXG4vL1xuLy9cbi8qXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmlzQ29weVNldChpc0NvcHlTZXQpO1xuY29uc3QgICAgICAgIGlzQ29weU1hcD0obSk9Pm1hdGNoZXMobSxNLm1hcCgpKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5pc0NvcHlNYXAoaXNDb3B5TWFwKTtcbmNvbnN0ICAgICAgICBtYWtlQ3VycmVudEtleXNLaXQ9KFxuZ2V0UmF3S2V5cyxcbmNoZWNrSGFzLFxuY29tcGFyZSxcbmFzc2VydE9rVG9BZGQsXG5hc3NlcnRPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmxldCB1cGRhdGVDb3VudD0wO1xubGV0IHNvcnRlZEtleXNNZW1vO1xuXG5jb25zdCBhc3NlcnRVcGRhdGVPbkFkZD0oayx2PXVuZGVmaW5lZCk9PntcbmFzc2VydE9rVG9BZGQoayx2KTtcbnVwZGF0ZUNvdW50Kz0xO1xuc29ydGVkS2V5c01lbW89dW5kZWZpbmVkO1xuIH07XG5cbmNvbnN0IGFzc2VydFVwZGF0ZU9uRGVsZXRlPShrKT0+YXNzZXJ0T2tUb0RlbGV0ZSYmYXNzZXJ0T2tUb0RlbGV0ZShrKTtcblxuY29uc3QgZ2V0U29ydGVkS2V5cz0oKT0+e1xuaWYoc29ydGVkS2V5c01lbW89PT11bmRlZmluZWQpe1xuc29ydGVkS2V5c01lbW89aGFyZGVuKFsuLi5nZXRSYXdLZXlzKCldLnNvcnQoY29tcGFyZSkpO1xuIH1cbnJldHVybiBzb3J0ZWRLZXlzTWVtbztcbiB9O1xuXG5jb25zdCBpdGVyYWJsZUtleXM9RmFyKCdJdGVyYWJsZSBvZiBrZXlzJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgZ2VuZXJhdGlvbj11cGRhdGVDb3VudDtcbmdldFNvcnRlZEtleXMoKTtcbmNvbnN0IGxlbj1zb3J0ZWRLZXlzTWVtby5sZW5ndGg7XG5sZXQgaT0wO1xucmV0dXJuIEZhcignSXRlcmF0b3Igb2Yga2V5cycse1xubmV4dDooKT0+e1xuZ2VuZXJhdGlvbj09PXVwZGF0ZUNvdW50fHxGYWlsIGBTdG9yZSAke3Eoa2V5TmFtZSl9IGN1cnNvciBzdGFsZWA7XG4vL1xuLy9cbmZvcig7Oyl7XG5pZihpPGxlbil7XG5jb25zdCB2YWx1ZT1zb3J0ZWRLZXlzTWVtb1tpXTtcbmkrPTE7XG5pZihjaGVja0hhcyh2YWx1ZSkpe1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH1cbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9XG4gfVxuIH19KTtcblxuIH19KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmFzc2VydFVwZGF0ZU9uQWRkLFxuYXNzZXJ0VXBkYXRlT25EZWxldGUsXG5pdGVyYWJsZUtleXN9KTtcblxuIH07JGjigI1fb25jZS5tYWtlQ3VycmVudEtleXNLaXQobWFrZUN1cnJlbnRLZXlzS2l0KTtcbmhhcmRlbihtYWtlQ3VycmVudEtleXNLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcm92aWRlTGF6eT0obWFwU3RvcmUsa2V5LG1ha2VWYWx1ZSk9PntcbmlmKCFtYXBTdG9yZS5oYXMoa2V5KSl7XG5tYXBTdG9yZS5pbml0KGtleSxtYWtlVmFsdWUoa2V5KSk7XG4gfVxucmV0dXJuIG1hcFN0b3JlLmdldChrZXkpO1xuIH07JGjigI1fb25jZS5wcm92aWRlTGF6eShwcm92aWRlTGF6eSk7XG5oYXJkZW4ocHJvdmlkZUxhenkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQXRvbWljUHJvdmlkZXI9KHN0b3JlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwZW5kaW5nPW5ldyBNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUFzeW5jPShrZXksbWFrZVZhbHVlLGZpbmlzaFZhbHVlKT0+e1xuaWYoc3RvcmUuaGFzKGtleSkpe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShzdG9yZS5nZXQoa2V5KSk7XG4gfVxuaWYoIXBlbmRpbmcuaGFzKGtleSkpe1xuY29uc3QgdmFsUD1tYWtlVmFsdWUoa2V5KS5cbnRoZW4oKHYpPT57XG5zdG9yZS5pbml0KGtleSx2KTtcbnJldHVybiB2O1xuIH0pLlxudGhlbigodik9PntcbmlmKGZpbmlzaFZhbHVlKXtcbnJldHVybiBmaW5pc2hWYWx1ZShrZXksdikudGhlbigoKT0+dik7XG4gfVxucmV0dXJuIHY7XG4gfSkuXG5maW5hbGx5KCgpPT57XG5wZW5kaW5nLmRlbGV0ZShrZXkpO1xuIH0pO1xucGVuZGluZy5zZXQoa2V5LHZhbFApO1xuIH1cbmNvbnN0IHZhbFA9cGVuZGluZy5nZXQoa2V5KTtcbmFzc2VydCh2YWxQKTtcbnJldHVybiB2YWxQO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe3Byb3ZpZGVBc3luY30pO1xuIH07JGjigI1fb25jZS5tYWtlQXRvbWljUHJvdmlkZXIobWFrZUF0b21pY1Byb3ZpZGVyKTtcbmhhcmRlbihtYWtlQXRvbWljUHJvdmlkZXIpO1xuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFwcGVuZFRvU3RvcmVkQXJyYXk9KG1hcFN0b3JlLGtleSxpdGVtKT0+e1xuaWYobWFwU3RvcmUuaGFzKGtleSkpe1xuY29uc3QgZXh0YW50PW1hcFN0b3JlLmdldChrZXkpO1xubWFwU3RvcmUuc2V0KGtleSxoYXJkZW4oWy4uLmV4dGFudCxpdGVtXSkpO1xuIH1lbHNle1xubWFwU3RvcmUuaW5pdChrZXksaGFyZGVuKFtpdGVtXSkpO1xuIH1cbiB9OyRo4oCNX29uY2UuYXBwZW5kVG9TdG9yZWRBcnJheShhcHBlbmRUb1N0b3JlZEFycmF5KTtcbmhhcmRlbihhcHBlbmRUb1N0b3JlZEFycmF5KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzQ29weVNldCI6WyJpc0NvcHlTZXQiXSwiaXNDb3B5TWFwIjpbImlzQ29weU1hcCJdLCJtYWtlQ3VycmVudEtleXNLaXQiOlsibWFrZUN1cnJlbnRLZXlzS2l0Il0sInByb3ZpZGVMYXp5IjpbInByb3ZpZGVMYXp5Il0sIm1ha2VBdG9taWNQcm92aWRlciI6WyJtYWtlQXRvbWljUHJvdmlkZXIiXSwiYXBwZW5kVG9TdG9yZWRBcnJheSI6WyJhcHBlbmRUb1N0b3JlZEFycmF5Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAACEAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh0Bc3LIWAACyFgAAKAAAAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9leG8tdXRpbHMuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSIsIi4vdmF0LWRhdGEtYmluZGluZ3MuanMiXSwiZXhwb3J0cyI6WyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiLCJkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3MiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJpZ25vcmVDb250ZXh0IiwibWFrZUV4b1V0aWxzIiwicHJlcGFyZUV4byIsInByZXBhcmVFeG9DbGFzcyIsInByZXBhcmVFeG9DbGFzc0tpdCIsInByZXBhcmVLaW5kIiwicHJlcGFyZUtpbmRNdWx0aSIsInByZXBhcmVTaW5nbGV0b24iLCJwcm92aWRlS2luZEhhbmRsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaW5pdEVtcHR5LHByb3ZpZGUsZ2xvYmFsVmF0RGF0YTskaOKAjV9pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJpbml0RW1wdHlcIiwgWyRo4oCNX2EgPT4gKGluaXRFbXB0eSA9ICRo4oCNX2EpXV1dXSxbXCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzXCIsIFtbXCJwcm92aWRlXCIsIFskaOKAjV9hID0+IChwcm92aWRlID0gJGjigI1fYSldXSxbXCJWYXREYXRhXCIsIFskaOKAjV9hID0+IChnbG9iYWxWYXREYXRhID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vL1xuLypcblxuICovXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaWdub3JlQ29udGV4dD1cbihmbik9PlxuKF9jb250ZXh0LC4uLmFyZ3MpPT5cbmZuKC4uLmFyZ3MpOyRo4oCNX29uY2UuaWdub3JlQ29udGV4dChpZ25vcmVDb250ZXh0KTtcbmhhcmRlbihpZ25vcmVDb250ZXh0KTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZUV4b1V0aWxzPShWYXREYXRhKT0+e1xuY29uc3R7XG5kZWZpbmVLaW5kLFxuZGVmaW5lS2luZE11bHRpLFxuZGVmaW5lRHVyYWJsZUtpbmQsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpLFxubWFrZUtpbmRIYW5kbGV9PVxuVmF0RGF0YTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVLaW5kSGFuZGxlPShiYWdnYWdlLGtpbmROYW1lKT0+XG5wcm92aWRlKGJhZ2dhZ2UsIGAke2tpbmROYW1lfV9raW5kSGFuZGxlYCwoKT0+bWFrZUtpbmRIYW5kbGUoa2luZE5hbWUpKTtcbmhhcmRlbihwcm92aWRlS2luZEhhbmRsZSk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVLaW5kPShcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmluaXQsXG5iZWhhdmlvcixcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVLaW5kKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVLaW5kKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZUtpbmRNdWx0aT0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVLaW5kTXVsdGkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZVZpcnR1YWxFeG9DbGFzcz0odGFnLGludGVyZmFjZUd1YXJkLGluaXQsbWV0aG9kcyxvcHRpb25zKT0+XG4vL1xuZGVmaW5lS2luZCh0YWcsaW5pdCxtZXRob2RzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmR9KTtcblxuaGFyZGVuKGRlZmluZVZpcnR1YWxFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0PShcbnRhZyxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpPT5cblxuLy9cbmRlZmluZUtpbmRNdWx0aSh0YWcsaW5pdCxmYWNldHMse1xuLi4ub3B0aW9ucyxcbnRoaXNmdWxNZXRob2RzOnRydWUsXG5pbnRlcmZhY2VHdWFyZEtpdH0pO1xuXG5oYXJkZW4oZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWZpbmVEdXJhYmxlRXhvQ2xhc3M9KFxua2luZEhhbmRsZSxcbmludGVyZmFjZUd1YXJkLFxuaW5pdCxcbm1ldGhvZHMsXG5vcHRpb25zKT0+XG5cbi8vXG5kZWZpbmVEdXJhYmxlS2luZChraW5kSGFuZGxlLGluaXQsbWV0aG9kcyx7XG4uLi5vcHRpb25zLFxudGhpc2Z1bE1ldGhvZHM6dHJ1ZSxcbmludGVyZmFjZUd1YXJkfSk7XG5cbmhhcmRlbihkZWZpbmVEdXJhYmxlRXhvQ2xhc3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdD0oXG5raW5kSGFuZGxlLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxuZmFjZXRzLFxub3B0aW9ucyk9PlxuXG4vL1xuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aShraW5kSGFuZGxlLGluaXQsZmFjZXRzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmRLaXR9KTtcblxuaGFyZGVuKGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlRXhvQ2xhc3M9KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVFeG9DbGFzcyhcbnByb3ZpZGVLaW5kSGFuZGxlKGJhZ2dhZ2Usa2luZE5hbWUpLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUV4b0NsYXNzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG9DbGFzc0tpdD0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5mYWNldHMsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQoXG5wcm92aWRlS2luZEhhbmRsZShiYWdnYWdlLGtpbmROYW1lKSxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG89KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5tZXRob2RzLFxub3B0aW9ucz11bmRlZmluZWQpPT5cbntcbmNvbnN0IG1ha2VTaW5nbGV0b249cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0RW1wdHksXG5tZXRob2RzLFxub3B0aW9ucyk7XG5cblxucmV0dXJuIHByb3ZpZGUoYmFnZ2FnZSwgYCR7a2luZE5hbWV9X3NpbmdsZXRvbmAsKCk9Pm1ha2VTaW5nbGV0b24oKSk7XG4gfTtcbmhhcmRlbihwcmVwYXJlRXhvKTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVTaW5nbGV0b249KGJhZ2dhZ2Usa2luZE5hbWUsbWV0aG9kcyxvcHRpb25zPXVuZGVmaW5lZCk9PlxucHJlcGFyZUV4byhiYWdnYWdlLGtpbmROYW1lLHVuZGVmaW5lZCxtZXRob2RzLG9wdGlvbnMpO1xuaGFyZGVuKHByZXBhcmVTaW5nbGV0b24pO1xuXG5yZXR1cm4gaGFyZGVuKHtcbmRlZmluZVZpcnR1YWxFeG9DbGFzcyxcbmRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCxcbmRlZmluZUR1cmFibGVFeG9DbGFzcyxcbmRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG9DbGFzcyxcbnByZXBhcmVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG8sXG5cbnByZXBhcmVTaW5nbGV0b24sXG5wcm92aWRlS2luZEhhbmRsZSxcbnByZXBhcmVLaW5kLFxucHJlcGFyZUtpbmRNdWx0aX0pO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VFeG9VdGlscyhtYWtlRXhvVXRpbHMpO1xuXG5jb25zdCBnbG9iYWxFeG9VdGlscz1tYWtlRXhvVXRpbHMoZ2xvYmFsVmF0RGF0YSk7XG5cbmNvbnN0ICAgICAgIHtcbmRlZmluZVZpcnR1YWxFeG9DbGFzcyxcbmRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCxcbmRlZmluZUR1cmFibGVFeG9DbGFzcyxcbmRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG9DbGFzcyxcbnByZXBhcmVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG8sXG5wcmVwYXJlU2luZ2xldG9ufT1cbmdsb2JhbEV4b1V0aWxzO1xuXG4vKlxuXG4gKi8kaOKAjV9vbmNlLmRlZmluZVZpcnR1YWxFeG9DbGFzcyhkZWZpbmVWaXJ0dWFsRXhvQ2xhc3MpOyRo4oCNX29uY2UuZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KGRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCk7JGjigI1fb25jZS5kZWZpbmVEdXJhYmxlRXhvQ2xhc3MoZGVmaW5lRHVyYWJsZUV4b0NsYXNzKTskaOKAjV9vbmNlLmRlZmluZUR1cmFibGVFeG9DbGFzc0tpdChkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQpOyRo4oCNX29uY2UucHJlcGFyZUV4b0NsYXNzKHByZXBhcmVFeG9DbGFzcyk7JGjigI1fb25jZS5wcmVwYXJlRXhvQ2xhc3NLaXQocHJlcGFyZUV4b0NsYXNzS2l0KTskaOKAjV9vbmNlLnByZXBhcmVFeG8ocHJlcGFyZUV4byk7JGjigI1fb25jZS5wcmVwYXJlU2luZ2xldG9uKHByZXBhcmVTaW5nbGV0b24pO1xuY29uc3QgICAgICAge3Byb3ZpZGVLaW5kSGFuZGxlLHByZXBhcmVLaW5kLHByZXBhcmVLaW5kTXVsdGl9PVxuZ2xvYmFsRXhvVXRpbHM7JGjigI1fb25jZS5wcm92aWRlS2luZEhhbmRsZShwcm92aWRlS2luZEhhbmRsZSk7JGjigI1fb25jZS5wcmVwYXJlS2luZChwcmVwYXJlS2luZCk7JGjigI1fb25jZS5wcmVwYXJlS2luZE11bHRpKHByZXBhcmVLaW5kTXVsdGkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaWdub3JlQ29udGV4dCI6WyJpZ25vcmVDb250ZXh0Il0sIm1ha2VFeG9VdGlscyI6WyJtYWtlRXhvVXRpbHMiXSwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIjpbImRlZmluZVZpcnR1YWxFeG9DbGFzcyJdLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0Il0sImRlZmluZUR1cmFibGVFeG9DbGFzcyI6WyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiXSwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IjpbImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCJdLCJwcmVwYXJlRXhvQ2xhc3MiOlsicHJlcGFyZUV4b0NsYXNzIl0sInByZXBhcmVFeG9DbGFzc0tpdCI6WyJwcmVwYXJlRXhvQ2xhc3NLaXQiXSwicHJlcGFyZUV4byI6WyJwcmVwYXJlRXhvIl0sInByZXBhcmVTaW5nbGV0b24iOlsicHJlcGFyZVNpbmdsZXRvbiJdLCJwcm92aWRlS2luZEhhbmRsZSI6WyJwcm92aWRlS2luZEhhbmRsZSJdLCJwcmVwYXJlS2luZCI6WyJwcmVwYXJlS2luZCJdLCJwcmVwYXJlS2luZE11bHRpIjpbInByZXBhcmVLaW5kTXVsdGkiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA3XOiDq0IAACtCAAAJAAAAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIiwiLi92YXQtZGF0YS1iaW5kaW5ncy5qcyIsIi4vZXhvLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwibWFrZVNjYWxhck1hcFN0b3JlIiwibWFrZVNjYWxhck1hcFN0b3JlIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW11dLFtcIi4vdmF0LWRhdGEtYmluZGluZ3MuanNcIiwgW11dLFtcIi4vZXhvLXV0aWxzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGFnb3JpYy9zdG9yZSI6W1siTSIsIk0iXSxbIm1ha2VTY2FsYXJNYXBTdG9yZSIsIm1ha2VTY2FsYXJNYXBTdG9yZSJdLFsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSIsIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJTZXRTdG9yZSIsIm1ha2VTY2FsYXJTZXRTdG9yZSJdLFsibWFrZVNjYWxhcldlYWtTZXRTdG9yZSIsIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiXV0sIi4vdmF0LWRhdGEtYmluZGluZ3MuanMiOltbIm1ha2VLaW5kSGFuZGxlIiwibWFrZUtpbmRIYW5kbGUiXSxbInByb3ZpZGVQcm9taXNlV2F0Y2hlciIsInByb3ZpZGVQcm9taXNlV2F0Y2hlciJdLFsid2F0Y2hQcm9taXNlIiwid2F0Y2hQcm9taXNlIl0sWyJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIl0sWyJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiXSxbIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIl0sWyJjYW5CZUR1cmFibGUiLCJjYW5CZUR1cmFibGUiXSxbInBpY2tGYWNldCIsInBpY2tGYWNldCJdLFsicGFydGlhbEFzc2lnbiIsInBhcnRpYWxBc3NpZ24iXSxbInByb3ZpZGUiLCJwcm92aWRlIl0sWyJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVNYXBTdG9yZSJdLFsicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiLCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSJdLFsicHJvdmlkZUR1cmFibGVTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiXSxbInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiXSxbImRlZmluZUtpbmQiLCJkZWZpbmVLaW5kIl0sWyJkZWZpbmVLaW5kTXVsdGkiLCJkZWZpbmVLaW5kTXVsdGkiXSxbImRlZmluZUR1cmFibGVLaW5kIiwiZGVmaW5lRHVyYWJsZUtpbmQiXSxbImRlZmluZUR1cmFibGVLaW5kTXVsdGkiLCJkZWZpbmVEdXJhYmxlS2luZE11bHRpIl1dLCIuL2V4by11dGlscy5qcyI6W1siZGVmaW5lVmlydHVhbEV4b0NsYXNzIiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIl0sWyJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiXSxbImRlZmluZUR1cmFibGVFeG9DbGFzcyIsImRlZmluZUR1cmFibGVFeG9DbGFzcyJdLFsiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IiwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0Il0sWyJwcmVwYXJlRXhvQ2xhc3MiLCJwcmVwYXJlRXhvQ2xhc3MiXSxbInByZXBhcmVFeG9DbGFzc0tpdCIsInByZXBhcmVFeG9DbGFzc0tpdCJdLFsicHJlcGFyZUV4byIsInByZXBhcmVFeG8iXSxbInByZXBhcmVTaW5nbGV0b24iLCJwcmVwYXJlU2luZ2xldG9uIl0sWyJpZ25vcmVDb250ZXh0IiwiaWdub3JlQ29udGV4dCJdLFsicHJvdmlkZUtpbmRIYW5kbGUiLCJwcm92aWRlS2luZEhhbmRsZSJdLFsicHJlcGFyZUtpbmQiLCJwcmVwYXJlS2luZCJdLFsicHJlcGFyZUtpbmRNdWx0aSIsInByZXBhcmVLaW5kTXVsdGkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGWWpiTKFgAAyhYAADAAAABAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvdmF0LWRhdGEtYmluZGluZ3MuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbIlZhdERhdGEiLCJjYW5CZUR1cmFibGUiLCJkZWZpbmVEdXJhYmxlS2luZCIsImRlZmluZUR1cmFibGVLaW5kTXVsdGkiLCJkZWZpbmVLaW5kIiwiZGVmaW5lS2luZE11bHRpIiwibWFrZUtpbmRIYW5kbGUiLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSIsIm1ha2VTdG9yZVV0aWxzIiwicGFydGlhbEFzc2lnbiIsInBpY2tGYWNldCIsInByb3ZpZGUiLCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiLCJ3YXRjaFByb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscHJvdmlkZUxhenk7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcInByb3ZpZGVMYXp5XCIsIFskaOKAjV9hID0+IChwcm92aWRlTGF6eSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IFZhdERhdGFHbG9iYWw7XG5pZignVmF0RGF0YSdpbiBnbG9iYWxUaGlzKXtcbmdsb2JhbFRoaXMuVmF0RGF0YXx8RmFpbCBgVmF0RGF0YSBkZWZpbmVkIGluIGdsb2JhbCBhcyBudWxsIG9yIHVuZGVmaW5lZGA7XG4vL1xuVmF0RGF0YUdsb2JhbD0vKiAgICAgICAgICAgICAgKi9nbG9iYWxUaGlzLlZhdERhdGE7XG4gfWVsc2V7XG4vL1xuLy9cbi8vXG5jb25zdCB1bmF2YWlsYWJsZT0oKT0+RmFpbCBgVmF0RGF0YSB1bmF2YWlsYWJsZWA7XG5WYXREYXRhR2xvYmFsPXtcbmRlZmluZUtpbmQ6dW5hdmFpbGFibGUsXG5kZWZpbmVLaW5kTXVsdGk6dW5hdmFpbGFibGUsXG5kZWZpbmVEdXJhYmxlS2luZDp1bmF2YWlsYWJsZSxcbmRlZmluZUR1cmFibGVLaW5kTXVsdGk6dW5hdmFpbGFibGUsXG5tYWtlS2luZEhhbmRsZTp1bmF2YWlsYWJsZSxcbnByb3ZpZGVQcm9taXNlV2F0Y2hlcjp1bmF2YWlsYWJsZSxcbndhdGNoUHJvbWlzZTp1bmF2YWlsYWJsZSxcbm1ha2VTY2FsYXJCaWdNYXBTdG9yZTp1bmF2YWlsYWJsZSxcbm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmU6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnU2V0U3RvcmU6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlOnVuYXZhaWxhYmxlLFxuY2FuQmVEdXJhYmxlOnVuYXZhaWxhYmxlfTtcblxuIH1cblxuY29uc3QgVmF0RGF0YUV4cG9ydD1WYXREYXRhR2xvYmFsOyRo4oCNX29uY2UuVmF0RGF0YUV4cG9ydChWYXREYXRhRXhwb3J0KTtcblxuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgIHtcbmRlZmluZUtpbmQsXG5kZWZpbmVLaW5kTXVsdGksXG5kZWZpbmVEdXJhYmxlS2luZCxcbmRlZmluZUR1cmFibGVLaW5kTXVsdGl9PVxuVmF0RGF0YUdsb2JhbDskaOKAjV9vbmNlLmRlZmluZUtpbmQoZGVmaW5lS2luZCk7JGjigI1fb25jZS5kZWZpbmVLaW5kTXVsdGkoZGVmaW5lS2luZE11bHRpKTskaOKAjV9vbmNlLmRlZmluZUR1cmFibGVLaW5kKGRlZmluZUR1cmFibGVLaW5kKTskaOKAjV9vbmNlLmRlZmluZUR1cmFibGVLaW5kTXVsdGkoZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSk7XG5cbmNvbnN0ICAgICAgIHtcbm1ha2VLaW5kSGFuZGxlLFxucHJvdmlkZVByb21pc2VXYXRjaGVyLFxud2F0Y2hQcm9taXNlLFxubWFrZVNjYWxhckJpZ01hcFN0b3JlLFxubWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSxcbm1ha2VTY2FsYXJCaWdTZXRTdG9yZSxcbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUsXG5jYW5CZUR1cmFibGV9PVxuVmF0RGF0YUdsb2JhbDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlS2luZEhhbmRsZShtYWtlS2luZEhhbmRsZSk7JGjigI1fb25jZS5wcm92aWRlUHJvbWlzZVdhdGNoZXIocHJvdmlkZVByb21pc2VXYXRjaGVyKTskaOKAjV9vbmNlLndhdGNoUHJvbWlzZSh3YXRjaFByb21pc2UpOyRo4oCNX29uY2UubWFrZVNjYWxhckJpZ01hcFN0b3JlKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSk7JGjigI1fb25jZS5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKG1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUpOyRo4oCNX29uY2UubWFrZVNjYWxhckJpZ1NldFN0b3JlKG1ha2VTY2FsYXJCaWdTZXRTdG9yZSk7JGjigI1fb25jZS5tYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlKG1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUpOyRo4oCNX29uY2UuY2FuQmVEdXJhYmxlKGNhbkJlRHVyYWJsZSk7XG5jb25zdCAgICAgICAgcGlja0ZhY2V0PVxuKG1ha2VyLGZhY2V0TmFtZSk9PlxuKC4uLmFyZ3MpPT5cbm1ha2VyKC4uLmFyZ3MpW2ZhY2V0TmFtZV07JGjigI1fb25jZS5waWNrRmFjZXQocGlja0ZhY2V0KTtcbmhhcmRlbihwaWNrRmFjZXQpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFydGlhbEFzc2lnbj0odGFyZ2V0LHNvdXJjZSk9Pntcbk9iamVjdC5hc3NpZ24odGFyZ2V0LHNvdXJjZSk7XG4gfTskaOKAjV9vbmNlLnBhcnRpYWxBc3NpZ24ocGFydGlhbEFzc2lnbik7XG5oYXJkZW4ocGFydGlhbEFzc2lnbik7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCAgICAgICAgcHJvdmlkZT1cbi8vXG4vKlxuXG5cblxuXG5cbiAgICovcHJvdmlkZUxhenk7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjigI1fb25jZS5wcm92aWRlKHByb3ZpZGUpO1xuY29uc3QgICAgICAgIG1ha2VTdG9yZVV0aWxzPShWYXREYXRhKT0+e1xuY29uc3R7XG4vL1xubWFrZVNjYWxhckJpZ01hcFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUsXG4vL1xubWFrZVNjYWxhckJpZ1NldFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmV9PVxuVmF0RGF0YTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZU1hcFN0b3JlPShiYWdnYWdlLG5hbWUsb3B0aW9ucz17fSk9PlxucHJvdmlkZShiYWdnYWdlLG5hbWUsKCk9PlxubWFrZVNjYWxhckJpZ01hcFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVNYXBTdG9yZSk7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUpO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlU2V0U3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnU2V0U3RvcmUobmFtZSx7ZHVyYWJsZTp0cnVlLC4uLm9wdGlvbnN9KSk7XG5cbmhhcmRlbihwcm92aWRlRHVyYWJsZVNldFN0b3JlKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZT0oYmFnZ2FnZSxuYW1lLG9wdGlvbnM9e30pPT5cbnByb3ZpZGUoYmFnZ2FnZSxuYW1lLCgpPT5cbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUobmFtZSx7ZHVyYWJsZTp0cnVlLC4uLm9wdGlvbnN9KSk7XG5cbmhhcmRlbihwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSk7XG5cbnJldHVybiBoYXJkZW4oe1xucHJvdmlkZUR1cmFibGVNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVTZXRTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlfSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZVN0b3JlVXRpbHMobWFrZVN0b3JlVXRpbHMpO1xuXG5jb25zdCBnbG9iYWxTdG9yZVV0aWxzPW1ha2VTdG9yZVV0aWxzKFZhdERhdGFHbG9iYWwpO1xuY29uc3QgICAgICAge1xucHJvdmlkZUR1cmFibGVNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVTZXRTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlfT1cbmdsb2JhbFN0b3JlVXRpbHM7JGjigI1fb25jZS5wcm92aWRlRHVyYWJsZU1hcFN0b3JlKHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUpOyRo4oCNX29uY2UucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUpOyRo4oCNX29uY2UucHJvdmlkZUR1cmFibGVTZXRTdG9yZShwcm92aWRlRHVyYWJsZVNldFN0b3JlKTskaOKAjV9vbmNlLnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlKHByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlZhdERhdGEiOlsiVmF0RGF0YUV4cG9ydCJdLCJkZWZpbmVLaW5kIjpbImRlZmluZUtpbmQiXSwiZGVmaW5lS2luZE11bHRpIjpbImRlZmluZUtpbmRNdWx0aSJdLCJkZWZpbmVEdXJhYmxlS2luZCI6WyJkZWZpbmVEdXJhYmxlS2luZCJdLCJkZWZpbmVEdXJhYmxlS2luZE11bHRpIjpbImRlZmluZUR1cmFibGVLaW5kTXVsdGkiXSwibWFrZUtpbmRIYW5kbGUiOlsibWFrZUtpbmRIYW5kbGUiXSwicHJvdmlkZVByb21pc2VXYXRjaGVyIjpbInByb3ZpZGVQcm9taXNlV2F0Y2hlciJdLCJ3YXRjaFByb21pc2UiOlsid2F0Y2hQcm9taXNlIl0sIm1ha2VTY2FsYXJCaWdNYXBTdG9yZSI6WyJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiXSwibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSI6WyJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIl0sIm1ha2VTY2FsYXJCaWdTZXRTdG9yZSI6WyJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiXSwibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSI6WyJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIl0sImNhbkJlRHVyYWJsZSI6WyJjYW5CZUR1cmFibGUiXSwicGlja0ZhY2V0IjpbInBpY2tGYWNldCJdLCJwYXJ0aWFsQXNzaWduIjpbInBhcnRpYWxBc3NpZ24iXSwicHJvdmlkZSI6WyJwcm92aWRlIl0sIm1ha2VTdG9yZVV0aWxzIjpbIm1ha2VTdG9yZVV0aWxzIl0sInByb3ZpZGVEdXJhYmxlTWFwU3RvcmUiOlsicHJvdmlkZUR1cmFibGVNYXBTdG9yZSJdLCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSI6WyJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSJdLCJwcm92aWRlRHVyYWJsZVNldFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiXSwicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiOlsicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAALJUcSUURAABFEQAAHwAAAEBhZ29yaWMvdmF0cy12MC4xNS4xL3NyYy9jcmMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIkNSQyIsImNyYzEiLCJjcmMxMCIsImNyYzE2IiwiY3JjMjQiLCJjcmMzMiIsImNyYzMyYyIsImNyYzYiLCJjcmM4IiwibW9kZWxzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuXG4gKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgZW5jb2Rlcj1uZXcgVGV4dEVuY29kZXIoKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuZnVuY3Rpb24gY29udmVydChkYXRhKXtcbmlmKHR5cGVvZiBkYXRhPT09J251bWJlcicpe1xuY29uc3QgYnl0ZXM9W107XG4vL1xuLy9cbndoaWxlKGRhdGE+MHx8Ynl0ZXMubGVuZ3RoPDQpe1xuYnl0ZXMudW5zaGlmdChkYXRhJTI1Nik7XG5kYXRhPU1hdGguZmxvb3IoZGF0YS8yNTYpO1xuIH1cbnJldHVybiBuZXcgVWludDhBcnJheShieXRlcyk7XG4gfWVsc2UgaWYodHlwZW9mIGRhdGE9PT0nc3RyaW5nJyl7XG5yZXR1cm4gZW5jb2Rlci5lbmNvZGUoZGF0YSk7XG4gfWVsc2UgaWYoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKXtcbnJldHVybiBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlcixkYXRhLmJ5dGVPZmZzZXQsZGF0YS5ieXRlTGVuZ3RoKTtcbiB9ZWxzZSBpZihkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe1xucmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEpO1xuIH1cbnRocm93IFR5cGVFcnJvcihcbiBgY3JjIHJlcXVpcmVzIDMyIGJpdCBudW1iZXIsIGEgc3RyaW5nIG9yIFR5cGVkQXJyYXkgZm9yIGlucHV0YCk7XG5cbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiBtaXJyb3IoZGF0YSx3aWR0aCl7XG5sZXQgcmVzPTA7XG5mb3IobGV0IGk9MDtpPHdpZHRoO2krPTEpe1xucmVzPXJlczw8MXxkYXRhJjE7XG5kYXRhPj49MTtcbiB9XG5yZXR1cm4gcmVzO1xuIH1cblxuY2xhc3MgICAgICAgIENSQ3tcbi8qXG5cblxuXG5cblxuICAgKi9cbiAgICAgICAgICAgY29uc3RydWN0b3Iod2lkdGgscG9seSx4b3JJbix4b3JPdXQscmVmbGVjdCl7XG50aGlzLndpZHRoPXdpZHRoO1xudGhpcy5wb2x5PXBvbHk7XG50aGlzLnhvckluPXhvckluO1xudGhpcy5yZWZsZWN0ZWRYb3JJbj1taXJyb3IoeG9ySW4sd2lkdGgpO1xudGhpcy54b3JPdXQ9eG9yT3V0O1xudGhpcy5yZWZsZWN0PXJlZmxlY3Q7XG50aGlzLm1zYk1hc2s9MTw8dGhpcy53aWR0aC0xO1xudGhpcy5tYXNrPXRoaXMubXNiTWFzay0xPDwxfDE7XG50aGlzLmNyY1NoaWZ0PXRoaXMud2lkdGg8OD84LXRoaXMud2lkdGg6MDtcbnRoaXMuc2hpZnRlZFhvckluPXRoaXMueG9ySW48PHRoaXMuY3JjU2hpZnQ7XG5cbmNvbnN0IHRhYmxlPXRoaXMuZ2VuVGFibGUoKTtcbnRoaXMudGFibGU9dGFibGU7XG5cbmlmKHRoaXMud2lkdGg9PT04JiYhdGhpcy54b3JJbiYmIXRoaXMueG9yT3V0JiYhdGhpcy5yZWZsZWN0KXtcbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbnRoaXMuY2FsY3VsYXRlPWZ1bmN0aW9uIGNhbGN1bGF0ZShkYXRhKXtcbmNvbnN0IGJ1ZmZlcj1jb252ZXJ0KGRhdGEpO1xubGV0IGNyYz0wO1xuZm9yKGxldCBpPTA7aTxidWZmZXIubGVuZ3RoO2krPTEpe1xuY3JjPXRhYmxlW2NyY15idWZmZXJbaV1dO1xuIH1cbnJldHVybiBjcmM7XG4gfTtcbiB9XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICBjYWxjdWxhdGUoZGF0YSl7XG5jb25zdCBidWZmZXI9Y29udmVydChkYXRhKTtcbmxldCBjcmM7XG5jb25zdHt0YWJsZSx3aWR0aCxjcmNTaGlmdCxtYXNrfT10aGlzO1xuaWYodGhpcy5yZWZsZWN0KXtcbmNyYz10aGlzLnJlZmxlY3RlZFhvckluO1xuZm9yKGxldCBpPTA7aTxidWZmZXIubGVuZ3RoO2krPTEpe1xuY29uc3QgYnl0ZT1idWZmZXJbaV07XG5jcmM9KHRhYmxlWyhjcmNeYnl0ZSkmMHhmZl1eY3JjPj4+OCkmbWFzaztcbiB9XG4gfWVsc2V7XG5jcmM9dGhpcy5zaGlmdGVkWG9ySW47XG5mb3IobGV0IGk9MDtpPGJ1ZmZlci5sZW5ndGg7aSs9MSl7XG5jcmM9XG50YWJsZVsoY3JjPj53aWR0aC04K2NyY1NoaWZ0XmJ1ZmZlcltpXSkmMHhmZl08PFxuY3JjU2hpZnReXG5jcmM8PDgtY3JjU2hpZnQmbWFzazw8Y3JjU2hpZnQ7XG4gfVxuY3JjPj49Y3JjU2hpZnQ7XG4gfVxuY3JjXj10aGlzLnhvck91dDtcbnJldHVybiBjcmM+Pj4wO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZU5vVGFibGUoZGF0YSl7XG5jb25zdCBidWZmZXI9Y29udmVydChkYXRhKTtcbmxldCBjcmM9dGhpcy54b3JJbjtcbmZvcihsZXQgaT0wO2k8YnVmZmVyLmxlbmd0aDtpKz0xKXtcbmxldCBvY3RldD1idWZmZXJbaV07XG5pZih0aGlzLnJlZmxlY3Qpb2N0ZXQ9bWlycm9yKG9jdGV0LDgpO1xuZm9yKGxldCBqPTA7ajw4O2orPTEpe1xubGV0IHRvcGJpdD1jcmMmdGhpcy5tc2JNYXNrO1xuaWYob2N0ZXQmMHg4MD4+ail0b3BiaXRePXRoaXMubXNiTWFzaztcbmNyYzw8PTE7XG5pZih0b3BiaXQpY3JjXj10aGlzLnBvbHk7XG4gfVxuY3JjJj10aGlzLm1hc2s7XG4gfVxuaWYodGhpcy5yZWZsZWN0KWNyYz1taXJyb3IoY3JjLHRoaXMud2lkdGgpO1xuY3JjXj10aGlzLnhvck91dDtcbnJldHVybiBjcmM+Pj4wO1xuIH1cblxuICAgICAgICBnZW5UYWJsZSgpe1xuY29uc3QgdGFibGVMZW5ndGg9MjU2O1xuY29uc3QgdGFibGU9W107XG5mb3IobGV0IGk9MDtpPHRhYmxlTGVuZ3RoO2krPTEpe1xubGV0IHJlZz1pO1xuaWYodGhpcy5yZWZsZWN0KXJlZz1taXJyb3IocmVnLDgpO1xucmVnPDw9dGhpcy53aWR0aC04K3RoaXMuY3JjU2hpZnQ7XG5mb3IobGV0IGo9MDtqPDg7ais9MSl7XG5pZigocmVnJnRoaXMubXNiTWFzazw8dGhpcy5jcmNTaGlmdCkhPT0wKXtcbnJlZzw8PTE7XG5yZWdePXRoaXMucG9seTw8dGhpcy5jcmNTaGlmdDtcbiB9ZWxzZXtcbnJlZzw8PTE7XG4gfVxuIH1cbmlmKHRoaXMucmVmbGVjdClcbnJlZz1taXJyb3IocmVnPj50aGlzLmNyY1NoaWZ0LHRoaXMud2lkdGgpPDx0aGlzLmNyY1NoaWZ0O1xucmVnPXJlZz4+dGhpcy5jcmNTaGlmdCZ0aGlzLm1hc2s7XG50YWJsZVtpXT1yZWc+Pj4wO1xuIH1cbnJldHVybiBuZXcgSW50MzJBcnJheSh0YWJsZSk7XG4gfX0kaOKAjV9vbmNlLiBDUkMoQ1JDKTtcblxuXG5jb25zdCAgICAgICAgY3JjMT1uZXcgQ1JDKDEsMHgwMSwweDAwLDB4MDAsZmFsc2UpOyRo4oCNX29uY2UuY3JjMShjcmMxKTtcbmNvbnN0ICAgICAgICBjcmM2PW5ldyBDUkMoNiwweDJmLDB4MDAsMHgwMCxmYWxzZSk7JGjigI1fb25jZS5jcmM2KGNyYzYpO1xuY29uc3QgICAgICAgIGNyYzg9bmV3IENSQyg4LDB4MDcsMHgwMCwweDAwLGZhbHNlKTskaOKAjV9vbmNlLmNyYzgoY3JjOCk7XG5jb25zdCAgICAgICAgY3JjMTA9bmV3IENSQygxMCwweDIzMywweDAwMDAsMHgwMDAwLGZhbHNlKTskaOKAjV9vbmNlLmNyYzEwKGNyYzEwKTtcbmNvbnN0ICAgICAgICBjcmMxNj1uZXcgQ1JDKDE2LDB4ODAwNSwweDAwMDAsMHgwMDAwLHRydWUpOyRo4oCNX29uY2UuY3JjMTYoY3JjMTYpO1xuY29uc3QgICAgICAgIGNyYzI0PW5ldyBDUkMoMjQsMHg4NjRjZmIsMHhiNzA0Y2UsMHgwMDAwMDAsZmFsc2UpOyRo4oCNX29uY2UuY3JjMjQoY3JjMjQpO1xuY29uc3QgICAgICAgIGNyYzMyPW5ldyBDUkMoMzIsMHgwNGMxMWRiNywweGZmZmZmZmZmLDB4ZmZmZmZmZmYsdHJ1ZSk7JGjigI1fb25jZS5jcmMzMihjcmMzMik7XG5jb25zdCAgICAgICAgY3JjMzJjPW5ldyBDUkMoMzIsMHgxZWRjNmY0MSwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsdHJ1ZSk7JGjigI1fb25jZS5jcmMzMmMoY3JjMzJjKTtcblxuY29uc3QgICAgICAgIG1vZGVscz17Y3JjMSxjcmM2LGNyYzgsY3JjMTAsY3JjMTYsY3JjMjQsY3JjMzIsY3JjMzJjfTskaOKAjV9vbmNlLm1vZGVscyhtb2RlbHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQ1JDIjpbIkNSQyJdLCJjcmMxIjpbImNyYzEiXSwiY3JjNiI6WyJjcmM2Il0sImNyYzgiOlsiY3JjOCJdLCJjcmMxMCI6WyJjcmMxMCJdLCJjcmMxNiI6WyJjcmMxNiJdLCJjcmMyNCI6WyJjcmMyNCJdLCJjcmMzMiI6WyJjcmMzMiJdLCJjcmMzMmMiOlsiY3JjMzJjIl0sIm1vZGVscyI6WyJtb2RlbHMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAFCW9b1khAABZIQAAJQAAAEBhZ29yaWMvdmF0cy12MC4xNS4xL3NyYy9saWItYm9hcmQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9ub3RpZmllciIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL3pvZS9zcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIi4vY3JjLmpzIl0sImV4cG9ydHMiOlsiREVGQVVMVF9DUkNfRElHSVRTIiwiREVGQVVMVF9QUkVGSVgiLCJwcmVwYXJlQm9hcmRLaXQiLCJwcmVwYXJlUmVjb3JkZXJGYWN0b3J5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRmFpbCxxLHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCxNLG1ha2VTY2FsYXJCaWdNYXBTdG9yZSxwcmVwYXJlRXhvQ2xhc3NLaXQsZGVmaW5lUmVjb3JkZXJLaXQscHJlcGFyZVJlY29yZGVyLEUsRmFyLGlzUmVtb3RhYmxlLG1ha2VNYXJzaGFsLGNyYzY7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhc3NlcnRcIiwgWyRo4oCNX2EgPT4gKGFzc2VydCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyXCIsIFtbXCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXRcIiwgWyRo4oCNX2EgPT4gKHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRo4oCNX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaOKAjV9hID0+IChwcmVwYXJlRXhvQ2xhc3NLaXQgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy96b2Uvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qc1wiLCBbW1wiZGVmaW5lUmVjb3JkZXJLaXRcIiwgWyRo4oCNX2EgPT4gKGRlZmluZVJlY29yZGVyS2l0ID0gJGjigI1fYSldXSxbXCJwcmVwYXJlUmVjb3JkZXJcIiwgWyRo4oCNX2EgPT4gKHByZXBhcmVSZWNvcmRlciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dLFtcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzUmVtb3RhYmxlXCIsIFskaOKAjV9hID0+IChpc1JlbW90YWJsZSA9ICRo4oCNX2EpXV0sW1wibWFrZU1hcnNoYWxcIiwgWyRo4oCNX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjigI1fYSldXV1dLFtcIi4vY3JjLmpzXCIsIFtbXCJjcmM2XCIsIFskaOKAjV9hID0+IChjcmM2ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBERUZBVUxUX0NSQ19ESUdJVFM9MjskaOKAjV9vbmNlLkRFRkFVTFRfQ1JDX0RJR0lUUyhERUZBVUxUX0NSQ19ESUdJVFMpO1xuY29uc3QgICAgICAgIERFRkFVTFRfUFJFRklYPSdib2FyZDAnO1xuXG4vL1xuLy9cbiRo4oCNX29uY2UuREVGQVVMVF9QUkVGSVgoREVGQVVMVF9QUkVGSVgpO2NvbnN0IENhcERhdGFTaGFwZT17Ym9keTpNLnN0cmluZygpLHNsb3RzOk0uYXJyYXkoKX07XG5jb25zdCBNYXJzaGFsST1NLmludGVyZmFjZSgnTWFyc2hhbGxlcicse1xudG9DYXBEYXRhOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKENhcERhdGFTaGFwZSksXG5zZXJpYWxpemU6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoQ2FwRGF0YVNoYXBlKSxcbmZyb21DYXBEYXRhOk0uY2FsbChDYXBEYXRhU2hhcGUpLnJldHVybnMoTS5hbnkoKSksXG51bnNlcmlhbGl6ZTpNLmNhbGwoQ2FwRGF0YVNoYXBlKS5yZXR1cm5zKE0uYW55KCkpfSk7XG5cblxuY29uc3QgSWRTaGFwZT1NLnN0cmluZygpO1xuY29uc3QgVmFsU2hhcGU9TS5zY2FsYXIoKTtcbmNvbnN0IEJvYXJkS2l0SUtpdD17XG5ib2FyZDpNLmludGVyZmFjZSgnQm9hcmQnLHtcbmhhczpNLmNhbGwoVmFsU2hhcGUpLnJldHVybnMoTS5ib29sZWFuKCkpLFxuZ2V0VmFsdWU6TS5jYWxsKElkU2hhcGUpLnJldHVybnMoVmFsU2hhcGUpLFxubG9va3VwOk0uY2FsbCgpLnJlc3QoTS5hcnJheU9mKElkU2hhcGUpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldElkOk0uY2FsbChWYWxTaGFwZSkucmV0dXJucyhJZFNoYXBlKSxcbmlkczpNLmNhbGwoKS5yZXR1cm5zKE0uYXJyYXlPZihJZFNoYXBlKSksXG5nZXRQdWJsaXNoaW5nTWFyc2hhbGxlcjpNLmNhbGwoKS5yZXR1cm5zKE0ucmVtb3RhYmxlKCkpLFxuZ2V0UmVhZG9ubHlNYXJzaGFsbGVyOk0uY2FsbCgpLnJldHVybnMoTS5yZW1vdGFibGUoKSl9KSxcblxucHVibGlzaGluZ01hcnNoYWxsZXI6TWFyc2hhbEksXG5yZWFkb25seU1hcnNoYWxsZXI6TWFyc2hhbEl9O1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgY2FsY0NyYz0oZGF0YSxjcmNEaWdpdHMpPT57XG4vL1xuLy9cbmNvbnN0IGNyYz1jcmM2LmNhbGN1bGF0ZShkYXRhKSsxO1xuY29uc3QgY3JjU3RyPWNyYy50b1N0cmluZygpLnBhZFN0YXJ0KGNyY0RpZ2l0cywnMCcpO1xuYXNzZXJ0KGNyY1N0ci5sZW5ndGg8PWNyY0RpZ2l0cywgYENSQyB0b28gYmlnIGZvciBpdHMgYnJpdGNoZXMgJHtjcmNTdHJ9YCk7XG5yZXR1cm4gY3JjU3RyO1xuIH07XG5cbi8qXG5cblxuICovXG5cbi8vXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGluaXREdXJhYmxlQm9hcmRTdGF0ZT0oXG5pbml0U2VxdWVuY2U9MCxcbntwcmVmaXg9REVGQVVMVF9QUkVGSVgsY3JjRGlnaXRzPURFRkFVTFRfQ1JDX0RJR0lUU309e30pPT5cbntcbmNvbnN0IGltbXV0YWJsZT17cHJlZml4LGNyY0RpZ2l0c307XG5cbmNvbnN0IGxhc3RTZXF1ZW5jZT1CaWdJbnQoaW5pdFNlcXVlbmNlKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlkVG9WYWw9bWFrZVNjYWxhckJpZ01hcFN0b3JlKCdpZFRvVmFsJyx7XG5kdXJhYmxlOnRydWUsXG5rZXlTaGFwZTpJZFNoYXBlLFxudmFsdWVTaGFwZTpWYWxTaGFwZX0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB2YWxUb0lkPW1ha2VTY2FsYXJCaWdNYXBTdG9yZSgndmFsVG9JZCcse1xuZHVyYWJsZTp0cnVlLFxua2V5U2hhcGU6VmFsU2hhcGUsXG52YWx1ZVNoYXBlOklkU2hhcGV9KTtcblxuXG5jb25zdCBtdXRhYmxlPXtsYXN0U2VxdWVuY2UsaWRUb1ZhbCx2YWxUb0lkfTtcblxucmV0dXJue1xuLi4uaW1tdXRhYmxlLFxuLi4ubXV0YWJsZX07XG5cbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLypcblxuXG4gKi9cbmNvbnN0IGdldElkPSh2YWx1ZSxzdGF0ZSk9PntcbmNvbnN0e2lkVG9WYWwsdmFsVG9JZCxwcmVmaXgsY3JjRGlnaXRzfT1zdGF0ZTtcbmlmKCFpc1JlbW90YWJsZSh2YWx1ZSkpe1xuRmFpbCBgQm9hcmQgY2Fubm90IGNyZWF0ZSBpZCBmb3Igbm9uLXJlbW90YWJsZWA7XG4gfVxuXG5pZih2YWxUb0lkLmhhcyh2YWx1ZSkpe1xucmV0dXJuIHZhbFRvSWQuZ2V0KHZhbHVlKTtcbiB9XG5cbnN0YXRlLmxhc3RTZXF1ZW5jZSs9MW47XG5jb25zdCBzZXE9c3RhdGUubGFzdFNlcXVlbmNlO1xuXG5jb25zdCBjcmNJbnB1dD0gYCR7cHJlZml4fSR7c2VxfWA7XG5jb25zdCBjcmM9Y2FsY0NyYyhjcmNJbnB1dCxjcmNEaWdpdHMpO1xuXG5jb25zdCBpZD0gYCR7cHJlZml4fSR7Y3JjfSR7c2VxfWA7XG5cbnZhbFRvSWQuaW5pdCh2YWx1ZSxpZCk7XG5pZFRvVmFsLmluaXQoaWQsdmFsdWUpO1xucmV0dXJuIGlkO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCBnZXRWYWx1ZT0oaWQse3ByZWZpeCxjcmNEaWdpdHMsaWRUb1ZhbH0pPT57XG5pZC5zdGFydHNXaXRoKHByZWZpeCl8fEZhaWwgYGlkIG11c3Qgc3RhcnQgd2l0aCAke3EocHJlZml4KX06ICR7aWR9YDtcbmNvbnN0IGRpZ2l0cz1pZC5zbGljZShwcmVmaXgubGVuZ3RoKTtcbi8vXG5jb25zdCBESUdJVFNfUkVHRVhQPW5ldyBSZWdFeHAoIGBeWzAtOV17JHtjcmNEaWdpdHMrMX0sfSRgKTtcbkRJR0lUU19SRUdFWFAudGVzdChkaWdpdHMpfHxcbkZhaWwgYGlkIG11c3QgZW5kIGluIGF0IGxlYXN0ICR7cShjcmNEaWdpdHMrMSl9IGRpZ2l0czogJHtpZH1gO1xuXG5pZihpZFRvVmFsLmhhcyhpZCkpe1xucmV0dXJuIGlkVG9WYWwuZ2V0KGlkKTtcbiB9XG5cbmNvbnN0IGFsbGVnZWRDcmM9ZGlnaXRzLnNsaWNlKDAsY3JjRGlnaXRzKTtcblxuY29uc3Qgc2VxPWRpZ2l0cy5zbGljZShjcmNEaWdpdHMpO1xuY29uc3QgY3JjSW5wdXQ9IGAke3ByZWZpeH0ke3NlcX1gO1xuY29uc3QgY3JjPWNhbGNDcmMoY3JjSW5wdXQsY3JjRGlnaXRzKTtcblxuYWxsZWdlZENyYz09PWNyY3x8RmFpbCBgaWQgaXMgcHJvYmFibHkgYSB0eXBvLCBjYW5ub3QgdmVyaWZ5IENSQzogJHtpZH1gO1xuLy9cbnRocm93IEZhaWwgYGJvYXJkIGRvZXMgbm90IGhhdmUgaWQ6ICR7aWR9YDtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWFrZVNsb3RUb1ZhbD0oc3RhdGUpPT57XG5jb25zdCBpZmFjZUFsbGVnZWRQcmVmaXg9J0FsbGVnZWQ6ICc7XG5jb25zdCBpZmFjZUluYWNjZXNzaWJsZVByZWZpeD0nU0VWRVJFRDogJztcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBzbG90VG9WYWw9KHNsb3QsaWZhY2UpPT57XG5pZihzbG90IT09bnVsbCl7XG5yZXR1cm4gZ2V0VmFsdWUoc2xvdCxzdGF0ZSk7XG4gfVxuXG4vL1xuaWYodHlwZW9mIGlmYWNlPT09J3N0cmluZycmJmlmYWNlLnN0YXJ0c1dpdGgoaWZhY2VBbGxlZ2VkUHJlZml4KSl7XG5pZmFjZT1pZmFjZS5zbGljZShpZmFjZUFsbGVnZWRQcmVmaXgubGVuZ3RoKTtcbiB9XG5yZXR1cm4gRmFyKCBgJHtpZmFjZUluYWNjZXNzaWJsZVByZWZpeH0ke2lmYWNlfWAse30pO1xuIH07XG5yZXR1cm4gc2xvdFRvVmFsO1xuIH07XG5cbi8vXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFrZVJlYWRvbmx5TWFyc2hhbGxlcj0oc3RhdGUpPT57XG5jb25zdHt2YWxUb0lkfT1zdGF0ZTtcbmNvbnN0IHNsb3RUb1ZhbD1tYWtlU2xvdFRvVmFsKHN0YXRlKTtcbmNvbnN0IHZhbFRvU2xvdD0odmFsKT0+e1xuaWYoIXZhbFRvSWQuaGFzKHZhbCkpe1xuLy9cbnJldHVybiBudWxsO1xuIH1cblxuLy9cbnJldHVybiB2YWxUb0lkLmdldCh2YWwpO1xuIH07XG5yZXR1cm4gbWFrZU1hcnNoYWwodmFsVG9TbG90LHNsb3RUb1ZhbCx7XG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFrZVB1Ymxpc2hpbmdNYXJzaGFsbGVyPShzdGF0ZSk9PntcbmNvbnN0IHNsb3RUb1ZhbD1tYWtlU2xvdFRvVmFsKHN0YXRlKTtcbi8vXG5jb25zdCB2YWxUb1Nsb3Q9KHZhbCk9PmdldElkKHZhbCxzdGF0ZSk7XG5yZXR1cm4gbWFrZU1hcnNoYWwodmFsVG9TbG90LHNsb3RUb1ZhbCx7XG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cbiB9O1xuLy9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVCb2FyZEtpdD0oYmFnZ2FnZSk9PntcbnJldHVybiBwcmVwYXJlRXhvQ2xhc3NLaXQoXG5iYWdnYWdlLFxuJ0JvYXJkJyxcbkJvYXJkS2l0SUtpdCxcbmluaXREdXJhYmxlQm9hcmRTdGF0ZSxcbntcbmJvYXJkOntcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbmdldElkKHZhbHVlKXtcbnJldHVybiBnZXRJZCh2YWx1ZSx0aGlzLnN0YXRlKTtcbiB9LFxuLypcblxuXG4gICAgICAgICAqL1xuZ2V0VmFsdWUoaWQpe1xucmV0dXJuIGdldFZhbHVlKGlkLHRoaXMuc3RhdGUpO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG4gICAgICBhc3luYyBsb29rdXAoLi4ucGF0aCl7XG5jb25zdHtcbmZhY2V0czp7Ym9hcmR9fT1cbnRoaXM7XG5pZihwYXRoLmxlbmd0aD09PTApe1xucmV0dXJuIGJvYXJkO1xuIH1cbmNvbnN0W2ZpcnN0LC4uLnJlc3RdPXBhdGg7XG4vKiAgICAgICAgICAgICAgKi9cbmNvbnN0IGZpcnN0VmFsdWU9Ym9hcmQuZ2V0VmFsdWUoLyogICAgICAgICAgICAgICAgICAqL2ZpcnN0KTtcbmlmKHJlc3QubGVuZ3RoPT09MCl7XG5yZXR1cm4gZmlyc3RWYWx1ZTtcbiB9XG5yZXR1cm4gRShmaXJzdFZhbHVlKS5sb29rdXAoLi4ucmVzdCk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5oYXModmFsKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLnZhbFRvSWQuaGFzKHZhbCk7XG4gfSxcbmlkcygpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gaGFyZGVuKFsuLi5zdGF0ZS5pZFRvVmFsLmtleXMoKV0pO1xuIH0sXG4vKlxuXG5cbiAgICAgICAgICovXG5nZXRQdWJsaXNoaW5nTWFyc2hhbGxlcigpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnB1Ymxpc2hpbmdNYXJzaGFsbGVyO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbmdldFJlYWRvbmx5TWFyc2hhbGxlcigpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnJlYWRvbmx5TWFyc2hhbGxlcjtcbiB9fSxcblxucmVhZG9ubHlNYXJzaGFsbGVyOntcbnRvQ2FwRGF0YSh2YWwpe1xuY29uc3QgcmVhZG9ubHk9bWFrZVJlYWRvbmx5TWFyc2hhbGxlcih0aGlzLnN0YXRlKTtcbnJldHVybiByZWFkb25seS50b0NhcERhdGEodmFsKTtcbiB9LFxuZnJvbUNhcERhdGEoZGF0YSl7XG5jb25zdCByZWFkb25seT1tYWtlUmVhZG9ubHlNYXJzaGFsbGVyKHRoaXMuc3RhdGUpO1xucmV0dXJuIHJlYWRvbmx5LmZyb21DYXBEYXRhKGRhdGEpO1xuIH0sXG5zZXJpYWxpemUoZGF0YSl7XG5yZXR1cm4gdGhpcy5mYWNldHMucmVhZG9ubHlNYXJzaGFsbGVyLnRvQ2FwRGF0YShkYXRhKTtcbiB9LFxudW5zZXJpYWxpemUoZGF0YSl7XG5yZXR1cm4gdGhpcy5mYWNldHMucmVhZG9ubHlNYXJzaGFsbGVyLmZyb21DYXBEYXRhKGRhdGEpO1xuIH19LFxuXG5wdWJsaXNoaW5nTWFyc2hhbGxlcjp7XG50b0NhcERhdGEodmFsKXtcbmNvbnN0IHB1Ymxpc2hpbmc9bWFrZVB1Ymxpc2hpbmdNYXJzaGFsbGVyKHRoaXMuc3RhdGUpO1xucmV0dXJuIHB1Ymxpc2hpbmcudG9DYXBEYXRhKHZhbCk7XG4gfSxcbmZyb21DYXBEYXRhKGRhdGEpe1xuY29uc3QgcHVibGlzaGluZz1tYWtlUHVibGlzaGluZ01hcnNoYWxsZXIodGhpcy5zdGF0ZSk7XG5yZXR1cm4gcHVibGlzaGluZy5mcm9tQ2FwRGF0YShkYXRhKTtcbiB9LFxuc2VyaWFsaXplKGRhdGEpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnB1Ymxpc2hpbmdNYXJzaGFsbGVyLnRvQ2FwRGF0YShkYXRhKTtcbiB9LFxudW5zZXJpYWxpemUoZGF0YSl7XG5yZXR1cm4gdGhpcy5mYWNldHMucHVibGlzaGluZ01hcnNoYWxsZXIuZnJvbUNhcERhdGEoZGF0YSk7XG4gfX19KTtcblxuXG5cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaOKAjV9vbmNlLnByZXBhcmVCb2FyZEtpdChwcmVwYXJlQm9hcmRLaXQpO1xuY29uc3QgICAgICAgIHByZXBhcmVSZWNvcmRlckZhY3Rvcnk9KHpvbmUpPT57XG5jb25zdCBiYWdnYWdlPXpvbmUubWFwU3RvcmUoIGBSZWNvcmRlciBCYWdnYWdlYCk7XG5jb25zdCBtYWtlRHVyYWJsZVB1Ymxpc2hLaXQ9cHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KFxuYmFnZ2FnZSxcbidEdXJhYmxlUHVibGlzaEtpdCcpO1xuXG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVSZWNvcmRlcktpdD0obGFiZWwsbWFyc2hhbGxlcik9PntcbmNvbnN0IG15Wm9uZT16b25lLnN1YlpvbmUobGFiZWwpO1xuY29uc3QgbWFrZVJlY29yZGVyPXByZXBhcmVSZWNvcmRlcihcbm15Wm9uZS5tYXBTdG9yZSggYFJlY29yZGVyIEJhZ2dhZ2U6ICR7bGFiZWx9YCksXG5tYXJzaGFsbGVyKTtcblxucmV0dXJuIGRlZmluZVJlY29yZGVyS2l0KHttYWtlUmVjb3JkZXIsbWFrZUR1cmFibGVQdWJsaXNoS2l0fSk7XG4gfTtcblxucmV0dXJuIHByZXBhcmVSZWNvcmRlcktpdDtcbiB9OyRo4oCNX29uY2UucHJlcGFyZVJlY29yZGVyRmFjdG9yeShwcmVwYXJlUmVjb3JkZXJGYWN0b3J5KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkRFRkFVTFRfQ1JDX0RJR0lUUyI6WyJERUZBVUxUX0NSQ19ESUdJVFMiXSwiREVGQVVMVF9QUkVGSVgiOlsiREVGQVVMVF9QUkVGSVgiXSwicHJlcGFyZUJvYXJkS2l0IjpbInByZXBhcmVCb2FyZEtpdCJdLCJwcmVwYXJlUmVjb3JkZXJGYWN0b3J5IjpbInByZXBhcmVSZWNvcmRlckZhY3RvcnkiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAAi7Ho8ILAADCCwAALQAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvYWN0aW9ucy5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9ldmVudHVhbC1zZW5kIl0sImV4cG9ydHMiOlsibWFrZVBheW1lbnRBY3Rpb25zIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlUHJvbWlzZUtpdCxGYXIsRTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VQcm9taXNlS2l0ID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5jb25zdCAgICAgICAgbWFrZVBheW1lbnRBY3Rpb25zPSh7XG5nZXRCcmFuZFJlY29yZCxcbmdldFB1cnNlQnlQZXRuYW1lLFxuZ2V0UmVjb3JkLFxudXBkYXRlUmVjb3JkLFxuZ2V0QXV0b0RlcG9zaXRQdXJzZSxcbmdldElzc3VlckJvYXJkSWR9KT0+XG57XG5jb25zdCBkZXBvc2l0ZWRQSz1tYWtlUHJvbWlzZUtpdCgpO1xuXG5yZXR1cm4gRmFyKCdwYXltZW50IGFjdGlvbnMnLHtcbmRlcG9zaXQ6YXN5bmMocHVyc2VPclBldG5hbWU9dW5kZWZpbmVkKT0+e1xuY29uc3Qgb2xkUGF5bWVudFJlY29yZD1nZXRSZWNvcmQoKTtcbmNvbnN0e2JyYW5kLHBheW1lbnR9PW9sZFBheW1lbnRSZWNvcmQ7XG5hc3NlcnQocGF5bWVudCk7XG5cbi8qICAgICAgICAgICAgICAgICovXG5sZXQgcHVyc2U7XG5pZihwdXJzZU9yUGV0bmFtZT09PXVuZGVmaW5lZCl7XG5jb25zdCBhdXRvRGVwb3NpdFB1cnNlPWdldEF1dG9EZXBvc2l0UHVyc2UoYnJhbmQpO1xuaWYoIWF1dG9EZXBvc2l0UHVyc2Upe1xuLy9cbnJldHVybiBkZXBvc2l0ZWRQSy5wcm9taXNlO1xuIH1cbi8vXG5wdXJzZT1nZXRBdXRvRGVwb3NpdFB1cnNlKGJyYW5kKTtcbiB9ZWxzZSBpZihcbkFycmF5LmlzQXJyYXkocHVyc2VPclBldG5hbWUpfHxcbnR5cGVvZiBwdXJzZU9yUGV0bmFtZT09PSdzdHJpbmcnKVxue1xucHVyc2U9Z2V0UHVyc2VCeVBldG5hbWUocHVyc2VPclBldG5hbWUpO1xuIH1lbHNle1xucHVyc2U9cHVyc2VPclBldG5hbWU7XG4gfVxuY29uc3QgYnJhbmRSZWNvcmQ9Z2V0QnJhbmRSZWNvcmQoYnJhbmQpO1xudXBkYXRlUmVjb3JkKHsuLi5vbGRQYXltZW50UmVjb3JkLHN0YXR1czoncGVuZGluZyd9LGJyYW5kUmVjb3JkKTtcbi8vXG5FKHB1cnNlKS5cbmRlcG9zaXQocGF5bWVudCkuXG50aGVuKFxuKGRlcG9zaXRlZEFtb3VudCk9PntcbnVwZGF0ZVJlY29yZChcbntcbi4uLmdldFJlY29yZCgpLFxuLy9cbnBheW1lbnQ6dW5kZWZpbmVkLFxuc3RhdHVzOidkZXBvc2l0ZWQnLFxuZGVwb3NpdGVkQW1vdW50fSxcblxuYnJhbmRSZWNvcmQpO1xuXG5kZXBvc2l0ZWRQSy5yZXNvbHZlKGRlcG9zaXRlZEFtb3VudCk7XG4gfSxcbihlKT0+e1xuY29uc29sZS5lcnJvcihcbidFcnJvciBkZXBvc2l0aW5nIHBheW1lbnQgaW4nLFxucHVyc2VPclBldG5hbWV8fCdkZWZhdWx0IHB1cnNlJyxcbmUpO1xuXG5pZihwdXJzZU9yUGV0bmFtZT09PXVuZGVmaW5lZCl7XG4vL1xuLy9cbnVwZGF0ZVJlY29yZCh7XG4uLi5nZXRSZWNvcmQoKSxcbnN0YXR1czp1bmRlZmluZWR9KTtcblxuZGVwb3NpdGVkUEsucmVqZWN0KGUpO1xuIH1lbHNle1xuLy9cbi8vXG5kZXBvc2l0ZWRQSy5yZXNvbHZlKGdldFJlY29yZCgpLmFjdGlvbnMuZGVwb3NpdCh1bmRlZmluZWQpKTtcbiB9XG4gfSk7XG5cbnJldHVybiBkZXBvc2l0ZWRQSy5wcm9taXNlO1xuIH0sXG5yZWZyZXNoOmFzeW5jKCk9PntcbmNvbnN0IG9sZFBheW1lbnRSZWNvcmQ9Z2V0UmVjb3JkKCk7XG5jb25zdHticmFuZCxpc3N1ZXIscGF5bWVudH09b2xkUGF5bWVudFJlY29yZDtcbmNvbnN0IGJyYW5kUmVjb3JkPWdldEJyYW5kUmVjb3JkKGJyYW5kKTtcbmlmKCFicmFuZFJlY29yZCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5pZighaXNzdWVyKXtcbnVwZGF0ZVJlY29yZChcbntcbi4uLm9sZFBheW1lbnRSZWNvcmQsXG5pc3N1ZXJCb2FyZElkOmdldElzc3VlckJvYXJkSWQoYnJhbmRSZWNvcmQuaXNzdWVyKX0sXG5cbmJyYW5kUmVjb3JkKTtcblxucmV0dXJuIHRydWU7XG4gfVxuXG5pZighcGF5bWVudCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5jb25zdCBpc0xpdmU9YXdhaXQgRShpc3N1ZXIpLmlzTGl2ZShwYXltZW50KTtcbmlmKGlzTGl2ZSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG51cGRhdGVSZWNvcmQoe1xuLi4ub2xkUGF5bWVudFJlY29yZCxcbi8vXG5wYXltZW50OnVuZGVmaW5lZCxcbnN0YXR1czonZXhwaXJlZCd9KTtcblxucmV0dXJuIHRydWU7XG4gfSxcbmdldEFtb3VudE9mOmFzeW5jKCk9PntcbmNvbnN0IG9sZFBheW1lbnRSZWNvcmQ9Z2V0UmVjb3JkKCk7XG5jb25zdHtpc3N1ZXIscGF5bWVudH09b2xkUGF5bWVudFJlY29yZDtcbmFzc2VydChpc3N1ZXIpO1xuYXNzZXJ0KHBheW1lbnQpO1xuXG4vL1xuY29uc3QgbGFzdEFtb3VudD1hd2FpdCBFKGlzc3VlcikuZ2V0QW1vdW50T2YocGF5bWVudCk7XG5cbnVwZGF0ZVJlY29yZCh7XG4uLi5vbGRQYXltZW50UmVjb3JkLFxubGFzdEFtb3VudH0pO1xuXG5yZXR1cm4gdHJ1ZTtcbiB9fSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZVBheW1lbnRBY3Rpb25zKG1ha2VQYXltZW50QWN0aW9ucyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUGF5bWVudEFjdGlvbnMiOlsibWFrZVBheW1lbnRBY3Rpb25zIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJzixjyuAgAArgIAADUAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2JpZ2ludFN0cmluZ2lmeS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYmlnaW50U3RyaW5naWZ5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuLy9cbi8vXG5jb25zdCAgICAgICAgYmlnaW50U3RyaW5naWZ5PSh4KT0+XG5KU09OLnN0cmluZ2lmeSh4LChfa2V5LHZhbHVlKT0+e1xuaWYodHlwZW9mIHZhbHVlIT09J2JpZ2ludCcpe1xuLy9cbnJldHVybiB2YWx1ZTtcbiB9XG5pZih2YWx1ZTw9QmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSl7XG4vL1xucmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gfVxuLy9cbi8vXG5yZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiB9KTskaOKAjV9vbmNlLmJpZ2ludFN0cmluZ2lmeShiaWdpbnRTdHJpbmdpZnkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYmlnaW50U3RyaW5naWZ5IjpbImJpZ2ludFN0cmluZ2lmeSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA6rqU6aQkAAGkJAAAuAAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9kYXRlLW5vdy5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGFnb3JpYy9ub3RpZmllciIsIkBlbmRvL3Byb21pc2Uta2l0Il0sImV4cG9ydHMiOlsiREVGQVVMVF9USU1FUl9ERVZJQ0VfU0NBTEUiLCJERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCIsIm1ha2VUaW1lckRldmljZURhdGVOb3ciLCJtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxvYnNlcnZlTm90aWZpZXIsbWFrZVByb21pc2VLaXQ7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyXCIsIFtbXCJvYnNlcnZlTm90aWZpZXJcIiwgWyRo4oCNX2EgPT4gKG9ic2VydmVOb3RpZmllciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VQcm9taXNlS2l0ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5jb25zdCAgICAgICAgREVGQVVMVF9USU1FUl9TRVJWSUNFX1BPTExfSU5URVJWQUw9NjBfMDAwbjskaOKAjV9vbmNlLkRFRkFVTFRfVElNRVJfU0VSVklDRV9QT0xMX0lOVEVSVkFMKERFRkFVTFRfVElNRVJfU0VSVklDRV9QT0xMX0lOVEVSVkFMKTtcbmNvbnN0ICAgICAgICBERUZBVUxUX1RJTUVSX0RFVklDRV9TQ0FMRT0xO1xuXG4vL1xuLy9cbiRo4oCNX29uY2UuREVGQVVMVF9USU1FUl9ERVZJQ0VfU0NBTEUoREVGQVVMVF9USU1FUl9ERVZJQ0VfU0NBTEUpO2NvbnN0IG1ha2VUaW1lckRldmljZURhdGVOb3c9XG4oRCx0aW1lckRldmljZSx0aW1lckRldmljZVNjYWxlPURFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFKT0+XG4oKT0+e1xuY29uc3Qgc3RhbXA9RCh0aW1lckRldmljZSkuZ2V0TGFzdFBvbGxlZCgpO1xuY29uc3QgbGFzdFBvbGxlZFN0YW1wPXBhcnNlSW50KCBgJHtzdGFtcH1gLDEwKSp0aW1lckRldmljZVNjYWxlO1xucmV0dXJuIGxhc3RQb2xsZWRTdGFtcDtcbiB9O1xuXG4vL1xuLy9cbiRo4oCNX29uY2UubWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyhtYWtlVGltZXJEZXZpY2VEYXRlTm93KTtjb25zdCBtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdz0oXG50aW1lclNlcnZpY2UsXG50aW1lclBvbGxJbnRlcnZhbD1ERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCk9Plxue1xubGV0IGxhc3RQb2xsZWRTdGFtcD1OYU47XG5jb25zdCBkYXRlTm93PSgpPT5sYXN0UG9sbGVkU3RhbXA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkYXRlTm93UEs9bWFrZVByb21pc2VLaXQoKTtcblxuLy9cbmNvbnN0IG9ic2VydmVUaW1lcj1hc3luYygpPT57XG5jb25zdCBvYnNlcnZlcj17XG51cGRhdGVTdGF0ZShzdGFtcCl7XG5sYXN0UG9sbGVkU3RhbXA9cGFyc2VJbnQoIGAke3N0YW1wfWAsMTApO1xuZGF0ZU5vd1BLLnJlc29sdmUoZGF0ZU5vdyk7XG4gfX07XG5cblxuLy9cbmNvbnN0IHN0YW1wPWF3YWl0IEUodGltZXJTZXJ2aWNlKS5nZXRDdXJyZW50VGltZXN0YW1wKCk7XG5vYnNlcnZlci51cGRhdGVTdGF0ZShzdGFtcCk7XG5cbi8vXG4vL1xuY29uc3QgdGltZXJOb3RpZmllcj1FKHRpbWVyU2VydmljZSkubWFrZU5vdGlmaWVyKDBuLHRpbWVyUG9sbEludGVydmFsKTtcblxuLy9cbmF3YWl0IG9ic2VydmVOb3RpZmllcih0aW1lck5vdGlmaWVyLG9ic2VydmVyKTtcbiB9O1xuXG5vYnNlcnZlVGltZXIoKS5jYXRjaCgoZSk9PmRhdGVOb3dQSy5yZWplY3QoZSkpO1xuXG4vL1xucmV0dXJuIGRhdGVOb3dQSy5wcm9taXNlO1xuIH07JGjigI1fb25jZS5tYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyhtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCI6WyJERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCJdLCJERUZBVUxUX1RJTUVSX0RFVklDRV9TQ0FMRSI6WyJERUZBVUxUX1RJTUVSX0RFVklDRV9TQ0FMRSJdLCJtYWtlVGltZXJEZXZpY2VEYXRlTm93IjpbIm1ha2VUaW1lckRldmljZURhdGVOb3ciXSwibWFrZVRpbWVyU2VydmljZURhdGVOb3ciOlsibWFrZVRpbWVyU2VydmljZURhdGVOb3ciXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmHUVKe0SAADtEgAAOgAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvZmluZE9yTWFrZUludml0YXRpb24uanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL2VydHAiXSwiZXhwb3J0cyI6WyJmaW5kT3JNYWtlSW52aXRhdGlvbiIsIm1ha2VJZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEZhaWwscSxFLHBhc3NTdHlsZU9mLEFtb3VudE1hdGg7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhc3NlcnRcIiwgWyRo4oCNX2EgPT4gKGFzc2VydCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaOKAjV9hID0+IChwYXNzU3R5bGVPZiA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRo4oCNX2EgPT4gKEFtb3VudE1hdGggPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuY29uc3QgICAgICAgIG1ha2VJZD0oZGFwcE9yaWdpbixyYXdJZCk9PiBgJHtkYXBwT3JpZ2lufSMke3Jhd0lkfWA7JGjigI1fb25jZS5tYWtlSWQobWFrZUlkKTtcblxuY29uc3QgYXNzZXJ0Rmlyc3RDYXBBU0NJST0oc3RyKT0+e1xuYXNzZXJ0LnR5cGVvZihzdHIsJ3N0cmluZycpO1xuY29uc3QgZmlyc3RDYXBBU0NJST0vXltBLVpdW2EtekEtWjAtOV8kXSokLztcbmZpcnN0Q2FwQVNDSUkudGVzdChzdHIpfHxcbkZhaWwgYFRoZSBzdHJpbmcgJHtxKFxuc3RyKVxuIH0gbXVzdCBiZSBhbiBhc2NpaSBpZGVudGlmaWVyIHN0YXJ0aW5nIHdpdGggdXBwZXIgY2FzZS5gO1xuc3RyIT09J05hTicmJnN0ciE9PSdJbmZpbml0eSd8fFxuRmFpbCBga2V5d29yZCAke3Eoc3RyKX0gbXVzdCBub3QgYmUgYSBudW1iZXIncyBuYW1lYDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBmaW5kQnlCb2FyZElkPWFzeW5jKGludml0YXRpb25QdXJzZUJhbGFuY2Use2JvYXJkLGJvYXJkSWR9KT0+e1xuYXNzZXJ0LnR5cGVvZihib2FyZElkLCdzdHJpbmcnKTtcbmNvbnN0IGludml0YXRpb25IYW5kbGU9YXdhaXQgRShib2FyZCkuZ2V0VmFsdWUoYm9hcmRJZCk7XG5jb25zdCBtYXRjaD0oZWxlbWVudCk9PmVsZW1lbnQuaGFuZGxlPT09aW52aXRhdGlvbkhhbmRsZTtcbmNvbnN0IG1hdGNoaW5nVmFsdWU9aW52aXRhdGlvblB1cnNlQmFsYW5jZS52YWx1ZS5maW5kKG1hdGNoKTtcbm1hdGNoaW5nVmFsdWV8fEZhaWwgYENhbm5vdCBmaW5kIGludml0YXRpb24gY29ycmVzcG9uZGluZyB0byAke3EoYm9hcmRJZCl9YDtcblxucmV0dXJuIGhhcmRlbihbbWF0Y2hpbmdWYWx1ZV0pO1xuIH07XG5cbi8vXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0IGZpbmRCeUtleVZhbHVlUGFpcnM9YXN5bmMoaW52aXRhdGlvblB1cnNlQmFsYW5jZSxrdnMpPT57XG4vL1xuLy9cbi8vXG5jb25zdCBtYXRjaGVzPShpbnZpdGF0aW9uRGV0YWlsKT0+XG5PYmplY3QuZW50cmllcyhrdnMpLmV2ZXJ5KFxuKFtrZXksdmFsdWVdKT0+aW52aXRhdGlvbkRldGFpbFtrZXldPT09dmFsdWUpO1xuXG5cbmNvbnN0IG1hdGNoaW5nVmFsdWU9aW52aXRhdGlvblB1cnNlQmFsYW5jZS52YWx1ZS5maW5kKG1hdGNoZXMpO1xubWF0Y2hpbmdWYWx1ZXx8RmFpbCBgQ2Fubm90IGZpbmQgaW52aXRhdGlvbiBjb3JyZXNwb25kaW5nIHRvICR7cShrdnMpfWA7XG5yZXR1cm4gaGFyZGVuKFttYXRjaGluZ1ZhbHVlXSk7XG4gfTtcblxuY29uc3QgbWFrZUZpbmRJbnZpdGF0aW9uPShpbnZpdGF0aW9uUHVyc2UsaW52aXRhdGlvbkJyYW5kKT0+e1xuY29uc3QgZmluZEludml0YXRpb249YXN5bmMocXVlcnlGbixxdWVyeVBhcmFtcyk9PntcbmNvbnN0IHB1cnNlQmFsYW5jZT1hd2FpdCBFKGludml0YXRpb25QdXJzZSkuZ2V0Q3VycmVudEFtb3VudCgpO1xuY29uc3QgdmFsdWU9YXdhaXQgcXVlcnlGbihwdXJzZUJhbGFuY2UscXVlcnlQYXJhbXMpO1xuY29uc3QgaW52aXRhdGlvbkFtb3VudD1BbW91bnRNYXRoLm1ha2UoaW52aXRhdGlvbkJyYW5kLHZhbHVlKTtcbmNvbnN0IGludml0YXRpb25QPUUoaW52aXRhdGlvblB1cnNlKS53aXRoZHJhdyhpbnZpdGF0aW9uQW1vdW50KTtcbnJldHVybiBpbnZpdGF0aW9uUDtcbiB9O1xucmV0dXJuIGZpbmRJbnZpdGF0aW9uO1xuIH07XG5cbmNvbnN0IG1ha2VDb250aW51aW5nSW52aXRhdGlvbj1hc3luYyhcbmlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQsXG5kYXBwT3JpZ2luLFxue3ByaW9yT2ZmZXJJZDpyYXdQcmlvck9mZmVySWQsZGVzY3JpcHRpb259KT0+XG57XG5hc3NlcnRGaXJzdENhcEFTQ0lJKGRlc2NyaXB0aW9uKTtcblxuY29uc3QgcHJpb3JPZmZlcklkPW1ha2VJZChkYXBwT3JpZ2luLHJhd1ByaW9yT2ZmZXJJZCk7XG5jb25zdCBvZmZlclJlc3VsdD1hd2FpdCBpZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LmdldChwcmlvck9mZmVySWQpLnByb21pc2U7XG5hc3NlcnQoXG5wYXNzU3R5bGVPZihvZmZlclJlc3VsdCk9PT0nY29weVJlY29yZCcsXG4gYG9mZmVyUmVzdWx0IG11c3QgYmUgYSByZWNvcmQgdG8gaGF2ZSBhbiBpbnZpdGF0aW9uTWFrZXJzIHByb3BlcnR5YCk7XG5cbmFzc2VydChcbm9mZmVyUmVzdWx0Lmludml0YXRpb25NYWtlcnMsXG4gYG9mZmVyUmVzdWx0IGRvZXMgbm90IGhhdmUgYW4gaW52aXRhdGlvbk1ha2VycyBwcm9wZXJ0eWApO1xuXG5cbmNvbnN0IGludml0YXRpb25QPUUob2ZmZXJSZXN1bHQuaW52aXRhdGlvbk1ha2VycylbZGVzY3JpcHRpb25dKCk7XG5yZXR1cm4gaW52aXRhdGlvblA7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUludml0YXRpb249YXN5bmMoXG5pbnZpdGF0aW9uTWFrZXIsXG5pbnN0YW5jZUhhbmRsZUJvYXJkSWQsXG5ib2FyZCxcbnpvZSk9Plxue1xuY29uc3QgaW5zdGFuY2U9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbkUoYm9hcmQpLmdldFZhbHVlKGluc3RhbmNlSGFuZGxlQm9hcmRJZCk7XG5cbmNvbnN0IHB1YmxpY0ZhY2V0PUUoem9lKS5nZXRQdWJsaWNGYWNldChpbnN0YW5jZSk7XG5jb25zdHttZXRob2QsYXJncz1bXX09aW52aXRhdGlvbk1ha2VyO1xuXG5yZXR1cm4gRShwdWJsaWNGYWNldClbbWV0aG9kXSguLi5hcmdzKTtcbiB9O1xuXG5jb25zdCAgICAgICAgZmluZE9yTWFrZUludml0YXRpb249YXN5bmMoXG5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LFxuYm9hcmQsXG56b2UsXG5pbnZpdGF0aW9uUHVyc2UsXG5pbnZpdGF0aW9uQnJhbmQsXG5vZmZlcik9Plxue1xuaWYob2ZmZXIuaW52aXRhdGlvbil7XG4vL1xucmV0dXJuIG9mZmVyLmludml0YXRpb247XG4gfVxuXG5jb25zdCBmaW5kSW52aXRhdGlvbj1tYWtlRmluZEludml0YXRpb24oaW52aXRhdGlvblB1cnNlLGludml0YXRpb25CcmFuZCk7XG5cbi8vXG5pZihvZmZlci5pbnZpdGVIYW5kbGVCb2FyZElkKXtcbmNvbnN0IHF1ZXJ5UGFyYW1zPXtcbmJvYXJkLFxuYm9hcmRJZDpvZmZlci5pbnZpdGVIYW5kbGVCb2FyZElkfTtcblxucmV0dXJuIGZpbmRJbnZpdGF0aW9uKGZpbmRCeUJvYXJkSWQscXVlcnlQYXJhbXMpO1xuIH1cblxuLy9cbmlmKG9mZmVyLmludml0YXRpb25IYW5kbGVCb2FyZElkKXtcbmNvbnN0IHF1ZXJ5UGFyYW1zPXtcbmJvYXJkLFxuYm9hcmRJZDpvZmZlci5pbnZpdGF0aW9uSGFuZGxlQm9hcmRJZH07XG5cbnJldHVybiBmaW5kSW52aXRhdGlvbihmaW5kQnlCb2FyZElkLHF1ZXJ5UGFyYW1zKTtcbiB9XG5cbmlmKG9mZmVyLmludml0YXRpb25NYWtlcil7XG5yZXR1cm4gbWFrZUludml0YXRpb24oXG5vZmZlci5pbnZpdGF0aW9uTWFrZXIsXG5vZmZlci5pbnN0YW5jZUhhbmRsZUJvYXJkSWQsXG5ib2FyZCxcbnpvZSk7XG5cbiB9XG5cbmlmKG9mZmVyLmludml0YXRpb25RdWVyeSl7XG5yZXR1cm4gZmluZEludml0YXRpb24oZmluZEJ5S2V5VmFsdWVQYWlycyxvZmZlci5pbnZpdGF0aW9uUXVlcnkpO1xuIH1cblxuaWYob2ZmZXIuY29udGludWluZ0ludml0YXRpb24pe1xuY29uc3QgZGFwcE9yaWdpbj1cbm9mZmVyLnJlcXVlc3RDb250ZXh0JiZvZmZlci5yZXF1ZXN0Q29udGV4dC5kYXBwT3JpZ2luP1xub2ZmZXIucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbjpcbiBgdW5rbm93bmA7XG5yZXR1cm4gbWFrZUNvbnRpbnVpbmdJbnZpdGF0aW9uKFxuaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdCxcbmRhcHBPcmlnaW4sXG5vZmZlci5jb250aW51aW5nSW52aXRhdGlvbik7XG5cbiB9XG5cbnRocm93IEZhaWwgYG5vIGludml0YXRpb24gd2FzIGZvdW5kIG9yIG1hZGUgZm9yIHRoaXMgb2ZmZXIgJHtvZmZlci5pZH1gO1xuIH07JGjigI1fb25jZS5maW5kT3JNYWtlSW52aXRhdGlvbihmaW5kT3JNYWtlSW52aXRhdGlvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlSWQiOlsibWFrZUlkIl0sImZpbmRPck1ha2VJbnZpdGF0aW9uIjpbImZpbmRPck1ha2VJbnZpdGF0aW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADxpTsZQAgAAUAIAADQAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2ludGVybmFsLXR5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAFXhTL6gIAACoCAAAMQAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvaXNzdWVyVGFibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBhZ29yaWMvc3RvcmUiLCIuL2ludGVybmFsLXR5cGVzLmpzIl0sImV4cG9ydHMiOlsibWFrZUlzc3VlclRhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRSxtYWtlU2NhbGFyV2Vha01hcFN0b3JlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaOKAjV9hID0+IChhc3NlcnQgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyV2Vha01hcFN0b3JlID0gJGjigI1fYSldXV1dLFtcIi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlSXNzdWVyVGFibGU9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBicmFuZFRvSXNzdWVyUmVjb3JkPW1ha2VTY2FsYXJXZWFrTWFwU3RvcmUoJ2JyYW5kJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3VlclRvSXNzdWVyUmVjb3JkPW1ha2VTY2FsYXJXZWFrTWFwU3RvcmUoJ2lzc3VlcicpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNzdWVyVGFibGU9e1xuaGFzQnlCcmFuZDpicmFuZFRvSXNzdWVyUmVjb3JkLmhhcyxcbmdldEJ5QnJhbmQ6YnJhbmRUb0lzc3VlclJlY29yZC5nZXQsXG5oYXNCeUlzc3Vlcjppc3N1ZXJUb0lzc3VlclJlY29yZC5oYXMsXG5nZXRCeUlzc3Vlcjppc3N1ZXJUb0lzc3VlclJlY29yZC5nZXQsXG4vL1xuLy9cbmluaXRJc3N1ZXI6YXN5bmMoaXNzdWVyUCxhZGRNZXRhPSh4KT0+eCk9PntcbmNvbnN0IGJyYW5kUD1FKGlzc3VlclApLmdldEJyYW5kKCk7XG5jb25zdCBicmFuZElzc3Vlck1hdGNoUD1FKGJyYW5kUCkuaXNNeUlzc3Vlcihpc3N1ZXJQKTtcbmNvbnN0IGRpc3BsYXlJbmZvUD1FKGJyYW5kUCkuZ2V0RGlzcGxheUluZm8oKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0W2lzc3VlcixicmFuZCxicmFuZElzc3Vlck1hdGNoLGRpc3BsYXlJbmZvXT1hd2FpdCBQcm9taXNlLmFsbChbXG5pc3N1ZXJQLFxuYnJhbmRQLFxuYnJhbmRJc3N1ZXJNYXRjaFAsXG5kaXNwbGF5SW5mb1BdKTtcblxuLy9cblxuaWYoaXNzdWVyVG9Jc3N1ZXJSZWNvcmQuaGFzKGlzc3Vlcikpe1xucmV0dXJuIGlzc3VlclRvSXNzdWVyUmVjb3JkLmdldChpc3N1ZXIpO1xuIH1cbmFzc2VydChcbmJyYW5kSXNzdWVyTWF0Y2gsXG4gYGlzc3VlciB3YXMgdXNpbmcgYSBicmFuZCB3aGljaCB3YXMgbm90IGl0cyBvd25gKTtcblxuaXNzdWVyVGFibGUuaW5pdElzc3VlckJ5UmVjb3JkKFxuYWRkTWV0YSh7XG5icmFuZCxcbmlzc3VlcixcbmFzc2V0S2luZDpkaXNwbGF5SW5mby5hc3NldEtpbmQsXG5kaXNwbGF5SW5mb30pKTtcblxuXG5yZXR1cm4gaXNzdWVyVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG4gfSxcbmluaXRJc3N1ZXJCeVJlY29yZDooaXNzdWVyUmVjb3JkKT0+e1xuY29uc3R7YnJhbmQsaXNzdWVyfT1pc3N1ZXJSZWNvcmQ7XG5icmFuZFRvSXNzdWVyUmVjb3JkLmluaXQoYnJhbmQsaXNzdWVyUmVjb3JkKTtcbmlzc3VlclRvSXNzdWVyUmVjb3JkLmluaXQoaXNzdWVyLGlzc3VlclJlY29yZCk7XG4gfX07XG5cblxucmV0dXJuIGlzc3VlclRhYmxlO1xuIH07JGjigI1fb25jZS5tYWtlSXNzdWVyVGFibGUobWFrZUlzc3VlclRhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VJc3N1ZXJUYWJsZSI6WyJtYWtlSXNzdWVyVGFibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAq92NmiweAAAsHgAAMwAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvbGliLWRlaHlkcmF0ZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbImlzUGF0aCIsIm1ha2VEZWh5ZHJhdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRmFpbCxxLG1ha2VNYXJzaGFsLG1hcEl0ZXJhYmxlLG1ha2VMZWdhY3lNYXAsbWFrZVNjYWxhck1hcFN0b3JlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaOKAjV9hID0+IChhc3NlcnQgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wibWFrZU1hcnNoYWxcIiwgWyRo4oCNX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjigI1fYSldXSxbXCJtYXBJdGVyYWJsZVwiLCBbJGjigI1fYSA9PiAobWFwSXRlcmFibGUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibWFrZUxlZ2FjeU1hcFwiLCBbJGjigI1fYSA9PiAobWFrZUxlZ2FjeU1hcCA9ICRo4oCNX2EpXV0sW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1BhdGg9KHgpPT57XG5pZighQXJyYXkuaXNBcnJheSh4KSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxueC5sZW5ndGg+MHx8RmFpbCBgUGF0aCAke3EoeCl9IG11c3Qgbm90IGJlIGVtcHR5YDtcbmZvcihjb25zdCBuYW1lIG9mIHgpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07JGjigI1fb25jZS5pc1BhdGgoaXNQYXRoKTtcblxuY29uc3QgSU1QTE9ERV9QUkVGSVg9J0lFOic7XG5cbi8vXG4vL1xuLy9cbmNvbnN0ICAgICAgICBtYWtlRGVoeWRyYXRvcj0oaW5pdGlhbFVubmFtZWRDb3VudD0wKT0+e1xubGV0IHVubmFtZWRDb3VudD1pbml0aWFsVW5uYW1lZENvdW50O1xuXG4vL1xuY29uc3QgcGV0bmFtZUtpbmRUb01hcHBpbmc9bWFrZUxlZ2FjeU1hcCgncGV0bmFtZUtpbmQnKTtcblxuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNlYXJjaE9yZGVyPVtdO1xuXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHZhbFRvUGF0aHM9bWFrZVNjYWxhck1hcFN0b3JlKCd2YWx1ZScpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBleHBsb2RlPShkYXRhKT0+e1xuZGF0YS5zdGFydHNXaXRoKElNUExPREVfUFJFRklYKXx8XG5GYWlsIGBleHBsb2RlZCBzdHJpbmcgJHtkYXRhfSBtdXN0IHN0YXJ0IHdpdGggJHtxKElNUExPREVfUFJFRklYKX1gO1xuY29uc3Qgc3Ryb25nbmFtZT1KU09OLnBhcnNlKGRhdGEuc2xpY2UoSU1QTE9ERV9QUkVGSVgubGVuZ3RoKSk7XG5pZighaXNQYXRoKHN0cm9uZ25hbWUpKXtcbnJldHVybiBzdHJvbmduYW1lO1xuIH1cbi8vXG5jb25zdHt2YWxUb1BldG5hbWU6cm9vdFRvUGV0bmFtZX09ZWRnZU1hcHBpbmc7XG5jb25zdCBwZXRuYW1lPXJvb3RUb1BldG5hbWUuZ2V0KHN0cm9uZ25hbWVbMF0pO1xuYXNzZXJ0KCFpc1BhdGgocGV0bmFtZSkpO1xuc3Ryb25nbmFtZVswXT1wZXRuYW1lO1xucmV0dXJuIGhhcmRlbihzdHJvbmduYW1lKTtcbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBpbXBsb2RlPShzdHJvbmduYW1lKT0+e1xuaWYoIWlzUGF0aChzdHJvbmduYW1lKSl7XG5yZXR1cm4gYCR7SU1QTE9ERV9QUkVGSVh9JHtKU09OLnN0cmluZ2lmeShzdHJvbmduYW1lKX1gO1xuIH1cblxuLy9cbmNvbnN0IHBhdGg9Wy4uLnN0cm9uZ25hbWVdO1xuLy9cbmNvbnN0e3BldG5hbWVUb1ZhbDpwZXRuYW1lVG9Sb290fT1lZGdlTWFwcGluZztcbmlmKCFwZXRuYW1lVG9Sb290LmhhcyhwYXRoWzBdKSl7XG4vL1xuRmFpbCBgRWRnZW5hbWUgZm9yICR7cShwYXRoWzBdKX0gcGV0bmFtZSBub3QgZm91bmRgO1xuIH1cbmNvbnN0IHJvb3Q9cGV0bmFtZVRvUm9vdC5nZXQocGF0aFswXSk7XG5wYXRoWzBdPXJvb3Q7XG5cbnJldHVybiBgJHtJTVBMT0RFX1BSRUZJWH0ke0pTT04uc3RyaW5naWZ5KHBhdGgpfWA7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBtYWtlTWFwcGluZz0oa2luZCx7dXNlTGVnYWN5TWFwPWZhbHNlfT17fSk9PntcbnR5cGVvZiBraW5kPT09J3N0cmluZyd8fCBga2luZCAke2tpbmR9IG11c3QgYmUgYSBzdHJpbmdgO1xuY29uc3QgbWFrZU1hcD11c2VMZWdhY3lNYXA/bWFrZUxlZ2FjeU1hcDptYWtlU2NhbGFyTWFwU3RvcmU7XG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByYXdWYWxUb1BldG5hbWU9bWFrZU1hcCgndmFsdWUnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB2YWxUb1BldG5hbWU9e1xuLi4ucmF3VmFsVG9QZXRuYW1lLFxuc2V0KGtleSx2YWwpe1xucmF3VmFsVG9QZXRuYW1lLnNldChrZXksaW1wbG9kZSh2YWwpKTtcbiB9LFxuaW5pdChrZXksdmFsKXtcbnJhd1ZhbFRvUGV0bmFtZS5pbml0KGtleSxpbXBsb2RlKHZhbCkpO1xuIH0sXG5nZXQoa2V5KXtcbnJldHVybiBleHBsb2RlKHJhd1ZhbFRvUGV0bmFtZS5nZXQoa2V5KSk7XG4gfSxcbmVudHJpZXMoKXtcbnJldHVybiBtYXBJdGVyYWJsZShyYXdWYWxUb1BldG5hbWUuZW50cmllcygpLChba2V5LHZhbF0pPT5bXG5rZXksXG5leHBsb2RlKHZhbCldKTtcblxuIH0sXG52YWx1ZXMoKXtcbnJldHVybiBtYXBJdGVyYWJsZShyYXdWYWxUb1BldG5hbWUudmFsdWVzKCksKHZhbCk9PmV4cGxvZGUodmFsKSk7XG4gfX07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmF3UGV0bmFtZVRvVmFsPW1ha2VTY2FsYXJNYXBTdG9yZSgncGV0bmFtZScpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGV0bmFtZVRvVmFsPXtcbi4uLnJhd1BldG5hbWVUb1ZhbCxcbmluaXQoa2V5LHZhbCl7XG5yZXR1cm4gcmF3UGV0bmFtZVRvVmFsLmluaXQoaW1wbG9kZShrZXkpLHZhbCk7XG4gfSxcbnNldChrZXksdmFsKXtcbnJldHVybiByYXdQZXRuYW1lVG9WYWwuc2V0KGltcGxvZGUoa2V5KSx2YWwpO1xuIH0sXG5oYXMoa2V5KXtcbnRyeXtcbnJldHVybiByYXdQZXRuYW1lVG9WYWwuaGFzKGltcGxvZGUoa2V5KSk7XG4gfWNhdGNoKGUpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfSxcbmdldChrZXkpe1xucmV0dXJuIHJhd1BldG5hbWVUb1ZhbC5nZXQoaW1wbG9kZShrZXkpKTtcbiB9LFxuZGVsZXRlKGtleSl7XG5yZXR1cm4gcmF3UGV0bmFtZVRvVmFsLmRlbGV0ZShpbXBsb2RlKGtleSkpO1xuIH0sXG5rZXlzKCl7XG5yZXR1cm4gbWFwSXRlcmFibGUocmF3UGV0bmFtZVRvVmFsLmtleXMoKSwoa2V5KT0+ZXhwbG9kZShrZXkpKTtcbiB9LFxuZW50cmllcygpe1xucmV0dXJuIG1hcEl0ZXJhYmxlKHJhd1BldG5hbWVUb1ZhbC5lbnRyaWVzKCksKFtrZXksdmFsXSk9PltcbmV4cGxvZGUoa2V5KSxcbnZhbF0pO1xuXG4gfX07XG5cblxuLypcblxuXG4gICAgICovXG5jb25zdCBhZGRQYXRoPShwYXRoLHZhbCk9PntcbmlzUGF0aChwYXRoKXx8RmFpbCBgcGF0aCAke3EocGF0aCl9IG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nc2A7XG5cbmlmKFxuIXZhbFRvUGV0bmFtZS5oYXModmFsKSYmXG4vL1xuZWRnZU1hcHBpbmcudmFsVG9QZXRuYW1lLmhhcyhwYXRoWzBdKSlcbntcbi8vXG4vL1xudmFsVG9QZXRuYW1lLmluaXQodmFsLHBhdGgpO1xuIH1cblxuLy9cbmlmKCF2YWxUb1BhdGhzLmhhcyh2YWwpKXtcbnZhbFRvUGF0aHMuaW5pdCh2YWwsaGFyZGVuKFtwYXRoXSkpO1xucmV0dXJuO1xuIH1cbmNvbnN0IHBhdGhzPXZhbFRvUGF0aHMuZ2V0KHZhbCk7XG5cbi8vXG5jb25zdCBmb3VuZD1wYXRocy5maW5kKChlbmFtZSk9PntcbmlmKGVuYW1lLmxlbmd0aCE9PXBhdGgubGVuZ3RoKXtcbnJldHVybiBmYWxzZTtcbiB9XG5mb3IobGV0IGk9MDtpPGVuYW1lLmxlbmd0aDtpKz0xKXtcbmlmKGVuYW1lW2ldIT09cGF0aFtpXSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH0pO1xuXG4vL1xuaWYoIWZvdW5kKXtcbnZhbFRvUGF0aHMuc2V0KHZhbCxoYXJkZW4oWy4uLnBhdGhzLHBhdGhdKSk7XG4gfVxuIH07XG5cbmNvbnN0IGFkZFBldG5hbWU9KHBldG5hbWUsdmFsKT0+e1xuaWYocGV0bmFtZVRvVmFsLmhhcyhwZXRuYW1lKSYmcGV0bmFtZVRvVmFsLmdldChwZXRuYW1lKT09PXZhbCl7XG5yZXR1cm47XG4gfVxuIXBldG5hbWVUb1ZhbC5oYXMocGV0bmFtZSl8fEZhaWwgYHBldG5hbWUgJHtwZXRuYW1lfSBpcyBhbHJlYWR5IGluIHVzZWA7XG4hdmFsVG9QZXRuYW1lLmhhcyh2YWwpfHxGYWlsIGB2YWwgJHt2YWx9IGFscmVhZHkgaGFzIGEgcGV0bmFtZWA7XG5wZXRuYW1lVG9WYWwuaW5pdChwZXRuYW1lLHZhbCk7XG52YWxUb1BldG5hbWUuaW5pdCh2YWwscGV0bmFtZSk7XG5cbmlmKGlzUGF0aChwZXRuYW1lKSl7XG5hZGRQYXRoKHBldG5hbWUsdmFsKTtcbiB9XG4gfTtcblxuY29uc3QgcmVuYW1lUGV0bmFtZT0ocGV0bmFtZSx2YWwpPT57XG52YWxUb1BldG5hbWUuaGFzKHZhbCl8fFxuRmFpbCBgdmFsICR7dmFsfSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBuYW1lZCwgd291bGQgeW91IGxpa2UgdG8gYWRkIGl0IGluc3RlYWQ/YDtcbiFwZXRuYW1lVG9WYWwuaGFzKHBldG5hbWUpfHxGYWlsIGBwZXRuYW1lICR7cGV0bmFtZX0gaXMgYWxyZWFkeSBpbiB1c2VgO1xuLy9cbmNvbnN0IG9sZFBldG5hbWU9dmFsVG9QZXRuYW1lLmdldCh2YWwpO1xucGV0bmFtZVRvVmFsLmRlbGV0ZShvbGRQZXRuYW1lKTtcbnZhbFRvUGV0bmFtZS5kZWxldGUodmFsKTtcblxuLy9cbnBldG5hbWVUb1ZhbC5pbml0KHBldG5hbWUsdmFsKTtcbnZhbFRvUGV0bmFtZS5pbml0KHZhbCxwZXRuYW1lKTtcbiB9O1xuXG4vKlxuXG5cblxuICAgICAqL1xuY29uc3Qgc3VnZ2VzdFBldG5hbWU9KHBldG5hbWUsdmFsKT0+e1xuaWYodmFsVG9QZXRuYW1lLmhhcyh2YWwpKXtcbi8vXG5yZXR1cm4gdmFsVG9QZXRuYW1lLmdldCh2YWwpO1xuIH1cblxuLy9cbmxldCB1bmlxdWVQYXRoPXBldG5hbWU7XG5sZXQgbm9uY2U9MjtcbndoaWxlKHBldG5hbWVUb1ZhbC5oYXModW5pcXVlUGF0aCkpe1xuLy9cbmlmKGlzUGF0aChwZXRuYW1lKSl7XG51bmlxdWVQYXRoPVsuLi5wZXRuYW1lLCBgJHtub25jZX1gXTtcbiB9ZWxzZXtcbnVuaXF1ZVBhdGg9IGAke3BldG5hbWV9JHtub25jZX1gO1xuIH1cbm5vbmNlKz0xO1xuIH1cblxuLy9cbi8vXG4vL1xuYWRkUGV0bmFtZSh1bmlxdWVQYXRoLHZhbCk7XG5yZXR1cm4gdW5pcXVlUGF0aDtcbiB9O1xuXG5jb25zdCBkZWxldGVQZXRuYW1lPShwZXRuYW1lKT0+e1xucGV0bmFtZVRvVmFsLmhhcyhwZXRuYW1lKXx8XG5GYWlsIGBwZXRuYW1lICR7cShcbnBldG5hbWUpXG4gfSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBuYW1lZCwgd291bGQgeW91IGxpa2UgdG8gYWRkIGl0IGluc3RlYWQ/YDtcblxuLy9cbmNvbnN0IHZhbD1wZXRuYW1lVG9WYWwuZ2V0KHBldG5hbWUpO1xucGV0bmFtZVRvVmFsLmRlbGV0ZShwZXRuYW1lKTtcbnZhbFRvUGV0bmFtZS5kZWxldGUodmFsKTtcbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXBwaW5nPWhhcmRlbih7XG5pbXBsb2RlLFxuZXhwbG9kZSxcbnZhbFRvUGV0bmFtZSxcbnZhbFRvUGF0aHMsXG5wZXRuYW1lVG9WYWwsXG5hZGRQZXRuYW1lLFxuYWRkUGF0aCxcbnJlbmFtZVBldG5hbWUsXG5kZWxldGVQZXRuYW1lLFxuc3VnZ2VzdFBldG5hbWUsXG5raW5kfSk7XG5cbnBldG5hbWVLaW5kVG9NYXBwaW5nLmluaXQoa2luZCxtYXBwaW5nKTtcbnJldHVybiBtYXBwaW5nO1xuIH07XG5cbmNvbnN0IGVkZ2VNYXBwaW5nPW1ha2VNYXBwaW5nKCdlZGdlJyk7XG5jb25zdCB1bm5hbWVkTWFwcGluZz1tYWtlTWFwcGluZygndW5uYW1lZCcpO1xuXG5jb25zdCBhZGRUb1VubmFtZWQ9KHZhbCk9PntcbnVubmFtZWRDb3VudCs9MTtcbmNvbnN0IHBsYWNlaG9sZGVyPSBgdW5uYW1lZC0ke3VubmFtZWRDb3VudH1gO1xudW5uYW1lZE1hcHBpbmcuYWRkUGV0bmFtZShwbGFjZWhvbGRlcix2YWwpO1xuY29uc3QgcGxhY2Vob2xkZXJOYW1lPWhhcmRlbih7XG5raW5kOid1bm5hbWVkJyxcbnBldG5hbWU6cGxhY2Vob2xkZXJ9KTtcblxucmV0dXJuIHBsYWNlaG9sZGVyTmFtZTtcbiB9O1xuXG4vL1xuLy9cbmNvbnN0IGNvbnZlcnRWYWxUb05hbWU9KHZhbCk9PntcbmZvcihsZXQgaT0wO2k8c2VhcmNoT3JkZXIubGVuZ3RoO2krPTEpe1xuY29uc3Qga2luZD1zZWFyY2hPcmRlcltpXTtcbmNvbnN0e3ZhbFRvUGV0bmFtZX09cGV0bmFtZUtpbmRUb01hcHBpbmcuZ2V0KGtpbmQpO1xuaWYodmFsVG9QZXRuYW1lLmhhcyh2YWwpKXtcbnJldHVybiBoYXJkZW4oe1xua2luZCxcbnBldG5hbWU6dmFsVG9QZXRuYW1lLmdldCh2YWwpfSk7XG5cbiB9XG4gfVxuLy9cbi8vXG5pZih1bm5hbWVkTWFwcGluZy52YWxUb1BldG5hbWUuaGFzKHZhbCkpe1xucmV0dXJuIGhhcmRlbih7XG5raW5kOid1bm5hbWVkJyxcbnBldG5hbWU6dW5uYW1lZE1hcHBpbmcudmFsVG9QZXRuYW1lLmdldCh2YWwpfSk7XG5cbiB9XG4vL1xuY29uc3QgcGxhY2Vob2xkZXJOYW1lPWFkZFRvVW5uYW1lZCh2YWwpO1xucmV0dXJuIHBsYWNlaG9sZGVyTmFtZTtcbiB9O1xuXG5jb25zdCBjb252ZXJ0TmFtZVRvVmFsPSh7a2luZCxwZXRuYW1lfSxfaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7cGV0bmFtZVRvVmFsfT1wZXRuYW1lS2luZFRvTWFwcGluZy5nZXQoa2luZCk7XG5yZXR1cm4gcGV0bmFtZVRvVmFsLmdldChwZXRuYW1lKTtcbiB9O1xuXG5jb25zdHt0b0NhcERhdGE6ZGVoeWRyYXRlLGZyb21DYXBEYXRhOmh5ZHJhdGV9PW1ha2VNYXJzaGFsKFxuY29udmVydFZhbFRvTmFtZSxcbmNvbnZlcnROYW1lVG9WYWwsXG57XG5tYXJzaGFsTmFtZTonaHlkcmF0aW9uJyxcbi8vXG4vL1xuZXJyb3JJZE51bTozMF8wMDAsXG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5oeWRyYXRlLFxuZGVoeWRyYXRlLFxuZWRnZU1hcHBpbmcsXG4vKlxuXG5cblxuXG4gICAgICovXG5tYWtlTWFwcGluZzooa2luZCxsZWdhY3lPcHRpb25zPXVuZGVmaW5lZCk9PntcbmNvbnN0IG1hcHBpbmc9bWFrZU1hcHBpbmcoa2luZCxsZWdhY3lPcHRpb25zKTtcbnNlYXJjaE9yZGVyLnB1c2goa2luZCk7XG5yZXR1cm4gbWFwcGluZztcbiB9fSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZURlaHlkcmF0b3IobWFrZURlaHlkcmF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQYXRoIjpbImlzUGF0aCJdLCJtYWtlRGVoeWRyYXRvciI6WyJtYWtlRGVoeWRyYXRvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAADQ+o3kaUAAJGlAAAwAAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9saWItd2FsbGV0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvY2FjaGUiLCJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL2VydHAiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL25hdCIsIkBhZ29yaWMvbm90aWZpZXIiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBhZ29yaWMvc21hcnQtd2FsbGV0L3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzIiwiLi9pc3N1ZXJUYWJsZS5qcyIsIi4vbGliLWRlaHlkcmF0ZS5qcyIsIi4vZmluZE9yTWFrZUludml0YXRpb24uanMiLCIuL2JpZ2ludFN0cmluZ2lmeS5qcyIsIi4vYWN0aW9ucy5qcyIsIi4vaW50ZXJuYWwtdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJtYWtlV2FsbGV0Um9vdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LHEsRmFpbCxtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvcixvYmplY3RNYXAsV2FsbGV0TmFtZSxzbG90U3RyaW5nVW5zZXJpYWxpemUsbWFrZUxlZ2FjeU1hcCxtYWtlU2NhbGFyTWFwU3RvcmUsbWFrZVNjYWxhcldlYWtNYXBTdG9yZSxtYWtlU2NhbGFyQmlnTWFwU3RvcmUsQW1vdW50TWF0aCxFLHBhc3NTdHlsZU9mLEZhcixtYXBJdGVyYWJsZSxOYXQsbWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIsbWFrZU5vdGlmaWVyS2l0LG9ic2VydmVJdGVyYXRpb24sb2JzZXJ2ZU5vdGlmaWVyLHN1YnNjcmliZUVhY2gsbWFrZVByb21pc2VLaXQsbWFrZUV4cG9ydENvbnRleHQsbWFrZUlzc3VlclRhYmxlLG1ha2VEZWh5ZHJhdG9yLG1ha2VJZCxmaW5kT3JNYWtlSW52aXRhdGlvbixiaWdpbnRTdHJpbmdpZnksbWFrZVBheW1lbnRBY3Rpb25zOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaOKAjV9hID0+IChhc3NlcnQgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9jYWNoZVwiLCBbW1wibWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3JcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjigI1fYSA9PiAob2JqZWN0TWFwID0gJGjigI1fYSldXSxbXCJXYWxsZXROYW1lXCIsIFskaOKAjV9hID0+IChXYWxsZXROYW1lID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qc1wiLCBbW1wic2xvdFN0cmluZ1Vuc2VyaWFsaXplXCIsIFskaOKAjV9hID0+IChzbG90U3RyaW5nVW5zZXJpYWxpemUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibWFrZUxlZ2FjeU1hcFwiLCBbJGjigI1fYSA9PiAobWFrZUxlZ2FjeU1hcCA9ICRo4oCNX2EpXV0sW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaOKAjV9hKV1dLFtcIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyQmlnTWFwU3RvcmUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaOKAjV9hID0+IChBbW91bnRNYXRoID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV0sW1wibWFwSXRlcmFibGVcIiwgWyRo4oCNX2EgPT4gKG1hcEl0ZXJhYmxlID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaOKAjV9hID0+IChOYXQgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXJcIiwgWyRo4oCNX2EgPT4gKG1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyID0gJGjigI1fYSldXSxbXCJtYWtlTm90aWZpZXJLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VOb3RpZmllcktpdCA9ICRo4oCNX2EpXV0sW1wib2JzZXJ2ZUl0ZXJhdGlvblwiLCBbJGjigI1fYSA9PiAob2JzZXJ2ZUl0ZXJhdGlvbiA9ICRo4oCNX2EpXV0sW1wib2JzZXJ2ZU5vdGlmaWVyXCIsIFskaOKAjV9hID0+IChvYnNlcnZlTm90aWZpZXIgPSAkaOKAjV9hKV1dLFtcInN1YnNjcmliZUVhY2hcIiwgWyRo4oCNX2EgPT4gKHN1YnNjcmliZUVhY2ggPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3NtYXJ0LXdhbGxldC9zcmMvbWFyc2hhbC1jb250ZXh0cy5qc1wiLCBbW1wibWFrZUV4cG9ydENvbnRleHRcIiwgWyRo4oCNX2EgPT4gKG1ha2VFeHBvcnRDb250ZXh0ID0gJGjigI1fYSldXV1dLFtcIi4vaXNzdWVyVGFibGUuanNcIiwgW1tcIm1ha2VJc3N1ZXJUYWJsZVwiLCBbJGjigI1fYSA9PiAobWFrZUlzc3VlclRhYmxlID0gJGjigI1fYSldXV1dLFtcIi4vbGliLWRlaHlkcmF0ZS5qc1wiLCBbW1wibWFrZURlaHlkcmF0b3JcIiwgWyRo4oCNX2EgPT4gKG1ha2VEZWh5ZHJhdG9yID0gJGjigI1fYSldXV1dLFtcIi4vZmluZE9yTWFrZUludml0YXRpb24uanNcIiwgW1tcIm1ha2VJZFwiLCBbJGjigI1fYSA9PiAobWFrZUlkID0gJGjigI1fYSldXSxbXCJmaW5kT3JNYWtlSW52aXRhdGlvblwiLCBbJGjigI1fYSA9PiAoZmluZE9yTWFrZUludml0YXRpb24gPSAkaOKAjV9hKV1dXV0sW1wiLi9iaWdpbnRTdHJpbmdpZnkuanNcIiwgW1tcImJpZ2ludFN0cmluZ2lmeVwiLCBbJGjigI1fYSA9PiAoYmlnaW50U3RyaW5naWZ5ID0gJGjigI1fYSldXV1dLFtcIi4vYWN0aW9ucy5qc1wiLCBbW1wibWFrZVBheW1lbnRBY3Rpb25zXCIsIFskaOKAjV9hID0+IChtYWtlUGF5bWVudEFjdGlvbnMgPSAkaOKAjV9hKV1dXV0sW1wiLi9pbnRlcm5hbC10eXBlcy5qc1wiLCBbXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZVdhbGxldFJvb3QsICduYW1lJywge3ZhbHVlOiBcIm1ha2VXYWxsZXRSb290XCJ9KTskaOKAjV9vbmNlLm1ha2VXYWxsZXRSb290KG1ha2VXYWxsZXRSb290KTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG5jb25zdCBub0FjdGlvblN0YXRlQ2hhbmdlSGFuZGxlcj0oX25ld1N0YXRlKT0+eyB9O1xuXG5jb25zdCBjbXA9KGEsYik9PntcbmlmKGE+Yil7XG5yZXR1cm4gMTtcbiB9XG5pZihhPT09Yil7XG5yZXR1cm4gMDtcbiB9XG5yZXR1cm4tMTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZVdhbGxldFJvb3Qoe1xuem9lLFxuYm9hcmQsXG5hZ29yaWNOYW1lcyxcbm5hbWVzQnlBZGRyZXNzLFxubXlBZGRyZXNzTmFtZUFkbWluLFxucHVyc2VzU3RhdGVDaGFuZ2VIYW5kbGVyPW5vQWN0aW9uU3RhdGVDaGFuZ2VIYW5kbGVyLFxuaW5ib3hTdGF0ZUNoYW5nZUhhbmRsZXI9bm9BY3Rpb25TdGF0ZUNoYW5nZUhhbmRsZXIsXG5kYXRlTm93PXVuZGVmaW5lZH0pXG57XG5hc3NlcnQobXlBZGRyZXNzTmFtZUFkbWluLCdtaXNzaW5nIG15QWRkcmVzc05hbWVBZG1pbicpO1xuXG5sZXQgbGFzdElkPTA7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhZGRNZXRhPShyZWNvcmQpPT57XG5jb25zdHttZXRhOm9sZE1ldGE9e319PXJlY29yZDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1ldGE9ey4uLm9sZE1ldGF9O1xuaWYoIW1ldGEuaWQpe1xuLy9cbmxhc3RJZCs9MTtcbm1ldGEuaWQ9bGFzdElkO1xuIH1cbmlmKGRhdGVOb3cpe1xuY29uc3Qgbm93U3RhbXA9ZGF0ZU5vdygpO1xuaWYoIW1ldGEuY3JlYXRpb25TdGFtcCl7XG4vL1xubWV0YS5jcmVhdGlvblN0YW1wPW5vd1N0YW1wO1xuIH1cbm1ldGEudXBkYXRlZFN0YW1wPW5vd1N0YW1wO1xuIH1cbnJldHVybnsuLi5yZWNvcmQsbWV0YX07XG4gfTtcblxuY29uc3QgY29udGV4dD1tYWtlRXhwb3J0Q29udGV4dCgpO1xuXG4vL1xuLy9cbmNvbnN0e21ha2VNYXBwaW5nLGRlaHlkcmF0ZSxlZGdlTWFwcGluZ309bWFrZURlaHlkcmF0b3IoKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZU1hcHBpbmc9bWFrZU1hcHBpbmcoJ3B1cnNlJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRNYXBwaW5nPW1ha2VNYXBwaW5nKCdicmFuZCcpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29udGFjdE1hcHBpbmc9bWFrZU1hcHBpbmcoXG4nY29udGFjdCcsXG57dXNlTGVnYWN5TWFwOnRydWV9Ly9cbik7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5zdGFuY2VNYXBwaW5nPW1ha2VNYXBwaW5nKCdpbnN0YW5jZScpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnN0YWxsYXRpb25NYXBwaW5nPW1ha2VNYXBwaW5nKCdpbnN0YWxsYXRpb24nKTtcblxuY29uc3QgYnJhbmRUYWJsZT1tYWtlSXNzdWVyVGFibGUoKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3VlclRvQm9hcmRJZD1tYWtlU2NhbGFyV2Vha01hcFN0b3JlKCdpc3N1ZXInKTtcblxuLy9cbmNvbnN0IGluaXRJc3N1ZXJUb0JvYXJkSWQ9YXN5bmMoaXNzdWVyLGJyYW5kKT0+e1xuaWYoaXNzdWVyVG9Cb2FyZElkLmhhcyhpc3N1ZXIpKXtcbi8vXG5yZXR1cm4gaXNzdWVyVG9Cb2FyZElkLmdldChpc3N1ZXIpO1xuIH1cblxuLy9cbmNvbnN0W2lzc3VlckJvYXJkSWQsYnJhbmRCb2FyZElkXT1hd2FpdCBQcm9taXNlLmFsbChbXG5FKGJvYXJkKS5nZXRJZChpc3N1ZXIpLFxuRShib2FyZCkuZ2V0SWQoYnJhbmQpXSk7XG5cbmlmKGlzc3VlclRvQm9hcmRJZC5oYXMoaXNzdWVyKSl7XG4vL1xucmV0dXJuIGlzc3VlclRvQm9hcmRJZC5nZXQoaXNzdWVyKTtcbiB9XG5cbi8vXG4vL1xuY29udGV4dC5lbnN1cmVCb2FyZElkKGlzc3VlckJvYXJkSWQsaXNzdWVyKTtcbmNvbnRleHQuaW5pdEJvYXJkSWQoYnJhbmRCb2FyZElkLGJyYW5kKTtcblxuLy9cbmlzc3VlclRvQm9hcmRJZC5pbml0KGlzc3Vlcixpc3N1ZXJCb2FyZElkKTtcbnJldHVybiBpc3N1ZXJCb2FyZElkO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZVRvQnJhbmQ9bWFrZVNjYWxhcldlYWtNYXBTdG9yZSgncHVyc2UnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBicmFuZFRvRGVwb3NpdEZhY2V0SWQ9bWFrZVNjYWxhck1hcFN0b3JlKCdicmFuZCcpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2U9bWFrZVNjYWxhck1hcFN0b3JlKCdicmFuZCcpO1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpZFRvT2ZmZXI9bWFrZVNjYWxhck1hcFN0b3JlKCdvZmZlcklkJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdD1tYWtlTGVnYWN5TWFwKCdpZCcpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGludml0YXRpb25IYW5kbGVUb09mZmVyUmVzdWx0PVxubWFrZVNjYWxhcldlYWtNYXBTdG9yZSgnaW52aXRhdGlvbkhhbmRsZScpO1xuXG4vL1xuY29uc3QgaWRUb0NvbXBpbGVkT2ZmZXJQPW5ldyBNYXAoKTtcbmNvbnN0IGlkVG9Db21wbGV0ZT1uZXcgTWFwKCk7XG5jb25zdCBpZFRvU2VhdD1uZXcgTWFwKCk7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZXNTdGF0ZT1uZXcgTWFwKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVyc2VzRnVsbFN0YXRlPW5ldyBNYXAoKTtcbmNvbnN0IGluYm94U3RhdGU9bmV3IE1hcCgpO1xuXG4vKlxuXG5cblxuICAgKi9cbmxldCB6b2VJbnZpdGVQdXJzZTtcblxuY29uc3QgWk9FX0lOVklURV9CUkFORF9QRVROQU1FPSd6b2UgaW52aXRlJztcblxuZnVuY3Rpb24gZ2V0U29ydGVkVmFsdWVzKG1hcCl7XG5jb25zdCBlbnRyaWVzPVsuLi5tYXAuZW50cmllcygpXTtcbi8vXG5jb25zdCB2YWx1ZXM9ZW50cmllcy5cbnNvcnQoKFtpZDFdLFtpZDJdKT0+Y21wKGlkMSxpZDIpKS5cbm1hcCgoW19pZCx2YWx1ZV0pPT52YWx1ZSk7XG5cbnJldHVybiBiaWdpbnRTdHJpbmdpZnkoaGFyZGVuKHZhbHVlcykpO1xuIH1cblxuZnVuY3Rpb24gZ2V0UHVyc2VzU3RhdGUoKXtcbnJldHVybiBnZXRTb3J0ZWRWYWx1ZXMocHVyc2VzU3RhdGUpO1xuIH1cblxuZnVuY3Rpb24gZ2V0SW5ib3hTdGF0ZSgpe1xucmV0dXJuIGdldFNvcnRlZFZhbHVlcyhpbmJveFN0YXRlKTtcbiB9XG5cbi8vXG4vL1xuLy9cbmNvbnN0IGZpbGxJblNsb3RzPXNsb3RTdHJpbmdVbnNlcmlhbGl6ZTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3R7bm90aWZpZXI6b2ZmZXJzTm90aWZpZXIsdXBkYXRlcjpvZmZlcnNVcGRhdGVyfT1tYWtlTm90aWZpZXJLaXQoXG5bXSk7XG5cblxuY29uc3R7cHVyc2VzTm90aWZpZXIsYXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyLHB1cnNlc1VwZGF0ZXJ9PSgoKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdHtub3RpZmllcjppcG4sdXBkYXRlcjppcHV9PW1ha2VOb3RpZmllcktpdChbXSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0e25vdGlmaWVyOmFwbix1cGRhdGVyOmFwdX09bWFrZU5vdGlmaWVyS2l0KFtdKTtcbi8vXG4vKlxuXG5cbiAgICAgKi9cbmNvbnN0IGlubmVyRmlsdGVyPSh7XG5icmFuZCxcbmJyYW5kQm9hcmRJZCxcbmRlcG9zaXRCb2FyZElkLFxuYnJhbmRQZXRuYW1lLFxucHVyc2VQZXRuYW1lLFxuZGlzcGxheUluZm8sXG52YWx1ZSxcbmN1cnJlbnRBbW91bnRTbG90cyxcbmN1cnJlbnRBbW91bnR9KT0+XG5cbmhhcmRlbih7XG5icmFuZCxcbmJyYW5kQm9hcmRJZCxcbi4uLihkZXBvc2l0Qm9hcmRJZCYme2RlcG9zaXRCb2FyZElkfSksXG5icmFuZFBldG5hbWUsXG5wdXJzZVBldG5hbWUsXG4uLi4oZGlzcGxheUluZm8mJntkaXNwbGF5SW5mb30pLFxudmFsdWUsXG5jdXJyZW50QW1vdW50U2xvdHMsXG5jdXJyZW50QW1vdW50fSk7XG5cbmNvbnN0IGZpbHRlcj0oc3RhdGUpPT5zdGF0ZS5tYXAoaW5uZXJGaWx0ZXIpO1xuY29uc3QgcHU9RmFyKCdwdXJzZXNVcGRhdGVyJyx7XG51cGRhdGVTdGF0ZToobmV3U3RhdGUpPT57XG5pcHUudXBkYXRlU3RhdGUobmV3U3RhdGUpO1xuYXB1LnVwZGF0ZVN0YXRlKGZpbHRlcihuZXdTdGF0ZSkpO1xuIH0sXG5maW5pc2g6KGZpbmFsU3RhdGUpPT57XG5pcHUuZmluaXNoKGZpbmFsU3RhdGUpO1xuYXB1LmZpbmlzaChmaWx0ZXIoZmluYWxTdGF0ZSkpO1xuIH0sXG5mYWlsOihyZWFzb24pPT57XG5pcHUuZmFpbChyZWFzb24pO1xuYXB1LmZhaWwocmVhc29uKTtcbiB9fSk7XG5cbnJldHVybiBoYXJkZW4oe1xucHVyc2VzTm90aWZpZXI6aXBuLFxuYXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyOmFwbixcbnB1cnNlc1VwZGF0ZXI6cHV9KTtcblxuIH0pKCk7XG5cbi8qXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVB1cnNlc1N0YXRlKHB1cnNlUGV0bmFtZSxwdXJzZSl7XG5jb25zdCBwdXJzZUtleT1wdXJzZU1hcHBpbmcuaW1wbG9kZShwdXJzZVBldG5hbWUpO1xuZm9yKGNvbnN0IGtleSBvZiBwdXJzZXNTdGF0ZS5rZXlzKCkpe1xuaWYoIXB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuaGFzKHB1cnNlTWFwcGluZy5leHBsb2RlKGtleSkpKXtcbnB1cnNlc1N0YXRlLmRlbGV0ZShrZXkpO1xuIH1cbiB9XG5jb25zdCBjdXJyZW50QW1vdW50PWF3YWl0IEUocHVyc2UpLmdldEN1cnJlbnRBbW91bnQoKTtcbmNvbnN0e3ZhbHVlLGJyYW5kfT1jdXJyZW50QW1vdW50O1xuY29uc3QgYnJhbmRQZXRuYW1lPWJyYW5kTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KGJyYW5kKTtcbmNvbnN0IGRlaHlkcmF0ZWRDdXJyZW50QW1vdW50PWRlaHlkcmF0ZShjdXJyZW50QW1vdW50KTtcbmNvbnN0IGJyYW5kQm9hcmRJZD1hd2FpdCBFKGJvYXJkKS5nZXRJZChicmFuZCk7XG5cbmxldCBkZXBvc2l0Qm9hcmRJZDtcbmlmKFxuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaGFzKGJyYW5kKSYmXG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5nZXQoYnJhbmQpPT09cHVyc2UmJlxuYnJhbmRUb0RlcG9zaXRGYWNldElkLmhhcyhicmFuZCkpXG57XG4vL1xuZGVwb3NpdEJvYXJkSWQ9YnJhbmRUb0RlcG9zaXRGYWNldElkLmdldChicmFuZCk7XG4gfVxuXG5jb25zdCBpc3N1ZXJSZWNvcmQ9XG5icmFuZFRhYmxlLmhhc0J5QnJhbmQoYnJhbmQpJiZicmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xuLypcblxuICAgICAqL1xuY29uc3QganN0YXRlPWFkZE1ldGEoe1xuLi4ucHVyc2VzU3RhdGUuZ2V0KHB1cnNlS2V5KSxcbmJyYW5kLFxuYnJhbmRCb2FyZElkLFxuLi4uKGRlcG9zaXRCb2FyZElkJiZ7ZGVwb3NpdEJvYXJkSWR9KSxcbmJyYW5kUGV0bmFtZSxcbnB1cnNlUGV0bmFtZSxcbmRpc3BsYXlJbmZvOmlzc3VlclJlY29yZCYmaXNzdWVyUmVjb3JkLmRpc3BsYXlJbmZvLFxudmFsdWUsXG5jdXJyZW50QW1vdW50U2xvdHM6ZGVoeWRyYXRlZEN1cnJlbnRBbW91bnQsXG5jdXJyZW50QW1vdW50OmZpbGxJblNsb3RzKGRlaHlkcmF0ZWRDdXJyZW50QW1vdW50KX0pO1xuXG5wdXJzZXNTdGF0ZS5zZXQocHVyc2VLZXksanN0YXRlKTtcblxucHVyc2VzRnVsbFN0YXRlLnNldChcbnB1cnNlLFxuaGFyZGVuKHtcbi4uLmpzdGF0ZSxcbnB1cnNlLFxuYnJhbmQsXG5hY3Rpb25zOkZhcigncHVyc2UuYWN0aW9ucycse1xuLy9cbiAgICAgIGFzeW5jIHNlbmQocmVjZWl2ZXJQLHNlbmRWYWx1ZSl7XG5jb25zdCBhbW91bnQ9QW1vdW50TWF0aC5tYWtlKGJyYW5kLHNlbmRWYWx1ZSk7XG5jb25zdCBwYXltZW50PWF3YWl0IEUocHVyc2UpLndpdGhkcmF3KGFtb3VudCk7XG50cnl7XG5hd2FpdCBFKHJlY2VpdmVyUCkucmVjZWl2ZShwYXltZW50KTtcbiB9Y2F0Y2goZSl7XG4vL1xuYXdhaXQgRShwdXJzZSkuZGVwb3NpdChwYXltZW50KTtcbnRocm93IGU7XG4gfVxuIH0sXG4gICAgICBhc3luYyByZWNlaXZlKHBheW1lbnRQKXtcbmNvbnN0IHBheW1lbnQ9YXdhaXQgcGF5bWVudFA7XG5yZXR1cm4gRShwdXJzZSkuZGVwb3NpdChwYXltZW50KTtcbiB9LFxuZGVwb3NpdChwYXltZW50LGFtb3VudD11bmRlZmluZWQpe1xucmV0dXJuIEUocHVyc2UpLmRlcG9zaXQocGF5bWVudCxhbW91bnQpO1xuIH19KX0pKTtcblxuXG5cbnB1cnNlc1VwZGF0ZXIudXBkYXRlU3RhdGUoWy4uLnB1cnNlc0Z1bGxTdGF0ZS52YWx1ZXMoKV0pO1xucHVyc2VzU3RhdGVDaGFuZ2VIYW5kbGVyKGdldFB1cnNlc1N0YXRlKCkpO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWxsUHVyc2VTdGF0ZSgpe1xucmV0dXJuIFByb21pc2UuYWxsKFxubWFwSXRlcmFibGUocHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCksKFtwZXRuYW1lLHB1cnNlXSk9PlxudXBkYXRlUHVyc2VzU3RhdGUocGV0bmFtZSxwdXJzZSkpKTtcblxuXG4gfVxuXG5jb25zdCBkaXNwbGF5PSh2YWx1ZSk9PmZpbGxJblNsb3RzKGRlaHlkcmF0ZShoYXJkZW4odmFsdWUpKSk7XG5cbmNvbnN0IGV4cGFuZEludml0YXRpb25CcmFuZHM9YXN5bmMoaW52aXRhdGlvbkRldGFpbHMpPT57XG4vL1xuY29uc3R7ZmVlfT1pbnZpdGF0aW9uRGV0YWlscztcbmlmKCFmZWUpe1xucmV0dXJuIGludml0YXRpb25EZXRhaWxzO1xuIH1cblxuLy9cbmNvbnN0IGRpc3BsYXlJbmZvPWF3YWl0IEUoRSh6b2UpLmdldEZlZUlzc3VlcigpKS5nZXREaXNwbGF5SW5mbygpO1xuY29uc3QgYXVnbWVudGVkRGV0YWlscz17XG4uLi5pbnZpdGF0aW9uRGV0YWlscyxcbmZlZTp7Li4uZmVlLGRpc3BsYXlJbmZvfX07XG5cbnJldHVybiBkaXNwbGF5KGF1Z21lbnRlZERldGFpbHMpO1xuIH07XG5cbmNvbnN0IGRpc3BsYXlQcm9wb3NhbD0ocHJvcG9zYWxUZW1wbGF0ZSk9PntcbmNvbnN0e1xud2FudCxcbmdpdmUsXG5leGl0PXtvbkRlbWFuZDpudWxsfSxcbmFyZ3VtZW50czphcmdzfT1cbnByb3Bvc2FsVGVtcGxhdGU7XG5jb25zdCBkaXNwbGF5UmVjb3JkPShwdXJzZVBldG5hbWVWYWx1ZUtleXdvcmRSZWNvcmQpPT57XG5pZihwdXJzZVBldG5hbWVWYWx1ZUtleXdvcmRSZWNvcmQ9PT11bmRlZmluZWQpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5yZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuT2JqZWN0LmVudHJpZXMocHVyc2VQZXRuYW1lVmFsdWVLZXl3b3JkUmVjb3JkKS5tYXAoXG4oW2tleXdvcmQse3B1cnNlUGV0bmFtZSx2YWx1ZSxhbW91bnQscHVyc2V9XSk9PntcbmlmKCFhbW91bnQpe1xuLy9cbnB1cnNlPWdldFB1cnNlKHB1cnNlUGV0bmFtZSk7XG5hbW91bnQ9e3ZhbHVlfTtcbiB9ZWxzZXtcbnB1cnNlUGV0bmFtZT1wdXJzZU1hcHBpbmcudmFsVG9QZXRuYW1lLmdldChwdXJzZSk7XG4gfVxuXG5jb25zdCBicmFuZD1wdXJzZVRvQnJhbmQuZ2V0KHB1cnNlKTtcbmNvbnN0IGlzc3VlclJlY29yZD1cbmJyYW5kVGFibGUuaGFzQnlCcmFuZChicmFuZCkmJmJyYW5kVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG5hbW91bnQ9aGFyZGVuKHtcbi4uLmFtb3VudCxcbmJyYW5kLFxuZGlzcGxheUluZm86aXNzdWVyUmVjb3JkJiZpc3N1ZXJSZWNvcmQuZGlzcGxheUluZm99KTtcblxuY29uc3QgZGlzcGxheUFtb3VudD1kaXNwbGF5KGFtb3VudCk7XG5yZXR1cm5bXG5rZXl3b3JkLFxue1xucHVyc2VQZXRuYW1lLFxucHVyc2UsXG5hbW91bnQ6ZGlzcGxheUFtb3VudH1dO1xuXG5cbiB9KSk7XG5cblxuIH07XG5jb25zdCBwcm9wb3NhbEZvckRpc3BsYXk9e1xud2FudDpkaXNwbGF5UmVjb3JkKHdhbnQpLFxuZ2l2ZTpkaXNwbGF5UmVjb3JkKGdpdmUpLFxuZXhpdH07XG5cbmlmKGFyZ3MhPT11bmRlZmluZWQpe1xucHJvcG9zYWxGb3JEaXNwbGF5LmFyZ3VtZW50cz1kaXNwbGF5KGFyZ3MpO1xuIH1cbnJldHVybiBwcm9wb3NhbEZvckRpc3BsYXk7XG4gfTtcblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJ1bmVPZmZlcldoZW5JbmFjdGl2ZT0oaWQpPT57XG5hc3NlcnQoaW5ib3hTdGF0ZS5oYXMoaWQpKTtcbmNvbnN0IG9mZmVyPWluYm94U3RhdGUuZ2V0KGlkKTtcbmNvbnN0e3N0YXR1c309b2ZmZXI7XG5cbnN3aXRjaChzdGF0dXMpe1xuY2FzZSdkZWNsaW5lJzpcbmNhc2UnY2FuY2VsJzpcbmNhc2UncmVqZWN0ZWQnOlxuaW5ib3hTdGF0ZS5kZWxldGUoaWQpO1xucmV0dXJuO1xuY2FzZSdhY2NlcHQnOlxuYXNzZXJ0KGlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQuaGFzKGlkKSk7XG52b2lkIEUud2hlbihpZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LmdldChpZCkucHJvbWlzZSwocmVzdWx0KT0+e1xuY29uc3Qgc3R5bGU9cGFzc1N0eWxlT2YocmVzdWx0KTtcbmNvbnN0IGFjdGl2ZT1cbnN0eWxlPT09J3JlbW90YWJsZSd8fFxuc3R5bGU9PT0nY29weVJlY29yZCcmJidpbnZpdGF0aW9uTWFrZXJzJ2luIHJlc3VsdDtcbmlmKCFhY3RpdmUpe1xuaW5ib3hTdGF0ZS5kZWxldGUoaWQpO1xuIH1cbiB9KTtcbmJyZWFrO1xuY2FzZSdwZW5kaW5nJzpcbmNhc2UnY29tcGxldGUnOlxuZGVmYXVsdDp9XG5cbiB9O1xuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVJbmJveFN0YXRlKGlkLG9mZmVyLGRvUHVzaD10cnVlKXtcbi8vXG5jb25zdHtwcm9wb3NhbFRlbXBsYXRlfT1vZmZlcjtcbmNvbnN0e2luc3RhbmNlLGluc3RhbGxhdGlvbixpbnZpdGF0aW9uRGV0YWlsc309aWRUb09mZmVyLmdldChpZCk7XG5pZighaW5zdGFuY2V8fCFpbnN0YWxsYXRpb24pe1xuLy9cbi8vXG5yZXR1cm47XG4gfVxuY29uc3QgaW5zdGFuY2VEaXNwbGF5PWRpc3BsYXkoaW5zdGFuY2UpO1xuY29uc3QgaW5zdGFsbGF0aW9uRGlzcGxheT1kaXNwbGF5KGluc3RhbGxhdGlvbik7XG5jb25zdCBhbHJlYWR5RGlzcGxheWVkPVxuaW5ib3hTdGF0ZS5oYXMoaWQpJiZpbmJveFN0YXRlLmdldChpZCkucHJvcG9zYWxGb3JEaXNwbGF5O1xuXG5jb25zdCBhdWdtZW50ZWRJbnZpdGF0aW9uRGV0YWlscz1cbmF3YWl0IGV4cGFuZEludml0YXRpb25CcmFuZHMoaW52aXRhdGlvbkRldGFpbHMpO1xuXG5jb25zdCBvZmZlckZvckRpc3BsYXk9e1xuLi4ub2ZmZXIsXG4vL1xuLy9cbi8vXG5hY3Rpb25zOnVuZGVmaW5lZCxcbmluc3RhbGxhdGlvbjp1bmRlZmluZWQsXG5pbnN0YW5jZTp1bmRlZmluZWQsXG5wcm9wb3NhbFRlbXBsYXRlLFxuaW52aXRhdGlvbkRldGFpbHM6ZGlzcGxheShhdWdtZW50ZWRJbnZpdGF0aW9uRGV0YWlscyksXG5pbnN0YW5jZVBldG5hbWU6aW5zdGFuY2VEaXNwbGF5LnBldG5hbWUsXG5pbnN0YWxsYXRpb25QZXRuYW1lOmluc3RhbGxhdGlvbkRpc3BsYXkucGV0bmFtZSxcbnByb3Bvc2FsRm9yRGlzcGxheTpkaXNwbGF5UHJvcG9zYWwoYWxyZWFkeURpc3BsYXllZHx8cHJvcG9zYWxUZW1wbGF0ZSl9O1xuXG5cbmluYm94U3RhdGUuc2V0KGlkLG9mZmVyRm9yRGlzcGxheSk7XG5pZihkb1B1c2gpe1xuLy9cbm9mZmVyc1VwZGF0ZXIudXBkYXRlU3RhdGUoW29mZmVyRm9yRGlzcGxheV0pO1xuaW5ib3hTdGF0ZUNoYW5nZUhhbmRsZXIoZ2V0SW5ib3hTdGF0ZSgpKTtcbiB9XG5wcnVuZU9mZmVyV2hlbkluYWN0aXZlKGlkKTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUFsbEluYm94U3RhdGUoKXtcbmF3YWl0IFByb21pc2UuYWxsKFxuQXJyYXkuZnJvbShpbmJveFN0YXRlLmVudHJpZXMoKSkubWFwKChbaWQsb2ZmZXJdKT0+XG4vL1xudXBkYXRlSW5ib3hTdGF0ZShpZCxvZmZlcixmYWxzZSkpKTtcblxuXG4vL1xub2ZmZXJzVXBkYXRlci51cGRhdGVTdGF0ZShbLi4uaW5ib3hTdGF0ZS52YWx1ZXMoKV0pO1xuaW5ib3hTdGF0ZUNoYW5nZUhhbmRsZXIoZ2V0SW5ib3hTdGF0ZSgpKTtcbiB9XG5cbmNvbnN0e3VwZGF0ZXI6aXNzdWVyc1VwZGF0ZXIsbm90aWZpZXI6aXNzdWVyc05vdGlmaWVyfT1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubWFrZU5vdGlmaWVyS2l0KFtdKTtcblxuXG5mdW5jdGlvbiB1cGRhdGVBbGxJc3N1ZXJzU3RhdGUoKXtcbmlzc3VlcnNVcGRhdGVyLnVwZGF0ZVN0YXRlKFxuWy4uLmJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcygpXS5tYXAoKFtwZXRuYW1lLGJyYW5kXSk9PntcbmNvbnN0IGlzc3VlclJlY29yZD1icmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xucmV0dXJuW1xucGV0bmFtZSxcbntcbi4uLmlzc3VlclJlY29yZCxcbmlzc3VlckJvYXJkSWQ6aXNzdWVyVG9Cb2FyZElkLmdldChpc3N1ZXJSZWNvcmQuaXNzdWVyKX1dO1xuXG5cbiB9KSk7XG5cbiB9XG5cbi8vXG4vL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWxsU3RhdGUoKXtcbnVwZGF0ZUFsbElzc3VlcnNTdGF0ZSgpO1xuYXdhaXQgdXBkYXRlQWxsUHVyc2VTdGF0ZSgpO1xuYXdhaXQgdXBkYXRlQWxsSW5ib3hTdGF0ZSgpO1xuIH1cblxuLy9cbi8vXG5mdW5jdGlvbiB1cGRhdGVPclJlc3Vic2NyaWJlKGlkLHNlYXQsdXBkYXRlKXtcbmNvbnN0e3VwZGF0ZUNvdW50fT11cGRhdGU7XG5hc3NlcnQodXBkYXRlQ291bnQ9PT11bmRlZmluZWQpO1xuaWRUb1NlYXQuZGVsZXRlKGlkKTtcblxuY29uc3Qgb2ZmZXI9aWRUb09mZmVyLmdldChpZCk7XG5jb25zdCBjb21wbGV0ZWRPZmZlcj1hZGRNZXRhKHtcbi4uLm9mZmVyLFxuc3RhdHVzOidjb21wbGV0ZSd9KTtcblxuaWRUb09mZmVyLnNldChpZCxjb21wbGV0ZWRPZmZlcik7XG52b2lkIHVwZGF0ZUluYm94U3RhdGUoaWQsY29tcGxldGVkT2ZmZXIpO1xuIH1cblxuLypcblxuXG5cblxuICAgKi9cbmZ1bmN0aW9uIHN1YnNjcmliZVRvVXBkYXRlcyhpZCxzZWF0KXtcbnJldHVybiBFKEUoc2VhdCkuZ2V0RXhpdFN1YnNjcmliZXIoKSkuXG5zdWJzY3JpYmVBZnRlcigpLlxudGhlbigodXBkYXRlKT0+dXBkYXRlT3JSZXN1YnNjcmliZShpZCxzZWF0LHVwZGF0ZSkpO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZU9mZmVyKGNvbXBpbGVkT2ZmZXJQKXtcbi8vXG4vL1xuLy9cbmNvbnN0e1xuaW52aXRlUCxcbnB1cnNlS2V5d29yZFJlY29yZCxcbnByb3Bvc2FsLFxuYXJndW1lbnRzOmFyZ3N9PVxuYXdhaXQgY29tcGlsZWRPZmZlclA7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwYXltZW50VG9QdXJzZT1uZXcgTWFwKCk7XG5cbi8vXG4vL1xuY29uc3Qga2V5d29yZFBheW1lbnRQcz1PYmplY3QuZW50cmllcyhwcm9wb3NhbC5naXZlfHxoYXJkZW4oe30pKS5tYXAoXG5hc3luYyhba2V5d29yZCxhbW91bnRdKT0+e1xuY29uc3QgcHVyc2U9cHVyc2VLZXl3b3JkUmVjb3JkW2tleXdvcmRdO1xucHVyc2UhPT11bmRlZmluZWR8fFxuRmFpbCBgcHVyc2Ugd2FzIG5vdCBmb3VuZCBmb3Iga2V5d29yZCAke3Eoa2V5d29yZCl9YDtcblxuY29uc3QgcGF5bWVudD1hd2FpdCBFKHB1cnNlKS53aXRoZHJhdyhhbW91bnQpO1xucGF5bWVudFRvUHVyc2Uuc2V0KHBheW1lbnQscHVyc2UpO1xucmV0dXJuW2tleXdvcmQscGF5bWVudF07XG4gfSk7XG5cblxuLy9cbi8vXG5jb25zdCB0cnlSZWNsYWltaW5nV2l0aGRyYXduUGF5bWVudHM9KCk9PlxuLy9cbi8vXG5Qcm9taXNlLmFsbFNldHRsZWQoXG5rZXl3b3JkUGF5bWVudFBzLm1hcChhc3luYyhrZXl3b3JkUGF5bWVudFApPT57XG4vL1xuLy9cbmNvbnN0W19rZXl3b3JkLHBheW1lbnRdPWF3YWl0IGtleXdvcmRQYXltZW50UDtcblxuLy9cbmNvbnN0IHB1cnNlPXBheW1lbnRUb1B1cnNlLmdldChwYXltZW50KTtcbmlmKHB1cnNlPT09dW5kZWZpbmVkKXtcbi8vXG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLy9cbnRyeXtcbi8vXG5yZXR1cm4gYWRkUGF5bWVudChwYXltZW50LHB1cnNlKTtcbiB9ZmluYWxseXtcbi8vXG5wYXltZW50VG9QdXJzZS5kZWxldGUocGF5bWVudCk7XG4gfVxuIH0pKTtcblxuXG4vL1xuLy9cbmNvbnN0IHdpdGhkcmF3QWxsUGF5bWVudHM9UHJvbWlzZS5hbGwoa2V5d29yZFBheW1lbnRQcyk7XG53aXRoZHJhd0FsbFBheW1lbnRzLmNhdGNoKHRyeVJlY2xhaW1pbmdXaXRoZHJhd25QYXltZW50cyk7XG5cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuY29uc3QgcGF5bWVudEtleXdvcmRzPWF3YWl0IHdpdGhkcmF3QWxsUGF5bWVudHM7XG5cbmNvbnN0IHBheW1lbnRLZXl3b3JkUmVjb3JkPWhhcmRlbihPYmplY3QuZnJvbUVudHJpZXMocGF5bWVudEtleXdvcmRzKSk7XG5cbmNvbnN0IHNlYXQ9RSh6b2UpLm9mZmVyKFxuaW52aXRlUCxcbmhhcmRlbihwcm9wb3NhbCksXG5wYXltZW50S2V5d29yZFJlY29yZCxcbmFyZ3MpO1xuXG4vL1xuLy9cbnZvaWQgc2VhdC5maW5hbGx5KHRyeVJlY2xhaW1pbmdXaXRoZHJhd25QYXltZW50cyk7XG5cbi8vXG4vL1xuY29uc3QgZGVwb3NpdGVkUD1FKHNlYXQpLlxuZ2V0UGF5b3V0cygpLlxudGhlbigocGF5b3V0T2JqKT0+e1xucmV0dXJuIFByb21pc2UuYWxsKFxuT2JqZWN0LmVudHJpZXMocGF5b3V0T2JqKS5tYXAoKFtrZXl3b3JkLHBheW91dFBdKT0+e1xuLy9cbi8vXG5jb25zdCBwdXJzZU9yVW5kZWZpbmVkPXB1cnNlS2V5d29yZFJlY29yZFtrZXl3b3JkXTtcblxuLy9cbnJldHVybiBhZGRQYXltZW50KHBheW91dFAscHVyc2VPclVuZGVmaW5lZCk7XG4gfSkpO1xuXG4gfSk7XG5cbi8vXG4vL1xuLy9cbnZvaWQgZGVwb3NpdGVkUC5maW5hbGx5KHRyeVJlY2xhaW1pbmdXaXRoZHJhd25QYXltZW50cyk7XG5cbi8vXG4vL1xucmV0dXJue2RlcG9zaXRlZFAsc2VhdH07XG4gfVxuXG4vL1xuXG5jb25zdCBhZGRJc3N1ZXI9YXN5bmMocGV0bmFtZUZvckJyYW5kLGlzc3VlclAsbWFrZVB1cnNlPWZhbHNlKT0+e1xuY29uc3QgaXNzdWVyPWF3YWl0IGlzc3VlclA7XG5jb25zdCByZWNQPWJyYW5kVGFibGUuaGFzQnlJc3N1ZXIoaXNzdWVyKT9cbmJyYW5kVGFibGUuZ2V0QnlJc3N1ZXIoaXNzdWVyKTpcbmJyYW5kVGFibGUuaW5pdElzc3Vlcihpc3N1ZXIsYWRkTWV0YSk7XG5jb25zdHticmFuZH09YXdhaXQgcmVjUDtcbmF3YWl0IGluaXRJc3N1ZXJUb0JvYXJkSWQoaXNzdWVyLGJyYW5kKTtcbmNvbnN0IGFkZEJyYW5kUGV0bmFtZT0oKT0+e1xubGV0IHA7XG5jb25zdCBhbHJlYWR5PWJyYW5kTWFwcGluZy52YWxUb1BldG5hbWUuaGFzKGJyYW5kKTtcbnBldG5hbWVGb3JCcmFuZD1icmFuZE1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZUZvckJyYW5kLGJyYW5kKTtcbmlmKCFhbHJlYWR5JiZtYWtlUHVyc2Upe1xuLy9cbnA9bWFrZUVtcHR5UHVyc2UocGV0bmFtZUZvckJyYW5kLHBldG5hbWVGb3JCcmFuZCx0cnVlKTtcbiB9ZWxzZXtcbnA9UHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gfVxucmV0dXJuIEUud2hlbihwLChfKT0+cGV0bmFtZUZvckJyYW5kKTtcbiB9O1xucmV0dXJuIGFkZEJyYW5kUGV0bmFtZSgpLnRoZW4oYXN5bmMoYnJhbmROYW1lKT0+e1xuYXdhaXQgdXBkYXRlQWxsSXNzdWVyc1N0YXRlKCk7XG5yZXR1cm4gYnJhbmROYW1lO1xuIH0pO1xuIH07XG5cbmNvbnN0IHB1Ymxpc2hJc3N1ZXI9YXN5bmMoYnJhbmQpPT57XG5jb25zdHtpc3N1ZXJ9PWJyYW5kVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG5jb25zdCBpc3N1ZXJCb2FyZElkPWF3YWl0IGluaXRJc3N1ZXJUb0JvYXJkSWQoaXNzdWVyLGJyYW5kKTtcbnVwZGF0ZUFsbElzc3VlcnNTdGF0ZSgpO1xucmV0dXJuIGlzc3VlckJvYXJkSWQ7XG4gfTtcblxuY29uc3R7dXBkYXRlcjpjb250YWN0c1VwZGF0ZXIsbm90aWZpZXI6Y29udGFjdHNOb3RpZmllcn09XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubWFrZU5vdGlmaWVyS2l0KFtdKTtcblxuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IGFkZENvbnRhY3Q9YXN5bmMocGV0bmFtZSxhY3Rpb25zLGFkZHJlc3M9dW5kZWZpbmVkKT0+e1xuLy9cbmNvbnN0IGFscmVhZHk9YXdhaXQgRShib2FyZCkuaGFzKGFjdGlvbnMpO1xuLyogICAgICAgICAgICAgICovXG5sZXQgZGVwb3NpdEZhY2V0O1xuaWYoYWxyZWFkeSl7XG5kZXBvc2l0RmFjZXQ9YWN0aW9ucztcbiB9ZWxzZXtcbmRlcG9zaXRGYWNldD1GYXIoV2FsbGV0TmFtZS5kZXBvc2l0RmFjZXQse1xucmVjZWl2ZShwYXltZW50UCl7XG5yZXR1cm4gRShhY3Rpb25zKS5yZWNlaXZlKHBheW1lbnRQKTtcbiB9fSk7XG5cbiB9XG5jb25zdCBkZXBvc2l0Qm9hcmRJZD1hd2FpdCBFKGJvYXJkKS5nZXRJZChkZXBvc2l0RmFjZXQpO1xuY29uc3QgZm91bmQ9Wy4uLmNvbnRhY3RNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCldLmZpbmQoXG4oW19wbix7ZGVwb3NpdEJvYXJkSWQ6ZGJpZH1dKT0+ZGVwb3NpdEJvYXJkSWQ9PT1kYmlkKTtcblxuIWZvdW5kfHxcbkZhaWwgYCR7cShmb3VuZCYmZm91bmRbMF0pfSBpcyBhbHJlYWR5IHRoZSBwZXRuYW1lIGZvciBib2FyZCBJRCAke3EoXG5kZXBvc2l0Qm9hcmRJZClcbiB9YDtcblxuY29uc3QgY29udGFjdD1oYXJkZW4oXG5hZGRNZXRhKHtcbmFjdGlvbnMsXG5hZGRyZXNzLFxuZGVwb3NpdEJvYXJkSWR9KSk7XG5cblxuXG5jb250YWN0TWFwcGluZy5zdWdnZXN0UGV0bmFtZShwZXRuYW1lLGNvbnRhY3QpO1xuY29udGFjdHNVcGRhdGVyLnVwZGF0ZVN0YXRlKFsuLi5jb250YWN0TWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcygpXSk7XG5yZXR1cm4gY29udGFjdDtcbiB9O1xuXG5jb25zdCBhZGRJbnN0YW5jZT0ocGV0bmFtZSxpbnN0YW5jZUhhbmRsZSk9Pntcbi8vXG4vL1xuLy9cbnBldG5hbWU9aW5zdGFuY2VNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKHBldG5hbWUsaW5zdGFuY2VIYW5kbGUpO1xuLy9cbnZvaWQgdXBkYXRlQWxsU3RhdGUoKTtcbnJldHVybiBgaW5zdGFuY2UgJHtxKHBldG5hbWUpfSBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gd2FsbGV0YDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgaW50ZXJuYWxVbnNhZmVJbXBvcnRQdXJzZT1hc3luYyhcbmJyYW5kUGV0bmFtZSxcbnBldG5hbWVGb3JQdXJzZSxcbmRlZmF1bHRBdXRvRGVwb3NpdCxcbnB1cnNlVG9JbXBvcnQpPT5cbntcbmNvbnN0IGJyYW5kPWJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KGJyYW5kUGV0bmFtZSk7XG5jb25zdHtpc3N1ZXJ9PWJyYW5kVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG5cbi8qICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZT1hd2FpdChwdXJzZVRvSW1wb3J0fHxFKGlzc3VlcikubWFrZUVtcHR5UHVyc2UoKSk7XG5cbnB1cnNlVG9CcmFuZC5pbml0KHB1cnNlLGJyYW5kKTtcbnBldG5hbWVGb3JQdXJzZT1wdXJzZU1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZUZvclB1cnNlLHB1cnNlKTtcblxuaWYoZGVmYXVsdEF1dG9EZXBvc2l0JiYhYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaGFzKGJyYW5kKSl7XG4vL1xuLy9cbi8vXG5hd2FpdCBkb0VuYWJsZUF1dG9EZXBvc2l0KHBldG5hbWVGb3JQdXJzZSxmYWxzZSk7XG4gfVxuXG5hd2FpdCB1cGRhdGVQdXJzZXNTdGF0ZShwZXRuYW1lRm9yUHVyc2UscHVyc2UpO1xuXG4vL1xudm9pZCBvYnNlcnZlTm90aWZpZXIoRShwdXJzZSkuZ2V0Q3VycmVudEFtb3VudE5vdGlmaWVyKCkse1xudXBkYXRlU3RhdGUoX2JhbGFuY2Upe1xudXBkYXRlUHVyc2VzU3RhdGUocHVyc2VNYXBwaW5nLnZhbFRvUGV0bmFtZS5nZXQocHVyc2UpLHB1cnNlKS5jYXRjaChcbihlKT0+Y29uc29sZS5lcnJvcignY2Fubm90IHVwZGF0ZVN0YXRlJyxlKSk7XG5cbiB9LFxuZmFpbChyZWFzb24pe1xuY29uc29sZS5lcnJvciggYGZhaWxlZCB1cGRhdGVTdGF0ZSBvYnNlcnZlcmAscmVhc29uKTtcbiB9fSk7XG5cblxucmV0dXJuIHBldG5hbWVGb3JQdXJzZTtcbiB9O1xuXG4vL1xuLypcblxuXG5cbiAgICovXG5jb25zdCBtYWtlRW1wdHlQdXJzZT0oXG5icmFuZFBldG5hbWUsXG5wZXRuYW1lRm9yUHVyc2UsXG5kZWZhdWx0QXV0b0RlcG9zaXQ9dHJ1ZSk9PlxuXG5pbnRlcm5hbFVuc2FmZUltcG9ydFB1cnNlKFxuYnJhbmRQZXRuYW1lLFxucGV0bmFtZUZvclB1cnNlLFxuZGVmYXVsdEF1dG9EZXBvc2l0LFxudW5kZWZpbmVkKTtcblxuXG4vKlxuXG5cbiAgICovXG5hc3luYyBmdW5jdGlvbiBkZXBvc2l0KHB1cnNlUGV0bmFtZSxwYXltZW50KXtcbmNvbnN0IHB1cnNlPXB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHB1cnNlUGV0bmFtZSk7XG5yZXR1cm4gRShwdXJzZSkuZGVwb3NpdChwYXltZW50KTtcbiB9XG5cbmZ1bmN0aW9uIGdldFB1cnNlcygpe1xucmV0dXJuWy4uLnB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcygpXTtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnVuY3Rpb24gZ2V0UHVyc2UocHVyc2VQZXRuYW1lKXtcbnJldHVybiBwdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldChwdXJzZVBldG5hbWUpO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5mdW5jdGlvbiBnZXRQdXJzZUlzc3VlcihwdXJzZVBldG5hbWUpe1xuY29uc3QgcHVyc2U9cHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocHVyc2VQZXRuYW1lKTtcbmNvbnN0IGJyYW5kPXB1cnNlVG9CcmFuZC5nZXQocHVyc2UpO1xuY29uc3R7aXNzdWVyfT1icmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xucmV0dXJuIGlzc3VlcjtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5mdW5jdGlvbiBnZXRPZmZlcnMoe29yaWdpbj1udWxsfT17fSl7XG4vL1xucmV0dXJuWy4uLmlkVG9PZmZlci5lbnRyaWVzKCldLlxuZmlsdGVyKFxuKFtfaWQsb2ZmZXJdKT0+XG5vcmlnaW49PT1udWxsfHxcbm9mZmVyLnJlcXVlc3RDb250ZXh0JiZvZmZlci5yZXF1ZXN0Q29udGV4dC5kYXBwT3JpZ2luPT09b3JpZ2luKS5cblxuc29ydCgoW2lkMV0sW2lkMl0pPT5jbXAoaWQxLGlkMikpLlxubWFwKChbX2lkLG9mZmVyXSk9PmhhcmRlbihvZmZlcikpO1xuIH1cblxuY29uc3QgY29tcGlsZVByb3Bvc2FsPShwcm9wb3NhbFRlbXBsYXRlKT0+e1xuY29uc3R7XG53YW50PWhhcmRlbih7fSksXG5naXZlPWhhcmRlbih7fSksXG5leGl0PXtvbkRlbWFuZDpudWxsfSxcbmFyZ3VtZW50czphcmdzfT1cbnByb3Bvc2FsVGVtcGxhdGU7XG5cbmNvbnN0IHB1cnNlS2V5d29yZFJlY29yZD17fTtcblxuY29uc3QgY29tcGlsZT0oYW1vdW50S2V5d29yZFJlY29yZCk9PntcbnJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG5PYmplY3QuZW50cmllcyhhbW91bnRLZXl3b3JkUmVjb3JkKS5tYXAoXG4oW2tleXdvcmQse3B1cnNlUGV0bmFtZSx2YWx1ZX1dKT0+e1xuLy9cbmlmKHR5cGVvZiB2YWx1ZT09PSdudW1iZXInKXtcbnZhbHVlPU5hdCh2YWx1ZSk7XG4gfVxuY29uc3QgcHVyc2U9Z2V0UHVyc2UocHVyc2VQZXRuYW1lKTtcbnB1cnNlS2V5d29yZFJlY29yZFtrZXl3b3JkXT1wdXJzZTtcbmNvbnN0IGJyYW5kPXB1cnNlVG9CcmFuZC5nZXQocHVyc2UpO1xuXG5yZXR1cm5ba2V5d29yZCx7YnJhbmQsdmFsdWV9XTtcbiB9KSk7XG5cblxuIH07XG5cbmNvbnN0IHByb3Bvc2FsPXtcbndhbnQ6Y29tcGlsZSh3YW50KSxcbmdpdmU6Y29tcGlsZShnaXZlKSxcbmV4aXR9O1xuXG5cbnJldHVybntwcm9wb3NhbCxhcmd1bWVudHM6YXJncyxwdXJzZUtleXdvcmRSZWNvcmR9O1xuIH07XG5cbmNvbnN0IGNvbXBpbGVPZmZlcj1hc3luYyhvZmZlcik9PntcbmNvbnN0e1xucHJvcG9zYWwsXG5wdXJzZUtleXdvcmRSZWNvcmQsXG5hcmd1bWVudHM6YXJnc309XG5jb21waWxlUHJvcG9zYWwob2ZmZXIucHJvcG9zYWxUZW1wbGF0ZSk7XG5cbi8vXG5jb25zdCB6b2VJc3N1ZXI9aXNzdWVyTWFuYWdlci5nZXQoWk9FX0lOVklURV9CUkFORF9QRVROQU1FKTtcbmNvbnN0e2JyYW5kOmludml0YXRpb25CcmFuZH09YnJhbmRUYWJsZS5nZXRCeUlzc3Vlcih6b2VJc3N1ZXIpO1xuY29uc3QgaW52aXRhdGlvblA9ZmluZE9yTWFrZUludml0YXRpb24oXG5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LFxuYm9hcmQsXG56b2UsXG56b2VJbnZpdGVQdXJzZSxcbmludml0YXRpb25CcmFuZCxcbm9mZmVyKTtcblxuXG5jb25zdCBpbnZpdGF0aW9uRGV0YWlscz1hd2FpdCBFKHpvZSkuZ2V0SW52aXRhdGlvbkRldGFpbHMoaW52aXRhdGlvblApO1xuY29uc3R7aW5zdGFsbGF0aW9uLGluc3RhbmNlfT1pbnZpdGF0aW9uRGV0YWlscztcblxuY29uc3QgY29tcGlsZWQ9e1xuYXJndW1lbnRzOmFyZ3MsXG5wcm9wb3NhbCxcbmludml0ZVA6aW52aXRhdGlvblAsXG5wdXJzZUtleXdvcmRSZWNvcmQsXG5pbnZpdGF0aW9uRGV0YWlscyxcbmluc3RhbGxhdGlvbixcbmluc3RhbmNlfTtcblxucmV0dXJuIGNvbXBpbGVkO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRhcHBPcmlnaW5zPW1ha2VTY2FsYXJNYXBTdG9yZSgnZGFwcE9yaWdpbicpO1xuY29uc3R7bm90aWZpZXI6ZGFwcHNOb3RpZmllcix1cGRhdGVyOmRhcHBzVXBkYXRlcn09XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZU5vdGlmaWVyS2l0KFtdKTtcblxuY29uc3QgdXBkYXRlRGFwcD0oZGFwcFJlY29yZCk9PntcbmhhcmRlbihhZGRNZXRhKGRhcHBSZWNvcmQpKTtcbmRhcHBPcmlnaW5zLnNldChkYXBwUmVjb3JkLm9yaWdpbixkYXBwUmVjb3JkKTtcbmRhcHBzVXBkYXRlci51cGRhdGVTdGF0ZShbLi4uZGFwcE9yaWdpbnMudmFsdWVzKCldKTtcbiB9O1xuXG5jb25zdCBkZWxldGVEYXBwPSh7b3JpZ2lufSk9PntcbmRhcHBPcmlnaW5zLmRlbGV0ZShvcmlnaW4pO1xuZGFwcHNVcGRhdGVyLnVwZGF0ZVN0YXRlKFsuLi5kYXBwT3JpZ2lucy52YWx1ZXMoKV0pO1xuIH07XG5cbmNvbnN0IHNoYXJlZENhY2hlQ29vcmRpbmF0b3I9bWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3IoXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmUoIGBzaGFyZWQgY2FjaGVgKSk7XG5cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckRhcHBBcHByb3ZhbChcbnN1Z2dlc3RlZFBldG5hbWUsXG5vcmlnaW4sXG5ub3RZZXRFbmFibGVkPSgpPT57IH0pXG57XG5sZXQgZGFwcFJlY29yZDtcbmlmKGRhcHBPcmlnaW5zLmhhcyhvcmlnaW4pKXtcbmRhcHBSZWNvcmQ9ZGFwcE9yaWdpbnMuZ2V0KG9yaWdpbik7XG4gfWVsc2V7XG5sZXQgcmVzb2x2ZTtcbmxldCByZWplY3Q7XG5sZXQgYXBwcm92YWxQO1xuXG5jb25zdCBjYWNoZUNvb3JkaW5hdG9yPW1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yKFxubWFrZVNjYWxhckJpZ01hcFN0b3JlKCBgb3JpZ2luICR7b3JpZ2lufSBjYWNoZWApKTtcblxuZGFwcFJlY29yZD1hZGRNZXRhKHtcbnN1Z2dlc3RlZFBldG5hbWUsXG5wZXRuYW1lOnN1Z2dlc3RlZFBldG5hbWUsXG5vcmlnaW4sXG5jYWNoZUNvb3JkaW5hdG9yLFxuYXBwcm92YWxQLFxuZW5hYmxlOmZhbHNlLFxuYWN0aW9uczpGYXIoJ2RhcHAuYWN0aW9ucycse1xuc2V0UGV0bmFtZShwZXRuYW1lKXtcbmlmKGRhcHBSZWNvcmQucGV0bmFtZT09PXBldG5hbWUpe1xucmV0dXJuIGRhcHBSZWNvcmQuYWN0aW9ucztcbiB9XG5pZihlZGdlTWFwcGluZy52YWxUb1BldG5hbWUuaGFzKG9yaWdpbikpe1xuZWRnZU1hcHBpbmcucmVuYW1lUGV0bmFtZShwZXRuYW1lLG9yaWdpbik7XG4gfWVsc2V7XG5wZXRuYW1lPWVkZ2VNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKHBldG5hbWUsb3JpZ2luKTtcbiB9XG5kYXBwUmVjb3JkPWFkZE1ldGEoe1xuLi4uZGFwcFJlY29yZCxcbnBldG5hbWV9KTtcblxudXBkYXRlRGFwcChkYXBwUmVjb3JkKTtcbnZvaWQgdXBkYXRlQWxsU3RhdGUoKTtcbnJldHVybiBkYXBwUmVjb3JkLmFjdGlvbnM7XG4gfSxcbmVuYWJsZSgpe1xuLy9cbmRhcHBSZWNvcmQ9YWRkTWV0YSh7XG4uLi5kYXBwUmVjb3JkLFxuZW5hYmxlOnRydWV9KTtcblxuZWRnZU1hcHBpbmcuc3VnZ2VzdFBldG5hbWUoZGFwcFJlY29yZC5wZXRuYW1lLG9yaWdpbik7XG51cGRhdGVEYXBwKGRhcHBSZWNvcmQpO1xuXG4vL1xucmVzb2x2ZSgpO1xucmV0dXJuIGRhcHBSZWNvcmQuYWN0aW9ucztcbiB9LFxuZGlzYWJsZShyZWFzb249dW5kZWZpbmVkKXtcbi8vXG5pZihyZWplY3Qpe1xucmVqZWN0KHJlYXNvbik7XG4gfVxuLy9cbih7cmVzb2x2ZSxyZWplY3QscHJvbWlzZTphcHByb3ZhbFB9PW1ha2VQcm9taXNlS2l0KCkpO1xuZGFwcFJlY29yZD1hZGRNZXRhKHtcbi4uLmRhcHBSZWNvcmQsXG5lbmFibGU6ZmFsc2UsXG5hcHByb3ZhbFB9KTtcblxudXBkYXRlRGFwcChkYXBwUmVjb3JkKTtcbnJldHVybiBkYXBwUmVjb3JkLmFjdGlvbnM7XG4gfSxcbmRlbGV0ZSgpe1xuaWYocmVqZWN0KXtcbnJlamVjdCgnRGFwcCBkZWxldGVkJyk7XG4gfVxuZGVsZXRlRGFwcChkYXBwUmVjb3JkKTtcbiB9fSl9KTtcblxuXG5cbi8vXG5kYXBwT3JpZ2lucy5pbml0KG9yaWdpbixkYXBwUmVjb3JkKTtcblxuLy9cbmRhcHBSZWNvcmQuYWN0aW9ucy5kaXNhYmxlKCk7XG4gfVxuXG5pZighZGFwcFJlY29yZC5lbmFibGUpe1xubm90WWV0RW5hYmxlZCgpO1xuIH1cbmF3YWl0IGRhcHBSZWNvcmQuYXBwcm92YWxQO1xuLy9cbi8vXG5yZXR1cm4gZGFwcE9yaWdpbnMuZ2V0KG9yaWdpbik7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBhZGRPZmZlcihyYXdPZmZlcixyZXF1ZXN0Q29udGV4dD17fSl7XG5jb25zdCBkYXBwT3JpZ2luPVxucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbnx8cmVxdWVzdENvbnRleHQub3JpZ2lufHwndW5rbm93bic7XG5jb25zdHtpZDpyYXdJZH09cmF3T2ZmZXI7XG5jb25zdCBpZD1tYWtlSWQoZGFwcE9yaWdpbixyYXdJZCk7XG5jb25zdCBvZmZlcj1oYXJkZW4oXG5hZGRNZXRhKHtcbi4uLnJhd09mZmVyLFxucmF3SWQsXG5pZCxcbnJlcXVlc3RDb250ZXh0OnsuLi5yZXF1ZXN0Q29udGV4dCxkYXBwT3JpZ2lufSxcbnN0YXR1czp1bmRlZmluZWR9KSk7XG5cblxuaWRUb09mZmVyLmluaXQoaWQsb2ZmZXIpO1xuaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5pbml0KGlkLG1ha2VQcm9taXNlS2l0KCkpO1xuYXdhaXQgdXBkYXRlSW5ib3hTdGF0ZShpZCxvZmZlcik7XG5cbi8vXG5jb25zdCBjb21waWxlZE9mZmVyUD1jb21waWxlT2ZmZXIob2ZmZXIpO1xuaWRUb0NvbXBpbGVkT2ZmZXJQLnNldChpZCxjb21waWxlZE9mZmVyUCk7XG5cbi8vXG5hd2FpdCB1cGRhdGVJbmJveFN0YXRlKGlkLGlkVG9PZmZlci5nZXQoaWQpKTtcbmNvbnN0e2luc3RhbGxhdGlvbixpbnN0YW5jZSxpbnZpdGF0aW9uRGV0YWlsc309YXdhaXQgY29tcGlsZWRPZmZlclA7XG5cbmlmKCFpZFRvT2ZmZXIuaGFzKGlkKSl7XG5yZXR1cm4gcmF3SWQ7XG4gfVxuaWRUb09mZmVyLnNldChcbmlkLFxuaGFyZGVuKFxuYWRkTWV0YSh7XG4uLi5pZFRvT2ZmZXIuZ2V0KGlkKSxcbmluc3RhbGxhdGlvbixcbmluc3RhbmNlLFxuaW52aXRhdGlvbkRldGFpbHN9KSkpO1xuXG5cblxuYXdhaXQgdXBkYXRlSW5ib3hTdGF0ZShpZCxpZFRvT2ZmZXIuZ2V0KGlkKSk7XG5yZXR1cm4gcmF3SWQ7XG4gfVxuXG5mdW5jdGlvbiBjb25zdW1tYXRlZChvZmZlcil7XG5pZihvZmZlci5zdGF0dXMhPT11bmRlZmluZWQpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYob2ZmZXIuYWN0aW9ucyl7XG5FKG9mZmVyLmFjdGlvbnMpLmhhbmRsZWQob2ZmZXIpO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGRlY2xpbmVPZmZlcihpZCl7XG5jb25zdCBvZmZlcj1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmlmKGNvbnN1bW1hdGVkKG9mZmVyKSl7XG5yZXR1cm47XG4gfVxuXG4vL1xuY29uc3QgZGVjbGluZWRPZmZlcj1hZGRNZXRhKHtcbi4uLm9mZmVyLFxuc3RhdHVzOidkZWNsaW5lJ30pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLGRlY2xpbmVkT2ZmZXIpO1xudm9pZCB1cGRhdGVJbmJveFN0YXRlKGlkLGRlY2xpbmVkT2ZmZXIpO1xuXG4vL1xuY29uc3QgY29tcGlsZWRPZmZlclA9aWRUb0NvbXBpbGVkT2ZmZXJQLmdldChpZCk7XG5pZighY29tcGlsZWRPZmZlclApe1xucmV0dXJuO1xuIH1cblxuLy9cbmF3YWl0IGFkZFBheW1lbnQoRS5nZXQoY29tcGlsZWRPZmZlclApLmludml0ZVApLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gY2FuY2VsT2ZmZXIoaWQpe1xuY29uc3QgY29tcGxldGVGbj1pZFRvQ29tcGxldGUuZ2V0KGlkKTtcbmlmKCFjb21wbGV0ZUZuKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbmNvbXBsZXRlRm4oKS5cbnRoZW4oKF8pPT57XG5pZFRvQ29tcGxldGUuZGVsZXRlKGlkKTtcbmNvbnN0IG9mZmVyPWlkVG9PZmZlci5nZXQoaWQpO1xuY29uc3QgY2FuY2VsbGVkT2ZmZXI9YWRkTWV0YSh7XG4uLi5vZmZlcixcbnN0YXR1czonY2FuY2VsJ30pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLGNhbmNlbGxlZE9mZmVyKTtcbnJldHVybiB1cGRhdGVJbmJveFN0YXRlKGlkLGNhbmNlbGxlZE9mZmVyKTtcbiB9KS5cbmNhdGNoKChlKT0+Y29uc29sZS5lcnJvciggYENhbm5vdCBjYW5jZWwgb2ZmZXIgJHtpZH06YCxlKSk7XG5cbnJldHVybiB0cnVlO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gYWNjZXB0T2ZmZXIoaWQpe1xuY29uc3Qgb2ZmZXI9aWRUb09mZmVyLmdldChpZCk7XG5pZihjb25zdW1tYXRlZChvZmZlcikpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmV0PXt9O1xubGV0IGFscmVhZHlSZXNvbHZlZD1mYWxzZTtcbmNvbnN0IHJlamVjdGVkPShlKT0+e1xuaWYoYWxyZWFkeVJlc29sdmVkKXtcbnJldHVybjtcbiB9XG5jb25zdCByZWplY3RPZmZlcj1hZGRNZXRhKHtcbi4uLm9mZmVyLFxuc3RhdHVzOidyZWplY3RlZCcsXG5lcnJvcjogYCR7ZX1gfSk7XG5cbmlkVG9PZmZlci5zZXQoaWQscmVqZWN0T2ZmZXIpO1xudm9pZCB1cGRhdGVJbmJveFN0YXRlKGlkLHJlamVjdE9mZmVyKTtcbiB9O1xuXG5hd2FpdCBudWxsO1xudHJ5e1xuY29uc3QgcGVuZGluZ09mZmVyPWFkZE1ldGEoe1xuLi4ub2ZmZXIsXG5zdGF0dXM6J3BlbmRpbmcnfSk7XG5cbmlkVG9PZmZlci5zZXQoaWQscGVuZGluZ09mZmVyKTtcbnZvaWQgdXBkYXRlSW5ib3hTdGF0ZShpZCxwZW5kaW5nT2ZmZXIpO1xuY29uc3QgY29tcGlsZWRPZmZlcj1hd2FpdCBpZFRvQ29tcGlsZWRPZmZlclAuZ2V0KGlkKTtcblxuY29uc3R7ZGVwb3NpdGVkUCxzZWF0fT1hd2FpdCBleGVjdXRlT2ZmZXIoY29tcGlsZWRPZmZlcik7XG5cbmlkVG9Db21wbGV0ZS5zZXQoaWQsKCk9PntcbmFscmVhZHlSZXNvbHZlZD10cnVlO1xucmV0dXJuIEUoc2VhdCkudHJ5RXhpdCgpO1xuIH0pO1xuaWRUb1NlYXQuc2V0KGlkLHNlYXQpO1xuLy9cbi8vXG52b2lkIEUoc2VhdCkuXG5oYXNFeGl0ZWQoKS5cbnRoZW4oKGV4aXRlZCk9PntcbmlmKCFleGl0ZWQpe1xucmV0dXJuIHN1YnNjcmliZVRvVXBkYXRlcyhpZCxzZWF0KTtcbiB9XG4gfSk7XG5cbmNvbnN0IG9mZmVyUmVzdWx0UD1FKHNlYXQpLmdldE9mZmVyUmVzdWx0KCk7XG5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LmdldChpZCkucmVzb2x2ZShvZmZlclJlc3VsdFApO1xuXG5yZXQ9e1xuZGVwb3NpdGVkUCxcbmRhcHBDb250ZXh0Om9mZmVyLmRhcHBDb250ZXh0fTtcblxuXG4vL1xuZGVwb3NpdGVkUC5cbnRoZW4oKF8pPT57XG4vL1xuaWYoIWFscmVhZHlSZXNvbHZlZCl7XG5hbHJlYWR5UmVzb2x2ZWQ9dHJ1ZTtcbmNvbnN0IGFjY2VwdGVkT2ZmZXI9YWRkTWV0YSh7XG4uLi5wZW5kaW5nT2ZmZXIsXG5zdGF0dXM6J2FjY2VwdCd9KTtcblxuaWRUb09mZmVyLnNldChpZCxhY2NlcHRlZE9mZmVyKTtcbnZvaWQgdXBkYXRlSW5ib3hTdGF0ZShpZCxhY2NlcHRlZE9mZmVyKTtcbiB9XG4gfSkuXG5jYXRjaChyZWplY3RlZCk7XG4gfWNhdGNoKGUpe1xuaWYob2ZmZXIuYWN0aW9ucyl7XG5FKG9mZmVyLmFjdGlvbnMpLmVycm9yKG9mZmVyLGUpO1xuIH1cbnJlamVjdGVkKGUpO1xudGhyb3cgZTtcbiB9XG5yZXR1cm4gcmV0O1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaWRUb1BheW1lbnRSZWNvcmQ9bWFrZVNjYWxhck1hcFN0b3JlKCdwYXltZW50SWQnKTtcbmNvbnN0e3VwZGF0ZXI6cGF5bWVudHNVcGRhdGVyLG5vdGlmaWVyOnBheW1lbnRzTm90aWZpZXJ9PVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL21ha2VOb3RpZmllcktpdChbXSk7XG4vKlxuXG4gICAqL1xuY29uc3QgdXBkYXRlUGF5bWVudFJlY29yZD0oe2FjdGlvbnMsLi4ucHJlRGlzcGxheX0pPT57XG4vL1xuLy9cbmRlbGV0ZSBwcmVEaXNwbGF5LmRpc3BsYXlQYXltZW50O1xuY29uc3QgZGlzcGxheVBheW1lbnQ9ZmlsbEluU2xvdHMoZGVoeWRyYXRlKGhhcmRlbihwcmVEaXNwbGF5KSkpO1xuY29uc3QgcGF5bWVudFJlY29yZD1hZGRNZXRhKHtcbi4uLnByZURpc3BsYXksXG5hY3Rpb25zLFxuZGlzcGxheVBheW1lbnR9KTtcblxuY29uc3R7aWR9PXBheW1lbnRSZWNvcmQubWV0YTtcbmlkVG9QYXltZW50UmVjb3JkLnNldChpZCxoYXJkZW4ocGF5bWVudFJlY29yZCkpO1xucGF5bWVudHNVcGRhdGVyLnVwZGF0ZVN0YXRlKFtwYXltZW50UmVjb3JkXSk7XG4gfTtcblxuY29uc3QgbWFrZVBheW1lbnRBY3Rpb25zRm9ySWQ9KGlkKT0+XG5tYWtlUGF5bWVudEFjdGlvbnMoe1xuZ2V0UmVjb3JkOigpPT5pZFRvUGF5bWVudFJlY29yZC5nZXQoaWQpLFxudXBkYXRlUmVjb3JkOihyZWNvcmQsd2l0aG91dE1ldGE9e30pPT57XG4vL1xuLy9cbnVwZGF0ZVBheW1lbnRSZWNvcmQoey4uLndpdGhvdXRNZXRhLC4uLmFkZE1ldGEocmVjb3JkKX0pO1xuIH0sXG5nZXRCcmFuZFJlY29yZDooYnJhbmQpPT5cbmJyYW5kVGFibGUuaGFzQnlCcmFuZChicmFuZCkmJmJyYW5kVGFibGUuZ2V0QnlCcmFuZChicmFuZCksXG5nZXRQdXJzZUJ5UGV0bmFtZToocGV0bmFtZSk9PnB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHBldG5hbWUpLFxuZ2V0QXV0b0RlcG9zaXRQdXJzZTooYik9PlxuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaGFzKGIpP1xuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuZ2V0KGIpOlxudW5kZWZpbmVkLFxuZ2V0SXNzdWVyQm9hcmRJZDppc3N1ZXJUb0JvYXJkSWQuZ2V0fSk7XG5cblxuLypcblxuXG4gICAqL1xuY29uc3QgYWRkUGF5bWVudD1hc3luYyhwYXltZW50UCxkZXBvc2l0VG89dW5kZWZpbmVkKT0+e1xuLy9cbmNvbnN0W3BheW1lbnQsYnJhbmRdPWF3YWl0IFByb21pc2UuYWxsKFtcbnBheW1lbnRQLFxuRShwYXltZW50UCkuZ2V0QWxsZWdlZEJyYW5kKCldKTtcblxuXG5jb25zdCBiYXNlUGF5bWVudFJlY29yZD1hZGRNZXRhKHtcbnBheW1lbnQsXG5icmFuZH0pO1xuXG5jb25zdHtpZH09YmFzZVBheW1lbnRSZWNvcmQubWV0YTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGF5bWVudFJlY29yZD17XG4uLi5iYXNlUGF5bWVudFJlY29yZCxcbmFjdGlvbnM6bWFrZVBheW1lbnRBY3Rpb25zRm9ySWQoaWQpfTtcblxuaWRUb1BheW1lbnRSZWNvcmQuaW5pdChpZCxoYXJkZW4ocGF5bWVudFJlY29yZCkpO1xuXG5jb25zdCByZWZyZXNoZWQ9YXdhaXQgcGF5bWVudFJlY29yZC5hY3Rpb25zLnJlZnJlc2goKTtcbmlmKCFyZWZyZXNoZWQpe1xuLy9cbnVwZGF0ZVBheW1lbnRSZWNvcmQocGF5bWVudFJlY29yZCk7XG4gfVxuXG4vL1xuYXdhaXQgcGF5bWVudFJlY29yZC5hY3Rpb25zLmRlcG9zaXQoZGVwb3NpdFRvKTtcbiB9O1xuXG5sZXQgc2VsZkNvbnRhY3RQO1xuYXN5bmMgZnVuY3Rpb24gZ2V0RGVwb3NpdEZhY2V0SWQoX2JyYW5kQm9hcmRJZCl7XG4vL1xucmV0dXJuIEUuZ2V0KHNlbGZDb250YWN0UCkuZGVwb3NpdEJvYXJkSWQ7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBkaXNhYmxlQXV0b0RlcG9zaXQocHVyc2VQZXRuYW1lKXtcbmNvbnN0IHB1cnNlPXB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHB1cnNlUGV0bmFtZSk7XG5jb25zdCBicmFuZD1wdXJzZVRvQnJhbmQuZ2V0KHB1cnNlKTtcbmlmKFxuIWJyYW5kVG9BdXRvRGVwb3NpdFB1cnNlLmhhcyhicmFuZCl8fFxuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuZ2V0KGJyYW5kKSE9PXB1cnNlKVxue1xucmV0dXJuO1xuIH1cblxuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuZGVsZXRlKGJyYW5kKTtcbmF3YWl0IHVwZGF0ZUFsbFB1cnNlU3RhdGUoKTtcbiB9XG5cbmNvbnN0IHBlbmRpbmdFbmFibGVBdXRvRGVwb3NpdHM9bWFrZVNjYWxhck1hcFN0b3JlKCdicmFuZCcpO1xuYXN5bmMgZnVuY3Rpb24gZG9FbmFibGVBdXRvRGVwb3NpdChwdXJzZVBldG5hbWUsdXBkYXRlU3RhdGUpe1xuY29uc3QgcHVyc2U9cHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocHVyc2VQZXRuYW1lKTtcbmNvbnN0IGJyYW5kPXB1cnNlVG9CcmFuZC5nZXQocHVyc2UpO1xuaWYoYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaGFzKGJyYW5kKSl7XG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5zZXQoYnJhbmQscHVyc2UpO1xuIH1lbHNle1xuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaW5pdChicmFuZCxwdXJzZSk7XG4gfVxuXG5hd2FpdCBudWxsO1xuaWYodXBkYXRlU3RhdGUpe1xuYXdhaXQgdXBkYXRlQWxsUHVyc2VTdGF0ZSgpO1xuIH1cblxuY29uc3QgcGVuZGluZ1A9XG5wZW5kaW5nRW5hYmxlQXV0b0RlcG9zaXRzLmhhcyhicmFuZCkmJlxucGVuZGluZ0VuYWJsZUF1dG9EZXBvc2l0cy5nZXQoYnJhbmQpO1xuaWYocGVuZGluZ1Ape1xucmV0dXJuIHBlbmRpbmdQO1xuIH1cblxuY29uc3QgYm9hcmRJZFA9RS5nZXQoc2VsZkNvbnRhY3RQKS5kZXBvc2l0Qm9hcmRJZDtcbnBlbmRpbmdFbmFibGVBdXRvRGVwb3NpdHMuaW5pdChicmFuZCxib2FyZElkUCk7XG5jb25zdCBib2FyZElkPWF3YWl0IGJvYXJkSWRQO1xuYnJhbmRUb0RlcG9zaXRGYWNldElkLmluaXQoYnJhbmQsYm9hcmRJZCk7XG5cbmlmKHVwZGF0ZVN0YXRlKXtcbmF3YWl0IHVwZGF0ZUFsbFB1cnNlU3RhdGUoKTtcbiB9XG5yZXR1cm4gYm9hcmRJZFA7XG4gfVxuXG4vKlxuXG5cblxuXG4gICAqL1xuZnVuY3Rpb24gYWNjZXB0UGV0bmFtZShcbmFjY2VwdEZuLFxuc3VnZ2VzdGVkUGV0bmFtZSxcbmJvYXJkSWQsXG5kYXBwT3JpZ2luPXVuZGVmaW5lZClcbntcbi8qICAgICAgICAgICAgICAgICAgKi9cbmxldCBwZXRuYW1lO1xuaWYoZGFwcE9yaWdpbj09PXVuZGVmaW5lZCl7XG5wZXRuYW1lPXN1Z2dlc3RlZFBldG5hbWU7XG4gfWVsc2V7XG5jb25zdCBlZGdlbmFtZT1lZGdlTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KGRhcHBPcmlnaW4pO1xuLy9cbnBldG5hbWU9W2VkZ2VuYW1lLHN1Z2dlc3RlZFBldG5hbWVdO1xuIH1cblxucmV0dXJuIEUoYm9hcmQpLlxuZ2V0VmFsdWUoYm9hcmRJZCkuXG50aGVuKCh2YWx1ZSk9PntcbmNvbnRleHQuZW5zdXJlQm9hcmRJZChib2FyZElkLHZhbHVlKTtcbnJldHVybiBhY2NlcHRGbihwZXRuYW1lLHZhbHVlKTtcbiB9KTtcbiB9XG5cbi8qXG5cblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gc3VnZ2VzdElzc3VlcihcbnN1Z2dlc3RlZFBldG5hbWUsXG5pc3N1ZXJCb2FyZElkLFxuZGFwcE9yaWdpbj11bmRlZmluZWQpXG57XG4vL1xuLy9cbi8vXG5yZXR1cm4gYWNjZXB0UGV0bmFtZShcbi8vXG4ocGV0bmFtZSx2YWx1ZSk9PmFkZElzc3VlcihwZXRuYW1lLHZhbHVlLHRydWUpLFxuc3VnZ2VzdGVkUGV0bmFtZSxcbmlzc3VlckJvYXJkSWQsXG5kYXBwT3JpZ2luKTtcblxuIH1cblxuLypcblxuXG5cbiAgICovXG5hc3luYyBmdW5jdGlvbiBzdWdnZXN0SW5zdGFuY2UoXG5zdWdnZXN0ZWRQZXRuYW1lLFxuaW5zdGFuY2VIYW5kbGVCb2FyZElkLFxuZGFwcE9yaWdpbj11bmRlZmluZWQpXG57XG4vL1xuLy9cbi8vXG5cbnJldHVybiBhY2NlcHRQZXRuYW1lKFxuYWRkSW5zdGFuY2UsXG5zdWdnZXN0ZWRQZXRuYW1lLFxuaW5zdGFuY2VIYW5kbGVCb2FyZElkLFxuZGFwcE9yaWdpbik7XG5cbiB9XG5cbi8qXG5cblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gc3VnZ2VzdEluc3RhbGxhdGlvbihcbnN1Z2dlc3RlZFBldG5hbWUsXG5pbnN0YWxsYXRpb25IYW5kbGVCb2FyZElkLFxuZGFwcE9yaWdpbj11bmRlZmluZWQpXG57XG4vL1xuLy9cbi8vXG5yZXR1cm4gYWNjZXB0UGV0bmFtZShcbi8vXG5pbnN0YWxsYXRpb25NYW5hZ2VyLmFkZCxcbnN1Z2dlc3RlZFBldG5hbWUsXG5pbnN0YWxsYXRpb25IYW5kbGVCb2FyZElkLFxuZGFwcE9yaWdpbik7XG5cbiB9XG5cbmZ1bmN0aW9uIGdldEJyYW5kKHBldG5hbWUpe1xuY29uc3QgYnJhbmQ9YnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSk7XG5yZXR1cm4gYnJhbmQ7XG4gfVxuXG5mdW5jdGlvbiBnZXRCcmFuZFBldG5hbWVzKGJyYW5kcyl7XG5yZXR1cm4gYnJhbmRzLm1hcChicmFuZE1hcHBpbmcudmFsVG9QZXRuYW1lLmdldCk7XG4gfVxuXG5mdW5jdGlvbiBnZXRTZWxmQ29udGFjdCgpe1xucmV0dXJuIHNlbGZDb250YWN0UDtcbiB9XG5cbmNvbnN0IG1ha2VNYW5hZ2VyPShwZXRuYW1lTWFwcGluZyxtYW5hZ2VyVHlwZSk9PntcbmNvbnN0IG1hbmFnZXI9RmFyKG1hbmFnZXJUeXBlLHtcbnJlbmFtZTphc3luYyhwZXRuYW1lLHRoaW5nKT0+e1xucGV0bmFtZU1hcHBpbmcucmVuYW1lUGV0bmFtZShwZXRuYW1lLHRoaW5nKTtcbmF3YWl0IHVwZGF0ZUFsbFN0YXRlKCk7XG4gfSxcbmdldDpwZXRuYW1lTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0LFxuZ2V0QWxsOnBldG5hbWVNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzLFxuYWRkOmFzeW5jKHBldG5hbWUsdGhpbmcpPT57XG5wZXRuYW1lTWFwcGluZy5zdWdnZXN0UGV0bmFtZShwZXRuYW1lLHRoaW5nKTtcbmF3YWl0IHVwZGF0ZUFsbFN0YXRlKCk7XG4gfX0pO1xuXG5yZXR1cm4gbWFuYWdlcjtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnN0YWxsYXRpb25NYW5hZ2VyPW1ha2VNYW5hZ2VyKFxuaW5zdGFsbGF0aW9uTWFwcGluZyxcbidJbnN0YWxsYXRpb25NYW5hZ2VyJyk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnN0YW5jZU1hbmFnZXI9bWFrZU1hbmFnZXIoaW5zdGFuY2VNYXBwaW5nLCdJbnN0YW5jZU1hbmFnZXInKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNzdWVyTWFuYWdlcj1GYXIoJ0lzc3Vlck1hbmFnZXInLHtcbnJlbmFtZTphc3luYyhwZXRuYW1lLGlzc3Vlcik9PntcbmJyYW5kVGFibGUuaGFzQnlJc3N1ZXIoaXNzdWVyKXx8XG5GYWlsIGBpc3N1ZXIgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgYWRkZWRgO1xuY29uc3QgYnJhbmRSZWNvcmQ9YnJhbmRUYWJsZS5nZXRCeUlzc3Vlcihpc3N1ZXIpO1xuYnJhbmRNYXBwaW5nLnJlbmFtZVBldG5hbWUocGV0bmFtZSxicmFuZFJlY29yZC5icmFuZCk7XG5hd2FpdCB1cGRhdGVBbGxTdGF0ZSgpO1xuIH0sXG5nZXQ6KHBldG5hbWUpPT57XG5jb25zdCBicmFuZD1icmFuZE1hcHBpbmcucGV0bmFtZVRvVmFsLmdldChwZXRuYW1lKTtcbnJldHVybiBicmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpLmlzc3VlcjtcbiB9LFxuZ2V0QWxsOigpPT57XG5yZXR1cm5bLi4uYnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCldLm1hcChcbihbcGV0bmFtZSxicmFuZF0pPT57XG5jb25zdHtpc3N1ZXJ9PWJyYW5kVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG5yZXR1cm5bcGV0bmFtZSxpc3N1ZXJdO1xuIH0pO1xuXG4gfSxcbmFkZDphc3luYyhwZXRuYW1lLGlzc3VlclApPT57XG5jb25zdHticmFuZCxpc3N1ZXJ9PWF3YWl0IGJyYW5kVGFibGUuaW5pdElzc3Vlcihpc3N1ZXJQLGFkZE1ldGEpO1xuYXdhaXQgaW5pdElzc3VlclRvQm9hcmRJZChpc3N1ZXIsYnJhbmQpO1xuYnJhbmRNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKHBldG5hbWUsYnJhbmQpO1xuYXdhaXQgdXBkYXRlQWxsSXNzdWVyc1N0YXRlKCk7XG4gfX0pO1xuXG5cbmZ1bmN0aW9uIGdldEluc3RhbGxhdGlvbk1hbmFnZXIoKXtcbnJldHVybiBpbnN0YWxsYXRpb25NYW5hZ2VyO1xuIH1cblxuZnVuY3Rpb24gZ2V0SW5zdGFuY2VNYW5hZ2VyKCl7XG5yZXR1cm4gaW5zdGFuY2VNYW5hZ2VyO1xuIH1cblxuZnVuY3Rpb24gZ2V0SXNzdWVyTWFuYWdlcigpe1xucmV0dXJuIGlzc3Vlck1hbmFnZXI7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlT2ZmZXJSZXN1bHQoaW52aXRhdGlvbkhhbmRsZSxvZmZlclJlc3VsdCl7XG5pbnZpdGF0aW9uSGFuZGxlVG9PZmZlclJlc3VsdC5pbml0KGludml0YXRpb25IYW5kbGUsb2ZmZXJSZXN1bHQpO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0T2ZmZXJSZXN1bHQoaW52aXRhdGlvbkhhbmRsZSl7XG5yZXR1cm4gaW52aXRhdGlvbkhhbmRsZVRvT2ZmZXJSZXN1bHQuZ2V0KGludml0YXRpb25IYW5kbGUpO1xuIH1cblxuLypcblxuXG5cblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0VUlOb3RpZmllcihyYXdJZCxkYXBwT3JpZ2luPSd1bmtub3duJyl7XG5jb25zdCBpZD1tYWtlSWQoZGFwcE9yaWdpbixyYXdJZCk7XG5jb25zdCBvZmZlclJlc3VsdD1hd2FpdCBpZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LmdldChpZCkucHJvbWlzZTtcbmFzc2VydChcbnBhc3NTdHlsZU9mKG9mZmVyUmVzdWx0KT09PSdjb3B5UmVjb3JkJyxcbiBgb2ZmZXJSZXN1bHQgbXVzdCBiZSBhIHJlY29yZCB0byBoYXZlIGEgdWlOb3RpZmllcmApO1xuXG5vZmZlclJlc3VsdC51aU5vdGlmaWVyfHxGYWlsIGBvZmZlclJlc3VsdCBkb2VzIG5vdCBoYXZlIGEgdWlOb3RpZmllcmA7XG5yZXR1cm4gb2ZmZXJSZXN1bHQudWlOb3RpZmllcjtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UHVibGljU3Vic2NyaWJlcnMocmF3SWQsZGFwcE9yaWdpbj0ndW5rbm93bicpe1xuY29uc3QgaWQ9bWFrZUlkKGRhcHBPcmlnaW4scmF3SWQpO1xuXG5jb25zdCBvZmZlclJlc3VsdD1hd2FpdCBpZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LmdldChpZCkucHJvbWlzZTtcbmFzc2VydChcbnBhc3NTdHlsZU9mKG9mZmVyUmVzdWx0KT09PSdjb3B5UmVjb3JkJyxcbiBgb2ZmZXJSZXN1bHQgJHtvZmZlclJlc3VsdH0gbXVzdCBiZSBhIHJlY29yZCB0byBoYXZlIHB1YmxpY1N1YnNjcmliZXJzYCk7XG5cblxuY29uc3R7cHVibGljU3Vic2NyaWJlcnN9PW9mZmVyUmVzdWx0O1xucHVibGljU3Vic2NyaWJlcnN8fFxuRmFpbCBgb2ZmZXJSZXN1bHQgJHtvZmZlclJlc3VsdH0gZG9lcyBub3QgaGF2ZSBwdWJsaWNTdWJzY3JpYmVyc2A7XG5wYXNzU3R5bGVPZihwdWJsaWNTdWJzY3JpYmVycyk9PT0nY29weVJlY29yZCd8fFxuRmFpbCBgcHVibGljU3Vic2NyaWJlcnMgJHtwdWJsaWNTdWJzY3JpYmVyc30gbXVzdCBiZSBhIHJlY29yZGA7XG5cbnJldHVybiBwdWJsaWNTdWJzY3JpYmVycztcbiB9XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UHVibGljTm90aWZpZXJzKHJhd0lkLGRhcHBPcmlnaW49J3Vua25vd24nKXtcbmNvbnN0IHB1YmxpY1N1YnNjcmliZXJzPWF3YWl0IGdldFB1YmxpY1N1YnNjcmliZXJzKHJhd0lkLGRhcHBPcmlnaW4pO1xucmV0dXJuIG9iamVjdE1hcChwdWJsaWNTdWJzY3JpYmVycyxtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcik7XG4gfVxuXG4vL1xuLy9cbmNvbnN0IGNyZWF0ZVJvb3RMb29rdXBzPSgpPT57XG5jb25zdCByb290UGF0aFRvTG9va3VwPW1ha2VMZWdhY3lNYXAoJ2xvb2t1cHMnKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBtYWtlTG9va3VwPShraW5kLGxvb2t1cCk9PntcbnJvb3RQYXRoVG9Mb29rdXAuaW5pdChcbmtpbmQsXG5GYXIoIGAke2tpbmR9TG9va3VwYCx7XG5sb29rdXB9KSk7XG5cblxuIH07XG5cbi8vXG4vL1xuY29uc3QgcGV0bmFtZU9yUGF0aD1cbihsb29rdXApPT5cbiguLi5wYXRoKT0+e1xudHJ5e1xuaWYocGF0aC5sZW5ndGg9PT0xKXtcbi8vXG5yZXR1cm4gbG9va3VwKHBhdGhbMF0pO1xuIH1cbiB9Y2F0Y2goZSl7XG4vL1xuIH1cbnJldHVybiBsb29rdXAocGF0aCk7XG4gfTtcblxubWFrZUxvb2t1cCgnYnJhbmQnLHBldG5hbWVPclBhdGgoYnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQpKTtcbm1ha2VMb29rdXAoJ2NvbnRhY3QnLHBldG5hbWVPclBhdGgoY29udGFjdE1hcHBpbmcucGV0bmFtZVRvVmFsLmdldCkpO1xubWFrZUxvb2t1cCgnaXNzdWVyJyxwZXRuYW1lT3JQYXRoKGlzc3Vlck1hbmFnZXIuZ2V0KSk7XG5tYWtlTG9va3VwKCdpbnN0YW5jZScscGV0bmFtZU9yUGF0aChpbnN0YW5jZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldCkpO1xubWFrZUxvb2t1cChcbidpbnN0YWxsYXRpb24nLFxucGV0bmFtZU9yUGF0aChpbnN0YWxsYXRpb25NYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQpKTtcblxubWFrZUxvb2t1cCgncHVyc2UnLHBldG5hbWVPclBhdGgocHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQpKTtcblxuLy9cbmNvbnN0IGlkT25seT1cbihraW5kLGxvb2t1cCk9PlxuKC4uLnBhdGgpPT57XG5wYXRoLmxlbmd0aD09PTF8fFxuRmFpbCBgJHtxKFxua2luZClcbiB9IGxvb2t1cCBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgc2luZ2xlIG9mZmVyIElELCBub3QgJHtwYXRofWA7XG5yZXR1cm4gbG9va3VwKHBhdGhbMF0pO1xuIH07XG5tYWtlTG9va3VwKCdvZmZlcicsaWRPbmx5KCdvZmZlcicsaWRUb09mZmVyLmdldCkpO1xubWFrZUxvb2t1cChcbidvZmZlclJlc3VsdCcsXG5pZE9ubHkoJ29mZmVyUmVzdWx0JywoaWQpPT5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LmdldChpZCkucHJvbWlzZSkpO1xuXG5cbnJldHVybiByb290UGF0aFRvTG9va3VwO1xuIH07XG5cbmNvbnN0IGZpcnN0UGF0aFRvTG9va3VwPWNyZWF0ZVJvb3RMb29rdXBzKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWFyc2hhbGxlcj1oYXJkZW4oe1xuZnJvbUNhcERhdGE6Y29udGV4dC5mcm9tQ2FwRGF0YSxcbnRvQ2FwRGF0YTpjb250ZXh0LnRvQ2FwRGF0YSxcbnVuc2VyaWFsaXplOmNvbnRleHQuZnJvbUNhcERhdGEsXG5zZXJpYWxpemU6Y29udGV4dC50b0NhcERhdGF9KTtcblxuXG5jb25zdCBoYW5kbGVBY2NlcHRPZmZlckFjdGlvbj1hc3luYyhvZmZlcik9PntcbmNvbnN0e3JlcXVlc3RDb250ZXh0fT1vZmZlcjtcbmNvbnN0IHJhd0lkPWF3YWl0IGFkZE9mZmVyKG9mZmVyLHJlcXVlc3RDb250ZXh0KTtcbmNvbnN0IGRhcHBPcmlnaW49XG5yZXF1ZXN0Q29udGV4dC5kYXBwT3JpZ2lufHxyZXF1ZXN0Q29udGV4dC5vcmlnaW58fCd1bmtub3duJztcbnJldHVybiBhY2NlcHRPZmZlciggYCR7ZGFwcE9yaWdpbn0jJHtyYXdJZH1gKTtcbiB9O1xuXG5jb25zdCBoYW5kbGVTdWdnZXN0SXNzdWVyQWN0aW9uPSh7cGV0bmFtZSxib2FyZElkfSk9Plxuc3VnZ2VzdElzc3VlcihwZXRuYW1lLGJvYXJkSWQpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKlxuXG5cbiAgICovXG5jb25zdCBwZXJmb3JtQWN0aW9uPShvYmopPT57XG5jb25zdHt0eXBlLGRhdGF9PUpTT04ucGFyc2Uob2JqLnNwZW5kQWN0aW9uKTtcbnN3aXRjaCh0eXBlKXtcbmNhc2UnYWNjZXB0T2ZmZXInOlxucmV0dXJuIGhhbmRsZUFjY2VwdE9mZmVyQWN0aW9uKGRhdGEpO1xuY2FzZSdzdWdnZXN0SXNzdWVyJzpcbnJldHVybiBoYW5kbGVTdWdnZXN0SXNzdWVyQWN0aW9uKGRhdGEpO1xuZGVmYXVsdDpcbnRocm93IEVycm9yKCBgVW5rbm93biB3YWxsZXQgYWN0aW9uICR7dHlwZX1gKTt9XG5cbiB9O1xuXG5jb25zdCB3YWxsZXQ9RmFyKCd3YWxsZXQnLHtcbmxvb2t1cDooLi4ucGF0aCk9Pntcbi8vXG5pZihwYXRoLmxlbmd0aD09PTApe1xucmV0dXJuIHdhbGxldDtcbiB9XG5jb25zdFtmaXJzdCwuLi5yZW1haW5pbmddPXBhdGg7XG5jb25zdCBmaXJzdFZhbHVlPWZpcnN0UGF0aFRvTG9va3VwLmdldChmaXJzdCk7XG5pZihyZW1haW5pbmcubGVuZ3RoPT09MCl7XG5yZXR1cm4gZmlyc3RWYWx1ZTtcbiB9XG5yZXR1cm4gRShmaXJzdFZhbHVlKS5sb29rdXAoLi4ucmVtYWluaW5nKTtcbiB9LFxuZ2V0TWFyc2hhbGxlcjooKT0+bWFyc2hhbGxlcixcbmdldERhcHBDYWNoZUNvb3JkaW5hdG9yOihkYXBwT3JpZ2luKT0+XG5kYXBwT3JpZ2lucy5nZXQoZGFwcE9yaWdpbikuY2FjaGVDb29yZGluYXRvcixcbmdldENhY2hlQ29vcmRpbmF0b3I6KCk9PnNoYXJlZENhY2hlQ29vcmRpbmF0b3IsXG5zYXZlT2ZmZXJSZXN1bHQsXG5nZXRPZmZlclJlc3VsdCxcbndhaXRGb3JEYXBwQXBwcm92YWwsXG5nZXREYXBwc05vdGlmaWVyKCl7XG5yZXR1cm4gZGFwcHNOb3RpZmllcjtcbiB9LFxuZ2V0UHVyc2VzTm90aWZpZXIoKXtcbnJldHVybiBwdXJzZXNOb3RpZmllcjtcbiB9LFxuZ2V0QXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyKCl7XG5yZXR1cm4gYXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyO1xuIH0sXG5nZXRJc3N1ZXJzTm90aWZpZXIoKXtcbnJldHVybiBpc3N1ZXJzTm90aWZpZXI7XG4gfSxcbmdldE9mZmVyc05vdGlmaWVyKCl7XG5yZXR1cm4gb2ZmZXJzTm90aWZpZXI7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuYWRkSXNzdWVyOmlzc3Vlck1hbmFnZXIuYWRkLFxuZ2V0QnJhbmQsXG5nZXRCcmFuZFBldG5hbWVzLFxucHVibGlzaElzc3Vlcixcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5hZGRJbnN0YW5jZTppbnN0YW5jZU1hbmFnZXIuYWRkLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5hZGRJbnN0YWxsYXRpb246aW5zdGFsbGF0aW9uTWFuYWdlci5hZGQsXG5nZXRJbnN0YWxsYXRpb25NYW5hZ2VyLFxuZ2V0SW5zdGFuY2VNYW5hZ2VyLFxuZ2V0SXNzdWVyTWFuYWdlcixcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucmVuYW1lSXNzdWVyOmlzc3Vlck1hbmFnZXIucmVuYW1lLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJlbmFtZUluc3RhbmNlOmluc3RhbmNlTWFuYWdlci5yZW5hbWUsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJlbmFtZUluc3RhbGxhdGlvbjppbnN0YWxsYXRpb25NYW5hZ2VyLnJlbmFtZSxcbmdldFNlbGZDb250YWN0LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldEluc3RhbmNlOmluc3RhbmNlTWFuYWdlci5nZXQsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldEluc3RhbGxhdGlvbjppbnN0YWxsYXRpb25NYW5hZ2VyLmdldCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0SW5zdGFsbGF0aW9uczppbnN0YWxsYXRpb25NYW5hZ2VyLmdldEFsbCxcbm1ha2VFbXB0eVB1cnNlLFxuZGVwb3NpdCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0SXNzdWVyOmlzc3Vlck1hbmFnZXIuZ2V0LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRJc3N1ZXJzOmlzc3Vlck1hbmFnZXIuZ2V0QWxsLFxuZ2V0UHVyc2VzLFxuZ2V0UHVyc2UsXG5nZXRQdXJzZUlzc3VlcixcbmFkZE9mZmVyLFxuZGVjbGluZU9mZmVyLFxuY2FuY2VsT2ZmZXIsXG5hY2NlcHRPZmZlcixcbmdldE9mZmVycyxcbmdldFNlYXQ6KGlkKT0+aWRUb1NlYXQuZ2V0KGlkKSxcbmdldFNlYXRzOihpZHMpPT5pZHMubWFwKHdhbGxldC5nZXRTZWF0KSxcbmVuYWJsZUF1dG9EZXBvc2l0KHB1cnNlUGV0bmFtZSl7XG4vL1xucmV0dXJuIGRvRW5hYmxlQXV0b0RlcG9zaXQocHVyc2VQZXRuYW1lLHRydWUpO1xuIH0sXG5kaXNhYmxlQXV0b0RlcG9zaXQsXG5wZXJmb3JtQWN0aW9uLFxuZ2V0RGVwb3NpdEZhY2V0SWQsXG5zdWdnZXN0SXNzdWVyLFxuc3VnZ2VzdEluc3RhbmNlLFxuc3VnZ2VzdEluc3RhbGxhdGlvbixcbmFkZENvbnRhY3QsXG5nZXRDb250YWN0c05vdGlmaWVyKCl7XG5yZXR1cm4gY29udGFjdHNOb3RpZmllcjtcbiB9LFxuYWRkUGF5bWVudCxcbmdldFBheW1lbnRzTm90aWZpZXIoKXtcbnJldHVybiBwYXltZW50c05vdGlmaWVyO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldFVJTm90aWZpZXIsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldFB1YmxpY05vdGlmaWVycyxcbmdldFB1YmxpY1N1YnNjcmliZXJzLFxuZ2V0Wm9lKCl7XG5yZXR1cm4gem9lO1xuIH0sXG5nZXRCb2FyZCgpe1xucmV0dXJuIGJvYXJkO1xuIH0sXG5nZXRBZ29yaWNOYW1lcyguLi5wYXRoKXtcbmlmKCFhZ29yaWNOYW1lcyl7XG50aHJvdyBGYWlsIGBhZ29yaWNOYW1lcyB3YXMgbm90IHN1cHBsaWVkIHRvIHRoZSB3YWxsZXQgbWFrZXJgO1xuIH1cbnJldHVybiBFKGFnb3JpY05hbWVzKS5sb29rdXAoLi4ucGF0aCk7XG4gfSxcbmdldE5hbWVzQnlBZGRyZXNzKC4uLnBhdGgpe1xuaWYobmFtZXNCeUFkZHJlc3M9PT11bmRlZmluZWQpe1xuLy9cbi8vXG50aHJvdyBGYWlsIGBuYW1lc0J5QWRkcmVzcyB3YXMgbm90IHN1cHBsaWVkIHRvIHRoZSB3YWxsZXQgbWFrZXJgO1xuIH1cbnJldHVybiBFKG5hbWVzQnlBZGRyZXNzKS5sb29rdXAoLi4ucGF0aCk7XG4gfX0pO1xuXG5cbmNvbnN0IGluaXRpYWxpemU9YXN5bmMoKT0+e1xuLy9cbmNvbnN0IHNlbGZEZXBvc2l0RmFjZXQ9RmFyKCdjb250YWN0Jyx7XG5yZWNlaXZlKHBheW1lbnQpe1xucmV0dXJuIGFkZFBheW1lbnQocGF5bWVudCk7XG4gfX0pO1xuXG5cbmNvbnN0IGFkZHJlc3M9YXdhaXQgRShteUFkZHJlc3NOYW1lQWRtaW4pLmdldE15QWRkcmVzcygpO1xuLy9cbnNlbGZDb250YWN0UD1hZGRDb250YWN0KCdTZWxmJyxzZWxmRGVwb3NpdEZhY2V0LGFkZHJlc3MpO1xuXG4vL1xuY29uc3QgWk9FX0lOVklURV9QVVJTRV9QRVROQU1FPSdEZWZhdWx0IFpvZSBpbnZpdGUgcHVyc2UnO1xuY29uc3QgaW52aXRlSXNzdWVyUD1FKHpvZSkuZ2V0SW52aXRhdGlvbklzc3VlcigpO1xuY29uc3QgYWRkWm9lSXNzdWVyPShpc3N1ZXJQKT0+XG5pc3N1ZXJNYW5hZ2VyLmFkZChaT0VfSU5WSVRFX0JSQU5EX1BFVE5BTUUsaXNzdWVyUCk7XG5jb25zdCBtYWtlSW52aXRlUHVyc2U9KCk9Plxud2FsbGV0Lm1ha2VFbXB0eVB1cnNlKFpPRV9JTlZJVEVfQlJBTkRfUEVUTkFNRSxaT0VfSU5WSVRFX1BVUlNFX1BFVE5BTUUpO1xuY29uc3QgYWRkSW52aXRlRGVwb3NpdEZhY2V0PSgpPT5cbkUod2FsbGV0KS5lbmFibGVBdXRvRGVwb3NpdChaT0VfSU5WSVRFX1BVUlNFX1BFVE5BTUUpO1xuXG5hd2FpdCBhZGRab2VJc3N1ZXIoaW52aXRlSXNzdWVyUCkuXG50aGVuKG1ha2VJbnZpdGVQdXJzZSkuXG50aGVuKGFkZEludml0ZURlcG9zaXRGYWNldCk7XG56b2VJbnZpdGVQdXJzZT13YWxsZXQuZ2V0UHVyc2UoWk9FX0lOVklURV9QVVJTRV9QRVROQU1FKTtcblxuYXdhaXQgRShteUFkZHJlc3NOYW1lQWRtaW4pLnVwZGF0ZShcbldhbGxldE5hbWUuZGVwb3NpdEZhY2V0LFxuc2VsZkRlcG9zaXRGYWNldCk7XG5cbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGltcG9ydEJhbmtBc3NldHM9YXN5bmMoYmFuayk9PntcbnZvaWQgb2JzZXJ2ZUl0ZXJhdGlvbihcbnN1YnNjcmliZUVhY2goRShiYW5rKS5nZXRBc3NldFN1YnNjcmlwdGlvbigpKSxcbmhhcmRlbih7XG4gICAgICBhc3luYyB1cGRhdGVTdGF0ZSh7cHJvcG9zZWROYW1lLGlzc3Vlck5hbWUsaXNzdWVyLGJyYW5kfSl7XG5hd2FpdCBudWxsO1xudHJ5e1xuaXNzdWVyTmFtZT1hd2FpdCBhZGRJc3N1ZXIoaXNzdWVyTmFtZSxpc3N1ZXIpO1xuY29uc3QgcHVyc2U9YXdhaXQgRShiYW5rKS5nZXRQdXJzZShicmFuZCk7XG4vL1xuYXdhaXQgaW50ZXJuYWxVbnNhZmVJbXBvcnRQdXJzZShcbmlzc3Vlck5hbWUsXG5wcm9wb3NlZE5hbWUsXG50cnVlLFxucHVyc2UpO1xuXG4gfWNhdGNoKGUpe1xuY29uc29sZS5lcnJvcignLy8vIGNvdWxkIG5vdCBhZGQgYmFuayBhc3NldCBwdXJzZScsZSx7XG5pc3N1ZXJOYW1lLFxucHJvcG9zZWROYW1lLFxuaXNzdWVyLFxuYnJhbmR9KTtcblxuIH1cbiB9fSkpLlxuXG5maW5hbGx5KCgpPT5jb25zb2xlLmVycm9yKCcvLy8gVGhpcyBpcyB0aGUgZW5kIG9mIHRoZSBiYW5rIGFzc2V0cycpKTtcbiB9O1xucmV0dXJue1xuYWRtaW46d2FsbGV0LFxuaW5pdGlhbGl6ZWQ6aW5pdGlhbGl6ZSgpLFxuaW1wb3J0QmFua0Fzc2V0c307XG5cbiB9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVdhbGxldFJvb3QiOlsibWFrZVdhbGxldFJvb3QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAU+AS6r8CAAC/AgAALAAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvcHVic3ViLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJkZWZhdWx0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIGZ1bmN0aW9uICAgICAgICAgICAgICAgIG1ha2VQdWJzdWIoRSl7XG5sZXQgbGFzdFB1Ymxpc2hlZDtcbmNvbnN0IHN1YnNjcmliZXJzPVtdO1xuXG5yZXR1cm4gaGFyZGVuKHtcbnN1YnNjcmliZShzKXtcbnN1YnNjcmliZXJzLnB1c2gocyk7XG5pZihsYXN0UHVibGlzaGVkIT09dW5kZWZpbmVkKXtcbkUocykubm90aWZ5KGxhc3RQdWJsaXNoZWQpO1xuIH1cbiB9LFxucHVibGlzaChtKXtcbmxhc3RQdWJsaXNoZWQ9bTtcbmZvcihjb25zdCBzIG9mIHN1YnNjcmliZXJzKXtcbkUocykubm90aWZ5KG0pO1xuIH1cbiB9fSk7XG5cbiB9JGjigI1fb25jZS5kZWZhdWx0KCAgICAgbWFrZVB1YnN1Yik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAvMXeHxQ1AAAUNQAALAAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvd2FsbGV0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAYWdvcmljL25vdGlmaWVyIiwiQGVuZG8vbWFyc2hhbCIsIi4vbGliLXdhbGxldC5qcyIsIi4vcHVic3ViLmpzIiwiLi9iaWdpbnRTdHJpbmdpZnkuanMiLCIuL2RhdGUtbm93LmpzIiwiLi9pbnRlcm5hbC10eXBlcy5qcyJdLCJleHBvcnRzIjpbImJ1aWxkUm9vdE9iamVjdCIsImRlZmF1bHQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsbWFrZU5vdGlmaWVyS2l0LG9ic2VydmVJdGVyYXRpb24sRmFyLG1ha2VXYWxsZXRSb290LHB1YnN1YixiaWdpbnRTdHJpbmdpZnksbWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyxtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdzskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcIm1ha2VOb3RpZmllcktpdFwiLCBbJGjigI1fYSA9PiAobWFrZU5vdGlmaWVyS2l0ID0gJGjigI1fYSldXSxbXCJvYnNlcnZlSXRlcmF0aW9uXCIsIFskaOKAjV9hID0+IChvYnNlcnZlSXRlcmF0aW9uID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIi4vbGliLXdhbGxldC5qc1wiLCBbW1wibWFrZVdhbGxldFJvb3RcIiwgWyRo4oCNX2EgPT4gKG1ha2VXYWxsZXRSb290ID0gJGjigI1fYSldXV1dLFtcIi4vcHVic3ViLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaOKAjV9hID0+IChwdWJzdWIgPSAkaOKAjV9hKV1dXV0sW1wiLi9iaWdpbnRTdHJpbmdpZnkuanNcIiwgW1tcImJpZ2ludFN0cmluZ2lmeVwiLCBbJGjigI1fYSA9PiAoYmlnaW50U3RyaW5naWZ5ID0gJGjigI1fYSldXV1dLFtcIi4vZGF0ZS1ub3cuanNcIiwgW1tcIm1ha2VUaW1lckRldmljZURhdGVOb3dcIiwgWyRo4oCNX2EgPT4gKG1ha2VUaW1lckRldmljZURhdGVOb3cgPSAkaOKAjV9hKV1dLFtcIm1ha2VUaW1lclNlcnZpY2VEYXRlTm93XCIsIFskaOKAjV9hID0+IChtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyA9ICRo4oCNX2EpXV1dXSxbXCIuL2ludGVybmFsLXR5cGVzLmpzXCIsIFtdXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShidWlsZFJvb3RPYmplY3QsICduYW1lJywge3ZhbHVlOiBcImJ1aWxkUm9vdE9iamVjdFwifSk7JGjigI1fb25jZS5idWlsZFJvb3RPYmplY3QoYnVpbGRSb290T2JqZWN0KTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5mdW5jdGlvbiAgICAgICAgYnVpbGRSb290T2JqZWN0KHZhdFBvd2Vycyl7XG4vL1xuY29uc3R7RH09dmF0UG93ZXJzfHx7fTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgd2FsbGV0Um9vdDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB3YWxsZXRBZG1pbjtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBwdXJzZXNTdGF0ZT1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW5ib3hTdGF0ZT1bXTtcbmxldCBodHRwO1xuXG5jb25zdCBicmlkZ2VIYW5kbGVzPW5ldyBTZXQoKTtcbmNvbnN0IG9mZmVyU3Vic2NyaXB0aW9ucz1uZXcgTWFwKCk7XG5cbmNvbnN0IGh0dHBTZW5kPShvYmosY2hhbm5lbEhhbmRsZXMpPT5cbkUoaHR0cCkuc2VuZChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpLGNoYW5uZWxIYW5kbGVzKTtcblxuY29uc3QgcHVzaE9mZmVyU3Vic2NyaXB0aW9ucz0oY2hhbm5lbEhhbmRsZSxvZmZlcnMpPT57XG5jb25zdCBzdWJzPW9mZmVyU3Vic2NyaXB0aW9ucy5nZXQoY2hhbm5lbEhhbmRsZSk7XG5mb3IoY29uc3R7b3JpZ2luLHN0YXR1c31vZiBzdWJzfHxbXSl7XG4vL1xuY29uc3QgcmVzdWx0PWhhcmRlbihcbm9mZmVycy5maWx0ZXIoXG4ob2ZmZXIpPT5cbihzdGF0dXM9PT1udWxsfHxvZmZlci5zdGF0dXM9PT1zdGF0dXMpJiZcbm9mZmVyLnJlcXVlc3RDb250ZXh0JiZcbm9mZmVyLnJlcXVlc3RDb250ZXh0Lm9yaWdpbj09PW9yaWdpbikpO1xuXG5cbmh0dHBTZW5kKFxue1xudHlwZTond2FsbGV0T2ZmZXJEZXNjcmlwdGlvbnMnLFxuZGF0YTpyZXN1bHR9LFxuXG5bY2hhbm5lbEhhbmRsZV0pO1xuXG4gfVxuIH07XG5cbmNvbnN0IHN1YnNjcmliZVRvT2ZmZXJzPShjaGFubmVsSGFuZGxlLHtvcmlnaW4sc3RhdHVzPW51bGx9KT0+e1xubGV0IHN1YnM9b2ZmZXJTdWJzY3JpcHRpb25zLmdldChjaGFubmVsSGFuZGxlKTtcbmlmKCFzdWJzKXtcbnN1YnM9W107XG5vZmZlclN1YnNjcmlwdGlvbnMuc2V0KGNoYW5uZWxIYW5kbGUsc3Vicyk7XG4gfVxuc3Vicy5wdXNoKHtvcmlnaW4sc3RhdHVzfSk7XG5wdXNoT2ZmZXJTdWJzY3JpcHRpb25zKGNoYW5uZWxIYW5kbGUsaW5ib3hTdGF0ZSk7XG4gfTtcblxuY29uc3R7cHVibGlzaDpwdXJzZXNQdWJsaXNoLHN1YnNjcmliZTpwdXJzZXNTdWJzY3JpYmV9PXB1YnN1YihFKTtcbmNvbnN0e3VwZGF0ZXI6aW5ib3hVcGRhdGVyLG5vdGlmaWVyOm9mZmVyTm90aWZpZXJ9PVxubWFrZU5vdGlmaWVyS2l0KGluYm94U3RhdGUpO1xuY29uc3R7cHVibGlzaDppbmJveFB1Ymxpc2gsc3Vic2NyaWJlOmluYm94U3Vic2NyaWJlfT1wdWJzdWIoRSk7XG5cbmNvbnN0IG5vdGlmaWVycz1oYXJkZW4oe1xuZ2V0SW5ib3hOb3RpZmllcigpe1xucmV0dXJuIG9mZmVyTm90aWZpZXI7XG4gfX0pO1xuXG5cbi8qXG5cbiAgICovXG5hc3luYyBmdW5jdGlvbiBzdGFydHVwKHtcbnpvZSxcbmJvYXJkLFxuYWdvcmljTmFtZXMsXG5uYW1lc0J5QWRkcmVzcyxcbm15QWRkcmVzc05hbWVBZG1pbixcbnRpbWVyRGV2aWNlLFxudGltZXJEZXZpY2VTY2FsZSxcbmxvY2FsVGltZXJTZXJ2aWNlLFxubG9jYWxUaW1lclBvbGxJbnRlcnZhbH0pXG57XG5hc3NlcnQobXlBZGRyZXNzTmFtZUFkbWluLCdtaXNzaW5nIG15QWRkcmVzc05hbWVBZG1pbicpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBkYXRlTm93UDtcbmlmKHRpbWVyRGV2aWNlKXtcbmRhdGVOb3dQPW1ha2VUaW1lckRldmljZURhdGVOb3coRCx0aW1lckRldmljZSx0aW1lckRldmljZVNjYWxlKTtcbiB9XG5pZihsb2NhbFRpbWVyU2VydmljZSl7XG5kYXRlTm93UD1tYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyhcbmxvY2FsVGltZXJTZXJ2aWNlLFxubG9jYWxUaW1lclBvbGxJbnRlcnZhbCk7XG5cbiB9XG5cbmNvbnN0IGRhdGVOb3c9YXdhaXQgZGF0ZU5vd1A7XG5jb25zdCB3PW1ha2VXYWxsZXRSb290KHtcbmFnb3JpY05hbWVzLFxubmFtZXNCeUFkZHJlc3MsXG5teUFkZHJlc3NOYW1lQWRtaW4sXG56b2UsXG5ib2FyZCxcbnB1cnNlc1N0YXRlQ2hhbmdlSGFuZGxlcjpwdXJzZXNQdWJsaXNoLFxuaW5ib3hTdGF0ZUNoYW5nZUhhbmRsZXI6aW5ib3hQdWJsaXNoLFxuZGF0ZU5vd30pO1xuXG5jb25zb2xlLmRlYnVnKCd3YWl0aW5nIGZvciB3YWxsZXQgdG8gaW5pdGlhbGl6ZScpO1xuYXdhaXQgdy5pbml0aWFsaXplZDtcbmNvbnNvbGUuZGVidWcoJ3dhbGxldCBpbml0aWFsaXplZCcpO1xud2FsbGV0QWRtaW49dy5hZG1pbjtcbndhbGxldFJvb3Q9dztcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZUJyaWRnZT0oYXBwcm92ZSxkYXBwT3JpZ2luLG1ldGE9e30pPT57XG5hc3luYyBmdW5jdGlvbiptYWtlQXBwcm92ZWROb3RpZmllcihzb3VyY2VOb3RpZmllcil7XG5hd2FpdCBhcHByb3ZlKCk7XG5mb3IgYXdhaXQoY29uc3Qgc3RhdGUgb2Ygc291cmNlTm90aWZpZXIpe1xuYXdhaXQgYXBwcm92ZSgpO1xueWllbGQgc3RhdGU7XG4gfVxuIH1cbmhhcmRlbihtYWtlQXBwcm92ZWROb3RpZmllcik7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJpZGdlPUZhcignYnJpZGdlJyx7XG4gICAgICBhc3luYyBnZXRQdXJzZXNOb3RpZmllcigpe1xuYXdhaXQgYXBwcm92ZSgpO1xuY29uc3QgcHVyc2VzTm90aWZpZXI9d2FsbGV0QWRtaW4uZ2V0QXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyKCk7XG5jb25zdHtub3RpZmllcix1cGRhdGVyfT1tYWtlTm90aWZpZXJLaXQoKTtcbnZvaWQgb2JzZXJ2ZUl0ZXJhdGlvbihtYWtlQXBwcm92ZWROb3RpZmllcihwdXJzZXNOb3RpZmllciksdXBkYXRlcik7XG5yZXR1cm4gbm90aWZpZXI7XG4gfSxcbiAgICAgIGFzeW5jIGdldENhY2hlQ29vcmRpbmF0b3IoKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXREYXBwQ2FjaGVDb29yZGluYXRvcihkYXBwT3JpZ2luKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0SXNzdWVyc05vdGlmaWVyKCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0SXNzdWVyc05vdGlmaWVyKCk7XG4gfSxcbiAgICAgIGFzeW5jIGFkZE9mZmVyKG9mZmVyKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5hZGRPZmZlcihvZmZlcix7Li4ubWV0YSxkYXBwT3JpZ2lufSk7XG4gfSxcbiAgICAgIGFzeW5jIGdldE9mZmVyc05vdGlmaWVyKHN0YXR1cz1udWxsKXtcbmF3YWl0IGFwcHJvdmUoKTtcbmNvbnN0e25vdGlmaWVyLHVwZGF0ZXJ9PW1ha2VOb3RpZmllcktpdChpbmJveFN0YXRlKTtcbmNvbnN0IGZpbHRlcj0ob2ZmZXIpPT5cbihzdGF0dXM9PT1udWxsfHxvZmZlci5zdGF0dXM9PT1zdGF0dXMpJiZcbm9mZmVyLnJlcXVlc3RDb250ZXh0JiZcbm9mZmVyLnJlcXVlc3RDb250ZXh0LmRhcHBPcmlnaW49PT1kYXBwT3JpZ2luO1xuY29uc3QgZmlsdGVyZWRPZmZlcnM9KG9mZmVycyk9PntcbnJldHVybiBvZmZlcnMuZmlsdGVyKGZpbHRlcikubWFwKCh7cmF3SWQsLi4udn0pPT4oe1xuLi4udixcbmlkOnJhd0lkfSkpO1xuXG4gfTtcblxudm9pZCBvYnNlcnZlSXRlcmF0aW9uKG1ha2VBcHByb3ZlZE5vdGlmaWVyKG9mZmVyTm90aWZpZXIpLHtcbnVwZGF0ZVN0YXRlKG9mZmVycyl7XG51cGRhdGVyLnVwZGF0ZVN0YXRlKGZpbHRlcmVkT2ZmZXJzKG9mZmVycykpO1xuIH0sXG5maW5pc2gob2ZmZXJzKXtcbnVwZGF0ZXIuZmluaXNoKGZpbHRlcmVkT2ZmZXJzKG9mZmVycykpO1xuIH0sXG5mYWlsKGUpe1xudXBkYXRlci5mYWlsKGUpO1xuIH19KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH0sXG4gICAgICBhc3luYyBnZXREZXBvc2l0RmFjZXRJZChicmFuZEJvYXJkSWQpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldERlcG9zaXRGYWNldElkKGJyYW5kQm9hcmRJZCk7XG4gfSxcbiAgICAgIGFzeW5jIHN1Z2dlc3RJc3N1ZXIocGV0bmFtZSxib2FyZElkKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5zdWdnZXN0SXNzdWVyKHBldG5hbWUsYm9hcmRJZCxkYXBwT3JpZ2luKTtcbiB9LFxuICAgICAgYXN5bmMgc3VnZ2VzdEluc3RhbGxhdGlvbihwZXRuYW1lLGJvYXJkSWQpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLnN1Z2dlc3RJbnN0YWxsYXRpb24ocGV0bmFtZSxib2FyZElkLGRhcHBPcmlnaW4pO1xuIH0sXG4gICAgICBhc3luYyBzdWdnZXN0SW5zdGFuY2UocGV0bmFtZSxib2FyZElkKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5zdWdnZXN0SW5zdGFuY2UocGV0bmFtZSxib2FyZElkLGRhcHBPcmlnaW4pO1xuIH0sXG4gICAgICBhc3luYyBnZXRVSU5vdGlmaWVyKHJhd0lkKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRVSU5vdGlmaWVyKHJhd0lkLGRhcHBPcmlnaW4pO1xuIH0sXG4gICAgICBhc3luYyBnZXRQdWJsaWNOb3RpZmllcnMocmF3SWQpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldFB1YmxpY05vdGlmaWVycyhyYXdJZCxkYXBwT3JpZ2luKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0Wm9lKCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0Wm9lKCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldEJvYXJkKCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0Qm9hcmQoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0QWdvcmljTmFtZXMoLi4ucGF0aCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0QWdvcmljTmFtZXMoLi4ucGF0aCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldE5hbWVzQnlBZGRyZXNzKC4uLnBhdGgpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldE5hbWVzQnlBZGRyZXNzKC4uLnBhdGgpO1xuIH0sXG4gICAgICBhc3luYyBnZXRCcmFuZFBldG5hbWVzKGJyYW5kcyl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0QnJhbmRQZXRuYW1lcyhicmFuZHMpO1xuIH19KTtcblxucmV0dXJuIGJyaWRnZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVhcHByb3ZlZEJyaWRnZT1GYXIoJ3ByZWFwcHJvdmVkQnJpZGdlJyx7XG4vKlxuXG5cbiAgICAgKi9cbmFkZE9mZmVyKG9mZmVyLG1ldGEpe1xucmV0dXJuIHdhbGxldEFkbWluLmFkZE9mZmVyKG9mZmVyLG1ldGEpO1xuIH0sXG5nZXREZXBvc2l0RmFjZXRJZChicmFuZEJvYXJkSWQpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldERlcG9zaXRGYWNldElkKGJyYW5kQm9hcmRJZCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldE9mZmVyc05vdGlmaWVyKCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0T2ZmZXJzTm90aWZpZXIoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0UHVyc2VzTm90aWZpZXIoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRBdHRlbnVhdGVkUHVyc2VzTm90aWZpZXIoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0SXNzdWVyc05vdGlmaWVyKCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0SXNzdWVyc05vdGlmaWVyKCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldENhY2hlQ29vcmRpbmF0b3IoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRDYWNoZUNvb3JkaW5hdG9yKCk7XG4gfSxcbnN1Z2dlc3RJbnN0YWxsYXRpb24ocGV0bmFtZSxpbnN0YWxsYXRpb25Cb2FyZElkKXtcbnJldHVybiB3YWxsZXRBZG1pbi5zdWdnZXN0SW5zdGFsbGF0aW9uKHBldG5hbWUsaW5zdGFsbGF0aW9uQm9hcmRJZCk7XG4gfSxcbnN1Z2dlc3RJbnN0YW5jZShwZXRuYW1lLGluc3RhbmNlQm9hcmRJZCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uc3VnZ2VzdEluc3RhbmNlKHBldG5hbWUsaW5zdGFuY2VCb2FyZElkKTtcbiB9LFxuc3VnZ2VzdElzc3VlcihwZXRuYW1lLGlzc3VlckJvYXJkSWQpe1xucmV0dXJuIHdhbGxldEFkbWluLnN1Z2dlc3RJc3N1ZXIocGV0bmFtZSxpc3N1ZXJCb2FyZElkKTtcbiB9LFxuZ2V0VUlOb3RpZmllcihyYXdJZCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0VUlOb3RpZmllcihyYXdJZCk7XG4gfSxcbmdldFB1YmxpY05vdGlmaWVycyhyYXdJZCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0UHVibGljTm90aWZpZXJzKHJhd0lkKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0Wm9lKCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0Wm9lKCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldEJvYXJkKCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0Qm9hcmQoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0QWdvcmljTmFtZXMoLi4ucGF0aCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0QWdvcmljTmFtZXMoLi4ucGF0aCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldE5hbWVzQnlBZGRyZXNzKC4uLnBhdGgpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldE5hbWVzQnlBZGRyZXNzKC4uLnBhdGgpO1xuIH0sXG4gICAgICBhc3luYyBnZXRCcmFuZFBldG5hbWVzKGJyYW5kcyl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0QnJhbmRQZXRuYW1lcyhicmFuZHMpO1xuIH19KTtcblxuaGFyZGVuKHByZWFwcHJvdmVkQnJpZGdlKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0V2FsbGV0KGJhbmspe1xuYXdhaXQgd2FsbGV0Um9vdC5pbXBvcnRCYW5rQXNzZXRzKGJhbmspO1xuXG4vKlxuXG4gICAgICovXG5jb25zdCB3YWxsZXQ9RmFyKCd3YWxsZXQnLHtcbmFkZFBheW1lbnQ6d2FsbGV0QWRtaW4uYWRkUGF5bWVudCxcbiAgICAgIGFzeW5jIGdldFNjb3BlZEJyaWRnZShzdWdnZXN0ZWREYXBwUGV0bmFtZSxkYXBwT3JpZ2luKXtcbmNvbnN0IGFwcHJvdmU9YXN5bmMoKT0+e1xuYXdhaXQgd2FsbGV0QWRtaW4ud2FpdEZvckRhcHBBcHByb3ZhbChcbnN1Z2dlc3RlZERhcHBQZXRuYW1lLFxuZGFwcE9yaWdpbik7XG5cbiB9O1xuXG5yZXR1cm4gbWFrZUJyaWRnZShhcHByb3ZlLGRhcHBPcmlnaW4pO1xuIH0sXG4gICAgICBhc3luYyBnZXRCcmlkZ2UoKXtcbnJldHVybiBwcmVhcHByb3ZlZEJyaWRnZTtcbiB9LFxuZ2V0RGVwb3NpdEZhY2V0SWQ6d2FsbGV0QWRtaW4uZ2V0RGVwb3NpdEZhY2V0SWQsXG5nZXRBZG1pbkZhY2V0KCl7XG5yZXR1cm4gRmFyKCdhZG1pbkZhY2V0Jyx7XG4uLi53YWxsZXRBZG1pbixcbi4uLm5vdGlmaWVycyxcbmdldFNjb3BlZEJyaWRnZTp3YWxsZXQuZ2V0U2NvcGVkQnJpZGdlfSk7XG5cbiB9LFxuZ2V0SXNzdWVyOndhbGxldEFkbWluLmdldElzc3VlcixcbmdldElzc3VlcnM6d2FsbGV0QWRtaW4uZ2V0SXNzdWVycyxcbmdldFB1cnNlOndhbGxldEFkbWluLmdldFB1cnNlLFxuZ2V0UHVyc2VzOndhbGxldEFkbWluLmdldFB1cnNlcyxcblxuZ2V0TWFyc2hhbGxlcjp3YWxsZXRBZG1pbi5nZXRNYXJzaGFsbGVyLFxuXG5sb29rdXA6d2FsbGV0QWRtaW4ubG9va3VwfSk7XG5cbnJldHVybiBoYXJkZW4od2FsbGV0KTtcbiB9XG5cbmZ1bmN0aW9uIHNldEhUVFBPYmplY3Qobyl7XG5odHRwPW87XG4gfVxuXG5mdW5jdGlvbiBzdGFydFN1YnNjcmlwdGlvbnMoKXtcbi8vXG4vL1xucHVyc2VzU3Vic2NyaWJlKFxuaGFyZGVuKHtcbm5vdGlmeShtKXtcbnB1cnNlc1N0YXRlPUpTT04ucGFyc2UobSk7XG4gfX0pKTtcblxuXG5cbi8vXG4vL1xuaW5ib3hTdWJzY3JpYmUoXG5oYXJkZW4oe1xubm90aWZ5KG0pe1xuaW5ib3hTdGF0ZT1KU09OLnBhcnNlKG0pO1xuaW5ib3hVcGRhdGVyLnVwZGF0ZVN0YXRlKGluYm94U3RhdGUpO1xuaWYoaHR0cCl7XG4vL1xuZm9yKGNvbnN0IGNoYW5uZWxIYW5kbGUgb2Ygb2ZmZXJTdWJzY3JpcHRpb25zLmtleXMoKSl7XG5wdXNoT2ZmZXJTdWJzY3JpcHRpb25zKGNoYW5uZWxIYW5kbGUsaW5ib3hTdGF0ZSk7XG4gfVxuIH1cbiB9fSkpO1xuXG5cbiB9XG5cbmZ1bmN0aW9uIGdldEJyaWRnZVVSTEhhbmRsZXIoKXtcbnJldHVybiBGYXIoJ2JyaWRnZVVSTEhhbmRsZXInLHtcbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICAgICAgICovXG4gICAgICBhc3luYyBnZXRCb290c3RyYXAob3RoZXJTaWRlLG1ldGEsb2JqKXtcbmNvbnN0e2RhcHBPcmlnaW49bWV0YS5vcmlnaW59PW9iajtcbmNvbnN0IHN1Z2dlc3RlZERhcHBQZXRuYW1lPVN0cmluZyhcbm1ldGEucXVlcnkmJm1ldGEucXVlcnkuc3VnZ2VzdGVkRGFwcFBldG5hbWV8fFxubWV0YS5kYXBwT3JpZ2lufHxcbmRhcHBPcmlnaW4pO1xuXG5cbmNvbnN0IGFwcHJvdmU9YXN5bmMoKT0+e1xubGV0IG5vdFlldEVuYWJsZWQ9ZmFsc2U7XG5hd2FpdCB3YWxsZXRBZG1pbi53YWl0Rm9yRGFwcEFwcHJvdmFsKFxuc3VnZ2VzdGVkRGFwcFBldG5hbWUsXG5kYXBwT3JpZ2luLFxuKCk9Pntcbm5vdFlldEVuYWJsZWQ9dHJ1ZTtcbkUob3RoZXJTaWRlKS5cbm5lZWREYXBwQXBwcm92YWwoZGFwcE9yaWdpbixzdWdnZXN0ZWREYXBwUGV0bmFtZSkuXG5jYXRjaCgoXyk9PnsgfSk7XG4gfSk7XG5cbmlmKG5vdFlldEVuYWJsZWQpe1xuYXdhaXQgRShvdGhlclNpZGUpLmRhcHBBcHByb3ZlZChkYXBwT3JpZ2luKTtcbiB9XG4gfTtcblxucmV0dXJuIG1ha2VCcmlkZ2UoYXBwcm92ZSxkYXBwT3JpZ2luLG1ldGEpO1xuIH0sXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICovXG5nZXRDb21tYW5kSGFuZGxlcigpe1xucmV0dXJuIEZhcignY29tbWFuZEhhbmRsZXInLHtcbm9uT3Blbihfb2JqLG1ldGEpe1xuYnJpZGdlSGFuZGxlcy5hZGQobWV0YS5jaGFubmVsSGFuZGxlKTtcbiB9LFxub25DbG9zZShfb2JqLG1ldGEpe1xuYnJpZGdlSGFuZGxlcy5kZWxldGUobWV0YS5jaGFubmVsSGFuZGxlKTtcbm9mZmVyU3Vic2NyaXB0aW9ucy5kZWxldGUobWV0YS5jaGFubmVsSGFuZGxlKTtcbiB9LFxuXG4gICAgICBhc3luYyBvbk1lc3NhZ2Uob2JqLG1ldGEpe1xuY29uc3R7XG50eXBlLFxuZGFwcE9yaWdpbj1tZXRhLm9yaWdpbixcbnN1Z2dlc3RlZERhcHBQZXRuYW1lPW1ldGEucXVlcnkmJlxubWV0YS5xdWVyeS5zdWdnZXN0ZWREYXBwUGV0bmFtZXx8XG5vYmouZGFwcE9yaWdpbnx8XG5tZXRhLm9yaWdpbn09XG5vYmo7XG5cbi8vXG5sZXQgbmVlZEFwcHJvdmFsPWZhbHNlO1xuYXdhaXQgd2FsbGV0QWRtaW4ud2FpdEZvckRhcHBBcHByb3ZhbChcbnN1Z2dlc3RlZERhcHBQZXRuYW1lLFxuZGFwcE9yaWdpbixcbigpPT57XG5uZWVkQXBwcm92YWw9dHJ1ZTtcbmh0dHBTZW5kKFxue1xudHlwZTond2FsbGV0TmVlZERhcHBBcHByb3ZhbCcsXG5kYXRhOntcbmRhcHBPcmlnaW4sXG5zdWdnZXN0ZWREYXBwUGV0bmFtZX19LFxuXG5cblttZXRhLmNoYW5uZWxIYW5kbGVdKTtcblxuIH0pO1xuXG5pZihuZWVkQXBwcm92YWwpe1xuaHR0cFNlbmQoXG57XG50eXBlOid3YWxsZXRIYXZlRGFwcEFwcHJvdmFsJyxcbmRhdGE6e1xuZGFwcE9yaWdpbn19LFxuXG5cblttZXRhLmNoYW5uZWxIYW5kbGVdKTtcblxuIH1cblxuc3dpdGNoKHR5cGUpe1xuY2FzZSd3YWxsZXRHZXRQdXJzZXMnOntcbnJldHVybntcbnR5cGU6J3dhbGxldFVwZGF0ZVB1cnNlcycsXG5kYXRhOmJpZ2ludFN0cmluZ2lmeShwdXJzZXNTdGF0ZSl9O1xuXG4gfVxuY2FzZSd3YWxsZXRBZGRPZmZlcic6e1xubGV0IGhhbmRsZWQ9ZmFsc2U7XG5jb25zdCBhY3Rpb25zPUZhcignYWN0aW9ucycse1xuaGFuZGxlZChvZmZlcil7XG5pZihoYW5kbGVkKXtcbnJldHVybjtcbiB9XG5oYW5kbGVkPXRydWU7XG5odHRwU2VuZChcbntcbnR5cGU6J3dhbGxldE9mZmVySGFuZGxlZCcsXG5kYXRhOm9mZmVyLmlkfSxcblxuW21ldGEuY2hhbm5lbEhhbmRsZV0pO1xuXG4gfX0pO1xuXG5yZXR1cm57XG50eXBlOid3YWxsZXRPZmZlckFkZGVkJyxcbmRhdGE6YXdhaXQgd2FsbGV0QWRtaW4uYWRkT2ZmZXIoXG57Li4ub2JqLmRhdGEsYWN0aW9uc30sXG57Li4ubWV0YSxkYXBwT3JpZ2lufSl9O1xuXG5cbiB9XG5cbmNhc2Und2FsbGV0U3Vic2NyaWJlT2ZmZXJzJzp7XG5jb25zdHtzdGF0dXM9bnVsbH09b2JqO1xuY29uc3R7Y2hhbm5lbEhhbmRsZX09bWV0YTtcblxuaWYoIWNoYW5uZWxIYW5kbGUpe1xucmV0dXJue1xudHlwZTond2FsbGV0U3Vic2NyaWJlZE9mZmVycycsXG5kYXRhOmZhbHNlfTtcblxuIH1cblxuLy9cbnN1YnNjcmliZVRvT2ZmZXJzKGNoYW5uZWxIYW5kbGUse1xub3JpZ2luOmRhcHBPcmlnaW4sXG5zdGF0dXN9KTtcblxucmV0dXJue1xudHlwZTond2FsbGV0U3Vic2NyaWJlZE9mZmVycycsXG5kYXRhOnRydWV9O1xuXG4gfVxuXG5jYXNlJ3dhbGxldEdldE9mZmVycyc6e1xuY29uc3R7c3RhdHVzPW51bGx9PW9iajtcblxuLy9cbmxldCByZXN1bHQ9YXdhaXQgd2FsbGV0QWRtaW4uZ2V0T2ZmZXJzKHtcbm9yaWdpbjpkYXBwT3JpZ2lufSk7XG5cbmlmKHN0YXR1cyE9PW51bGwpe1xuLy9cbnJlc3VsdD1oYXJkZW4oXG5yZXN1bHQuZmlsdGVyKChvZmZlcik9Pm9mZmVyLnN0YXR1cz09PXN0YXR1cykpO1xuXG4gfVxuXG5yZXR1cm57XG50eXBlOid3YWxsZXRPZmZlckRlc2NyaXB0aW9ucycsXG5kYXRhOnJlc3VsdH07XG5cbiB9XG5cbmNhc2Und2FsbGV0R2V0RGVwb3NpdEZhY2V0SWQnOntcbmNvbnN0e2JyYW5kQm9hcmRJZH09b2JqO1xuY29uc3QgcmVzdWx0PVxuYXdhaXQgd2FsbGV0QWRtaW4uZ2V0RGVwb3NpdEZhY2V0SWQoYnJhbmRCb2FyZElkKTtcbnJldHVybntcbnR5cGU6J3dhbGxldERlcG9zaXRGYWNldElkUmVzcG9uc2UnLFxuZGF0YTpyZXN1bHR9O1xuXG4gfVxuXG5jYXNlJ3dhbGxldFN1Z2dlc3RJc3N1ZXInOntcbmNvbnN0e3BldG5hbWUsYm9hcmRJZH09b2JqO1xuY29uc3QgcmVzdWx0PWF3YWl0IHdhbGxldEFkbWluLnN1Z2dlc3RJc3N1ZXIoXG5wZXRuYW1lLFxuYm9hcmRJZCxcbmRhcHBPcmlnaW4pO1xuXG5yZXR1cm57XG50eXBlOid3YWxsZXRTdWdnZXN0SXNzdWVyUmVzcG9uc2UnLFxuZGF0YTpyZXN1bHR9O1xuXG4gfVxuXG5jYXNlJ3dhbGxldFN1Z2dlc3RJbnN0YW5jZSc6e1xuY29uc3R7cGV0bmFtZSxib2FyZElkfT1vYmo7XG5jb25zdCByZXN1bHQ9YXdhaXQgd2FsbGV0QWRtaW4uc3VnZ2VzdEluc3RhbmNlKFxucGV0bmFtZSxcbmJvYXJkSWQsXG5kYXBwT3JpZ2luKTtcblxucmV0dXJue1xudHlwZTond2FsbGV0U3VnZ2VzdEluc3RhbmNlUmVzcG9uc2UnLFxuZGF0YTpyZXN1bHR9O1xuXG4gfVxuXG5jYXNlJ3dhbGxldFN1Z2dlc3RJbnN0YWxsYXRpb24nOntcbmNvbnN0e3BldG5hbWUsYm9hcmRJZH09b2JqO1xuY29uc3QgcmVzdWx0PWF3YWl0IHdhbGxldEFkbWluLnN1Z2dlc3RJbnN0YWxsYXRpb24oXG5wZXRuYW1lLFxuYm9hcmRJZCxcbmRhcHBPcmlnaW4pO1xuXG5yZXR1cm57XG50eXBlOid3YWxsZXRTdWdnZXN0SW5zdGFsbGF0aW9uUmVzcG9uc2UnLFxuZGF0YTpyZXN1bHR9O1xuXG4gfVxuXG5kZWZhdWx0OlxucmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7fVxuXG4gfX0pO1xuXG4gfX0pO1xuXG4gfVxuXG5zdGFydFN1YnNjcmlwdGlvbnMoKTtcblxuZnVuY3Rpb24gZ2V0Q29tbWFuZEhhbmRsZXIoLi4ucGFyYW1zKXtcbmNvbnNvbGUuZGVidWcoXG4nZ2V0Q29tbWFuZEhhbmRsZXIgY2FsbGVkIGluIHdhbGxldCwgYnV0IGRvZXMgbm90IGV4aXN0JyxcbnBhcmFtcyk7XG5cbiB9XG5cbnJldHVybiBGYXIoJ3Jvb3QnLHtcbnN0YXJ0dXAsXG5nZXRXYWxsZXQsXG5zZXRIVFRQT2JqZWN0LFxuZ2V0QnJpZGdlVVJMSGFuZGxlcixcbmdldENvbW1hbmRIYW5kbGVyfSk7XG5cbiB9XG5cbi8qXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgICAgICAgICBzcGF3bih0ZXJtcyxfaW52aXRlTWFrZXIpe1xuY29uc3Qgd2FsbGV0VmF0PWJ1aWxkUm9vdE9iamVjdCgpO1xucmV0dXJuIHdhbGxldFZhdC5zdGFydHVwKHRlcm1zKS50aGVuKChfKT0+d2FsbGV0VmF0KTtcbiB9JGjigI1fb25jZS5kZWZhdWx0KCAgICAgc3Bhd24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il0sImJ1aWxkUm9vdE9iamVjdCI6WyJidWlsZFJvb3RPYmplY3QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAyg6WLHAYAABwGAAAMwAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy9ub3RpZmllciIsIkBhZ29yaWMvbm90aWZpZXIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAZW5kby9ldmVudHVhbC1zZW5kIl0sImV4cG9ydHMiOlsiZGVmaW5lRVJlY29yZGVyS2l0IiwiZGVmaW5lUmVjb3JkZXJLaXQiLCJwcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzIiwicHJlcGFyZVJlY29yZGVyIiwicHJlcGFyZVJlY29yZGVyS2l0IiwicHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLFN0b3JhZ2VOb2RlU2hhcGUscHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0LG1ha2VGYWtlTWFyc2hhbGxlcixtYWtlRmFrZVN0b3JhZ2UsbXVzdE1hdGNoLE0sbWFrZVNjYWxhckJpZ01hcFN0b3JlLHByZXBhcmVFeG9DbGFzcyxFOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJTdG9yYWdlTm9kZVNoYXBlXCIsIFskaOKAjV9hID0+IChTdG9yYWdlTm9kZVNoYXBlID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdFwiLCBbJGjigI1fYSA9PiAocHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0ID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzXCIsIFtbXCJtYWtlRmFrZU1hcnNoYWxsZXJcIiwgWyRo4oCNX2EgPT4gKG1ha2VGYWtlTWFyc2hhbGxlciA9ICRo4oCNX2EpXV0sW1wibWFrZUZha2VTdG9yYWdlXCIsIFskaOKAjV9hID0+IChtYWtlRmFrZVN0b3JhZ2UgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaOKAjV9hID0+IChtdXN0TWF0Y2ggPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV0sW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyQmlnTWFwU3RvcmUgPSAkaOKAjV9hKV1dLFtcInByZXBhcmVFeG9DbGFzc1wiLCBbJGjigI1fYSA9PiAocHJlcGFyZUV4b0NsYXNzID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZVJlY29yZGVyPShiYWdnYWdlLG1hcnNoYWxsZXIpPT57XG5jb25zdCBtYWtlUmVjb3JkZXI9cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbidSZWNvcmRlcicsXG5NLmludGVyZmFjZSgnUmVjb3JkZXInLHtcbmdldFN0b3JhZ2VOb2RlOk0uY2FsbCgpLnJldHVybnMoU3RvcmFnZU5vZGVTaGFwZSksXG5nZXRTdG9yYWdlUGF0aDpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbndyaXRlOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbndyaXRlRmluYWw6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoTS5wcm9taXNlKCkpfSksXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbihcbnB1Ymxpc2hlcixcbnN0b3JhZ2VOb2RlLFxudmFsdWVTaGFwZT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL00uYW55KCkpPT5cbntcbnJldHVybntcbmNsb3NlZDpmYWxzZSxcbnB1Ymxpc2hlcixcbnN0b3JhZ2VOb2RlLFxuc3RvcmFnZVBhdGg6LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovdW5kZWZpbmVkLFxudmFsdWVTaGFwZX07XG5cbiB9LFxue1xuZ2V0U3RvcmFnZU5vZGUoKXtcbnJldHVybiB0aGlzLnN0YXRlLnN0b3JhZ2VOb2RlO1xuIH0sXG4vKlxuXG5cblxuICAgICAgICovXG4gICAgICBhc3luYyBnZXRTdG9yYWdlUGF0aCgpe1xuY29uc3R7c3RvcmFnZVBhdGg6aGVsZFBhdGh9PXRoaXMuc3RhdGU7XG4vL1xuYXdhaXQgbnVsbDtcbmlmKGhlbGRQYXRoIT09dW5kZWZpbmVkKXtcbnJldHVybiBoZWxkUGF0aDtcbiB9XG5jb25zdCBwYXRoPWF3YWl0IEUodGhpcy5zdGF0ZS5zdG9yYWdlTm9kZSkuZ2V0UGF0aCgpO1xudGhpcy5zdGF0ZS5zdG9yYWdlUGF0aD1wYXRoO1xucmV0dXJuIHBhdGg7XG4gfSxcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgd3JpdGUodmFsdWUpe1xuY29uc3R7Y2xvc2VkLHB1Ymxpc2hlcixzdG9yYWdlTm9kZSx2YWx1ZVNoYXBlfT10aGlzLnN0YXRlO1xuIWNsb3NlZHx8RmFpbCBgY2Fubm90IHdyaXRlIHRvIGNsb3NlZCByZWNvcmRlcmA7XG5tdXN0TWF0Y2godmFsdWUsdmFsdWVTaGFwZSk7XG5jb25zdCBlbmNvZGVkPWF3YWl0IEUobWFyc2hhbGxlcikudG9DYXBEYXRhKHZhbHVlKTtcbmNvbnN0IHNlcmlhbGl6ZWQ9SlNPTi5zdHJpbmdpZnkoZW5jb2RlZCk7XG5hd2FpdCBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShzZXJpYWxpemVkKTtcblxuLy9cbnJldHVybiBwdWJsaXNoZXIucHVibGlzaCh2YWx1ZSk7XG4gfSxcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgd3JpdGVGaW5hbCh2YWx1ZSl7XG5jb25zdHtjbG9zZWQscHVibGlzaGVyLHN0b3JhZ2VOb2RlLHZhbHVlU2hhcGV9PXRoaXMuc3RhdGU7XG4hY2xvc2VkfHxGYWlsIGBjYW5ub3Qgd3JpdGUgdG8gY2xvc2VkIHJlY29yZGVyYDtcbm11c3RNYXRjaCh2YWx1ZSx2YWx1ZVNoYXBlKTtcbmNvbnN0IGVuY29kZWQ9YXdhaXQgRShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuY29uc3Qgc2VyaWFsaXplZD1KU09OLnN0cmluZ2lmeShlbmNvZGVkKTtcbmF3YWl0IEUoc3RvcmFnZU5vZGUpLnNldFZhbHVlKHNlcmlhbGl6ZWQpO1xuXG4vL1xudGhpcy5zdGF0ZS5jbG9zZWQ9dHJ1ZTtcbnJldHVybiBwdWJsaXNoZXIuZmluaXNoKHZhbHVlKTtcbiB9fSk7XG5cblxuXG5yZXR1cm4gbWFrZVJlY29yZGVyO1xuIH07JGjigI1fb25jZS5wcmVwYXJlUmVjb3JkZXIocHJlcGFyZVJlY29yZGVyKTtcbmhhcmRlbihwcmVwYXJlUmVjb3JkZXIpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZpbmVSZWNvcmRlcktpdD0oe21ha2VSZWNvcmRlcixtYWtlRHVyYWJsZVB1Ymxpc2hLaXR9KT0+e1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VSZWNvcmRlcktpdD0oc3RvcmFnZU5vZGUsdmFsdWVTaGFwZSk9PntcbmNvbnN0e3N1YnNjcmliZXIscHVibGlzaGVyfT1tYWtlRHVyYWJsZVB1Ymxpc2hLaXQoKTtcbmNvbnN0IHJlY29yZGVyPW1ha2VSZWNvcmRlcihcbnB1Ymxpc2hlcixcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5zdG9yYWdlTm9kZSxcblxudmFsdWVTaGFwZSk7XG5cbnJldHVybiBoYXJkZW4oe3N1YnNjcmliZXIscmVjb3JkZXJ9KTtcbiB9O1xucmV0dXJuIG1ha2VSZWNvcmRlcktpdDtcbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuZGVmaW5lUmVjb3JkZXJLaXQoZGVmaW5lUmVjb3JkZXJLaXQpO1xuY29uc3QgICAgICAgIGRlZmluZUVSZWNvcmRlcktpdD0oe21ha2VSZWNvcmRlcixtYWtlRHVyYWJsZVB1Ymxpc2hLaXR9KT0+e1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VFUmVjb3JkZXJLaXQ9KHN0b3JhZ2VOb2RlUCx2YWx1ZVNoYXBlKT0+e1xuY29uc3R7cHVibGlzaGVyLHN1YnNjcmliZXJ9PW1ha2VEdXJhYmxlUHVibGlzaEtpdCgpO1xuY29uc3QgcmVjb3JkZXJQPUUud2hlbihzdG9yYWdlTm9kZVAsKHN0b3JhZ2VOb2RlKT0+XG5tYWtlUmVjb3JkZXIoXG5wdWJsaXNoZXIsXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9zdG9yYWdlTm9kZSxcbnZhbHVlU2hhcGUpKTtcblxuXG5yZXR1cm57c3Vic2NyaWJlcixyZWNvcmRlclB9O1xuIH07XG5yZXR1cm4gbWFrZUVSZWNvcmRlcktpdDtcbiB9OyRo4oCNX29uY2UuZGVmaW5lRVJlY29yZGVyS2l0KGRlZmluZUVSZWNvcmRlcktpdCk7XG5oYXJkZW4oZGVmaW5lRVJlY29yZGVyS2l0KTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUmVjb3JkZXJLaXQ9KGJhZ2dhZ2UsbWFyc2hhbGxlcik9PntcbmNvbnN0IG1ha2VEdXJhYmxlUHVibGlzaEtpdD1wcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQoXG5iYWdnYWdlLFxuJ0R1cmFibGUgUHVibGlzaCBLaXQnKTtcblxuY29uc3QgbWFrZVJlY29yZGVyPXByZXBhcmVSZWNvcmRlcihiYWdnYWdlLG1hcnNoYWxsZXIpO1xucmV0dXJuIGRlZmluZVJlY29yZGVyS2l0KHttYWtlRHVyYWJsZVB1Ymxpc2hLaXQsbWFrZVJlY29yZGVyfSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UucHJlcGFyZVJlY29yZGVyS2l0KHByZXBhcmVSZWNvcmRlcktpdCk7XG5jb25zdCAgICAgICAgcHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzPShiYWdnYWdlLG1hcnNoYWxsZXIpPT57XG5jb25zdCBtYWtlRHVyYWJsZVB1Ymxpc2hLaXQ9cHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KFxuYmFnZ2FnZSxcbidEdXJhYmxlIFB1Ymxpc2ggS2l0Jyk7XG5cbmNvbnN0IG1ha2VSZWNvcmRlcj1wcmVwYXJlUmVjb3JkZXIoYmFnZ2FnZSxtYXJzaGFsbGVyKTtcblxuY29uc3QgbWFrZVJlY29yZGVyS2l0PWRlZmluZVJlY29yZGVyS2l0KHtcbm1ha2VSZWNvcmRlcixcbm1ha2VEdXJhYmxlUHVibGlzaEtpdH0pO1xuXG5jb25zdCBtYWtlRVJlY29yZGVyS2l0PWRlZmluZUVSZWNvcmRlcktpdCh7XG5tYWtlUmVjb3JkZXIsXG5tYWtlRHVyYWJsZVB1Ymxpc2hLaXR9KTtcblxuXG5yZXR1cm57XG5tYWtlRHVyYWJsZVB1Ymxpc2hLaXQsXG5tYWtlUmVjb3JkZXIsXG5tYWtlUmVjb3JkZXJLaXQsXG5tYWtlRVJlY29yZGVyS2l0fTtcblxuIH07XG5cbi8qXG5cbiAqLyRo4oCNX29uY2UucHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzKHByZXBhcmVSZWNvcmRlcktpdE1ha2Vycyk7XG5jb25zdCAgICAgICAgcHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2Vycz0oKT0+e1xuY29uc3QgYmFnZ2FnZT1tYWtlU2NhbGFyQmlnTWFwU3RvcmUoJ21vY2sgcmVjb3JkZXIgYmFnZ2FnZScpO1xuY29uc3QgbWFyc2hhbGxlcj1tYWtlRmFrZU1hcnNoYWxsZXIoKTtcbnJldHVybntcbi4uLnByZXBhcmVSZWNvcmRlcktpdE1ha2VycyhiYWdnYWdlLG1hcnNoYWxsZXIpLFxuc3RvcmFnZU5vZGU6bWFrZUZha2VTdG9yYWdlKCdtb2NrIHJlY29yZGVyIHN0b3JhZ2UnKX07XG5cbiB9OyRo4oCNX29uY2UucHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2VycyhwcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVSZWNvcmRlciI6WyJwcmVwYXJlUmVjb3JkZXIiXSwiZGVmaW5lUmVjb3JkZXJLaXQiOlsiZGVmaW5lUmVjb3JkZXJLaXQiXSwiZGVmaW5lRVJlY29yZGVyS2l0IjpbImRlZmluZUVSZWNvcmRlcktpdCJdLCJwcmVwYXJlUmVjb3JkZXJLaXQiOlsicHJlcGFyZVJlY29yZGVyS2l0Il0sInByZXBhcmVSZWNvcmRlcktpdE1ha2VycyI6WyJwcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnMiXSwicHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2VycyI6WyJwcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOmzy3yNAQAAjQEAAB4AAABAYWdvcmljL3pvbmUtdjAuMi4yL2R1cmFibGUuanN7ImltcG9ydHMiOlsiLi9zcmMvZHVyYWJsZS5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vc3JjL2R1cmFibGUuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9zcmMvZHVyYWJsZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABqsCUuMhEAADIRAAAiAAAAQGFnb3JpYy96b25lLXYwLjIuMi9zcmMvZHVyYWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBhZ29yaWMvYmFzZS16b25lIl0sImV4cG9ydHMiOlsibWFrZUR1cmFibGVab25lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEZhcixpc1Bhc3NhYmxlLGNhbkJlRHVyYWJsZSxtYWtlU2NhbGFyTWFwU3RvcmUscHJlcGFyZUV4byxwcmVwYXJlRXhvQ2xhc3MscHJlcGFyZUV4b0NsYXNzS2l0LHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUscHJvdmlkZUR1cmFibGVTZXRTdG9yZSxwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSxwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSx3YXRjaFByb21pc2Usa2V5cyxtYWtlT25jZUtpdDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dLFtcImlzUGFzc2FibGVcIiwgWyRo4oCNX2EgPT4gKGlzUGFzc2FibGUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wiY2FuQmVEdXJhYmxlXCIsIFskaOKAjV9hID0+IChjYW5CZUR1cmFibGUgPSAkaOKAjV9hKV1dLFtcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjigI1fYSA9PiAobWFrZVNjYWxhck1hcFN0b3JlID0gJGjigI1fYSldXSxbXCJwcmVwYXJlRXhvXCIsIFskaOKAjV9hID0+IChwcmVwYXJlRXhvID0gJGjigI1fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NcIiwgWyRo4oCNX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRo4oCNX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaOKAjV9hID0+IChwcmVwYXJlRXhvQ2xhc3NLaXQgPSAkaOKAjV9hKV1dLFtcInByb3ZpZGVEdXJhYmxlTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUgPSAkaOKAjV9hKV1dLFtcInByb3ZpZGVEdXJhYmxlU2V0U3RvcmVcIiwgWyRo4oCNX2EgPT4gKHByb3ZpZGVEdXJhYmxlU2V0U3RvcmUgPSAkaOKAjV9hKV1dLFtcInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlXCIsIFskaOKAjV9hID0+IChwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSA9ICRo4oCNX2EpXV0sW1wicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmVcIiwgWyRo4oCNX2EgPT4gKHByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlID0gJGjigI1fYSldXSxbXCJ3YXRjaFByb21pc2VcIiwgWyRo4oCNX2EgPT4gKHdhdGNoUHJvbWlzZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2Jhc2Utem9uZVwiLCBbW1wiYWdvcmljVmF0RGF0YUtleXNcIiwgWyRo4oCNX2EgPT4gKGtleXMgPSAkaOKAjV9hKV1dLFtcIm1ha2VPbmNlS2l0XCIsIFskaOKAjV9hID0+IChtYWtlT25jZUtpdCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgaXNTdG9yYWJsZT0oc3BlY2ltZW4pPT5pc1Bhc3NhYmxlKHNwZWNpbWVuKSYmY2FuQmVEdXJhYmxlKHNwZWNpbWVuKTtcbmhhcmRlbihpc1N0b3JhYmxlKTtcblxuLypcblxuICovXG5jb25zdCBhdHRhY2hEdXJhYmxlU3RvcmVzPShnZXRCYWdnYWdlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWFwU3RvcmU9KGxhYmVsLG9wdGlvbnMpPT57XG5jb25zdCBiYWdnYWdlPWdldEJhZ2dhZ2UoKTtcbmNvbnN0IHJldD1wcm92aWRlRHVyYWJsZU1hcFN0b3JlKGJhZ2dhZ2UsbGFiZWwsb3B0aW9ucyk7XG5yZXR1cm4gcmV0O1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzZXRTdG9yZT0obGFiZWwsb3B0aW9ucyk9PlxucHJvdmlkZUR1cmFibGVTZXRTdG9yZShnZXRCYWdnYWdlKCksbGFiZWwsb3B0aW9ucyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd2Vha1NldFN0b3JlPShsYWJlbCxvcHRpb25zKT0+XG5wcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZShnZXRCYWdnYWdlKCksbGFiZWwsb3B0aW9ucyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd2Vha01hcFN0b3JlPShsYWJlbCxvcHRpb25zKT0+XG5wcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZShnZXRCYWdnYWdlKCksbGFiZWwsb3B0aW9ucyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucmV0dXJuIEZhcignZHVyYWJsZVN0b3Jlcycse1xuLy9cbmRldGFjaGVkOigpPT5kZXRhY2hlZER1cmFibGVTdG9yZXMsXG5pc1N0b3JhYmxlLFxubWFwU3RvcmUsXG5zZXRTdG9yZSxcbndlYWtNYXBTdG9yZSxcbndlYWtTZXRTdG9yZX0pO1xuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZXRhY2hlZER1cmFibGVTdG9yZXM9YXR0YWNoRHVyYWJsZVN0b3JlcygoKT0+XG5tYWtlU2NhbGFyTWFwU3RvcmUoJ2RldGFjaGVkJykpO1xuXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUR1cmFibGVab25lPShiYWdnYWdlLGJhc2VMYWJlbD0nZHVyYWJsZVpvbmUnKT0+e1xuYmFnZ2FnZXx8RmFpbCBgYmFnZ2FnZSByZXF1aXJlZGA7XG5cbmNvbnN0IGF0dGFjaGVkU3RvcmVzPWF0dGFjaER1cmFibGVTdG9yZXMoKCk9PmJhZ2dhZ2UpO1xuXG5jb25zdHttYWtlT25jZSx3cmFwUHJvdmlkZXJ9PW1ha2VPbmNlS2l0KFxuYmFzZUxhYmVsLFxuYXR0YWNoZWRTdG9yZXMsXG5iYWdnYWdlKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBleG9DbGFzcz0oLi4uYXJncyk9PnByZXBhcmVFeG9DbGFzcyhiYWdnYWdlLC4uLmFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8vXG5jb25zdCBleG9DbGFzc0tpdD0oLi4uYXJncyk9PnByZXBhcmVFeG9DbGFzc0tpdChiYWdnYWdlLC4uLmFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGV4bz0oLi4uYXJncyk9PnByZXBhcmVFeG8oYmFnZ2FnZSwuLi5hcmdzKTtcblxuY29uc3Qgc3ViWm9uZVN0b3JlPXdyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy5tYXBTdG9yZSxrZXlzLnpvbmUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN1YlpvbmU9KGxhYmVsLG9wdGlvbnM9e30pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3ViQmFnZ2FnZT1zdWJab25lU3RvcmUobGFiZWwsb3B0aW9ucyk7XG5yZXR1cm4gbWFrZUR1cmFibGVab25lKHN1YkJhZ2dhZ2UsIGAke2Jhc2VMYWJlbH0uJHtsYWJlbH1gKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCdkdXJhYmxlWm9uZScse1xuZXhvOndyYXBQcm92aWRlcihleG8sa2V5cy5leG8pLFxuZXhvQ2xhc3M6d3JhcFByb3ZpZGVyKGV4b0NsYXNzLGtleXMuZXhvQ2xhc3MpLFxuZXhvQ2xhc3NLaXQ6d3JhcFByb3ZpZGVyKGV4b0NsYXNzS2l0LGtleXMuZXhvQ2xhc3NLaXQpLFxuc3ViWm9uZSxcblxubWFrZU9uY2UsXG53YXRjaFByb21pc2UsXG5kZXRhY2hlZDphdHRhY2hlZFN0b3Jlcy5kZXRhY2hlZCxcbmlzU3RvcmFibGU6YXR0YWNoZWRTdG9yZXMuaXNTdG9yYWJsZSxcblxubWFwU3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLm1hcFN0b3JlLGtleXMuc3RvcmUpLFxuc2V0U3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLnNldFN0b3JlLGtleXMuc3RvcmUpLFxud2Vha01hcFN0b3JlOndyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy53ZWFrTWFwU3RvcmUsa2V5cy5zdG9yZSksXG53ZWFrU2V0U3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLndlYWtTZXRTdG9yZSxrZXlzLnN0b3JlKX0pO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VEdXJhYmxlWm9uZShtYWtlRHVyYWJsZVpvbmUpO1xuaGFyZGVuKG1ha2VEdXJhYmxlWm9uZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRHVyYWJsZVpvbmUiOlsibWFrZUR1cmFibGVab25lIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADSQ5KbTBAAA0wQAACsAAABAZW5kby9jb21tb24tdjEuMi41L2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9wcm9taXNlLWtpdCIsIi4vdGhyb3ctbGFiZWxlZC5qcyJdLCJleHBvcnRzIjpbImFwcGx5TGFiZWxpbmdFcnJvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxpc1Byb21pc2UsdGhyb3dMYWJlbGVkOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjigI1fYSA9PiAoaXNQcm9taXNlID0gJGjigI1fYSldXV1dLFtcIi4vdGhyb3ctbGFiZWxlZC5qc1wiLCBbW1widGhyb3dMYWJlbGVkXCIsIFskaOKAjV9hID0+ICh0aHJvd0xhYmVsZWQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFwcGx5TGFiZWxpbmdFcnJvcj0oZnVuYyxhcmdzLGxhYmVsPXVuZGVmaW5lZCk9PntcbmlmKGxhYmVsPT09dW5kZWZpbmVkKXtcbnJldHVybiBmdW5jKC4uLmFyZ3MpO1xuIH1cbmxldCByZXN1bHQ7XG50cnl7XG5yZXN1bHQ9ZnVuYyguLi5hcmdzKTtcbiB9Y2F0Y2goZXJyKXtcbnRocm93TGFiZWxlZChlcnIsbGFiZWwpO1xuIH1cbmlmKGlzUHJvbWlzZShyZXN1bHQpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBFLndoZW4ocmVzdWx0LHVuZGVmaW5lZCwocmVhc29uKT0+dGhyb3dMYWJlbGVkKHJlYXNvbixsYWJlbCkpO1xuIH1lbHNle1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfTskaOKAjV9vbmNlLmFwcGx5TGFiZWxpbmdFcnJvcihhcHBseUxhYmVsaW5nRXJyb3IpO1xuaGFyZGVuKGFwcGx5TGFiZWxpbmdFcnJvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhcHBseUxhYmVsaW5nRXJyb3IiOlsiYXBwbHlMYWJlbGluZ0Vycm9yIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALeZC8BmBAAAZgQAACoAAABAZW5kby9jb21tb24tdjEuMi41L2Zyb20tdW5pcXVlLWVudHJpZXMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiZnJvbVVuaXF1ZUVudHJpZXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGZyb21VbmlxdWVFbnRyaWVzPShhbGxFbnRyaWVzKT0+e1xuY29uc3QgZW50cmllc0FycmF5PVsuLi5hbGxFbnRyaWVzXTtcbmNvbnN0IHJlc3VsdD1oYXJkZW4oZnJvbUVudHJpZXMoZW50cmllc0FycmF5KSk7XG5pZihvd25LZXlzKHJlc3VsdCkubGVuZ3RoPT09ZW50cmllc0FycmF5Lmxlbmd0aCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNvbnN0IG5hbWVzPW5ldyBTZXQoKTtcbmZvcihjb25zdFtuYW1lLF9db2YgZW50cmllc0FycmF5KXtcbmlmKG5hbWVzLmhhcyhuYW1lKSl7XG5GYWlsIGBjb2xsaXNpb24gb24gcHJvcGVydHkgbmFtZSAke3EobmFtZSl9OiAke2VudHJpZXNBcnJheX1gO1xuIH1cbm5hbWVzLmFkZChuYW1lKTtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogZmFpbGVkIHRvIGNyZWF0ZSBvYmplY3QgZnJvbSB1bmlxdWUgZW50cmllc2A7XG4gfTskaOKAjV9vbmNlLmZyb21VbmlxdWVFbnRyaWVzKGZyb21VbmlxdWVFbnRyaWVzKTtcbmhhcmRlbihmcm9tVW5pcXVlRW50cmllcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJmcm9tVW5pcXVlRW50cmllcyI6WyJmcm9tVW5pcXVlRW50cmllcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAKb9UrPQIAAD0CAAAkAAAAQGVuZG8vY29tbW9uLXYxLjIuNS9pZGVudC1jaGVja2VyLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJpZGVudENoZWNrZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLy9cbi8vXG4vL1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlkZW50Q2hlY2tlcj0oY29uZCxfZGV0YWlscyk9PmNvbmQ7JGjigI1fb25jZS5pZGVudENoZWNrZXIoaWRlbnRDaGVja2VyKTtcbmhhcmRlbihpZGVudENoZWNrZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaWRlbnRDaGVja2VyIjpbImlkZW50Q2hlY2tlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC7Q+YXfgIAAH4CAAAmAAAAQGVuZG8vY29tbW9uLXYxLjIuNS9saXN0LWRpZmZlcmVuY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImxpc3REaWZmZXJlbmNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBsaXN0RGlmZmVyZW5jZT0obGVmdExpc3QscmlnaHRMaXN0KT0+e1xuY29uc3QgcmlnaHRTZXQ9bmV3IFNldChyaWdodExpc3QpO1xucmV0dXJuIGxlZnRMaXN0LmZpbHRlcigoZWxlbWVudCk9PiFyaWdodFNldC5oYXMoZWxlbWVudCkpO1xuIH07JGjigI1fb25jZS5saXN0RGlmZmVyZW5jZShsaXN0RGlmZmVyZW5jZSk7XG5oYXJkZW4obGlzdERpZmZlcmVuY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibGlzdERpZmZlcmVuY2UiOlsibGlzdERpZmZlcmVuY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA8CgiO2UDAABlAwAAKgAAAEBlbmRvL2NvbW1vbi12MS4yLjUvbWFrZS1hcnJheS1pdGVyYXRvci5qc3siaW1wb3J0cyI6WyIuL21ha2UtaXRlcmF0b3IuanMiXSwiZXhwb3J0cyI6WyJtYWtlQXJyYXlJdGVyYXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZUl0ZXJhdG9yOyRo4oCNX2ltcG9ydHMoW1tcIi4vbWFrZS1pdGVyYXRvci5qc1wiLCBbW1wibWFrZUl0ZXJhdG9yXCIsIFskaOKAjV9hID0+IChtYWtlSXRlcmF0b3IgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQXJyYXlJdGVyYXRvcj0oYXJyKT0+e1xuY29uc3R7bGVuZ3RofT1hcnI7XG5sZXQgaT0wO1xucmV0dXJuIG1ha2VJdGVyYXRvcigoKT0+e1xuLyogICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoaTxsZW5ndGgpe1xudmFsdWU9YXJyW2ldO1xuaSs9MTtcbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWV9KTtcbiB9XG4vL1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlfSk7XG4gfSk7XG4gfTskaOKAjV9vbmNlLm1ha2VBcnJheUl0ZXJhdG9yKG1ha2VBcnJheUl0ZXJhdG9yKTtcbmhhcmRlbihtYWtlQXJyYXlJdGVyYXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlQXJyYXlJdGVyYXRvciI6WyJtYWtlQXJyYXlJdGVyYXRvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADjetlKPwIAAD8CAAAkAAAAQGVuZG8vY29tbW9uLXYxLjIuNS9tYWtlLWl0ZXJhdG9yLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlSXRlcmF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSXRlcmF0b3I9KG5leHQpPT57XG5jb25zdCBpdGVyPWhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+aXRlcixcbm5leHR9KTtcblxucmV0dXJuIGl0ZXI7XG4gfTskaOKAjV9vbmNlLm1ha2VJdGVyYXRvcihtYWtlSXRlcmF0b3IpO1xuaGFyZGVuKG1ha2VJdGVyYXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlSXRlcmF0b3IiOlsibWFrZUl0ZXJhdG9yIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKliUIoIAwAACAMAACEAAABAZW5kby9jb21tb24tdjEuMi41L29iamVjdC1tYXAuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm9iamVjdE1hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICBjb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG9iamVjdE1hcD0ob3JpZ2luYWwsbWFwRm4pPT57XG5jb25zdCBlbnRzPWVudHJpZXMob3JpZ2luYWwpO1xuY29uc3QgbWFwRW50cz1lbnRzLm1hcChcbihbayx2XSk9Pi8qICAgICAgICAgICAgICAgICAgICAgICAqL1trLG1hcEZuKHYsayldKTtcblxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9oYXJkZW4oZnJvbUVudHJpZXMobWFwRW50cykpKTtcbiB9OyRo4oCNX29uY2Uub2JqZWN0TWFwKG9iamVjdE1hcCk7XG5oYXJkZW4ob2JqZWN0TWFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im9iamVjdE1hcCI6WyJvYmplY3RNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA4XMrTOcDAADnAwAAJgAAAEBlbmRvL2NvbW1vbi12MS4yLjUvb2JqZWN0LW1ldGEtbWFwLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJvYmplY3RNZXRhTWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIGNvbnN0e2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMsY3JlYXRlLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG9iamVjdE1ldGFNYXA9KFxub3JpZ2luYWwsXG5tZXRhTWFwRm4sXG5wcm90bz1PYmplY3QucHJvdG90eXBlKT0+XG57XG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9yaWdpbmFsKTtcbmNvbnN0IGtleXM9b3duS2V5cyhvcmlnaW5hbCk7XG5cbmNvbnN0IGRlc2NFbnRyaWVzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmtleXMuXG5tYXAoKGtleSk9PltrZXksbWV0YU1hcEZuKGRlc2NzW2tleV0sa2V5KV0pLlxuZmlsdGVyKChbX2tleSxvcHREZXNjXSk9Pm9wdERlc2MhPT11bmRlZmluZWQpO1xuXG5yZXR1cm4gaGFyZGVuKGNyZWF0ZShwcm90byxmcm9tRW50cmllcyhkZXNjRW50cmllcykpKTtcbiB9OyRo4oCNX29uY2Uub2JqZWN0TWV0YU1hcChvYmplY3RNZXRhTWFwKTtcbmhhcmRlbihvYmplY3RNZXRhTWFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im9iamVjdE1ldGFNYXAiOlsib2JqZWN0TWV0YU1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADtPiOx7QMAAO0DAAAkAAAAQGVuZG8vY29tbW9uLXYxLjIuNS90aHJvdy1sYWJlbGVkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbInRocm93TGFiZWxlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjigI1fYSA9PiAobWFrZUVycm9yID0gJGjigI1fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaOKAjV9hID0+IChhbm5vdGF0ZUVycm9yID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB0aHJvd0xhYmVsZWQ9KFxuaW5uZXJFcnIsXG5sYWJlbCxcbmVyckNvbnN0cnVjdG9yPXVuZGVmaW5lZCxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG57XG5pZih0eXBlb2YgbGFiZWw9PT0nbnVtYmVyJyl7XG5sYWJlbD0gYFske2xhYmVsfV1gO1xuIH1cbmNvbnN0IG91dGVyRXJyPW1ha2VFcnJvcihcbiBgJHtsYWJlbH06ICR7aW5uZXJFcnIubWVzc2FnZX1gLFxuZXJyQ29uc3RydWN0b3IsXG5vcHRpb25zKTtcblxuYW5ub3RhdGVFcnJvcihvdXRlckVycixYIGBDYXVzZWQgYnkgJHtpbm5lckVycn1gKTtcbnRocm93IG91dGVyRXJyO1xuIH07JGjigI1fb25jZS50aHJvd0xhYmVsZWQodGhyb3dMYWJlbGVkKTtcbmhhcmRlbih0aHJvd0xhYmVsZWQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidGhyb3dMYWJlbGVkIjpbInRocm93TGFiZWxlZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABUnPw8mQEAAJkBAAAhAAAAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2Vudi1vcHRpb25zLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZW52LW9wdGlvbnMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9zcmMvZW52LW9wdGlvbnMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAATeP7/PUNAAD1DQAAKwAAAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNi9zcmMvZW52LW9wdGlvbnMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiLCJnZXRFbnZpcm9ubWVudE9wdGlvbiIsImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiLCJtYWtlRW52aXJvbm1lbnRDYXB0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLyogICAgICAgICAgICAgICAgICAgKi9cbi8vXG5cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5cbmNvbnN0e2ZyZWV6ZX09T2JqZWN0O1xuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5cbi8vXG4vL1xuY29uc3QgdW5jdXJyeVRoaXM9XG4oZm4pPT5cbihyZWNlaXZlciwuLi5hcmdzKT0+XG5hcHBseShmbixyZWNlaXZlcixhcmdzKTtcbmNvbnN0IGFycmF5UHVzaD11bmN1cnJ5VGhpcyhBcnJheS5wcm90b3R5cGUucHVzaCk7XG5jb25zdCBhcnJheUluY2x1ZGVzPXVuY3VycnlUaGlzKEFycmF5LnByb3RvdHlwZS5pbmNsdWRlcyk7XG5jb25zdCBzdHJpbmdTcGxpdD11bmN1cnJ5VGhpcyhTdHJpbmcucHJvdG90eXBlLnNwbGl0KTtcblxuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuY29uc3QgRmFpbD0obGl0ZXJhbHMsLi4uYXJncyk9PntcbmxldCBtc2c9bGl0ZXJhbHNbMF07XG5mb3IobGV0IGk9MDtpPGFyZ3MubGVuZ3RoO2krPTEpe1xubXNnPSBgJHttc2d9JHthcmdzW2ldfSR7bGl0ZXJhbHNbaSsxXX1gO1xuIH1cbnRocm93IEVycm9yKG1zZyk7XG4gfTtcblxuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbnZpcm9ubWVudENhcHRvcj0oYUdsb2JhbCxkcm9wTmFtZXM9ZmFsc2UpPT57XG5jb25zdCBjYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXM9W107XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGdldEVudmlyb25tZW50T3B0aW9uPShcbm9wdGlvbk5hbWUsXG5kZWZhdWx0U2V0dGluZyxcbm9wdE90aGVyVmFsdWVzPXVuZGVmaW5lZCk9Plxue1xudHlwZW9mIG9wdGlvbk5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gbmFtZSAke3Eob3B0aW9uTmFtZSl9IG11c3QgYmUgYSBzdHJpbmcuYDtcbnR5cGVvZiBkZWZhdWx0U2V0dGluZz09PSdzdHJpbmcnfHxcbkZhaWwgYEVudmlyb25tZW50IG9wdGlvbiBkZWZhdWx0IHNldHRpbmcgJHtxKFxuZGVmYXVsdFNldHRpbmcpXG4gfSBtdXN0IGJlIGEgc3RyaW5nLmA7XG5cbi8qICAgICAgICAgICAgICAgICAqL1xubGV0IHNldHRpbmc9ZGVmYXVsdFNldHRpbmc7XG5jb25zdCBnbG9iYWxQcm9jZXNzPWFHbG9iYWwucHJvY2Vzc3x8dW5kZWZpbmVkO1xuY29uc3QgZ2xvYmFsRW52PVxudHlwZW9mIGdsb2JhbFByb2Nlc3M9PT0nb2JqZWN0JyYmZ2xvYmFsUHJvY2Vzcy5lbnZ8fHVuZGVmaW5lZDtcbmlmKHR5cGVvZiBnbG9iYWxFbnY9PT0nb2JqZWN0Jyl7XG5pZihvcHRpb25OYW1lIGluIGdsb2JhbEVudil7XG5pZighZHJvcE5hbWVzKXtcbmFycmF5UHVzaChjYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXMsb3B0aW9uTmFtZSk7XG4gfVxuY29uc3Qgb3B0aW9uVmFsdWU9Z2xvYmFsRW52W29wdGlvbk5hbWVdO1xuLy9cbnR5cGVvZiBvcHRpb25WYWx1ZT09PSdzdHJpbmcnfHxcbkZhaWwgYEVudmlyb25tZW50IG9wdGlvbiBuYW1lZCAke3EoXG5vcHRpb25OYW1lKVxuIH0sIGlmIHByZXNlbnQsIG11c3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgc3RyaW5nIHZhbHVlLCBnb3QgJHtxKFxub3B0aW9uVmFsdWUpXG4gfWA7XG5zZXR0aW5nPW9wdGlvblZhbHVlO1xuIH1cbiB9XG5vcHRPdGhlclZhbHVlcz09PXVuZGVmaW5lZHx8XG5zZXR0aW5nPT09ZGVmYXVsdFNldHRpbmd8fFxuYXJyYXlJbmNsdWRlcyhvcHRPdGhlclZhbHVlcyxzZXR0aW5nKXx8XG5GYWlsIGBVbnJlY29nbml6ZWQgJHtxKG9wdGlvbk5hbWUpfSB2YWx1ZSAke3EoXG5zZXR0aW5nKVxuIH0uIEV4cGVjdGVkIG9uZSBvZiAke3EoW2RlZmF1bHRTZXR0aW5nLC4uLm9wdE90aGVyVmFsdWVzXSl9YDtcbnJldHVybiBzZXR0aW5nO1xuIH07XG5mcmVlemUoZ2V0RW52aXJvbm1lbnRPcHRpb24pO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0PShvcHRpb25OYW1lKT0+e1xuY29uc3Qgb3B0aW9uPWdldEVudmlyb25tZW50T3B0aW9uKG9wdGlvbk5hbWUsJycpO1xucmV0dXJuIGZyZWV6ZShvcHRpb249PT0nJz9bXTpzdHJpbmdTcGxpdChvcHRpb24sJywnKSk7XG4gfTtcbmZyZWV6ZShnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KTtcblxuY29uc3QgZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcz0ob3B0aW9uTmFtZSxlbGVtZW50KT0+XG5hcnJheUluY2x1ZGVzKGdldEVudmlyb25tZW50T3B0aW9uc0xpc3Qob3B0aW9uTmFtZSksZWxlbWVudCk7XG5cbmNvbnN0IGdldENhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcz0oKT0+e1xucmV0dXJuIGZyZWV6ZShbLi4uY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzXSk7XG4gfTtcbmZyZWV6ZShnZXRDYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXMpO1xuXG5yZXR1cm4gZnJlZXplKHtcbmdldEVudmlyb25tZW50T3B0aW9uLFxuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCxcbmVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMsXG5nZXRDYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXN9KTtcblxuIH07JGjigI1fb25jZS5tYWtlRW52aXJvbm1lbnRDYXB0b3IobWFrZUVudmlyb25tZW50Q2FwdG9yKTtcbmZyZWV6ZShtYWtlRW52aXJvbm1lbnRDYXB0b3IpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAge1xuZ2V0RW52aXJvbm1lbnRPcHRpb24sXG5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0LFxuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhc309XG5tYWtlRW52aXJvbm1lbnRDYXB0b3IoZ2xvYmFsVGhpcyx0cnVlKTskaOKAjV9vbmNlLmdldEVudmlyb25tZW50T3B0aW9uKGdldEVudmlyb25tZW50T3B0aW9uKTskaOKAjV9vbmNlLmdldEVudmlyb25tZW50T3B0aW9uc0xpc3QoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCk7JGjigI1fb25jZS5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUVudmlyb25tZW50Q2FwdG9yIjpbIm1ha2VFbnZpcm9ubWVudENhcHRvciJdLCJnZXRFbnZpcm9ubWVudE9wdGlvbiI6WyJnZXRFbnZpcm9ubWVudE9wdGlvbiJdLCJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0IjpbImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiXSwiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyI6WyJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANfWPgbxBwAA8QcAABwAAABAZW5kby9lcnJvcnMtdjEuMi41L2luZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJGYWlsIiwiWCIsImFubm90YXRlRXJyb3IiLCJhc3NlcnQiLCJiIiwiYmFyZSIsIm1ha2VFcnJvciIsIm5vdGUiLCJxIiwicXVvdGUiLCJyZWRhY3RlZCIsInRocm93UmVkYWN0ZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLyogICAgICAgICAgICAgICAgICAgKi9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cblxuY29uc3QgZ2xvYmFsQXNzZXJ0PWdsb2JhbFRoaXMuYXNzZXJ0O1xuXG5pZihnbG9iYWxBc3NlcnQ9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbml0aWFsaXplIEBlbmRvL2Vycm9ycywgbWlzc2luZyBnbG9iYWxUaGlzLmFzc2VydCwgaW1wb3J0ICdzZXMnIGJlZm9yZSAnQGVuZG8vZXJyb3JzJ2ApO1xuXG4gfVxuXG5jb25zdCBtaXNzaW5nPS8qICAgICAgICAgICAgICAgICovW1xuJ3R5cGVvZicsXG4nZXJyb3InLFxuJ2ZhaWwnLFxuJ2VxdWFsJyxcbidzdHJpbmcnLFxuJ25vdGUnLFxuJ2RldGFpbHMnLFxuJ0ZhaWwnLFxuJ3F1b3RlJyxcbi8vXG4vL1xuLy9cbi8vXG4nbWFrZUFzc2VydCddLlxuZmlsdGVyKChuYW1lKT0+Z2xvYmFsQXNzZXJ0W25hbWVdPT09dW5kZWZpbmVkKTtcbmlmKG1pc3NpbmcubGVuZ3RoPjApe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbml0aWFsaXplIEBlbmRvL2Vycm9ycywgbWlzc2luZyBnbG9iYWxUaGlzLmFzc2VydCBtZXRob2RzICR7bWlzc2luZy5qb2luKFxuJywgJylcbiB9YCk7XG5cbiB9XG5cbi8vXG4vL1xuLy9cbmNvbnN0e1xuYmFyZSxcbmRldGFpbHM6cmVkYWN0ZWQsXG5lcnJvcjptYWtlRXJyb3IsXG5GYWlsOnRocm93UmVkYWN0ZWQsXG5tYWtlQXNzZXJ0Ol9vbWl0dGVkTWFrZUFzc2VydCxcbm5vdGUsXG5xdW90ZSxcbi4uLmFzc2VydGlvbnN9PVxuZ2xvYmFsQXNzZXJ0O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuJGjigI1fb25jZS5yZWRhY3RlZChyZWRhY3RlZCk7JGjigI1fb25jZS5tYWtlRXJyb3IobWFrZUVycm9yKTskaOKAjV9vbmNlLnRocm93UmVkYWN0ZWQodGhyb3dSZWRhY3RlZCk7JGjigI1fb25jZS5ub3RlKG5vdGUpOyRo4oCNX29uY2UucXVvdGUocXVvdGUpO2NvbnN0IGFzc2VydD0odmFsdWUsb3B0RGV0YWlscyxlcnJDb250cnVjdG9yLG9wdGlvbnMpPT5cbmdsb2JhbEFzc2VydCh2YWx1ZSxvcHREZXRhaWxzLGVyckNvbnRydWN0b3Isb3B0aW9ucyk7JGjigI1fb25jZS5hc3NlcnQoYXNzZXJ0KTtcbk9iamVjdC5hc3NpZ24oYXNzZXJ0LGFzc2VydGlvbnMpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBiYXJlT3JRdW90ZT1iYXJlfHxxdW90ZTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRo4oCNX29uY2UuYmFyZU9yUXVvdGUoYmFyZU9yUXVvdGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVkYWN0ZWQiOlsicmVkYWN0ZWQiXSwiWCI6WyJyZWRhY3RlZCJdLCJtYWtlRXJyb3IiOlsibWFrZUVycm9yIl0sInRocm93UmVkYWN0ZWQiOlsidGhyb3dSZWRhY3RlZCJdLCJGYWlsIjpbInRocm93UmVkYWN0ZWQiXSwibm90ZSI6WyJub3RlIl0sImFubm90YXRlRXJyb3IiOlsibm90ZSJdLCJxdW90ZSI6WyJxdW90ZSJdLCJxIjpbInF1b3RlIl0sImFzc2VydCI6WyJhc3NlcnQiXSwiYmFyZSI6WyJiYXJlT3JRdW90ZSJdLCJiIjpbImJhcmVPclF1b3RlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMZt/ZukEAAApBAAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvRS5qc3siaW1wb3J0cyI6WyIuL3RyYWNrLXR1cm5zLmpzIiwiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHJhY2tUdXJucyxtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI7JGjigI1faW1wb3J0cyhbW1wiLi90cmFjay10dXJucy5qc1wiLCBbW1widHJhY2tUdXJuc1wiLCBbJGjigI1fYSA9PiAodHJhY2tUdXJucyA9ICRo4oCNX2EpXV1dXSxbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjigI1fYSA9PiAobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuY29uc3R7ZGV0YWlsczpYLHF1b3RlOnEsRmFpbCxlcnJvcjptYWtlRXJyb3J9PWFzc2VydDtcbmNvbnN0e2Fzc2lnbixjcmVhdGV9PU9iamVjdDtcblxuY29uc3Qgb25TZW5kPW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19TRU5EX0JSRUFLUE9JTlRTJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBiYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyPXtcbnNldChfdGFyZ2V0LF9wcm9wLF92YWx1ZSl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbmlzRXh0ZW5zaWJsZShfdGFyZ2V0KXtcbnJldHVybiBmYWxzZTtcbiB9LFxuc2V0UHJvdG90eXBlT2YoX3RhcmdldCxfdmFsdWUpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5kZWxldGVQcm9wZXJ0eShfdGFyZ2V0LF9wcm9wKXtcbnJldHVybiBmYWxzZTtcbiB9fTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFUHJveHlIYW5kbGVyPShyZWNpcGllbnQsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuZ2V0OihfdGFyZ2V0LHByb3BlcnR5S2V5LHJlY2VpdmVyKT0+e1xucmV0dXJuIGhhcmRlbihcbntcbi8vXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbltwcm9wZXJ0eUtleV0oLi4uYXJncyl7XG5pZih0aGlzIT09cmVjZWl2ZXIpe1xuLy9cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5yZWplY3QoXG5tYWtlRXJyb3IoXG5YIGBVbmV4cGVjdGVkIHJlY2VpdmVyIGZvciBcIiR7cShwcm9wZXJ0eUtleSl9XCIgbWV0aG9kIG9mIEUoJHtxKFxucmVjaXBpZW50KVxuIH0pYCkpO1xuXG5cbiB9XG5cbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHByb3BlcnR5S2V5KSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxucmV0dXJuIEhhbmRsZWRQcm9taXNlLmFwcGx5TWV0aG9kKHJlY2lwaWVudCxwcm9wZXJ0eUtleSxhcmdzKTtcbiB9XG4vL1xufVtwcm9wZXJ0eUtleV0pO1xuXG4gfSxcbmFwcGx5OihfdGFyZ2V0LF90aGlzQXJnLGFyZ0FycmF5PVtdKT0+e1xuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsdW5kZWZpbmVkKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbiB9XG5yZXR1cm4gSGFuZGxlZFByb21pc2UuYXBwbHlGdW5jdGlvbihyZWNpcGllbnQsYXJnQXJyYXkpO1xuIH0sXG5oYXM6KF90YXJnZXQsX3ApPT57XG4vL1xucmV0dXJuIHRydWU7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFU2VuZE9ubHlQcm94eUhhbmRsZXI9KHJlY2lwaWVudCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5nZXQ6KF90YXJnZXQscHJvcGVydHlLZXkscmVjZWl2ZXIpPT57XG5yZXR1cm4gaGFyZGVuKFxue1xuLy9cbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bcHJvcGVydHlLZXldKC4uLmFyZ3Mpe1xuLy9cbnRoaXM9PT1yZWNlaXZlcnx8XG5GYWlsIGBVbmV4cGVjdGVkIHJlY2VpdmVyIGZvciBcIiR7cShcbnByb3BlcnR5S2V5KVxuIH1cIiBtZXRob2Qgb2YgRS5zZW5kT25seSgke3EocmVjaXBpZW50KX0pYDtcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHByb3BlcnR5S2V5KSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxuSGFuZGxlZFByb21pc2UuYXBwbHlNZXRob2RTZW5kT25seShyZWNpcGllbnQscHJvcGVydHlLZXksYXJncyk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbi8vXG59W3Byb3BlcnR5S2V5XSk7XG5cbiB9LFxuYXBwbHk6KF90YXJnZXQsX3RoaXNBcmcsYXJnc0FycmF5PVtdKT0+e1xuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsdW5kZWZpbmVkKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbiB9XG5IYW5kbGVkUHJvbWlzZS5hcHBseUZ1bmN0aW9uU2VuZE9ubHkocmVjaXBpZW50LGFyZ3NBcnJheSk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH0sXG5oYXM6KF90YXJnZXQsX3ApPT57XG4vL1xucmV0dXJuIHRydWU7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFR2V0UHJveHlIYW5kbGVyPSh4LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmhhczooX3RhcmdldCxfcHJvcCk9PnRydWUsXG5nZXQ6KF90YXJnZXQscHJvcCk9PkhhbmRsZWRQcm9taXNlLmdldCh4LHByb3ApfSk7XG5cblxuLypcblxuICovXG5jb25zdCBtYWtlRT0oSGFuZGxlZFByb21pc2UpPT57XG5yZXR1cm4gaGFyZGVuKFxuYXNzaWduKFxuLypcblxuXG5cblxuXG5cblxuICAgICAgICovXG4vL1xuKHgpPT5oYXJkZW4obmV3IFByb3h5KCgpPT57IH0sbWFrZUVQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcbntcbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuZ2V0Oih4KT0+XG4vL1xuaGFyZGVuKFxubmV3IFByb3h5KGNyZWF0ZShudWxsKSxtYWtlRUdldFByb3h5SGFuZGxlcih4LEhhbmRsZWRQcm9taXNlKSkpLFxuXG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5yZXNvbHZlOkhhbmRsZWRQcm9taXNlLnJlc29sdmUsXG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5zZW5kT25seTooeCk9PlxuLy9cbmhhcmRlbihcbm5ldyBQcm94eSgoKT0+eyB9LG1ha2VFU2VuZE9ubHlQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xud2hlbjooeCxvbmZ1bGZpbGxlZCxvbnJlamVjdGVkKT0+XG5IYW5kbGVkUHJvbWlzZS5yZXNvbHZlKHgpLnRoZW4oXG4uLi50cmFja1R1cm5zKFtvbmZ1bGZpbGxlZCxvbnJlamVjdGVkXSkpfSkpO1xuXG5cblxuXG4gfTtcblxuY29uc3R7ZGVmYXVsdDokY+KAjV9kZWZhdWx0fT17ZGVmYXVsdDptYWtlRX07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmRlZmF1bHQoJGPigI1fZGVmYXVsdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh5JSp08BAABPAQAAKQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41L3NyYy9leHBvcnRzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAM7iumi1DAAAtQwAACcAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvbG9jYWwuanN7ImltcG9ydHMiOlsiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZ2V0TWV0aG9kTmFtZXMiLCJsb2NhbEFwcGx5RnVuY3Rpb24iLCJsb2NhbEFwcGx5TWV0aG9kIiwibG9jYWxHZXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcjskaOKAjV9pbXBvcnRzKFtbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjigI1fYSA9PiAobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbmNvbnN0e2RldGFpbHM6WCxxdW90ZTpxLEZhaWx9PWFzc2VydDtcblxuY29uc3R7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxnZXRQcm90b3R5cGVPZixmcmVlemV9PU9iamVjdDtcbmNvbnN0e2FwcGx5LG93bktleXN9PVJlZmxlY3Q7XG5cbmNvbnN0IG50eXBlb2Y9KHNwZWNpbWVuKT0+c3BlY2ltZW49PT1udWxsPydudWxsJzp0eXBlb2Ygc3BlY2ltZW47XG5cbmNvbnN0IG9uRGVsaXZlcnk9bWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKCdFTkRPX0RFTElWRVJZX0JSRUFLUE9JTlRTJyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgaXNPYmplY3Q9KHZhbCk9Pk9iamVjdCh2YWwpPT09dmFsO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29tcGFyZVN0cmluZ2lmaWVkPShhLGIpPT57XG5pZih0eXBlb2YgYT09PXR5cGVvZiBiKXtcbmNvbnN0IGxlZnQ9U3RyaW5nKGEpO1xuY29uc3QgcmlnaHQ9U3RyaW5nKGIpO1xuLy9cbnJldHVybiBsZWZ0PHJpZ2h0Py0xOmxlZnQ+cmlnaHQ/MTowO1xuIH1cbmlmKHR5cGVvZiBhPT09J3N5bWJvbCcpe1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N0cmluZycpO1xucmV0dXJuLTE7XG4gfVxuYXNzZXJ0KHR5cGVvZiBhPT09J3N0cmluZycpO1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N5bWJvbCcpO1xucmV0dXJuIDE7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRNZXRob2ROYW1lcz0odmFsKT0+e1xubGV0IGxheWVyPXZhbDtcbmNvbnN0IG5hbWVzPW5ldyBTZXQoKTsvL1xud2hpbGUobGF5ZXIhPT1udWxsJiZsYXllciE9PU9iamVjdC5wcm90b3R5cGUpe1xuLy9cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobGF5ZXIpO1xuZm9yKGNvbnN0IG5hbWUgb2Ygb3duS2V5cyhkZXNjcykpe1xuLy9cbi8vXG5pZih0eXBlb2YgdmFsW25hbWVdPT09J2Z1bmN0aW9uJyl7XG5uYW1lcy5hZGQobmFtZSk7XG4gfVxuIH1cbmlmKCFpc09iamVjdCh2YWwpKXtcbmJyZWFrO1xuIH1cbmxheWVyPWdldFByb3RvdHlwZU9mKGxheWVyKTtcbiB9XG5yZXR1cm4gaGFyZGVuKFsuLi5uYW1lc10uc29ydChjb21wYXJlU3RyaW5naWZpZWQpKTtcbiB9O1xuLy9cbi8vXG4kaOKAjV9vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtmcmVlemUoZ2V0TWV0aG9kTmFtZXMpO1xuXG5jb25zdCAgICAgICAgbG9jYWxBcHBseUZ1bmN0aW9uPShyZWNpcGllbnQsYXJncyk9PntcbnR5cGVvZiByZWNpcGllbnQ9PT0nZnVuY3Rpb24nfHxcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGludm9rZSB0YXJnZXQgYXMgYSBmdW5jdGlvbjsgdHlwZW9mIHRhcmdldCBpcyAke3EoXG5udHlwZW9mKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbmNvbnN0IHJlc3VsdD1hcHBseShyZWNpcGllbnQsdW5kZWZpbmVkLGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRo4oCNX29uY2UubG9jYWxBcHBseUZ1bmN0aW9uKGxvY2FsQXBwbHlGdW5jdGlvbik7XG5cbmNvbnN0ICAgICAgICBsb2NhbEFwcGx5TWV0aG9kPShyZWNpcGllbnQsbWV0aG9kTmFtZSxhcmdzKT0+e1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8bWV0aG9kTmFtZT09PW51bGwpe1xuLy9cbnJldHVybiBsb2NhbEFwcGx5RnVuY3Rpb24ocmVjaXBpZW50LGFyZ3MpO1xuIH1cbmlmKHJlY2lwaWVudD09PXVuZGVmaW5lZHx8cmVjaXBpZW50PT09bnVsbCl7XG5hc3NlcnQuZmFpbChcblggYENhbm5vdCBkZWxpdmVyICR7cShtZXRob2ROYW1lKX0gdG8gdGFyZ2V0OyB0eXBlb2YgdGFyZ2V0IGlzICR7cShcbm50eXBlb2YocmVjaXBpZW50KSlcbiB9YCxcblR5cGVFcnJvcik7XG5cbiB9XG5jb25zdCBmbj1yZWNpcGllbnRbbWV0aG9kTmFtZV07XG5pZihmbj09PXVuZGVmaW5lZCl7XG5hc3NlcnQuZmFpbChcblggYHRhcmdldCBoYXMgbm8gbWV0aG9kICR7cShtZXRob2ROYW1lKX0sIGhhcyAke3EoXG5nZXRNZXRob2ROYW1lcyhyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuIH1cbmNvbnN0IGZ0eXBlPW50eXBlb2YoZm4pO1xudHlwZW9mIGZuPT09J2Z1bmN0aW9uJ3x8XG5GYWlsIGBpbnZva2VkIG1ldGhvZCAke3EobWV0aG9kTmFtZSl9IGlzIG5vdCBhIGZ1bmN0aW9uOyBpdCBpcyBhICR7cShcbmZ0eXBlKVxuIH1gO1xuaWYob25EZWxpdmVyeSYmb25EZWxpdmVyeS5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxtZXRob2ROYW1lKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxuY29uc3QgcmVzdWx0PWFwcGx5KGZuLHJlY2lwaWVudCxhcmdzKTtcbnJldHVybiByZXN1bHQ7XG4gfTskaOKAjV9vbmNlLmxvY2FsQXBwbHlNZXRob2QobG9jYWxBcHBseU1ldGhvZCk7XG5cbmNvbnN0ICAgICAgICBsb2NhbEdldD0odCxrZXkpPT50W2tleV07JGjigI1fb25jZS5sb2NhbEdldChsb2NhbEdldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJsb2NhbEFwcGx5RnVuY3Rpb24iOlsibG9jYWxBcHBseUZ1bmN0aW9uIl0sImxvY2FsQXBwbHlNZXRob2QiOlsibG9jYWxBcHBseU1ldGhvZCJdLCJsb2NhbEdldCI6WyJsb2NhbEdldCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABhurys8QwAAPEMAAA1AAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiXSwiZXhwb3J0cyI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldEVudmlyb25tZW50T3B0aW9uOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJnZXRFbnZpcm9ubWVudE9wdGlvblwiLCBbJGjigI1fYSA9PiAoZ2V0RW52aXJvbm1lbnRPcHRpb24gPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuY29uc3R7cXVvdGU6cSxGYWlsfT1hc3NlcnQ7XG5cbmNvbnN0e2hhc093bixmcmVlemUsZW50cmllc309T2JqZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG4vKlxuXG5cblxuXG5cbiAqL1xuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCBpc0pTT05SZWNvcmQ9KHZhbCk9PlxudHlwZW9mIHZhbD09PSdvYmplY3QnJiZ2YWwhPT1udWxsJiYhQXJyYXkuaXNBcnJheSh2YWwpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzaW1wbGlmeVRhZz0odGFnKT0+e1xuZm9yKGNvbnN0IHByZWZpeCBvZlsnQWxsZWdlZDogJywnRGVidWdOYW1lOiAnXSl7XG5pZih0YWcuc3RhcnRzV2l0aChwcmVmaXgpKXtcbnJldHVybiB0YWcuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gfVxuIH1cbnJldHVybiB0YWc7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI9KG9wdGlvbk5hbWUpPT57XG5sZXQgYnJlYWtwb2ludHM9SlNPTi5wYXJzZShnZXRFbnZpcm9ubWVudE9wdGlvbihvcHRpb25OYW1lLCdudWxsJykpO1xuXG5pZihicmVha3BvaW50cz09PW51bGwpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGJyZWFrcG9pbnRzVGFibGU7XG5cbmNvbnN0IGdldEJyZWFrcG9pbnRzPSgpPT5icmVha3BvaW50cztcbmZyZWV6ZShnZXRCcmVha3BvaW50cyk7XG5cbmNvbnN0IHNldEJyZWFrcG9pbnRzPShuZXdCcmVha3BvaW50cz1icmVha3BvaW50cyk9PntcbmlzSlNPTlJlY29yZChuZXdCcmVha3BvaW50cyl8fFxuRmFpbCBgRXhwZWN0ZWQgJHtxKG9wdGlvbk5hbWUpfSBvcHRpb24gdG8gYmUgYSBKU09OIGJyZWFrcG9pbnRzIHJlY29yZGA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IG5ld0JyZWFrcG9pbnRzVGFibGU9e19fcHJvdG9fXzpudWxsfTtcblxuZm9yKGNvbnN0W3RhZyxtZXRob2RCUHNdb2YgZW50cmllcyhuZXdCcmVha3BvaW50cykpe1xudGFnPT09c2ltcGxpZnlUYWcodGFnKXx8XG5GYWlsIGBKdXN0IHVzZSBzaW1wbGUgdGFnICR7cShzaW1wbGlmeVRhZyh0YWcpKX0gcmF0aGVyIHRoYW4gJHtxKHRhZyl9YDtcbmlzSlNPTlJlY29yZChtZXRob2RCUHMpfHxcbkZhaWwgYEV4cGVjdGVkICR7cShvcHRpb25OYW1lKX0gb3B0aW9uJ3MgJHtxKFxudGFnKVxuIH0gdG8gYmUgYSBKU09OIG1ldGhvZHMgYnJlYWtwb2ludHMgcmVjb3JkYDtcbmZvcihjb25zdFttZXRob2ROYW1lLGNvdW50XW9mIGVudHJpZXMobWV0aG9kQlBzKSl7XG5jb3VudD09PScqJ3x8XG50eXBlb2YgY291bnQ9PT0nbnVtYmVyJyYmXG5OdW1iZXIuaXNTYWZlSW50ZWdlcihjb3VudCkmJlxuY291bnQ+PTB8fFxuRmFpbCBgRXhwZWN0ZWQgJHtxKG9wdGlvbk5hbWUpfSBvcHRpb24ncyAke3EodGFnKX0uJHtxKFxubWV0aG9kTmFtZSlcbiB9IHRvIGJlIFwiKlwiIG9yIGEgbm9uLW5lZ2F0aXZlIGludGVnZXJgO1xuXG5jb25zdCBjbGFzc0JQcz1oYXNPd24obmV3QnJlYWtwb2ludHNUYWJsZSxtZXRob2ROYW1lKT9cbm5ld0JyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV06XG5uZXdCcmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdPXtcbi8vXG5fX3Byb3RvX186bnVsbH07XG5cbmNsYXNzQlBzW3RhZ109Y291bnQ7XG4gfVxuIH1cbmJyZWFrcG9pbnRzPW5ld0JyZWFrcG9pbnRzO1xuYnJlYWtwb2ludHNUYWJsZT1uZXdCcmVha3BvaW50c1RhYmxlO1xuIH07XG5mcmVlemUoc2V0QnJlYWtwb2ludHMpO1xuXG5jb25zdCBzaG91bGRCcmVha3BvaW50PShyZWNpcGllbnQsbWV0aG9kTmFtZSk9PntcbmlmKG1ldGhvZE5hbWU9PT11bmRlZmluZWR8fG1ldGhvZE5hbWU9PT1udWxsKXtcbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgY2xhc3NCUHM9YnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXXx8YnJlYWtwb2ludHNUYWJsZVsnKiddO1xuaWYoY2xhc3NCUHM9PT11bmRlZmluZWQpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmxldCB0YWc9c2ltcGxpZnlUYWcocmVjaXBpZW50W1N5bWJvbC50b1N0cmluZ1RhZ10pO1xubGV0IGNvdW50PWNsYXNzQlBzW3RhZ107XG5pZihjb3VudD09PXVuZGVmaW5lZCl7XG50YWc9JyonO1xuY291bnQ9Y2xhc3NCUHNbdGFnXTtcbmlmKGNvdW50PT09dW5kZWZpbmVkKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxuaWYoY291bnQ9PT0nKicpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoY291bnQ9PT0wKXtcbnJldHVybiB0cnVlO1xuIH1cbmFzc2VydCh0eXBlb2YgY291bnQ9PT0nbnVtYmVyJyYmY291bnQ+PTEpO1xuY2xhc3NCUHNbdGFnXT1jb3VudC0xO1xucmV0dXJuIGZhbHNlO1xuIH07XG5mcmVlemUoc2hvdWxkQnJlYWtwb2ludCk7XG5cbmNvbnN0IGJyZWFrcG9pbnRUZXN0ZXI9ZnJlZXplKHtcbmdldEJyZWFrcG9pbnRzLFxuc2V0QnJlYWtwb2ludHMsXG5zaG91bGRCcmVha3BvaW50fSk7XG5cbmJyZWFrcG9pbnRUZXN0ZXIuc2V0QnJlYWtwb2ludHMoKTtcbnJldHVybiBicmVha3BvaW50VGVzdGVyO1xuIH07JGjigI1fb25jZS5tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKTtcbmZyZWV6ZShtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIjpbIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACf7/MTPAMAADwDAAApAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUvc3JjL25vLXNoaW0uanN7ImltcG9ydHMiOlsiLi9FLmpzIiwiLi9leHBvcnRzLmpzIl0sImV4cG9ydHMiOlsiRSIsIkhhbmRsZWRQcm9taXNlIl0sInJlZXhwb3J0cyI6WyIuL2V4cG9ydHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VFOyRo4oCNX2ltcG9ydHMoW1tcIi4vRS5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjigI1fYSA9PiAobWFrZUUgPSAkaOKAjV9hKV1dXV0sW1wiLi9leHBvcnRzLmpzXCIsIFtdXV0pOyAgIFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgaHA9SGFuZGxlZFByb21pc2U7JGjigI1fb25jZS5ocChocCk7XG5jb25zdCAgICAgICAgRT1tYWtlRShocCk7JGjigI1fb25jZS5FKEUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiSGFuZGxlZFByb21pc2UiOlsiaHAiXSwiRSI6WyJFIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEYxRkFpCQAAaQkAAC0AAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvdHJhY2stdHVybnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiXSwiZXhwb3J0cyI6WyJ0cmFja1R1cm5zIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJnZXRFbnZpcm9ubWVudE9wdGlvblwiLCBbJGjigI1fYSA9PiAoZ2V0RW52aXJvbm1lbnRPcHRpb24gPSAkaOKAjV9hKV1dLFtcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRo4oCNX2EgPT4gKGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5sZXQgaGlkZGVuUHJpb3JFcnJvcjtcbmxldCBoaWRkZW5DdXJyZW50VHVybj0wO1xubGV0IGhpZGRlbkN1cnJlbnRFdmVudD0wO1xuXG4vL1xuY29uc3QgVkVSQk9TRT1lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKCdERUJVRycsJ3RyYWNrLXR1cm5zJyk7XG5cbi8vXG4vL1xuY29uc3QgRU5BQkxFRD1cbmdldEVudmlyb25tZW50T3B0aW9uKCdUUkFDS19UVVJOUycsJ2Rpc2FibGVkJyxbJ2VuYWJsZWQnXSk9PT0nZW5hYmxlZCc7XG5cbi8vXG4vL1xuLy9cbi8vXG5cbmNvbnN0IGFkZFJlamVjdGlvbk5vdGU9KGRldGFpbHNOb3RlKT0+KHJlYXNvbik9PntcbmlmKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yKXtcbmdsb2JhbFRoaXMuYXNzZXJ0Lm5vdGUocmVhc29uLGRldGFpbHNOb3RlKTtcbiB9XG5pZihWRVJCT1NFKXtcbmNvbnNvbGUubG9nKCdSRUpFQ1RFRCBhdCB0b3Agb2YgZXZlbnQgbG9vcCcscmVhc29uKTtcbiB9XG4gfTtcblxuY29uc3Qgd3JhcEZ1bmN0aW9uPVxuKGZ1bmMsc2VuZGluZ0Vycm9yLFgpPT5cbiguLi5hcmdzKT0+e1xuaGlkZGVuUHJpb3JFcnJvcj1zZW5kaW5nRXJyb3I7XG5oaWRkZW5DdXJyZW50VHVybis9MTtcbmhpZGRlbkN1cnJlbnRFdmVudD0wO1xudHJ5e1xubGV0IHJlc3VsdDtcbnRyeXtcbnJlc3VsdD1mdW5jKC4uLmFyZ3MpO1xuIH1jYXRjaChlcnIpe1xuaWYoZXJyIGluc3RhbmNlb2YgRXJyb3Ipe1xuZ2xvYmFsVGhpcy5hc3NlcnQubm90ZShcbmVycixcblggYFRocm93biBmcm9tOiAke2hpZGRlblByaW9yRXJyb3J9OiR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWApO1xuXG4gfVxuaWYoVkVSQk9TRSl7XG5jb25zb2xlLmxvZygnVEhST1dOIHRvIHRvcCBvZiBldmVudCBsb29wJyxlcnIpO1xuIH1cbnRocm93IGVycjtcbiB9XG4vL1xuY29uc3QgZGV0YWlsc05vdGU9WCBgUmVqZWN0aW9uIGZyb206ICR7aGlkZGVuUHJpb3JFcnJvcn06JHtoaWRkZW5DdXJyZW50VHVybn0uJHtoaWRkZW5DdXJyZW50RXZlbnR9YDtcblByb21pc2UucmVzb2x2ZShyZXN1bHQpLmNhdGNoKGFkZFJlamVjdGlvbk5vdGUoZGV0YWlsc05vdGUpKTtcbnJldHVybiByZXN1bHQ7XG4gfWZpbmFsbHl7XG5oaWRkZW5QcmlvckVycm9yPXVuZGVmaW5lZDtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdHJhY2tUdXJucz0oZnVuY3MpPT57XG5pZighRU5BQkxFRHx8dHlwZW9mIGdsb2JhbFRoaXM9PT0ndW5kZWZpbmVkJ3x8IWdsb2JhbFRoaXMuYXNzZXJ0KXtcbnJldHVybiBmdW5jcztcbiB9XG5jb25zdHtkZXRhaWxzOlgsbm90ZTphbm5vdGF0ZUVycm9yfT1nbG9iYWxUaGlzLmFzc2VydDtcblxuaGlkZGVuQ3VycmVudEV2ZW50Kz0xO1xuY29uc3Qgc2VuZGluZ0Vycm9yPUVycm9yKFxuIGBFdmVudDogJHtoaWRkZW5DdXJyZW50VHVybn0uJHtoaWRkZW5DdXJyZW50RXZlbnR9YCk7XG5cbmlmKGhpZGRlblByaW9yRXJyb3IhPT11bmRlZmluZWQpe1xuYW5ub3RhdGVFcnJvcihzZW5kaW5nRXJyb3IsWCBgQ2F1c2VkIGJ5OiAke2hpZGRlblByaW9yRXJyb3J9YCk7XG4gfVxuXG5yZXR1cm4gKC8qICAgICAgICAgICAgKi9cbmZ1bmNzLm1hcCgoZnVuYyk9PmZ1bmMmJndyYXBGdW5jdGlvbihmdW5jLHNlbmRpbmdFcnJvcixYKSkpO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovJGjigI1fb25jZS50cmFja1R1cm5zKHRyYWNrVHVybnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJhY2tUdXJucyI6WyJ0cmFja1R1cm5zIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHvYFwdbAgAAWwIAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS91dGlscy5qc3siaW1wb3J0cyI6WyIuL3NyYy9sb2NhbC5qcyIsIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vc3JjL2xvY2FsLmpzXCIsIFtdXSxbXCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvbG9jYWwuanMiOltbImdldE1ldGhvZE5hbWVzIiwiZ2V0TWV0aG9kTmFtZXMiXV0sIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiOltbIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciIsIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA3BBWdlcCAABXAgAAGQAAAEBlbmRvL2V4by12MS41LjMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvZXhvLW1ha2Vycy5qcyIsIi4vc3JjL3R5cGVzLmpzIiwiLi9zcmMvZ2V0LWludGVyZmFjZS5qcyJdLCJleHBvcnRzIjpbbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy9leG8tbWFrZXJzLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9zcmMvZXhvLW1ha2Vycy5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIi4vc3JjL2dldC1pbnRlcmZhY2UuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9nZXQtaW50ZXJmYWNlLmpzIjpbWyJHRVRfSU5URVJGQUNFX0dVQVJEIiwiR0VUX0lOVEVSRkFDRV9HVUFSRCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAG1aXle4UAADuFAAAIgAAAEBlbmRvL2V4by12MS41LjMvc3JjL2V4by1tYWtlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCJAZW5kby9lbnYtb3B0aW9ucyIsIkBlbmRvL2Vycm9ycyIsIi4vZXhvLXRvb2xzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzc0tpdCIsImluaXRFbXB0eSIsIm1ha2VFeG8iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG9iamVjdE1hcCxlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzLEZhaWwscSxkZWZlbmRQcm90b3R5cGUsZGVmZW5kUHJvdG90eXBlS2l0OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRo4oCNX2EgPT4gKG9iamVjdE1hcCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhc1wiLCBbJGjigI1fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiLi9leG8tdG9vbHMuanNcIiwgW1tcImRlZmVuZFByb3RvdHlwZVwiLCBbJGjigI1fYSA9PiAoZGVmZW5kUHJvdG90eXBlID0gJGjigI1fYSldXSxbXCJkZWZlbmRQcm90b3R5cGVLaXRcIiwgWyRo4oCNX2EgPT4gKGRlZmVuZFByb3RvdHlwZUtpdCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLypcblxuICovXG5cbmNvbnN0e2NyZWF0ZSxzZWFsLGZyZWV6ZSxkZWZpbmVQcm9wZXJ0eSx2YWx1ZXN9PU9iamVjdDtcblxuLy9cbmNvbnN0IExBQkVMX0lOU1RBTkNFUz1lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKCdERUJVRycsJ2xhYmVsLWluc3RhbmNlcycpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VTZWxmPShwcm90byxpbnN0YW5jZUNvdW50KT0+e1xuY29uc3Qgc2VsZj1jcmVhdGUocHJvdG8pO1xuaWYoTEFCRUxfSU5TVEFOQ0VTKXtcbmRlZmluZVByb3BlcnR5KHNlbGYsU3ltYm9sLnRvU3RyaW5nVGFnLHtcbnZhbHVlOiBgJHtwcm90b1tTeW1ib2wudG9TdHJpbmdUYWddfSMke2luc3RhbmNlQ291bnR9YCxcbndyaXRhYmxlOmZhbHNlLFxuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTpmYWxzZX0pO1xuXG4gfVxucmV0dXJuIGhhcmRlbihzZWxmKTtcbiB9O1xuXG5jb25zdCBlbXB0eVJlY29yZD1oYXJkZW4oe30pO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpbml0RW1wdHk9KCk9PmVtcHR5UmVjb3JkO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuaW5pdEVtcHR5KGluaXRFbXB0eSk7XG5jb25zdCAgICAgICAgZGVmaW5lRXhvQ2xhc3M9KFxudGFnLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnM9e30pPT5cbntcbmhhcmRlbihtZXRob2RzKTtcbmNvbnN0e1xuZmluaXNoPXVuZGVmaW5lZCxcbnJlY2VpdmVBbXBsaWZpZXI9dW5kZWZpbmVkLFxucmVjZWl2ZUluc3RhbmNlVGVzdGVyPXVuZGVmaW5lZH09XG5vcHRpb25zO1xucmVjZWl2ZUFtcGxpZmllcj09PXVuZGVmaW5lZHx8XG5GYWlsIGBPbmx5IGZhY2V0cyBvZiBhbiBleG8gY2xhc3Mga2l0IGNhbiBiZSBhbXBsaWZpZWQgJHtxKHRhZyl9YDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0TWFwPW5ldyBXZWFrTWFwKCk7XG5jb25zdCBwcm90bz1kZWZlbmRQcm90b3R5cGUoXG50YWcsXG4oc2VsZik9Pi8qICAgICAgICAgICAgICAqL2NvbnRleHRNYXAuZ2V0KHNlbGYpLFxubWV0aG9kcyxcbnRydWUsXG5pbnRlcmZhY2VHdWFyZCk7XG5cbmxldCBpbnN0YW5jZUNvdW50PTA7XG4vKlxuXG4gICAqL1xuY29uc3QgbWFrZUluc3RhbmNlPSguLi5hcmdzKT0+e1xuLy9cbmNvbnN0IHN0YXRlPXNlYWwoaW5pdCguLi5hcmdzKSk7XG5pbnN0YW5jZUNvdW50Kz0xO1xuY29uc3Qgc2VsZj1tYWtlU2VsZihwcm90byxpbnN0YW5jZUNvdW50KTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0PWZyZWV6ZSh7c3RhdGUsc2VsZn0pO1xuY29udGV4dE1hcC5zZXQoc2VsZixjb250ZXh0KTtcbmlmKGZpbmlzaCl7XG5maW5pc2goY29udGV4dCk7XG4gfVxucmV0dXJuIHNlbGY7XG4gfTtcblxuaWYocmVjZWl2ZUluc3RhbmNlVGVzdGVyKXtcbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzSW5zdGFuY2U9KGV4byxmYWNldE5hbWU9dW5kZWZpbmVkKT0+e1xuZmFjZXROYW1lPT09dW5kZWZpbmVkfHxcbkZhaWwgYGZhY2V0TmFtZSBjYW4gb25seSBiZSB1c2VkIHdpdGggYW4gZXhvIGNsYXNzIGtpdDogJHtxKFxudGFnKVxuIH0gaGFzIG5vIGZhY2V0ICR7cShmYWNldE5hbWUpfWA7XG5yZXR1cm4gY29udGV4dE1hcC5oYXMoZXhvKTtcbiB9O1xuaGFyZGVuKGlzSW5zdGFuY2UpO1xucmVjZWl2ZUluc3RhbmNlVGVzdGVyKGlzSW5zdGFuY2UpO1xuIH1cblxucmV0dXJuIGhhcmRlbihtYWtlSW5zdGFuY2UpO1xuIH07JGjigI1fb25jZS5kZWZpbmVFeG9DbGFzcyhkZWZpbmVFeG9DbGFzcyk7XG5oYXJkZW4oZGVmaW5lRXhvQ2xhc3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmluZUV4b0NsYXNzS2l0PShcbnRhZyxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbm1ldGhvZHNLaXQsXG5vcHRpb25zPXt9KT0+XG57XG5oYXJkZW4obWV0aG9kc0tpdCk7XG5jb25zdHtcbmZpbmlzaD11bmRlZmluZWQsXG5yZWNlaXZlQW1wbGlmaWVyPXVuZGVmaW5lZCxcbnJlY2VpdmVJbnN0YW5jZVRlc3Rlcj11bmRlZmluZWR9PVxub3B0aW9ucztcbmNvbnN0IGNvbnRleHRNYXBLaXQ9b2JqZWN0TWFwKG1ldGhvZHNLaXQsKCk9Pm5ldyBXZWFrTWFwKCkpO1xuY29uc3QgZ2V0Q29udGV4dEtpdD1vYmplY3RNYXAoXG5jb250ZXh0TWFwS2l0LFxuKGNvbnRleHRNYXApPT4oZmFjZXQpPT5jb250ZXh0TWFwLmdldChmYWNldCkpO1xuXG5jb25zdCBwcm90b3R5cGVLaXQ9ZGVmZW5kUHJvdG90eXBlS2l0KFxudGFnLFxuZ2V0Q29udGV4dEtpdCxcbm1ldGhvZHNLaXQsXG50cnVlLFxuaW50ZXJmYWNlR3VhcmRLaXQpO1xuXG5sZXQgaW5zdGFuY2VDb3VudD0wO1xuLypcblxuICAgKi9cbmNvbnN0IG1ha2VJbnN0YW5jZUtpdD0oLi4uYXJncyk9Pntcbi8vXG5jb25zdCBzdGF0ZT1zZWFsKGluaXQoLi4uYXJncykpO1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbnRleHQ9e3N0YXRlLGZhY2V0czpudWxsfTtcbmluc3RhbmNlQ291bnQrPTE7XG5jb25zdCBmYWNldHM9b2JqZWN0TWFwKHByb3RvdHlwZUtpdCwocHJvdG8sZmFjZXROYW1lKT0+e1xuY29uc3Qgc2VsZj1tYWtlU2VsZihwcm90byxpbnN0YW5jZUNvdW50KTtcbmNvbnRleHRNYXBLaXRbZmFjZXROYW1lXS5zZXQoc2VsZixjb250ZXh0KTtcbnJldHVybiBzZWxmO1xuIH0pO1xuY29udGV4dC5mYWNldHM9ZmFjZXRzO1xuLy9cbmZyZWV6ZShjb250ZXh0KTtcbmlmKGZpbmlzaCl7XG5maW5pc2goY29udGV4dCk7XG4gfVxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICovY29udGV4dC5mYWNldHMpO1xuIH07XG5cbmlmKHJlY2VpdmVBbXBsaWZpZXIpe1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYW1wbGlmeT0oZXhvRmFjZXQpPT57XG5mb3IoY29uc3QgY29udGV4dE1hcCBvZiB2YWx1ZXMoY29udGV4dE1hcEtpdCkpe1xuaWYoY29udGV4dE1hcC5oYXMoZXhvRmFjZXQpKXtcbmNvbnN0e2ZhY2V0c309Y29udGV4dE1hcC5nZXQoZXhvRmFjZXQpO1xucmV0dXJuIGZhY2V0cztcbiB9XG4gfVxudGhyb3cgRmFpbCBgTXVzdCBiZSBhIGZhY2V0IG9mICR7cSh0YWcpfTogJHtleG9GYWNldH1gO1xuIH07XG5oYXJkZW4oYW1wbGlmeSk7XG5yZWNlaXZlQW1wbGlmaWVyKGFtcGxpZnkpO1xuIH1cblxuaWYocmVjZWl2ZUluc3RhbmNlVGVzdGVyKXtcbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzSW5zdGFuY2U9KGV4b0ZhY2V0LGZhY2V0TmFtZT11bmRlZmluZWQpPT57XG5pZihmYWNldE5hbWU9PT11bmRlZmluZWQpe1xucmV0dXJuIHZhbHVlcyhjb250ZXh0TWFwS2l0KS5zb21lKChjb250ZXh0TWFwKT0+XG5jb250ZXh0TWFwLmhhcyhleG9GYWNldCkpO1xuXG4gfVxuYXNzZXJ0LnR5cGVvZihmYWNldE5hbWUsJ3N0cmluZycpO1xuY29uc3QgY29udGV4dE1hcD1jb250ZXh0TWFwS2l0W2ZhY2V0TmFtZV07XG5jb250ZXh0TWFwIT09dW5kZWZpbmVkfHxcbkZhaWwgYGV4byBjbGFzcyBraXQgJHtxKHRhZyl9IGhhcyBubyBmYWNldCBuYW1lZCAke3EoZmFjZXROYW1lKX1gO1xucmV0dXJuIGNvbnRleHRNYXAuaGFzKGV4b0ZhY2V0KTtcbiB9O1xuaGFyZGVuKGlzSW5zdGFuY2UpO1xucmVjZWl2ZUluc3RhbmNlVGVzdGVyKGlzSW5zdGFuY2UpO1xuIH1cblxucmV0dXJuIGhhcmRlbihtYWtlSW5zdGFuY2VLaXQpO1xuIH07JGjigI1fb25jZS5kZWZpbmVFeG9DbGFzc0tpdChkZWZpbmVFeG9DbGFzc0tpdCk7XG5oYXJkZW4oZGVmaW5lRXhvQ2xhc3NLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFeG89KHRhZyxpbnRlcmZhY2VHdWFyZCxtZXRob2RzLG9wdGlvbnM9dW5kZWZpbmVkKT0+e1xuY29uc3QgbWFrZUluc3RhbmNlPWRlZmluZUV4b0NsYXNzKFxudGFnLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0RW1wdHksXG5tZXRob2RzLFxub3B0aW9ucyk7XG5cbnJldHVybiBtYWtlSW5zdGFuY2UoKTtcbiB9OyRo4oCNX29uY2UubWFrZUV4byhtYWtlRXhvKTtcbmhhcmRlbihtYWtlRXhvKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImluaXRFbXB0eSI6WyJpbml0RW1wdHkiXSwiZGVmaW5lRXhvQ2xhc3MiOlsiZGVmaW5lRXhvQ2xhc3MiXSwiZGVmaW5lRXhvQ2xhc3NLaXQiOlsiZGVmaW5lRXhvQ2xhc3NLaXQiXSwibWFrZUV4byI6WyJtYWtlRXhvIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADGqSZYRMAAAETAAACEAAABAZW5kby9leG8tdjEuNS4zL3NyYy9leG8tdG9vbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9mYXIiLCJAZW5kby9wYXR0ZXJucyIsIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vZ2V0LWludGVyZmFjZS5qcyJdLCJleHBvcnRzIjpbImRlZmVuZFByb3RvdHlwZSIsImRlZmVuZFByb3RvdHlwZUtpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0TWV0aG9kTmFtZXMsaGFzT3duUHJvcGVydHlPZix0b1Rocm93YWJsZSxFLEZhcixtdXN0TWF0Y2gsTSxpc0F3YWl0QXJnR3VhcmQsaXNSYXdHdWFyZCxnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCxnZXRNZXRob2RHdWFyZFBheWxvYWQsZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkLGdldENvcHlNYXBFbnRyaWVzLGxpc3REaWZmZXJlbmNlLG9iamVjdE1hcCxxLEZhaWwsR0VUX0lOVEVSRkFDRV9HVUFSRDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjigI1fYSA9PiAoZ2V0TWV0aG9kTmFtZXMgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjigI1fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRo4oCNX2EpXV0sW1widG9UaHJvd2FibGVcIiwgWyRo4oCNX2EgPT4gKHRvVGhyb3dhYmxlID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV0sW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAobXVzdE1hdGNoID0gJGjigI1fYSldXSxbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJpc0F3YWl0QXJnR3VhcmRcIiwgWyRo4oCNX2EgPT4gKGlzQXdhaXRBcmdHdWFyZCA9ICRo4oCNX2EpXV0sW1wiaXNSYXdHdWFyZFwiLCBbJGjigI1fYSA9PiAoaXNSYXdHdWFyZCA9ICRo4oCNX2EpXV0sW1wiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWRcIiwgWyRo4oCNX2EgPT4gKGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkID0gJGjigI1fYSldXSxbXCJnZXRNZXRob2RHdWFyZFBheWxvYWRcIiwgWyRo4oCNX2EgPT4gKGdldE1ldGhvZEd1YXJkUGF5bG9hZCA9ICRo4oCNX2EpXV0sW1wiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkXCIsIFskaOKAjV9hID0+IChnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQgPSAkaOKAjV9hKV1dLFtcImdldENvcHlNYXBFbnRyaWVzXCIsIFskaOKAjV9hID0+IChnZXRDb3B5TWFwRW50cmllcyA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzXCIsIFtbXCJsaXN0RGlmZmVyZW5jZVwiLCBbJGjigI1fYSA9PiAobGlzdERpZmZlcmVuY2UgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjigI1fYSA9PiAob2JqZWN0TWFwID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCIuL2dldC1pbnRlcmZhY2UuanNcIiwgW1tcIkdFVF9JTlRFUkZBQ0VfR1VBUkRcIiwgWyRo4oCNX2EgPT4gKEdFVF9JTlRFUkZBQ0VfR1VBUkQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZGVmaW5lUHJvcGVydGllcyxmcm9tRW50cmllc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgUmF3TWV0aG9kR3VhcmQ9TS5jYWxsKCkucmVzdChNLnJhdygpKS5yZXR1cm5zKE0ucmF3KCkpO1xuXG5jb25zdCBSRURBQ1RFRF9SQVdfQVJHPSc8cmVkYWN0ZWQgcmF3IGFyZz4nO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgUGFzc2FibGVNZXRob2RHdWFyZD1NLmNhbGwoKS5yZXN0KE0uYW55KCkpLnJldHVybnMoTS5hbnkoKSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZGVmZW5kU3luY0FyZ3M9KHN5bmNBcmdzLG1hdGNoQ29uZmlnLGxhYmVsPXVuZGVmaW5lZCk9PntcbmNvbnN0e1xuZGVjbGFyZWRMZW4sXG5oYXNSZXN0QXJnR3VhcmQsXG5yZXN0QXJnR3VhcmRJc1JhdyxcbnBhcmFtc1BhdHRlcm4sXG5yZWRhY3RlZEluZGljZXN9PVxubWF0Y2hDb25maWc7XG5cbi8vXG4vL1xubGV0IG1hdGNoYWJsZUFyZ3M9c3luY0FyZ3M7XG5pZihyZXN0QXJnR3VhcmRJc1JhdyYmc3luY0FyZ3MubGVuZ3RoPmRlY2xhcmVkTGVuKXtcbmNvbnN0IHJlc3RMZW49c3luY0FyZ3MubGVuZ3RoLWRlY2xhcmVkTGVuO1xuY29uc3QgcmVkYWN0ZWRSZXN0PUFycmF5KHJlc3RMZW4pLmZpbGwoUkVEQUNURURfUkFXX0FSRyk7XG5tYXRjaGFibGVBcmdzPVsuLi5zeW5jQXJncy5zbGljZSgwLGRlY2xhcmVkTGVuKSwuLi5yZWRhY3RlZFJlc3RdO1xuIH1lbHNlIGlmKFxucmVkYWN0ZWRJbmRpY2VzLmxlbmd0aD4wJiZcbnJlZGFjdGVkSW5kaWNlc1swXTxzeW5jQXJncy5sZW5ndGgpXG57XG4vL1xuLy9cbm1hdGNoYWJsZUFyZ3M9Wy4uLnN5bmNBcmdzXTtcbiB9XG5cbmZvcihjb25zdCBpIG9mIHJlZGFjdGVkSW5kaWNlcyl7XG5pZihpPj1tYXRjaGFibGVBcmdzLmxlbmd0aCl7XG5icmVhaztcbiB9XG5tYXRjaGFibGVBcmdzW2ldPVJFREFDVEVEX1JBV19BUkc7XG4gfVxuXG5tdXN0TWF0Y2goaGFyZGVuKG1hdGNoYWJsZUFyZ3MpLHBhcmFtc1BhdHRlcm4sbGFiZWwpO1xuXG5pZihoYXNSZXN0QXJnR3VhcmQpe1xucmV0dXJuIHN5bmNBcmdzO1xuIH1cbnN5bmNBcmdzLmxlbmd0aDw9ZGVjbGFyZWRMZW58fFxuRmFpbCBgJHtxKGxhYmVsKX0gYWNjZXB0cyBhdCBtb3N0ICR7cShkZWNsYXJlZExlbil9IGFyZ3VtZW50cywgbm90ICR7cShcbnN5bmNBcmdzLmxlbmd0aClcbiB9OiAke3N5bmNBcmdzfWA7XG5yZXR1cm4gc3luY0FyZ3M7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBidWlsZE1hdGNoQ29uZmlnPShtZXRob2RHdWFyZFBheWxvYWQpPT57XG5jb25zdHtcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkUGF5bG9hZDtcblxuY29uc3QgbWF0Y2hhYmxlQXJnR3VhcmRzPVsuLi5hcmdHdWFyZHMsLi4ub3B0aW9uYWxBcmdHdWFyZHNdO1xuXG5jb25zdCByZWRhY3RlZEluZGljZXM9W107XG5mb3IobGV0IGk9MDtpPG1hdGNoYWJsZUFyZ0d1YXJkcy5sZW5ndGg7aSs9MSl7XG5pZihpc1Jhd0d1YXJkKG1hdGNoYWJsZUFyZ0d1YXJkc1tpXSkpe1xubWF0Y2hhYmxlQXJnR3VhcmRzW2ldPVJFREFDVEVEX1JBV19BUkc7XG5yZWRhY3RlZEluZGljZXMucHVzaChpKTtcbiB9XG4gfVxuXG4vL1xubGV0IG1hdGNoYWJsZVJlc3RBcmdHdWFyZD1yZXN0QXJnR3VhcmQ7XG5pZihpc1Jhd0d1YXJkKG1hdGNoYWJsZVJlc3RBcmdHdWFyZCkpe1xubWF0Y2hhYmxlUmVzdEFyZ0d1YXJkPU0uYXJyYXlPZihSRURBQ1RFRF9SQVdfQVJHKTtcbiB9XG5jb25zdCBtYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQ9aGFyZGVuKHtcbi4uLm1ldGhvZEd1YXJkUGF5bG9hZCxcbmFyZ0d1YXJkczptYXRjaGFibGVBcmdHdWFyZHMuc2xpY2UoMCxhcmdHdWFyZHMubGVuZ3RoKSxcbm9wdGlvbmFsQXJnR3VhcmRzOm1hdGNoYWJsZUFyZ0d1YXJkcy5zbGljZShhcmdHdWFyZHMubGVuZ3RoKSxcbnJlc3RBcmdHdWFyZDptYXRjaGFibGVSZXN0QXJnR3VhcmR9KTtcblxuXG5jb25zdCBwYXJhbXNQYXR0ZXJuPU0uc3BsaXRBcnJheShcbm1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZC5hcmdHdWFyZHMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQub3B0aW9uYWxBcmdHdWFyZHMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQucmVzdEFyZ0d1YXJkKTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmRlY2xhcmVkTGVuOm1hdGNoYWJsZUFyZ0d1YXJkcy5sZW5ndGgsXG5oYXNSZXN0QXJnR3VhcmQ6cmVzdEFyZ0d1YXJkIT09dW5kZWZpbmVkLFxucmVzdEFyZ0d1YXJkSXNSYXc6cmVzdEFyZ0d1YXJkIT09bWF0Y2hhYmxlUmVzdEFyZ0d1YXJkLFxucGFyYW1zUGF0dGVybixcbnJlZGFjdGVkSW5kaWNlcyxcbm1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZH0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZFN5bmNNZXRob2Q9KFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmRQYXlsb2FkLFxubGFiZWwpPT5cbntcbmNvbnN0e3JldHVybkd1YXJkfT1tZXRob2RHdWFyZFBheWxvYWQ7XG5jb25zdCBpc1Jhd1JldHVybj1pc1Jhd0d1YXJkKHJldHVybkd1YXJkKTtcbmNvbnN0IG1hdGNoQ29uZmlnPWJ1aWxkTWF0Y2hDb25maWcobWV0aG9kR3VhcmRQYXlsb2FkKTtcbmNvbnN0e3N5bmNNZXRob2R9PXtcbi8vXG5zeW5jTWV0aG9kKC4uLnN5bmNBcmdzKXtcbnRyeXtcbmNvbnN0IGNvbnRleHQ9Z2V0Q29udGV4dCh0aGlzKTtcbi8vXG5jb25zdCByZWFsQXJncz1kZWZlbmRTeW5jQXJncyhzeW5jQXJncyxtYXRjaENvbmZpZyxsYWJlbCk7XG5jb25zdCByZXN1bHQ9YXBwbHkoYmVoYXZpb3JNZXRob2QsY29udGV4dCxyZWFsQXJncyk7XG5pZighaXNSYXdSZXR1cm4pe1xubXVzdE1hdGNoKGhhcmRlbihyZXN1bHQpLHJldHVybkd1YXJkLCBgJHtsYWJlbH06IHJlc3VsdGApO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfWNhdGNoKHRocm93blRoaW5nKXtcbnRocm93IHRvVGhyb3dhYmxlKHRocm93blRoaW5nKTtcbiB9XG4gfX07XG5cbnJldHVybiBzeW5jTWV0aG9kO1xuIH07XG5cbi8qXG5cbiAqL1xuY29uc3QgZGVzeW5jPShtZXRob2RHdWFyZFBheWxvYWQpPT57XG5jb25zdHtcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkUGF5bG9hZDtcbiFpc0F3YWl0QXJnR3VhcmQocmVzdEFyZ0d1YXJkKXx8XG5GYWlsIGBSZXN0IGFyZ3MgbWF5IG5vdCBiZSBhd2FpdGVkOiAke3Jlc3RBcmdHdWFyZH1gO1xuY29uc3QgcmF3QXJnR3VhcmRzPVsuLi5hcmdHdWFyZHMsLi4ub3B0aW9uYWxBcmdHdWFyZHNdO1xuXG5jb25zdCBhd2FpdEluZGV4ZXM9W107XG5mb3IobGV0IGk9MDtpPHJhd0FyZ0d1YXJkcy5sZW5ndGg7aSs9MSl7XG5jb25zdCBhcmdHdWFyZD1yYXdBcmdHdWFyZHNbaV07XG5pZihpc0F3YWl0QXJnR3VhcmQoYXJnR3VhcmQpKXtcbnJhd0FyZ0d1YXJkc1tpXT1nZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZChhcmdHdWFyZCkuYXJnR3VhcmQ7XG5hd2FpdEluZGV4ZXMucHVzaChpKTtcbiB9XG4gfVxucmV0dXJue1xuYXdhaXRJbmRleGVzLFxucmF3TWV0aG9kR3VhcmRQYXlsb2FkOntcbi4uLm1ldGhvZEd1YXJkUGF5bG9hZCxcbmFyZ0d1YXJkczpyYXdBcmdHdWFyZHMuc2xpY2UoMCxhcmdHdWFyZHMubGVuZ3RoKSxcbm9wdGlvbmFsQXJnR3VhcmRzOnJhd0FyZ0d1YXJkcy5zbGljZShhcmdHdWFyZHMubGVuZ3RoKX19O1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZEFzeW5jTWV0aG9kPShcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKT0+XG57XG5jb25zdHtyZXR1cm5HdWFyZH09bWV0aG9kR3VhcmRQYXlsb2FkO1xuY29uc3QgaXNSYXdSZXR1cm49aXNSYXdHdWFyZChyZXR1cm5HdWFyZCk7XG5cbmNvbnN0e2F3YWl0SW5kZXhlcyxyYXdNZXRob2RHdWFyZFBheWxvYWR9PWRlc3luYyhtZXRob2RHdWFyZFBheWxvYWQpO1xuY29uc3QgbWF0Y2hDb25maWc9YnVpbGRNYXRjaENvbmZpZyhyYXdNZXRob2RHdWFyZFBheWxvYWQpO1xuXG5jb25zdHthc3luY01ldGhvZH09e1xuLy9cbmFzeW5jTWV0aG9kKC4uLmFyZ3Mpe1xuY29uc3QgYXdhaXRMaXN0PVtdO1xuZm9yKGNvbnN0IGkgb2YgYXdhaXRJbmRleGVzKXtcbmlmKGk+PWFyZ3MubGVuZ3RoKXtcbmJyZWFrO1xuIH1cbmF3YWl0TGlzdC5wdXNoKGFyZ3NbaV0pO1xuIH1cbmNvbnN0IHA9UHJvbWlzZS5hbGwoYXdhaXRMaXN0KTtcbmNvbnN0IHN5bmNBcmdzPVsuLi5hcmdzXTtcbmNvbnN0IHJlc3VsdFA9RS53aGVuKFxucCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyhhd2FpdGVkQXJncyk9PntcbmZvcihsZXQgaj0wO2o8YXdhaXRlZEFyZ3MubGVuZ3RoO2orPTEpe1xuc3luY0FyZ3NbYXdhaXRJbmRleGVzW2pdXT1hd2FpdGVkQXJnc1tqXTtcbiB9XG4vL1xuLy9cbmNvbnN0IGNvbnRleHQ9Z2V0Q29udGV4dCh0aGlzKTtcbmNvbnN0IHJlYWxBcmdzPWRlZmVuZFN5bmNBcmdzKHN5bmNBcmdzLG1hdGNoQ29uZmlnLGxhYmVsKTtcbnJldHVybiBhcHBseShiZWhhdmlvck1ldGhvZCxjb250ZXh0LHJlYWxBcmdzKTtcbiB9KTtcblxucmV0dXJuIEUud2hlbihyZXN1bHRQLChmdWxmaWxsbWVudCk9PntcbmlmKCFpc1Jhd1JldHVybil7XG5tdXN0TWF0Y2goaGFyZGVuKGZ1bGZpbGxtZW50KSxyZXR1cm5HdWFyZCwgYCR7bGFiZWx9OiByZXN1bHRgKTtcbiB9XG5yZXR1cm4gZnVsZmlsbG1lbnQ7XG4gfSkuY2F0Y2goKHJlYXNvbik9PlxuLy9cbi8vXG5Qcm9taXNlLnJlamVjdCh0b1Rocm93YWJsZShyZWFzb24pKSk7XG5cbiB9fTtcblxucmV0dXJuIGFzeW5jTWV0aG9kO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRNZXRob2Q9KGdldENvbnRleHQsYmVoYXZpb3JNZXRob2QsbWV0aG9kR3VhcmQsbGFiZWwpPT57XG5jb25zdCBtZXRob2RHdWFyZFBheWxvYWQ9Z2V0TWV0aG9kR3VhcmRQYXlsb2FkKG1ldGhvZEd1YXJkKTtcbmNvbnN0e2NhbGxLaW5kfT1tZXRob2RHdWFyZFBheWxvYWQ7XG5pZihjYWxsS2luZD09PSdzeW5jJyl7XG5yZXR1cm4gZGVmZW5kU3luY01ldGhvZChcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKTtcblxuIH1lbHNle1xuYXNzZXJ0KGNhbGxLaW5kPT09J2FzeW5jJyk7XG5yZXR1cm4gZGVmZW5kQXN5bmNNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBiaW5kTWV0aG9kPShcbm1ldGhvZFRhZyxcbmNvbnRleHRQcm92aWRlcixcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmQpPT5cbntcbmFzc2VydC50eXBlb2YoYmVoYXZpb3JNZXRob2QsJ2Z1bmN0aW9uJyk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGdldENvbnRleHQ9KHJlcHJlc2VudGF0aXZlKT0+e1xucmVwcmVzZW50YXRpdmV8fFxuLy9cbkZhaWwgYE1ldGhvZCAke21ldGhvZFRhZ30gY2FsbGVkIHdpdGhvdXQgJ3RoaXMnIG9iamVjdGA7XG5jb25zdCBjb250ZXh0PWNvbnRleHRQcm92aWRlcihyZXByZXNlbnRhdGl2ZSk7XG5pZihjb250ZXh0PT09dW5kZWZpbmVkKXtcbnRocm93IEZhaWwgYCR7cShcbm1ldGhvZFRhZylcbiB9IG1heSBvbmx5IGJlIGFwcGxpZWQgdG8gYSB2YWxpZCBpbnN0YW5jZTogJHtyZXByZXNlbnRhdGl2ZX1gO1xuIH1cbnJldHVybiBjb250ZXh0O1xuIH07XG5cbmNvbnN0IG1ldGhvZD1kZWZlbmRNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZCxcbm1ldGhvZFRhZyk7XG5cblxuZGVmaW5lUHJvcGVydGllcyhtZXRob2Qse1xubmFtZTp7dmFsdWU6bWV0aG9kVGFnfSxcbmxlbmd0aDp7dmFsdWU6YmVoYXZpb3JNZXRob2QubGVuZ3RofX0pO1xuXG5yZXR1cm4gbWV0aG9kO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZlbmRQcm90b3R5cGU9KFxudGFnLFxuY29udGV4dFByb3ZpZGVyLFxuYmVoYXZpb3JNZXRob2RzLFxudGhpc2Z1bE1ldGhvZHM9ZmFsc2UsXG5pbnRlcmZhY2VHdWFyZD11bmRlZmluZWQpPT5cbntcbmNvbnN0IHByb3RvdHlwZT17fTtcbmNvbnN0IG1ldGhvZE5hbWVzPWdldE1ldGhvZE5hbWVzKGJlaGF2aW9yTWV0aG9kcykuZmlsdGVyKFxuLy9cbi8vXG4oa2V5KT0+e1xuaWYoa2V5IT09J2NvbnN0cnVjdG9yJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCBjb25zdHJ1Y3Rvcj1iZWhhdmlvck1ldGhvZHMuY29uc3RydWN0b3I7XG5yZXR1cm4hKFxuY29uc3RydWN0b3IucHJvdG90eXBlJiZcbmNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj09PWNvbnN0cnVjdG9yKTtcblxuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IG1ldGhvZEd1YXJkcztcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZGVmYXVsdEd1YXJkcztcbmlmKGludGVyZmFjZUd1YXJkKXtcbmNvbnN0e1xuaW50ZXJmYWNlTmFtZSxcbm1ldGhvZEd1YXJkczptZyxcbnN5bWJvbE1ldGhvZEd1YXJkcyxcbnNsb3BweSxcbmRlZmF1bHRHdWFyZHM6ZGc9c2xvcHB5PydwYXNzYWJsZSc6ZGVmYXVsdEd1YXJkc309XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoaW50ZXJmYWNlR3VhcmQpO1xubWV0aG9kR3VhcmRzPWhhcmRlbih7XG4uLi5tZyxcbi4uLihzeW1ib2xNZXRob2RHdWFyZHMmJlxuZnJvbUVudHJpZXMoZ2V0Q29weU1hcEVudHJpZXMoc3ltYm9sTWV0aG9kR3VhcmRzKSkpfSk7XG5cbmRlZmF1bHRHdWFyZHM9ZGc7XG57XG5jb25zdCBtZXRob2RHdWFyZE5hbWVzPW93bktleXMobWV0aG9kR3VhcmRzKTtcbmNvbnN0IHVuaW1wbGVtZW50ZWQ9bGlzdERpZmZlcmVuY2UobWV0aG9kR3VhcmROYW1lcyxtZXRob2ROYW1lcyk7XG51bmltcGxlbWVudGVkLmxlbmd0aD09PTB8fFxuRmFpbCBgbWV0aG9kcyAke3EodW5pbXBsZW1lbnRlZCl9IG5vdCBpbXBsZW1lbnRlZCBieSAke3EodGFnKX1gO1xuaWYoZGVmYXVsdEd1YXJkcz09PXVuZGVmaW5lZCl7XG5jb25zdCB1bmd1YXJkZWQ9bGlzdERpZmZlcmVuY2UobWV0aG9kTmFtZXMsbWV0aG9kR3VhcmROYW1lcyk7XG51bmd1YXJkZWQubGVuZ3RoPT09MHx8XG5GYWlsIGBtZXRob2RzICR7cSh1bmd1YXJkZWQpfSBub3QgZ3VhcmRlZCBieSAke3EoaW50ZXJmYWNlTmFtZSl9YDtcbiB9XG4gfVxuIH1cblxuZm9yKGNvbnN0IHByb3Agb2YgbWV0aG9kTmFtZXMpe1xuY29uc3Qgb3JpZ2luYWxNZXRob2Q9YmVoYXZpb3JNZXRob2RzW3Byb3BdO1xuY29uc3R7c2hpZnRlZE1ldGhvZH09e1xuc2hpZnRlZE1ldGhvZCguLi5hcmdzKXtcbnJldHVybiBvcmlnaW5hbE1ldGhvZCh0aGlzLC4uLmFyZ3MpO1xuIH19O1xuXG5jb25zdCBiZWhhdmlvck1ldGhvZD10aGlzZnVsTWV0aG9kcz9vcmlnaW5hbE1ldGhvZDpzaGlmdGVkTWV0aG9kO1xuLy9cbi8vXG5sZXQgbWV0aG9kR3VhcmQ9bWV0aG9kR3VhcmRzJiZtZXRob2RHdWFyZHNbcHJvcF07XG5pZighbWV0aG9kR3VhcmQpe1xuc3dpdGNoKGRlZmF1bHRHdWFyZHMpe1xuY2FzZSB1bmRlZmluZWQ6e1xuaWYodGhpc2Z1bE1ldGhvZHMpe1xubWV0aG9kR3VhcmQ9UGFzc2FibGVNZXRob2RHdWFyZDtcbiB9ZWxzZXtcbm1ldGhvZEd1YXJkPVJhd01ldGhvZEd1YXJkO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UncGFzc2FibGUnOntcbm1ldGhvZEd1YXJkPVBhc3NhYmxlTWV0aG9kR3VhcmQ7XG5icmVhaztcbiB9XG5jYXNlJ3Jhdyc6e1xubWV0aG9kR3VhcmQ9UmF3TWV0aG9kR3VhcmQ7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYFVucmVjb2duaXplZCBkZWZhdWx0R3VhcmRzICR7cShkZWZhdWx0R3VhcmRzKX1gO1xuIH19XG5cbiB9XG5wcm90b3R5cGVbcHJvcF09YmluZE1ldGhvZChcbiBgSW4gJHtxKHByb3ApfSBtZXRob2Qgb2YgKCR7dGFnfSlgLFxuY29udGV4dFByb3ZpZGVyLFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZCk7XG5cbiB9XG5cbmlmKCFoYXNPd25Qcm9wZXJ0eU9mKHByb3RvdHlwZSxHRVRfSU5URVJGQUNFX0dVQVJEKSl7XG5jb25zdCBnZXRJbnRlcmZhY2VHdWFyZE1ldGhvZD17XG5bR0VUX0lOVEVSRkFDRV9HVUFSRF0oKXtcbi8vXG5yZXR1cm4gaW50ZXJmYWNlR3VhcmQ7XG4gfX1bXG5HRVRfSU5URVJGQUNFX0dVQVJEXTtcbnByb3RvdHlwZVtHRVRfSU5URVJGQUNFX0dVQVJEXT1iaW5kTWV0aG9kKFxuIGBJbiAke3EoR0VUX0lOVEVSRkFDRV9HVUFSRCl9IG1ldGhvZCBvZiAoJHt0YWd9KWAsXG5jb250ZXh0UHJvdmlkZXIsXG5nZXRJbnRlcmZhY2VHdWFyZE1ldGhvZCxcblBhc3NhYmxlTWV0aG9kR3VhcmQpO1xuXG4gfVxuXG5yZXR1cm4gRmFyKFxudGFnLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnByb3RvdHlwZSk7XG5cblxuIH07JGjigI1fb25jZS5kZWZlbmRQcm90b3R5cGUoZGVmZW5kUHJvdG90eXBlKTtcbmhhcmRlbihkZWZlbmRQcm90b3R5cGUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmZW5kUHJvdG90eXBlS2l0PShcbnRhZyxcbmNvbnRleHRQcm92aWRlcktpdCxcbmJlaGF2aW9yTWV0aG9kc0tpdCxcbnRoaXNmdWxNZXRob2RzPWZhbHNlLFxuaW50ZXJmYWNlR3VhcmRLaXQ9dW5kZWZpbmVkKT0+XG57XG5jb25zdCBmYWNldE5hbWVzPW93bktleXMoYmVoYXZpb3JNZXRob2RzS2l0KS5zb3J0KCk7XG5mYWNldE5hbWVzLmxlbmd0aD4xfHxGYWlsIGBBIG11bHRpLWZhY2V0IG9iamVjdCBtdXN0IGhhdmUgbXVsdGlwbGUgZmFjZXRzYDtcbmlmKGludGVyZmFjZUd1YXJkS2l0KXtcbmNvbnN0IGludGVyZmFjZU5hbWVzPW93bktleXMoaW50ZXJmYWNlR3VhcmRLaXQpO1xuY29uc3QgZXh0cmFJbnRlcmZhY2VOYW1lcz1saXN0RGlmZmVyZW5jZShmYWNldE5hbWVzLGludGVyZmFjZU5hbWVzKTtcbmV4dHJhSW50ZXJmYWNlTmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBJbnRlcmZhY2VzICR7cShleHRyYUludGVyZmFjZU5hbWVzKX0gbm90IGltcGxlbWVudGVkIGJ5ICR7cSh0YWcpfWA7XG5jb25zdCBleHRyYUZhY2V0TmFtZXM9bGlzdERpZmZlcmVuY2UoaW50ZXJmYWNlTmFtZXMsZmFjZXROYW1lcyk7XG5leHRyYUZhY2V0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBGYWNldHMgJHtxKGV4dHJhRmFjZXROYW1lcyl9IG9mICR7cSh0YWcpfSBub3QgZ3VhcmRlZCBieSBpbnRlcmZhY2VzYDtcbiB9XG5jb25zdCBjb250ZXh0TWFwTmFtZXM9b3duS2V5cyhjb250ZXh0UHJvdmlkZXJLaXQpO1xuY29uc3QgZXh0cmFDb250ZXh0TmFtZXM9bGlzdERpZmZlcmVuY2UoZmFjZXROYW1lcyxjb250ZXh0TWFwTmFtZXMpO1xuZXh0cmFDb250ZXh0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBDb250ZXh0cyAke3EoZXh0cmFDb250ZXh0TmFtZXMpfSBub3QgaW1wbGVtZW50ZWQgYnkgJHtxKHRhZyl9YDtcbmNvbnN0IGV4dHJhRmFjZXROYW1lcz1saXN0RGlmZmVyZW5jZShjb250ZXh0TWFwTmFtZXMsZmFjZXROYW1lcyk7XG5leHRyYUZhY2V0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBGYWNldHMgJHtxKGV4dHJhRmFjZXROYW1lcyl9IG9mICR7cSh0YWcpfSBtaXNzaW5nIGNvbnRleHRzYDtcbmNvbnN0IHByb3RvS2l0PW9iamVjdE1hcChiZWhhdmlvck1ldGhvZHNLaXQsKGJlaGF2aW9yTWV0aG9kcyxmYWNldE5hbWUpPT5cbmRlZmVuZFByb3RvdHlwZShcbiBgJHt0YWd9ICR7U3RyaW5nKGZhY2V0TmFtZSl9YCxcbmNvbnRleHRQcm92aWRlcktpdFtmYWNldE5hbWVdLFxuYmVoYXZpb3JNZXRob2RzLFxudGhpc2Z1bE1ldGhvZHMsXG5pbnRlcmZhY2VHdWFyZEtpdCYmaW50ZXJmYWNlR3VhcmRLaXRbZmFjZXROYW1lXSkpO1xuXG5cbnJldHVybiBwcm90b0tpdDtcbiB9OyRo4oCNX29uY2UuZGVmZW5kUHJvdG90eXBlS2l0KGRlZmVuZFByb3RvdHlwZUtpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZlbmRQcm90b3R5cGUiOlsiZGVmZW5kUHJvdG90eXBlIl0sImRlZmVuZFByb3RvdHlwZUtpdCI6WyJkZWZlbmRQcm90b3R5cGVLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAcrUHzzwCAAA8AgAAJQAAAEBlbmRvL2V4by12MS41LjMvc3JjL2dldC1pbnRlcmZhY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIkdFVF9JTlRFUkZBQ0VfR1VBUkQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBHRVRfSU5URVJGQUNFX0dVQVJEPSdfX2dldEludGVyZmFjZUd1YXJkX18nO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLkdFVF9JTlRFUkZBQ0VfR1VBUkQoR0VUX0lOVEVSRkFDRV9HVUFSRCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJHRVRfSU5URVJGQUNFX0dVQVJEIjpbIkdFVF9JTlRFUkZBQ0VfR1VBUkQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh5JSp08BAABPAQAAHQAAAEBlbmRvL2V4by12MS41LjMvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA0vIA1bAgAAWwIAAB0AAABAZW5kby9mYXItdjEuMS41L3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcGFzcy1zdHlsZSJdLCJleHBvcnRzIjpbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtdXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGVuZG8vZXZlbnR1YWwtc2VuZCI6W1siRSIsIkUiXV0sIkBlbmRvL3Bhc3Mtc3R5bGUiOltbIkZhciIsIkZhciJdLFsiZ2V0SW50ZXJmYWNlT2YiLCJnZXRJbnRlcmZhY2VPZiJdLFsicGFzc1N0eWxlT2YiLCJwYXNzU3R5bGVPZiJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAiOBv8nkHAAB5BwAAHQAAAEBlbmRvL21hcnNoYWwtdjEuNS4zL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyIsIi4vc3JjL21hcnNoYWwuanMiLCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyIsIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIiwiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiLCIuL3NyYy9yYW5rT3JkZXIuanMiLCIuL3NyYy90eXBlcy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiXSwiZXhwb3J0cyI6WyJhc3NlcnRSYW5rU29ydGVkIiwiYXNzZXJ0UmFua1NvcnRlZCIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsInBhcnNlIiwicGFyc2UiLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9wYXNzLXN0eWxlIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qc1wiLCBbXV0sW1wiLi9zcmMvbWFyc2hhbC5qc1wiLCBbXV0sW1wiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwtanVzdGluLmpzXCIsIFtdXSxbXCIuL3NyYy9lbmNvZGVQYXNzYWJsZS5qc1wiLCBbXV0sW1wiLi9zcmMvcmFua09yZGVyLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyI6W1siUUNMQVNTIiwiUUNMQVNTIl1dLCIuL3NyYy9tYXJzaGFsLmpzIjpbWyJtYWtlTWFyc2hhbCIsIm1ha2VNYXJzaGFsIl1dLCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyI6W1sic3RyaW5naWZ5Iiwic3RyaW5naWZ5Il0sWyJwYXJzZSIsInBhcnNlIl1dLCIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qcyI6W1siZGVjb2RlVG9KdXN0aW4iLCJkZWNvZGVUb0p1c3RpbiJdXSwiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiOltbIm1ha2VQYXNzYWJsZUtpdCIsIm1ha2VQYXNzYWJsZUtpdCJdLFsibWFrZUVuY29kZVBhc3NhYmxlIiwibWFrZUVuY29kZVBhc3NhYmxlIl0sWyJtYWtlRGVjb2RlUGFzc2FibGUiLCJtYWtlRGVjb2RlUGFzc2FibGUiXSxbImlzRW5jb2RlZFJlbW90YWJsZSIsImlzRW5jb2RlZFJlbW90YWJsZSJdLFsiemVyb1BhZCIsInplcm9QYWQiXSxbInJlY29yZE5hbWVzIiwicmVjb3JkTmFtZXMiXSxbInJlY29yZFZhbHVlcyIsInJlY29yZFZhbHVlcyJdXSwiLi9zcmMvcmFua09yZGVyLmpzIjpbWyJ0cml2aWFsQ29tcGFyYXRvciIsInRyaXZpYWxDb21wYXJhdG9yIl0sWyJhc3NlcnRSYW5rU29ydGVkIiwiYXNzZXJ0UmFua1NvcnRlZCJdLFsiY29tcGFyZVJhbmsiLCJjb21wYXJlUmFuayJdLFsiaXNSYW5rU29ydGVkIiwiaXNSYW5rU29ydGVkIl0sWyJzb3J0QnlSYW5rIiwic29ydEJ5UmFuayJdLFsiY29tcGFyZUFudGlSYW5rIiwiY29tcGFyZUFudGlSYW5rIl0sWyJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCIsIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0Il0sWyJnZXRQYXNzU3R5bGVDb3ZlciIsImdldFBhc3NTdHlsZUNvdmVyIl0sWyJpbnRlcnNlY3RSYW5rQ292ZXJzIiwiaW50ZXJzZWN0UmFua0NvdmVycyJdLFsidW5pb25SYW5rQ292ZXJzIiwidW5pb25SYW5rQ292ZXJzIl1dLCJAZW5kby9wYXNzLXN0eWxlIjpbWyJkZWVwbHlGdWxmaWxsZWQiLCJkZWVwbHlGdWxmaWxsZWQiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHLn8HFuQwAAbkMAACoAAABAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvZW5jb2RlUGFzc2FibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImlzRW5jb2RlZFJlbW90YWJsZSIsIm1ha2VEZWNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VQYXNzYWJsZUtpdCIsInBhc3NTdHlsZVByZWZpeGVzIiwicmVjb3JkTmFtZXMiLCJyZWNvcmRWYWx1ZXMiLCJ6ZXJvUGFkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRUYWcsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixhc3NlcnRSZWNvcmQsaXNFcnJvckxpa2UsbmFtZUZvclBhc3NhYmxlU3ltYm9sLHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxiLHEsRmFpbDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRUYWdcIiwgWyRo4oCNX2EgPT4gKGdldFRhZyA9ICRo4oCNX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjigI1fYSA9PiAobWFrZVRhZ2dlZCA9ICRo4oCNX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJhc3NlcnRSZWNvcmRcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFJlY29yZCA9ICRo4oCNX2EpXV0sW1wiaXNFcnJvckxpa2VcIiwgWyRo4oCNX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjigI1fYSldXSxbXCJuYW1lRm9yUGFzc2FibGVTeW1ib2xcIiwgWyRo4oCNX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRo4oCNX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaOKAjV9hID0+IChwYXNzYWJsZVN5bWJvbEZvck5hbWUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJiXCIsIFskaOKAjV9hID0+IChiID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7ZnJvbUVudHJpZXMsaXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8vXG5jb25zdCByQzA9L1tcXHgwMC1cXHgxRl0vO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGdldFN1ZmZpeD0oc3RyLGluZGV4KT0+aW5kZXg9PT0wP3N0cjpzdHIuc3Vic3RyaW5nKGluZGV4KTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcmVjb3JkTmFtZXM9KHJlY29yZCk9PlxuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4oLyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJlY29yZCkuc29ydCgpLnJldmVyc2UoKSk7JGjigI1fb25jZS5yZWNvcmROYW1lcyhyZWNvcmROYW1lcyk7XG5oYXJkZW4ocmVjb3JkTmFtZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICByZWNvcmRWYWx1ZXM9KHJlY29yZCxuYW1lcyk9PlxuaGFyZGVuKG5hbWVzLm1hcCgobmFtZSk9PnJlY29yZFtuYW1lXSkpOyRo4oCNX29uY2UucmVjb3JkVmFsdWVzKHJlY29yZFZhbHVlcyk7XG5oYXJkZW4ocmVjb3JkVmFsdWVzKTtcblxuY29uc3QgemVyb2VzPUFycmF5KDE2KS5cbmZpbGwodW5kZWZpbmVkKS5cbm1hcCgoXyxpKT0+JzAnLnJlcGVhdChpKSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB6ZXJvUGFkPShuLHNpemUpPT57XG5jb25zdCBuU3RyPSBgJHtufWA7XG5jb25zdCBmaWxsTGVuPXNpemUtblN0ci5sZW5ndGg7XG5pZihmaWxsTGVuPT09MClyZXR1cm4gblN0cjtcbmFzc2VydChmaWxsTGVuPjAmJmZpbGxMZW48emVyb2VzLmxlbmd0aCk7XG5yZXR1cm4gYCR7emVyb2VzW2ZpbGxMZW5dfSR7blN0cn1gO1xuIH07JGjigI1fb25jZS56ZXJvUGFkKHplcm9QYWQpO1xuaGFyZGVuKHplcm9QYWQpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGFzTnVtYmVyPW5ldyBGbG9hdDY0QXJyYXkoMSk7XG5jb25zdCBhc0JpdHM9bmV3IEJpZ1VpbnQ2NEFycmF5KGFzTnVtYmVyLmJ1ZmZlcik7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbmNvbnN0IENhbm9uaWNhbE5hTkJpdHM9J2ZmZjgwMDAwMDAwMDAwMDAnO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQmluYXJ5NjQ9KG4pPT57XG4vL1xuaWYoaXMobiwtMCkpe1xubj0wO1xuIH1lbHNlIGlmKGlzKG4sTmFOKSl7XG5yZXR1cm4gYGYke0Nhbm9uaWNhbE5hTkJpdHN9YDtcbiB9XG5hc051bWJlclswXT1uO1xubGV0IGJpdHM9YXNCaXRzWzBdO1xuaWYobjwwKXtcbmJpdHNePTB4ZmZmZmZmZmZmZmZmZmZmZm47XG4gfWVsc2V7XG5iaXRzXj0weDgwMDAwMDAwMDAwMDAwMDBuO1xuIH1cbnJldHVybiBgZiR7emVyb1BhZChiaXRzLnRvU3RyaW5nKDE2KSwxNil9YDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVCaW5hcnk2ND0oZW5jb2RlZCxza2lwPTApPT57XG5lbmNvZGVkLmNoYXJBdChza2lwKT09PSdmJ3x8RmFpbCBgRW5jb2RlZCBudW1iZXIgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IGJpdHM9QmlnSW50KCBgMHgke2dldFN1ZmZpeChlbmNvZGVkLHNraXArMSl9YCk7XG5pZihlbmNvZGVkLmNoYXJBdChza2lwKzEpPCc4Jyl7XG5iaXRzXj0weGZmZmZmZmZmZmZmZmZmZmZuO1xuIH1lbHNle1xuYml0c149MHg4MDAwMDAwMDAwMDAwMDAwbjtcbiB9XG5hc0JpdHNbMF09Yml0cztcbmNvbnN0IHJlc3VsdD1hc051bWJlclswXTtcbiFpcyhyZXN1bHQsLTApfHxcbkZhaWwgYFVuZXhwZWN0ZWQgbmVnYXRpdmUgemVybzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVCaWdJbnQ9KG4pPT57XG5jb25zdCBhYnM9bjwwbj8tbjpuO1xuY29uc3QgbkRpZ2l0cz1hYnMudG9TdHJpbmcoKS5sZW5ndGg7XG5jb25zdCBsRGlnaXRzPW5EaWdpdHMudG9TdHJpbmcoKS5sZW5ndGg7XG5pZihuPDBuKXtcbnJldHVybiBgbiR7XG4vL1xuLy9cbicjJy5yZXBlYXQobERpZ2l0cy0xKVxuIH0ke1xuLy9cbigxMCoqbERpZ2l0cy1uRGlnaXRzKS50b1N0cmluZygpLnBhZFN0YXJ0KGxEaWdpdHMsJzAnKVxuIH06JHtcbi8vXG4oMTBuKipCaWdJbnQobkRpZ2l0cykrbikudG9TdHJpbmcoKS5wYWRTdGFydChuRGlnaXRzLCcwJylcbiB9YDtcbiB9ZWxzZXtcbnJldHVybiBgcCR7XG4vL1xuLy9cbid+Jy5yZXBlYXQobERpZ2l0cy0xKVxuIH0ke1xuLy9cbm5EaWdpdHNcbiB9OiR7XG4vL1xublxuIH1gO1xuIH1cbiB9O1xuXG5jb25zdCByQmlnSW50UGF5bG9hZD0vKFswLTldKykoOihbMC05XSskfCl8KS9zO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQmlnSW50PShlbmNvZGVkKT0+e1xuY29uc3QgdHlwZVByZWZpeD1lbmNvZGVkLmNoYXJBdCgwKTsvL1xudHlwZVByZWZpeD09PSdwJ3x8XG50eXBlUHJlZml4PT09J24nfHxcbkZhaWwgYEVuY29kZWQgYmlnaW50IGV4cGVjdGVkOiAke2VuY29kZWR9YDtcblxuY29uc3R7XG5pbmRleDpsRGlnaXRzLFxuMTpzbkRpZ2l0cyxcbjI6dGFpbCxcbjM6ZGlnaXRzfT1cbmVuY29kZWQubWF0Y2gockJpZ0ludFBheWxvYWQpfHxGYWlsIGBEaWdpdCBjb3VudCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5cbnNuRGlnaXRzLmxlbmd0aD09PWxEaWdpdHN8fFxuRmFpbCBgVW5hcnktcHJlZml4ZWQgZGVjaW1hbCBkaWdpdCBjb3VudCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5sZXQgbkRpZ2l0cz1wYXJzZUludChzbkRpZ2l0cywxMCk7XG5pZih0eXBlUHJlZml4PT09J24nKXtcbi8vXG4vL1xubkRpZ2l0cz0xMCoqLyogICAgICAgICAgICAgICAgICovbERpZ2l0cy1uRGlnaXRzO1xuIH1cblxudGFpbC5jaGFyQXQoMCk9PT0nOid8fEZhaWwgYFNlcGFyYXRvciBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5kaWdpdHMubGVuZ3RoPT09bkRpZ2l0c3x8XG5GYWlsIGBGaXhlZC1sZW5ndGggZGlnaXQgc2VxdWVuY2UgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IG49QmlnSW50KGRpZ2l0cyk7XG5pZih0eXBlUHJlZml4PT09J24nKXtcbi8vXG4vL1xubj0tKDEwbioqQmlnSW50KG5EaWdpdHMpLW4pO1xuIH1cblxucmV0dXJuIG47XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzdHJpbmdFc2NhcGVzPUFycmF5KDB4MjIpLlxuZmlsbCh1bmRlZmluZWQpLlxubWFwKChfLGNwKT0+e1xuc3dpdGNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY3ApKXtcbmNhc2UnICc6XG5yZXR1cm4nIV8nO1xuY2FzZSchJzpcbnJldHVybichfCc7XG5kZWZhdWx0OlxucmV0dXJuIGAhJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKzB4MjEpfWA7fVxuXG4gfSk7XG5zdHJpbmdFc2NhcGVzWydeJy5jaGFyQ29kZUF0KDApXT0nX0AnO1xuc3RyaW5nRXNjYXBlc1snXycuY2hhckNvZGVBdCgwKV09J19fJztcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeD0oc3RyKT0+XG5zdHIucmVwbGFjZSgvW1xcMC0hXl9dL2csKGNoKT0+c3RyaW5nRXNjYXBlc1tjaC5jaGFyQ29kZUF0KDApXSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUNvbXBhY3RTdHJpbmdTdWZmaXg9KGVuY29kZWQpPT57XG5yZXR1cm4gZW5jb2RlZC5yZXBsYWNlKC8oW1xcMC0hX10pKC58XFxuKT8vZywoZXNjLHByZWZpeCxzdWZmaXgpPT57XG5zd2l0Y2goZXNjKXtcbmNhc2UnIV8nOlxucmV0dXJuJyAnO1xuY2FzZSchfCc6XG5yZXR1cm4nISc7XG5jYXNlJ19AJzpcbnJldHVybideJztcbmNhc2UnX18nOlxucmV0dXJuJ18nO1xuZGVmYXVsdDp7XG5jb25zdCBjaD0vKiAgICAgICAgICAgICAgICAgKi9zdWZmaXg7XG4vL1xuLy9cbnByZWZpeD09PSchJyYmc3VmZml4IT09dW5kZWZpbmVkJiZjaD49JyEnJiZjaDw9J0AnfHxcbkZhaWwgYGludmFsaWQgc3RyaW5nIGVzY2FwZTogJHtxKGVzYyl9YDtcbnJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoLmNoYXJDb2RlQXQoMCktMHgyMSk7XG4gfX1cblxuIH0pO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUxlZ2FjeVN0cmluZ1N1ZmZpeD0oc3RyKT0+c3RyO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVMZWdhY3lTdHJpbmdTdWZmaXg9KGVuY29kZWQpPT5lbmNvZGVkO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUNvbXBhY3RBcnJheT0oYXJyYXksZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBjaGFycz1bJ14nXTtcbmZvcihjb25zdCBlbGVtZW50IG9mIGFycmF5KXtcbmNvbnN0IGVuYz1lbmNvZGVQYXNzYWJsZShlbGVtZW50KTtcbmNoYXJzLnB1c2goZW5jLCcgJyk7XG4gfVxucmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQ29tcGFjdEFycmF5PShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmNvbnN0IGVsZW1lbnRzPVtdO1xubGV0IGRlcHRoPTA7XG4vL1xuLy9cbmxldCBuZXh0SW5kZXg9c2tpcCsxO1xubGV0IGN1cnJlbnRFbGVtZW50U3RhcnQ9c2tpcCsxO1xuZm9yKGNvbnN0ezA6Y2gsaW5kZXg6aX1vZiBlbmNvZGVkLm1hdGNoQWxsKC9bXFxeIF0vZykpe1xuY29uc3QgaW5kZXg9LyogICAgICAgICAgICAgICAgICovaTtcbmlmKGluZGV4PD1za2lwKXtcbmlmKGluZGV4PT09c2tpcCl7XG5jaD09PSdeJ3x8RmFpbCBgRW5jb2RlZCBhcnJheSBleHBlY3RlZDogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuIH1cbiB9ZWxzZSBpZihjaD09PSdeJyl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmRlcHRoKz0xO1xuIH1lbHNle1xuLy9cbmlmKGluZGV4PT09bmV4dEluZGV4KXtcbi8vXG5kZXB0aC09MTtcbmRlcHRoPj0wfHxcbi8vXG5GYWlsIGB1bmV4cGVjdGVkIGFycmF5IGVsZW1lbnQgdGVybWluYXRvcjogJHtlbmNvZGVkLnNsaWNlKHNraXAsaW5kZXgrMil9YDtcbiB9XG5pZihkZXB0aD09PTApe1xuLy9cbmVsZW1lbnRzLnB1c2goXG5kZWNvZGVQYXNzYWJsZShlbmNvZGVkLnNsaWNlKGN1cnJlbnRFbGVtZW50U3RhcnQsaW5kZXgpKSk7XG5cbmN1cnJlbnRFbGVtZW50U3RhcnQ9aW5kZXgrMTtcbiB9XG4gfVxuLy9cbm5leHRJbmRleD1pbmRleCsxO1xuIH1cbmRlcHRoPT09MHx8RmFpbCBgdW50ZXJtaW5hdGVkIGFycmF5OiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5uZXh0SW5kZXg9PT1lbmNvZGVkLmxlbmd0aHx8XG5GYWlsIGB1bnRlcm1pbmF0ZWQgYXJyYXkgZWxlbWVudDogJHtnZXRTdWZmaXgoXG5lbmNvZGVkLFxuY3VycmVudEVsZW1lbnRTdGFydClcbiB9YDtcbnJldHVybiBoYXJkZW4oZWxlbWVudHMpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUxlZ2FjeUFycmF5PShhcnJheSxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IGNoYXJzPVsnWyddO1xuZm9yKGNvbnN0IGVsZW1lbnQgb2YgYXJyYXkpe1xuY29uc3QgZW5jPWVuY29kZVBhc3NhYmxlKGVsZW1lbnQpO1xuZm9yKGNvbnN0IGMgb2YgZW5jKXtcbmlmKGM9PT0nXFx1MDAwMCd8fGM9PT0nXFx1MDAwMScpe1xuY2hhcnMucHVzaCgnXFx1MDAwMScpO1xuIH1cbmNoYXJzLnB1c2goYyk7XG4gfVxuY2hhcnMucHVzaCgnXFx1MDAwMCcpO1xuIH1cbnJldHVybiBjaGFycy5qb2luKCcnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUxlZ2FjeUFycmF5PShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmNvbnN0IGVsZW1lbnRzPVtdO1xuY29uc3QgZWxlbUNoYXJzPVtdO1xuLy9cbi8vXG5sZXQgc3RpbGxUb1NraXA9c2tpcCsxO1xubGV0IGluRXNjYXBlPWZhbHNlO1xuZm9yKGNvbnN0IGMgb2YgZW5jb2RlZCl7XG5pZihzdGlsbFRvU2tpcD4wKXtcbnN0aWxsVG9Ta2lwLT0xO1xuaWYoc3RpbGxUb1NraXA9PT0wKXtcbmM9PT0nWyd8fEZhaWwgYEVuY29kZWQgYXJyYXkgZXhwZWN0ZWQ6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9XG4gfWVsc2UgaWYoaW5Fc2NhcGUpe1xuYz09PSdcXHUwMDAwJ3x8XG5jPT09J1xcdTAwMDEnfHxcbkZhaWwgYFVuZXhwZWN0ZWQgY2hhcmFjdGVyIGFmdGVyIHUwMDAxIGVzY2FwZTogJHtjfWA7XG5lbGVtQ2hhcnMucHVzaChjKTtcbiB9ZWxzZSBpZihjPT09J1xcdTAwMDAnKXtcbmNvbnN0IGVuY29kZWRFbGVtZW50PWVsZW1DaGFycy5qb2luKCcnKTtcbmVsZW1DaGFycy5sZW5ndGg9MDtcbmNvbnN0IGVsZW1lbnQ9ZGVjb2RlUGFzc2FibGUoZW5jb2RlZEVsZW1lbnQpO1xuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiB9ZWxzZSBpZihjPT09J1xcdTAwMDEnKXtcbmluRXNjYXBlPXRydWU7XG4vL1xuY29udGludWU7XG4gfWVsc2V7XG5lbGVtQ2hhcnMucHVzaChjKTtcbiB9XG5pbkVzY2FwZT1mYWxzZTtcbiB9XG4haW5Fc2NhcGV8fEZhaWwgYHVuZXhwZWN0ZWQgZW5kIG9mIGVuY29kaW5nICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmVsZW1DaGFycy5sZW5ndGg9PT0wfHxcbkZhaWwgYGVuY29kaW5nIHRlcm1pbmF0ZWQgZWFybHk6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbnJldHVybiBoYXJkZW4oZWxlbWVudHMpO1xuIH07XG5cbmNvbnN0IGVuY29kZVJlY29yZD0ocmVjb3JkLGVuY29kZUFycmF5LGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgbmFtZXM9cmVjb3JkTmFtZXMocmVjb3JkKTtcbmNvbnN0IHZhbHVlcz1yZWNvcmRWYWx1ZXMocmVjb3JkLG5hbWVzKTtcbnJldHVybiBgKCR7ZW5jb2RlQXJyYXkoaGFyZGVuKFtuYW1lcyx2YWx1ZXNdKSxlbmNvZGVQYXNzYWJsZSl9YDtcbiB9O1xuXG5jb25zdCBkZWNvZGVSZWNvcmQ9KGVuY29kZWQsZGVjb2RlQXJyYXksZGVjb2RlUGFzc2FibGUsc2tpcD0wKT0+e1xuYXNzZXJ0KGVuY29kZWQuY2hhckF0KHNraXApPT09JygnKTtcbi8vXG4vL1xuY29uc3QgdW56aXBwZWRFbnRyaWVzPWRlY29kZUFycmF5KGVuY29kZWQsZGVjb2RlUGFzc2FibGUsc2tpcCsxKTtcbnVuemlwcGVkRW50cmllcy5sZW5ndGg9PT0yfHxcbkZhaWwgYGV4cGVjdGVkIGtleXMsdmFsdWVzIHBhaXI6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0W2tleXMsdmFsc109dW56aXBwZWRFbnRyaWVzO1xuXG5wYXNzU3R5bGVPZihrZXlzKT09PSdjb3B5QXJyYXknJiZcbnBhc3NTdHlsZU9mKHZhbHMpPT09J2NvcHlBcnJheScmJlxua2V5cy5sZW5ndGg9PT12YWxzLmxlbmd0aCYmXG5rZXlzLmV2ZXJ5KChrZXkpPT50eXBlb2Yga2V5PT09J3N0cmluZycpfHxcbkZhaWwgYG5vdCBhIHZhbGlkIHJlY29yZCBlbmNvZGluZzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuY29uc3QgbWFwRW50cmllcz1rZXlzLm1hcCgoa2V5LGkpPT5ba2V5LHZhbHNbaV1dKTtcbmNvbnN0IHJlY29yZD1oYXJkZW4oZnJvbUVudHJpZXMobWFwRW50cmllcykpO1xuYXNzZXJ0UmVjb3JkKHJlY29yZCwnZGVjb2RlZCByZWNvcmQnKTtcbnJldHVybiByZWNvcmQ7XG4gfTtcblxuY29uc3QgZW5jb2RlVGFnZ2VkPSh0YWdnZWQsZW5jb2RlQXJyYXksZW5jb2RlUGFzc2FibGUpPT5cbiBgOiR7ZW5jb2RlQXJyYXkoaGFyZGVuKFtnZXRUYWcodGFnZ2VkKSx0YWdnZWQucGF5bG9hZF0pLGVuY29kZVBhc3NhYmxlKX1gO1xuXG5jb25zdCBkZWNvZGVUYWdnZWQ9KGVuY29kZWQsZGVjb2RlQXJyYXksZGVjb2RlUGFzc2FibGUsc2tpcD0wKT0+e1xuYXNzZXJ0KGVuY29kZWQuY2hhckF0KHNraXApPT09JzonKTtcbi8vXG4vL1xuY29uc3QgdGFnZ2VkUGF5bG9hZD1kZWNvZGVBcnJheShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXArMSk7XG50YWdnZWRQYXlsb2FkLmxlbmd0aD09PTJ8fFxuRmFpbCBgZXhwZWN0ZWQgdGFnLHBheWxvYWQgcGFpcjogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuY29uc3RbdGFnLHBheWxvYWRdPXRhZ2dlZFBheWxvYWQ7XG5wYXNzU3R5bGVPZih0YWcpPT09J3N0cmluZyd8fFxuRmFpbCBgbm90IGEgdmFsaWQgdGFnZ2VkIGVuY29kaW5nOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcscGF5bG9hZCk7XG4gfTtcblxuY29uc3QgbWFrZUVuY29kZVJlbW90YWJsZT0odW5zYWZlRW5jb2RlUmVtb3RhYmxlLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlPShyLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlUmVtb3RhYmxlKHIsaW5uZXJFbmNvZGUpO1xudHlwZW9mIGVuY29kaW5nPT09J3N0cmluZycmJmVuY29kaW5nLmNoYXJBdCgwKT09PSdyJ3x8XG5GYWlsIGBSZW1vdGFibGUgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiclwiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnUmVtb3RhYmxlJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVSZW1vdGFibGU7XG4gfTtcblxuY29uc3QgbWFrZUVuY29kZVByb21pc2U9KHVuc2FmZUVuY29kZVByb21pc2UsdmVyaWZ5RW5jb2RpbmcpPT57XG5jb25zdCBlbmNvZGVQcm9taXNlPShwLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlUHJvbWlzZShwLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0nPyd8fFxuRmFpbCBgUHJvbWlzZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCI/XCI6ICR7ZW5jb2Rpbmd9YDtcbnZlcmlmeUVuY29kaW5nKGVuY29kaW5nLCdQcm9taXNlJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVQcm9taXNlO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVFcnJvcj0odW5zYWZlRW5jb2RlRXJyb3IsdmVyaWZ5RW5jb2RpbmcpPT57XG5jb25zdCBlbmNvZGVFcnJvcj0oZXJyLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlRXJyb3IoZXJyLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0nISd8fFxuRmFpbCBgRXJyb3IgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiIVwiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnRXJyb3InKTtcbnJldHVybiBlbmNvZGluZztcbiB9O1xucmV0dXJuIGVuY29kZUVycm9yO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlubmVyRW5jb2RlPShlbmNvZGVTdHJpbmdTdWZmaXgsZW5jb2RlQXJyYXksb3B0aW9ucyk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlOnVuc2FmZUVuY29kZVJlbW90YWJsZSxcbmVuY29kZVByb21pc2U6dW5zYWZlRW5jb2RlUHJvbWlzZSxcbmVuY29kZUVycm9yOnVuc2FmZUVuY29kZUVycm9yLFxudmVyaWZ5RW5jb2Rpbmc9KCk9PnsgfX09XG5vcHRpb25zO1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlPW1ha2VFbmNvZGVSZW1vdGFibGUoXG51bnNhZmVFbmNvZGVSZW1vdGFibGUsXG52ZXJpZnlFbmNvZGluZyk7XG5cbmNvbnN0IGVuY29kZVByb21pc2U9bWFrZUVuY29kZVByb21pc2UodW5zYWZlRW5jb2RlUHJvbWlzZSx2ZXJpZnlFbmNvZGluZyk7XG5jb25zdCBlbmNvZGVFcnJvcj1tYWtlRW5jb2RlRXJyb3IodW5zYWZlRW5jb2RlRXJyb3IsdmVyaWZ5RW5jb2RpbmcpO1xuXG5jb25zdCBpbm5lckVuY29kZT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBlbmNvZGVFcnJvcihwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzp7XG5yZXR1cm4ndic7XG4gfVxuY2FzZSd1bmRlZmluZWQnOntcbnJldHVybid6JztcbiB9XG5jYXNlJ251bWJlcic6e1xucmV0dXJuIGVuY29kZUJpbmFyeTY0KHBhc3NhYmxlKTtcbiB9XG5jYXNlJ3N0cmluZyc6e1xucmV0dXJuIGBzJHtlbmNvZGVTdHJpbmdTdWZmaXgocGFzc2FibGUpfWA7XG4gfVxuY2FzZSdib29sZWFuJzp7XG5yZXR1cm4gYGIke3Bhc3NhYmxlfWA7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybiBlbmNvZGVCaWdJbnQocGFzc2FibGUpO1xuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5yZXR1cm4gZW5jb2RlUmVtb3RhYmxlKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5yZXR1cm4gZW5jb2RlRXJyb3IocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGVuY29kZVByb21pc2UocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG4vL1xuY29uc3QgbmFtZT1uYW1lRm9yUGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbnJldHVybiBgeSR7ZW5jb2RlU3RyaW5nU3VmZml4KG5hbWUpfWA7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBlbmNvZGVBcnJheShwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG5yZXR1cm4gZW5jb2RlUmVjb3JkKHBhc3NhYmxlLGVuY29kZUFycmF5LGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xucmV0dXJuIGVuY29kZVRhZ2dlZChwYXNzYWJsZSxlbmNvZGVBcnJheSxpbm5lckVuY29kZSk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBhICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbGxlY3Rpb24gcGFzc2FibGVgO1xuIH19XG5cbiB9O1xucmV0dXJuIGlubmVyRW5jb2RlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBsaWJlcmFsRGVjb2RlcnM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgKi97XG5kZWNvZGVSZW1vdGFibGU6KF9lbmNvZGluZyxfaW5uZXJEZWNvZGUpPT51bmRlZmluZWQsXG5kZWNvZGVQcm9taXNlOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkLFxuZGVjb2RlRXJyb3I6KF9lbmNvZGluZyxfaW5uZXJEZWNvZGUpPT51bmRlZmluZWR9O1xuXG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBtYWtlSW5uZXJEZWNvZGU9KGRlY29kZVN0cmluZ1N1ZmZpeCxkZWNvZGVBcnJheSxvcHRpb25zKT0+e1xuY29uc3R7ZGVjb2RlUmVtb3RhYmxlLGRlY29kZVByb21pc2UsZGVjb2RlRXJyb3J9PW9wdGlvbnM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5uZXJEZWNvZGU9KGVuY29kZWQsc2tpcD0wKT0+e1xuc3dpdGNoKGVuY29kZWQuY2hhckF0KHNraXApKXtcbmNhc2Undic6e1xucmV0dXJuIG51bGw7XG4gfVxuY2FzZSd6Jzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnZic6e1xucmV0dXJuIGRlY29kZUJpbmFyeTY0KGVuY29kZWQsc2tpcCk7XG4gfVxuY2FzZSdzJzp7XG5yZXR1cm4gZGVjb2RlU3RyaW5nU3VmZml4KGdldFN1ZmZpeChlbmNvZGVkLHNraXArMSkpO1xuIH1cbmNhc2UnYic6e1xuY29uc3Qgc3Vic3RyaW5nPWdldFN1ZmZpeChlbmNvZGVkLHNraXArMSk7XG5pZihzdWJzdHJpbmc9PT0ndHJ1ZScpe1xucmV0dXJuIHRydWU7XG4gfWVsc2UgaWYoc3Vic3RyaW5nPT09J2ZhbHNlJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxudGhyb3cgRmFpbCBgZXhwZWN0ZWQgZW5jb2RlZCBib29sZWFuIHRvIGJlIFwiYnRydWVcIiBvciBcImJmYWxzZVwiOiAke3N1YnN0cmluZ31gO1xuIH1cbmNhc2Unbic6XG5jYXNlJ3AnOntcbnJldHVybiBkZWNvZGVCaWdJbnQoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCkpO1xuIH1cbmNhc2Uncic6e1xucmV0dXJuIGRlY29kZVJlbW90YWJsZShnZXRTdWZmaXgoZW5jb2RlZCxza2lwKSxpbm5lckRlY29kZSk7XG4gfVxuY2FzZSc/Jzp7XG5yZXR1cm4gZGVjb2RlUHJvbWlzZShnZXRTdWZmaXgoZW5jb2RlZCxza2lwKSxpbm5lckRlY29kZSk7XG4gfVxuY2FzZSchJzp7XG5yZXR1cm4gZGVjb2RlRXJyb3IoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UneSc6e1xuLy9cbmNvbnN0IG5hbWU9ZGVjb2RlU3RyaW5nU3VmZml4KGdldFN1ZmZpeChlbmNvZGVkLHNraXArMSkpO1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbiB9XG5jYXNlJ1snOlxuY2FzZSdeJzp7XG4vL1xucmV0dXJuIGRlY29kZUFycmF5KGVuY29kZWQsaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuY2FzZScoJzp7XG5yZXR1cm4gZGVjb2RlUmVjb3JkKGVuY29kZWQsZGVjb2RlQXJyYXksaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuY2FzZSc6Jzp7XG5yZXR1cm4gZGVjb2RlVGFnZ2VkKGVuY29kZWQsZGVjb2RlQXJyYXksaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGRhdGFiYXNlIGtleTogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuIH19XG5cbiB9O1xucmV0dXJuIGlubmVyRGVjb2RlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUGFzc2FibGVLaXQ9KG9wdGlvbnM9e30pPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZT0ocixfKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cn1gLFxuZW5jb2RlUHJvbWlzZT0ocCxfKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3B9YCxcbmVuY29kZUVycm9yPShlcnIsXyk9PkZhaWwgYGVycm9yIHVuZXhwZWN0ZWQ6ICR7ZXJyfWAsXG5mb3JtYXQ9J2xlZ2FjeU9yZGVyZWQnLFxuXG5kZWNvZGVSZW1vdGFibGU9KGVuY29kaW5nLF8pPT5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gLFxuZGVjb2RlUHJvbWlzZT0oZW5jb2RpbmcsXyk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gLFxuZGVjb2RlRXJyb3I9KGVuY29kaW5nLF8pPT5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWB9PVxub3B0aW9ucztcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBlbmNvZGVQYXNzYWJsZTtcbmNvbnN0IGVuY29kZU9wdGlvbnM9e2VuY29kZVJlbW90YWJsZSxlbmNvZGVQcm9taXNlLGVuY29kZUVycm9yLGZvcm1hdH07XG5pZihmb3JtYXQ9PT0nY29tcGFjdE9yZGVyZWQnKXtcbmNvbnN0IGxpYmVyYWxEZWNvZGU9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmRlY29kZUNvbXBhY3RBcnJheSxcbmxpYmVyYWxEZWNvZGVycyk7XG5cbi8qXG5cblxuXG4gICAgICovXG5jb25zdCB2ZXJpZnlFbmNvZGluZz0oZW5jb2RpbmcsbGFiZWwpPT57XG4hZW5jb2RpbmcubWF0Y2gockMwKXx8XG5GYWlsIGAke2IoXG5sYWJlbClcbiB9IGVuY29kaW5nIG11c3Qgbm90IGNvbnRhaW4gYSBDMCBjb250cm9sIGNoYXJhY3RlcjogJHtlbmNvZGluZ31gO1xuY29uc3QgZGVjb2RlZD1kZWNvZGVDb21wYWN0QXJyYXkoIGBediAke2VuY29kaW5nfSB2IGAsbGliZXJhbERlY29kZSk7XG5pc0FycmF5KGRlY29kZWQpJiZcbmRlY29kZWQubGVuZ3RoPT09MyYmXG5kZWNvZGVkWzBdPT09bnVsbCYmXG5kZWNvZGVkWzJdPT09bnVsbHx8XG5GYWlsIGAke2IobGFiZWwpfSBlbmNvZGluZyBtdXN0IGJlIGVtYmVkZGFibGU6ICR7ZW5jb2Rpbmd9YDtcbiB9O1xuY29uc3QgZW5jb2RlQ29tcGFjdD1tYWtlSW5uZXJFbmNvZGUoXG5lbmNvZGVDb21wYWN0U3RyaW5nU3VmZml4LFxuZW5jb2RlQ29tcGFjdEFycmF5LFxuey4uLmVuY29kZU9wdGlvbnMsdmVyaWZ5RW5jb2Rpbmd9KTtcblxuZW5jb2RlUGFzc2FibGU9KHBhc3NhYmxlKT0+IGB+JHtlbmNvZGVDb21wYWN0KHBhc3NhYmxlKX1gO1xuIH1lbHNlIGlmKGZvcm1hdD09PSdsZWdhY3lPcmRlcmVkJyl7XG5lbmNvZGVQYXNzYWJsZT1tYWtlSW5uZXJFbmNvZGUoXG5lbmNvZGVMZWdhY3lTdHJpbmdTdWZmaXgsXG5lbmNvZGVMZWdhY3lBcnJheSxcbmVuY29kZU9wdGlvbnMpO1xuXG4gfWVsc2V7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgZm9ybWF0OiAke3EoZm9ybWF0KX1gO1xuIH1cblxuY29uc3QgZGVjb2RlT3B0aW9ucz17ZGVjb2RlUmVtb3RhYmxlLGRlY29kZVByb21pc2UsZGVjb2RlRXJyb3J9O1xuY29uc3QgZGVjb2RlQ29tcGFjdD1tYWtlSW5uZXJEZWNvZGUoXG5kZWNvZGVDb21wYWN0U3RyaW5nU3VmZml4LFxuZGVjb2RlQ29tcGFjdEFycmF5LFxuZGVjb2RlT3B0aW9ucyk7XG5cbmNvbnN0IGRlY29kZUxlZ2FjeT1tYWtlSW5uZXJEZWNvZGUoXG5kZWNvZGVMZWdhY3lTdHJpbmdTdWZmaXgsXG5kZWNvZGVMZWdhY3lBcnJheSxcbmRlY29kZU9wdGlvbnMpO1xuXG5jb25zdCBkZWNvZGVQYXNzYWJsZT0oZW5jb2RlZCk9Pntcbi8vXG4vL1xuLy9cbmlmKGVuY29kZWQuY2hhckF0KDApPT09J34nKXtcbnJldHVybiBkZWNvZGVDb21wYWN0KGVuY29kZWQsMSk7XG4gfVxucmV0dXJuIGRlY29kZUxlZ2FjeShlbmNvZGVkKTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtlbmNvZGVQYXNzYWJsZSxkZWNvZGVQYXNzYWJsZX0pO1xuIH07JGjigI1fb25jZS5tYWtlUGFzc2FibGVLaXQobWFrZVBhc3NhYmxlS2l0KTtcbmhhcmRlbihtYWtlUGFzc2FibGVLaXQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbmNvZGVQYXNzYWJsZT0oZW5jb2RlT3B0aW9ucyk9PntcbmNvbnN0e2VuY29kZVBhc3NhYmxlfT1tYWtlUGFzc2FibGVLaXQoZW5jb2RlT3B0aW9ucyk7XG5yZXR1cm4gZW5jb2RlUGFzc2FibGU7XG4gfTskaOKAjV9vbmNlLm1ha2VFbmNvZGVQYXNzYWJsZShtYWtlRW5jb2RlUGFzc2FibGUpO1xuaGFyZGVuKG1ha2VFbmNvZGVQYXNzYWJsZSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZVBhc3NhYmxlPShkZWNvZGVPcHRpb25zKT0+e1xuY29uc3R7ZGVjb2RlUGFzc2FibGV9PW1ha2VQYXNzYWJsZUtpdChkZWNvZGVPcHRpb25zKTtcbnJldHVybiBkZWNvZGVQYXNzYWJsZTtcbiB9OyRo4oCNX29uY2UubWFrZURlY29kZVBhc3NhYmxlKG1ha2VEZWNvZGVQYXNzYWJsZSk7XG5oYXJkZW4obWFrZURlY29kZVBhc3NhYmxlKTtcblxuY29uc3QgICAgICAgIGlzRW5jb2RlZFJlbW90YWJsZT0oZW5jb2RlZCk9PmVuY29kZWQuY2hhckF0KDApPT09J3InOyRo4oCNX29uY2UuaXNFbmNvZGVkUmVtb3RhYmxlKGlzRW5jb2RlZFJlbW90YWJsZSk7XG5oYXJkZW4oaXNFbmNvZGVkUmVtb3RhYmxlKTtcblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhc3NTdHlsZVByZWZpeGVzPXtcbmVycm9yOichJyxcbmNvcHlSZWNvcmQ6JygnLFxudGFnZ2VkOic6JyxcbnByb21pc2U6Jz8nLFxuY29weUFycmF5OidbXicsXG5ib29sZWFuOidiJyxcbm51bWJlcjonZicsXG5iaWdpbnQ6J25wJyxcbnJlbW90YWJsZToncicsXG5zdHJpbmc6J3MnLFxubnVsbDondicsXG5zeW1ib2w6J3knLFxudW5kZWZpbmVkOid6J307JGjigI1fb25jZS5wYXNzU3R5bGVQcmVmaXhlcyhwYXNzU3R5bGVQcmVmaXhlcyk7XG5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihwYXNzU3R5bGVQcmVmaXhlcyxudWxsKTtcbmhhcmRlbihwYXNzU3R5bGVQcmVmaXhlcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJyZWNvcmROYW1lcyI6WyJyZWNvcmROYW1lcyJdLCJyZWNvcmRWYWx1ZXMiOlsicmVjb3JkVmFsdWVzIl0sInplcm9QYWQiOlsiemVyb1BhZCJdLCJtYWtlUGFzc2FibGVLaXQiOlsibWFrZVBhc3NhYmxlS2l0Il0sIm1ha2VFbmNvZGVQYXNzYWJsZSI6WyJtYWtlRW5jb2RlUGFzc2FibGUiXSwibWFrZURlY29kZVBhc3NhYmxlIjpbIm1ha2VEZWNvZGVQYXNzYWJsZSJdLCJpc0VuY29kZWRSZW1vdGFibGUiOlsiaXNFbmNvZGVkUmVtb3RhYmxlIl0sInBhc3NTdHlsZVByZWZpeGVzIjpbInBhc3NTdHlsZVByZWZpeGVzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADCMdNdyIgAAciIAACsAAABAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJRQ0xBU1MiLCJtYWtlRGVjb2RlRnJvbUNhcERhdGEiLCJtYWtlRW5jb2RlVG9DYXBEYXRhIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGlzT2JqZWN0LGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjigI1fYSA9PiAoaXNFcnJvckxpa2UgPSAkaOKAjV9hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRo4oCNX2EgPT4gKG1ha2VUYWdnZWQgPSAkaOKAjV9hKV1dLFtcImlzT2JqZWN0XCIsIFskaOKAjV9hID0+IChpc09iamVjdCA9ICRo4oCNX2EpXV0sW1wiZ2V0VGFnXCIsIFskaOKAjV9hID0+IChnZXRUYWcgPSAkaOKAjV9hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRo4oCNX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaOKAjV9hKV1dLFtcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXNzYWJsZVN5bWJvbCA9ICRo4oCNX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaOKAjV9hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaOKAjV9hKV1dLFtcInBhc3NhYmxlU3ltYm9sRm9yTmFtZVwiLCBbJGjigI1fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMsXG5kZWZpbmVQcm9wZXJ0aWVzLFxuaXMsXG5lbnRyaWVzLFxuZnJvbUVudHJpZXMsXG5mcmVlemV9PVxuT2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgUUNMQVNTPSdAcWNsYXNzJzskaOKAjV9vbmNlLlFDTEFTUyhRQ0xBU1MpO1xuXG5cbi8qXG5cblxuICovXG5jb25zdCBoYXNRQ2xhc3M9KGVuY29kZWQpPT5oYXNPd25Qcm9wZXJ0eU9mKGVuY29kZWQsUUNMQVNTKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgcWNsYXNzTWF0Y2hlcz0oZW5jb2RlZCxxY2xhc3MpPT5cbmlzT2JqZWN0KGVuY29kZWQpJiZcbiFpc0FycmF5KGVuY29kZWQpJiZcbmhhc1FDbGFzcyhlbmNvZGVkKSYmXG5lbmNvZGVkW1FDTEFTU109PT1xY2xhc3M7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBkb250RW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhPShyZW0pPT5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtyZW19YDtcblxuY29uc3QgZG9udEVuY29kZVByb21pc2VUb0NhcERhdGE9KHByb20pPT5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7cHJvbX1gO1xuXG5jb25zdCBkb250RW5jb2RlRXJyb3JUb0NhcERhdGE9KGVycik9PkZhaWwgYGVycm9yIG9iamVjdCB1bmV4cGVjdGVkOiAke2Vycn1gO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbmNvZGVUb0NhcERhdGE9KGVuY29kZU9wdGlvbnM9e30pPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YT1kb250RW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhLFxuZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YT1kb250RW5jb2RlUHJvbWlzZVRvQ2FwRGF0YSxcbmVuY29kZUVycm9yVG9DYXBEYXRhPWRvbnRFbmNvZGVFcnJvclRvQ2FwRGF0YX09XG5lbmNvZGVPcHRpb25zO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZW5jb2RlVG9DYXBEYXRhUmVjdXI9KHBhc3NhYmxlKT0+e1xuLy9cbi8vXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocGFzc2FibGUpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ251bGwnOlxuY2FzZSdib29sZWFuJzpcbmNhc2Unc3RyaW5nJzp7XG4vL1xucmV0dXJuIHBhc3NhYmxlO1xuIH1cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm57W1FDTEFTU106J3VuZGVmaW5lZCd9O1xuIH1cbmNhc2UnbnVtYmVyJzp7XG4vL1xuaWYoTnVtYmVyLmlzTmFOKHBhc3NhYmxlKSl7XG5yZXR1cm57W1FDTEFTU106J05hTid9O1xuIH1lbHNlIGlmKHBhc3NhYmxlPT09SW5maW5pdHkpe1xucmV0dXJue1tRQ0xBU1NdOidJbmZpbml0eSd9O1xuIH1lbHNlIGlmKHBhc3NhYmxlPT09LUluZmluaXR5KXtcbnJldHVybntbUUNMQVNTXTonLUluZmluaXR5J307XG4gfVxuLy9cbnJldHVybiBpcyhwYXNzYWJsZSwtMCk/MDpwYXNzYWJsZTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xucmV0dXJue1xuW1FDTEFTU106J2JpZ2ludCcsXG5kaWdpdHM6U3RyaW5nKHBhc3NhYmxlKX07XG5cbiB9XG5jYXNlJ3N5bWJvbCc6e1xuYXNzZXJ0UGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xuY29uc3QgbmFtZT0vKiAgICAgICAgICAgICAgICAgKi9uYW1lRm9yUGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xucmV0dXJue1xuW1FDTEFTU106J3N5bWJvbCcsXG5uYW1lfTtcblxuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuaWYoaGFzT3duUHJvcGVydHlPZihwYXNzYWJsZSxRQ0xBU1MpKXtcbi8vXG5jb25zdHtbUUNMQVNTXTpxY2xhc3NWYWx1ZSwuLi5yZXN0fT1wYXNzYWJsZTtcbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9e1xuW1FDTEFTU106J2hpbGJlcnQnLFxub3JpZ2luYWw6ZW5jb2RlVG9DYXBEYXRhUmVjdXIocWNsYXNzVmFsdWUpfTtcblxuaWYob3duS2V5cyhyZXN0KS5sZW5ndGg+PTEpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmVzdWx0LnJlc3Q9ZW5jb2RlVG9DYXBEYXRhUmVjdXIoZnJlZXplKHJlc3QpKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IG5hbWVzPW93bktleXMocGFzc2FibGUpLnNvcnQoKTtcbnJldHVybiBmcm9tRW50cmllcyhcbm5hbWVzLm1hcCgobmFtZSk9PltuYW1lLGVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlW25hbWVdKV0pKTtcblxuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5yZXR1cm4gcGFzc2FibGUubWFwKGVuY29kZVRvQ2FwRGF0YVJlY3VyKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xucmV0dXJue1xuW1FDTEFTU106J3RhZ2dlZCcsXG50YWc6Z2V0VGFnKHBhc3NhYmxlKSxcbnBheWxvYWQ6ZW5jb2RlVG9DYXBEYXRhUmVjdXIocGFzc2FibGUucGF5bG9hZCl9O1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IGVuY29kZWQ9ZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhKFxucGFzc2FibGUsXG5lbmNvZGVUb0NhcERhdGFSZWN1cik7XG5cbmlmKHFjbGFzc01hdGNoZXMoZW5jb2RlZCwnc2xvdCcpKXtcbnJldHVybiBlbmNvZGVkO1xuIH1cbi8vXG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUmVtb3RhYmxlIGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggJHtxKFxuUUNMQVNTKVxuIH0gJHtxKCdzbG90Jyl9OiAke2VuY29kZWR9YDtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IGVuY29kZWQ9ZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YShwYXNzYWJsZSxlbmNvZGVUb0NhcERhdGFSZWN1cik7XG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ3Nsb3QnKSl7XG5yZXR1cm4gZW5jb2RlZDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUHJvbWlzZSBlbmNvZGluZyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoICR7cShcblFDTEFTUyxcbidzbG90JylcbiB9OiAke2VuY29kZWR9YDtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZUVycm9yVG9DYXBEYXRhKHBhc3NhYmxlLGVuY29kZVRvQ2FwRGF0YVJlY3VyKTtcbmlmKHFjbGFzc01hdGNoZXMoZW5jb2RlZCwnZXJyb3InKSl7XG5yZXR1cm4gZW5jb2RlZDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogRXJyb3IgZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCAke3EoXG5RQ0xBU1MsXG4nZXJyb3InKVxuIH06ICR7ZW5jb2RlZH1gO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGBpbnRlcm5hbDogVW5yZWNvZ25pemVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9O1xuY29uc3QgZW5jb2RlVG9DYXBEYXRhPShwYXNzYWJsZSk9PntcbmlmKGlzRXJyb3JMaWtlKHBhc3NhYmxlKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGhhcmRlbihlbmNvZGVFcnJvclRvQ2FwRGF0YShwYXNzYWJsZSxlbmNvZGVUb0NhcERhdGFSZWN1cikpO1xuIH1cbnJldHVybiBoYXJkZW4oZW5jb2RlVG9DYXBEYXRhUmVjdXIocGFzc2FibGUpKTtcbiB9O1xucmV0dXJuIGhhcmRlbihlbmNvZGVUb0NhcERhdGEpO1xuIH07JGjigI1fb25jZS5tYWtlRW5jb2RlVG9DYXBEYXRhKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuaGFyZGVuKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShzbG90RW5jb2RpbmcpPT5cbkZhaWwgYHJlbW90YWJsZSBvciBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7c2xvdEVuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0oZXJyb3JFbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlcnJvckVuY29kaW5nfWA7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZUZyb21DYXBEYXRhPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT1kb250RGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE9ZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhLFxuZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT1kb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YX09XG5kZWNvZGVPcHRpb25zO1xuXG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT09PWRlY29kZVByb21pc2VGcm9tQ2FwRGF0YXx8XG5GYWlsIGBBbiBpbXBsZW1lbnRhdGlvbiByZXN0cmljdGlvbiBmb3Igbm93OiBJZiBlaXRoZXIgZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEgb3IgZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhIGlzIHByb3ZpZGVkLCBib3RoIG11c3QgYmUgcHJvdmlkZWQgYW5kIHRoZXkgbXVzdCBiZSB0aGUgc2FtZTogJHtxKFxuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEpXG4gfSB2cyAke3EoZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhKX1gO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGVGcm9tQ2FwRGF0YT0oanNvbkVuY29kZWQpPT57XG5pZighaXNPYmplY3QoanNvbkVuY29kZWQpKXtcbi8vXG5yZXR1cm4ganNvbkVuY29kZWQ7XG4gfVxuaWYoaXNBcnJheShqc29uRW5jb2RlZCkpe1xucmV0dXJuIGpzb25FbmNvZGVkLm1hcCgoZW5jb2RlZFZhbCk9PmRlY29kZUZyb21DYXBEYXRhKGVuY29kZWRWYWwpKTtcbiB9ZWxzZSBpZihoYXNRQ2xhc3MoanNvbkVuY29kZWQpKXtcbmNvbnN0IHFjbGFzcz1qc29uRW5jb2RlZFtRQ0xBU1NdO1xudHlwZW9mIHFjbGFzcz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgJHtxKFFDTEFTUyl9IHR5cGVvZiAke3EodHlwZW9mIHFjbGFzcyl9YDtcbnN3aXRjaChxY2xhc3Mpe1xuLy9cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnTmFOJzp7XG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnSW5maW5pdHknOntcbnJldHVybiBJbmZpbml0eTtcbiB9XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PWpzb25FbmNvZGVkO1xudHlwZW9mIGRpZ2l0cz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZGlnaXRzIHR5cGVvZiAke3EodHlwZW9mIGRpZ2l0cyl9YDtcbnJldHVybiBCaWdJbnQoZGlnaXRzKTtcbiB9XG5jYXNlJ0BAYXN5bmNJdGVyYXRvcic6e1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvcjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09anNvbkVuY29kZWQ7XG5yZXR1cm4gcGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09anNvbkVuY29kZWQ7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcsZGVjb2RlRnJvbUNhcERhdGEocGF5bG9hZCkpO1xuIH1cbmNhc2Unc2xvdCc6e1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlZD1kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YShcbmpzb25FbmNvZGVkLFxuZGVjb2RlRnJvbUNhcERhdGEpO1xuXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGRlY29kZWQ7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZGVjb2RlZD1kZWNvZGVFcnJvckZyb21DYXBEYXRhKFxuanNvbkVuY29kZWQsXG5kZWNvZGVGcm9tQ2FwRGF0YSk7XG5cbmlmKHBhc3NTdHlsZU9mKGRlY29kZWQpPT09J2Vycm9yJyl7XG5yZXR1cm4gZGVjb2RlZDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YSBvcHRpb24gbXVzdCByZXR1cm4gYW4gZXJyb3I6ICR7ZGVjb2RlZH1gO1xuIH1cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09anNvbkVuY29kZWQ7XG5oYXNPd25Qcm9wZXJ0eU9mKGpzb25FbmNvZGVkLCdvcmlnaW5hbCcpfHxcbkZhaWwgYEludmFsaWQgSGlsYmVydCBIb3RlbCBlbmNvZGluZyAke2pzb25FbmNvZGVkfWA7XG4vL1xuY29uc3QgcmVzdWx0PXtbUUNMQVNTXTpkZWNvZGVGcm9tQ2FwRGF0YShvcmlnaW5hbCl9O1xuaWYoaGFzT3duUHJvcGVydHlPZihqc29uRW5jb2RlZCwncmVzdCcpKXtcbmNvbnN0IGlzTm9uRW1wdHlPYmplY3Q9XG50eXBlb2YgcmVzdD09PSdvYmplY3QnJiZcbnJlc3QhPT1udWxsJiZcbm93bktleXMocmVzdCkubGVuZ3RoPj0xO1xuaWYoIWlzTm9uRW1wdHlPYmplY3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyBtdXN0IGJlIGEgbm9uLWVtcHR5IG9iamVjdDogJHtyZXN0fWA7XG4gfVxuY29uc3QgcmVzdE9iaj1kZWNvZGVGcm9tQ2FwRGF0YShyZXN0KTtcbi8vXG4vL1xuLy9cbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RPYmosUUNMQVNTKXx8XG5GYWlsIGBSZXN0IG11c3Qgbm90IGNvbnRhaW4gaXRzIG93biBkZWZpbml0aW9uIG9mICR7cShRQ0xBU1MpfWA7XG5kZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHJlc3RPYmopKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG5jYXNlJ2liaWQnOntcbnRocm93IEZhaWwgYFRoZSBjYXBEYXRhIHByb3RvY29sIG5vIGxvbmdlciBzdXBwb3J0cyAke3EoUUNMQVNTKX0gJHtxKFxucWNsYXNzKVxuIH1gO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1lbHNle1xuYXNzZXJ0KHR5cGVvZiBqc29uRW5jb2RlZD09PSdvYmplY3QnJiZqc29uRW5jb2RlZCE9PW51bGwpO1xuY29uc3QgZGVjb2RlRW50cnk9KFtuYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSAke3EobmFtZSl9IG9mICR7anNvbkVuY29kZWR9IG11c3QgYmUgYSBzdHJpbmdgO1xucmV0dXJuW25hbWUsZGVjb2RlRnJvbUNhcERhdGEoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGpzb25FbmNvZGVkKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG4gfTtcbnJldHVybiBoYXJkZW4oZGVjb2RlRnJvbUNhcERhdGEpO1xuIH07JGjigI1fb25jZS5tYWtlRGVjb2RlRnJvbUNhcERhdGEobWFrZURlY29kZUZyb21DYXBEYXRhKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlFDTEFTUyI6WyJRQ0xBU1MiXSwibWFrZUVuY29kZVRvQ2FwRGF0YSI6WyJtYWtlRW5jb2RlVG9DYXBEYXRhIl0sIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSI6WyJtYWtlRGVjb2RlRnJvbUNhcERhdGEiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAB4SNSUsiAABLIgAALQAAAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsibWFrZURlY29kZUZyb21TbWFsbGNhcHMiLCJtYWtlRW5jb2RlVG9TbWFsbGNhcHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhc3NTdHlsZU9mLGlzRXJyb3JMaWtlLG1ha2VUYWdnZWQsZ2V0VGFnLGhhc093blByb3BlcnR5T2YsYXNzZXJ0UGFzc2FibGVTeW1ib2wsbmFtZUZvclBhc3NhYmxlU3ltYm9sLHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxYLEZhaWwscTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjigI1fYSA9PiAocGFzc1N0eWxlT2YgPSAkaOKAjV9hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaOKAjV9hID0+IChpc0Vycm9yTGlrZSA9ICRo4oCNX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjigI1fYSA9PiAobWFrZVRhZ2dlZCA9ICRo4oCNX2EpXV0sW1wiZ2V0VGFnXCIsIFskaOKAjV9hID0+IChnZXRUYWcgPSAkaOKAjV9hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRo4oCNX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaOKAjV9hKV1dLFtcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXNzYWJsZVN5bWJvbCA9ICRo4oCNX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaOKAjV9hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaOKAjV9hKV1dLFtcInBhc3NhYmxlU3ltYm9sRm9yTmFtZVwiLCBbJGjigI1fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7aXMsZW50cmllcyxmcm9tRW50cmllc309T2JqZWN0O1xuXG5jb25zdCBCQU5HPSchJy5jaGFyQ29kZUF0KDApO1xuY29uc3QgREFTSD0nLScuY2hhckNvZGVBdCgwKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc3RhcnRzU3BlY2lhbD0oZW5jb2RlZFN0cik9PntcbmlmKGVuY29kZWRTdHI9PT0nJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuLy9cbmNvbnN0IGNvZGU9ZW5jb2RlZFN0ci5jaGFyQ29kZUF0KDApO1xuLy9cbnJldHVybiBCQU5HPD1jb2RlJiZjb2RlPD1EQVNIO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBkb250RW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHM9KHJlbSk9PlxuRmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cmVtfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVQcm9taXNlVG9TbWFsbGNhcHM9KHByb20pPT5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7cHJvbX1gO1xuXG5jb25zdCBkb250RW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz0oZXJyKT0+XG5GYWlsIGBlcnJvciBvYmplY3QgdW5leHBlY3RlZDogJHtxKGVycil9YDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW5jb2RlVG9TbWFsbGNhcHM9KGVuY29kZU9wdGlvbnM9e30pPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPWRvbnRFbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyxcbmVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz1kb250RW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzLFxuZW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz1kb250RW5jb2RlRXJyb3JUb1NtYWxsY2Fwc309XG5lbmNvZGVPcHRpb25zO1xuXG5jb25zdCBhc3NlcnRFbmNvZGVkRXJyb3I9KGVuY29kaW5nKT0+e1xudHlwZW9mIGVuY29kaW5nPT09J29iamVjdCcmJmhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyNlcnJvcicpfHxcbkZhaWwgYGludGVybmFsOiBFcnJvciBlbmNvZGluZyBtdXN0IGhhdmUgXCIjZXJyb3JcIiBwcm9wZXJ0eTogJHtxKFxuZW5jb2RpbmcpXG4gfWA7XG4vL1xuY29uc3QgbWVzc2FnZT1lbmNvZGluZ1snI2Vycm9yJ107XG50eXBlb2YgbWVzc2FnZT09PSdzdHJpbmcnJiYoXG4hc3RhcnRzU3BlY2lhbChtZXNzYWdlKXx8bWVzc2FnZS5jaGFyQXQoMCk9PT0nIScpfHxcbkZhaWwgYGludGVybmFsOiBFcnJvciBlbmNvZGluZyBtdXN0IGhhdmUgc3RyaW5nIG1lc3NhZ2U6ICR7cShtZXNzYWdlKX1gO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6e1xuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3N0cmluZyc6e1xuaWYoc3RhcnRzU3BlY2lhbChwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gYCEke3Bhc3NhYmxlfWA7XG4gfVxuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJuJyN1bmRlZmluZWQnO1xuIH1cbmNhc2UnbnVtYmVyJzp7XG4vL1xuaWYoTnVtYmVyLmlzTmFOKHBhc3NhYmxlKSl7XG5yZXR1cm4nI05hTic7XG4gfWVsc2UgaWYocGFzc2FibGU9PT1JbmZpbml0eSl7XG5yZXR1cm4nI0luZmluaXR5JztcbiB9ZWxzZSBpZihwYXNzYWJsZT09PS1JbmZpbml0eSl7XG5yZXR1cm4nIy1JbmZpbml0eSc7XG4gfVxuLy9cbnJldHVybiBpcyhwYXNzYWJsZSwtMCk/MDpwYXNzYWJsZTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3Qgc3RyPVN0cmluZyhwYXNzYWJsZSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAqL3Bhc3NhYmxlPDBuP3N0cjpgKyR7c3RyfWApO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5jb25zdCBuYW1lPS8qICAgICAgICAgICAgICAgICAqL25hbWVGb3JQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5yZXR1cm4gYCUke25hbWV9YDtcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbmNvbnN0IG5hbWVzPW93bktleXMocGFzc2FibGUpLnNvcnQoKTtcbnJldHVybiBmcm9tRW50cmllcyhcbm5hbWVzLm1hcCgobmFtZSk9PltcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIobmFtZSksXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKHBhc3NhYmxlW25hbWVdKV0pKTtcblxuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBwYXNzYWJsZS5tYXAoZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybntcbicjdGFnJzplbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKGdldFRhZyhwYXNzYWJsZSkpLFxucGF5bG9hZDplbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKHBhc3NhYmxlLnBheWxvYWQpfTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCByZXN1bHQ9ZW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHMoXG5wYXNzYWJsZSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuXG5pZih0eXBlb2YgcmVzdWx0PT09J3N0cmluZycmJnJlc3VsdC5jaGFyQXQoMCk9PT0nJCcpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFJlbW90YWJsZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCIkXCI6ICR7cmVzdWx0fWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCByZXN1bHQ9ZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzKFxucGFzc2FibGUsXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcblxuaWYodHlwZW9mIHJlc3VsdD09PSdzdHJpbmcnJiZyZXN1bHQuY2hhckF0KDApPT09JyYnKXtcbnJldHVybiByZXN1bHQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFByb21pc2UgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiJlwiOiAke3Jlc3VsdH1gO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVFcnJvclRvU21hbGxjYXBzKHBhc3NhYmxlLGVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuYXNzZXJ0RW5jb2RlZEVycm9yKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGBpbnRlcm5hbDogVW5yZWNvZ25pemVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9O1xuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHM9KHBhc3NhYmxlKT0+e1xuaWYoaXNFcnJvckxpa2UocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCByZXN1bHQ9aGFyZGVuKFxuZW5jb2RlRXJyb3JUb1NtYWxsY2FwcyhwYXNzYWJsZSxlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKSk7XG5cbmFzc2VydEVuY29kZWRFcnJvcihyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGUpKTtcbiB9O1xucmV0dXJuIGhhcmRlbihlbmNvZGVUb1NtYWxsY2Fwcyk7XG4gfTskaOKAjV9vbmNlLm1ha2VFbmNvZGVUb1NtYWxsY2FwcyhtYWtlRW5jb2RlVG9TbWFsbGNhcHMpO1xuaGFyZGVuKG1ha2VFbmNvZGVUb1NtYWxsY2Fwcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBkb250RGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT5cbkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+XG5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IGRvbnREZWNvZGVFcnJvckZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+XG5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke3EoZW5jb2RpbmcpfWA7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZUZyb21TbWFsbGNhcHM9KGRlY29kZU9wdGlvbnM9e30pPT57XG5jb25zdHtcbmRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9ZG9udERlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVQcm9taXNlRnJvbVNtYWxsY2Fwcz1kb250RGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVFcnJvckZyb21TbWFsbGNhcHM9ZG9udERlY29kZUVycm9yRnJvbVNtYWxsY2Fwc309XG5kZWNvZGVPcHRpb25zO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGVGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PntcbnN3aXRjaCh0eXBlb2YgZW5jb2Rpbmcpe1xuY2FzZSdib29sZWFuJzpcbmNhc2UnbnVtYmVyJzp7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmlmKCFzdGFydHNTcGVjaWFsKGVuY29kaW5nKSl7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfVxuY29uc3QgYz1lbmNvZGluZy5jaGFyQXQoMCk7XG5zd2l0Y2goYyl7XG5jYXNlJyEnOntcbi8vXG5yZXR1cm4gZW5jb2Rpbmcuc2xpY2UoMSk7XG4gfVxuY2FzZSclJzp7XG5yZXR1cm4gcGFzc2FibGVTeW1ib2xGb3JOYW1lKGVuY29kaW5nLnNsaWNlKDEpKTtcbiB9XG5jYXNlJyMnOntcbnN3aXRjaChlbmNvZGluZyl7XG5jYXNlJyN1bmRlZmluZWQnOntcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuY2FzZScjTmFOJzp7XG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnI0luZmluaXR5Jzp7XG5yZXR1cm4gSW5maW5pdHk7XG4gfVxuY2FzZScjLUluZmluaXR5Jzp7XG5yZXR1cm4tSW5maW5pdHk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYHVua25vd24gY29uc3RhbnQgXCIke3EoZW5jb2RpbmcpfVwiYCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfVxuY2FzZScrJzpcbmNhc2UnLSc6e1xucmV0dXJuIEJpZ0ludChlbmNvZGluZyk7XG4gfVxuY2FzZSckJzp7XG5jb25zdCByZXN1bHQ9ZGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2FwcyhcbmVuY29kaW5nLFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG5cbi8vXG5pZihwYXNzU3R5bGVPZihyZXN1bHQpIT09J3JlbW90YWJsZScpe1xuRmFpbCBgaW50ZXJuYWw6IGRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMgb3B0aW9uIG11c3QgcmV0dXJuIGEgcmVtb3RhYmxlOiAke3Jlc3VsdH1gO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfVxuY2FzZScmJzp7XG5jb25zdCByZXN1bHQ9ZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG5pZihwYXNzU3R5bGVPZihyZXN1bHQpIT09J3Byb21pc2UnKXtcbkZhaWwgYGludGVybmFsOiBkZWNvZGVQcm9taXNlRnJvbVNtYWxsY2FwcyBvcHRpb24gbXVzdCByZXR1cm4gYSBwcm9taXNlOiAke3Jlc3VsdH1gO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBTcGVjaWFsIGNoYXIgJHtxKFxuYylcbiB9IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlOiAke2VuY29kaW5nfWA7XG4gfX1cblxuIH1cbmNhc2Unb2JqZWN0Jzp7XG5pZihlbmNvZGluZz09PW51bGwpe1xucmV0dXJuIGVuY29kaW5nO1xuIH1cblxuaWYoaXNBcnJheShlbmNvZGluZykpe1xucmV0dXJuIGVuY29kaW5nLm1hcCgodmFsKT0+ZGVjb2RlRnJvbVNtYWxsY2Fwcyh2YWwpKTtcbiB9XG5cbmlmKGhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyN0YWcnKSl7XG5jb25zdHsnI3RhZyc6dGFnLHBheWxvYWQsLi4ucmVzdH09ZW5jb2Rpbmc7XG50eXBlb2YgdGFnPT09J3N0cmluZyd8fFxuRmFpbCBgVmFsdWUgb2YgXCIjdGFnXCIsIHRoZSB0YWcsIG11c3QgYmUgYSBzdHJpbmc6ICR7ZW5jb2Rpbmd9YDtcbm93bktleXMocmVzdCkubGVuZ3RoPT09MHx8XG5GYWlsIGAjdGFnIHJlY29yZCB1bmV4cGVjdGVkIHByb3BlcnRpZXM6ICR7cShvd25LZXlzKHJlc3QpKX1gO1xucmV0dXJuIG1ha2VUYWdnZWQoXG5kZWNvZGVGcm9tU21hbGxjYXBzKHRhZyksXG5kZWNvZGVGcm9tU21hbGxjYXBzKHBheWxvYWQpKTtcblxuIH1cblxuaWYoaGFzT3duUHJvcGVydHlPZihlbmNvZGluZywnI2Vycm9yJykpe1xuY29uc3QgcmVzdWx0PWRlY29kZUVycm9yRnJvbVNtYWxsY2FwcyhcbmVuY29kaW5nLFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG5cbnBhc3NTdHlsZU9mKHJlc3VsdCk9PT0nZXJyb3InfHxcbkZhaWwgYGludGVybmFsOiBkZWNvZGVFcnJvckZyb21TbWFsbGNhcHMgb3B0aW9uIG11c3QgcmV0dXJuIGFuIGVycm9yOiAke3Jlc3VsdH1gO1xucmV0dXJuIHJlc3VsdDtcbiB9XG5cbmNvbnN0IGRlY29kZUVudHJ5PShbZW5jb2RlZE5hbWUsZW5jb2RlZFZhbF0pPT57XG50eXBlb2YgZW5jb2RlZE5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSBuYW1lICR7cShcbmVuY29kZWROYW1lKVxuIH0gb2YgJHtlbmNvZGluZ30gbXVzdCBiZSBhIHN0cmluZ2A7XG5lbmNvZGVkTmFtZS5jaGFyQXQoMCkhPT0nIyd8fFxuRmFpbCBgVW5yZWNvZ25pemVkIHJlY29yZCB0eXBlICR7cShlbmNvZGVkTmFtZSl9OiAke2VuY29kaW5nfWA7XG5jb25zdCBuYW1lPWRlY29kZUZyb21TbWFsbGNhcHMoZW5jb2RlZE5hbWUpO1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBEZWNvZGVkIHByb3BlcnR5IG5hbWUgJHtuYW1lfSBmcm9tICR7ZW5jb2Rpbmd9IG11c3QgYmUgYSBzdHJpbmdgO1xucmV0dXJuW25hbWUsZGVjb2RlRnJvbVNtYWxsY2FwcyhlbmNvZGVkVmFsKV07XG4gfTtcbmNvbnN0IGRlY29kZWRFbnRyaWVzPWVudHJpZXMoZW5jb2RpbmcpLm1hcChkZWNvZGVFbnRyeSk7XG5yZXR1cm4gZnJvbUVudHJpZXMoZGVjb2RlZEVudHJpZXMpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGBpbnRlcm5hbDogdW5yZWNvZ25pemVkIEpTT04gdHlwZW9mICR7cShcbnR5cGVvZiBlbmNvZGluZylcbiB9OiAke2VuY29kaW5nfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH07XG5yZXR1cm4gaGFyZGVuKGRlY29kZUZyb21TbWFsbGNhcHMpO1xuIH07JGjigI1fb25jZS5tYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyhtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRW5jb2RlVG9TbWFsbGNhcHMiOlsibWFrZUVuY29kZVRvU21hbGxjYXBzIl0sIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIjpbIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANwcugAmIwAAJiMAACoAAABAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvbWFyc2hhbC1qdXN0aW4uanN7ImltcG9ydHMiOlsiQGVuZG8vbmF0IiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIi4vZW5jb2RlVG9DYXBEYXRhLmpzIl0sImV4cG9ydHMiOlsiZGVjb2RlVG9KdXN0aW4iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE5hdCxnZXRFcnJvckNvbnN0cnVjdG9yLGlzT2JqZWN0LHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxxLFgsRmFpbCxRQ0xBU1M7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRo4oCNX2EgPT4gKE5hdCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRFcnJvckNvbnN0cnVjdG9yXCIsIFskaOKAjV9hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjigI1fYSldXSxbXCJpc09iamVjdFwiLCBbJGjigI1fYSA9PiAoaXNPYmplY3QgPSAkaOKAjV9hKV1dLFtcInBhc3NhYmxlU3ltYm9sRm9yTmFtZVwiLCBbJGjigI1fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCIuL2VuY29kZVRvQ2FwRGF0YS5qc1wiLCBbW1wiUUNMQVNTXCIsIFskaOKAjV9hID0+IChRQ0xBU1MgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtzdHJpbmdpZnk6cXVvdGV9PUpTT047XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZVllc0luZGVudGVyPSgpPT57XG5jb25zdCBzdHJpbmdzPVtdO1xubGV0IGxldmVsPTA7XG5sZXQgbmVlZFNwYWNlPWZhbHNlO1xuY29uc3QgbGluZT0oKT0+e1xubmVlZFNwYWNlPWZhbHNlO1xucmV0dXJuIHN0cmluZ3MucHVzaCgnXFxuJywnICAnLnJlcGVhdChsZXZlbCkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKHtcbm9wZW46KG9wZW5CcmFja2V0KT0+e1xubGV2ZWwrPTE7XG5pZihuZWVkU3BhY2Upe1xuc3RyaW5ncy5wdXNoKCcgJyk7XG4gfVxubmVlZFNwYWNlPWZhbHNlO1xucmV0dXJuIHN0cmluZ3MucHVzaChvcGVuQnJhY2tldCk7XG4gfSxcbmxpbmUsXG5uZXh0Oih0b2tlbik9PntcbmlmKG5lZWRTcGFjZSYmdG9rZW4hPT0nLCcpe1xuc3RyaW5ncy5wdXNoKCcgJyk7XG4gfVxubmVlZFNwYWNlPXRydWU7XG5yZXR1cm4gc3RyaW5ncy5wdXNoKHRva2VuKTtcbiB9LFxuY2xvc2U6KGNsb3NlQnJhY2tldCk9PntcbmFzc2VydChsZXZlbD49MSk7XG5sZXZlbC09MTtcbmxpbmUoKTtcbnJldHVybiBzdHJpbmdzLnB1c2goY2xvc2VCcmFja2V0KTtcbiB9LFxuZG9uZTooKT0+e1xuYXNzZXJ0LmVxdWFsKGxldmVsLDApO1xucmV0dXJuIHN0cmluZ3Muam9pbignJyk7XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGJhZFBhaXJQYXR0ZXJuPS9eKD86XFx3XFx3fDw8fD4+fFxcK1xcK3wtLXw8IXwtPikkLztcblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZU5vSW5kZW50ZXI9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdzPVtdO1xucmV0dXJuIGhhcmRlbih7XG5vcGVuOihvcGVuQnJhY2tldCk9PnN0cmluZ3MucHVzaChvcGVuQnJhY2tldCksXG5saW5lOigpPT5zdHJpbmdzLmxlbmd0aCxcbm5leHQ6KHRva2VuKT0+e1xuaWYoc3RyaW5ncy5sZW5ndGg+PTEpe1xuY29uc3QgbGFzdD1zdHJpbmdzW3N0cmluZ3MubGVuZ3RoLTFdO1xuLy9cbmlmKGxhc3QubGVuZ3RoPj0xJiZ0b2tlbi5sZW5ndGg+PTEpe1xuY29uc3QgcGFpcj0gYCR7bGFzdFtsYXN0Lmxlbmd0aC0xXX0ke3Rva2VuWzBdfWA7XG5pZihiYWRQYWlyUGF0dGVybi50ZXN0KHBhaXIpKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbiB9XG4gfVxucmV0dXJuIHN0cmluZ3MucHVzaCh0b2tlbik7XG4gfSxcbmNsb3NlOihjbG9zZUJyYWNrZXQpPT57XG5pZihzdHJpbmdzLmxlbmd0aD49MSYmc3RyaW5nc1tzdHJpbmdzLmxlbmd0aC0xXT09PScsJyl7XG5zdHJpbmdzLnBvcCgpO1xuIH1cbnJldHVybiBzdHJpbmdzLnB1c2goY2xvc2VCcmFja2V0KTtcbiB9LFxuZG9uZTooKT0+c3RyaW5ncy5qb2luKCcnKX0pO1xuXG4gfTtcblxuY29uc3QgaWRlbnRQYXR0ZXJuPS9eW2EtekEtWl1cXHcqJC87XG5oYXJkZW4oaWRlbnRQYXR0ZXJuKTtcbmNvbnN0IEF0QXRQcmVmaXhQYXR0ZXJuPS9eQEAoLiopJC87XG5oYXJkZW4oQXRBdFByZWZpeFBhdHRlcm4pO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZVRvSnVzdGluPShlbmNvZGluZyxzaG91bGRJbmRlbnQ9ZmFsc2Usc2xvdHM9W10pPT57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZT0ocmF3VHJlZSk9PntcbmlmKCFpc09iamVjdChyYXdUcmVlKSl7XG5yZXR1cm47XG4gfVxuLy9cbmFzc2VydC50eXBlb2YocmF3VHJlZSwnb2JqZWN0Jyk7XG5hc3NlcnQocmF3VHJlZSE9PW51bGwpO1xuaWYoUUNMQVNTIGluIHJhd1RyZWUpe1xuY29uc3QgcWNsYXNzPXJhd1RyZWVbUUNMQVNTXTtcbnR5cGVvZiBxY2xhc3M9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIHFjbGFzcyB0eXBlb2YgJHtxKHR5cGVvZiBxY2xhc3MpfWA7XG5hc3NlcnQoIWlzQXJyYXkocmF3VHJlZSkpO1xuc3dpdGNoKHJhd1RyZWVbJ0BxY2xhc3MnXSl7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ05hTic6XG5jYXNlJ0luZmluaXR5JzpcbmNhc2UnLUluZmluaXR5Jzp7XG5yZXR1cm47XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0e2RpZ2l0c309cmF3VHJlZTtcbnR5cGVvZiBkaWdpdHM9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIGRpZ2l0cyB0eXBlb2YgJHtxKHR5cGVvZiBkaWdpdHMpfWA7XG5yZXR1cm47XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbnJldHVybjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5jb25zdCBzeW09cGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuYXNzZXJ0LnR5cGVvZihzeW0sJ3N5bWJvbCcpO1xucmV0dXJuO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YodGFnLCdzdHJpbmcnKTtcbnByZXBhcmUocGF5bG9hZCk7XG5yZXR1cm47XG4gfVxuY2FzZSdzbG90Jzp7XG5jb25zdHtpbmRleCxpZmFjZX09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YoaW5kZXgsJ251bWJlcicpO1xuTmF0KGluZGV4KTtcbmlmKGlmYWNlIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YoaWZhY2UsJ3N0cmluZycpO1xuIH1cbnJldHVybjtcbiB9XG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PXJhd1RyZWU7XG4nb3JpZ2luYWwnaW4gcmF3VHJlZXx8XG5GYWlsIGBJbnZhbGlkIEhpbGJlcnQgSG90ZWwgZW5jb2RpbmcgJHtyYXdUcmVlfWA7XG5wcmVwYXJlKG9yaWdpbmFsKTtcbmlmKCdyZXN0J2luIHJhd1RyZWUpe1xuaWYodHlwZW9mIHJlc3QhPT0nb2JqZWN0Jyl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3RgO1xuIH1cbmlmKHJlc3Q9PT1udWxsKXtcbnRocm93IEZhaWwgYFJlc3QgJHtyZXN0fSBlbmNvZGluZyBtdXN0IG5vdCBiZSBudWxsYDtcbiB9XG5pZihpc0FycmF5KHJlc3QpKXtcbnRocm93IEZhaWwgYFJlc3QgJHtyZXN0fSBlbmNvZGluZyBtdXN0IG5vdCBiZSBhbiBhcnJheWA7XG4gfVxuaWYoUUNMQVNTIGluIHJlc3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyAke3Jlc3R9IG11c3Qgbm90IGNvbnRhaW4gJHtxKFFDTEFTUyl9YDtcbiB9XG5jb25zdCBuYW1lcz1vd25LZXlzKHJlc3QpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSBuYW1lICR7bmFtZX0gb2YgJHtyYXdUcmVlfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnByZXBhcmUocmVzdFtuYW1lXSk7XG4gfVxuIH1cbnJldHVybjtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdHtuYW1lLG1lc3NhZ2V9PXJhd1RyZWU7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbmFtZSB0eXBlb2YgJHtxKHR5cGVvZiBuYW1lKX1gO1xuIH1cbmdldEVycm9yQ29uc3RydWN0b3IobmFtZSkhPT11bmRlZmluZWR8fFxuRmFpbCBgTXVzdCBiZSB0aGUgbmFtZSBvZiBhbiBFcnJvciBjb25zdHJ1Y3RvciAke25hbWV9YDtcbnR5cGVvZiBtZXNzYWdlPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBlcnJvciBtZXNzYWdlIHR5cGVvZiAke3EodHlwZW9mIG1lc3NhZ2UpfWA7XG5yZXR1cm47XG4gfVxuXG5kZWZhdWx0OntcbmFzc2VydC5mYWlsKFggYHVucmVjb2duaXplZCAke3EoUUNMQVNTKX0gJHtxKHFjbGFzcyl9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9ZWxzZSBpZihpc0FycmF5KHJhd1RyZWUpKXtcbmNvbnN0e2xlbmd0aH09cmF3VHJlZTtcbmZvcihsZXQgaT0wO2k8bGVuZ3RoO2krPTEpe1xucHJlcGFyZShyYXdUcmVlW2ldKTtcbiB9XG4gfWVsc2V7XG5jb25zdCBuYW1lcz1vd25LZXlzKHJhd1RyZWUpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBQcm9wZXJ0eSBuYW1lICR7bmFtZX0gb2YgJHtyYXdUcmVlfSBtdXN0IGJlIGEgc3RyaW5nYDtcbiB9XG5wcmVwYXJlKHJhd1RyZWVbbmFtZV0pO1xuIH1cbiB9XG4gfTtcblxuY29uc3QgbWFrZUluZGVudGVyPXNob3VsZEluZGVudD9tYWtlWWVzSW5kZW50ZXI6bWFrZU5vSW5kZW50ZXI7XG5sZXQgb3V0PW1ha2VJbmRlbnRlcigpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlY29kZT0ocmF3VHJlZSk9Pntcbi8vXG5yZXR1cm4gcmVjdXIocmF3VHJlZSk7XG4gfTtcblxuY29uc3QgZGVjb2RlUHJvcGVydHk9KG5hbWUsdmFsdWUpPT57XG5vdXQubGluZSgpO1xuaWYobmFtZT09PSdfX3Byb3RvX18nKXtcbi8vXG4vL1xuLy9cbi8vXG5vdXQubmV4dCggYFtcIl9fcHJvdG9fX1wiXTpgKTtcbiB9ZWxzZSBpZihpZGVudFBhdHRlcm4udGVzdChuYW1lKSl7XG5vdXQubmV4dCggYCR7bmFtZX06YCk7XG4gfWVsc2V7XG5vdXQubmV4dCggYCR7cXVvdGUobmFtZSl9OmApO1xuIH1cbmRlY29kZSh2YWx1ZSk7XG5vdXQubmV4dCgnLCcpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCByZWN1cj0ocmF3VHJlZSk9PntcbmlmKCFpc09iamVjdChyYXdUcmVlKSl7XG4vL1xucmV0dXJuIG91dC5uZXh0KHF1b3RlKHJhd1RyZWUpKTtcbiB9XG4vL1xuYXNzZXJ0LnR5cGVvZihyYXdUcmVlLCdvYmplY3QnKTtcbmFzc2VydChyYXdUcmVlIT09bnVsbCk7XG5pZihRQ0xBU1MgaW4gcmF3VHJlZSl7XG5jb25zdCBxY2xhc3M9cmF3VHJlZVtRQ0xBU1NdO1xuYXNzZXJ0LnR5cGVvZihxY2xhc3MsJ3N0cmluZycpO1xuYXNzZXJ0KCFpc0FycmF5KHJhd1RyZWUpKTtcbi8vXG4vL1xuLy9cbnN3aXRjaChyYXdUcmVlWydAcWNsYXNzJ10pe1xuLy9cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnTmFOJzpcbmNhc2UnSW5maW5pdHknOlxuY2FzZSctSW5maW5pdHknOntcbi8vXG5yZXR1cm4gb3V0Lm5leHQocWNsYXNzKTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3R7ZGlnaXRzfT1yYXdUcmVlO1xuYXNzZXJ0LnR5cGVvZihkaWdpdHMsJ3N0cmluZycpO1xucmV0dXJuIG91dC5uZXh0KCBgJHtCaWdJbnQoZGlnaXRzKX1uYCk7XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbi8vXG5yZXR1cm4gb3V0Lm5leHQoJ1N5bWJvbC5hc3luY0l0ZXJhdG9yJyk7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuY29uc3Qgc3ltPXBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbmFzc2VydC50eXBlb2Yoc3ltLCdzeW1ib2wnKTtcbmNvbnN0IHJlZ2lzdGVyZWROYW1lPVN5bWJvbC5rZXlGb3Ioc3ltKTtcbmlmKHJlZ2lzdGVyZWROYW1lPT09dW5kZWZpbmVkKXtcbmNvbnN0IG1hdGNoPUF0QXRQcmVmaXhQYXR0ZXJuLmV4ZWMobmFtZSk7XG5hc3NlcnQobWF0Y2ghPT1udWxsKTtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmFzc2VydChTeW1ib2xbc3VmZml4XT09PXN5bSk7XG5hc3NlcnQoaWRlbnRQYXR0ZXJuLnRlc3Qoc3VmZml4KSk7XG5yZXR1cm4gb3V0Lm5leHQoIGBTeW1ib2wuJHtzdWZmaXh9YCk7XG4gfVxucmV0dXJuIG91dC5uZXh0KCBgU3ltYm9sLmZvcigke3F1b3RlKHJlZ2lzdGVyZWROYW1lKX0pYCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0e3RhZyxwYXlsb2FkfT1yYXdUcmVlO1xub3V0Lm5leHQoIGBtYWtlVGFnZ2VkKCR7cXVvdGUodGFnKX0sYCk7XG5kZWNvZGUocGF5bG9hZCk7XG5yZXR1cm4gb3V0Lm5leHQoJyknKTtcbiB9XG5cbmNhc2Unc2xvdCc6e1xubGV0e2lmYWNlfT1yYXdUcmVlO1xuY29uc3QgaW5kZXg9TnVtYmVyKE5hdChyYXdUcmVlLmluZGV4KSk7XG5jb25zdCBuZXN0ZWRSZW5kZXI9KGFyZyk9PntcbmNvbnN0IG9sZE91dD1vdXQ7XG50cnl7XG5vdXQ9bWFrZU5vSW5kZW50ZXIoKTtcbmRlY29kZShhcmcpO1xucmV0dXJuIG91dC5kb25lKCk7XG4gfWZpbmFsbHl7XG5vdXQ9b2xkT3V0O1xuIH1cbiB9O1xuaWYoaW5kZXg8c2xvdHMubGVuZ3RoKXtcbmNvbnN0IHNsb3Q9bmVzdGVkUmVuZGVyKHNsb3RzW2luZGV4XSk7XG5pZihpZmFjZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gb3V0Lm5leHQoIGBzbG90VG9WYWwoJHtzbG90fSlgKTtcbiB9XG5pZmFjZT1uZXN0ZWRSZW5kZXIoaWZhY2UpO1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdFRvVmFsKCR7c2xvdH0sJHtpZmFjZX0pYCk7XG4gfWVsc2UgaWYoaWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdCgke2luZGV4fSlgKTtcbiB9XG5pZmFjZT1uZXN0ZWRSZW5kZXIoaWZhY2UpO1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdCgke2luZGV4fSwke2lmYWNlfSlgKTtcbiB9XG5cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09cmF3VHJlZTtcbm91dC5vcGVuKCd7Jyk7XG5kZWNvZGVQcm9wZXJ0eShRQ0xBU1Msb3JpZ2luYWwpO1xuaWYoJ3Jlc3QnaW4gcmF3VHJlZSl7XG5hc3NlcnQudHlwZW9mKHJlc3QsJ29iamVjdCcpO1xuYXNzZXJ0KHJlc3QhPT1udWxsKTtcbmNvbnN0IG5hbWVzPW93bktleXMocmVzdCk7XG5mb3IoY29uc3QgbmFtZSBvZiBuYW1lcyl7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYFByb3BlcnR5IG5hbWUgJHtxKFxubmFtZSlcbiB9IG9mICR7cmVzdH0gbXVzdCBiZSBhIHN0cmluZ2A7XG4gfVxuZGVjb2RlUHJvcGVydHkobmFtZSxyZXN0W25hbWVdKTtcbiB9XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnfScpO1xuIH1cblxuY2FzZSdlcnJvcic6e1xuY29uc3R7XG5uYW1lLFxubWVzc2FnZSxcbmNhdXNlPXVuZGVmaW5lZCxcbmVycm9ycz11bmRlZmluZWR9PVxucmF3VHJlZTtcbmNhdXNlPT09dW5kZWZpbmVkfHxcbkZhaWwgYGVycm9yIGNhdXNlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWFyc2hhbC1qdXN0aW5gO1xubmFtZSE9PSBgQWdncmVnYXRlRXJyb3JgfHxcbkZhaWwgYEFnZ3JlZ2F0ZUVycm9yIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWFyc2hhbC1qdXN0aW5gO1xuZXJyb3JzPT09dW5kZWZpbmVkfHxcbkZhaWwgYGVycm9yIGVycm9ycyBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbnJldHVybiBvdXQubmV4dCggYCR7bmFtZX0oJHtxdW90ZShtZXNzYWdlKX0pYCk7XG4gfVxuXG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgdW5yZWNvZ25pemVkICR7cShRQ0xBU1MpfSAke3EocWNsYXNzKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9ZWxzZSBpZihpc0FycmF5KHJhd1RyZWUpKXtcbmNvbnN0e2xlbmd0aH09cmF3VHJlZTtcbmlmKGxlbmd0aD09PTApe1xucmV0dXJuIG91dC5uZXh0KCdbXScpO1xuIH1lbHNle1xub3V0Lm9wZW4oJ1snKTtcbmZvcihsZXQgaT0wO2k8bGVuZ3RoO2krPTEpe1xub3V0LmxpbmUoKTtcbmRlY29kZShyYXdUcmVlW2ldKTtcbm91dC5uZXh0KCcsJyk7XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnXScpO1xuIH1cbiB9ZWxzZXtcbi8vXG4vL1xuY29uc3QgbmFtZXM9LyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJhd1RyZWUpO1xuaWYobmFtZXMubGVuZ3RoPT09MCl7XG5yZXR1cm4gb3V0Lm5leHQoJ3t9Jyk7XG4gfWVsc2V7XG5vdXQub3BlbigneycpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuZGVjb2RlUHJvcGVydHkobmFtZSxyYXdUcmVlW25hbWVdKTtcbiB9XG5yZXR1cm4gb3V0LmNsb3NlKCd9Jyk7XG4gfVxuIH1cbiB9O1xucHJlcGFyZShlbmNvZGluZyk7XG5kZWNvZGUoZW5jb2RpbmcpO1xucmV0dXJuIG91dC5kb25lKCk7XG4gfTskaOKAjV9vbmNlLmRlY29kZVRvSnVzdGluKGRlY29kZVRvSnVzdGluKTtcbmhhcmRlbihkZWNvZGVUb0p1c3Rpbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWNvZGVUb0p1c3RpbiI6WyJkZWNvZGVUb0p1c3RpbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABtyhljZwYAAGcGAAAtAAAAQGVuZG8vbWFyc2hhbC12MS41LjMvc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vbWFyc2hhbC5qcyJdLCJleHBvcnRzIjpbInBhcnNlIiwic3RyaW5naWZ5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLG1ha2VNYXJzaGFsOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCIuL21hcnNoYWwuanNcIiwgW1tcIm1ha2VNYXJzaGFsXCIsIFskaOKAjV9hID0+IChtYWtlTWFyc2hhbCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZG9Ob3RDb252ZXJ0VmFsVG9TbG90PSh2YWwpPT5cbkZhaWwgYE1hcnNoYWwncyBzdHJpbmdpZnkgcmVqZWN0cyBwcmVzZW5jZXMgYW5kIHByb21pc2VzICR7dmFsfWA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZG9Ob3RDb252ZXJ0U2xvdFRvVmFsPShzbG90LF9pZmFjZSk9PlxuRmFpbCBgTWFyc2hhbCdzIHBhcnNlIG11c3Qgbm90IGVuY29kZSBhbnkgc2xvdHMgJHtzbG90fWA7XG5cbmNvbnN0IGJhZEFycmF5SGFuZGxlcj1oYXJkZW4oe1xuZ2V0OihfdGFyZ2V0LG5hbWUsX3JlY2VpdmVyKT0+e1xuaWYobmFtZT09PSdsZW5ndGgnKXtcbnJldHVybiAwO1xuIH1cbi8vXG50aHJvdyBGYWlsIGBNYXJzaGFsJ3MgcGFyc2UgbXVzdCBub3QgZW5jb2RlIGFueSBzbG90IHBvc2l0aW9ucyAke25hbWV9YDtcbiB9fSk7XG5cblxuY29uc3QgYmFkQXJyYXk9aGFyZGVuKG5ldyBQcm94eShoYXJkZW4oW10pLGJhZEFycmF5SGFuZGxlcikpO1xuXG5jb25zdHtzZXJpYWxpemUsdW5zZXJpYWxpemV9PW1ha2VNYXJzaGFsKFxuZG9Ob3RDb252ZXJ0VmFsVG9TbG90LFxuZG9Ob3RDb252ZXJ0U2xvdFRvVmFsLFxue1xuZXJyb3JUYWdnaW5nOidvZmYnLFxuLy9cbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J2NhcGRhdGEnfSk7XG5cblxuXG4vKlxuXG5cbiAqL1xuY29uc3Qgc3RyaW5naWZ5PSh2YWwpPT5zZXJpYWxpemUodmFsKS5ib2R5OyRo4oCNX29uY2Uuc3RyaW5naWZ5KHN0cmluZ2lmeSk7XG5oYXJkZW4oc3RyaW5naWZ5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0IHBhcnNlPShzdHIpPT5cbnVuc2VyaWFsaXplKFxuaGFyZGVuKHtcbmJvZHk6c3RyLFxuc2xvdHM6YmFkQXJyYXl9KSk7JGjigI1fb25jZS5wYXJzZShwYXJzZSk7XG5cblxuaGFyZGVuKHBhcnNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InN0cmluZ2lmeSI6WyJzdHJpbmdpZnkiXSwicGFyc2UiOlsicGFyc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAVxO/11InAABSJwAAIwAAAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9tYXJzaGFsLmpzeyJpbXBvcnRzIjpbIkBlbmRvL25hdCIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIi4vZW5jb2RlVG9DYXBEYXRhLmpzIiwiLi9lbmNvZGVUb1NtYWxsY2Fwcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VNYXJzaGFsIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBOYXQsYXNzZXJ0UGFzc2FibGUsZ2V0SW50ZXJmYWNlT2YsZ2V0RXJyb3JDb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eU9mLHRvUGFzc2FibGVFcnJvcixYLEZhaWwscSxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcixvYmplY3RNYXAsUUNMQVNTLG1ha2VFbmNvZGVUb0NhcERhdGEsbWFrZURlY29kZUZyb21DYXBEYXRhLG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzLG1ha2VFbmNvZGVUb1NtYWxsY2FwczskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjigI1fYSA9PiAoTmF0ID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImFzc2VydFBhc3NhYmxlXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRo4oCNX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRo4oCNX2EgPT4gKGdldEludGVyZmFjZU9mID0gJGjigI1fYSldXSxbXCJnZXRFcnJvckNvbnN0cnVjdG9yXCIsIFskaOKAjV9hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjigI1fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaOKAjV9hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjigI1fYSldXSxbXCJ0b1Bhc3NhYmxlRXJyb3JcIiwgWyRo4oCNX2EgPT4gKHRvUGFzc2FibGVFcnJvciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjigI1fYSA9PiAobWFrZUVycm9yID0gJGjigI1fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaOKAjV9hID0+IChhbm5vdGF0ZUVycm9yID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRo4oCNX2EgPT4gKG9iamVjdE1hcCA9ICRo4oCNX2EpXV1dXSxbXCIuL2VuY29kZVRvQ2FwRGF0YS5qc1wiLCBbW1wiUUNMQVNTXCIsIFskaOKAjV9hID0+IChRQ0xBU1MgPSAkaOKAjV9hKV1dLFtcIm1ha2VFbmNvZGVUb0NhcERhdGFcIiwgWyRo4oCNX2EgPT4gKG1ha2VFbmNvZGVUb0NhcERhdGEgPSAkaOKAjV9hKV1dLFtcIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YVwiLCBbJGjigI1fYSA9PiAobWFrZURlY29kZUZyb21DYXBEYXRhID0gJGjigI1fYSldXV1dLFtcIi4vZW5jb2RlVG9TbWFsbGNhcHMuanNcIiwgW1tcIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzXCIsIFskaOKAjV9hID0+IChtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyA9ICRo4oCNX2EpXV0sW1wibWFrZUVuY29kZVRvU21hbGxjYXBzXCIsIFskaOKAjV9hID0+IChtYWtlRW5jb2RlVG9TbWFsbGNhcHMgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbmNvbnN0e2RlZmluZVByb3BlcnRpZXN9PU9iamVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0VmFsVG9TbG90Rm49KHgpPT54O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0U2xvdFRvVmFsRm49KHgsXyk9Png7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNYXJzaGFsPShcbmNvbnZlcnRWYWxUb1Nsb3Q9ZGVmYXVsdFZhbFRvU2xvdEZuLFxuY29udmVydFNsb3RUb1ZhbD1kZWZhdWx0U2xvdFRvVmFsRm4sXG57XG5lcnJvclRhZ2dpbmc9J29uJyxcbm1hcnNoYWxOYW1lPSdhbm9uLW1hcnNoYWwnLFxuLy9cbi8vXG5lcnJvcklkTnVtPTEwMDAwLFxuLy9cbi8vXG5tYXJzaGFsU2F2ZUVycm9yPShlcnIpPT5cbmNvbnNvbGUubG9nKCdUZW1wb3JhcnkgbG9nZ2luZyBvZiBzZW50IGVycm9yJyxlcnIpLFxuLy9cbi8vXG5zZXJpYWxpemVCb2R5Rm9ybWF0PSdjYXBkYXRhJ309XG57fSk9Plxue1xuYXNzZXJ0LnR5cGVvZihtYXJzaGFsTmFtZSwnc3RyaW5nJyk7XG5lcnJvclRhZ2dpbmc9PT0nb24nfHxcbmVycm9yVGFnZ2luZz09PSdvZmYnfHxcbkZhaWwgYFRoZSBlcnJvclRhZ2dpbmcgb3B0aW9uIGNhbiBvbmx5IGJlIFwib25cIiBvciBcIm9mZlwiICR7ZXJyb3JUYWdnaW5nfWA7XG5jb25zdCBuZXh0RXJyb3JJZD0oKT0+e1xuZXJyb3JJZE51bSs9MTtcbnJldHVybiBgZXJyb3I6JHttYXJzaGFsTmFtZX0jJHtlcnJvcklkTnVtfWA7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IHRvQ2FwRGF0YT0ocm9vdCk9PntcbmNvbnN0IHNsb3RzPVtdO1xuLy9cbmNvbnN0IHNsb3RNYXA9bmV3IE1hcCgpO1xuXG4vKlxuXG5cbiAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RDb21tb249KHBhc3NhYmxlKT0+e1xubGV0IGluZGV4PXNsb3RNYXAuZ2V0KHBhc3NhYmxlKTtcbmlmKGluZGV4IT09dW5kZWZpbmVkKXtcbi8vXG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcbnJldHVybiBoYXJkZW4oe2luZGV4LHJlcGVhdDp0cnVlfSk7XG4gfVxuXG5pbmRleD1zbG90cy5sZW5ndGg7XG5jb25zdCBzbG90PWNvbnZlcnRWYWxUb1Nsb3QocGFzc2FibGUpO1xuc2xvdHMucHVzaChzbG90KTtcbnNsb3RNYXAuc2V0KHBhc3NhYmxlLGluZGV4KTtcbnJldHVybiBoYXJkZW4oe2luZGV4LHJlcGVhdDpmYWxzZX0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAqL1xuY29uc3QgZW5jb2RlRXJyb3JDb21tb249KGVycixlbmNvZGVSZWN1cik9PntcbmNvbnN0IG1lc3NhZ2U9ZW5jb2RlUmVjdXIoIGAke2Vyci5tZXNzYWdlfWApO1xuYXNzZXJ0LnR5cGVvZihtZXNzYWdlLCdzdHJpbmcnKTtcbmNvbnN0IG5hbWU9ZW5jb2RlUmVjdXIoIGAke2Vyci5uYW1lfWApO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbi8vXG4vL1xuLy9cbmlmKGVycm9yVGFnZ2luZz09PSdvbicpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGVycm9ySWQ9ZW5jb2RlUmVjdXIobmV4dEVycm9ySWQoKSk7XG5hc3NlcnQudHlwZW9mKGVycm9ySWQsJ3N0cmluZycpO1xuYW5ub3RhdGVFcnJvcihlcnIsWCBgU2VudCBhcyAke2Vycm9ySWR9YCk7XG5tYXJzaGFsU2F2ZUVycm9yKGVycik7XG5yZXR1cm4gaGFyZGVuKHtlcnJvcklkLG1lc3NhZ2UsbmFtZX0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7bWVzc2FnZSxuYW1lfSk7XG4gfVxuIH07XG5cbmlmKHNlcmlhbGl6ZUJvZHlGb3JtYXQ9PT0nY2FwZGF0YScpe1xuLypcblxuXG5cbiAgICAgICAqL1xuY29uc3QgZW5jb2RlU2xvdFRvQ2FwRGF0YT0ocGFzc2FibGUsaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7aW5kZXgscmVwZWF0fT1lbmNvZGVTbG90Q29tbW9uKHBhc3NhYmxlKTtcblxuaWYocmVwZWF0PT09dHJ1ZXx8aWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J3Nsb3QnLGluZGV4fSk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHtbUUNMQVNTXTonc2xvdCcsaWZhY2UsaW5kZXh9KTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9KHZhbCxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb0NhcERhdGEodmFsLGdldEludGVyZmFjZU9mKHZhbCkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9taXNlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvQ2FwRGF0YShwcm9taXNlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIsZW5jb2RlUmVjdXIpPT57XG5jb25zdCBlcnJEYXRhPWVuY29kZUVycm9yQ29tbW9uKGVycixlbmNvZGVSZWN1cik7XG5yZXR1cm4gaGFyZGVuKHtbUUNMQVNTXTonZXJyb3InLC4uLmVyckRhdGF9KTtcbiB9O1xuXG5jb25zdCBlbmNvZGVUb0NhcERhdGE9bWFrZUVuY29kZVRvQ2FwRGF0YSh7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGEsXG5lbmNvZGVQcm9taXNlVG9DYXBEYXRhLFxuZW5jb2RlRXJyb3JUb0NhcERhdGF9KTtcblxuXG5jb25zdCBlbmNvZGVkPWVuY29kZVRvQ2FwRGF0YShyb290KTtcbmNvbnN0IGJvZHk9SlNPTi5zdHJpbmdpZnkoZW5jb2RlZCk7XG5yZXR1cm4gaGFyZGVuKHtcbmJvZHksXG5zbG90c30pO1xuXG4gfWVsc2UgaWYoc2VyaWFsaXplQm9keUZvcm1hdD09PSdzbWFsbGNhcHMnKXtcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuY29uc3QgZW5jb2RlU2xvdFRvU21hbGxjYXBzPShwcmVmaXgscGFzc2FibGUsaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7aW5kZXgscmVwZWF0fT1lbmNvZGVTbG90Q29tbW9uKHBhc3NhYmxlKTtcblxuLy9cbmlmKHJlcGVhdD09PXRydWV8fGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBgJHtwcmVmaXh9JHtpbmRleH1gO1xuIH1cbnJldHVybiBgJHtwcmVmaXh9JHtpbmRleH0uJHtpZmFjZX1gO1xuIH07XG5cbmNvbnN0IGVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPShyZW1vdGFibGUsX2VuY29kZVJlY3VyKT0+XG5lbmNvZGVTbG90VG9TbWFsbGNhcHMoJyQnLHJlbW90YWJsZSxnZXRJbnRlcmZhY2VPZihyZW1vdGFibGUpKTtcblxuY29uc3QgZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPShwcm9taXNlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvU21hbGxjYXBzKCcmJyxwcm9taXNlKTtcblxuY29uc3QgZW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz0oZXJyLGVuY29kZVJlY3VyKT0+e1xuY29uc3QgZXJyRGF0YT1lbmNvZGVFcnJvckNvbW1vbihlcnIsZW5jb2RlUmVjdXIpO1xuY29uc3R7bWVzc2FnZSwuLi5yZXN0fT1lcnJEYXRhO1xucmV0dXJuIGhhcmRlbih7JyNlcnJvcic6bWVzc2FnZSwuLi5yZXN0fSk7XG4gfTtcblxuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHM9bWFrZUVuY29kZVRvU21hbGxjYXBzKHtcbmVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzLFxuZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzLFxuZW5jb2RlRXJyb3JUb1NtYWxsY2Fwc30pO1xuXG5cbmNvbnN0IGVuY29kZWQ9ZW5jb2RlVG9TbWFsbGNhcHMocm9vdCk7XG5jb25zdCBzbWFsbGNhcHNCb2R5PUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xucmV0dXJuIGhhcmRlbih7XG4vL1xuLy9cbmJvZHk6IGAjJHtzbWFsbGNhcHNCb2R5fWAsXG5zbG90c30pO1xuXG4gfWVsc2V7XG4vL1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIHNlcmlhbGl6ZUJvZHlGb3JtYXQ6ICR7cShzZXJpYWxpemVCb2R5Rm9ybWF0KX1gO1xuIH1cbiB9O1xuXG5jb25zdCBtYWtlRnVsbFJldml2ZT0oc2xvdHMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdmFsTWFwPW5ldyBNYXAoKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBkZWNvZGVTbG90Q29tbW9uPShzbG90RGF0YSk9PntcbmNvbnN0e2lmYWNlPXVuZGVmaW5lZCxpbmRleCwuLi5yZXN0fT1zbG90RGF0YTtcbm93bktleXMocmVzdCkubGVuZ3RoPT09MHx8XG5GYWlsIGB1bmV4cGVjdGVkIGVuY29kZWQgc2xvdCBwcm9wZXJ0aWVzICR7cShvd25LZXlzKHJlc3QpKX1gO1xuY29uc3QgZXh0YW50PXZhbE1hcC5nZXQoaW5kZXgpO1xuaWYoZXh0YW50KXtcbnJldHVybiBleHRhbnQ7XG4gfVxuLy9cbi8vXG5jb25zdCBzbG90PXNsb3RzW051bWJlcihOYXQoaW5kZXgpKV07XG5jb25zdCB2YWw9Y29udmVydFNsb3RUb1ZhbChzbG90LGlmYWNlKTtcbnZhbE1hcC5zZXQoaW5kZXgsdmFsKTtcbnJldHVybiB2YWw7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmNvbnN0IGRlY29kZUVycm9yQ29tbW9uPShlcnJEYXRhLGRlY29kZVJlY3VyKT0+e1xuY29uc3R7XG5lcnJvcklkPXVuZGVmaW5lZCxcbm1lc3NhZ2UsXG5uYW1lLFxuY2F1c2U9dW5kZWZpbmVkLFxuZXJyb3JzPXVuZGVmaW5lZCxcbi4uLnJlc3R9PVxuZXJyRGF0YTtcbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBkTmFtZT1kZWNvZGVSZWN1cihuYW1lKTtcbmNvbnN0IGRNZXNzYWdlPWRlY29kZVJlY3VyKG1lc3NhZ2UpO1xuLy9cbmNvbnN0IGRFcnJvcklkPS8qICAgICAgICAgICAgICAgICAqL2Vycm9ySWQmJmRlY29kZVJlY3VyKGVycm9ySWQpO1xuaWYodHlwZW9mIGROYW1lIT09J3N0cmluZycpe1xudGhyb3cgRmFpbCBgaW52YWxpZCBlcnJvciBuYW1lIHR5cGVvZiAke3EodHlwZW9mIGROYW1lKX1gO1xuIH1cbmlmKHR5cGVvZiBkTWVzc2FnZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbWVzc2FnZSB0eXBlb2YgJHtxKHR5cGVvZiBkTWVzc2FnZSl9YDtcbiB9XG5jb25zdCBlcnJDb25zdHJ1Y3Rvcj1nZXRFcnJvckNvbnN0cnVjdG9yKGROYW1lKXx8RXJyb3I7XG5jb25zdCBlcnJvck5hbWU9XG5kRXJyb3JJZD09PXVuZGVmaW5lZD9cbiBgUmVtb3RlJHtlcnJDb25zdHJ1Y3Rvci5uYW1lfWA6XG4gYFJlbW90ZSR7ZXJyQ29uc3RydWN0b3IubmFtZX0oJHtkRXJyb3JJZH0pYDtcbmNvbnN0IG9wdGlvbnM9e1xuZXJyb3JOYW1lLFxuc2FuaXRpemU6ZmFsc2V9O1xuXG5pZihjYXVzZSl7XG5vcHRpb25zLmNhdXNlPWRlY29kZVJlY3VyKGNhdXNlKTtcbiB9XG5pZihlcnJvcnMpe1xub3B0aW9ucy5lcnJvcnM9ZGVjb2RlUmVjdXIoZXJyb3JzKTtcbiB9XG5jb25zdCByYXdFcnJvcj1tYWtlRXJyb3IoZE1lc3NhZ2UsZXJyQ29uc3RydWN0b3Isb3B0aW9ucyk7XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVzY3M9b2JqZWN0TWFwKHJlc3QsKGRhdGEpPT4oe1xudmFsdWU6ZGVjb2RlUmVjdXIoZGF0YSksXG53cml0YWJsZTpmYWxzZSxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2V9KSk7XG5cbmRlZmluZVByb3BlcnRpZXMocmF3RXJyb3IsZGVzY3MpO1xuaGFyZGVuKHJhd0Vycm9yKTtcbnJldHVybiB0b1Bhc3NhYmxlRXJyb3IocmF3RXJyb3IpO1xuIH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGE9KHJhd1RyZWUsX2RlY29kZVJlY3VyKT0+e1xuY29uc3R7W1FDTEFTU106XywuLi5zbG90RGF0YX09cmF3VHJlZTtcbnJldHVybiBkZWNvZGVTbG90Q29tbW9uKHNsb3REYXRhKTtcbiB9O1xuXG5jb25zdCBkZWNvZGVFcnJvckZyb21DYXBEYXRhPShyYXdUcmVlLGRlY29kZVJlY3VyKT0+e1xuY29uc3R7W1FDTEFTU106XywuLi5lcnJEYXRhfT1yYXdUcmVlO1xucmV0dXJuIGRlY29kZUVycm9yQ29tbW9uKGVyckRhdGEsZGVjb2RlUmVjdXIpO1xuIH07XG5cbmNvbnN0IHJldml2ZUZyb21DYXBEYXRhPW1ha2VEZWNvZGVGcm9tQ2FwRGF0YSh7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YTpkZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZVByb21pc2VGcm9tQ2FwRGF0YTpkZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZUVycm9yRnJvbUNhcERhdGF9KTtcblxuXG5jb25zdCBtYWtlRGVjb2RlU2xvdEZyb21TbWFsbGNhcHM9KHByZWZpeCk9Pntcbi8qXG5cblxuXG4gICAgICAgKi9cbnJldHVybihzdHJpbmdFbmNvZGluZyxfZGVjb2RlUmVjdXIpPT57XG5hc3NlcnQoc3RyaW5nRW5jb2RpbmcuY2hhckF0KDApPT09cHJlZml4KTtcbi8vXG5jb25zdCBpPXN0cmluZ0VuY29kaW5nLmluZGV4T2YoJy4nKTtcbmNvbnN0IGluZGV4PU51bWJlcihzdHJpbmdFbmNvZGluZy5zbGljZSgxLGk8MD91bmRlZmluZWQ6aSkpO1xuLy9cbmNvbnN0IGlmYWNlPWk8MD91bmRlZmluZWQ6c3RyaW5nRW5jb2Rpbmcuc2xpY2UoaSsxKTtcbnJldHVybiBkZWNvZGVTbG90Q29tbW9uKHtpZmFjZSxpbmRleH0pO1xuIH07XG4gfTtcbmNvbnN0IGRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzKCckJyk7XG5jb25zdCBkZWNvZGVQcm9taXNlRnJvbVNtYWxsY2Fwcz1tYWtlRGVjb2RlU2xvdEZyb21TbWFsbGNhcHMoJyYnKTtcblxuY29uc3QgZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPShlbmNvZGluZyxkZWNvZGVSZWN1cik9PntcbmNvbnN0eycjZXJyb3InOm1lc3NhZ2UsLi4ucmVzdEVyckRhdGF9PWVuY29kaW5nO1xuIWhhc093blByb3BlcnR5T2YocmVzdEVyckRhdGEsJ21lc3NhZ2UnKXx8XG5GYWlsIGB1bmV4cGVjdGVkIGVuY29kZWQgZXJyb3IgcHJvcGVydHkgJHtxKCdtZXNzYWdlJyl9YDtcbnJldHVybiBkZWNvZGVFcnJvckNvbW1vbih7bWVzc2FnZSwuLi5yZXN0RXJyRGF0YX0sZGVjb2RlUmVjdXIpO1xuIH07XG5cbmNvbnN0IHJldml2ZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZUZyb21TbWFsbGNhcHMoe1xuLy9cbmRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMsXG4vL1xuZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVFcnJvckZyb21TbWFsbGNhcHN9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtyZXZpdmVGcm9tQ2FwRGF0YSxyZXZpdmVGcm9tU21hbGxjYXBzfSk7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IGZyb21DYXBEYXRhPShkYXRhKT0+e1xuY29uc3R7Ym9keSxzbG90c309ZGF0YTtcbnR5cGVvZiBib2R5PT09J3N0cmluZyd8fFxuRmFpbCBgdW5zZXJpYWxpemUoKSBnaXZlbiBub24tY2FwZGF0YSAoLmJvZHkgaXMgJHtib2R5fSwgbm90IHN0cmluZylgO1xuaXNBcnJheShkYXRhLnNsb3RzKXx8XG5GYWlsIGB1bnNlcmlhbGl6ZSgpIGdpdmVuIG5vbi1jYXBkYXRhICguc2xvdHMgYXJlIG5vdCBBcnJheSlgO1xuY29uc3R7cmV2aXZlRnJvbUNhcERhdGEscmV2aXZlRnJvbVNtYWxsY2Fwc309bWFrZUZ1bGxSZXZpdmUoc2xvdHMpO1xubGV0IHJlc3VsdDtcbi8vXG5pZihib2R5LmNoYXJBdCgwKT09PScjJyl7XG5jb25zdCBzbWFsbGNhcHNCb2R5PWJvZHkuc2xpY2UoMSk7XG5jb25zdCBlbmNvZGluZz1oYXJkZW4oSlNPTi5wYXJzZShzbWFsbGNhcHNCb2R5KSk7XG5yZXN1bHQ9aGFyZGVuKHJldml2ZUZyb21TbWFsbGNhcHMoZW5jb2RpbmcpKTtcbiB9ZWxzZXtcbmNvbnN0IHJhd1RyZWU9aGFyZGVuKEpTT04ucGFyc2UoYm9keSkpO1xucmVzdWx0PWhhcmRlbihyZXZpdmVGcm9tQ2FwRGF0YShyYXdUcmVlKSk7XG4gfVxuLy9cbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUocmVzdWx0KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgKi9yZXN1bHQpO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe1xudG9DYXBEYXRhLFxuZnJvbUNhcERhdGEsXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuc2VyaWFsaXplOnRvQ2FwRGF0YSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnVuc2VyaWFsaXplOmZyb21DYXBEYXRhfSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZU1hcnNoYWwobWFrZU1hcnNoYWwpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1hcnNoYWwiOlsibWFrZU1hcnNoYWwiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAryK5juwlAADsJQAAJQAAAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9yYW5rT3JkZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIi4vZW5jb2RlUGFzc2FibGUuanMiXSwiZXhwb3J0cyI6WyJGdWxsUmFua0NvdmVyIiwiYXNzZXJ0UmFua1NvcnRlZCIsImNvbXBhcmF0b3JNaXJyb3JJbWFnZSIsImNvbXBhcmVBbnRpUmFuayIsImNvbXBhcmVSYW5rIiwiY292ZXJlZEVudHJpZXMiLCJnZXRJbmRleENvdmVyIiwiZ2V0UGFzc1N0eWxlQ292ZXIiLCJpbnRlcnNlY3RSYW5rQ292ZXJzIiwiaXNSYW5rU29ydGVkIiwibWFrZUNvbXBhcmF0b3JLaXQiLCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCIsInNvcnRCeVJhbmsiLCJ0cml2aWFsQ29tcGFyYXRvciIsInVuaW9uUmFua0NvdmVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0VGFnLHBhc3NTdHlsZU9mLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxGYWlsLHEscGFzc1N0eWxlUHJlZml4ZXMscmVjb3JkTmFtZXMscmVjb3JkVmFsdWVzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldFRhZ1wiLCBbJGjigI1fYSA9PiAoZ2V0VGFnID0gJGjigI1fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjigI1fYSA9PiAocGFzc1N0eWxlT2YgPSAkaOKAjV9hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjigI1fYSA9PiAobmFtZUZvclBhc3NhYmxlU3ltYm9sID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCIuL2VuY29kZVBhc3NhYmxlLmpzXCIsIFtbXCJwYXNzU3R5bGVQcmVmaXhlc1wiLCBbJGjigI1fYSA9PiAocGFzc1N0eWxlUHJlZml4ZXMgPSAkaOKAjV9hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaOKAjV9hID0+IChyZWNvcmROYW1lcyA9ICRo4oCNX2EpXV0sW1wicmVjb3JkVmFsdWVzXCIsIFskaOKAjV9hID0+IChyZWNvcmRWYWx1ZXMgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3R7ZW50cmllcyxmcm9tRW50cmllcyxzZXRQcm90b3R5cGVPZixpc309T2JqZWN0O1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzYW1lVmFsdWVaZXJvPSh4LHkpPT54PT09eXx8aXMoeCx5KTtcblxuY29uc3QgICAgICAgIHRyaXZpYWxDb21wYXJhdG9yPShsZWZ0LHJpZ2h0KT0+XG4vL1xubGVmdDxyaWdodD8tMTpsZWZ0PT09cmlnaHQ/MDoxO1xuXG4vKlxuXG4gKi8kaOKAjV9vbmNlLnRyaXZpYWxDb21wYXJhdG9yKHRyaXZpYWxDb21wYXJhdG9yKTtcblxuY29uc3QgcGFzc1N0eWxlUmFua3M9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmZyb21FbnRyaWVzKFxuZW50cmllcyhwYXNzU3R5bGVQcmVmaXhlcylcbi8vXG4uc29ydCgoW19sZWZ0U3R5bGUsbGVmdFByZWZpeGVzXSxbX3JpZ2h0U3R5bGUscmlnaHRQcmVmaXhlc10pPT57XG5yZXR1cm4gdHJpdmlhbENvbXBhcmF0b3IobGVmdFByZWZpeGVzLHJpZ2h0UHJlZml4ZXMpO1xuIH0pLlxubWFwKChbcGFzc1N0eWxlLHByZWZpeGVzXSxpbmRleCk9Pntcbi8vXG4vL1xuLy9cbnByZWZpeGVzPT09Wy4uLnByZWZpeGVzXS5zb3J0KCkuam9pbignJyl8fFxuRmFpbCBgdW5zb3J0ZWQgcHJlZml4ZXMgZm9yIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX06ICR7cShwcmVmaXhlcyl9YDtcbmNvbnN0IGNvdmVyPVtcbnByZWZpeGVzLmNoYXJBdCgwKSxcblN0cmluZy5mcm9tQ2hhckNvZGUocHJlZml4ZXMuY2hhckNvZGVBdChwcmVmaXhlcy5sZW5ndGgtMSkrMSldO1xuXG5yZXR1cm5bcGFzc1N0eWxlLHtpbmRleCxjb3Zlcn1dO1xuIH0pKTtcblxuXG5zZXRQcm90b3R5cGVPZihwYXNzU3R5bGVSYW5rcyxudWxsKTtcbmhhcmRlbihwYXNzU3R5bGVSYW5rcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRQYXNzU3R5bGVDb3Zlcj0ocGFzc1N0eWxlKT0+cGFzc1N0eWxlUmFua3NbcGFzc1N0eWxlXS5jb3ZlcjskaOKAjV9vbmNlLmdldFBhc3NTdHlsZUNvdmVyKGdldFBhc3NTdHlsZUNvdmVyKTtcbmhhcmRlbihnZXRQYXNzU3R5bGVDb3Zlcik7XG5cbi8qXG5cbiAqL1xuY29uc3QgbWVtb09mU29ydGVkPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cbiAqL1xuY29uc3QgY29tcGFyYXRvck1pcnJvckltYWdlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvbXBhcmF0b3JLaXQ9KGNvbXBhcmVSZW1vdGFibGVzPShfeCxfeSk9PjApPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29tcGFyYXRvcj0obGVmdCxyaWdodCk9PntcbmlmKHNhbWVWYWx1ZVplcm8obGVmdCxyaWdodCkpe1xucmV0dXJuIDA7XG4gfVxuY29uc3QgbGVmdFN0eWxlPXBhc3NTdHlsZU9mKGxlZnQpO1xuY29uc3QgcmlnaHRTdHlsZT1wYXNzU3R5bGVPZihyaWdodCk7XG5pZihsZWZ0U3R5bGUhPT1yaWdodFN0eWxlKXtcbnJldHVybiB0cml2aWFsQ29tcGFyYXRvcihcbnBhc3NTdHlsZVJhbmtzW2xlZnRTdHlsZV0uaW5kZXgsXG5wYXNzU3R5bGVSYW5rc1tyaWdodFN0eWxlXS5pbmRleCk7XG5cbiB9XG4vKlxuXG4gICAgICovXG5zd2l0Y2gobGVmdFN0eWxlKXtcbmNhc2UncmVtb3RhYmxlJzp7XG5yZXR1cm4gY29tcGFyZVJlbW90YWJsZXMobGVmdCxyaWdodCk7XG4gfVxuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdudWxsJzpcbmNhc2UnZXJyb3InOlxuY2FzZSdwcm9taXNlJzp7XG4vL1xuLy9cbnJldHVybiAwO1xuIH1cbmNhc2UnYm9vbGVhbic6XG5jYXNlJ2JpZ2ludCc6XG5jYXNlJ3N0cmluZyc6e1xuLy9cbi8vXG5pZihsZWZ0PHJpZ2h0KXtcbnJldHVybi0xO1xuIH1lbHNle1xuYXNzZXJ0KGxlZnQ+cmlnaHQpO1xucmV0dXJuIDE7XG4gfVxuIH1cbmNhc2Unc3ltYm9sJzp7XG5yZXR1cm4gY29tcGFyYXRvcihcbm5hbWVGb3JQYXNzYWJsZVN5bWJvbChsZWZ0KSxcbm5hbWVGb3JQYXNzYWJsZVN5bWJvbChyaWdodCkpO1xuXG4gfVxuY2FzZSdudW1iZXInOntcbi8vXG5pZihOdW1iZXIuaXNOYU4obGVmdCkpe1xuYXNzZXJ0KCFOdW1iZXIuaXNOYU4ocmlnaHQpKTtcbnJldHVybiAxO1xuIH1lbHNlIGlmKE51bWJlci5pc05hTihyaWdodCkpe1xucmV0dXJuLTE7XG4gfVxuLy9cbi8vXG5pZihsZWZ0PHJpZ2h0KXtcbnJldHVybi0xO1xuIH1lbHNle1xuYXNzZXJ0KGxlZnQ+cmlnaHQpO1xucmV0dXJuIDE7XG4gfVxuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgbGVmdE5hbWVzPXJlY29yZE5hbWVzKGxlZnQpO1xuY29uc3QgcmlnaHROYW1lcz1yZWNvcmROYW1lcyhyaWdodCk7XG5cbmNvbnN0IHJlc3VsdD1jb21wYXJhdG9yKGxlZnROYW1lcyxyaWdodE5hbWVzKTtcbmlmKHJlc3VsdCE9PTApe1xucmV0dXJuIHJlc3VsdDtcbiB9XG5yZXR1cm4gY29tcGFyYXRvcihcbnJlY29yZFZhbHVlcyhsZWZ0LGxlZnROYW1lcyksXG5yZWNvcmRWYWx1ZXMocmlnaHQscmlnaHROYW1lcykpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG5jb25zdCBsZW49TWF0aC5taW4obGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xuY29uc3QgcmVzdWx0PWNvbXBhcmF0b3IobGVmdFtpXSxyaWdodFtpXSk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbi8vXG4vL1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuLy9cbmNvbnN0IGxhYmVsQ29tcD1jb21wYXJhdG9yKGdldFRhZyhsZWZ0KSxnZXRUYWcocmlnaHQpKTtcbmlmKGxhYmVsQ29tcCE9PTApe1xucmV0dXJuIGxhYmVsQ29tcDtcbiB9XG5yZXR1cm4gY29tcGFyYXRvcihsZWZ0LnBheWxvYWQscmlnaHQucGF5bG9hZCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgcGFzc1N0eWxlOiAke3EobGVmdFN0eWxlKX1gO1xuIH19XG5cbi8qICAgICAgICAgICAgICAgKi9cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYW50aUNvbXBhcmF0b3I9KHgseSk9PmNvbXBhcmF0b3IoeSx4KTtcblxubWVtb09mU29ydGVkLnNldChjb21wYXJhdG9yLG5ldyBXZWFrU2V0KCkpO1xubWVtb09mU29ydGVkLnNldChhbnRpQ29tcGFyYXRvcixuZXcgV2Vha1NldCgpKTtcbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuc2V0KGNvbXBhcmF0b3IsYW50aUNvbXBhcmF0b3IpO1xuY29tcGFyYXRvck1pcnJvckltYWdlcy5zZXQoYW50aUNvbXBhcmF0b3IsY29tcGFyYXRvcik7XG5cbnJldHVybiBoYXJkZW4oe2NvbXBhcmF0b3IsYW50aUNvbXBhcmF0b3J9KTtcbiB9O1xuLypcblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VDb21wYXJhdG9yS2l0KG1ha2VDb21wYXJhdG9yS2l0KTtcbmNvbnN0ICAgICAgICBjb21wYXJhdG9yTWlycm9ySW1hZ2U9KGNvbXBhcmF0b3IpPT5cbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuZ2V0KGNvbXBhcmF0b3IpO1xuXG4vKlxuXG5cblxuICovJGjigI1fb25jZS5jb21wYXJhdG9yTWlycm9ySW1hZ2UoY29tcGFyYXRvck1pcnJvckltYWdlKTtcbmNvbnN0ICAgICAgICBpc1JhbmtTb3J0ZWQ9KHBhc3NhYmxlcyxjb21wYXJlKT0+e1xuY29uc3Qgc3ViTWVtb09mU29ydGVkPW1lbW9PZlNvcnRlZC5nZXQoY29tcGFyZSk7XG5hc3NlcnQoc3ViTWVtb09mU29ydGVkIT09dW5kZWZpbmVkKTtcbmlmKHN1Yk1lbW9PZlNvcnRlZC5oYXMocGFzc2FibGVzKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5hc3NlcnQocGFzc1N0eWxlT2YocGFzc2FibGVzKT09PSdjb3B5QXJyYXknKTtcbmZvcihsZXQgaT0xO2k8cGFzc2FibGVzLmxlbmd0aDtpKz0xKXtcbmlmKGNvbXBhcmUocGFzc2FibGVzW2ktMV0scGFzc2FibGVzW2ldKT49MSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnN1Yk1lbW9PZlNvcnRlZC5hZGQocGFzc2FibGVzKTtcbnJldHVybiB0cnVlO1xuIH07JGjigI1fb25jZS5pc1JhbmtTb3J0ZWQoaXNSYW5rU29ydGVkKTtcbmhhcmRlbihpc1JhbmtTb3J0ZWQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFJhbmtTb3J0ZWQ9KHNvcnRlZCxjb21wYXJlKT0+XG5pc1JhbmtTb3J0ZWQoc29ydGVkLGNvbXBhcmUpfHxcbi8vXG4vL1xuRmFpbCBgTXVzdCBiZSByYW5rIHNvcnRlZDogJHtzb3J0ZWR9IHZzICR7c29ydEJ5UmFuayhzb3J0ZWQsY29tcGFyZSl9YDskaOKAjV9vbmNlLmFzc2VydFJhbmtTb3J0ZWQoYXNzZXJ0UmFua1NvcnRlZCk7XG5oYXJkZW4oYXNzZXJ0UmFua1NvcnRlZCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNvcnRCeVJhbms9KHBhc3NhYmxlcyxjb21wYXJlKT0+e1xuaWYoQXJyYXkuaXNBcnJheShwYXNzYWJsZXMpKXtcbmhhcmRlbihwYXNzYWJsZXMpO1xuLy9cbi8vXG4vL1xuaWYoaXNSYW5rU29ydGVkKHBhc3NhYmxlcyxjb21wYXJlKSl7XG5yZXR1cm4gcGFzc2FibGVzO1xuIH1cbiB9XG5jb25zdCB1bnNvcnRlZD1bLi4ucGFzc2FibGVzXTtcbnVuc29ydGVkLmZvckVhY2goaGFyZGVuKTtcbmNvbnN0IHNvcnRlZD1oYXJkZW4odW5zb3J0ZWQuc29ydChjb21wYXJlKSk7XG5jb25zdCBzdWJNZW1vT2ZTb3J0ZWQ9bWVtb09mU29ydGVkLmdldChjb21wYXJlKTtcbmFzc2VydChzdWJNZW1vT2ZTb3J0ZWQhPT11bmRlZmluZWQpO1xuc3ViTWVtb09mU29ydGVkLmFkZChzb3J0ZWQpO1xucmV0dXJuIHNvcnRlZDtcbiB9OyRo4oCNX29uY2Uuc29ydEJ5UmFuayhzb3J0QnlSYW5rKTtcbmhhcmRlbihzb3J0QnlSYW5rKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHJhbmtTZWFyY2g9KHNvcnRlZCxjb21wYXJlLGtleSxiaWFzPSdsZWZ0TW9zdCcpPT57XG5hc3NlcnRSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKTtcbmxldCBsZWZ0PTA7XG5sZXQgcmlnaHQ9c29ydGVkLmxlbmd0aDtcbndoaWxlKGxlZnQ8cmlnaHQpe1xuY29uc3QgbT1NYXRoLmZsb29yKChsZWZ0K3JpZ2h0KS8yKTtcbmNvbnN0IGNvbXA9Y29tcGFyZShzb3J0ZWRbbV0sa2V5KTtcbmlmKGNvbXA8PS0xfHxjb21wPT09MCYmYmlhcz09PSdyaWdodE1vc3QnKXtcbmxlZnQ9bSsxO1xuIH1lbHNle1xuYXNzZXJ0KGNvbXA+PTF8fGNvbXA9PT0wJiZiaWFzPT09J2xlZnRNb3N0Jyk7XG5yaWdodD1tO1xuIH1cbiB9XG5yZXR1cm4gYmlhcz09PSdsZWZ0TW9zdCc/bGVmdDpyaWdodC0xO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEluZGV4Q292ZXI9KHNvcnRlZCxjb21wYXJlLFtsZWZ0S2V5LHJpZ2h0S2V5XSk9PntcbmFzc2VydFJhbmtTb3J0ZWQoc29ydGVkLGNvbXBhcmUpO1xuY29uc3QgbGVmdEluZGV4PXJhbmtTZWFyY2goc29ydGVkLGNvbXBhcmUsbGVmdEtleSwnbGVmdE1vc3QnKTtcbmNvbnN0IHJpZ2h0SW5kZXg9cmFua1NlYXJjaChzb3J0ZWQsY29tcGFyZSxyaWdodEtleSwncmlnaHRNb3N0Jyk7XG5yZXR1cm5bbGVmdEluZGV4LHJpZ2h0SW5kZXhdO1xuIH07JGjigI1fb25jZS5nZXRJbmRleENvdmVyKGdldEluZGV4Q292ZXIpO1xuaGFyZGVuKGdldEluZGV4Q292ZXIpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBGdWxsUmFua0NvdmVyPWhhcmRlbihbJycsJ3snXSk7XG5cbi8qXG5cblxuXG4gKi8kaOKAjV9vbmNlLkZ1bGxSYW5rQ292ZXIoRnVsbFJhbmtDb3Zlcik7XG5jb25zdCAgICAgICAgY292ZXJlZEVudHJpZXM9KHNvcnRlZCxbbGVmdEluZGV4LHJpZ2h0SW5kZXhdKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXRlcmFibGU9aGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5sZXQgaT1sZWZ0SW5kZXg7XG5yZXR1cm4gaGFyZGVuKHtcbm5leHQ6KCk9PntcbmlmKGk8PXJpZ2h0SW5kZXgpe1xuY29uc3QgZWxlbWVudD1zb3J0ZWRbaV07XG5pKz0xO1xucmV0dXJuIGhhcmRlbih7dmFsdWU6W2ksZWxlbWVudF0sZG9uZTpmYWxzZX0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7dmFsdWU6dW5kZWZpbmVkLGRvbmU6dHJ1ZX0pO1xuIH1cbiB9fSk7XG5cbiB9fSk7XG5cbnJldHVybiBpdGVyYWJsZTtcbiB9OyRo4oCNX29uY2UuY292ZXJlZEVudHJpZXMoY292ZXJlZEVudHJpZXMpO1xuaGFyZGVuKGNvdmVyZWRFbnRyaWVzKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1heFJhbms9KGNvbXBhcmUsYSxiKT0+Y29tcGFyZShhLGIpPj0wP2E6YjtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1pblJhbms9KGNvbXBhcmUsYSxiKT0+Y29tcGFyZShhLGIpPD0wP2E6YjtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHVuaW9uUmFua0NvdmVycz0oY29tcGFyZSxjb3ZlcnMpPT57XG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHVuaW9uUmFua0NvdmVyUGFpcj0oW2xlZnRBLHJpZ2h0QV0sW2xlZnRCLHJpZ2h0Ql0pPT5bXG5taW5SYW5rKGNvbXBhcmUsbGVmdEEsbGVmdEIpLFxubWF4UmFuayhjb21wYXJlLHJpZ2h0QSxyaWdodEIpXTtcblxucmV0dXJuIGNvdmVycy5yZWR1Y2UodW5pb25SYW5rQ292ZXJQYWlyLFsneycsJyddKTtcbiB9OyRo4oCNX29uY2UudW5pb25SYW5rQ292ZXJzKHVuaW9uUmFua0NvdmVycyk7XG5oYXJkZW4odW5pb25SYW5rQ292ZXJzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGludGVyc2VjdFJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCBpbnRlcnNlY3RSYW5rQ292ZXJQYWlyPShbbGVmdEEscmlnaHRBXSxbbGVmdEIscmlnaHRCXSk9Pltcbm1heFJhbmsoY29tcGFyZSxsZWZ0QSxsZWZ0QiksXG5taW5SYW5rKGNvbXBhcmUscmlnaHRBLHJpZ2h0QildO1xuXG5yZXR1cm4gY292ZXJzLnJlZHVjZShpbnRlcnNlY3RSYW5rQ292ZXJQYWlyLFsnJywneyddKTtcbiB9OyRo4oCNX29uY2UuaW50ZXJzZWN0UmFua0NvdmVycyhpbnRlcnNlY3RSYW5rQ292ZXJzKTtcblxuY29uc3QgICAgICAge2NvbXBhcmF0b3I6Y29tcGFyZVJhbmssYW50aUNvbXBhcmF0b3I6Y29tcGFyZUFudGlSYW5rfT1cbm1ha2VDb21wYXJhdG9yS2l0KCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmNvbXBhcmVSYW5rKGNvbXBhcmVSYW5rKTskaOKAjV9vbmNlLmNvbXBhcmVBbnRpUmFuayhjb21wYXJlQW50aVJhbmspO1xuY29uc3QgICAgICAgIG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0PShsb25nTGl2ZWQ9ZmFsc2UpPT57XG5sZXQgbnVtU2Vlbj0wO1xuLy9cbi8vXG4vL1xuY29uc3QgTWFwQ29uc3RydWN0b3I9bG9uZ0xpdmVkP1dlYWtNYXA6TWFwO1xuY29uc3Qgc2Vlbj1uZXcgTWFwQ29uc3RydWN0b3IoKTtcbmNvbnN0IHRhZz0ocik9PntcbmlmKHNlZW4uaGFzKHIpKXtcbnJldHVybiBzZWVuLmdldChyKTtcbiB9XG5udW1TZWVuKz0xO1xuc2Vlbi5zZXQocixudW1TZWVuKTtcbnJldHVybiBudW1TZWVuO1xuIH07XG5jb25zdCBjb21wYXJlUmVtb3RhYmxlcz0oeCx5KT0+Y29tcGFyZVJhbmsodGFnKHgpLHRhZyh5KSk7XG5yZXR1cm4gbWFrZUNvbXBhcmF0b3JLaXQoY29tcGFyZVJlbW90YWJsZXMpO1xuIH07JGjigI1fb25jZS5tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCk7XG5oYXJkZW4obWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJpdmlhbENvbXBhcmF0b3IiOlsidHJpdmlhbENvbXBhcmF0b3IiXSwiZ2V0UGFzc1N0eWxlQ292ZXIiOlsiZ2V0UGFzc1N0eWxlQ292ZXIiXSwibWFrZUNvbXBhcmF0b3JLaXQiOlsibWFrZUNvbXBhcmF0b3JLaXQiXSwiY29tcGFyYXRvck1pcnJvckltYWdlIjpbImNvbXBhcmF0b3JNaXJyb3JJbWFnZSJdLCJpc1JhbmtTb3J0ZWQiOlsiaXNSYW5rU29ydGVkIl0sImFzc2VydFJhbmtTb3J0ZWQiOlsiYXNzZXJ0UmFua1NvcnRlZCJdLCJzb3J0QnlSYW5rIjpbInNvcnRCeVJhbmsiXSwiZ2V0SW5kZXhDb3ZlciI6WyJnZXRJbmRleENvdmVyIl0sIkZ1bGxSYW5rQ292ZXIiOlsiRnVsbFJhbmtDb3ZlciJdLCJjb3ZlcmVkRW50cmllcyI6WyJjb3ZlcmVkRW50cmllcyJdLCJ1bmlvblJhbmtDb3ZlcnMiOlsidW5pb25SYW5rQ292ZXJzIl0sImludGVyc2VjdFJhbmtDb3ZlcnMiOlsiaW50ZXJzZWN0UmFua0NvdmVycyJdLCJjb21wYXJlUmFuayI6WyJjb21wYXJlUmFuayJdLCJjb21wYXJlQW50aVJhbmsiOlsiY29tcGFyZUFudGlSYW5rIl0sIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0IjpbIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAACEAAABAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAsjlNw2AFAABgBQAAHgAAAEBlbmRvL25hdC12NS4wLjEwL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiTmF0IiwiaXNOYXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlzTmF0LCAnbmFtZScsIHt2YWx1ZTogXCJpc05hdFwifSk7JGjigI1fb25jZS5pc05hdChpc05hdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdCwgJ25hbWUnLCB7dmFsdWU6IFwiTmF0XCJ9KTskaOKAjV9vbmNlLk5hdChOYXQpOyAgIC8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBpc05hdChhbGxlZ2VkTnVtKXtcbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J2JpZ2ludCcpe1xucmV0dXJuIGFsbGVnZWROdW0+PTA7XG4gfVxuaWYodHlwZW9mIGFsbGVnZWROdW0hPT0nbnVtYmVyJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5yZXR1cm4gTnVtYmVyLmlzU2FmZUludGVnZXIoYWxsZWdlZE51bSkmJmFsbGVnZWROdW0+PTA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gTmF0KGFsbGVnZWROdW0pe1xuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nYmlnaW50Jyl7XG5pZihhbGxlZ2VkTnVtPDApe1xudGhyb3cgUmFuZ2VFcnJvciggYCR7YWxsZWdlZE51bX0gaXMgbmVnYXRpdmVgKTtcbiB9XG5yZXR1cm4gYWxsZWdlZE51bTtcbiB9XG5cbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J251bWJlcicpe1xuaWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGFsbGVnZWROdW0pKXtcbnRocm93IFJhbmdlRXJyb3IoIGAke2FsbGVnZWROdW19IGlzIG5vdCBhIHNhZmUgaW50ZWdlcmApO1xuIH1cbmlmKGFsbGVnZWROdW08MCl7XG50aHJvdyBSYW5nZUVycm9yKCBgJHthbGxlZ2VkTnVtfSBpcyBuZWdhdGl2ZWApO1xuIH1cbnJldHVybiBCaWdJbnQoYWxsZWdlZE51bSk7XG4gfVxuXG50aHJvdyBUeXBlRXJyb3IoXG4gYCR7YWxsZWdlZE51bX0gaXMgYSAke3R5cGVvZiBhbGxlZ2VkTnVtfSBidXQgbXVzdCBiZSBhIGJpZ2ludCBvciBhIG51bWJlcmApO1xuXG4gfVxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNOYXQiOlsiaXNOYXQiXSwiTmF0IjpbIk5hdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAt4qeYRAoAAEQKAAAgAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvaXRlci1oZWxwZXJzLmpzIiwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3NyYy9lcnJvci5qcyIsIi4vc3JjL3JlbW90YWJsZS5qcyIsIi4vc3JjL3N5bWJvbC5qcyIsIi4vc3JjL3N0cmluZy5qcyIsIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIiwiLi9zcmMvbWFrZVRhZ2dlZC5qcyIsIi4vc3JjL21ha2UtZmFyLmpzIiwiLi9zcmMvdHlwZUd1YXJkcy5qcyIsIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiRmFyIiwiRmFyIiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJmaWx0ZXJJdGVyYWJsZSIsImZpbHRlckl0ZXJhYmxlIiwiaXNFcnJvckxpa2UiLCJpc0Vycm9yTGlrZSIsImlzT2JqZWN0IiwiaXNPYmplY3QiLCJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSIsImlzUGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIixudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9zcmMvaXRlci1oZWxwZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvZXJyb3IuanNcIiwgW11dLFtcIi4vc3JjL3JlbW90YWJsZS5qc1wiLCBbXV0sW1wiLi9zcmMvc3ltYm9sLmpzXCIsIFtdXSxbXCIuL3NyYy9zdHJpbmcuanNcIiwgW11dLFtcIi4vc3JjL3Bhc3NTdHlsZU9mLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlVGFnZ2VkLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlLWZhci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2l0ZXItaGVscGVycy5qcyI6W1sibWFwSXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLFsiZmlsdGVySXRlcmFibGUiLCJmaWx0ZXJJdGVyYWJsZSJdXSwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiOltbIlBBU1NfU1RZTEUiLCJQQVNTX1NUWUxFIl0sWyJpc09iamVjdCIsImlzT2JqZWN0Il0sWyJhc3NlcnRDaGVja2VyIiwiYXNzZXJ0Q2hlY2tlciJdLFsiZ2V0VGFnIiwiZ2V0VGFnIl0sWyJoYXNPd25Qcm9wZXJ0eU9mIiwiaGFzT3duUHJvcGVydHlPZiJdXSwiLi9zcmMvZXJyb3IuanMiOltbImdldEVycm9yQ29uc3RydWN0b3IiLCJnZXRFcnJvckNvbnN0cnVjdG9yIl0sWyJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIl1dLCIuL3NyYy9yZW1vdGFibGUuanMiOltbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXV0sIi4vc3JjL3N5bWJvbC5qcyI6W1siYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLFsiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiXSxbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCIsIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLFsicGFzc2FibGVTeW1ib2xGb3JOYW1lIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl1dLCIuL3NyYy9zdHJpbmcuanMiOltbImlzV2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLFsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0UGFzc2FibGVTdHJpbmciXV0sIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjpbWyJwYXNzU3R5bGVPZiIsInBhc3NTdHlsZU9mIl0sWyJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSJdLFsiYXNzZXJ0UGFzc2FibGUiLCJhc3NlcnRQYXNzYWJsZSJdLFsidG9QYXNzYWJsZUVycm9yIiwidG9QYXNzYWJsZUVycm9yIl0sWyJ0b1Rocm93YWJsZSIsInRvVGhyb3dhYmxlIl1dLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIjpbWyJtYWtlVGFnZ2VkIiwibWFrZVRhZ2dlZCJdXSwiLi9zcmMvbWFrZS1mYXIuanMiOltbIlJlbW90YWJsZSIsIlJlbW90YWJsZSJdLFsiRmFyIiwiRmFyIl0sWyJUb0ZhckZ1bmN0aW9uIiwiVG9GYXJGdW5jdGlvbiJdLFsiR0VUX01FVEhPRF9OQU1FUyIsIkdFVF9NRVRIT0RfTkFNRVMiXV0sIi4vc3JjL3R5cGVHdWFyZHMuanMiOltbImFzc2VydFJlY29yZCIsImFzc2VydFJlY29yZCJdLFsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5Il0sWyJhc3NlcnRSZW1vdGFibGUiLCJhc3NlcnRSZW1vdGFibGUiXSxbImlzUmVtb3RhYmxlIiwiaXNSZW1vdGFibGUiXSxbImlzUmVjb3JkIiwiaXNSZWNvcmQiXSxbImlzQ29weUFycmF5IiwiaXNDb3B5QXJyYXkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAP4Vn+tgBgAAYAYAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvY29weUFycmF5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5QXJyYXlIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsYXNzZXJ0Q2hlY2tlcixnZXRPd25EYXRhRGVzY3JpcHRvcjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRo4oCNX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRo4oCNX2EgPT4gKGdldE93bkRhdGFEZXNjcmlwdG9yID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNvbnN0e2dldFByb3RvdHlwZU9mfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheSxwcm90b3R5cGU6YXJyYXlQcm90b3R5cGV9PUFycmF5O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjYW5CZVZhbGlkPShjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+XG5pc0FycmF5KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmY2hlY2soZmFsc2UsWCBgQXJyYXkgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIENvcHlBcnJheUhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidjb3B5QXJyYXknLFxuXG5jYW5CZVZhbGlkLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jYW5CZVZhbGlkKGNhbmRpZGF0ZSxhc3NlcnRDaGVja2VyKTtcbmdldFByb3RvdHlwZU9mKGNhbmRpZGF0ZSk9PT1hcnJheVByb3RvdHlwZXx8XG5hc3NlcnQuZmFpbChYIGBNYWxmb3JtZWQgYXJyYXk6ICR7Y2FuZGlkYXRlfWAsVHlwZUVycm9yKTtcbi8vXG4vL1xuY29uc3QgbGVuPS8qICAgICAgICAgICAgICAgICAqL1xuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLCdsZW5ndGgnLGZhbHNlLGFzc2VydENoZWNrZXIpLnZhbHVlO1xuXG4vL1xuLy9cbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xucGFzc1N0eWxlT2ZSZWN1cihcbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSxpLHRydWUsYXNzZXJ0Q2hlY2tlcikudmFsdWUpO1xuXG4gfVxuLy9cbm93bktleXMoY2FuZGlkYXRlKS5sZW5ndGg9PT1sZW4rMXx8XG5hc3NlcnQuZmFpbChYIGBBcnJheXMgbXVzdCBub3QgaGF2ZSBub24taW5kZXhlczogJHtjYW5kaWRhdGV9YCxUeXBlRXJyb3IpO1xuIH19KTskaOKAjV9vbmNlLkNvcHlBcnJheUhlbHBlcihDb3B5QXJyYXlIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQ29weUFycmF5SGVscGVyIjpbIkNvcHlBcnJheUhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACkqY3rNwgAADcIAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL2NvcHlSZWNvcmQuanN7ImltcG9ydHMiOlsiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIkNvcHlSZWNvcmRIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsY2FuQmVNZXRob2QsZ2V0T3duRGF0YURlc2NyaXB0b3IsQ1g7JGjigI1faW1wb3J0cyhbW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRo4oCNX2EpXV0sW1wiY2FuQmVNZXRob2RcIiwgWyRo4oCNX2EgPT4gKGNhbkJlTWV0aG9kID0gJGjigI1fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjigI1fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaOKAjV9hKV1dLFtcIkNYXCIsIFskaOKAjV9hID0+IChDWCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0UHJvdG90eXBlT2YscHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgY2hlY2tPYmplY3RQcm90b3R5cGU9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09b2JqZWN0UHJvdG90eXBlfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBSZWNvcmRzIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBjaGVja1Byb3BlcnR5Q2FuQmVWYWxpZD0oY2FuZGlkYXRlLGtleSx2YWx1ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG4odHlwZW9mIGtleT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUmVjb3JkcyBjYW4gb25seSBoYXZlIHN0cmluZy1uYW1lZCBwcm9wZXJ0aWVzOiAke2NhbmRpZGF0ZX1gKSYmKFxuIWNhbkJlTWV0aG9kKHZhbHVlKXx8XG4hIWNoZWNrJiZcbi8vXG5DWChcbmNoZWNrKVxuIGBSZWNvcmRzIGNhbm5vdCBjb250YWluIG5vbi1mYXIgZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBtYXkgYmUgbWV0aG9kcyBvZiBhbiBpbXBsaWNpdCBSZW1vdGFibGU6ICR7Y2FuZGlkYXRlfWApKTtcblxuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgQ29weVJlY29yZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidjb3B5UmVjb3JkJyxcblxuY2FuQmVWYWxpZDooY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbmNoZWNrT2JqZWN0UHJvdG90eXBlKGNhbmRpZGF0ZSxjaGVjaykmJlxuLy9cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkuZXZlcnkoKGtleSk9PlxuY2hlY2tQcm9wZXJ0eUNhbkJlVmFsaWQoY2FuZGlkYXRlLGtleSxjYW5kaWRhdGVba2V5XSxjaGVjaykpKTtcblxuXG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tPYmplY3RQcm90b3R5cGUoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuLy9cbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoY2FuZGlkYXRlKSl7XG5jb25zdHt2YWx1ZX09Z2V0T3duRGF0YURlc2NyaXB0b3IoXG5jYW5kaWRhdGUsXG5uYW1lLFxudHJ1ZSxcbmFzc2VydENoZWNrZXIpO1xuXG5jaGVja1Byb3BlcnR5Q2FuQmVWYWxpZChjYW5kaWRhdGUsbmFtZSx2YWx1ZSxhc3NlcnRDaGVja2VyKTtcbnBhc3NTdHlsZU9mUmVjdXIodmFsdWUpO1xuIH1cbiB9fSk7JGjigI1fb25jZS5Db3B5UmVjb3JkSGVscGVyKENvcHlSZWNvcmRIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQ29weVJlY29yZEhlbHBlciI6WyJDb3B5UmVjb3JkSGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMZ9Al1sCgAAbAoAAC4AAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9wcm9taXNlLWtpdCIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3Bhc3NTdHlsZU9mLmpzIiwiLi9tYWtlVGFnZ2VkLmpzIl0sImV4cG9ydHMiOlsiZGVlcGx5RnVsZmlsbGVkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRSxpc1Byb21pc2UsZ2V0VGFnLGlzT2JqZWN0LHBhc3NTdHlsZU9mLG1ha2VUYWdnZWQ7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaOKAjV9hID0+IChYID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjigI1fYSA9PiAoaXNQcm9taXNlID0gJGjigI1fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImdldFRhZ1wiLCBbJGjigI1fYSA9PiAoZ2V0VGFnID0gJGjigI1fYSldXSxbXCJpc09iamVjdFwiLCBbJGjigI1fYSA9PiAoaXNPYmplY3QgPSAkaOKAjV9hKV1dXV0sW1wiLi9wYXNzU3R5bGVPZi5qc1wiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXV1dLFtcIi4vbWFrZVRhZ2dlZC5qc1wiLCBbW1wibWFrZVRhZ2dlZFwiLCBbJGjigI1fYSA9PiAobWFrZVRhZ2dlZCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLypcblxuICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtmcm9tRW50cmllc309T2JqZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWVwbHlGdWxmaWxsZWQ9YXN5bmModmFsKT0+e1xuLy9cbi8vXG4vL1xuXG5pZighaXNPYmplY3QodmFsKSl7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi92YWwpO1xuIH1cbmlmKGlzUHJvbWlzZSh2YWwpKXtcbnJldHVybiBFLndoZW4odmFsLChub25wKT0+ZGVlcGx5RnVsZmlsbGVkKG5vbnApKTtcbiB9XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdjb3B5UmVjb3JkJzp7XG5jb25zdCByZWM9LyogICAgICAgICAgICAgICAgICAgICAqL3ZhbDtcbmNvbnN0IG5hbWVzPS8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhyZWMpO1xuY29uc3QgdmFsUHM9bmFtZXMubWFwKChuYW1lKT0+ZGVlcGx5RnVsZmlsbGVkKHJlY1tuYW1lXSkpO1xuLy9cbnJldHVybiBFLndoZW4oUHJvbWlzZS5hbGwodmFsUHMpLCh2YWxzKT0+XG5oYXJkZW4oZnJvbUVudHJpZXModmFscy5tYXAoKGMsaSk9PltuYW1lc1tpXSxjXSkpKSk7XG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuY29uc3QgYXJyPS8qICAgICAgICAgICAgICAgICAgICAqL3ZhbDtcbmNvbnN0IHZhbFBzPWFyci5tYXAoKHApPT5kZWVwbHlGdWxmaWxsZWQocCkpO1xuLy9cbnJldHVybiBFLndoZW4oUHJvbWlzZS5hbGwodmFsUHMpLCh2YWxzKT0+aGFyZGVuKHZhbHMpKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGdkPS8qICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCB0YWc9Z2V0VGFnKHRnZCk7XG4vL1xucmV0dXJuIEUud2hlbihkZWVwbHlGdWxmaWxsZWQodGdkLnBheWxvYWQpLChwYXlsb2FkKT0+XG5tYWtlVGFnZ2VkKHRhZyxwYXlsb2FkKSk7XG5cbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xuY29uc3QgcmVtPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL3ZhbDtcbi8vXG5yZXR1cm4gcmVtO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IGVycj0vKiAgICAgICAgICAgICAgICAqL3ZhbDtcbi8vXG5yZXR1cm4gZXJyO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xuY29uc3QgcHJvbT0vKiAgICAgICAgICAgICAgICAgICovIC8qICAgICAgICAgICAgICAgICAgKi92YWw7XG5yZXR1cm4gRS53aGVuKHByb20sKG5vbnApPT5kZWVwbHlGdWxmaWxsZWQobm9ucCkpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoWCBgVW5leHBlY3RlZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9OyRo4oCNX29uY2UuZGVlcGx5RnVsZmlsbGVkKGRlZXBseUZ1bGZpbGxlZCk7XG5oYXJkZW4oZGVlcGx5RnVsZmlsbGVkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZXBseUZ1bGZpbGxlZCI6WyJkZWVwbHlGdWxmaWxsZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAoHX1XEQSAABEEgAAJAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9lcnJvci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiRXJyb3JIZWxwZXIiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciIsImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciIsImlzRXJyb3JMaWtlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLGFzc2VydENoZWNrZXIsQ1g7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaOKAjV9hKV1dLFtcIkNYXCIsIFskaOKAjV9hID0+IChDWCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e2dldFByb3RvdHlwZU9mLGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMsaGFzT3duLGVudHJpZXN9PU9iamVjdDtcblxuLy9cbi8vXG5jb25zdCBlcnJvckNvbnN0cnVjdG9ycz1uZXcgTWFwKFxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbltcblsnRXJyb3InLEVycm9yXSxcblsnRXZhbEVycm9yJyxFdmFsRXJyb3JdLFxuWydSYW5nZUVycm9yJyxSYW5nZUVycm9yXSxcblsnUmVmZXJlbmNlRXJyb3InLFJlZmVyZW5jZUVycm9yXSxcblsnU3ludGF4RXJyb3InLFN5bnRheEVycm9yXSxcblsnVHlwZUVycm9yJyxUeXBlRXJyb3JdLFxuWydVUklFcnJvcicsVVJJRXJyb3JdXG5cbi8vXG4vL1xuLy9cbi8vXG5dKTtcblxuXG5pZih0eXBlb2YgQWdncmVnYXRlRXJyb3IhPT0ndW5kZWZpbmVkJyl7XG4vL1xuZXJyb3JDb25zdHJ1Y3RvcnMuc2V0KCdBZ2dyZWdhdGVFcnJvcicsQWdncmVnYXRlRXJyb3IpO1xuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRFcnJvckNvbnN0cnVjdG9yPShuYW1lKT0+ZXJyb3JDb25zdHJ1Y3RvcnMuZ2V0KG5hbWUpOyRo4oCNX29uY2UuZ2V0RXJyb3JDb25zdHJ1Y3RvcihnZXRFcnJvckNvbnN0cnVjdG9yKTtcbmhhcmRlbihnZXRFcnJvckNvbnN0cnVjdG9yKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tFcnJvckxpa2U9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG4vL1xucmV0dXJuKFxuY2FuZGlkYXRlIGluc3RhbmNlb2YgRXJyb3J8fFxuISFjaGVjayYmQ1goY2hlY2spIGBFcnJvciBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCk7XG5cbiB9O1xuaGFyZGVuKGNoZWNrRXJyb3JMaWtlKTtcbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzRXJyb3JMaWtlPShjYW5kaWRhdGUpPT5jaGVja0Vycm9yTGlrZShjYW5kaWRhdGUpOyRo4oCNX29uY2UuaXNFcnJvckxpa2UoaXNFcnJvckxpa2UpO1xuaGFyZGVuKGlzRXJyb3JMaWtlKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0oXG5wcm9wTmFtZSxcbmRlc2MsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2s9dW5kZWZpbmVkKT0+XG57XG5pZihkZXNjLmVudW1lcmFibGUpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3Qgbm90IGJlIGVudW1lcmFibGU6ICR7ZGVzY31gKTtcblxuIH1cbmlmKCFoYXNPd24oZGVzYywndmFsdWUnKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIGRhdGEgcHJvcGVydHk6ICR7ZGVzY31gKTtcblxuIH1cbmNvbnN0e3ZhbHVlfT1kZXNjO1xuc3dpdGNoKHByb3BOYW1lKXtcbmNhc2UnbWVzc2FnZSc6XG5jYXNlJ3N0YWNrJzp7XG5yZXR1cm4oXG50eXBlb2YgdmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZzogJHt2YWx1ZX1gKTtcblxuIH1cbmNhc2UnY2F1c2UnOntcbi8vXG5yZXR1cm4gY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IodmFsdWUscGFzc1N0eWxlT2ZSZWN1cixjaGVjayk7XG4gfVxuY2FzZSdlcnJvcnMnOntcbmlmKCFBcnJheS5pc0FycmF5KHZhbHVlKXx8cGFzc1N0eWxlT2ZSZWN1cih2YWx1ZSkhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIGNvcHlBcnJheTogJHt2YWx1ZX1gKTtcblxuIH1cbnJldHVybiB2YWx1ZS5ldmVyeSgoZXJyKT0+XG4vL1xuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoZXJyLHBhc3NTdHlsZU9mUmVjdXIsY2hlY2spKTtcblxuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7XG4gfX1cblxucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yIGhhcyBleHRyYSB1bnBhc3NlZCBwcm9wZXJ0eSAke3EocHJvcE5hbWUpfWApO1xuXG4gfTskaOKAjV9vbmNlLmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKTtcbmhhcmRlbihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yPShcbmNhbmRpZGF0ZSxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaz11bmRlZmluZWQpPT5cbntcbmlmKCFjaGVja0Vycm9yTGlrZShjYW5kaWRhdGUsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCBwcm90bz1nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpO1xuY29uc3R7bmFtZX09cHJvdG87XG5jb25zdCBlcnJDb25zdHJ1Y3Rvcj1nZXRFcnJvckNvbnN0cnVjdG9yKG5hbWUpO1xuaWYoZXJyQ29uc3RydWN0b3I9PT11bmRlZmluZWR8fGVyckNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PXByb3RvKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUGFzc2FibGUgRXJyb3IgbXVzdCBpbmhlcml0IGZyb20gYW4gZXJyb3IgY2xhc3MgLnByb3RvdHlwZTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9XG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGNhbmRpZGF0ZSk7XG5pZighKCdtZXNzYWdlJ2luIGRlc2NzKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFBhc3NhYmxlIEVycm9yIG11c3QgaGF2ZSBhbiBvd24gXCJtZXNzYWdlXCIgc3RyaW5nIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKTtcblxuIH1cblxucmV0dXJuIGVudHJpZXMoZGVzY3MpLmV2ZXJ5KChbcHJvcE5hbWUsZGVzY10pPT5cbmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKFxucHJvcE5hbWUsXG5kZXNjLFxucGFzc1N0eWxlT2ZSZWN1cixcbmNoZWNrKSk7XG5cblxuIH07JGjigI1fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcik7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBFcnJvckhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidlcnJvcicsXG5cbmNhbkJlVmFsaWQ6Y2hlY2tFcnJvckxpa2UsXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cik9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIsYXNzZXJ0Q2hlY2tlcil9KTskaOKAjV9vbmNlLkVycm9ySGVscGVyKEVycm9ySGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldEVycm9yQ29uc3RydWN0b3IiOlsiZ2V0RXJyb3JDb25zdHJ1Y3RvciJdLCJpc0Vycm9yTGlrZSI6WyJpc0Vycm9yTGlrZSJdLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyI6WyJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyJdLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciI6WyJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciJdLCJFcnJvckhlbHBlciI6WyJFcnJvckhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABUGK4pmAUAAJgFAAArAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL2l0ZXItaGVscGVycy5qc3siaW1wb3J0cyI6WyIuL21ha2UtZmFyLmpzIl0sImV4cG9ydHMiOlsiZmlsdGVySXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFyOyRo4oCNX2ltcG9ydHMoW1tcIi4vbWFrZS1mYXIuanNcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYXBJdGVyYWJsZT0oYmFzZUl0ZXJhYmxlLGZ1bmMpPT5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5GYXIoJ21hcHBlZCBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmNvbnN0IGJhc2VJdGVyYXRvcj1iYXNlSXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIEZhcignbWFwcGVkIGl0ZXJhdG9yJyx7XG5uZXh0OigpPT57XG5jb25zdHt2YWx1ZTpiYXNlVmFsdWUsZG9uZX09YmFzZUl0ZXJhdG9yLm5leHQoKTtcbmNvbnN0IHZhbHVlPWRvbmU/YmFzZVZhbHVlOmZ1bmMoYmFzZVZhbHVlKTtcbnJldHVybiBoYXJkZW4oe3ZhbHVlLGRvbmV9KTtcbiB9fSk7XG5cbiB9fSk7JGjigI1fb25jZS5tYXBJdGVyYWJsZShtYXBJdGVyYWJsZSk7XG5cbmhhcmRlbihtYXBJdGVyYWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmaWx0ZXJJdGVyYWJsZT0oYmFzZUl0ZXJhYmxlLHByZWQpPT5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5GYXIoJ2ZpbHRlcmVkIGl0ZXJhYmxlJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgYmFzZUl0ZXJhdG9yPWJhc2VJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gRmFyKCdmaWx0ZXJlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuZm9yKDs7KXtcbmNvbnN0IHJlc3VsdD1iYXNlSXRlcmF0b3IubmV4dCgpO1xuY29uc3R7dmFsdWUsZG9uZX09cmVzdWx0O1xuaWYoZG9uZXx8cHJlZCh2YWx1ZSkpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuIH19KTtcblxuIH19KTskaOKAjV9vbmNlLmZpbHRlckl0ZXJhYmxlKGZpbHRlckl0ZXJhYmxlKTtcblxuaGFyZGVuKGZpbHRlckl0ZXJhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1hcEl0ZXJhYmxlIjpbIm1hcEl0ZXJhYmxlIl0sImZpbHRlckl0ZXJhYmxlIjpbImZpbHRlckl0ZXJhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOUGN7laEQAAWhEAACcAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvbWFrZS1mYXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3JlbW90YWJsZS5qcyJdLCJleHBvcnRzIjpbIkZhciIsIkdFVF9NRVRIT0RfTkFNRVMiLCJSZW1vdGFibGUiLCJUb0ZhckZ1bmN0aW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRNZXRob2ROYW1lcyxxLEZhaWwsYXNzZXJ0Q2hlY2tlcixQQVNTX1NUWUxFLGFzc2VydElmYWNlLGdldEludGVyZmFjZU9mLFJlbW90YWJsZUhlbHBlcjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjigI1fYSA9PiAoZ2V0TWV0aG9kTmFtZXMgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaOKAjV9hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRo4oCNX2EgPT4gKFBBU1NfU1RZTEUgPSAkaOKAjV9hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcImFzc2VydElmYWNlXCIsIFskaOKAjV9hID0+IChhc3NlcnRJZmFjZSA9ICRo4oCNX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRo4oCNX2EgPT4gKGdldEludGVyZmFjZU9mID0gJGjigI1fYSldXSxbXCJSZW1vdGFibGVIZWxwZXJcIiwgWyRo4oCNX2EgPT4gKFJlbW90YWJsZUhlbHBlciA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7cHJvdG90eXBlOmZ1bmN0aW9uUHJvdG90eXBlfT1GdW5jdGlvbjtcbmNvbnN0e1xuZ2V0UHJvdG90eXBlT2YsXG5zZXRQcm90b3R5cGVPZixcbmNyZWF0ZSxcbmlzRnJvemVuLFxucHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09XG5PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVJlbW90YWJsZVByb3RvPShyZW1vdGFibGUsaWZhY2UpPT57XG5sZXQgb2xkUHJvdG89Z2V0UHJvdG90eXBlT2YocmVtb3RhYmxlKTtcbmlmKHR5cGVvZiByZW1vdGFibGU9PT0nb2JqZWN0Jyl7XG5pZihvbGRQcm90bz09PW51bGwpe1xub2xkUHJvdG89b2JqZWN0UHJvdG90eXBlO1xuIH1cbm9sZFByb3RvPT09b2JqZWN0UHJvdG90eXBlfHxcbkZhaWwgYEZvciBub3csIHJlbW90YWJsZXMgY2Fubm90IGluaGVyaXQgZnJvbSBhbnl0aGluZyB1bnVzdWFsLCBpbiAke3JlbW90YWJsZX1gO1xuIH1lbHNlIGlmKHR5cGVvZiByZW1vdGFibGU9PT0nZnVuY3Rpb24nKXtcbm9sZFByb3RvIT09bnVsbHx8XG5GYWlsIGBPcmlnaW5hbCBmdW5jdGlvbiBtdXN0IG5vdCBpbmhlcml0IGZyb20gbnVsbDogJHtyZW1vdGFibGV9YDtcbm9sZFByb3RvPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuZ2V0UHJvdG90eXBlT2Yob2xkUHJvdG8pPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuRmFpbCBgRmFyIGZ1bmN0aW9ucyBtdXN0IG9yaWdpbmFsbHkgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZSwgaW4gJHtyZW1vdGFibGV9YDtcbiB9ZWxzZXtcbkZhaWwgYHVucmVjb2duaXplZCB0eXBlb2YgJHtyZW1vdGFibGV9YDtcbiB9XG5yZXR1cm4gaGFyZGVuKFxuY3JlYXRlKG9sZFByb3RvLHtcbltQQVNTX1NUWUxFXTp7dmFsdWU6J3JlbW90YWJsZSd9LFxuW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOmlmYWNlfX0pKTtcblxuXG4gfTtcblxuY29uc3QgYXNzZXJ0Q2FuQmVSZW1vdGFibGU9KGNhbmRpZGF0ZSk9PlxuUmVtb3RhYmxlSGVscGVyLmNhbkJlVmFsaWQoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgUmVtb3RhYmxlPShcbi8vXG5pZmFjZT0nUmVtb3RhYmxlJyxcbnByb3BzPXVuZGVmaW5lZCxcbnJlbW90YWJsZT0vKiAgICAgICAgICAgICove30pPT5cbntcbmFzc2VydElmYWNlKGlmYWNlKTtcbmFzc2VydChpZmFjZSk7XG4vL1xuLy9cbnByb3BzPT09dW5kZWZpbmVkfHxGYWlsIGBSZW1vdGFibGUgcHJvcHMgbm90IHlldCBpbXBsZW1lbnRlZCAke3Byb3BzfWA7XG5cbi8vXG5hc3NlcnRDYW5CZVJlbW90YWJsZShyZW1vdGFibGUpO1xuXG4vL1xuIShQQVNTX1NUWUxFIGluIHJlbW90YWJsZSl8fFxuRmFpbCBgUmVtb3RhYmxlICR7cmVtb3RhYmxlfSBpcyBhbHJlYWR5IG1hcmtlZCBhcyBhICR7cShcbnJlbW90YWJsZVtQQVNTX1NUWUxFXSlcbiB9YDtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuaGFyZGVuLmlzRmFrZXx8XG4vL1xuIWlzRnJvemVuKHJlbW90YWJsZSl8fFxuRmFpbCBgUmVtb3RhYmxlICR7cmVtb3RhYmxlfSBpcyBhbHJlYWR5IGZyb3plbmA7XG5jb25zdCByZW1vdGFibGVQcm90bz1tYWtlUmVtb3RhYmxlUHJvdG8ocmVtb3RhYmxlLGlmYWNlKTtcblxuLy9cbi8vXG5jb25zdCBtdXRhdGVIYXJkZW5BbmRDaGVjaz0odGFyZ2V0KT0+e1xuLy9cbnNldFByb3RvdHlwZU9mKHRhcmdldCxyZW1vdGFibGVQcm90byk7XG5oYXJkZW4odGFyZ2V0KTtcbmFzc2VydENhbkJlUmVtb3RhYmxlKHRhcmdldCk7XG4gfTtcblxuLy9cbm11dGF0ZUhhcmRlbkFuZENoZWNrKHt9KTtcblxuLy9cbm11dGF0ZUhhcmRlbkFuZENoZWNrKHJlbW90YWJsZSk7XG5cbi8vXG4vL1xuYXNzZXJ0KGlmYWNlIT09dW5kZWZpbmVkKTsvL1xucmV0dXJuICgvKiAgICAgICAgICAgICAgKi9yZW1vdGFibGUpO1xuIH07JGjigI1fb25jZS5SZW1vdGFibGUoUmVtb3RhYmxlKTtcbmhhcmRlbihSZW1vdGFibGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgR0VUX01FVEhPRF9OQU1FUz0nX19nZXRNZXRob2ROYW1lc19fJztcblxuLypcblxuXG5cblxuICovJGjigI1fb25jZS5HRVRfTUVUSE9EX05BTUVTKEdFVF9NRVRIT0RfTkFNRVMpO1xuY29uc3QgZ2V0TWV0aG9kTmFtZXNNZXRob2Q9aGFyZGVuKHtcbltHRVRfTUVUSE9EX05BTUVTXSgpe1xucmV0dXJuIGdldE1ldGhvZE5hbWVzKHRoaXMpO1xuIH19KVtcbkdFVF9NRVRIT0RfTkFNRVNdO1xuXG5jb25zdCBnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3I9aGFyZGVuKHtcbnZhbHVlOmdldE1ldGhvZE5hbWVzTWV0aG9kLFxuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTpmYWxzZSxcbndyaXRhYmxlOmZhbHNlfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEZhcj0oZmFyTmFtZSxyZW1vdGFibGU9dW5kZWZpbmVkKT0+e1xuY29uc3Qgcj1yZW1vdGFibGU9PT11bmRlZmluZWQ/LyogICAgICAgICAgICAqL3t9OnJlbW90YWJsZTtcbmlmKHR5cGVvZiByPT09J29iamVjdCcmJiEoR0VUX01FVEhPRF9OQU1FUyBpbiByKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsR0VUX01FVEhPRF9OQU1FUyxnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3IpO1xuIH1cbnJldHVybiBSZW1vdGFibGUoIGBBbGxlZ2VkOiAke2Zhck5hbWV9YCx1bmRlZmluZWQscik7XG4gfTskaOKAjV9vbmNlLkZhcihGYXIpO1xuaGFyZGVuKEZhcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBUb0ZhckZ1bmN0aW9uPShmYXJOYW1lLGZ1bmMpPT57XG5pZihnZXRJbnRlcmZhY2VPZihmdW5jKSE9PXVuZGVmaW5lZCl7XG4vL1xucmV0dXJuIGZ1bmM7XG4gfVxuLy9cbnJldHVybiBGYXIoZmFyTmFtZSwoLi4uYXJncyk9PmZ1bmMoLi4uYXJncykpO1xuIH07JGjigI1fb25jZS5Ub0ZhckZ1bmN0aW9uKFRvRmFyRnVuY3Rpb24pO1xuaGFyZGVuKFRvRmFyRnVuY3Rpb24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUmVtb3RhYmxlIjpbIlJlbW90YWJsZSJdLCJHRVRfTUVUSE9EX05BTUVTIjpbIkdFVF9NRVRIT0RfTkFNRVMiXSwiRmFyIjpbIkZhciJdLCJUb0ZhckZ1bmN0aW9uIjpbIlRvRmFyRnVuY3Rpb24iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAbmPiWYwEAACMBAAAKQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9tYWtlVGFnZ2VkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3Bhc3NTdHlsZU9mLmpzIl0sImV4cG9ydHMiOlsibWFrZVRhZ2dlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxQQVNTX1NUWUxFLGFzc2VydFBhc3NhYmxlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJQQVNTX1NUWUxFXCIsIFskaOKAjV9hID0+IChQQVNTX1NUWUxFID0gJGjigI1fYSldXV1dLFtcIi4vcGFzc1N0eWxlT2YuanNcIiwgW1tcImFzc2VydFBhc3NhYmxlXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbmNvbnN0e2NyZWF0ZSxwcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVRhZ2dlZD0odGFnLHBheWxvYWQpPT57XG50eXBlb2YgdGFnPT09J3N0cmluZyd8fFxuRmFpbCBgVGhlIHRhZyBvZiBhIHRhZ2dlZCByZWNvcmQgbXVzdCBiZSBhIHN0cmluZzogJHt0YWd9YDtcbmFzc2VydFBhc3NhYmxlKGhhcmRlbihwYXlsb2FkKSk7XG5yZXR1cm4gaGFyZGVuKFxuY3JlYXRlKG9iamVjdFByb3RvdHlwZSx7XG5bUEFTU19TVFlMRV06e3ZhbHVlOid0YWdnZWQnfSxcbltTeW1ib2wudG9TdHJpbmdUYWddOnt2YWx1ZTp0YWd9LFxucGF5bG9hZDp7dmFsdWU6cGF5bG9hZCxlbnVtZXJhYmxlOnRydWV9fSkpO1xuXG5cbiB9OyRo4oCNX29uY2UubWFrZVRhZ2dlZChtYWtlVGFnZ2VkKTtcbmhhcmRlbihtYWtlVGFnZ2VkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VUYWdnZWQiOlsibWFrZVRhZ2dlZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB573NZKRUAACkVAAAwAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIkNYIiwiUEFTU19TVFlMRSIsImFzc2VydENoZWNrZXIiLCJjYW5CZU1ldGhvZCIsImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiLCJjaGVja1Bhc3NTdHlsZSIsImNoZWNrVGFnUmVjb3JkIiwiZ2V0T3duRGF0YURlc2NyaXB0b3IiLCJnZXRUYWciLCJoYXNPd25Qcm9wZXJ0eU9mIiwiaXNPYmplY3QiLCJpc1R5cGVkQXJyYXkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgscTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7cHJvdG90eXBlOmZ1bmN0aW9uUHJvdG90eXBlfT1GdW5jdGlvbjtcbmNvbnN0e1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuZ2V0UHJvdG90eXBlT2YsXG5oYXNPd25Qcm9wZXJ0eTpvYmplY3RIYXNPd25Qcm9wZXJ0eSxcbmlzRnJvemVuLFxucHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09XG5PYmplY3Q7XG5jb25zdHthcHBseX09UmVmbGVjdDtcbmNvbnN0e3RvU3RyaW5nVGFnOnRvU3RyaW5nVGFnU3ltYm9sfT1TeW1ib2w7XG5cbmNvbnN0IHR5cGVkQXJyYXlQcm90b3R5cGU9Z2V0UHJvdG90eXBlT2YoVWludDhBcnJheS5wcm90b3R5cGUpO1xuY29uc3QgdHlwZWRBcnJheVRvU3RyaW5nVGFnRGVzYz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG50eXBlZEFycmF5UHJvdG90eXBlLFxudG9TdHJpbmdUYWdTeW1ib2wpO1xuXG5hc3NlcnQodHlwZWRBcnJheVRvU3RyaW5nVGFnRGVzYyk7XG5jb25zdCBnZXRUeXBlZEFycmF5VG9TdHJpbmdUYWc9dHlwZWRBcnJheVRvU3RyaW5nVGFnRGVzYy5nZXQ7XG5hc3NlcnQodHlwZW9mIGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZz09PSdmdW5jdGlvbicpO1xuXG5jb25zdCAgICAgICAgaGFzT3duUHJvcGVydHlPZj0ob2JqLHByb3ApPT5cbmFwcGx5KG9iamVjdEhhc093blByb3BlcnR5LG9iaixbcHJvcF0pOyRo4oCNX29uY2UuaGFzT3duUHJvcGVydHlPZihoYXNPd25Qcm9wZXJ0eU9mKTtcbmhhcmRlbihoYXNPd25Qcm9wZXJ0eU9mKTtcblxuLy9cbmNvbnN0ICAgICAgICBpc09iamVjdD0odmFsKT0+T2JqZWN0KHZhbCk9PT12YWw7JGjigI1fb25jZS5pc09iamVjdChpc09iamVjdCk7XG5oYXJkZW4oaXNPYmplY3QpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNUeXBlZEFycmF5PShvYmplY3QpPT57XG4vL1xuY29uc3QgdGFnPWFwcGx5KGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZyxvYmplY3QsW10pO1xucmV0dXJuIHRhZyE9PXVuZGVmaW5lZDtcbiB9OyRo4oCNX29uY2UuaXNUeXBlZEFycmF5KGlzVHlwZWRBcnJheSk7XG5oYXJkZW4oaXNUeXBlZEFycmF5KTtcblxuY29uc3QgICAgICAgIFBBU1NfU1RZTEU9U3ltYm9sLmZvcigncGFzc1N0eWxlJyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5QQVNTX1NUWUxFKFBBU1NfU1RZTEUpO1xuY29uc3QgICAgICAgIGNhbkJlTWV0aG9kPShmdW5jKT0+XG50eXBlb2YgZnVuYz09PSdmdW5jdGlvbicmJiEoUEFTU19TVFlMRSBpbiBmdW5jKTskaOKAjV9vbmNlLmNhbkJlTWV0aG9kKGNhbkJlTWV0aG9kKTtcbmhhcmRlbihjYW5CZU1ldGhvZCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDaGVja2VyPShjb25kLGRldGFpbHMpPT57XG5hc3NlcnQoY29uZCxkZXRhaWxzKTtcbnJldHVybiB0cnVlO1xuIH07JGjigI1fb25jZS5hc3NlcnRDaGVja2VyKGFzc2VydENoZWNrZXIpO1xuaGFyZGVuKGFzc2VydENoZWNrZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBDWD0oY2hlY2spPT57XG5jb25zdCByZWplY3Q9KFQsLi4uc3Vicyk9PmNoZWNrKGZhbHNlLFgoVCwuLi5zdWJzKSk7XG5yZXR1cm4gcmVqZWN0O1xuIH07JGjigI1fb25jZS5DWChDWCk7XG5oYXJkZW4oQ1gpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE93bkRhdGFEZXNjcmlwdG9yPShcbmNhbmRpZGF0ZSxcbnByb3BOYW1lLFxuc2hvdWxkQmVFbnVtZXJhYmxlLFxuY2hlY2spPT5cbntcbmNvbnN0IGRlc2M9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY2FuZGlkYXRlLHByb3BOYW1lKTtcblxucmV0dXJuKGRlc2MhPT11bmRlZmluZWR8fFxuISFjaGVjayYmQ1goY2hlY2spIGAke3EocHJvcE5hbWUpfSBwcm9wZXJ0eSBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCkmJihcbmhhc093blByb3BlcnR5T2YoZGVzYywndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGFjY2Vzc29yIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKSYmKFxuc2hvdWxkQmVFbnVtZXJhYmxlP1xuZGVzYy5lbnVtZXJhYmxlfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgJHtxKHByb3BOYW1lKX0gbXVzdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gOlxuIWRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGVudW1lcmFibGUgcHJvcGVydHk6ICR7Y2FuZGlkYXRlfWApP1xuZGVzYzpcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdW5kZWZpbmVkO1xuIH07JGjigI1fb25jZS5nZXRPd25EYXRhRGVzY3JpcHRvcihnZXRPd25EYXRhRGVzY3JpcHRvcik7XG5oYXJkZW4oZ2V0T3duRGF0YURlc2NyaXB0b3IpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0VGFnPSh0YWdSZWNvcmQpPT50YWdSZWNvcmRbU3ltYm9sLnRvU3RyaW5nVGFnXTskaOKAjV9vbmNlLmdldFRhZyhnZXRUYWcpO1xuaGFyZGVuKGdldFRhZyk7XG5cbmNvbnN0ICAgICAgICBjaGVja1Bhc3NTdHlsZT0ob2JqLHBhc3NTdHlsZSxleHBlY3RlZFBhc3NTdHlsZSxjaGVjayk9PntcbnJldHVybihcbnBhc3NTdHlsZT09PWV4cGVjdGVkUGFzc1N0eWxlfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBFeHBlY3RlZCAke3EoZXhwZWN0ZWRQYXNzU3R5bGUpfSwgbm90ICR7cShwYXNzU3R5bGUpfTogJHtvYmp9YCk7XG5cbiB9OyRo4oCNX29uY2UuY2hlY2tQYXNzU3R5bGUoY2hlY2tQYXNzU3R5bGUpO1xuaGFyZGVuKGNoZWNrUGFzc1N0eWxlKTtcblxuY29uc3QgbWFrZUNoZWNrVGFnUmVjb3JkPShjaGVja1Byb3RvKT0+e1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrVGFnUmVjb3JkPSh0YWdSZWNvcmQsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNPYmplY3QodGFnUmVjb3JkKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgQSBub24tb2JqZWN0IGNhbm5vdCBiZSBhIHRhZ1JlY29yZDogJHt0YWdSZWNvcmR9YCkmJihcbmlzRnJvemVuKHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBIHRhZ1JlY29yZCBtdXN0IGJlIGZyb3plbjogJHt0YWdSZWNvcmR9YCkmJihcbiFpc0FycmF5KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBbiBhcnJheSBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUGFzc1N0eWxlKFxudGFnUmVjb3JkLFxuZ2V0T3duRGF0YURlc2NyaXB0b3IodGFnUmVjb3JkLFBBU1NfU1RZTEUsZmFsc2UsY2hlY2spLnZhbHVlLFxuZXhwZWN0ZWRQYXNzU3R5bGUsXG5jaGVjaykmJihcblxudHlwZW9mIGdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxTeW1ib2wudG9TdHJpbmdUYWcsZmFsc2UsY2hlY2spLlxudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEEgW1N5bWJvbC50b1N0cmluZ1RhZ10tbmFtZWQgcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZzogJHt0YWdSZWNvcmR9YCkmJlxuY2hlY2tQcm90byh0YWdSZWNvcmQsZ2V0UHJvdG90eXBlT2YodGFnUmVjb3JkKSxjaGVjaykpO1xuXG4gfTtcbnJldHVybiBoYXJkZW4oY2hlY2tUYWdSZWNvcmQpO1xuIH07XG5cbmNvbnN0ICAgICAgICBjaGVja1RhZ1JlY29yZD1tYWtlQ2hlY2tUYWdSZWNvcmQoXG4odmFsLHByb3RvLGNoZWNrKT0+XG5wcm90bz09PW9iamVjdFByb3RvdHlwZXx8XG4hIWNoZWNrJiZcbmNoZWNrKGZhbHNlLFggYEEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7dmFsfWApKTskaOKAjV9vbmNlLmNoZWNrVGFnUmVjb3JkKGNoZWNrVGFnUmVjb3JkKTtcblxuaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcblxuY29uc3QgICAgICAgIGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5wcm90byE9PW51bGwmJmdldFByb3RvdHlwZU9mKHByb3RvKT09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbiEhY2hlY2smJlxuY2hlY2soXG5mYWxzZSxcblggYEZvciBmdW5jdGlvbnMsIGEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZTogJHt2YWx9YCkpOyRo4oCNX29uY2UuY2hlY2tGdW5jdGlvblRhZ1JlY29yZChjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKTtcblxuXG5oYXJkZW4oY2hlY2tGdW5jdGlvblRhZ1JlY29yZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJoYXNPd25Qcm9wZXJ0eU9mIjpbImhhc093blByb3BlcnR5T2YiXSwiaXNPYmplY3QiOlsiaXNPYmplY3QiXSwiaXNUeXBlZEFycmF5IjpbImlzVHlwZWRBcnJheSJdLCJQQVNTX1NUWUxFIjpbIlBBU1NfU1RZTEUiXSwiY2FuQmVNZXRob2QiOlsiY2FuQmVNZXRob2QiXSwiYXNzZXJ0Q2hlY2tlciI6WyJhc3NlcnRDaGVja2VyIl0sIkNYIjpbIkNYIl0sImdldE93bkRhdGFEZXNjcmlwdG9yIjpbImdldE93bkRhdGFEZXNjcmlwdG9yIl0sImdldFRhZyI6WyJnZXRUYWciXSwiY2hlY2tQYXNzU3R5bGUiOlsiY2hlY2tQYXNzU3R5bGUiXSwiY2hlY2tUYWdSZWNvcmQiOlsiY2hlY2tUYWdSZWNvcmQiXSwiY2hlY2tGdW5jdGlvblRhZ1JlY29yZCI6WyJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAD+YiUnlJAAA5SQAACoAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvcGFzc1N0eWxlT2YuanN7ImltcG9ydHMiOlsiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9jb3B5QXJyYXkuanMiLCIuL2NvcHlSZWNvcmQuanMiLCIuL3RhZ2dlZC5qcyIsIi4vZXJyb3IuanMiLCIuL3JlbW90YWJsZS5qcyIsIi4vc3ltYm9sLmpzIiwiLi9zYWZlLXByb21pc2UuanMiLCIuL3N0cmluZy5qcyJdLCJleHBvcnRzIjpbIlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIiwiYXNzZXJ0UGFzc2FibGUiLCJpc1Bhc3NhYmxlIiwicGFzc1N0eWxlT2YiLCJ0b1Bhc3NhYmxlRXJyb3IiLCJ0b1Rocm93YWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLFgsRmFpbCxxLGFubm90YXRlRXJyb3IsbWFrZUVycm9yLGlzT2JqZWN0LGlzVHlwZWRBcnJheSxQQVNTX1NUWUxFLENvcHlBcnJheUhlbHBlcixDb3B5UmVjb3JkSGVscGVyLFRhZ2dlZEhlbHBlcixFcnJvckhlbHBlcixjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyxjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcixnZXRFcnJvckNvbnN0cnVjdG9yLGlzRXJyb3JMaWtlLFJlbW90YWJsZUhlbHBlcixhc3NlcnRQYXNzYWJsZVN5bWJvbCxhc3NlcnRTYWZlUHJvbWlzZSxhc3NlcnRQYXNzYWJsZVN0cmluZzskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaOKAjV9hID0+IChpc1Byb21pc2UgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaOKAjV9hID0+IChYID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaOKAjV9hID0+IChhbm5vdGF0ZUVycm9yID0gJGjigI1fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRo4oCNX2EgPT4gKG1ha2VFcnJvciA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJpc09iamVjdFwiLCBbJGjigI1fYSA9PiAoaXNPYmplY3QgPSAkaOKAjV9hKV1dLFtcImlzVHlwZWRBcnJheVwiLCBbJGjigI1fYSA9PiAoaXNUeXBlZEFycmF5ID0gJGjigI1fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaOKAjV9hID0+IChQQVNTX1NUWUxFID0gJGjigI1fYSldXV1dLFtcIi4vY29weUFycmF5LmpzXCIsIFtbXCJDb3B5QXJyYXlIZWxwZXJcIiwgWyRo4oCNX2EgPT4gKENvcHlBcnJheUhlbHBlciA9ICRo4oCNX2EpXV1dXSxbXCIuL2NvcHlSZWNvcmQuanNcIiwgW1tcIkNvcHlSZWNvcmRIZWxwZXJcIiwgWyRo4oCNX2EgPT4gKENvcHlSZWNvcmRIZWxwZXIgPSAkaOKAjV9hKV1dXV0sW1wiLi90YWdnZWQuanNcIiwgW1tcIlRhZ2dlZEhlbHBlclwiLCBbJGjigI1fYSA9PiAoVGFnZ2VkSGVscGVyID0gJGjigI1fYSldXV1dLFtcIi4vZXJyb3IuanNcIiwgW1tcIkVycm9ySGVscGVyXCIsIFskaOKAjV9hID0+IChFcnJvckhlbHBlciA9ICRo4oCNX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2NcIiwgWyRo4oCNX2EgPT4gKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjID0gJGjigI1fYSldXSxbXCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclwiLCBbJGjigI1fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IgPSAkaOKAjV9hKV1dLFtcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRo4oCNX2EgPT4gKGdldEVycm9yQ29uc3RydWN0b3IgPSAkaOKAjV9hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaOKAjV9hID0+IChpc0Vycm9yTGlrZSA9ICRo4oCNX2EpXV1dXSxbXCIuL3JlbW90YWJsZS5qc1wiLCBbW1wiUmVtb3RhYmxlSGVscGVyXCIsIFskaOKAjV9hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaOKAjV9hKV1dXV0sW1wiLi9zeW1ib2wuanNcIiwgW1tcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXNzYWJsZVN5bWJvbCA9ICRo4oCNX2EpXV1dXSxbXCIuL3NhZmUtcHJvbWlzZS5qc1wiLCBbW1wiYXNzZXJ0U2FmZVByb21pc2VcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFNhZmVQcm9taXNlID0gJGjigI1fYSldXV1dLFtcIi4vc3RyaW5nLmpzXCIsIFtbXCJhc3NlcnRQYXNzYWJsZVN0cmluZ1wiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UGFzc2FibGVTdHJpbmcgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNGcm96ZW4sZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyx2YWx1ZXN9PU9iamVjdDtcblxuLypcblxuXG4gKi9cblxuY29uc3QgbWFrZUhlbHBlclRhYmxlPShwYXNzU3R5bGVIZWxwZXJzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBIZWxwZXJUYWJsZT17XG5fX3Byb3RvX186bnVsbCxcbmNvcHlBcnJheTp1bmRlZmluZWQsXG5jb3B5UmVjb3JkOnVuZGVmaW5lZCxcbnRhZ2dlZDp1bmRlZmluZWQsXG5lcnJvcjp1bmRlZmluZWQsXG5yZW1vdGFibGU6dW5kZWZpbmVkfTtcblxuZm9yKGNvbnN0IGhlbHBlciBvZiBwYXNzU3R5bGVIZWxwZXJzKXtcbmNvbnN0e3N0eWxlTmFtZX09aGVscGVyO1xuc3R5bGVOYW1lIGluIEhlbHBlclRhYmxlfHxGYWlsIGBVbnJlY29nbml6ZWQgaGVscGVyOiAke3Eoc3R5bGVOYW1lKX1gO1xuSGVscGVyVGFibGVbc3R5bGVOYW1lXT09PXVuZGVmaW5lZHx8XG5GYWlsIGBjb25mbGljdGluZyBoZWxwZXJzIGZvciAke3Eoc3R5bGVOYW1lKX1gO1xuSGVscGVyVGFibGVbc3R5bGVOYW1lXT1oZWxwZXI7XG4gfVxuZm9yKGNvbnN0IHN0eWxlTmFtZSBvZiBvd25LZXlzKEhlbHBlclRhYmxlKSl7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdIT09dW5kZWZpbmVkfHxcbkZhaWwgYG1pc3NpbmcgaGVscGVyIGZvciAke3Eoc3R5bGVOYW1lKX1gO1xuIH1cblxucmV0dXJuIGhhcmRlbihIZWxwZXJUYWJsZSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VQYXNzU3R5bGVPZj0ocGFzc1N0eWxlSGVscGVycyk9PntcbmNvbnN0IEhlbHBlclRhYmxlPW1ha2VIZWxwZXJUYWJsZShwYXNzU3R5bGVIZWxwZXJzKTtcbmNvbnN0IHJlbW90YWJsZUhlbHBlcj1IZWxwZXJUYWJsZS5yZW1vdGFibGU7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHBhc3NTdHlsZU1lbW89bmV3IFdlYWtNYXAoKTtcblxuLypcblxuICAgKi9cbi8vXG5jb25zdCBwYXNzU3R5bGVPZj0ocGFzc2FibGUpPT57XG4vL1xuLy9cbi8vXG5jb25zdCBpblByb2dyZXNzPW5ldyBTZXQoKTtcblxuY29uc3QgcGFzc1N0eWxlT2ZSZWN1cj0oaW5uZXIpPT57XG5jb25zdCBpbm5lcklzT2JqZWN0PWlzT2JqZWN0KGlubmVyKTtcbmlmKGlubmVySXNPYmplY3Qpe1xuY29uc3QgaW5uZXJTdHlsZT1wYXNzU3R5bGVNZW1vLmdldChpbm5lcik7XG5pZihpbm5lclN0eWxlKXtcbnJldHVybiBpbm5lclN0eWxlO1xuIH1cbiFpblByb2dyZXNzLmhhcyhpbm5lcil8fFxuRmFpbCBgUGFzcy1ieS1jb3B5IGRhdGEgY2Fubm90IGJlIGN5Y2xpYyAke2lubmVyfWA7XG5pblByb2dyZXNzLmFkZChpbm5lcik7XG4gfVxuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZkludGVybmFsKGlubmVyKTtcbmlmKGlubmVySXNPYmplY3Qpe1xucGFzc1N0eWxlTWVtby5zZXQoaW5uZXIscGFzc1N0eWxlKTtcbmluUHJvZ3Jlc3MuZGVsZXRlKGlubmVyKTtcbiB9XG5yZXR1cm4gcGFzc1N0eWxlO1xuIH07XG5cbmNvbnN0IHBhc3NTdHlsZU9mSW50ZXJuYWw9KGlubmVyKT0+e1xuY29uc3QgdHlwZXN0cj10eXBlb2YgaW5uZXI7XG5zd2l0Y2godHlwZXN0cil7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdudW1iZXInOlxuY2FzZSdiaWdpbnQnOntcbnJldHVybiB0eXBlc3RyO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5hc3NlcnRQYXNzYWJsZVN0cmluZyhpbm5lcik7XG5yZXR1cm4nc3RyaW5nJztcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuYXNzZXJ0UGFzc2FibGVTeW1ib2woaW5uZXIpO1xucmV0dXJuJ3N5bWJvbCc7XG4gfVxuY2FzZSdvYmplY3QnOntcbmlmKGlubmVyPT09bnVsbCl7XG5yZXR1cm4nbnVsbCc7XG4gfVxuaWYoIWlzRnJvemVuKGlubmVyKSl7XG5hc3NlcnQuZmFpbChcbi8vXG4vL1xuaXNUeXBlZEFycmF5KGlubmVyKT9cblggYENhbm5vdCBwYXNzIG11dGFibGUgdHlwZWQgYXJyYXlzIGxpa2UgJHtpbm5lcn0uYDpcblggYENhbm5vdCBwYXNzIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7aW5uZXJ9LiBVc2UgaGFyZGVuKClgKTtcblxuIH1cbmlmKGlzUHJvbWlzZShpbm5lcikpe1xuYXNzZXJ0U2FmZVByb21pc2UoaW5uZXIpO1xucmV0dXJuJ3Byb21pc2UnO1xuIH1cbnR5cGVvZiBpbm5lci50aGVuIT09J2Z1bmN0aW9uJ3x8XG5GYWlsIGBDYW5ub3QgcGFzcyBub24tcHJvbWlzZSB0aGVuYWJsZXNgO1xuY29uc3QgcGFzc1N0eWxlVGFnPWlubmVyW1BBU1NfU1RZTEVdO1xuaWYocGFzc1N0eWxlVGFnIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YocGFzc1N0eWxlVGFnLCdzdHJpbmcnKTtcbmNvbnN0IGhlbHBlcj1IZWxwZXJUYWJsZVtwYXNzU3R5bGVUYWddO1xuaGVscGVyIT09dW5kZWZpbmVkfHxcbkZhaWwgYFVucmVjb2duaXplZCBQYXNzU3R5bGU6ICR7cShwYXNzU3R5bGVUYWcpfWA7XG5oZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAqL3Bhc3NTdHlsZVRhZyk7XG4gfVxuZm9yKGNvbnN0IGhlbHBlciBvZiBwYXNzU3R5bGVIZWxwZXJzKXtcbmlmKGhlbHBlci5jYW5CZVZhbGlkKGlubmVyKSl7XG5oZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4gaGVscGVyLnN0eWxlTmFtZTtcbiB9XG4gfVxucmVtb3RhYmxlSGVscGVyLmFzc2VydFZhbGlkKGlubmVyLHBhc3NTdHlsZU9mUmVjdXIpO1xucmV0dXJuJ3JlbW90YWJsZSc7XG4gfVxuY2FzZSdmdW5jdGlvbic6e1xuaXNGcm96ZW4oaW5uZXIpfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7aW5uZXJ9LiBVc2UgaGFyZGVuKClgO1xudHlwZW9mIGlubmVyLnRoZW4hPT0nZnVuY3Rpb24nfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1wcm9taXNlIHRoZW5hYmxlc2A7XG5yZW1vdGFibGVIZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4ncmVtb3RhYmxlJztcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVucmVjb2duaXplZCB0eXBlb2YgJHtxKHR5cGVzdHIpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTtcblxucmV0dXJuIHBhc3NTdHlsZU9mUmVjdXIocGFzc2FibGUpO1xuIH07XG5yZXR1cm4gaGFyZGVuKHBhc3NTdHlsZU9mKTtcbiB9O1xuXG5jb25zdCAgICAgICAgUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2w9U3ltYm9sLmZvcignQGVuZG8gcGFzc1N0eWxlT2YnKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5QYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbChQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCk7XG5jb25zdCAgICAgICAgcGFzc1N0eWxlT2Y9XG5nbG9iYWxUaGlzJiZnbG9iYWxUaGlzW1Bhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sXXx8XG5tYWtlUGFzc1N0eWxlT2YoW1xuQ29weUFycmF5SGVscGVyLFxuQ29weVJlY29yZEhlbHBlcixcblRhZ2dlZEhlbHBlcixcbkVycm9ySGVscGVyLFxuUmVtb3RhYmxlSGVscGVyXSk7JGjigI1fb25jZS5wYXNzU3R5bGVPZihwYXNzU3R5bGVPZik7XG5cblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlPSh2YWwpPT57XG5wYXNzU3R5bGVPZih2YWwpOy8vXG4gfTskaOKAjV9vbmNlLmFzc2VydFBhc3NhYmxlKGFzc2VydFBhc3NhYmxlKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQYXNzYWJsZT0oc3BlY2ltZW4pPT57XG50cnl7XG4vL1xuLy9cbnJldHVybiBwYXNzU3R5bGVPZihzcGVjaW1lbikhPT11bmRlZmluZWQ7XG4gfWNhdGNoKF8pe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9OyRo4oCNX29uY2UuaXNQYXNzYWJsZShpc1Bhc3NhYmxlKTtcbmhhcmRlbihpc1Bhc3NhYmxlKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjPShuYW1lLGRlc2MpPT5cbmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKG5hbWUsZGVzYyxwYXNzU3R5bGVPZik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdG9QYXNzYWJsZUVycm9yPShlcnIpPT57XG5oYXJkZW4oZXJyKTtcbmlmKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKGVycixwYXNzU3R5bGVPZikpe1xucmV0dXJuIGVycjtcbiB9XG5jb25zdHtuYW1lLG1lc3NhZ2V9PWVycjtcbmNvbnN0e2NhdXNlOmNhdXNlRGVzYyxlcnJvcnM6ZXJyb3JzRGVzY309XG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGVycik7XG5sZXQgY2F1c2U7XG5sZXQgZXJyb3JzO1xuaWYoY2F1c2VEZXNjJiZpc1Bhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MoJ2NhdXNlJyxjYXVzZURlc2MpKXtcbmNhdXNlPWNhdXNlRGVzYy52YWx1ZTtcbiB9XG5pZihlcnJvcnNEZXNjJiZpc1Bhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MoJ2Vycm9ycycsZXJyb3JzRGVzYykpe1xuZXJyb3JzPWVycm9yc0Rlc2MudmFsdWU7XG4gfVxuXG5jb25zdCBlcnJDb25zdHJ1Y3Rvcj1nZXRFcnJvckNvbnN0cnVjdG9yKCBgJHtuYW1lfWApfHxFcnJvcjtcbmNvbnN0IG5ld0Vycm9yPW1ha2VFcnJvciggYCR7bWVzc2FnZX1gLGVyckNvbnN0cnVjdG9yLHtcbi8vXG5jYXVzZSxcbmVycm9yc30pO1xuXG4vL1xuaGFyZGVuKG5ld0Vycm9yKTtcbi8vXG4vL1xuLy9cbmFubm90YXRlRXJyb3IobmV3RXJyb3IsWCBgY29waWVkIGZyb20gZXJyb3IgJHtlcnJ9YCk7XG5wYXNzU3R5bGVPZihuZXdFcnJvcik9PT0nZXJyb3InfHxcbkZhaWwgYEV4cGVjdGVkICR7bmV3RXJyb3J9IHRvIGJlIGEgcGFzc2FibGUgZXJyb3JgO1xucmV0dXJuIG5ld0Vycm9yO1xuIH07JGjigI1fb25jZS50b1Bhc3NhYmxlRXJyb3IodG9QYXNzYWJsZUVycm9yKTtcbmhhcmRlbih0b1Bhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdG9UaHJvd2FibGU9KHNwZWNpbWVuKT0+e1xuaGFyZGVuKHNwZWNpbWVuKTtcbmlmKGlzRXJyb3JMaWtlKHNwZWNpbWVuKSl7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKC8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihzcGVjaW1lbik7XG5pZihpc09iamVjdChzcGVjaW1lbikpe1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuY29uc3QgZWxlbWVudHM9LyogICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cyl7XG5lbGVtZW50PT09dG9UaHJvd2FibGUoZWxlbWVudCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7ZWxlbWVudH1gO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmZvcihjb25zdCB2YWwgb2YgdmFsdWVzKHJlYykpe1xudmFsPT09dG9UaHJvd2FibGUodmFsKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHt2YWx9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGc9LyogICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuY29uc3R7cGF5bG9hZH09dGc7XG5wYXlsb2FkPT09dG9UaHJvd2FibGUocGF5bG9hZCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7cGF5bG9hZH1gO1xuYnJlYWs7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZXI9LyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmVyPT09dG9UaHJvd2FibGUoZXIpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VyfWA7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYEEgJHtxKHBhc3NTdHlsZSl9IGlzIG5vdCB0aHJvd2FibGU6ICR7c3BlY2ltZW59YDtcbiB9fVxuXG4gfVxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbik7XG4gfTskaOKAjV9vbmNlLnRvVGhyb3dhYmxlKHRvVGhyb3dhYmxlKTtcbmhhcmRlbih0b1Rocm93YWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCI6WyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCJdLCJwYXNzU3R5bGVPZiI6WyJwYXNzU3R5bGVPZiJdLCJhc3NlcnRQYXNzYWJsZSI6WyJhc3NlcnRQYXNzYWJsZSJdLCJpc1Bhc3NhYmxlIjpbImlzUGFzc2FibGUiXSwidG9QYXNzYWJsZUVycm9yIjpbInRvUGFzc2FibGVFcnJvciJdLCJ0b1Rocm93YWJsZSI6WyJ0b1Rocm93YWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB30VJ7xBcAAMQXAAAoAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3JlbW90YWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiUmVtb3RhYmxlSGVscGVyIiwiYXNzZXJ0SWZhY2UiLCJnZXRJbnRlcmZhY2VPZiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLGFzc2VydENoZWNrZXIsY2FuQmVNZXRob2QsaGFzT3duUHJvcGVydHlPZixQQVNTX1NUWUxFLGNoZWNrVGFnUmVjb3JkLGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQsaXNPYmplY3QsZ2V0VGFnLENYOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaOKAjV9hID0+IChhc3NlcnRDaGVja2VyID0gJGjigI1fYSldXSxbXCJjYW5CZU1ldGhvZFwiLCBbJGjigI1fYSA9PiAoY2FuQmVNZXRob2QgPSAkaOKAjV9hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRo4oCNX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaOKAjV9hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRo4oCNX2EgPT4gKFBBU1NfU1RZTEUgPSAkaOKAjV9hKV1dLFtcImNoZWNrVGFnUmVjb3JkXCIsIFskaOKAjV9hID0+IChjaGVja1RhZ1JlY29yZCA9ICRo4oCNX2EpXV0sW1wiY2hlY2tGdW5jdGlvblRhZ1JlY29yZFwiLCBbJGjigI1fYSA9PiAoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCA9ICRo4oCNX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRo4oCNX2EgPT4gKGlzT2JqZWN0ID0gJGjigI1fYSldXSxbXCJnZXRUYWdcIiwgWyRo4oCNX2EgPT4gKGdldFRhZyA9ICRo4oCNX2EpXV0sW1wiQ1hcIiwgWyRo4oCNX2EgPT4gKENYID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e1xuZ2V0UHJvdG90eXBlT2YsXG5pc0Zyb3plbixcbnByb3RvdHlwZTpvYmplY3RQcm90b3R5cGUsXG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1cbk9iamVjdDtcblxuLypcblxuXG4gKi9cbmNvbnN0IGNoZWNrSWZhY2U9KGlmYWNlLGNoZWNrKT0+e1xucmV0dXJuKFxuLy9cbih0eXBlb2YgaWZhY2U9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZvciBub3csIGludGVyZmFjZSAke2lmYWNlfSBtdXN0IGJlIGEgc3RyaW5nOyB1bmltcGxlbWVudGVkYCkmJihcbmlmYWNlPT09J1JlbW90YWJsZSd8fFxuaWZhY2Uuc3RhcnRzV2l0aCgnQWxsZWdlZDogJyl8fFxuaWZhY2Uuc3RhcnRzV2l0aCgnRGVidWdOYW1lOiAnKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRm9yIG5vdywgaWZhY2UgJHtxKFxuaWZhY2UpXG4gfSBtdXN0IGJlIFwiUmVtb3RhYmxlXCIgb3IgYmVnaW4gd2l0aCBcIkFsbGVnZWQ6IFwiIG9yIFwiRGVidWdOYW1lOiBcIjsgdW5pbXBsZW1lbnRlZGApKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0SWZhY2U9KGlmYWNlKT0+Y2hlY2tJZmFjZShpZmFjZSxhc3NlcnRDaGVja2VyKTskaOKAjV9vbmNlLmFzc2VydElmYWNlKGFzc2VydElmYWNlKTtcbmhhcmRlbihhc3NlcnRJZmFjZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUmVtb3RhYmxlUHJvdG9PZj0ob3JpZ2luYWwsY2hlY2spPT57XG5pc09iamVjdChvcmlnaW5hbCl8fFxuRmFpbCBgUmVtb3RhYmxlcyBtdXN0IGJlIG9iamVjdHMgb3IgZnVuY3Rpb25zOiAke29yaWdpbmFsfWA7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgcHJvdG89Z2V0UHJvdG90eXBlT2Yob3JpZ2luYWwpO1xuaWYoXG5wcm90bz09PW9iamVjdFByb3RvdHlwZXx8XG5wcm90bz09PW51bGx8fFxucHJvdG89PT1GdW5jdGlvbi5wcm90b3R5cGUpXG57XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUmVtb3RhYmxlcyBtdXN0IGJlIGV4cGxpY2l0bHkgZGVjbGFyZWQ6ICR7cShvcmlnaW5hbCl9YCk7XG5cbiB9XG5cbmlmKHR5cGVvZiBvcmlnaW5hbD09PSdvYmplY3QnKXtcbmNvbnN0IHByb3RvUHJvdG89Z2V0UHJvdG90eXBlT2YocHJvdG8pO1xuaWYocHJvdG9Qcm90byE9PW9iamVjdFByb3RvdHlwZSYmcHJvdG9Qcm90byE9PW51bGwpe1xuLy9cbnJldHVybiBjaGVja1JlbW90YWJsZShwcm90byxjaGVjayk7XG4gfVxuaWYoIWNoZWNrVGFnUmVjb3JkKHByb3RvLCdyZW1vdGFibGUnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1lbHNlIGlmKHR5cGVvZiBvcmlnaW5hbD09PSdmdW5jdGlvbicpe1xuaWYoIWNoZWNrRnVuY3Rpb25UYWdSZWNvcmQocHJvdG8sJ3JlbW90YWJsZScsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxuXG4vL1xuY29uc3QgcGFzc1N0eWxlS2V5PS8qICAgICAgICAgICAgICAgICAgKi9QQVNTX1NUWUxFO1xuY29uc3QgdGFnS2V5PS8qICAgICAgICAgICAgICAgICAgKi9TeW1ib2wudG9TdHJpbmdUYWc7XG5jb25zdHtcbi8vXG5bLyogICAgICAgICAgICAgICAgICovcGFzc1N0eWxlS2V5XTpfcGFzc1N0eWxlRGVzYyxcblsvKiAgICAgICAgICAgICAgICAgKi90YWdLZXldOnt2YWx1ZTppZmFjZX0sXG4uLi5yZXN0RGVzY3N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhwcm90byk7XG5cbnJldHVybihcbihvd25LZXlzKHJlc3REZXNjcykubGVuZ3RoPT09MHx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFVuZXhwZWN0ZWQgcHJvcGVydGllcyBvbiBSZW1vdGFibGUgUHJvdG8gJHtvd25LZXlzKHJlc3REZXNjcyl9YCkmJlxuY2hlY2tJZmFjZShpZmFjZSxjaGVjaykpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjb25maXJtZWRSZW1vdGFibGVzPW5ldyBXZWFrU2V0KCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUmVtb3RhYmxlPSh2YWwsY2hlY2spPT57XG5pZihjb25maXJtZWRSZW1vdGFibGVzLmhhcyh2YWwpKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKCFpc0Zyb3plbih2YWwpKXtcbnJldHVybihcbiEhY2hlY2smJkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBub24tZnJvemVuIG9iamVjdHMgbGlrZSAke3ZhbH1gKTtcblxuIH1cbi8vXG5pZighUmVtb3RhYmxlSGVscGVyLmNhbkJlVmFsaWQodmFsLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgcmVzdWx0PWNoZWNrUmVtb3RhYmxlUHJvdG9PZih2YWwsY2hlY2spO1xuaWYocmVzdWx0KXtcbmNvbmZpcm1lZFJlbW90YWJsZXMuYWRkKHZhbCk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbnRlcmZhY2VPZj0odmFsKT0+e1xuaWYoXG4haXNPYmplY3QodmFsKXx8XG52YWxbUEFTU19TVFlMRV0hPT0ncmVtb3RhYmxlJ3x8XG4hY2hlY2tSZW1vdGFibGUodmFsKSlcbntcbi8vXG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbi8vXG5yZXR1cm4gZ2V0VGFnKHZhbCk7XG4gfTskaOKAjV9vbmNlLmdldEludGVyZmFjZU9mKGdldEludGVyZmFjZU9mKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VPZik7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgUmVtb3RhYmxlSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3JlbW90YWJsZScsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5jb25zdCB2YWxpZFR5cGU9XG4oaXNPYmplY3QoY2FuZGlkYXRlKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBub24tb2JqZWN0cyBhcyBSZW1vdGFibGUgJHtjYW5kaWRhdGV9YCkmJihcbiFpc0FycmF5KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgYXJyYXlzIGFzIFJlbW90YWJsZSAke2NhbmRpZGF0ZX1gKTtcbmlmKCF2YWxpZFR5cGUpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYodHlwZW9mIGNhbmRpZGF0ZT09PSdvYmplY3QnKXtcbi8vXG4vL1xucmV0dXJuIG93bktleXMoZGVzY3MpLmV2ZXJ5KChrZXkpPT57XG5yZXR1cm4oXG4vL1xuKGhhc093blByb3BlcnR5T2YoZGVzY3NbLyogICAgICAgICAgICAgICAgICova2V5XSwndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBSZW1vdGFibGVzIHdpdGggYWNjZXNzb3JzIGxpa2UgJHtxKFxuU3RyaW5nKGtleSkpXG4gfSBpbiAke2NhbmRpZGF0ZX1gKSYmKFxua2V5PT09U3ltYm9sLnRvU3RyaW5nVGFnJiZjaGVja0lmYWNlKGNhbmRpZGF0ZVtrZXldLGNoZWNrKXx8XG4oY2FuQmVNZXRob2QoY2FuZGlkYXRlW2tleV0pfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIFJlbW90YWJsZXMgd2l0aCBub24tbWV0aG9kcyBsaWtlICR7cShcblN0cmluZyhrZXkpKVxuIH0gaW4gJHtjYW5kaWRhdGV9YCkmJihcbmtleSE9PVBBU1NfU1RZTEV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgcGFzcy1ieS1yZW1vdGUgY2Fubm90IHNoYWRvdyAke3EoUEFTU19TVFlMRSl9YCkpKTtcblxuIH0pO1xuIH1lbHNlIGlmKHR5cGVvZiBjYW5kaWRhdGU9PT0nZnVuY3Rpb24nKXtcbi8vXG4vL1xuY29uc3R7XG5uYW1lOm5hbWVEZXNjLFxubGVuZ3RoOmxlbmd0aERlc2MsXG4vL1xuW1N5bWJvbC50b1N0cmluZ1RhZ106dG9TdHJpbmdUYWdEZXNjLFxuLi4ucmVzdERlc2NzfT1cbmRlc2NzO1xuY29uc3QgcmVzdEtleXM9b3duS2V5cyhyZXN0RGVzY3MpO1xucmV0dXJuKFxuKG5hbWVEZXNjJiZ0eXBlb2YgbmFtZURlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRmFyIGZ1bmN0aW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgaW4gJHtjYW5kaWRhdGV9YCkmJihcbmxlbmd0aERlc2MmJnR5cGVvZiBsZW5ndGhEZXNjLnZhbHVlPT09J251bWJlcid8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb24gbGVuZ3RoIG11c3QgYmUgYSBudW1iZXIsIGluICR7Y2FuZGlkYXRlfWApJiYoXG50b1N0cmluZ1RhZ0Rlc2M9PT11bmRlZmluZWR8fFxuKHR5cGVvZiB0b1N0cmluZ1RhZ0Rlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZhciBmdW5jdGlvbiBAQHRvU3RyaW5nVGFnIG11c3QgYmUgYSBzdHJpbmcsIGluICR7Y2FuZGlkYXRlfWApJiZcbmNoZWNrSWZhY2UodG9TdHJpbmdUYWdEZXNjLnZhbHVlLGNoZWNrKSkmJihcbnJlc3RLZXlzLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb25zIHVuZXhwZWN0ZWQgcHJvcGVydGllcyBiZXNpZGVzIC5uYW1lIGFuZCAubGVuZ3RoICR7cmVzdEtleXN9YCkpO1xuXG4gfVxucmV0dXJuISFjaGVjayYmQ1goY2hlY2spIGB1bnJlY29nbml6ZWQgdHlwZW9mICR7Y2FuZGlkYXRlfWA7XG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSk9PmNoZWNrUmVtb3RhYmxlKGNhbmRpZGF0ZSxhc3NlcnRDaGVja2VyKSxcblxuZXZlcnk6KF9wYXNzYWJsZSxfZm4pPT50cnVlfSk7JGjigI1fb25jZS5SZW1vdGFibGVIZWxwZXIoUmVtb3RhYmxlSGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzc2VydElmYWNlIjpbImFzc2VydElmYWNlIl0sImdldEludGVyZmFjZU9mIjpbImdldEludGVyZmFjZU9mIl0sIlJlbW90YWJsZUhlbHBlciI6WyJSZW1vdGFibGVIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAm2gvpJcMAACXDAAAKwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9zYWZlLXByb21pc2UuanN7ImltcG9ydHMiOlsiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0U2FmZVByb21pc2UiLCJpc1NhZmVQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpc1Byb21pc2UscSxhc3NlcnRDaGVja2VyLGhhc093blByb3BlcnR5T2YsQ1g7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjigI1fYSA9PiAoaXNQcm9taXNlID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaOKAjV9hID0+IChhc3NlcnRDaGVja2VyID0gJGjigI1fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaOKAjV9hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjigI1fYSldXSxbXCJDWFwiLCBbJGjigI1fYSA9PiAoQ1ggPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7aXNGcm96ZW4sZ2V0UHJvdG90eXBlT2YsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7dG9TdHJpbmdUYWd9PVN5bWJvbDtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tQcm9taXNlT3duS2V5cz0ocHIsY2hlY2spPT57XG5jb25zdCBrZXlzPW93bktleXMocHIpO1xuXG5pZihrZXlzLmxlbmd0aD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgdW5rbm93bktleXM9a2V5cy5maWx0ZXIoXG4oa2V5KT0+dHlwZW9mIGtleSE9PSdzeW1ib2wnfHwhaGFzT3duUHJvcGVydHlPZihQcm9taXNlLnByb3RvdHlwZSxrZXkpKTtcblxuXG5pZih1bmtub3duS2V5cy5sZW5ndGghPT0wKXtcbnJldHVybiBDWChcbmNoZWNrKVxuIGAke3ByfSAtIE11c3Qgbm90IGhhdmUgYW55IG93biBwcm9wZXJ0aWVzOiAke3EodW5rbm93bktleXMpfWA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tTYWZlT3duS2V5PShrZXkpPT57XG5pZihrZXk9PT10b1N0cmluZ1RhZyl7XG4vL1xuLy9cbmNvbnN0IHRhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByLHRvU3RyaW5nVGFnKTtcbmFzc2VydCh0YWdEZXNjIT09dW5kZWZpbmVkKTtcbnJldHVybihcbihoYXNPd25Qcm9wZXJ0eU9mKHRhZ0Rlc2MsJ3ZhbHVlJyl8fFxuQ1goXG5jaGVjaylcbiBgT3duIEBAdG9TdHJpbmdUYWcgbXVzdCBiZSBhIGRhdGEgcHJvcGVydHksIG5vdCBhbiBhY2Nlc3NvcjogJHtxKHRhZ0Rlc2MpfWApJiYoXG50eXBlb2YgdGFnRGVzYy52YWx1ZT09PSdzdHJpbmcnfHxcbkNYKFxuY2hlY2spXG4gYE93biBAQHRvU3RyaW5nVGFnIHZhbHVlIG11c3QgYmUgYSBzdHJpbmc6ICR7cSh0YWdEZXNjLnZhbHVlKX1gKSYmKFxuIXRhZ0Rlc2MuZW51bWVyYWJsZXx8XG5DWChjaGVjaykgYE93biBAQHRvU3RyaW5nVGFnIG11c3Qgbm90IGJlIGVudW1lcmFibGU6ICR7cSh0YWdEZXNjKX1gKSk7XG5cbiB9XG5jb25zdCB2YWw9cHJba2V5XTtcbmlmKHZhbD09PXVuZGVmaW5lZHx8dHlwZW9mIHZhbD09PSdudW1iZXInKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKFxudHlwZW9mIHZhbD09PSdvYmplY3QnJiZcbnZhbCE9PW51bGwmJlxuaXNGcm96ZW4odmFsKSYmXG5nZXRQcm90b3R5cGVPZih2YWwpPT09T2JqZWN0LnByb3RvdHlwZSlcbntcbmNvbnN0IHN1YktleXM9b3duS2V5cyh2YWwpO1xuaWYoc3ViS2V5cy5sZW5ndGg9PT0wKXtcbnJldHVybiB0cnVlO1xuIH1cblxuaWYoXG5zdWJLZXlzLmxlbmd0aD09PTEmJlxuc3ViS2V5c1swXT09PSdkZXN0cm95ZWQnJiZcbnZhbC5kZXN0cm95ZWQ9PT1mYWxzZSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gQ1goXG5jaGVjaylcbiBgVW5leHBlY3RlZCBOb2RlIGFzeW5jX2hvb2tzIGFkZGl0aW9ucyB0byBwcm9taXNlOiAke3ByfS4ke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGlzICR7dmFsfWA7XG4gfTtcblxucmV0dXJuIGtleXMuZXZlcnkoY2hlY2tTYWZlT3duS2V5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tTYWZlUHJvbWlzZT0ocHIsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNGcm96ZW4ocHIpfHxDWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBiZSBmcm96ZW5gKSYmKFxuaXNQcm9taXNlKHByKXx8Q1goY2hlY2spIGAke3ByfSAtIE11c3QgYmUgYSBwcm9taXNlYCkmJihcbmdldFByb3RvdHlwZU9mKHByKT09PVByb21pc2UucHJvdG90eXBlfHxcbkNYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGluaGVyaXQgZnJvbSBQcm9taXNlLnByb3RvdHlwZTogJHtxKFxuZ2V0UHJvdG90eXBlT2YocHIpKVxuIH1gKSYmXG5jaGVja1Byb21pc2VPd25LZXlzKC8qICAgICAgICAgICAgICAgICAgKi9wcixjaGVjaykpO1xuXG4gfTtcbmhhcmRlbihjaGVja1NhZmVQcm9taXNlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNTYWZlUHJvbWlzZT0ocHIpPT5jaGVja1NhZmVQcm9taXNlKHByLCh4KT0+eCk7JGjigI1fb25jZS5pc1NhZmVQcm9taXNlKGlzU2FmZVByb21pc2UpO1xuaGFyZGVuKGlzU2FmZVByb21pc2UpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0U2FmZVByb21pc2U9KHByKT0+Y2hlY2tTYWZlUHJvbWlzZShwcixhc3NlcnRDaGVja2VyKTskaOKAjV9vbmNlLmFzc2VydFNhZmVQcm9taXNlKGFzc2VydFNhZmVQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzU2FmZVByb21pc2UiOlsiaXNTYWZlUHJvbWlzZSJdLCJhc3NlcnRTYWZlUHJvbWlzZSI6WyJhc3NlcnRTYWZlUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAZCJttvgcAAL4HAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3N0cmluZy5qc3siaW1wb3J0cyI6WyJAZW5kby9lbnYtb3B0aW9ucyIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb24sRmFpbDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZ2V0RW52aXJvbm1lbnRPcHRpb25cIiwgWyRo4oCNX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cbi8vXG5jb25zdCBoYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kPSEhU3RyaW5nLnByb3RvdHlwZS5pc1dlbGxGb3JtZWQ7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNXZWxsRm9ybWVkU3RyaW5nPWhhc1dlbGxGb3JtZWRTdHJpbmdNZXRob2Q/XG4oc3RyKT0+dHlwZW9mIHN0cj09PSdzdHJpbmcnJiZzdHIuaXNXZWxsRm9ybWVkKCk6XG4oc3RyKT0+e1xuaWYodHlwZW9mIHN0ciE9PSdzdHJpbmcnKXtcbnJldHVybiBmYWxzZTtcbiB9XG5mb3IoY29uc3QgY2ggb2Ygc3RyKXtcbi8vXG4vL1xuLy9cbmNvbnN0IGNwPS8qICAgICAgICAgICAgICAgICAqL2NoLmNvZGVQb2ludEF0KDApO1xuaWYoY3A+PTB4ZDgwMCYmY3A8PTB4ZGZmZil7XG4vL1xuLy9cbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07JGjigI1fb25jZS5pc1dlbGxGb3JtZWRTdHJpbmcoaXNXZWxsRm9ybWVkU3RyaW5nKTtcbmhhcmRlbihpc1dlbGxGb3JtZWRTdHJpbmcpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFdlbGxGb3JtZWRTdHJpbmc9KHN0cik9PntcbmlzV2VsbEZvcm1lZFN0cmluZyhzdHIpfHxGYWlsIGBFeHBlY3RlZCB3ZWxsLWZvcm1lZCB1bmljb2RlIHN0cmluZzogJHtzdHJ9YDtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyhhc3NlcnRXZWxsRm9ybWVkU3RyaW5nKTtcbmhhcmRlbihhc3NlcnRXZWxsRm9ybWVkU3RyaW5nKTtcblxuY29uc3QgT05MWV9XRUxMX0ZPUk1FRF9TVFJJTkdTX1BBU1NBQkxFPVxuZ2V0RW52aXJvbm1lbnRPcHRpb24oJ09OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRScsJ2Rpc2FibGVkJyxbXG4nZW5hYmxlZCddKT09PVxuJ2VuYWJsZWQnO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0UGFzc2FibGVTdHJpbmc9KHN0cik9PntcbnR5cGVvZiBzdHI9PT0nc3RyaW5nJ3x8RmFpbCBgRXhwZWN0ZWQgc3RyaW5nICR7c3RyfWA7XG4hT05MWV9XRUxMX0ZPUk1FRF9TVFJJTkdTX1BBU1NBQkxFfHxhc3NlcnRXZWxsRm9ybWVkU3RyaW5nKHN0cik7XG4gfTskaOKAjV9vbmNlLmFzc2VydFBhc3NhYmxlU3RyaW5nKGFzc2VydFBhc3NhYmxlU3RyaW5nKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1dlbGxGb3JtZWRTdHJpbmciOlsiaXNXZWxsRm9ybWVkU3RyaW5nIl0sImFzc2VydFdlbGxGb3JtZWRTdHJpbmciOlsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRQYXNzYWJsZVN0cmluZyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABB9yNFCQoAAAkKAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3N5bWJvbC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuICovXG5jb25zdCB3ZWxsS25vd25TeW1ib2xOYW1lcz1uZXcgTWFwKFxub3duS2V5cyhTeW1ib2wpLlxuZmlsdGVyKFxuKG5hbWUpPT50eXBlb2YgbmFtZT09PSdzdHJpbmcnJiZ0eXBlb2YgU3ltYm9sW25hbWVdPT09J3N5bWJvbCcpLlxuXG5maWx0ZXIoKG5hbWUpPT57XG4vL1xuIW5hbWUuc3RhcnRzV2l0aCgnQEAnKXx8XG5GYWlsIGBEaWQgbm90IGV4cGVjdCBTeW1ib2wgdG8gaGF2ZSBhIHN5bWJvbC12YWx1ZWQgcHJvcGVydHkgbmFtZSBzdGFydGluZyB3aXRoIFwiQEBcIiAke3EoXG5uYW1lKVxuIH1gO1xucmV0dXJuIHRydWU7XG4gfSlcbi8vXG4ubWFwKChuYW1lKT0+W1N5bWJvbFtuYW1lXSwgYEBAJHtuYW1lfWBdKSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUGFzc2FibGVTeW1ib2w9KHN5bSk9PlxudHlwZW9mIHN5bT09PSdzeW1ib2wnJiYoXG50eXBlb2YgU3ltYm9sLmtleUZvcihzeW0pPT09J3N0cmluZyd8fHdlbGxLbm93blN5bWJvbE5hbWVzLmhhcyhzeW0pKTskaOKAjV9vbmNlLmlzUGFzc2FibGVTeW1ib2woaXNQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4oaXNQYXNzYWJsZVN5bWJvbCk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZVN5bWJvbD0oc3ltKT0+XG5pc1Bhc3NhYmxlU3ltYm9sKHN5bSl8fFxuRmFpbCBgT25seSByZWdpc3RlcmVkIHN5bWJvbHMgb3Igd2VsbC1rbm93biBzeW1ib2xzIGFyZSBwYXNzYWJsZTogJHtxKHN5bSl9YDskaOKAjV9vbmNlLmFzc2VydFBhc3NhYmxlU3ltYm9sKGFzc2VydFBhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZVN5bWJvbCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG5hbWVGb3JQYXNzYWJsZVN5bWJvbD0oc3ltKT0+e1xuY29uc3QgbmFtZT1TeW1ib2wua2V5Rm9yKHN5bSk7XG5pZihuYW1lPT09dW5kZWZpbmVkKXtcbnJldHVybiB3ZWxsS25vd25TeW1ib2xOYW1lcy5nZXQoc3ltKTtcbiB9XG5pZihuYW1lLnN0YXJ0c1dpdGgoJ0BAJykpe1xucmV0dXJuIGBAQCR7bmFtZX1gO1xuIH1cbnJldHVybiBuYW1lO1xuIH07JGjigI1fb25jZS5uYW1lRm9yUGFzc2FibGVTeW1ib2wobmFtZUZvclBhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihuYW1lRm9yUGFzc2FibGVTeW1ib2wpO1xuXG5jb25zdCBBdEF0UHJlZml4UGF0dGVybj0vXkBAKC4qKSQvO1xuaGFyZGVuKEF0QXRQcmVmaXhQYXR0ZXJuKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXNzYWJsZVN5bWJvbEZvck5hbWU9KG5hbWUpPT57XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuY29uc3QgbWF0Y2g9QXRBdFByZWZpeFBhdHRlcm4uZXhlYyhuYW1lKTtcbmlmKG1hdGNoKXtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmlmKHN1ZmZpeC5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBTeW1ib2wuZm9yKHN1ZmZpeCk7XG4gfWVsc2V7XG5jb25zdCBzeW09U3ltYm9sW3N1ZmZpeF07XG5pZih0eXBlb2Ygc3ltPT09J3N5bWJvbCcpe1xucmV0dXJuIHN5bTtcbiB9XG5GYWlsIGBSZXNlcnZlZCBmb3Igd2VsbCBrbm93biBzeW1ib2wgJHtxKHN1ZmZpeCl9OiAke3EobmFtZSl9YDtcbiB9XG4gfVxucmV0dXJuIFN5bWJvbC5mb3IobmFtZSk7XG4gfTskaOKAjV9vbmNlLnBhc3NhYmxlU3ltYm9sRm9yTmFtZShwYXNzYWJsZVN5bWJvbEZvck5hbWUpO1xuaGFyZGVuKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Bhc3NhYmxlU3ltYm9sIjpbImlzUGFzc2FibGVTeW1ib2wiXSwiYXNzZXJ0UGFzc2FibGVTeW1ib2wiOlsiYXNzZXJ0UGFzc2FibGVTeW1ib2wiXSwibmFtZUZvclBhc3NhYmxlU3ltYm9sIjpbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiOlsicGFzc2FibGVTeW1ib2xGb3JOYW1lIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADrK0vUmBwAAJgcAACUAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvdGFnZ2VkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJUYWdnZWRIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsYXNzZXJ0Q2hlY2tlcixjaGVja1RhZ1JlY29yZCxQQVNTX1NUWUxFLGdldE93bkRhdGFEZXNjcmlwdG9yLGNoZWNrUGFzc1N0eWxlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaOKAjV9hID0+IChhc3NlcnRDaGVja2VyID0gJGjigI1fYSldXSxbXCJjaGVja1RhZ1JlY29yZFwiLCBbJGjigI1fYSA9PiAoY2hlY2tUYWdSZWNvcmQgPSAkaOKAjV9hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRo4oCNX2EgPT4gKFBBU1NfU1RZTEUgPSAkaOKAjV9hKV1dLFtcImdldE93bkRhdGFEZXNjcmlwdG9yXCIsIFskaOKAjV9hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRo4oCNX2EpXV0sW1wiY2hlY2tQYXNzU3R5bGVcIiwgWyRo4oCNX2EgPT4gKGNoZWNrUGFzc1N0eWxlID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgVGFnZ2VkSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3RhZ2dlZCcsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT5cbmNoZWNrUGFzc1N0eWxlKGNhbmRpZGF0ZSxjYW5kaWRhdGVbUEFTU19TVFlMRV0sJ3RhZ2dlZCcsY2hlY2spLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jaGVja1RhZ1JlY29yZChjYW5kaWRhdGUsJ3RhZ2dlZCcsYXNzZXJ0Q2hlY2tlcik7XG5cbi8vXG5jb25zdCBwYXNzU3R5bGVLZXk9LyogICAgICAgICAgICAgICAgICAqL1BBU1NfU1RZTEU7XG5jb25zdCB0YWdLZXk9LyogICAgICAgICAgICAgICAgICAqL1N5bWJvbC50b1N0cmluZ1RhZztcbmNvbnN0e1xuLy9cblsvKiAgICAgICAgICAgICAgICAgKi9wYXNzU3R5bGVLZXldOl9wYXNzU3R5bGVEZXNjLFxuWy8qICAgICAgICAgICAgICAgICAqL3RhZ0tleV06X2xhYmVsRGVzYyxcbnBheWxvYWQ6X3BheWxvYWREZXNjLC8vXG4uLi5yZXN0RGVzY3N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xub3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuRmFpbCBgVW5leHBlY3RlZCBwcm9wZXJ0aWVzIG9uIHRhZ2dlZCByZWNvcmQgJHtvd25LZXlzKHJlc3REZXNjcyl9YDtcblxuLy9cbi8vXG5wYXNzU3R5bGVPZlJlY3VyKFxuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLCdwYXlsb2FkJyx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH19KTskaOKAjV9vbmNlLlRhZ2dlZEhlbHBlcihUYWdnZWRIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVGFnZ2VkSGVscGVyIjpbIlRhZ2dlZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACx9PL4DwkAAA8JAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbImFzc2VydENvcHlBcnJheSIsImFzc2VydFJlY29yZCIsImFzc2VydFJlbW90YWJsZSIsImlzQ29weUFycmF5IiwiaXNSZWNvcmQiLCJpc1JlbW90YWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLHBhc3NTdHlsZU9mOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjigI1fYSA9PiAocGFzc1N0eWxlT2YgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgaXNDb3B5QXJyYXk9KGFycik9PnBhc3NTdHlsZU9mKGFycik9PT0nY29weUFycmF5JzskaOKAjV9vbmNlLmlzQ29weUFycmF5KGlzQ29weUFycmF5KTtcbmhhcmRlbihpc0NvcHlBcnJheSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBpc1JlY29yZD0ocmVjb3JkKT0+cGFzc1N0eWxlT2YocmVjb3JkKT09PSdjb3B5UmVjb3JkJzskaOKAjV9vbmNlLmlzUmVjb3JkKGlzUmVjb3JkKTtcbmhhcmRlbihpc1JlY29yZCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgaXNSZW1vdGFibGU9KHJlbW90YWJsZSk9PnBhc3NTdHlsZU9mKHJlbW90YWJsZSk9PT0ncmVtb3RhYmxlJzskaOKAjV9vbmNlLmlzUmVtb3RhYmxlKGlzUmVtb3RhYmxlKTtcbmhhcmRlbihpc1JlbW90YWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvcHlBcnJheT0oYXJyYXksb3B0TmFtZU9mQXJyYXk9J0FsbGVnZWQgYXJyYXknKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKGFycmF5KTtcbnBhc3NTdHlsZT09PSdjb3B5QXJyYXknfHxcbkZhaWwgYCR7cShvcHROYW1lT2ZBcnJheSl9ICR7YXJyYXl9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgYXJyYXksIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaOKAjV9vbmNlLmFzc2VydENvcHlBcnJheShhc3NlcnRDb3B5QXJyYXkpO1xuaGFyZGVuKGFzc2VydENvcHlBcnJheSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlY29yZD0ocmVjb3JkLG9wdE5hbWVPZlJlY29yZD0nQWxsZWdlZCByZWNvcmQnKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlY29yZCk7XG5wYXNzU3R5bGU9PT0nY29weVJlY29yZCd8fFxuRmFpbCBgJHtxKG9wdE5hbWVPZlJlY29yZCl9ICR7cmVjb3JkfSBtdXN0IGJlIGEgcGFzcy1ieS1jb3B5IHJlY29yZCwgbm90ICR7cShcbnBhc3NTdHlsZSlcbiB9YDtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0UmVjb3JkKGFzc2VydFJlY29yZCk7XG5oYXJkZW4oYXNzZXJ0UmVjb3JkKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0UmVtb3RhYmxlPShcbnJlbW90YWJsZSxcbm9wdE5hbWVPZlJlbW90YWJsZT0nQWxsZWdlZCByZW1vdGFibGUnKT0+XG57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmVtb3RhYmxlKTtcbnBhc3NTdHlsZT09PSdyZW1vdGFibGUnfHxcbkZhaWwgYCR7cShvcHROYW1lT2ZSZW1vdGFibGUpfSAke3JlbW90YWJsZX0gbXVzdCBiZSBhIHJlbW90YWJsZSwgbm90ICR7cShcbnBhc3NTdHlsZSlcbiB9YDtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0UmVtb3RhYmxlKGFzc2VydFJlbW90YWJsZSk7XG5oYXJkZW4oYXNzZXJ0UmVtb3RhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzQ29weUFycmF5IjpbImlzQ29weUFycmF5Il0sImlzUmVjb3JkIjpbImlzUmVjb3JkIl0sImlzUmVtb3RhYmxlIjpbImlzUmVtb3RhYmxlIl0sImFzc2VydENvcHlBcnJheSI6WyJhc3NlcnRDb3B5QXJyYXkiXSwiYXNzZXJ0UmVjb3JkIjpbImFzc2VydFJlY29yZCJdLCJhc3NlcnRSZW1vdGFibGUiOlsiYXNzZXJ0UmVtb3RhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAFVRpDLwOAAC8DgAAHgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzIiwiLi9zcmMva2V5cy9jb3B5U2V0LmpzIiwiLi9zcmMva2V5cy9jb3B5QmFnLmpzIiwiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qcyIsIi4vc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qcyIsIi4vc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qcyIsIi4vc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qcyIsIi4vc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiLCIuL3NyYy90eXBlcy5qcyIsIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyJdLCJleHBvcnRzIjpbImFzc2VydEtleSIsImFzc2VydEtleSIsImJhZ1VuaW9uIiwiYmFnVW5pb24iLCJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzRGlzam9pbnQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRSYW5rQ292ZXIiLCJnZXRSYW5rQ292ZXIiLCJzZXRDb21wYXJlIiwic2V0Q29tcGFyZSIsbnVsbCxudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtbXCIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL2NvcHlTZXQuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvY29weUJhZy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanNcIiwgW11dLFtcIi4vc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMva2V5cy9jaGVja0tleS5qcyI6W1siaXNLZXkiLCJpc0tleSJdLFsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5Il0sWyJhc3NlcnRTY2FsYXJLZXkiLCJhc3NlcnRTY2FsYXJLZXkiXSxbImlzQ29weVNldCIsImlzQ29weVNldCJdLFsiYXNzZXJ0Q29weVNldCIsImFzc2VydENvcHlTZXQiXSxbIm1ha2VDb3B5U2V0IiwibWFrZUNvcHlTZXQiXSxbImdldENvcHlTZXRLZXlzIiwiZ2V0Q29weVNldEtleXMiXSxbImlzQ29weUJhZyIsImlzQ29weUJhZyJdLFsiYXNzZXJ0Q29weUJhZyIsImFzc2VydENvcHlCYWciXSxbIm1ha2VDb3B5QmFnIiwibWFrZUNvcHlCYWciXSxbIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiXSxbImdldENvcHlCYWdFbnRyaWVzIiwiZ2V0Q29weUJhZ0VudHJpZXMiXSxbImlzQ29weU1hcCIsImlzQ29weU1hcCJdLFsiYXNzZXJ0Q29weU1hcCIsImFzc2VydENvcHlNYXAiXSxbIm1ha2VDb3B5TWFwIiwibWFrZUNvcHlNYXAiXSxbImdldENvcHlNYXBFbnRyaWVzIiwiZ2V0Q29weU1hcEVudHJpZXMiXV0sIi4vc3JjL2tleXMvY29weVNldC5qcyI6W1siY29lcmNlVG9FbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiXV0sIi4vc3JjL2tleXMvY29weUJhZy5qcyI6W1siY29lcmNlVG9CYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIl1dLCIuL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzIjpbWyJiYWdDb21wYXJlIiwiYmFnQ29tcGFyZSJdLFsic2V0Q29tcGFyZSIsInNldENvbXBhcmUiXSxbImNvbXBhcmVLZXlzIiwiY29tcGFyZUtleXMiXSxbImtleUxUIiwia2V5TFQiXSxbImtleUxURSIsImtleUxURSJdLFsia2V5RVEiLCJrZXlFUSJdLFsia2V5R1RFIiwia2V5R1RFIl0sWyJrZXlHVCIsImtleUdUIl1dLCIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiOltbImVsZW1lbnRzSXNTdXBlcnNldCIsImVsZW1lbnRzSXNTdXBlcnNldCJdLFsiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50Il0sWyJlbGVtZW50c0NvbXBhcmUiLCJlbGVtZW50c0NvbXBhcmUiXSxbImVsZW1lbnRzVW5pb24iLCJlbGVtZW50c1VuaW9uIl0sWyJlbGVtZW50c0Rpc2pvaW50VW5pb24iLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSxbImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSxbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLFsic2V0SXNTdXBlcnNldCIsInNldElzU3VwZXJzZXQiXSxbInNldElzRGlzam9pbnQiLCJzZXRJc0Rpc2pvaW50Il0sWyJzZXRVbmlvbiIsInNldFVuaW9uIl0sWyJzZXREaXNqb2ludFVuaW9uIiwic2V0RGlzam9pbnRVbmlvbiJdLFsic2V0SW50ZXJzZWN0aW9uIiwic2V0SW50ZXJzZWN0aW9uIl0sWyJzZXREaXNqb2ludFN1YnRyYWN0Iiwic2V0RGlzam9pbnRTdWJ0cmFjdCJdXSwiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIjpbWyJiYWdJc1N1cGVyYmFnIiwiYmFnSXNTdXBlcmJhZyJdLFsiYmFnVW5pb24iLCJiYWdVbmlvbiJdLFsiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSW50ZXJzZWN0aW9uIl0sWyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnRGlzam9pbnRTdWJ0cmFjdCJdXSwiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIjpbWyJNIiwiTSJdLFsiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIl0sWyJpc1BhdHRlcm4iLCJpc1BhdHRlcm4iXSxbImFzc2VydFBhdHRlcm4iLCJhc3NlcnRQYXR0ZXJuIl0sWyJtYXRjaGVzIiwibWF0Y2hlcyJdLFsibXVzdE1hdGNoIiwibXVzdE1hdGNoIl0sWyJpc0F3YWl0QXJnR3VhcmQiLCJpc0F3YWl0QXJnR3VhcmQiXSxbImFzc2VydEF3YWl0QXJnR3VhcmQiLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIl0sWyJpc1Jhd0d1YXJkIiwiaXNSYXdHdWFyZCJdLFsiYXNzZXJ0UmF3R3VhcmQiLCJhc3NlcnRSYXdHdWFyZCJdLFsiYXNzZXJ0TWV0aG9kR3VhcmQiLCJhc3NlcnRNZXRob2RHdWFyZCJdLFsiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCJdLFsia2luZE9mIiwia2luZE9mIl1dLCIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIjpbWyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCIsImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIl0sWyJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiXSxbImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCIsImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCJdLFsiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyIsImdldEludGVyZmFjZU1ldGhvZEtleXMiXV0sIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOltbImxpc3REaWZmZXJlbmNlIiwibGlzdERpZmZlcmVuY2UiXV0sIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjpbWyJvYmplY3RNYXAiLCJvYmplY3RNYXAiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPi/xd+CMgAAgjIAACoAAABAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL2tleXMvY2hlY2tLZXkuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9jb3B5U2V0LmpzIiwiLi9jb3B5QmFnLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29weUJhZyIsImFzc2VydENvcHlNYXAiLCJhc3NlcnRDb3B5U2V0IiwiYXNzZXJ0S2V5IiwiYXNzZXJ0UHJpbWl0aXZlS2V5IiwiYXNzZXJ0U2NhbGFyS2V5IiwiY2hlY2tDb3B5QmFnIiwiY2hlY2tDb3B5TWFwIiwiY2hlY2tDb3B5U2V0IiwiY2hlY2tLZXkiLCJjaGVja1NjYWxhcktleSIsImNvcHlNYXBLZXlTZXQiLCJldmVyeUNvcHlCYWdFbnRyeSIsImV2ZXJ5Q29weU1hcEtleSIsImV2ZXJ5Q29weU1hcFZhbHVlIiwiZXZlcnlDb3B5U2V0S2V5IiwiZ2V0Q29weUJhZ0VudHJpZXMiLCJnZXRDb3B5TWFwRW50cmllcyIsImdldENvcHlNYXBFbnRyeUFycmF5IiwiZ2V0Q29weU1hcEtleXMiLCJnZXRDb3B5TWFwVmFsdWVzIiwiZ2V0Q29weVNldEtleXMiLCJpc0NvcHlCYWciLCJpc0NvcHlNYXAiLCJpc0NvcHlTZXQiLCJpc0tleSIsImlzUHJpbWl0aXZlS2V5IiwiaXNTY2FsYXJLZXkiLCJtYWtlQ29weUJhZyIsIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlNYXAiLCJtYWtlQ29weVNldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixhc3NlcnRQYXNzYWJsZSxGYXIsZ2V0VGFnLGlzT2JqZWN0LG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsY29tcGFyZUFudGlSYW5rLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmssaWRlbnRDaGVja2VyLFgscSxGYWlsLGNoZWNrRWxlbWVudHMsbWFrZVNldE9mRWxlbWVudHMsY2hlY2tCYWdFbnRyaWVzLG1ha2VCYWdPZkVudHJpZXM7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjigI1fYSldXSxbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV0sW1wiZ2V0VGFnXCIsIFskaOKAjV9hID0+IChnZXRUYWcgPSAkaOKAjV9hKV1dLFtcImlzT2JqZWN0XCIsIFskaOKAjV9hID0+IChpc09iamVjdCA9ICRo4oCNX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjigI1fYSA9PiAobWFrZVRhZ2dlZCA9ICRo4oCNX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRo4oCNX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRo4oCNX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjigI1fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaOKAjV9hID0+IChzb3J0QnlSYW5rID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzXCIsIFtbXCJpZGVudENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGlkZW50Q2hlY2tlciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiLi9jb3B5U2V0LmpzXCIsIFtbXCJjaGVja0VsZW1lbnRzXCIsIFskaOKAjV9hID0+IChjaGVja0VsZW1lbnRzID0gJGjigI1fYSldXSxbXCJtYWtlU2V0T2ZFbGVtZW50c1wiLCBbJGjigI1fYSA9PiAobWFrZVNldE9mRWxlbWVudHMgPSAkaOKAjV9hKV1dXV0sW1wiLi9jb3B5QmFnLmpzXCIsIFtbXCJjaGVja0JhZ0VudHJpZXNcIiwgWyRo4oCNX2EgPT4gKGNoZWNrQmFnRW50cmllcyA9ICRo4oCNX2EpXV0sW1wibWFrZUJhZ09mRW50cmllc1wiLCBbJGjigI1fYSA9PiAobWFrZUJhZ09mRW50cmllcyA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuICovXG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUHJpbWl0aXZlS2V5PSh2YWwsY2hlY2spPT57XG5pZihpc09iamVjdCh2YWwpKXtcbnJldHVybihcbmNoZWNrIT09aWRlbnRDaGVja2VyJiZcbmNoZWNrKGZhbHNlLFggYEEgJHtxKHR5cGVvZiB2YWwpfSBjYW5ub3QgYmUgYSBwcmltaXRpdmU6ICR7dmFsfWApKTtcblxuIH1cbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUodmFsKTtcbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQcmltaXRpdmVLZXk9KHZhbCk9PmNoZWNrUHJpbWl0aXZlS2V5KHZhbCxpZGVudENoZWNrZXIpOyRo4oCNX29uY2UuaXNQcmltaXRpdmVLZXkoaXNQcmltaXRpdmVLZXkpO1xuaGFyZGVuKGlzUHJpbWl0aXZlS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQcmltaXRpdmVLZXk9KHZhbCk9PntcbmNoZWNrUHJpbWl0aXZlS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0UHJpbWl0aXZlS2V5KGFzc2VydFByaW1pdGl2ZUtleSk7XG5oYXJkZW4oYXNzZXJ0UHJpbWl0aXZlS2V5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrU2NhbGFyS2V5PSh2YWwsY2hlY2spPT57XG5pZihpc1ByaW1pdGl2ZUtleSh2YWwpKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZih2YWwpO1xuaWYocGFzc1N0eWxlPT09J3JlbW90YWJsZScpe1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgJHtxKHBhc3NTdHlsZSl9IGNhbm5vdCBiZSBhIHNjYWxhciBrZXk6ICR7dmFsfWApO1xuIH07XG5cbi8qXG5cblxuICovJGjigI1fb25jZS5jaGVja1NjYWxhcktleShjaGVja1NjYWxhcktleSk7XG5jb25zdCAgICAgICAgaXNTY2FsYXJLZXk9KHZhbCk9PmNoZWNrU2NhbGFyS2V5KHZhbCxpZGVudENoZWNrZXIpOyRo4oCNX29uY2UuaXNTY2FsYXJLZXkoaXNTY2FsYXJLZXkpO1xuaGFyZGVuKGlzU2NhbGFyS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRTY2FsYXJLZXk9KHZhbCk9PntcbmNoZWNrU2NhbGFyS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0U2NhbGFyS2V5KGFzc2VydFNjYWxhcktleSk7XG5oYXJkZW4oYXNzZXJ0U2NhbGFyS2V5KTtcblxuLy9cblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGtleU1lbW89bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrS2V5PSh2YWwsY2hlY2spPT57XG5pZighaXNPYmplY3QodmFsKSl7XG4vL1xuLy9cbmFzc2VydFBhc3NhYmxlKHZhbCk7XG5yZXR1cm4gdHJ1ZTtcbiB9XG4vL1xuaWYoa2V5TWVtby5oYXModmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG4vL1xuY29uc3QgcmVzdWx0PWNoZWNrS2V5SW50ZXJuYWwodmFsLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG4vL1xuLy9cbi8vXG5rZXlNZW1vLmFkZCh2YWwpO1xuIH1cbi8vXG4vL1xucmV0dXJuIHJlc3VsdDtcbiB9OyRo4oCNX29uY2UuY2hlY2tLZXkoY2hlY2tLZXkpO1xuaGFyZGVuKGNoZWNrS2V5KTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNLZXk9KHZhbCk9PmNoZWNrS2V5KHZhbCxpZGVudENoZWNrZXIpOyRo4oCNX29uY2UuaXNLZXkoaXNLZXkpO1xuaGFyZGVuKGlzS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRLZXk9KHZhbCk9PntcbmNoZWNrS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0S2V5KGFzc2VydEtleSk7XG5oYXJkZW4oYXNzZXJ0S2V5KTtcblxuLy9cblxuLy9cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvcHlTZXRNZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja0NvcHlTZXQ9KHMsY2hlY2spPT57XG5pZihjb3B5U2V0TWVtby5oYXMocykpe1xucmV0dXJuIHRydWU7XG4gfVxuY29uc3QgcmVzdWx0PVxuKHBhc3NTdHlsZU9mKHMpPT09J3RhZ2dlZCcmJmdldFRhZyhzKT09PSdjb3B5U2V0J3x8XG5jaGVjayhmYWxzZSxYIGBOb3QgYSBjb3B5U2V0OiAke3N9YCkpJiZcbmNoZWNrRWxlbWVudHMocy5wYXlsb2FkLGNoZWNrKSYmXG5jaGVja0tleShzLnBheWxvYWQsY2hlY2spO1xuaWYocmVzdWx0KXtcbmNvcHlTZXRNZW1vLmFkZChzKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjigI1fb25jZS5jaGVja0NvcHlTZXQoY2hlY2tDb3B5U2V0KTtcbmhhcmRlbihjaGVja0NvcHlTZXQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldD0ocyk9PmNoZWNrQ29weVNldChzLGlkZW50Q2hlY2tlcik7JGjigI1fb25jZS5pc0NvcHlTZXQoaXNDb3B5U2V0KTtcbmhhcmRlbihpc0NvcHlTZXQpO1xuXG4vKlxuXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDb3B5U2V0PShzKT0+e1xuY2hlY2tDb3B5U2V0KHMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaOKAjV9vbmNlLmFzc2VydENvcHlTZXQoYXNzZXJ0Q29weVNldCk7XG5oYXJkZW4oYXNzZXJ0Q29weVNldCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5U2V0S2V5cz0ocyk9PntcbmFzc2VydENvcHlTZXQocyk7XG5yZXR1cm4gcy5wYXlsb2FkO1xuIH07JGjigI1fb25jZS5nZXRDb3B5U2V0S2V5cyhnZXRDb3B5U2V0S2V5cyk7XG5oYXJkZW4oZ2V0Q29weVNldEtleXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVyeUNvcHlTZXRLZXk9KHMsZm4pPT5cbmdldENvcHlTZXRLZXlzKHMpLmV2ZXJ5KChrZXksaW5kZXgpPT5mbihrZXksaW5kZXgpKTskaOKAjV9vbmNlLmV2ZXJ5Q29weVNldEtleShldmVyeUNvcHlTZXRLZXkpO1xuaGFyZGVuKGV2ZXJ5Q29weVNldEtleSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29weVNldD0oZWxlbWVudEl0ZXIpPT57XG5jb25zdCByZXN1bHQ9bWFrZVNldE9mRWxlbWVudHMoZWxlbWVudEl0ZXIpO1xuYXNzZXJ0Q29weVNldChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRo4oCNX29uY2UubWFrZUNvcHlTZXQobWFrZUNvcHlTZXQpO1xuaGFyZGVuKG1ha2VDb3B5U2V0KTtcblxuLy9cblxuLy9cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvcHlCYWdNZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja0NvcHlCYWc9KGIsY2hlY2spPT57XG5pZihjb3B5QmFnTWVtby5oYXMoYikpe1xucmV0dXJuIHRydWU7XG4gfVxuY29uc3QgcmVzdWx0PVxuKHBhc3NTdHlsZU9mKGIpPT09J3RhZ2dlZCcmJmdldFRhZyhiKT09PSdjb3B5QmFnJ3x8XG5jaGVjayhmYWxzZSxYIGBOb3QgYSBjb3B5QmFnOiAke2J9YCkpJiZcbmNoZWNrQmFnRW50cmllcyhiLnBheWxvYWQsY2hlY2spJiZcbmNoZWNrS2V5KGIucGF5bG9hZCxjaGVjayk7XG5pZihyZXN1bHQpe1xuY29weUJhZ01lbW8uYWRkKGIpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTskaOKAjV9vbmNlLmNoZWNrQ29weUJhZyhjaGVja0NvcHlCYWcpO1xuaGFyZGVuKGNoZWNrQ29weUJhZyk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5QmFnPShiKT0+Y2hlY2tDb3B5QmFnKGIsaWRlbnRDaGVja2VyKTskaOKAjV9vbmNlLmlzQ29weUJhZyhpc0NvcHlCYWcpO1xuaGFyZGVuKGlzQ29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGFzc2VydENvcHlCYWc9KGIpPT57XG5jaGVja0NvcHlCYWcoYixhc3NlcnRDaGVja2VyKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0Q29weUJhZyhhc3NlcnRDb3B5QmFnKTtcbmhhcmRlbihhc3NlcnRDb3B5QmFnKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlCYWdFbnRyaWVzPShiKT0+e1xuYXNzZXJ0Q29weUJhZyhiKTtcbnJldHVybiBiLnBheWxvYWQ7XG4gfTskaOKAjV9vbmNlLmdldENvcHlCYWdFbnRyaWVzKGdldENvcHlCYWdFbnRyaWVzKTtcbmhhcmRlbihnZXRDb3B5QmFnRW50cmllcyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weUJhZ0VudHJ5PShiLGZuKT0+XG5nZXRDb3B5QmFnRW50cmllcyhiKS5ldmVyeSgoZW50cnksaW5kZXgpPT5mbihlbnRyeSxpbmRleCkpOyRo4oCNX29uY2UuZXZlcnlDb3B5QmFnRW50cnkoZXZlcnlDb3B5QmFnRW50cnkpO1xuaGFyZGVuKGV2ZXJ5Q29weUJhZ0VudHJ5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5QmFnPShiYWdFbnRyeUl0ZXIpPT57XG5jb25zdCByZXN1bHQ9bWFrZUJhZ09mRW50cmllcyhiYWdFbnRyeUl0ZXIpO1xuYXNzZXJ0Q29weUJhZyhyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRo4oCNX29uY2UubWFrZUNvcHlCYWcobWFrZUNvcHlCYWcpO1xuaGFyZGVuKG1ha2VDb3B5QmFnKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzPShlbGVtZW50SXRlcik9Pntcbi8vXG4vL1xuY29uc3QgZnVsbENvbXBhcmU9bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcbmNvbnN0IHNvcnRlZD1zb3J0QnlSYW5rKGVsZW1lbnRJdGVyLGZ1bGxDb21wYXJlKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW50cmllcz1bXTtcbmZvcihsZXQgaT0wO2k8c29ydGVkLmxlbmd0aDspe1xuY29uc3Qgaz1zb3J0ZWRbaV07XG5sZXQgaj1pKzE7XG53aGlsZShqPHNvcnRlZC5sZW5ndGgmJmZ1bGxDb21wYXJlKGssc29ydGVkW2pdKT09PTApe1xuais9MTtcbiB9XG5lbnRyaWVzLnB1c2goW2ssQmlnSW50KGotaSldKTtcbmk9ajtcbiB9XG5yZXR1cm4gbWFrZUNvcHlCYWcoZW50cmllcyk7XG4gfTskaOKAjV9vbmNlLm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzKG1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzKTtcbmhhcmRlbihtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5TWFwTWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5TWFwPShtLGNoZWNrKT0+e1xuaWYoY29weU1hcE1lbW8uaGFzKG0pKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKCEocGFzc1N0eWxlT2YobSk9PT0ndGFnZ2VkJyYmZ2V0VGFnKG0pPT09J2NvcHlNYXAnKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgTm90IGEgY29weU1hcDogJHttfWApO1xuIH1cbmNvbnN0e3BheWxvYWR9PW07XG5pZihwYXNzU3R5bGVPZihwYXlsb2FkKSE9PSdjb3B5UmVjb3JkJyl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgQSBjb3B5TWFwJ3MgcGF5bG9hZCBtdXN0IGJlIGEgcmVjb3JkOiAke219YCk7XG4gfVxuY29uc3R7a2V5cyx2YWx1ZXMsLi4ucmVzdH09cGF5bG9hZDtcbmNvbnN0IHJlc3VsdD1cbihvd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuY2hlY2soXG5mYWxzZSxcblggYEEgY29weU1hcCdzIHBheWxvYWQgbXVzdCBvbmx5IGhhdmUgLmtleXMgYW5kIC52YWx1ZXM6ICR7bX1gKSkmJlxuXG5jaGVja0VsZW1lbnRzKGtleXMsY2hlY2spJiZcbmNoZWNrS2V5KGtleXMsY2hlY2spJiYoXG5wYXNzU3R5bGVPZih2YWx1ZXMpPT09J2NvcHlBcnJheSd8fFxuY2hlY2soZmFsc2UsWCBgQSBjb3B5TWFwJ3MgLnZhbHVlcyBtdXN0IGJlIGEgY29weUFycmF5OiAke219YCkpJiYoXG5rZXlzLmxlbmd0aD09PXZhbHVlcy5sZW5ndGh8fFxuY2hlY2soXG5mYWxzZSxcblggYEEgY29weU1hcCBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGtleXMgYW5kIHZhbHVlczogJHttfWApKTtcblxuaWYocmVzdWx0KXtcbmNvcHlNYXBNZW1vLmFkZChtKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjigI1fb25jZS5jaGVja0NvcHlNYXAoY2hlY2tDb3B5TWFwKTtcbmhhcmRlbihjaGVja0NvcHlNYXApO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weU1hcD0obSk9PmNoZWNrQ29weU1hcChtLGlkZW50Q2hlY2tlcik7JGjigI1fb25jZS5pc0NvcHlNYXAoaXNDb3B5TWFwKTtcbmhhcmRlbihpc0NvcHlNYXApO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydENvcHlNYXA9KG0pPT57XG5jaGVja0NvcHlNYXAobSxhc3NlcnRDaGVja2VyKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0Q29weU1hcChhc3NlcnRDb3B5TWFwKTtcbmhhcmRlbihhc3NlcnRDb3B5TWFwKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weU1hcEtleXM9KG0pPT57XG5hc3NlcnRDb3B5TWFwKG0pO1xucmV0dXJuIG0ucGF5bG9hZC5rZXlzO1xuIH07JGjigI1fb25jZS5nZXRDb3B5TWFwS2V5cyhnZXRDb3B5TWFwS2V5cyk7XG5oYXJkZW4oZ2V0Q29weU1hcEtleXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5TWFwVmFsdWVzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbnJldHVybiBtLnBheWxvYWQudmFsdWVzO1xuIH07JGjigI1fb25jZS5nZXRDb3B5TWFwVmFsdWVzKGdldENvcHlNYXBWYWx1ZXMpO1xuaGFyZGVuKGdldENvcHlNYXBWYWx1ZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weU1hcEVudHJ5QXJyYXk9KG0pPT57XG5hc3NlcnRDb3B5TWFwKG0pO1xuY29uc3R7XG5wYXlsb2FkOntrZXlzLHZhbHVlc319PVxubTtcbnJldHVybiBoYXJkZW4oa2V5cy5tYXAoKGtleSxpKT0+W2tleSx2YWx1ZXNbaV1dKSk7XG4gfTskaOKAjV9vbmNlLmdldENvcHlNYXBFbnRyeUFycmF5KGdldENvcHlNYXBFbnRyeUFycmF5KTtcbmhhcmRlbihnZXRDb3B5TWFwRW50cnlBcnJheSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBFbnRyaWVzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbmNvbnN0e1xucGF5bG9hZDp7a2V5cyx2YWx1ZXN9fT1cbm07XG5jb25zdHtsZW5ndGh9PS8qICAgICAgICAgICAgICAgICova2V5cztcbnJldHVybiBGYXIoJ0NvcHlNYXAgZW50cmllcyBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmxldCBpPTA7XG5yZXR1cm4gRmFyKCdDb3B5TWFwIGVudHJpZXMgaXRlcmF0b3InLHtcbm5leHQ6KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmVzdWx0O1xuaWYoaTxsZW5ndGgpe1xucmVzdWx0PWhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTpba2V5c1tpXSx2YWx1ZXNbaV1dfSk7XG5pKz0xO1xucmV0dXJuIHJlc3VsdDtcbiB9ZWxzZXtcbnJlc3VsdD1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH19KTtcblxuIH19KTtcblxuIH07JGjigI1fb25jZS5nZXRDb3B5TWFwRW50cmllcyhnZXRDb3B5TWFwRW50cmllcyk7XG5oYXJkZW4oZ2V0Q29weU1hcEVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weU1hcEtleT0obSxmbik9PlxuZ2V0Q29weU1hcEtleXMobSkuZXZlcnkoKGtleSxpbmRleCk9PmZuKGtleSxpbmRleCkpOyRo4oCNX29uY2UuZXZlcnlDb3B5TWFwS2V5KGV2ZXJ5Q29weU1hcEtleSk7XG5oYXJkZW4oZXZlcnlDb3B5TWFwS2V5KTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVyeUNvcHlNYXBWYWx1ZT0obSxmbik9PlxuZ2V0Q29weU1hcFZhbHVlcyhtKS5ldmVyeSgodmFsdWUsaW5kZXgpPT5mbih2YWx1ZSxpbmRleCkpOyRo4oCNX29uY2UuZXZlcnlDb3B5TWFwVmFsdWUoZXZlcnlDb3B5TWFwVmFsdWUpO1xuaGFyZGVuKGV2ZXJ5Q29weU1hcFZhbHVlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY29weU1hcEtleVNldD0obSk9PlxuLy9cbm1ha2VUYWdnZWQoJ2NvcHlTZXQnLG0ucGF5bG9hZC5rZXlzKTskaOKAjV9vbmNlLmNvcHlNYXBLZXlTZXQoY29weU1hcEtleVNldCk7XG5oYXJkZW4oY29weU1hcEtleVNldCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5TWFwPShlbnRyaWVzKT0+e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBzb3J0ZWRFbnRyaWVzPXNvcnRCeVJhbmsoZW50cmllcyxjb21wYXJlQW50aVJhbmspO1xuY29uc3Qga2V5cz1zb3J0ZWRFbnRyaWVzLm1hcCgoW2ssX3ZdKT0+ayk7XG5jb25zdCB2YWx1ZXM9c29ydGVkRW50cmllcy5tYXAoKFtfayx2XSk9PnYpO1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2NvcHlNYXAnLHtrZXlzLHZhbHVlc30pO1xuYXNzZXJ0Q29weU1hcChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRo4oCNX29uY2UubWFrZUNvcHlNYXAobWFrZUNvcHlNYXApO1xuaGFyZGVuKG1ha2VDb3B5TWFwKTtcblxuLy9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tLZXlJbnRlcm5hbD0odmFsLGNoZWNrKT0+e1xuY29uc3QgY2hlY2tJdD0oY2hpbGQpPT5jaGVja0tleShjaGlsZCxjaGVjayk7XG5cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZih2YWwpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG5yZXR1cm4gT2JqZWN0LnZhbHVlcyh2YWwpLmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xucmV0dXJuIHZhbC5ldmVyeShjaGVja0l0KTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGFnPWdldFRhZyh2YWwpO1xuc3dpdGNoKHRhZyl7XG5jYXNlJ2NvcHlTZXQnOntcbnJldHVybiBjaGVja0NvcHlTZXQodmFsLGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlCYWcnOntcbnJldHVybiBjaGVja0NvcHlCYWcodmFsLGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlNYXAnOntcbnJldHVybihcbmNoZWNrQ29weU1hcCh2YWwsY2hlY2spJiZcbi8vXG4vL1xuLy9cbmV2ZXJ5Q29weU1hcFZhbHVlKHZhbCxjaGVja0l0KSk7XG5cbiB9XG5kZWZhdWx0OntcbnJldHVybihcbmNoZWNrIT09aWRlbnRDaGVja2VyJiZcbmNoZWNrKGZhbHNlLFggYEEgcGFzc2FibGUgdGFnZ2VkICR7cSh0YWcpfSBpcyBub3QgYSBrZXk6ICR7dmFsfWApKTtcblxuIH19XG5cbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xuLy9cbnJldHVybiB0cnVlO1xuIH1cbmNhc2UnZXJyb3InOlxuY2FzZSdwcm9taXNlJzp7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgQSAke3EocGFzc1N0eWxlKX0gY2Fubm90IGJlIGEga2V5YCk7XG4gfVxuZGVmYXVsdDp7XG4vL1xuLy9cbnRocm93IEZhaWwgYHVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfTogJHt2YWx9YDtcbiB9fVxuXG4gfTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUHJpbWl0aXZlS2V5IjpbImlzUHJpbWl0aXZlS2V5Il0sImFzc2VydFByaW1pdGl2ZUtleSI6WyJhc3NlcnRQcmltaXRpdmVLZXkiXSwiY2hlY2tTY2FsYXJLZXkiOlsiY2hlY2tTY2FsYXJLZXkiXSwiaXNTY2FsYXJLZXkiOlsiaXNTY2FsYXJLZXkiXSwiYXNzZXJ0U2NhbGFyS2V5IjpbImFzc2VydFNjYWxhcktleSJdLCJjaGVja0tleSI6WyJjaGVja0tleSJdLCJpc0tleSI6WyJpc0tleSJdLCJhc3NlcnRLZXkiOlsiYXNzZXJ0S2V5Il0sImNoZWNrQ29weVNldCI6WyJjaGVja0NvcHlTZXQiXSwiaXNDb3B5U2V0IjpbImlzQ29weVNldCJdLCJhc3NlcnRDb3B5U2V0IjpbImFzc2VydENvcHlTZXQiXSwiZ2V0Q29weVNldEtleXMiOlsiZ2V0Q29weVNldEtleXMiXSwiZXZlcnlDb3B5U2V0S2V5IjpbImV2ZXJ5Q29weVNldEtleSJdLCJtYWtlQ29weVNldCI6WyJtYWtlQ29weVNldCJdLCJjaGVja0NvcHlCYWciOlsiY2hlY2tDb3B5QmFnIl0sImlzQ29weUJhZyI6WyJpc0NvcHlCYWciXSwiYXNzZXJ0Q29weUJhZyI6WyJhc3NlcnRDb3B5QmFnIl0sImdldENvcHlCYWdFbnRyaWVzIjpbImdldENvcHlCYWdFbnRyaWVzIl0sImV2ZXJ5Q29weUJhZ0VudHJ5IjpbImV2ZXJ5Q29weUJhZ0VudHJ5Il0sIm1ha2VDb3B5QmFnIjpbIm1ha2VDb3B5QmFnIl0sIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIjpbIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIl0sImNoZWNrQ29weU1hcCI6WyJjaGVja0NvcHlNYXAiXSwiaXNDb3B5TWFwIjpbImlzQ29weU1hcCJdLCJhc3NlcnRDb3B5TWFwIjpbImFzc2VydENvcHlNYXAiXSwiZ2V0Q29weU1hcEtleXMiOlsiZ2V0Q29weU1hcEtleXMiXSwiZ2V0Q29weU1hcFZhbHVlcyI6WyJnZXRDb3B5TWFwVmFsdWVzIl0sImdldENvcHlNYXBFbnRyeUFycmF5IjpbImdldENvcHlNYXBFbnRyeUFycmF5Il0sImdldENvcHlNYXBFbnRyaWVzIjpbImdldENvcHlNYXBFbnRyaWVzIl0sImV2ZXJ5Q29weU1hcEtleSI6WyJldmVyeUNvcHlNYXBLZXkiXSwiZXZlcnlDb3B5TWFwVmFsdWUiOlsiZXZlcnlDb3B5TWFwVmFsdWUiXSwiY29weU1hcEtleVNldCI6WyJjb3B5TWFwS2V5U2V0Il0sIm1ha2VDb3B5TWFwIjpbIm1ha2VDb3B5TWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANL+vHU6FQAAOhUAAC0AAABAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL2tleXMvY29tcGFyZUtleXMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyIsIi4vY2hlY2tLZXkuanMiLCIuL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIl0sImV4cG9ydHMiOlsiYmFnQ29tcGFyZSIsImNvbXBhcmVLZXlzIiwia2V5RVEiLCJrZXlHVCIsImtleUdURSIsImtleUxUIiwia2V5TFRFIiwic2V0Q29tcGFyZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFzc1N0eWxlT2YsZ2V0VGFnLGNvbXBhcmVSYW5rLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlcyx0cml2aWFsQ29tcGFyYXRvcixxLEZhaWwsYXNzZXJ0S2V5LGdldENvcHlCYWdFbnRyaWVzLGdldENvcHlNYXBFbnRyeUFycmF5LGdldENvcHlTZXRLZXlzLG1ha2VDb21wYXJlQ29sbGVjdGlvbjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjigI1fYSA9PiAocGFzc1N0eWxlT2YgPSAkaOKAjV9hKV1dLFtcImdldFRhZ1wiLCBbJGjigI1fYSA9PiAoZ2V0VGFnID0gJGjigI1fYSldXSxbXCJjb21wYXJlUmFua1wiLCBbJGjigI1fYSA9PiAoY29tcGFyZVJhbmsgPSAkaOKAjV9hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaOKAjV9hID0+IChyZWNvcmROYW1lcyA9ICRo4oCNX2EpXV0sW1wicmVjb3JkVmFsdWVzXCIsIFskaOKAjV9hID0+IChyZWNvcmRWYWx1ZXMgPSAkaOKAjV9hKV1dLFtcInRyaXZpYWxDb21wYXJhdG9yXCIsIFskaOKAjV9hID0+ICh0cml2aWFsQ29tcGFyYXRvciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiLi9jaGVja0tleS5qc1wiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaOKAjV9hID0+IChhc3NlcnRLZXkgPSAkaOKAjV9hKV1dLFtcImdldENvcHlCYWdFbnRyaWVzXCIsIFskaOKAjV9hID0+IChnZXRDb3B5QmFnRW50cmllcyA9ICRo4oCNX2EpXV0sW1wiZ2V0Q29weU1hcEVudHJ5QXJyYXlcIiwgWyRo4oCNX2EgPT4gKGdldENvcHlNYXBFbnRyeUFycmF5ID0gJGjigI1fYSldXSxbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjigI1fYSA9PiAoZ2V0Q29weVNldEtleXMgPSAkaOKAjV9hKV1dXV0sW1wiLi9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qc1wiLCBbW1wibWFrZUNvbXBhcmVDb2xsZWN0aW9uXCIsIFskaOKAjV9hID0+IChtYWtlQ29tcGFyZUNvbGxlY3Rpb24gPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNldENvbXBhcmU9bWFrZUNvbXBhcmVDb2xsZWN0aW9uKFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbihzKT0+aGFyZGVuKGdldENvcHlTZXRLZXlzKHMpLm1hcCgoa2V5KT0+W2tleSwxXSkpLFxuXG4wLFxudHJpdmlhbENvbXBhcmF0b3IpOyRo4oCNX29uY2Uuc2V0Q29tcGFyZShzZXRDb21wYXJlKTtcblxuaGFyZGVuKHNldENvbXBhcmUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYmFnQ29tcGFyZT1tYWtlQ29tcGFyZUNvbGxlY3Rpb24oXG5nZXRDb3B5QmFnRW50cmllcyxcbjBuLFxudHJpdmlhbENvbXBhcmF0b3IpOyRo4oCNX29uY2UuYmFnQ29tcGFyZShiYWdDb21wYXJlKTtcblxuaGFyZGVuKGJhZ0NvbXBhcmUpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0IEFCU0VOVD1TeW1ib2woJ2Fic2VudCcpO1xuLypcblxuXG5cblxuXG5cbiAqL1xuLy9cbmNvbnN0IF9tYXBDb21wYXJlPW1ha2VDb21wYXJlQ29sbGVjdGlvbihcbmdldENvcHlNYXBFbnRyeUFycmF5LFxuQUJTRU5ULFxuKGxlZnRWYWx1ZSxyaWdodFZhbHVlKT0+e1xuaWYobGVmdFZhbHVlPT09QUJTRU5UJiZyaWdodFZhbHVlPT09QUJTRU5UKXtcbnRocm93IEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGFic2VudCBlbnRyeSBwYWlyYDtcbiB9ZWxzZSBpZihsZWZ0VmFsdWU9PT1BQlNFTlQpe1xucmV0dXJuLTE7XG4gfWVsc2UgaWYocmlnaHRWYWx1ZT09PUFCU0VOVCl7XG5yZXR1cm4gMTtcbiB9ZWxzZXtcbi8vXG5yZXR1cm4gY29tcGFyZUtleXMobGVmdFZhbHVlLHJpZ2h0VmFsdWUpO1xuIH1cbiB9KTtcblxuaGFyZGVuKF9tYXBDb21wYXJlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGNvbXBhcmVLZXlzPShsZWZ0LHJpZ2h0KT0+e1xuYXNzZXJ0S2V5KGxlZnQpO1xuYXNzZXJ0S2V5KHJpZ2h0KTtcbmNvbnN0IGxlZnRTdHlsZT1wYXNzU3R5bGVPZihsZWZ0KTtcbmNvbnN0IHJpZ2h0U3R5bGU9cGFzc1N0eWxlT2YocmlnaHQpO1xuaWYobGVmdFN0eWxlIT09cmlnaHRTdHlsZSl7XG4vL1xucmV0dXJuIE5hTjtcbiB9XG5zd2l0Y2gobGVmdFN0eWxlKXtcbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOlxuY2FzZSdzeW1ib2wnOntcbi8vXG5yZXR1cm4gY29tcGFyZVJhbmsobGVmdCxyaWdodCk7XG4gfVxuY2FzZSdudW1iZXInOntcbmNvbnN0IHJhbmtDb21wPWNvbXBhcmVSYW5rKGxlZnQscmlnaHQpO1xuaWYocmFua0NvbXA9PT0wKXtcbnJldHVybiAwO1xuIH1cbmlmKE51bWJlci5pc05hTihsZWZ0KXx8TnVtYmVyLmlzTmFOKHJpZ2h0KSl7XG4vL1xuYXNzZXJ0KCFOdW1iZXIuaXNOYU4obGVmdCl8fCFOdW1iZXIuaXNOYU4ocmlnaHQpKTtcbnJldHVybiBOYU47XG4gfVxuLy9cbi8vXG5yZXR1cm4gcmFua0NvbXA7XG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmlmKGxlZnQ9PT1yaWdodCl7XG5yZXR1cm4gMDtcbiB9XG4vL1xuLy9cbnJldHVybiBOYU47XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgbGVuPU1hdGgubWluKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbi8vXG5jb25zdCByZXN1bHQ9Y29tcGFyZUtleXMobGVmdFtpXSxyaWdodFtpXSk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbi8vXG4vL1xuLy9cbnJldHVybiBjb21wYXJlUmFuayhsZWZ0Lmxlbmd0aCxyaWdodC5sZW5ndGgpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG5jb25zdCBsZWZ0TmFtZXM9cmVjb3JkTmFtZXMobGVmdCk7XG4vL1xuY29uc3QgcmlnaHROYW1lcz1yZWNvcmROYW1lcyhyaWdodCk7XG5cbi8vXG5pZigha2V5RVEobGVmdE5hbWVzLHJpZ2h0TmFtZXMpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIE5hTjtcbiB9XG4vL1xuY29uc3QgbGVmdFZhbHVlcz1yZWNvcmRWYWx1ZXMobGVmdCxsZWZ0TmFtZXMpO1xuLy9cbmNvbnN0IHJpZ2h0VmFsdWVzPXJlY29yZFZhbHVlcyhyaWdodCxyaWdodE5hbWVzKTtcbi8vXG4vL1xubGV0IHJlc3VsdD0wO1xuZm9yKGxldCBpPTA7aTxsZWZ0VmFsdWVzLmxlbmd0aDtpKz0xKXtcbmNvbnN0IGNvbXA9Y29tcGFyZUtleXMobGVmdFZhbHVlc1tpXSxyaWdodFZhbHVlc1tpXSk7XG5pZihOdW1iZXIuaXNOYU4oY29tcCkpe1xucmV0dXJuIE5hTjtcbiB9XG5pZihyZXN1bHQhPT1jb21wJiZjb21wIT09MCl7XG5pZihyZXN1bHQ9PT0wKXtcbnJlc3VsdD1jb21wO1xuIH1lbHNle1xuYXNzZXJ0KFxucmVzdWx0PT09LTEmJmNvbXA9PT0xfHxyZXN1bHQ9PT0xJiZjb21wPT09LTEpO1xuXG5yZXR1cm4gTmFOO1xuIH1cbiB9XG4gfVxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiByZXN1bHQ7XG4gfVxuY2FzZSd0YWdnZWQnOntcbi8vXG5jb25zdCBsZWZ0VGFnPWdldFRhZyhsZWZ0KTtcbi8vXG5jb25zdCByaWdodFRhZz1nZXRUYWcocmlnaHQpO1xuaWYobGVmdFRhZyE9PXJpZ2h0VGFnKXtcbi8vXG5yZXR1cm4gTmFOO1xuIH1cbnN3aXRjaChsZWZ0VGFnKXtcbmNhc2UnY29weVNldCc6e1xuLy9cbnJldHVybiBzZXRDb21wYXJlKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UnY29weUJhZyc6e1xuLy9cbnJldHVybiBiYWdDb21wYXJlKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UnY29weU1hcCc6e1xuLy9cbi8vXG50aHJvdyBGYWlsIGBNYXAgY29tcGFyaXNvbiBub3QgeWV0IGltcGxlbWVudGVkOiAke2xlZnR9IHZzICR7cmlnaHR9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYHVuZXhwZWN0ZWQgdGFnICR7cShsZWZ0VGFnKX06ICR7bGVmdH1gO1xuIH19XG5cbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYHVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShsZWZ0U3R5bGUpfTogJHtsZWZ0fWA7XG4gfX1cblxuIH07JGjigI1fb25jZS5jb21wYXJlS2V5cyhjb21wYXJlS2V5cyk7XG5oYXJkZW4oY29tcGFyZUtleXMpO1xuXG5jb25zdCAgICAgICAga2V5TFQ9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KTwwOyRo4oCNX29uY2Uua2V5TFQoa2V5TFQpO1xuaGFyZGVuKGtleUxUKTtcblxuY29uc3QgICAgICAgIGtleUxURT0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPD0wOyRo4oCNX29uY2Uua2V5TFRFKGtleUxURSk7XG5oYXJkZW4oa2V5TFRFKTtcblxuY29uc3QgICAgICAgIGtleUVRPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk9PT0wOyRo4oCNX29uY2Uua2V5RVEoa2V5RVEpO1xuaGFyZGVuKGtleUVRKTtcblxuY29uc3QgICAgICAgIGtleUdURT0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPj0wOyRo4oCNX29uY2Uua2V5R1RFKGtleUdURSk7XG5oYXJkZW4oa2V5R1RFKTtcblxuY29uc3QgICAgICAgIGtleUdUPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk+MDskaOKAjV9vbmNlLmtleUdUKGtleUdUKTtcbmhhcmRlbihrZXlHVCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzZXRDb21wYXJlIjpbInNldENvbXBhcmUiXSwiYmFnQ29tcGFyZSI6WyJiYWdDb21wYXJlIl0sImNvbXBhcmVLZXlzIjpbImNvbXBhcmVLZXlzIl0sImtleUxUIjpbImtleUxUIl0sImtleUxURSI6WyJrZXlMVEUiXSwia2V5RVEiOlsia2V5RVEiXSwia2V5R1RFIjpbImtleUdURSJdLCJrZXlHVCI6WyJrZXlHVCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB9Z1ck4Q0AAOENAAApAAAAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL2NvcHlCYWcuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydEJhZ0VudHJpZXMiLCJhc3NlcnROb0R1cGxpY2F0ZUtleXMiLCJjaGVja0JhZ0VudHJpZXMiLCJjb2VyY2VUb0JhZ0VudHJpZXMiLCJtYWtlQmFnT2ZFbnRyaWVzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsY29tcGFyZUFudGlSYW5rLGlzUmFua1NvcnRlZCxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLFg7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRo4oCNX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjigI1fYSA9PiAobWFrZVRhZ2dlZCA9ICRo4oCNX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRo4oCNX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRo4oCNX2EpXV0sW1wiaXNSYW5rU29ydGVkXCIsIFskaOKAjV9hID0+IChpc1JhbmtTb3J0ZWQgPSAkaOKAjV9hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaOKAjV9hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRo4oCNX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjigI1fYSA9PiAoc29ydEJ5UmFuayA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja05vRHVwbGljYXRlS2V5cz0oYmFnRW50cmllcyxmdWxsQ29tcGFyZSxjaGVjayk9Pntcbi8vXG4vL1xuLy9cbi8vXG5mdWxsQ29tcGFyZT1mdWxsQ29tcGFyZXx8bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcblxuLy9cbi8vXG4vL1xuYmFnRW50cmllcz1zb3J0QnlSYW5rKGJhZ0VudHJpZXMsZnVsbENvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1iYWdFbnRyaWVzO1xuZm9yKGxldCBpPTE7aTxsZW5ndGg7aSs9MSl7XG5jb25zdCBrMD1iYWdFbnRyaWVzW2ktMV1bMF07XG5jb25zdCBrMT1iYWdFbnRyaWVzW2ldWzBdO1xuaWYoZnVsbENvbXBhcmUoazAsazEpPT09MCl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgdmFsdWUgaGFzIGR1cGxpY2F0ZSBrZXlzOiAke2swfWApO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZUtleXM9KGJhZ0VudHJpZXMsZnVsbENvbXBhcmU9dW5kZWZpbmVkKT0+e1xuY2hlY2tOb0R1cGxpY2F0ZUtleXMoYmFnRW50cmllcyxmdWxsQ29tcGFyZSxhc3NlcnRDaGVja2VyKTtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjigI1fb25jZS5hc3NlcnROb0R1cGxpY2F0ZUtleXMoYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKTtcbmNvbnN0ICAgICAgICBjaGVja0JhZ0VudHJpZXM9KGJhZ0VudHJpZXMsY2hlY2spPT57XG5pZihwYXNzU3R5bGVPZihiYWdFbnRyaWVzKSE9PSdjb3B5QXJyYXknKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGVudHJpZXMgb2YgYSBjb3B5QmFnIG11c3QgYmUgYSBjb3B5QXJyYXk6ICR7YmFnRW50cmllc31gKTtcblxuIH1cbmlmKCFpc1JhbmtTb3J0ZWQoYmFnRW50cmllcyxjb21wYXJlQW50aVJhbmspKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGVudHJpZXMgb2YgYSBjb3B5QmFnIG11c3QgYmUgc29ydGVkIGluIHJldmVyc2UgcmFuayBvcmRlcjogJHtiYWdFbnRyaWVzfWApO1xuXG4gfVxuZm9yKGNvbnN0IGVudHJ5IG9mIGJhZ0VudHJpZXMpe1xuaWYoXG5wYXNzU3R5bGVPZihlbnRyeSkhPT0nY29weUFycmF5J3x8XG5lbnRyeS5sZW5ndGghPT0yfHxcbnR5cGVvZiBlbnRyeVsxXSE9PSdiaWdpbnQnKVxue1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBFYWNoIGVudHJ5IG9mIGEgY29weUJhZyBtdXN0IGJlIHBhaXIgb2YgYSBrZXkgYW5kIGEgYmlnaW50IHJlcHJlc2VudGluZyBhIGNvdW50OiAke2VudHJ5fWApO1xuXG4gfVxuaWYoZW50cnlbMV08MSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYEVhY2ggZW50cnkgb2YgYSBjb3B5QmFnIG11c3QgaGF2ZSBhIHBvc2l0aXZlIGNvdW50OiAke2VudHJ5fWApO1xuXG4gfVxuIH1cbi8vXG5yZXR1cm4gY2hlY2tOb0R1cGxpY2F0ZUtleXMoYmFnRW50cmllcyx1bmRlZmluZWQsY2hlY2spO1xuIH07JGjigI1fb25jZS5jaGVja0JhZ0VudHJpZXMoY2hlY2tCYWdFbnRyaWVzKTtcbmhhcmRlbihjaGVja0JhZ0VudHJpZXMpO1xuXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRCYWdFbnRyaWVzPShiYWdFbnRyaWVzKT0+e1xuY2hlY2tCYWdFbnRyaWVzKGJhZ0VudHJpZXMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaOKAjV9vbmNlLmFzc2VydEJhZ0VudHJpZXMoYXNzZXJ0QmFnRW50cmllcyk7XG5oYXJkZW4oYXNzZXJ0QmFnRW50cmllcyk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgY29lcmNlVG9CYWdFbnRyaWVzPShiYWdFbnRyaWVzTGlzdCk9PntcbmNvbnN0IGJhZ0VudHJpZXM9c29ydEJ5UmFuayhiYWdFbnRyaWVzTGlzdCxjb21wYXJlQW50aVJhbmspO1xuYXNzZXJ0QmFnRW50cmllcyhiYWdFbnRyaWVzKTtcbnJldHVybiBiYWdFbnRyaWVzO1xuIH07JGjigI1fb25jZS5jb2VyY2VUb0JhZ0VudHJpZXMoY29lcmNlVG9CYWdFbnRyaWVzKTtcbmhhcmRlbihjb2VyY2VUb0JhZ0VudHJpZXMpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUJhZ09mRW50cmllcz0oYmFnRW50cnlJdGVyKT0+XG5tYWtlVGFnZ2VkKCdjb3B5QmFnJyxjb2VyY2VUb0JhZ0VudHJpZXMoYmFnRW50cnlJdGVyKSk7JGjigI1fb25jZS5tYWtlQmFnT2ZFbnRyaWVzKG1ha2VCYWdPZkVudHJpZXMpO1xuaGFyZGVuKG1ha2VCYWdPZkVudHJpZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzIjpbImFzc2VydE5vRHVwbGljYXRlS2V5cyJdLCJjaGVja0JhZ0VudHJpZXMiOlsiY2hlY2tCYWdFbnRyaWVzIl0sImFzc2VydEJhZ0VudHJpZXMiOlsiYXNzZXJ0QmFnRW50cmllcyJdLCJjb2VyY2VUb0JhZ0VudHJpZXMiOlsiY29lcmNlVG9CYWdFbnRyaWVzIl0sIm1ha2VCYWdPZkVudHJpZXMiOlsibWFrZUJhZ09mRW50cmllcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACTDHgB6AsAAOgLAAApAAAAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL2NvcHlTZXQuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydEVsZW1lbnRzIiwiYXNzZXJ0Tm9EdXBsaWNhdGVzIiwiY2hlY2tFbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiLCJtYWtlU2V0T2ZFbGVtZW50cyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGNvbXBhcmVBbnRpUmFuayxpc1JhbmtTb3J0ZWQsbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxYOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaOKAjV9hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRo4oCNX2EgPT4gKG1ha2VUYWdnZWQgPSAkaOKAjV9hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaOKAjV9hID0+IChwYXNzU3R5bGVPZiA9ICRo4oCNX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaOKAjV9hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaOKAjV9hKV1dLFtcImlzUmFua1NvcnRlZFwiLCBbJGjigI1fYSA9PiAoaXNSYW5rU29ydGVkID0gJGjigI1fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjigI1fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaOKAjV9hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRo4oCNX2EgPT4gKHNvcnRCeVJhbmsgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaOKAjV9hID0+IChYID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tOb0R1cGxpY2F0ZXM9KGVsZW1lbnRzLGZ1bGxDb21wYXJlLGNoZWNrKT0+e1xuLy9cbi8vXG4vL1xuLy9cbmZ1bGxDb21wYXJlPWZ1bGxDb21wYXJlfHxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG5lbGVtZW50cz1zb3J0QnlSYW5rKGVsZW1lbnRzLGZ1bGxDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09ZWxlbWVudHM7XG5mb3IobGV0IGk9MTtpPGxlbmd0aDtpKz0xKXtcbmNvbnN0IGswPWVsZW1lbnRzW2ktMV07XG5jb25zdCBrMT1lbGVtZW50c1tpXTtcbmlmKGZ1bGxDb21wYXJlKGswLGsxKT09PTApe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYHZhbHVlIGhhcyBkdXBsaWNhdGUga2V5czogJHtrMH1gKTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGVzPShlbGVtZW50cyxmdWxsQ29tcGFyZT11bmRlZmluZWQpPT57XG5jaGVja05vRHVwbGljYXRlcyhlbGVtZW50cyxmdWxsQ29tcGFyZSxhc3NlcnRDaGVja2VyKTtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjigI1fb25jZS5hc3NlcnROb0R1cGxpY2F0ZXMoYXNzZXJ0Tm9EdXBsaWNhdGVzKTtcbmNvbnN0ICAgICAgICBjaGVja0VsZW1lbnRzPShlbGVtZW50cyxjaGVjayk9PntcbmlmKHBhc3NTdHlsZU9mKGVsZW1lbnRzKSE9PSdjb3B5QXJyYXknKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGtleXMgb2YgYSBjb3B5U2V0IG9yIGNvcHlNYXAgbXVzdCBiZSBhIGNvcHlBcnJheTogJHtlbGVtZW50c31gKTtcblxuIH1cbmlmKCFpc1JhbmtTb3J0ZWQoZWxlbWVudHMsY29tcGFyZUFudGlSYW5rKSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBrZXlzIG9mIGEgY29weVNldCBvciBjb3B5TWFwIG11c3QgYmUgc29ydGVkIGluIHJldmVyc2UgcmFuayBvcmRlcjogJHtlbGVtZW50c31gKTtcblxuIH1cbnJldHVybiBjaGVja05vRHVwbGljYXRlcyhlbGVtZW50cyx1bmRlZmluZWQsY2hlY2spO1xuIH07JGjigI1fb25jZS5jaGVja0VsZW1lbnRzKGNoZWNrRWxlbWVudHMpO1xuaGFyZGVuKGNoZWNrRWxlbWVudHMpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0RWxlbWVudHM9KGVsZW1lbnRzKT0+e1xuY2hlY2tFbGVtZW50cyhlbGVtZW50cyxhc3NlcnRDaGVja2VyKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0RWxlbWVudHMoYXNzZXJ0RWxlbWVudHMpO1xuaGFyZGVuKGFzc2VydEVsZW1lbnRzKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBjb2VyY2VUb0VsZW1lbnRzPShlbGVtZW50c0xpc3QpPT57XG5jb25zdCBlbGVtZW50cz1zb3J0QnlSYW5rKGVsZW1lbnRzTGlzdCxjb21wYXJlQW50aVJhbmspO1xuYXNzZXJ0RWxlbWVudHMoZWxlbWVudHMpO1xucmV0dXJuIGVsZW1lbnRzO1xuIH07JGjigI1fb25jZS5jb2VyY2VUb0VsZW1lbnRzKGNvZXJjZVRvRWxlbWVudHMpO1xuaGFyZGVuKGNvZXJjZVRvRWxlbWVudHMpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNldE9mRWxlbWVudHM9KGVsZW1lbnRJdGVyKT0+XG5tYWtlVGFnZ2VkKCdjb3B5U2V0Jyxjb2VyY2VUb0VsZW1lbnRzKGVsZW1lbnRJdGVyKSk7JGjigI1fb25jZS5tYWtlU2V0T2ZFbGVtZW50cyhtYWtlU2V0T2ZFbGVtZW50cyk7XG5oYXJkZW4obWFrZVNldE9mRWxlbWVudHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0Tm9EdXBsaWNhdGVzIjpbImFzc2VydE5vRHVwbGljYXRlcyJdLCJjaGVja0VsZW1lbnRzIjpbImNoZWNrRWxlbWVudHMiXSwiYXNzZXJ0RWxlbWVudHMiOlsiYXNzZXJ0RWxlbWVudHMiXSwiY29lcmNlVG9FbGVtZW50cyI6WyJjb2VyY2VUb0VsZW1lbnRzIl0sIm1ha2VTZXRPZkVsZW1lbnRzIjpbIm1ha2VTZXRPZkVsZW1lbnRzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGwTKG33EgAA9xIAADkAAABAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIiwiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyIsIm1ha2VDb21wYXJlQ29sbGVjdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UmFua1NvcnRlZCxjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxtYWtlSXRlcmF0b3IsbWFrZUFycmF5SXRlcmF0b3IscSxGYWlsOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJhbmtTb3J0ZWRcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaOKAjV9hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjigI1fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjigI1fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjigI1fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaOKAjV9hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRo4oCNX2EgPT4gKHNvcnRCeVJhbmsgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanNcIiwgW1tcIm1ha2VJdGVyYXRvclwiLCBbJGjigI1fYSA9PiAobWFrZUl0ZXJhdG9yID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzXCIsIFtbXCJtYWtlQXJyYXlJdGVyYXRvclwiLCBbJGjigI1fYSA9PiAobWFrZUFycmF5SXRlcmF0b3IgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXM9KGVudHJpZXMscmFua0NvbXBhcmUsZnVsbENvbXBhcmUpPT57XG4vL1xuYXNzZXJ0UmFua1NvcnRlZChlbnRyaWVzLHJhbmtDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09ZW50cmllcztcbmxldCBpPTA7XG5sZXQgc2FtZVJhbmtJdGVyYXRvcjtcbnJldHVybiBtYWtlSXRlcmF0b3IoKCk9PntcbmlmKHNhbWVSYW5rSXRlcmF0b3Ipe1xuY29uc3QgcmVzdWx0PXNhbWVSYW5rSXRlcmF0b3IubmV4dCgpO1xuaWYoIXJlc3VsdC5kb25lKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuc2FtZVJhbmtJdGVyYXRvcj11bmRlZmluZWQ7XG4gfVxuaWYoaTxsZW5ndGgpe1xuY29uc3QgZW50cnk9ZW50cmllc1tpXTtcbi8vXG5sZXQgaj1pKzE7XG53aGlsZShqPGxlbmd0aCYmcmFua0NvbXBhcmUoZW50cnlbMF0sZW50cmllc1tqXVswXSk9PT0wKXtcbmorPTE7XG4gfVxuaWYoaj09PWkrMSl7XG4vL1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTplbnRyeX0pO1xuIH1cbmNvbnN0IHRpZXM9ZW50cmllcy5zbGljZShpLGopO1xuaT1qO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBzb3J0ZWRUaWVzPXNvcnRCeVJhbmsodGllcyxmdWxsQ29tcGFyZSk7XG5mb3IobGV0IGs9MTtrPHNvcnRlZFRpZXMubGVuZ3RoO2srPTEpe1xuLy9cbmNvbnN0W2tleTBdPXNvcnRlZFRpZXNbay0xXTtcbmNvbnN0W2tleTFdPXNvcnRlZFRpZXNba107XG5NYXRoLnNpZ24oZnVsbENvbXBhcmUoa2V5MCxrZXkxKSl8fFxuRmFpbCBgRHVwbGljYXRlIGVudHJ5IGtleTogJHtrZXkwfWA7XG4gfVxuc2FtZVJhbmtJdGVyYXRvcj1tYWtlQXJyYXlJdGVyYXRvcihzb3J0ZWRUaWVzKTtcbnJldHVybiBzYW1lUmFua0l0ZXJhdG9yLm5leHQoKTtcbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfSk7XG4gfTtcbmhhcmRlbihnZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzPShcbmMxLFxuYzIsXG5nZXRFbnRyaWVzLFxuYWJzZW50VmFsdWUpPT5cbntcbmNvbnN0IGUxPWdldEVudHJpZXMoYzEpO1xuY29uc3QgZTI9Z2V0RW50cmllcyhjMik7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5jb25zdCB4PWdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXMoZTEsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbmNvbnN0IHk9Z2VuZXJhdGVGdWxsU29ydGVkRW50cmllcyhlMixjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xuXG4vL1xuLy9cbmxldCB4RG9uZTtcbmxldCB4S2V5O1xubGV0IHhWYWx1ZTtcbmxldCB5RG9uZTtcbmxldCB5S2V5O1xubGV0IHlWYWx1ZTtcbmNvbnN0IG5vbkVudHJ5PVt1bmRlZmluZWQsdW5kZWZpbmVkXTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBtdXN0IG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbmNvbnN0IHJlc3VsdD14VmFsdWU7XG4oe2RvbmU6eERvbmUsdmFsdWU6W3hLZXkseFZhbHVlXT1ub25FbnRyeX09eC5uZXh0KCkpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xubmV4dFgoKTtcbmNvbnN0IG5leHRZPSgpPT57XG4heURvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WSBtdXN0IG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbmNvbnN0IHJlc3VsdD15VmFsdWU7XG4oe2RvbmU6eURvbmUsdmFsdWU6W3lLZXkseVZhbHVlXT1ub25FbnRyeX09eS5uZXh0KCkpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xubmV4dFkoKTtcbnJldHVybiBtYWtlSXRlcmF0b3IoKCk9PntcbmxldCBkb25lPWZhbHNlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZih4RG9uZSYmeURvbmUpe1xuZG9uZT10cnVlO1xudmFsdWU9W3VuZGVmaW5lZCxhYnNlbnRWYWx1ZSxhYnNlbnRWYWx1ZV07XG4gfWVsc2UgaWYoeERvbmUpe1xudmFsdWU9W3lLZXksYWJzZW50VmFsdWUsbmV4dFkoKV07XG4gfWVsc2UgaWYoeURvbmUpe1xudmFsdWU9W3hLZXksbmV4dFgoKSxhYnNlbnRWYWx1ZV07XG4gfWVsc2V7XG4vL1xuLy9cbmNvbnN0IGNvbXA9ZnVsbENvbXBhcmUoeEtleSx5S2V5KTtcbmlmKGNvbXA9PT0wKXtcbnZhbHVlPVt4S2V5LG5leHRYKCksbmV4dFkoKV07XG4gfWVsc2UgaWYoY29tcDwwKXtcbnZhbHVlPVt4S2V5LG5leHRYKCksYWJzZW50VmFsdWVdO1xuIH1lbHNlIGlmKGNvbXA+MCl7XG52YWx1ZT1beUtleSxhYnNlbnRWYWx1ZSxuZXh0WSgpXTtcbiB9ZWxzZXtcbnRocm93IEZhaWwgYFVuZXhwZWN0ZWQga2V5IGNvbXBhcmlzb24gJHtxKGNvbXApfSBmb3IgJHt4S2V5fSB2cyAke3lLZXl9YDtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZSx2YWx1ZX0pO1xuIH0pO1xuIH07JGjigI1fb25jZS5nZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyhnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyk7XG5oYXJkZW4oZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb21wYXJlQ29sbGVjdGlvbj0oZ2V0RW50cmllcyxhYnNlbnRWYWx1ZSxjb21wYXJlVmFsdWVzKT0+XG5oYXJkZW4oKGxlZnQscmlnaHQpPT57XG5jb25zdCBtZXJnZWQ9Z2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMoXG5sZWZ0LFxucmlnaHQsXG5nZXRFbnRyaWVzLFxuYWJzZW50VmFsdWUpO1xuXG5sZXQgbGVmdElzQmlnZ2VyPWZhbHNlO1xubGV0IHJpZ2h0SXNCaWdnZXI9ZmFsc2U7XG5mb3IoY29uc3RbX2tleSxsZWZ0VmFsdWUscmlnaHRWYWx1ZV1vZiBtZXJnZWQpe1xuY29uc3QgY29tcD1jb21wYXJlVmFsdWVzKGxlZnRWYWx1ZSxyaWdodFZhbHVlKTtcbmlmKGNvbXA9PT0wKXtcbi8vXG5jb250aW51ZTtcbiB9ZWxzZSBpZihjb21wPDApe1xuLy9cbnJpZ2h0SXNCaWdnZXI9dHJ1ZTtcbiB9ZWxzZSBpZihjb21wPjApe1xuLy9cbmxlZnRJc0JpZ2dlcj10cnVlO1xuIH1lbHNle1xuTnVtYmVyLmlzTmFOKGNvbXApfHxcbi8vXG5GYWlsIGBVbmV4cGVjdGVkIHZhbHVlIGNvbXBhcmlzb24gJHtxKGNvbXApfSBmb3IgJHtsZWZ0VmFsdWV9IHZzICR7cmlnaHRWYWx1ZX1gO1xucmV0dXJuIE5hTjtcbiB9XG5pZihsZWZ0SXNCaWdnZXImJnJpZ2h0SXNCaWdnZXIpe1xucmV0dXJuIE5hTjtcbiB9XG4gfVxuLy9cbnJldHVybiBsZWZ0SXNCaWdnZXI/MTpyaWdodElzQmlnZ2VyPy0xOjA7XG4gfSk7JGjigI1fb25jZS5tYWtlQ29tcGFyZUNvbGxlY3Rpb24obWFrZUNvbXBhcmVDb2xsZWN0aW9uKTtcbmhhcmRlbihtYWtlQ29tcGFyZUNvbGxlY3Rpb24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMiOlsiZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMiXSwibWFrZUNvbXBhcmVDb2xsZWN0aW9uIjpbIm1ha2VDb21wYXJlQ29sbGVjdGlvbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC+PIcEbBYAAGwWAAA1AAAAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyIsIi4vY29weUJhZy5qcyJdLCJleHBvcnRzIjpbImJhZ0Rpc2pvaW50U3VidHJhY3QiLCJiYWdJbnRlcnNlY3Rpb24iLCJiYWdJc0Rpc2pvaW50IiwiYmFnSXNTdXBlcmJhZyIsImJhZ1VuaW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRSYW5rU29ydGVkLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLHEsRmFpbCxhc3NlcnROb0R1cGxpY2F0ZUtleXMsbWFrZUJhZ09mRW50cmllczskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaOKAjV9hID0+IChhc3NlcnRSYW5rU29ydGVkID0gJGjigI1fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRo4oCNX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRo4oCNX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjigI1fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaOKAjV9hID0+IChzb3J0QnlSYW5rID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCIuL2NvcHlCYWcuanNcIiwgW1tcImFzc2VydE5vRHVwbGljYXRlS2V5c1wiLCBbJGjigI1fYSA9PiAoYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzID0gJGjigI1fYSldXSxbXCJtYWtlQmFnT2ZFbnRyaWVzXCIsIFskaOKAjV9hID0+IChtYWtlQmFnT2ZFbnRyaWVzID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgYmFnV2luZG93UmVzb3J0PShiYWdFbnRyaWVzLHJhbmtDb21wYXJlLGZ1bGxDb21wYXJlKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChiYWdFbnRyaWVzLHJhbmtDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09YmFnRW50cmllcztcbmxldCBpPTA7XG5sZXQgb3B0SW5uZXJJdGVyYXRvcjtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PlxuaGFyZGVuKHtcbm5leHQ6KCk9PntcbmlmKG9wdElubmVySXRlcmF0b3Ipe1xuY29uc3QgcmVzdWx0PW9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuaWYocmVzdWx0LmRvbmUpe1xub3B0SW5uZXJJdGVyYXRvcj11bmRlZmluZWQ7XG4vL1xuIH1lbHNle1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuaWYoaTxsZW5ndGgpe1xuY29uc3QgZW50cnk9YmFnRW50cmllc1tpXTtcbmxldCBqPWkrMTtcbndoaWxlKFxuajxsZW5ndGgmJlxucmFua0NvbXBhcmUoZW50cnlbMF0sYmFnRW50cmllc1tqXVswXSk9PT0wKVxue1xuais9MTtcbiB9XG5pZihqPT09aSsxKXtcbmk9ajtcbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6ZW50cnl9KTtcbiB9XG5jb25zdCBzaW1pbGFyUnVuPWJhZ0VudHJpZXMuc2xpY2UoaSxqKTtcbmk9ajtcbmNvbnN0IHJlc29ydGVkPXNvcnRCeVJhbmsoc2ltaWxhclJ1bixmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG5hc3NlcnROb0R1cGxpY2F0ZUtleXMocmVzb3J0ZWQsZnVsbENvbXBhcmUpO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5vcHRJbm5lckl0ZXJhdG9yPXJlc29ydGVkW1N5bWJvbC5pdGVyYXRvcl0oKTtcbnJldHVybiBvcHRJbm5lckl0ZXJhdG9yLm5leHQoKTtcbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTpbbnVsbCwwbl19KTtcbiB9XG4gfX0pfSk7XG5cblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtZXJnZT0oeGJhZ0VudHJpZXMseWJhZ0VudHJpZXMpPT57XG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbmNvbnN0IHhzPWJhZ1dpbmRvd1Jlc29ydCh4YmFnRW50cmllcyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xuY29uc3QgeXM9YmFnV2luZG93UmVzb3J0KHliYWdFbnRyaWVzLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5yZXR1cm4gaGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICovXG5sZXQgeDtcbmxldCB4YztcbmxldCB4RG9uZTtcbi8qICAgICAgICAgICAgKi9cbmxldCB5O1xubGV0IHljO1xubGV0IHlEb25lO1xuXG5jb25zdCB4aT14c1tTeW1ib2wuaXRlcmF0b3JdKCk7XG5jb25zdCBuZXh0WD0oKT0+e1xuIXhEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFggc2hvdWxkIG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbih7XG5kb25lOnhEb25lLFxudmFsdWU6W3gseGNdfT1cbnhpLm5leHQoKSk7XG4gfTtcbm5leHRYKCk7XG5cbmNvbnN0IHlpPXlzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRZPSgpPT57XG4heURvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WSBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtcbmRvbmU6eURvbmUsXG52YWx1ZTpbeSx5Y119PVxueWkubmV4dCgpKTtcbiB9O1xubmV4dFkoKTtcblxucmV0dXJuIGhhcmRlbih7XG5uZXh0OigpPT57XG4vKiAgICAgICAgICAgICAgICAgICovXG5sZXQgZG9uZT1mYWxzZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZih4RG9uZSYmeURvbmUpe1xuZG9uZT10cnVlO1xuLy9cbnZhbHVlPVtudWxsLDBuLDBuXTtcbiB9ZWxzZSBpZih4RG9uZSl7XG4vL1xudmFsdWU9W3ksMG4seWNdO1xubmV4dFkoKTtcbiB9ZWxzZSBpZih5RG9uZSl7XG4vL1xudmFsdWU9W3gseGMsMG5dO1xubmV4dFgoKTtcbiB9ZWxzZXtcbmNvbnN0IGNvbXA9ZnVsbENvbXBhcmUoeCx5KTtcbmlmKGNvbXA9PT0wKXtcbi8vXG52YWx1ZT1beCx4Yyx5Y107XG5uZXh0WCgpO1xubmV4dFkoKTtcbiB9ZWxzZSBpZihjb21wPDApe1xuLy9cbnZhbHVlPVt4LHhjLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG4vL1xuY29tcD4wfHxGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBjb21wICR7cShjb21wKX1gO1xudmFsdWU9W3ksMG4seWNdO1xubmV4dFkoKTtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZSx2YWx1ZX0pO1xuIH19KTtcblxuIH19KTtcblxuIH07XG5oYXJkZW4obWVyZ2UpO1xuXG4vL1xuLy9cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJJc1N1cGVyYmFnPSh4eWkpPT57XG5mb3IoY29uc3RbX20seGMseWNdb2YgeHlpKXtcbmlmKHhjPHljKXtcbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8vXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlcklzRGlzam9pbnQ9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM+PTFuJiZ5Yz49MW4pe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlclVuaW9uPSh4eWkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5yZXN1bHQucHVzaChbbSx4Yyt5Y10pO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlckludGVyc2VjdGlvbj0oeHlpKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xuY29uc3QgbWM9eGM8PXljP3hjOnljO1xucmVzdWx0LnB1c2goW20sbWNdKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJEaXNqb2ludFN1YnRyYWN0PSh4eWkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5jb25zdCBtYz14Yy15Yztcbm1jPj0wbnx8RmFpbCBgcmlnaHQgZWxlbWVudCAke219IHdhcyBub3QgaW4gbGVmdGA7XG5pZihtYz49MW4pe1xuLy9cbnJlc3VsdC5wdXNoKFttLG1jXSk7XG4gfVxuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuY29uc3QgbWVyZ2VpZnk9KGJhZ0l0ZXJPcCk9Pih4YmFnRW50cmllcyx5YmFnRW50cmllcyk9PlxuYmFnSXRlck9wKG1lcmdlKHhiYWdFbnRyaWVzLHliYWdFbnRyaWVzKSk7XG5cbmNvbnN0IGJhZ0VudHJpZXNJc1N1cGVyYmFnPW1lcmdlaWZ5KGJhZ0l0ZXJJc1N1cGVyYmFnKTtcbmNvbnN0IGJhZ0VudHJpZXNJc0Rpc2pvaW50PW1lcmdlaWZ5KGJhZ0l0ZXJJc0Rpc2pvaW50KTtcbmNvbnN0IGJhZ0VudHJpZXNVbmlvbj1tZXJnZWlmeShiYWdJdGVyVW5pb24pO1xuY29uc3QgYmFnRW50cmllc0ludGVyc2VjdGlvbj1tZXJnZWlmeShiYWdJdGVySW50ZXJzZWN0aW9uKTtcbmNvbnN0IGJhZ0VudHJpZXNEaXNqb2ludFN1YnRyYWN0PW1lcmdlaWZ5KGJhZ0l0ZXJEaXNqb2ludFN1YnRyYWN0KTtcblxuY29uc3QgcmF3QmFnaWZ5PShiYWdFbnRyaWVzT3ApPT4oeGJhZyx5YmFnKT0+XG5iYWdFbnRyaWVzT3AoeGJhZy5wYXlsb2FkLHliYWcucGF5bG9hZCk7XG5cbmNvbnN0IGJhZ2lmeT0oYmFnRW50cmllc09wKT0+KHhiYWcseWJhZyk9PlxubWFrZUJhZ09mRW50cmllcyhiYWdFbnRyaWVzT3AoeGJhZy5wYXlsb2FkLHliYWcucGF5bG9hZCkpO1xuXG5jb25zdCAgICAgICAgYmFnSXNTdXBlcmJhZz1yYXdCYWdpZnkoYmFnRW50cmllc0lzU3VwZXJiYWcpOyRo4oCNX29uY2UuYmFnSXNTdXBlcmJhZyhiYWdJc1N1cGVyYmFnKTtcbmNvbnN0ICAgICAgICBiYWdJc0Rpc2pvaW50PXJhd0JhZ2lmeShiYWdFbnRyaWVzSXNEaXNqb2ludCk7JGjigI1fb25jZS5iYWdJc0Rpc2pvaW50KGJhZ0lzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIGJhZ1VuaW9uPWJhZ2lmeShiYWdFbnRyaWVzVW5pb24pOyRo4oCNX29uY2UuYmFnVW5pb24oYmFnVW5pb24pO1xuY29uc3QgICAgICAgIGJhZ0ludGVyc2VjdGlvbj1iYWdpZnkoYmFnRW50cmllc0ludGVyc2VjdGlvbik7JGjigI1fb25jZS5iYWdJbnRlcnNlY3Rpb24oYmFnSW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBiYWdEaXNqb2ludFN1YnRyYWN0PWJhZ2lmeShiYWdFbnRyaWVzRGlzam9pbnRTdWJ0cmFjdCk7JGjigI1fb25jZS5iYWdEaXNqb2ludFN1YnRyYWN0KGJhZ0Rpc2pvaW50U3VidHJhY3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYmFnSXNTdXBlcmJhZyI6WyJiYWdJc1N1cGVyYmFnIl0sImJhZ0lzRGlzam9pbnQiOlsiYmFnSXNEaXNqb2ludCJdLCJiYWdVbmlvbiI6WyJiYWdVbmlvbiJdLCJiYWdJbnRlcnNlY3Rpb24iOlsiYmFnSW50ZXJzZWN0aW9uIl0sImJhZ0Rpc2pvaW50U3VidHJhY3QiOlsiYmFnRGlzam9pbnRTdWJ0cmFjdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADSDQPJrRwAAK0cAAA1AAAAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyIsIi4vY29weVNldC5qcyJdLCJleHBvcnRzIjpbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNVbmlvbiIsInNldERpc2pvaW50U3VidHJhY3QiLCJzZXREaXNqb2ludFVuaW9uIiwic2V0SW50ZXJzZWN0aW9uIiwic2V0SXNEaXNqb2ludCIsInNldElzU3VwZXJzZXQiLCJzZXRVbmlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UmFua1NvcnRlZCxjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxxLEZhaWwsYXNzZXJ0Tm9EdXBsaWNhdGVzLG1ha2VTZXRPZkVsZW1lbnRzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJhbmtTb3J0ZWRcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaOKAjV9hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjigI1fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjigI1fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjigI1fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaOKAjV9hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRo4oCNX2EgPT4gKHNvcnRCeVJhbmsgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIi4vY29weVNldC5qc1wiLCBbW1wiYXNzZXJ0Tm9EdXBsaWNhdGVzXCIsIFskaOKAjV9hID0+IChhc3NlcnROb0R1cGxpY2F0ZXMgPSAkaOKAjV9hKV1dLFtcIm1ha2VTZXRPZkVsZW1lbnRzXCIsIFskaOKAjV9hID0+IChtYWtlU2V0T2ZFbGVtZW50cyA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgd2luZG93UmVzb3J0PShlbGVtZW50cyxyYW5rQ29tcGFyZSxmdWxsQ29tcGFyZSk9PntcbmFzc2VydFJhbmtTb3J0ZWQoZWxlbWVudHMscmFua0NvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1lbGVtZW50cztcbmxldCBpPTA7XG5sZXQgb3B0SW5uZXJJdGVyYXRvcjtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PlxuaGFyZGVuKHtcbm5leHQ6KCk9PntcbmlmKG9wdElubmVySXRlcmF0b3Ipe1xuY29uc3QgcmVzdWx0PW9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuaWYocmVzdWx0LmRvbmUpe1xub3B0SW5uZXJJdGVyYXRvcj11bmRlZmluZWQ7XG4vL1xuIH1lbHNle1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuaWYoaTxsZW5ndGgpe1xuY29uc3QgdmFsdWU9ZWxlbWVudHNbaV07XG5sZXQgaj1pKzE7XG53aGlsZShqPGxlbmd0aCYmcmFua0NvbXBhcmUodmFsdWUsZWxlbWVudHNbal0pPT09MCl7XG5qKz0xO1xuIH1cbmlmKGo9PT1pKzEpe1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH1cbmNvbnN0IHNpbWlsYXJSdW49ZWxlbWVudHMuc2xpY2UoaSxqKTtcbmk9ajtcbmNvbnN0IHJlc29ydGVkPXNvcnRCeVJhbmsoc2ltaWxhclJ1bixmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG5hc3NlcnROb0R1cGxpY2F0ZXMocmVzb3J0ZWQsZnVsbENvbXBhcmUpO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5vcHRJbm5lckl0ZXJhdG9yPXJlc29ydGVkW1N5bWJvbC5pdGVyYXRvcl0oKTtcbnJldHVybiBvcHRJbm5lckl0ZXJhdG9yLm5leHQoKTtcbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTpudWxsfSk7XG4gfVxuIH19KX0pO1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWVyZ2U9KHhlbGVtZW50cyx5ZWxlbWVudHMpPT57XG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbmNvbnN0IHhzPXdpbmRvd1Jlc29ydCh4ZWxlbWVudHMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbmNvbnN0IHlzPXdpbmRvd1Jlc29ydCh5ZWxlbWVudHMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9Pntcbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgKi9cbmxldCB4O1xubGV0IHhEb25lO1xuLyogICAgICAgICAgICAqL1xubGV0IHk7XG5sZXQgeURvbmU7XG5cbmNvbnN0IHhpPXhzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtkb25lOnhEb25lLHZhbHVlOnh9PXhpLm5leHQoKSk7XG4gfTtcbm5leHRYKCk7XG5cbmNvbnN0IHlpPXlzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRZPSgpPT57XG4heURvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WSBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtkb25lOnlEb25lLHZhbHVlOnl9PXlpLm5leHQoKSk7XG4gfTtcbm5leHRZKCk7XG5cbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IGRvbmU9ZmFsc2U7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoeERvbmUmJnlEb25lKXtcbmRvbmU9dHJ1ZTtcbi8vXG52YWx1ZT1bbnVsbCwwbiwwbl07XG4gfWVsc2UgaWYoeERvbmUpe1xuLy9cbnZhbHVlPVt5LDBuLDFuXTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoeURvbmUpe1xuLy9cbnZhbHVlPVt4LDFuLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG5jb25zdCBjb21wPWZ1bGxDb21wYXJlKHgseSk7XG5pZihjb21wPT09MCl7XG4vL1xudmFsdWU9W3gsMW4sMW5dO1xubmV4dFgoKTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoY29tcDwwKXtcbi8vXG52YWx1ZT1beCwxbiwwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuLy9cbmNvbXA+MHx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY29tcCAke3EoY29tcCl9YDtcbnZhbHVlPVt5LDBuLDFuXTtcbm5leHRZKCk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2RvbmUsdmFsdWV9KTtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9O1xuaGFyZGVuKG1lcmdlKTtcblxuY29uc3QgaXRlcklzU3VwZXJzZXQ9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4YyxfeWNdb2YgeHlpKXtcbmlmKHhjPT09MG4pe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlcklzRGlzam9pbnQ9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM+PTFuJiZ5Yz49MW4pe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckNvbXBhcmU9KHh5aSk9PntcbmxldCBsb25lWT1mYWxzZTtcbmxldCBsb25lWD1mYWxzZTtcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM9PT0wbil7XG4vL1xubG9uZVk9dHJ1ZTtcbiB9XG5pZih5Yz09PTBuKXtcbi8vXG5sb25lWD10cnVlO1xuIH1cbmlmKGxvbmVYJiZsb25lWSl7XG5yZXR1cm4gTmFOO1xuIH1cbiB9XG5pZihsb25lWCl7XG5yZXR1cm4gMTtcbiB9ZWxzZSBpZihsb25lWSl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbiFsb25lWCYmIWxvbmVZfHxcbkZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGxvbmUgcGFpciAke3EoW2xvbmVYLGxvbmVZXSl9YDtcbnJldHVybiAwO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyVW5pb249KHh5aSk9PntcbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MG4pe1xucmVzdWx0LnB1c2gobSk7XG4gfWVsc2V7XG55Yz49MG58fEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGNvdW50ICR7cSh5Yyl9YDtcbi8vXG4vL1xucmVzdWx0LnB1c2gobSk7XG4gfVxuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckRpc2pvaW50VW5pb249KHh5aSk9PntcbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG54Yz09PTBufHx5Yz09PTBufHxGYWlsIGBTZXRzIG11c3Qgbm90IGhhdmUgY29tbW9uIGVsZW1lbnRzOiAke219YDtcbmlmKHhjPj0xbil7XG5yZXN1bHQucHVzaChtKTtcbiB9ZWxzZXtcbnljPj0xbnx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY291bnQgJHtxKHljKX1gO1xucmVzdWx0LnB1c2gobSk7XG4gfVxuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckludGVyc2VjdGlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0xbiYmeWM+PTFuKXtcbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyRGlzam9pbnRTdWJ0cmFjdD0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnhjPj0xbnx8RmFpbCBgcmlnaHQgZWxlbWVudCAke219IHdhcyBub3QgaW4gbGVmdGA7XG5pZih5Yz09PTBuKXtcbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG5jb25zdCBtZXJnZWlmeT0oaXRlck9wKT0+KHhlbGVtZW50cyx5ZWxlbWVudHMpPT5cbml0ZXJPcChtZXJnZSh4ZWxlbWVudHMseWVsZW1lbnRzKSk7XG5cbmNvbnN0ICAgICAgICBlbGVtZW50c0lzU3VwZXJzZXQ9bWVyZ2VpZnkoaXRlcklzU3VwZXJzZXQpOyRo4oCNX29uY2UuZWxlbWVudHNJc1N1cGVyc2V0KGVsZW1lbnRzSXNTdXBlcnNldCk7XG5jb25zdCAgICAgICAgZWxlbWVudHNJc0Rpc2pvaW50PW1lcmdlaWZ5KGl0ZXJJc0Rpc2pvaW50KTskaOKAjV9vbmNlLmVsZW1lbnRzSXNEaXNqb2ludChlbGVtZW50c0lzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzQ29tcGFyZT1tZXJnZWlmeShpdGVyQ29tcGFyZSk7JGjigI1fb25jZS5lbGVtZW50c0NvbXBhcmUoZWxlbWVudHNDb21wYXJlKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c1VuaW9uPW1lcmdlaWZ5KGl0ZXJVbmlvbik7JGjigI1fb25jZS5lbGVtZW50c1VuaW9uKGVsZW1lbnRzVW5pb24pO1xuY29uc3QgICAgICAgIGVsZW1lbnRzRGlzam9pbnRVbmlvbj1tZXJnZWlmeShpdGVyRGlzam9pbnRVbmlvbik7JGjigI1fb25jZS5lbGVtZW50c0Rpc2pvaW50VW5pb24oZWxlbWVudHNEaXNqb2ludFVuaW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0ludGVyc2VjdGlvbj1tZXJnZWlmeShpdGVySW50ZXJzZWN0aW9uKTskaOKAjV9vbmNlLmVsZW1lbnRzSW50ZXJzZWN0aW9uKGVsZW1lbnRzSW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0Rpc2pvaW50U3VidHJhY3Q9bWVyZ2VpZnkoaXRlckRpc2pvaW50U3VidHJhY3QpOyRo4oCNX29uY2UuZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0KGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCk7XG5cbmNvbnN0IHJhd1NldGlmeT0oZWxlbWVudHNPcCk9Pih4c2V0LHlzZXQpPT5cbmVsZW1lbnRzT3AoeHNldC5wYXlsb2FkLHlzZXQucGF5bG9hZCk7XG5cbmNvbnN0IHNldGlmeT0oZWxlbWVudHNPcCk9Pih4c2V0LHlzZXQpPT5cbm1ha2VTZXRPZkVsZW1lbnRzKGVsZW1lbnRzT3AoeHNldC5wYXlsb2FkLHlzZXQucGF5bG9hZCkpO1xuXG5jb25zdCAgICAgICAgc2V0SXNTdXBlcnNldD1yYXdTZXRpZnkoZWxlbWVudHNJc1N1cGVyc2V0KTskaOKAjV9vbmNlLnNldElzU3VwZXJzZXQoc2V0SXNTdXBlcnNldCk7XG5jb25zdCAgICAgICAgc2V0SXNEaXNqb2ludD1yYXdTZXRpZnkoZWxlbWVudHNJc0Rpc2pvaW50KTskaOKAjV9vbmNlLnNldElzRGlzam9pbnQoc2V0SXNEaXNqb2ludCk7XG5jb25zdCAgICAgICAgc2V0VW5pb249c2V0aWZ5KGVsZW1lbnRzVW5pb24pOyRo4oCNX29uY2Uuc2V0VW5pb24oc2V0VW5pb24pO1xuY29uc3QgICAgICAgIHNldERpc2pvaW50VW5pb249c2V0aWZ5KGVsZW1lbnRzRGlzam9pbnRVbmlvbik7JGjigI1fb25jZS5zZXREaXNqb2ludFVuaW9uKHNldERpc2pvaW50VW5pb24pO1xuY29uc3QgICAgICAgIHNldEludGVyc2VjdGlvbj1zZXRpZnkoZWxlbWVudHNJbnRlcnNlY3Rpb24pOyRo4oCNX29uY2Uuc2V0SW50ZXJzZWN0aW9uKHNldEludGVyc2VjdGlvbik7XG5jb25zdCAgICAgICAgc2V0RGlzam9pbnRTdWJ0cmFjdD1zZXRpZnkoZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0KTskaOKAjV9vbmNlLnNldERpc2pvaW50U3VidHJhY3Qoc2V0RGlzam9pbnRTdWJ0cmFjdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJlbGVtZW50c0lzU3VwZXJzZXQiOlsiZWxlbWVudHNJc1N1cGVyc2V0Il0sImVsZW1lbnRzSXNEaXNqb2ludCI6WyJlbGVtZW50c0lzRGlzam9pbnQiXSwiZWxlbWVudHNDb21wYXJlIjpbImVsZW1lbnRzQ29tcGFyZSJdLCJlbGVtZW50c1VuaW9uIjpbImVsZW1lbnRzVW5pb24iXSwiZWxlbWVudHNEaXNqb2ludFVuaW9uIjpbImVsZW1lbnRzRGlzam9pbnRVbmlvbiJdLCJlbGVtZW50c0ludGVyc2VjdGlvbiI6WyJlbGVtZW50c0ludGVyc2VjdGlvbiJdLCJlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QiOlsiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0Il0sInNldElzU3VwZXJzZXQiOlsic2V0SXNTdXBlcnNldCJdLCJzZXRJc0Rpc2pvaW50IjpbInNldElzRGlzam9pbnQiXSwic2V0VW5pb24iOlsic2V0VW5pb24iXSwic2V0RGlzam9pbnRVbmlvbiI6WyJzZXREaXNqb2ludFVuaW9uIl0sInNldEludGVyc2VjdGlvbiI6WyJzZXRJbnRlcnNlY3Rpb24iXSwic2V0RGlzam9pbnRTdWJ0cmFjdCI6WyJzZXREaXNqb2ludFN1YnRyYWN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALG3kDUWGQAAFhkAADYAAABAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCIuL3BhdHRlcm5NYXRjaGVycy5qcyIsIi4uL2tleXMvY2hlY2tLZXkuanMiXSwiZXhwb3J0cyI6WyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCIsImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCIsImdldEludGVyZmFjZU1ldGhvZEtleXMiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG9iamVjdE1hcCxBcmdHdWFyZExpc3RTaGFwZSxBd2FpdEFyZ0d1YXJkU2hhcGUsSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUsSW50ZXJmYWNlR3VhcmRTaGFwZSxNLE1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLE1ldGhvZEd1YXJkU2hhcGUsUmF3R3VhcmRTaGFwZSxTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxTeW5jVmFsdWVHdWFyZFNoYXBlLGFzc2VydEF3YWl0QXJnR3VhcmQsbWF0Y2hlcyxtdXN0TWF0Y2gsZ2V0Q29weU1hcEtleXMsbWFrZUNvcHlNYXA7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjigI1fYSA9PiAob2JqZWN0TWFwID0gJGjigI1fYSldXV1dLFtcIi4vcGF0dGVybk1hdGNoZXJzLmpzXCIsIFtbXCJBcmdHdWFyZExpc3RTaGFwZVwiLCBbJGjigI1fYSA9PiAoQXJnR3VhcmRMaXN0U2hhcGUgPSAkaOKAjV9hKV1dLFtcIkF3YWl0QXJnR3VhcmRTaGFwZVwiLCBbJGjigI1fYSA9PiAoQXdhaXRBcmdHdWFyZFNoYXBlID0gJGjigI1fYSldXSxbXCJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZVwiLCBbJGjigI1fYSA9PiAoSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUgPSAkaOKAjV9hKV1dLFtcIkludGVyZmFjZUd1YXJkU2hhcGVcIiwgWyRo4oCNX2EgPT4gKEludGVyZmFjZUd1YXJkU2hhcGUgPSAkaOKAjV9hKV1dLFtcIk1cIiwgWyRo4oCNX2EgPT4gKE0gPSAkaOKAjV9hKV1dLFtcIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlXCIsIFskaOKAjV9hID0+IChNZXRob2RHdWFyZFBheWxvYWRTaGFwZSA9ICRo4oCNX2EpXV0sW1wiTWV0aG9kR3VhcmRTaGFwZVwiLCBbJGjigI1fYSA9PiAoTWV0aG9kR3VhcmRTaGFwZSA9ICRo4oCNX2EpXV0sW1wiUmF3R3VhcmRTaGFwZVwiLCBbJGjigI1fYSA9PiAoUmF3R3VhcmRTaGFwZSA9ICRo4oCNX2EpXV0sW1wiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGVcIiwgWyRo4oCNX2EgPT4gKFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlID0gJGjigI1fYSldXSxbXCJTeW5jVmFsdWVHdWFyZFNoYXBlXCIsIFskaOKAjV9hID0+IChTeW5jVmFsdWVHdWFyZFNoYXBlID0gJGjigI1fYSldXSxbXCJhc3NlcnRBd2FpdEFyZ0d1YXJkXCIsIFskaOKAjV9hID0+IChhc3NlcnRBd2FpdEFyZ0d1YXJkID0gJGjigI1fYSldXSxbXCJtYXRjaGVzXCIsIFskaOKAjV9hID0+IChtYXRjaGVzID0gJGjigI1fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRo4oCNX2EgPT4gKG11c3RNYXRjaCA9ICRo4oCNX2EpXV1dXSxbXCIuLi9rZXlzL2NoZWNrS2V5LmpzXCIsIFtbXCJnZXRDb3B5TWFwS2V5c1wiLCBbJGjigI1fYSA9PiAoZ2V0Q29weU1hcEtleXMgPSAkaOKAjV9hKV1dLFtcIm1ha2VDb3B5TWFwXCIsIFskaOKAjV9hID0+IChtYWtlQ29weU1hcCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGU9aGFyZGVuKHtcbmtsYXNzOidhd2FpdEFyZycsXG5hcmdHdWFyZDpNLnBhdHRlcm4oKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZD0oYXdhaXRBcmdHdWFyZCk9PntcbmlmKG1hdGNoZXMoYXdhaXRBcmdHdWFyZCxMZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGUpKXtcbi8vXG5jb25zdHtrbGFzczpfLC4uLnBheWxvYWR9PWF3YWl0QXJnR3VhcmQ7XG4vL1xucmV0dXJuIHBheWxvYWQ7XG4gfVxuYXNzZXJ0QXdhaXRBcmdHdWFyZChhd2FpdEFyZ0d1YXJkKTtcbnJldHVybiBhd2FpdEFyZ0d1YXJkLnBheWxvYWQ7XG4gfTskaOKAjV9vbmNlLmdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKTtcbmhhcmRlbihnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeVN5bmNNZXRob2RHdWFyZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5rbGFzczonbWV0aG9kR3VhcmQnLFxuY2FsbEtpbmQ6J3N5bmMnLFxuYXJnR3VhcmRzOlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlLFxucmV0dXJuR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0sXG5cbntcbm9wdGlvbmFsQXJnR3VhcmRzOlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlLFxucmVzdEFyZ0d1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUFyZ0d1YXJkU2hhcGU9TS5vcihcblJhd0d1YXJkU2hhcGUsXG5Bd2FpdEFyZ0d1YXJkU2hhcGUsXG5MZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGUsXG5NLnBhdHRlcm4oKSk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUFyZ0d1YXJkTGlzdFNoYXBlPU0uYXJyYXlPZihMZWdhY3lBcmdHdWFyZFNoYXBlKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXN5bmNNZXRob2RHdWFyZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5rbGFzczonbWV0aG9kR3VhcmQnLFxuY2FsbEtpbmQ6J2FzeW5jJyxcbmFyZ0d1YXJkczpMZWdhY3lBcmdHdWFyZExpc3RTaGFwZSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9LFxuXG57XG5vcHRpb25hbEFyZ0d1YXJkczpBcmdHdWFyZExpc3RTaGFwZSxcbnJlc3RBcmdHdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSk7XG5cblxuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lNZXRob2RHdWFyZFNoYXBlPU0ub3IoXG5MZWdhY3lTeW5jTWV0aG9kR3VhcmRTaGFwZSxcbkxlZ2FjeUFzeW5jTWV0aG9kR3VhcmRTaGFwZSk7XG5cblxuY29uc3QgYWRhcHRMZWdhY3lBcmdHdWFyZD0oYXJnR3VhcmQpPT5cbm1hdGNoZXMoYXJnR3VhcmQsTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlKT9cbk0uYXdhaXQoZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQoYXJnR3VhcmQpLmFyZ0d1YXJkKTpcbmFyZ0d1YXJkO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE1ldGhvZEd1YXJkUGF5bG9hZD0obWV0aG9kR3VhcmQpPT57XG5pZihtYXRjaGVzKG1ldGhvZEd1YXJkLE1ldGhvZEd1YXJkU2hhcGUpKXtcbnJldHVybiBtZXRob2RHdWFyZC5wYXlsb2FkO1xuIH1cbm11c3RNYXRjaChtZXRob2RHdWFyZCxMZWdhY3lNZXRob2RHdWFyZFNoYXBlLCdsZWdhY3lNZXRob2RHdWFyZCcpO1xuY29uc3R7XG4vL1xua2xhc3M6Xyxcbi8vXG5jYWxsS2luZCxcbi8vXG5yZXR1cm5HdWFyZCxcbi8vXG5yZXN0QXJnR3VhcmR9PVxubWV0aG9kR3VhcmQ7XG5sZXR7XG4vL1xuYXJnR3VhcmRzLFxuLy9cbm9wdGlvbmFsQXJnR3VhcmRzfT1cbm1ldGhvZEd1YXJkO1xuaWYoY2FsbEtpbmQ9PT0nYXN5bmMnKXtcbmFyZ0d1YXJkcz1hcmdHdWFyZHMubWFwKGFkYXB0TGVnYWN5QXJnR3VhcmQpO1xub3B0aW9uYWxBcmdHdWFyZHM9XG5vcHRpb25hbEFyZ0d1YXJkcyYmb3B0aW9uYWxBcmdHdWFyZHMubWFwKGFkYXB0TGVnYWN5QXJnR3VhcmQpO1xuIH1cbmNvbnN0IHBheWxvYWQ9aGFyZGVuKHtcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yZXN0QXJnR3VhcmQsXG5yZXR1cm5HdWFyZH0pO1xuXG4vL1xubXVzdE1hdGNoKHBheWxvYWQsTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUsJ2ludGVybmFsTWV0aG9kR3VhcmRBZGFwdG9yJyk7XG5yZXR1cm4gcGF5bG9hZDtcbiB9OyRo4oCNX29uY2UuZ2V0TWV0aG9kR3VhcmRQYXlsb2FkKGdldE1ldGhvZEd1YXJkUGF5bG9hZCk7XG5oYXJkZW4oZ2V0TWV0aG9kR3VhcmRQYXlsb2FkKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5SW50ZXJmYWNlR3VhcmRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xua2xhc3M6J0ludGVyZmFjZScsXG5pbnRlcmZhY2VOYW1lOk0uc3RyaW5nKCksXG5tZXRob2RHdWFyZHM6TS5yZWNvcmRPZihcbk0uc3RyaW5nKCksXG5NLm9yKE1ldGhvZEd1YXJkU2hhcGUsTGVnYWN5TWV0aG9kR3VhcmRTaGFwZSkpfSxcblxuXG57XG5kZWZhdWx0R3VhcmRzOk0ub3IoTS51bmRlZmluZWQoKSwncGFzc2FibGUnLCdyYXcnKSxcbnNsb3BweTpNLmJvb2xlYW4oKSxcbi8vXG4vL1xuLy9cbnN5bWJvbE1ldGhvZEd1YXJkczpNLm1hcE9mKE0uc3ltYm9sKCksTWV0aG9kR3VhcmRTaGFwZSl9KTtcblxuXG5cbmNvbnN0IGFkYXB0TWV0aG9kR3VhcmQ9KG1ldGhvZEd1YXJkKT0+e1xuaWYobWF0Y2hlcyhtZXRob2RHdWFyZCxMZWdhY3lNZXRob2RHdWFyZFNoYXBlKSl7XG5jb25zdHtcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHM9W10sXG5yZXN0QXJnR3VhcmQ9TS5hbnkoKSxcbnJldHVybkd1YXJkfT1cbmdldE1ldGhvZEd1YXJkUGF5bG9hZChtZXRob2RHdWFyZCk7XG5jb25zdCBtQ2FsbD1jYWxsS2luZD09PSdzeW5jJz9NLmNhbGw6TS5jYWxsV2hlbjtcbnJldHVybiBtQ2FsbCguLi5hcmdHdWFyZHMpLlxub3B0aW9uYWwoLi4ub3B0aW9uYWxBcmdHdWFyZHMpLlxucmVzdChyZXN0QXJnR3VhcmQpLlxucmV0dXJucyhyZXR1cm5HdWFyZCk7XG4gfVxucmV0dXJuIG1ldGhvZEd1YXJkO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQ9KGludGVyZmFjZUd1YXJkKT0+e1xuaWYobWF0Y2hlcyhpbnRlcmZhY2VHdWFyZCxJbnRlcmZhY2VHdWFyZFNoYXBlKSl7XG5yZXR1cm4gaW50ZXJmYWNlR3VhcmQucGF5bG9hZDtcbiB9XG5tdXN0TWF0Y2goaW50ZXJmYWNlR3VhcmQsTGVnYWN5SW50ZXJmYWNlR3VhcmRTaGFwZSwnbGVnYWN5SW50ZXJmYWNlR3VhcmQnKTtcbi8vXG4vL1xubGV0e2tsYXNzOl8saW50ZXJmYWNlTmFtZSxtZXRob2RHdWFyZHMsLi4ucmVzdH09aW50ZXJmYWNlR3VhcmQ7XG5tZXRob2RHdWFyZHM9b2JqZWN0TWFwKG1ldGhvZEd1YXJkcyxhZGFwdE1ldGhvZEd1YXJkKTtcbmNvbnN0IHBheWxvYWQ9aGFyZGVuKHtcbmludGVyZmFjZU5hbWUsXG5tZXRob2RHdWFyZHMsXG4uLi5yZXN0fSk7XG5cbm11c3RNYXRjaChcbnBheWxvYWQsXG5JbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSxcbidpbnRlcm5hbEludGVyZmFjZUd1YXJkQWRhcHRvcicpO1xuXG5yZXR1cm4gcGF5bG9hZDtcbiB9OyRo4oCNX29uY2UuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCk7XG5oYXJkZW4oZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKTtcblxuY29uc3QgZW1wdHlDb3B5TWFwPW1ha2VDb3B5TWFwKFtdKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbnRlcmZhY2VNZXRob2RLZXlzPShpbnRlcmZhY2VHdWFyZCk9PntcbmNvbnN0e21ldGhvZEd1YXJkcyxzeW1ib2xNZXRob2RHdWFyZHM9ZW1wdHlDb3B5TWFwfT1cbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChpbnRlcmZhY2VHdWFyZCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oW1xuLi4uUmVmbGVjdC5vd25LZXlzKG1ldGhvZEd1YXJkcyksXG4uLi5nZXRDb3B5TWFwS2V5cyhzeW1ib2xNZXRob2RHdWFyZHMpXSk7XG5cbiB9OyRo4oCNX29uY2UuZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyhnZXRJbnRlcmZhY2VNZXRob2RLZXlzKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VNZXRob2RLZXlzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIjpbImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIl0sImdldE1ldGhvZEd1YXJkUGF5bG9hZCI6WyJnZXRNZXRob2RHdWFyZFBheWxvYWQiXSwiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIjpbImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCJdLCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIjpbImdldEludGVyZmFjZU1ldGhvZEtleXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAwGGizzOuAAAzrgAANQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyIsIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIsIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIiwiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyIsIkBlbmRvL2Vycm9ycyIsIi4uL2tleXMvY29tcGFyZUtleXMuanMiLCIuLi9rZXlzL2NoZWNrS2V5LmpzIiwiLi4va2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyJdLCJleHBvcnRzIjpbIkFyZ0d1YXJkTGlzdFNoYXBlIiwiQXdhaXRBcmdHdWFyZFNoYXBlIiwiSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUiLCJJbnRlcmZhY2VHdWFyZFNoYXBlIiwiTSIsIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIiwiTWV0aG9kR3VhcmRTaGFwZSIsIlJhd0d1YXJkU2hhcGUiLCJTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSIsIlN5bmNWYWx1ZUd1YXJkU2hhcGUiLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIiwiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiLCJhc3NlcnRNZXRob2RHdWFyZCIsImFzc2VydFBhdHRlcm4iLCJhc3NlcnRSYXdHdWFyZCIsImNoZWNrTWF0Y2hlcyIsImRlZmF1bHRMaW1pdHMiLCJnZXRSYW5rQ292ZXIiLCJpc0F3YWl0QXJnR3VhcmQiLCJpc1BhdHRlcm4iLCJpc1Jhd0d1YXJkIiwia2luZE9mIiwibWF0Y2hlcyIsIm11c3RNYXRjaCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixGYXIsZ2V0VGFnLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsaGFzT3duUHJvcGVydHlPZixuYW1lRm9yUGFzc2FibGVTeW1ib2wsY29tcGFyZVJhbmssZ2V0UGFzc1N0eWxlQ292ZXIsaW50ZXJzZWN0UmFua0NvdmVycyx1bmlvblJhbmtDb3ZlcnMscmVjb3JkTmFtZXMscmVjb3JkVmFsdWVzLGlkZW50Q2hlY2tlcixhcHBseUxhYmVsaW5nRXJyb3IsZnJvbVVuaXF1ZUVudHJpZXMsbGlzdERpZmZlcmVuY2UscSxiLFgsRmFpbCxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcixrZXlFUSxrZXlHVCxrZXlHVEUsa2V5TFQsa2V5TFRFLGFzc2VydEtleSxjaGVja0tleSxpc0tleSxjaGVja1NjYWxhcktleSxjaGVja0NvcHlTZXQsY2hlY2tDb3B5TWFwLGNvcHlNYXBLZXlTZXQsY2hlY2tDb3B5QmFnLGdldENvcHlNYXBFbnRyeUFycmF5LG1ha2VDb3B5TWFwLGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaOKAjV9hKV1dLFtcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXSxbXCJnZXRUYWdcIiwgWyRo4oCNX2EgPT4gKGdldFRhZyA9ICRo4oCNX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjigI1fYSA9PiAobWFrZVRhZ2dlZCA9ICRo4oCNX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaOKAjV9hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjigI1fYSldXSxbXCJuYW1lRm9yUGFzc2FibGVTeW1ib2xcIiwgWyRo4oCNX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRo4oCNX2EpXV0sW1wiY29tcGFyZVJhbmtcIiwgWyRo4oCNX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjigI1fYSldXSxbXCJnZXRQYXNzU3R5bGVDb3ZlclwiLCBbJGjigI1fYSA9PiAoZ2V0UGFzc1N0eWxlQ292ZXIgPSAkaOKAjV9hKV1dLFtcImludGVyc2VjdFJhbmtDb3ZlcnNcIiwgWyRo4oCNX2EgPT4gKGludGVyc2VjdFJhbmtDb3ZlcnMgPSAkaOKAjV9hKV1dLFtcInVuaW9uUmFua0NvdmVyc1wiLCBbJGjigI1fYSA9PiAodW5pb25SYW5rQ292ZXJzID0gJGjigI1fYSldXSxbXCJyZWNvcmROYW1lc1wiLCBbJGjigI1fYSA9PiAocmVjb3JkTmFtZXMgPSAkaOKAjV9hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjigI1fYSA9PiAocmVjb3JkVmFsdWVzID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzXCIsIFtbXCJpZGVudENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGlkZW50Q2hlY2tlciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanNcIiwgW1tcImFwcGx5TGFiZWxpbmdFcnJvclwiLCBbJGjigI1fYSA9PiAoYXBwbHlMYWJlbGluZ0Vycm9yID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzXCIsIFtbXCJmcm9tVW5pcXVlRW50cmllc1wiLCBbJGjigI1fYSA9PiAoZnJvbVVuaXF1ZUVudHJpZXMgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qc1wiLCBbW1wibGlzdERpZmZlcmVuY2VcIiwgWyRo4oCNX2EgPT4gKGxpc3REaWZmZXJlbmNlID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiYlwiLCBbJGjigI1fYSA9PiAoYiA9ICRo4oCNX2EpXV0sW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaOKAjV9hID0+IChtYWtlRXJyb3IgPSAkaOKAjV9hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRo4oCNX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaOKAjV9hKV1dXV0sW1wiLi4va2V5cy9jb21wYXJlS2V5cy5qc1wiLCBbW1wia2V5RVFcIiwgWyRo4oCNX2EgPT4gKGtleUVRID0gJGjigI1fYSldXSxbXCJrZXlHVFwiLCBbJGjigI1fYSA9PiAoa2V5R1QgPSAkaOKAjV9hKV1dLFtcImtleUdURVwiLCBbJGjigI1fYSA9PiAoa2V5R1RFID0gJGjigI1fYSldXSxbXCJrZXlMVFwiLCBbJGjigI1fYSA9PiAoa2V5TFQgPSAkaOKAjV9hKV1dLFtcImtleUxURVwiLCBbJGjigI1fYSA9PiAoa2V5TFRFID0gJGjigI1fYSldXV1dLFtcIi4uL2tleXMvY2hlY2tLZXkuanNcIiwgW1tcImFzc2VydEtleVwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0S2V5ID0gJGjigI1fYSldXSxbXCJjaGVja0tleVwiLCBbJGjigI1fYSA9PiAoY2hlY2tLZXkgPSAkaOKAjV9hKV1dLFtcImlzS2V5XCIsIFskaOKAjV9hID0+IChpc0tleSA9ICRo4oCNX2EpXV0sW1wiY2hlY2tTY2FsYXJLZXlcIiwgWyRo4oCNX2EgPT4gKGNoZWNrU2NhbGFyS2V5ID0gJGjigI1fYSldXSxbXCJjaGVja0NvcHlTZXRcIiwgWyRo4oCNX2EgPT4gKGNoZWNrQ29weVNldCA9ICRo4oCNX2EpXV0sW1wiY2hlY2tDb3B5TWFwXCIsIFskaOKAjV9hID0+IChjaGVja0NvcHlNYXAgPSAkaOKAjV9hKV1dLFtcImNvcHlNYXBLZXlTZXRcIiwgWyRo4oCNX2EgPT4gKGNvcHlNYXBLZXlTZXQgPSAkaOKAjV9hKV1dLFtcImNoZWNrQ29weUJhZ1wiLCBbJGjigI1fYSA9PiAoY2hlY2tDb3B5QmFnID0gJGjigI1fYSldXSxbXCJnZXRDb3B5TWFwRW50cnlBcnJheVwiLCBbJGjigI1fYSA9PiAoZ2V0Q29weU1hcEVudHJ5QXJyYXkgPSAkaOKAjV9hKV1dLFtcIm1ha2VDb3B5TWFwXCIsIFskaOKAjV9hID0+IChtYWtlQ29weU1hcCA9ICRo4oCNX2EpXV1dXSxbXCIuLi9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzXCIsIFtbXCJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllc1wiLCBbJGjigI1fYSA9PiAoZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG5jb25zdHtlbnRyaWVzLHZhbHVlc309T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGF0dGVybk1lbW89bmV3IFdlYWtTZXQoKTtcblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgTU07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmYXVsdExpbWl0cz1oYXJkZW4oe1xuZGVjaW1hbERpZ2l0c0xpbWl0OjEwMCxcbnN0cmluZ0xlbmd0aExpbWl0OjEwMF8wMDAsXG5zeW1ib2xOYW1lTGVuZ3RoTGltaXQ6MTAwLFxubnVtUHJvcGVydGllc0xpbWl0OjgwLFxucHJvcGVydHlOYW1lTGVuZ3RoTGltaXQ6MTAwLFxuYXJyYXlMZW5ndGhMaW1pdDoxMF8wMDAsXG5udW1TZXRFbGVtZW50c0xpbWl0OjEwXzAwMCxcbm51bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQ6MTBfMDAwLFxubnVtTWFwRW50cmllc0xpbWl0OjUwMDB9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5kZWZhdWx0TGltaXRzKGRlZmF1bHRMaW1pdHMpO1xuY29uc3QgbGltaXQ9KGxpbWl0cz17fSk9PlxuLyogICAgICAgICAgICAgICAgICAgICovaGFyZGVuKHtfX3Byb3RvX186ZGVmYXVsdExpbWl0cywuLi5saW1pdHN9KTtcblxuY29uc3QgY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQ9KFxucGF5bG9hZCxcbm1haW5QYXlsb2FkU2hhcGUsXG5jaGVjayxcbmxhYmVsKT0+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+XG4vL1xubWFrZVJhd0d1YXJkKCl9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmNoZWNrTWF0Y2hlcyxcbm1hdGNoZXMsXG5tdXN0TWF0Y2gsXG5hc3NlcnRQYXR0ZXJuLFxuaXNQYXR0ZXJuLFxuZ2V0UmFua0NvdmVyLFxuTSxcbmtpbmRPZn0pO1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgICAgICAge1xuY2hlY2tNYXRjaGVzLFxubWF0Y2hlcyxcbm11c3RNYXRjaCxcbmFzc2VydFBhdHRlcm4sXG5pc1BhdHRlcm4sXG5nZXRSYW5rQ292ZXIsXG5NLFxua2luZE9mfT1cbm1ha2VQYXR0ZXJuS2l0KCk7JGjigI1fb25jZS5jaGVja01hdGNoZXMoY2hlY2tNYXRjaGVzKTskaOKAjV9vbmNlLm1hdGNoZXMobWF0Y2hlcyk7JGjigI1fb25jZS5tdXN0TWF0Y2gobXVzdE1hdGNoKTskaOKAjV9vbmNlLmFzc2VydFBhdHRlcm4oYXNzZXJ0UGF0dGVybik7JGjigI1fb25jZS5pc1BhdHRlcm4oaXNQYXR0ZXJuKTskaOKAjV9vbmNlLmdldFJhbmtDb3ZlcihnZXRSYW5rQ292ZXIpOyRo4oCNX29uY2UuTShNKTskaOKAjV9vbmNlLmtpbmRPZihraW5kT2YpO1xuXG5NTT1NO1xuXG4vL1xuXG4vL1xuY29uc3QgQXdhaXRBcmdHdWFyZFBheWxvYWRTaGFwZT1oYXJkZW4oe1xuYXJnR3VhcmQ6TS5wYXR0ZXJuKCl9KTtcblxuXG5jb25zdCAgICAgICAgQXdhaXRBcmdHdWFyZFNoYXBlPU0ua2luZCgnZ3VhcmQ6YXdhaXRBcmdHdWFyZCcpO1xuXG4vKlxuXG5cbiAqLyRo4oCNX29uY2UuQXdhaXRBcmdHdWFyZFNoYXBlKEF3YWl0QXJnR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgaXNBd2FpdEFyZ0d1YXJkPShzcGVjaW1lbik9PlxubWF0Y2hlcyhzcGVjaW1lbixBd2FpdEFyZ0d1YXJkU2hhcGUpOyRo4oCNX29uY2UuaXNBd2FpdEFyZ0d1YXJkKGlzQXdhaXRBcmdHdWFyZCk7XG5oYXJkZW4oaXNBd2FpdEFyZ0d1YXJkKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRBd2FpdEFyZ0d1YXJkPShzcGVjaW1lbik9Pntcbm11c3RNYXRjaChzcGVjaW1lbixBd2FpdEFyZ0d1YXJkU2hhcGUsJ2F3YWl0QXJnR3VhcmQnKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0QXdhaXRBcmdHdWFyZChhc3NlcnRBd2FpdEFyZ0d1YXJkKTtcbmhhcmRlbihhc3NlcnRBd2FpdEFyZ0d1YXJkKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1ha2VBd2FpdEFyZ0d1YXJkPShhcmdQYXR0ZXJuKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOmF3YWl0QXJnR3VhcmQnLHtcbmFyZ0d1YXJkOmFyZ1BhdHRlcm59KTtcblxuYXNzZXJ0QXdhaXRBcmdHdWFyZChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vL1xuXG5jb25zdCBSYXdHdWFyZFBheWxvYWRTaGFwZT1NLnJlY29yZCgpO1xuXG5jb25zdCAgICAgICAgUmF3R3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOnJhd0d1YXJkJyk7JGjigI1fb25jZS5SYXdHdWFyZFNoYXBlKFJhd0d1YXJkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgaXNSYXdHdWFyZD0oc3BlY2ltZW4pPT5tYXRjaGVzKHNwZWNpbWVuLFJhd0d1YXJkU2hhcGUpOyRo4oCNX29uY2UuaXNSYXdHdWFyZChpc1Jhd0d1YXJkKTtcblxuY29uc3QgICAgICAgIGFzc2VydFJhd0d1YXJkPShzcGVjaW1lbik9PlxubXVzdE1hdGNoKHNwZWNpbWVuLFJhd0d1YXJkU2hhcGUsJ3Jhd0d1YXJkJyk7XG5cbi8qXG5cbiAqLyRo4oCNX29uY2UuYXNzZXJ0UmF3R3VhcmQoYXNzZXJ0UmF3R3VhcmQpO1xuY29uc3QgbWFrZVJhd0d1YXJkPSgpPT5tYWtlVGFnZ2VkKCdndWFyZDpyYXdHdWFyZCcse30pO1xuXG4vL1xuLy9cblxuY29uc3QgICAgICAgIFN5bmNWYWx1ZUd1YXJkU2hhcGU9TS5vcihSYXdHdWFyZFNoYXBlLE0ucGF0dGVybigpKTskaOKAjV9vbmNlLlN5bmNWYWx1ZUd1YXJkU2hhcGUoU3luY1ZhbHVlR3VhcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBTeW5jVmFsdWVHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoU3luY1ZhbHVlR3VhcmRTaGFwZSk7JGjigI1fb25jZS5TeW5jVmFsdWVHdWFyZExpc3RTaGFwZShTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSk7XG5cbmNvbnN0IEFyZ0d1YXJkU2hhcGU9TS5vcihSYXdHdWFyZFNoYXBlLEF3YWl0QXJnR3VhcmRTaGFwZSxNLnBhdHRlcm4oKSk7XG5jb25zdCAgICAgICAgQXJnR3VhcmRMaXN0U2hhcGU9TS5hcnJheU9mKEFyZ0d1YXJkU2hhcGUpOyRo4oCNX29uY2UuQXJnR3VhcmRMaXN0U2hhcGUoQXJnR3VhcmRMaXN0U2hhcGUpO1xuXG5jb25zdCBTeW5jTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGU9aGFyZGVuKHtcbmNhbGxLaW5kOidzeW5jJyxcbmFyZ0d1YXJkczpTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxcbm9wdGlvbmFsQXJnR3VhcmRzOk0ub3B0KFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKSxcbnJlc3RBcmdHdWFyZDpNLm9wdChTeW5jVmFsdWVHdWFyZFNoYXBlKSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5jb25zdCBBc3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlPWhhcmRlbih7XG5jYWxsS2luZDonYXN5bmMnLFxuYXJnR3VhcmRzOkFyZ0d1YXJkTGlzdFNoYXBlLFxub3B0aW9uYWxBcmdHdWFyZHM6TS5vcHQoQXJnR3VhcmRMaXN0U2hhcGUpLFxucmVzdEFyZ0d1YXJkOk0ub3B0KFN5bmNWYWx1ZUd1YXJkU2hhcGUpLFxucmV0dXJuR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0pO1xuXG5cbmNvbnN0ICAgICAgICBNZXRob2RHdWFyZFBheWxvYWRTaGFwZT1NLm9yKFxuU3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLFxuQXN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZSk7JGjigI1fb25jZS5NZXRob2RHdWFyZFBheWxvYWRTaGFwZShNZXRob2RHdWFyZFBheWxvYWRTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIE1ldGhvZEd1YXJkU2hhcGU9TS5raW5kKCdndWFyZDptZXRob2RHdWFyZCcpO1xuXG4vKlxuXG5cbiAqLyRo4oCNX29uY2UuTWV0aG9kR3VhcmRTaGFwZShNZXRob2RHdWFyZFNoYXBlKTtcbmNvbnN0ICAgICAgICBhc3NlcnRNZXRob2RHdWFyZD0oc3BlY2ltZW4pPT57XG5tdXN0TWF0Y2goc3BlY2ltZW4sTWV0aG9kR3VhcmRTaGFwZSwnbWV0aG9kR3VhcmQnKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0TWV0aG9kR3VhcmQoYXNzZXJ0TWV0aG9kR3VhcmQpO1xuaGFyZGVuKGFzc2VydE1ldGhvZEd1YXJkKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VNZXRob2RHdWFyZE1ha2VyPShcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHM9dW5kZWZpbmVkLFxucmVzdEFyZ0d1YXJkPXVuZGVmaW5lZCk9PlxuXG5oYXJkZW4oe1xub3B0aW9uYWw6KC4uLm9wdEFyZ0d1YXJkcyk9Pntcbm9wdGlvbmFsQXJnR3VhcmRzPT09dW5kZWZpbmVkfHxcbkZhaWwgYENhbiBvbmx5IGhhdmUgb25lIHNldCBvZiBvcHRpb25hbCBndWFyZHNgO1xucmVzdEFyZ0d1YXJkPT09dW5kZWZpbmVkfHxcbkZhaWwgYG9wdGlvbmFsIGFyZyBndWFyZHMgbXVzdCBjb21lIGJlZm9yZSByZXN0IGFyZ2A7XG5yZXR1cm4gbWFrZU1ldGhvZEd1YXJkTWFrZXIoY2FsbEtpbmQsYXJnR3VhcmRzLG9wdEFyZ0d1YXJkcyk7XG4gfSxcbnJlc3Q6KHJBcmdHdWFyZCk9PntcbnJlc3RBcmdHdWFyZD09PXVuZGVmaW5lZHx8RmFpbCBgQ2FuIG9ubHkgaGF2ZSBvbmUgcmVzdCBhcmdgO1xucmV0dXJuIG1ha2VNZXRob2RHdWFyZE1ha2VyKFxuY2FsbEtpbmQsXG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcyxcbnJBcmdHdWFyZCk7XG5cbiB9LFxucmV0dXJuczoocmV0dXJuR3VhcmQ9TS51bmRlZmluZWQoKSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnZ3VhcmQ6bWV0aG9kR3VhcmQnLHtcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yZXN0QXJnR3VhcmQsXG5yZXR1cm5HdWFyZH0pO1xuXG5hc3NlcnRNZXRob2RHdWFyZChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9fSk7XG5cblxuY29uc3QgICAgICAgIEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5pbnRlcmZhY2VOYW1lOk0uc3RyaW5nKCksXG5tZXRob2RHdWFyZHM6TS5yZWNvcmRPZihNLnN0cmluZygpLE1ldGhvZEd1YXJkU2hhcGUpfSxcblxue1xuZGVmYXVsdEd1YXJkczpNLm9yKE0udW5kZWZpbmVkKCksJ3Bhc3NhYmxlJywncmF3JyksXG5zbG9wcHk6TS5ib29sZWFuKCksXG5zeW1ib2xNZXRob2RHdWFyZHM6TS5tYXBPZihNLnN5bWJvbCgpLE1ldGhvZEd1YXJkU2hhcGUpfSk7JGjigI1fb25jZS5JbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZShJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSk7XG5cblxuXG5jb25zdCAgICAgICAgSW50ZXJmYWNlR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOmludGVyZmFjZUd1YXJkJyk7XG5cbi8qXG5cblxuICovJGjigI1fb25jZS5JbnRlcmZhY2VHdWFyZFNoYXBlKEludGVyZmFjZUd1YXJkU2hhcGUpO1xuY29uc3QgICAgICAgIGFzc2VydEludGVyZmFjZUd1YXJkPShzcGVjaW1lbik9Pntcbm11c3RNYXRjaChzcGVjaW1lbixJbnRlcmZhY2VHdWFyZFNoYXBlLCdpbnRlcmZhY2VHdWFyZCcpO1xuIH07JGjigI1fb25jZS5hc3NlcnRJbnRlcmZhY2VHdWFyZChhc3NlcnRJbnRlcmZhY2VHdWFyZCk7XG5oYXJkZW4oYXNzZXJ0SW50ZXJmYWNlR3VhcmQpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUludGVyZmFjZUd1YXJkPShpbnRlcmZhY2VOYW1lLG1ldGhvZEd1YXJkcyxvcHRpb25zPXt9KT0+e1xuY29uc3R7c2xvcHB5PWZhbHNlLGRlZmF1bHRHdWFyZHM9c2xvcHB5PydwYXNzYWJsZSc6dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0cmluZ01ldGhvZEd1YXJkcz17fTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN5bWJvbE1ldGhvZEd1YXJkc0VudHJpZXM9W107XG5mb3IoY29uc3Qga2V5IG9mIG93bktleXMobWV0aG9kR3VhcmRzKSl7XG5jb25zdCB2YWx1ZT1tZXRob2RHdWFyZHNbLyogICAgICAgICAgICAgICAgICova2V5XTtcbmlmKHR5cGVvZiBrZXk9PT0nc3ltYm9sJyl7XG5zeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzLnB1c2goW2tleSx2YWx1ZV0pO1xuIH1lbHNle1xuc3RyaW5nTWV0aG9kR3VhcmRzW2tleV09dmFsdWU7XG4gfVxuIH1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnZ3VhcmQ6aW50ZXJmYWNlR3VhcmQnLHtcbmludGVyZmFjZU5hbWUsXG5tZXRob2RHdWFyZHM6c3RyaW5nTWV0aG9kR3VhcmRzLFxuLi4uKHN5bWJvbE1ldGhvZEd1YXJkc0VudHJpZXMubGVuZ3RoP1xue3N5bWJvbE1ldGhvZEd1YXJkczptYWtlQ29weU1hcChzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzKX06XG57fSksXG5kZWZhdWx0R3VhcmRzfSk7XG5cbmFzc2VydEludGVyZmFjZUd1YXJkKHJlc3VsdCk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovcmVzdWx0KTtcbiB9O1xuXG5jb25zdCBHdWFyZFBheWxvYWRTaGFwZXM9aGFyZGVuKHtcbidndWFyZDphd2FpdEFyZ0d1YXJkJzpBd2FpdEFyZ0d1YXJkUGF5bG9hZFNoYXBlLFxuJ2d1YXJkOnJhd0d1YXJkJzpSYXdHdWFyZFBheWxvYWRTaGFwZSxcbidndWFyZDptZXRob2RHdWFyZCc6TWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUsXG4nZ3VhcmQ6aW50ZXJmYWNlR3VhcmQnOkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlfSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0TGltaXRzIjpbImRlZmF1bHRMaW1pdHMiXSwiY2hlY2tNYXRjaGVzIjpbImNoZWNrTWF0Y2hlcyJdLCJtYXRjaGVzIjpbIm1hdGNoZXMiXSwibXVzdE1hdGNoIjpbIm11c3RNYXRjaCJdLCJhc3NlcnRQYXR0ZXJuIjpbImFzc2VydFBhdHRlcm4iXSwiaXNQYXR0ZXJuIjpbImlzUGF0dGVybiJdLCJnZXRSYW5rQ292ZXIiOlsiZ2V0UmFua0NvdmVyIl0sIk0iOlsiTSJdLCJraW5kT2YiOlsia2luZE9mIl0sIkF3YWl0QXJnR3VhcmRTaGFwZSI6WyJBd2FpdEFyZ0d1YXJkU2hhcGUiXSwiaXNBd2FpdEFyZ0d1YXJkIjpbImlzQXdhaXRBcmdHdWFyZCJdLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIjpbImFzc2VydEF3YWl0QXJnR3VhcmQiXSwiUmF3R3VhcmRTaGFwZSI6WyJSYXdHdWFyZFNoYXBlIl0sImlzUmF3R3VhcmQiOlsiaXNSYXdHdWFyZCJdLCJhc3NlcnRSYXdHdWFyZCI6WyJhc3NlcnRSYXdHdWFyZCJdLCJTeW5jVmFsdWVHdWFyZFNoYXBlIjpbIlN5bmNWYWx1ZUd1YXJkU2hhcGUiXSwiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUiOlsiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUiXSwiQXJnR3VhcmRMaXN0U2hhcGUiOlsiQXJnR3VhcmRMaXN0U2hhcGUiXSwiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUiOlsiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUiXSwiTWV0aG9kR3VhcmRTaGFwZSI6WyJNZXRob2RHdWFyZFNoYXBlIl0sImFzc2VydE1ldGhvZEd1YXJkIjpbImFzc2VydE1ldGhvZEd1YXJkIl0sIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlIjpbIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlIl0sIkludGVyZmFjZUd1YXJkU2hhcGUiOlsiSW50ZXJmYWNlR3VhcmRTaGFwZSJdLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCI6WyJhc3NlcnRJbnRlcmZhY2VHdWFyZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACHklKnTwEAAE8BAAAiAAAAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADkpsWEUQYAAFEGAAAhAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIiwiLi9zcmMvbWVtby1yYWNlLmpzIiwiLi9zcmMvaXMtcHJvbWlzZS5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsibWFrZVByb21pc2VLaXQiLCJyYWNlUHJvbWlzZXMiXSwicmVleHBvcnRzIjpbIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0LG1lbW9SYWNlOyRo4oCNX2ltcG9ydHMoW1tcIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzXCIsIFtbXCJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCA9ICRo4oCNX2EpXV1dXSxbXCIuL3NyYy9tZW1vLXJhY2UuanNcIiwgW1tcIm1lbW9SYWNlXCIsIFskaOKAjV9hID0+IChtZW1vUmFjZSA9ICRo4oCNX2EpXV1dXSxbXCIuL3NyYy9pcy1wcm9taXNlLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZVByb21pc2VLaXQsICduYW1lJywge3ZhbHVlOiBcIm1ha2VQcm9taXNlS2l0XCJ9KTskaOKAjV9vbmNlLm1ha2VQcm9taXNlS2l0KG1ha2VQcm9taXNlS2l0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmFjZVByb21pc2VzLCAnbmFtZScsIHt2YWx1ZTogXCJyYWNlUHJvbWlzZXNcIn0pOyRo4oCNX29uY2UucmFjZVByb21pc2VzKHJhY2VQcm9taXNlcyk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZT1nbG9iYWxUaGlzLkhhbmRsZWRQcm9taXNlfHxQcm9taXNlO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZVByb21pc2VLaXQoKXtcbmNvbnN0e3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfT1tYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQoKTtcblxuY29uc3QgcHJvbWlzZT1uZXcgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZShleGVjdXRvcik7XG5cbnJldHVybiBoYXJkZW4oe3Byb21pc2UscmVzb2x2ZSxyZWplY3R9KTtcbiB9XG5oYXJkZW4obWFrZVByb21pc2VLaXQpO1xuXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICByYWNlUHJvbWlzZXModmFsdWVzKXtcbnJldHVybiBoYXJkZW4obWVtb1JhY2UuY2FsbChCZXN0UGlwZWxpbmFibGVQcm9taXNlLHZhbHVlcykpO1xuIH1cbmhhcmRlbihyYWNlUHJvbWlzZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVByb21pc2VLaXQiOlsibWFrZVByb21pc2VLaXQiXSwicmFjZVByb21pc2VzIjpbInJhY2VQcm9taXNlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADAKHnJWwIAAFsCAAAqAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41L3NyYy9pcy1wcm9taXNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJpc1Byb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlzUHJvbWlzZSwgJ25hbWUnLCB7dmFsdWU6IFwiaXNQcm9taXNlXCJ9KTskaOKAjV9vbmNlLmlzUHJvbWlzZShpc1Byb21pc2UpOyAgIC8qXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIGlzUHJvbWlzZShtYXliZVByb21pc2Upe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShtYXliZVByb21pc2UpPT09bWF5YmVQcm9taXNlO1xuIH1cbmhhcmRlbihpc1Byb21pc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQcm9taXNlIjpbImlzUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABtLwE4ogcAAKIHAAApAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41L3NyYy9tZW1vLXJhY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1lbW9SYWNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4qL1xuXG5jb25zdCBpc09iamVjdD0odmFsdWUpPT5PYmplY3QodmFsdWUpPT09dmFsdWU7XG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBrbm93blByb21pc2VzPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuICovXG5jb25zdCBtYXJrU2V0dGxlZD0ocmVjb3JkKT0+e1xuaWYoIXJlY29yZHx8cmVjb3JkLnNldHRsZWQpe1xucmV0dXJuIG5ldyBTZXQoKTtcbiB9XG5cbmNvbnN0e2RlZmVycmVkc309cmVjb3JkO1xuT2JqZWN0LmFzc2lnbihyZWNvcmQse1xuZGVmZXJyZWRzOnVuZGVmaW5lZCxcbnNldHRsZWQ6dHJ1ZX0pO1xuXG5PYmplY3QuZnJlZXplKHJlY29yZCk7XG5yZXR1cm4gZGVmZXJyZWRzO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGdldE1lbW9SZWNvcmQ9KHZhbHVlKT0+e1xuaWYoIWlzT2JqZWN0KHZhbHVlKSl7XG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGhhcmRlbih7c2V0dGxlZDp0cnVlfSk7XG4gfVxuXG5sZXQgcmVjb3JkPWtub3duUHJvbWlzZXMuZ2V0KHZhbHVlKTtcblxuaWYoIXJlY29yZCl7XG5yZWNvcmQ9e2RlZmVycmVkczpuZXcgU2V0KCksc2V0dGxlZDpmYWxzZX07XG5rbm93blByb21pc2VzLnNldCh2YWx1ZSxyZWNvcmQpO1xuLy9cblByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihcbih2YWwpPT57XG5mb3IoY29uc3R7cmVzb2x2ZX1vZiBtYXJrU2V0dGxlZChyZWNvcmQpKXtcbnJlc29sdmUodmFsKTtcbiB9XG4gfSxcbihlcnIpPT57XG5mb3IoY29uc3R7cmVqZWN0fW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVqZWN0KGVycik7XG4gfVxuIH0pO1xuXG4gfVxucmV0dXJuIHJlY29yZDtcbiB9O1xuXG5jb25zdHtyYWNlfT17XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5yYWNlKHZhbHVlcyl7XG5sZXQgZGVmZXJyZWQ7XG4vKiAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBjYWNoZWRWYWx1ZXM9W107XG5jb25zdCBDPXRoaXM7XG5jb25zdCByZXN1bHQ9bmV3IEMoKHJlc29sdmUscmVqZWN0KT0+e1xuZGVmZXJyZWQ9e3Jlc29sdmUscmVqZWN0fTtcbmZvcihjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpe1xuY2FjaGVkVmFsdWVzLnB1c2godmFsdWUpO1xuY29uc3R7c2V0dGxlZCxkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoc2V0dGxlZCl7XG4vL1xuLy9cbkMucmVzb2x2ZSh2YWx1ZSkudGhlbihyZXNvbHZlLHJlamVjdCk7XG4gfWVsc2V7XG5kZWZlcnJlZHMuYWRkKGRlZmVycmVkKTtcbiB9XG4gfVxuIH0pO1xuXG4vL1xuLy9cbnJldHVybiByZXN1bHQuZmluYWxseSgoKT0+e1xuZm9yKGNvbnN0IHZhbHVlIG9mIGNhY2hlZFZhbHVlcyl7XG5jb25zdHtkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoZGVmZXJyZWRzKXtcbmRlZmVycmVkcy5kZWxldGUoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG4gfX07JGjigI1fb25jZS5yYWNlKHJhY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWVtb1JhY2UiOlsicmFjZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD4cDHEggUAAIIFAAA0AAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41L3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlc29sdmU7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZWplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXNvbHZlPSh2YWx1ZSk9PntcbmlmKGludGVybmFsUmVzb2x2ZSl7XG5pbnRlcm5hbFJlc29sdmUodmFsdWUpO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PW51bGwpO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlamVjdD0ocmVhc29uKT0+e1xuaWYoaW50ZXJuYWxSZWplY3Qpe1xuaW50ZXJuYWxSZWplY3QocmVhc29uKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlamVjdD09PW51bGwpO1xuIH1cbiB9O1xuXG5jb25zdCBleGVjdXRvcj0ocmVzLHJlaik9PntcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT11bmRlZmluZWQmJmludGVybmFsUmVqZWN0PT09dW5kZWZpbmVkKTtcbmludGVybmFsUmVzb2x2ZT1yZXM7XG5pbnRlcm5hbFJlamVjdD1yZWo7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7cmVzb2x2ZSxyZWplY3QsZXhlY3V0b3J9KTtcbiB9OyRo4oCNX29uY2UubWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG5oYXJkZW4obWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCI6WyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh5JSp08BAABPAQAAJQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNS9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAANN+elaARAACgEQAAHAAAAEBlbmRvL3N0cmVhbS12MS4yLjUvaW5kZXguanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0Il0sImV4cG9ydHMiOlsibWFrZVBpcGUiLCJtYWtlUXVldWUiLCJtYWtlU3RyZWFtIiwibWFwUmVhZGVyIiwibWFwV3JpdGVyIiwicHJpbWUiLCJwdW1wIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLG1ha2VQcm9taXNlS2l0OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy9cbi8vXG4vL1xuY29uc3QgZnJlZXplPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9PYmplY3QuZnJlZXplO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VRdWV1ZT0oKT0+e1xubGV0e3Byb21pc2U6dGFpbFByb21pc2UscmVzb2x2ZTp0YWlsUmVzb2x2ZX09bWFrZVByb21pc2VLaXQoKTtcbnJldHVybntcbnB1dCh2YWx1ZSl7XG5jb25zdHtyZXNvbHZlLHByb21pc2V9PW1ha2VQcm9taXNlS2l0KCk7XG50YWlsUmVzb2x2ZShmcmVlemUoe3ZhbHVlLHByb21pc2V9KSk7XG50YWlsUmVzb2x2ZT1yZXNvbHZlO1xuIH0sXG5nZXQoKXtcbmNvbnN0IHByb21pc2U9dGFpbFByb21pc2UudGhlbigobmV4dCk9Pm5leHQudmFsdWUpO1xudGFpbFByb21pc2U9dGFpbFByb21pc2UudGhlbigobmV4dCk9Pm5leHQucHJvbWlzZSk7XG5yZXR1cm4gaGFyZGVuKHByb21pc2UpO1xuIH19O1xuXG4gfTskaOKAjV9vbmNlLm1ha2VRdWV1ZShtYWtlUXVldWUpO1xuaGFyZGVuKG1ha2VRdWV1ZSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3RyZWFtPShhY2tzLGRhdGEpPT57XG5jb25zdCBzdHJlYW09aGFyZGVuKHtcbi8qXG5cbiAgICAgKi9cbm5leHQodmFsdWUpe1xuLy9cbi8vXG5kYXRhLnB1dChmcmVlemUoe3ZhbHVlLGRvbmU6ZmFsc2V9KSk7XG5yZXR1cm4gYWNrcy5nZXQoKTtcbiB9LFxuLypcblxuICAgICAqL1xucmV0dXJuKHZhbHVlKXtcbmRhdGEucHV0KGZyZWV6ZSh7dmFsdWUsZG9uZTp0cnVlfSkpO1xucmV0dXJuIGFja3MuZ2V0KCk7XG4gfSxcbi8qXG5cbiAgICAgKi9cbnRocm93KGVycm9yKXtcbmRhdGEucHV0KGhhcmRlbihQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbnJldHVybiBhY2tzLmdldCgpO1xuIH0sXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7XG5yZXR1cm4gc3RyZWFtO1xuIH19KTtcblxucmV0dXJuIHN0cmVhbTtcbiB9OyRo4oCNX29uY2UubWFrZVN0cmVhbShtYWtlU3RyZWFtKTtcbmhhcmRlbihtYWtlU3RyZWFtKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIG1ha2VQaXBlPSgpPT57XG5jb25zdCBkYXRhPW1ha2VRdWV1ZSgpO1xuY29uc3QgYWNrcz1tYWtlUXVldWUoKTtcbmNvbnN0IHJlYWRlcj1tYWtlU3RyZWFtKGFja3MsZGF0YSk7XG5jb25zdCB3cml0ZXI9bWFrZVN0cmVhbShkYXRhLGFja3MpO1xucmV0dXJuIGhhcmRlbihbd3JpdGVyLHJlYWRlcl0pO1xuIH07JGjigI1fb25jZS5tYWtlUGlwZShtYWtlUGlwZSk7XG5oYXJkZW4obWFrZVBpcGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwdW1wPWFzeW5jKHdyaXRlcixyZWFkZXIscHJpbWVyKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdGljaz0ocHJvbWlzZSk9PlxuRS53aGVuKFxucHJvbWlzZSxcbihyZXN1bHQpPT57XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gd3JpdGVyLnJldHVybihyZXN1bHQudmFsdWUpO1xuIH1lbHNle1xuLy9cbi8vXG5yZXR1cm4gdG9jayh3cml0ZXIubmV4dChyZXN1bHQudmFsdWUpKTtcbiB9XG4gfSxcbigvKiAgICAgICAgICAgICAgICAqL2Vycm9yKT0+e1xucmV0dXJuIHdyaXRlci50aHJvdyhlcnJvcik7XG4gfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdG9jaz0ocHJvbWlzZSk9PlxuRS53aGVuKFxucHJvbWlzZSxcbihyZXN1bHQpPT57XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVhZGVyLnJldHVybihyZXN1bHQudmFsdWUpO1xuIH1lbHNle1xucmV0dXJuIHRpY2socmVhZGVyLm5leHQocmVzdWx0LnZhbHVlKSk7XG4gfVxuIH0sXG4oLyogICAgICAgICAgICAgICAgKi9lcnJvcik9PntcbnJldHVybiByZWFkZXIudGhyb3coZXJyb3IpO1xuIH0pO1xuXG5hd2FpdCB0aWNrKHJlYWRlci5uZXh0KHByaW1lcikpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9OyRo4oCNX29uY2UucHVtcChwdW1wKTtcbmhhcmRlbihwdW1wKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmltZT0oZ2VuZXJhdG9yLHByaW1lcik9Pntcbi8vXG5jb25zdCBmaXJzdD1nZW5lcmF0b3IubmV4dChwcmltZXIpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHJlc3VsdDtcbmNvbnN0IHByaW1lZD1oYXJkZW4oe1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgbmV4dCh2YWx1ZSl7XG5pZihyZXN1bHQ9PT11bmRlZmluZWQpe1xuLy9cbnJlc3VsdD1hd2FpdCBmaXJzdDtcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbnJldHVybiBnZW5lcmF0b3IubmV4dCh2YWx1ZSk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICBhc3luYyByZXR1cm4odmFsdWUpe1xuaWYocmVzdWx0PT09dW5kZWZpbmVkKXtcbi8vXG5yZXN1bHQ9YXdhaXQgZmlyc3Q7XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5yZXR1cm4gZ2VuZXJhdG9yLnJldHVybih2YWx1ZSk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgdGhyb3coZXJyb3Ipe1xuaWYocmVzdWx0PT09dW5kZWZpbmVkKXtcbi8vXG5yZXN1bHQ9YXdhaXQgZmlyc3Q7XG5pZihyZXN1bHQuZG9uZSl7XG50aHJvdyBlcnJvcjtcbiB9XG4gfVxucmV0dXJuIGdlbmVyYXRvci50aHJvdyhlcnJvcik7XG4gfX0pO1xuXG5yZXR1cm4gcHJpbWVkO1xuIH07JGjigI1fb25jZS5wcmltZShwcmltZSk7XG5oYXJkZW4ocHJpbWUpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcFJlYWRlcj0ocmVhZGVyLHRyYW5zZm9ybSk9PntcbmFzeW5jIGZ1bmN0aW9uKnRyYW5zZm9ybUdlbmVyYXRvcigpe1xuZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIHJlYWRlcil7XG55aWVsZCB0cmFuc2Zvcm0odmFsdWUpO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuaGFyZGVuKHRyYW5zZm9ybUdlbmVyYXRvcik7XG5yZXR1cm4gaGFyZGVuKHRyYW5zZm9ybUdlbmVyYXRvcigpKTtcbiB9OyRo4oCNX29uY2UubWFwUmVhZGVyKG1hcFJlYWRlcik7XG5oYXJkZW4obWFwUmVhZGVyKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYXBXcml0ZXI9KHdyaXRlcix0cmFuc2Zvcm0pPT57XG5jb25zdCB0cmFuc2Zvcm1lZFdyaXRlcj1oYXJkZW4oe1xuLypcblxuICAgICAqL1xuICAgICAgYXN5bmMgbmV4dCh2YWx1ZSl7XG5yZXR1cm4gd3JpdGVyLm5leHQodHJhbnNmb3JtKHZhbHVlKSk7XG4gfSxcbi8qXG5cbiAgICAgKi9cbiAgICAgIGFzeW5jIHRocm93KGVycm9yKXtcbnJldHVybiB3cml0ZXIudGhyb3coZXJyb3IpO1xuIH0sXG4vKlxuXG4gICAgICovXG4gICAgICBhc3luYyByZXR1cm4odmFsdWUpe1xucmV0dXJuIHdyaXRlci5yZXR1cm4odmFsdWUpO1xuIH0sXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7XG5yZXR1cm4gdHJhbnNmb3JtZWRXcml0ZXI7XG4gfX0pO1xuXG5yZXR1cm4gdHJhbnNmb3JtZWRXcml0ZXI7XG4gfTskaOKAjV9vbmNlLm1hcFdyaXRlcihtYXBXcml0ZXIpO1xuaGFyZGVuKG1hcFdyaXRlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUXVldWUiOlsibWFrZVF1ZXVlIl0sIm1ha2VTdHJlYW0iOlsibWFrZVN0cmVhbSJdLCJtYWtlUGlwZSI6WyJtYWtlUGlwZSJdLCJwdW1wIjpbInB1bXAiXSwicHJpbWUiOlsicHJpbWUiXSwibWFwUmVhZGVyIjpbIm1hcFJlYWRlciJdLCJtYXBXcml0ZXIiOlsibWFwV3JpdGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGqjIlDIAQAAyAEAABwAAABqZXNzaWUuanMtdjAuMy40L3NyYy9tYWluLmpzeyJpbXBvcnRzIjpbIi4vcmluZzAvbWFpbi5qcyIsIi4vcmluZzEvbWFpbi5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vcmluZzAvbWFpbi5qcyIsIi4vcmluZzEvbWFpbi5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtbXCIuL3JpbmcwL21haW4uanNcIiwgW11dLFtcIi4vcmluZzEvbWFpbi5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB7GF4ZeAEAAHgBAAAfAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvRS5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyJAZW5kby9mYXIiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALp/out1AgAAdQIAACwAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9hc3luYy1nZW5lcmF0ZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYXN5bmNHZW5lcmF0ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXN5bmNHZW5lcmF0ZT0obmV4dCk9PntcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+e1xucmV0dXJuIGhhcmRlbih7XG5uZXh0OmFzeW5jKCk9PmhhcmRlbihuZXh0KCkpfSk7XG5cbiB9fSk7XG5cbiB9OyRo4oCNX29uY2UuYXN5bmNHZW5lcmF0ZShhc3luY0dlbmVyYXRlKTtcbmhhcmRlbihhc3luY0dlbmVyYXRlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzeW5jR2VuZXJhdGUiOlsiYXN5bmNHZW5lcmF0ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADoVC976wEAAOsBAAAiAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFpbi5qc3siaW1wb3J0cyI6WyIuL0UuanMiLCIuL21ha2Vycy5qcyIsIi4vYXN5bmMtZ2VuZXJhdGUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL0UuanMiLCIuL2FzeW5jLWdlbmVyYXRlLmpzIiwiLi9tYWtlcnMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9FLmpzXCIsIFtdXSxbXCIuL21ha2Vycy5qc1wiLCBbXV0sW1wiLi9hc3luYy1nZW5lcmF0ZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACXQPPL1gcAANYHAAAkAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFrZXJzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlTWFwIiwibWFrZVByb21pc2UiLCJtYWtlU2V0IiwibWFrZVdlYWtNYXAiLCJtYWtlV2Vha1NldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VQcm9taXNlPShleGVjdXRvcik9PmhhcmRlbihuZXcgUHJvbWlzZShleGVjdXRvcikpOyRo4oCNX29uY2UubWFrZVByb21pc2UobWFrZVByb21pc2UpO1xuaGFyZGVuKG1ha2VQcm9taXNlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VNYXA9KGVudHJpZXNPckl0ZXJhYmxlKT0+aGFyZGVuKG5ldyBNYXAoZW50cmllc09ySXRlcmFibGUpKTskaOKAjV9vbmNlLm1ha2VNYXAobWFrZU1hcCk7XG5oYXJkZW4obWFrZU1hcCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZVNldD0odmFsdWVzKT0+aGFyZGVuKG5ldyBTZXQodmFsdWVzKSk7JGjigI1fb25jZS5tYWtlU2V0KG1ha2VTZXQpO1xuaGFyZGVuKG1ha2VTZXQpO1xuXG4vKlxuXG5cblxuICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtNYXA9KGVudHJpZXMpPT5oYXJkZW4obmV3IFdlYWtNYXAoZW50cmllcykpOyRo4oCNX29uY2UubWFrZVdlYWtNYXAobWFrZVdlYWtNYXApO1xuaGFyZGVuKG1ha2VXZWFrTWFwKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtTZXQ9KHZhbHVlcyk9PmhhcmRlbihuZXcgV2Vha1NldCh2YWx1ZXMpKTskaOKAjV9vbmNlLm1ha2VXZWFrU2V0KG1ha2VXZWFrU2V0KTtcbmhhcmRlbihtYWtlV2Vha1NldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUHJvbWlzZSI6WyJtYWtlUHJvbWlzZSJdLCJtYWtlTWFwIjpbIm1ha2VNYXAiXSwibWFrZVNldCI6WyJtYWtlU2V0Il0sIm1ha2VXZWFrTWFwIjpbIm1ha2VXZWFrTWFwIl0sIm1ha2VXZWFrU2V0IjpbIm1ha2VXZWFrU2V0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFrjvzpRAwAAUQMAACkAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9hc3luYy10b29scy5qc3siaW1wb3J0cyI6WyIuLi9yaW5nMC9tYWluLmpzIl0sImV4cG9ydHMiOlsiYXN5bmNEb1doaWxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlUHJvbWlzZTskaOKAjV9pbXBvcnRzKFtbXCIuLi9yaW5nMC9tYWluLmpzXCIsIFtbXCJtYWtlUHJvbWlzZVwiLCBbJGjigI1fYSA9PiAobWFrZVByb21pc2UgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXN5bmNEb1doaWxlPShib2R5KT0+e1xucmV0dXJuIG1ha2VQcm9taXNlKChyZXNvbHZlLHJlamVjdCk9PntcbmNvbnN0IGxvb3A9YXN5bmMoKT0+e1xuY29uc3QgZG9Db250aW51ZT1hd2FpdCBib2R5KCk7XG5pZighZG9Db250aW51ZSl7XG4vL1xucmVzb2x2ZSh1bmRlZmluZWQpO1xucmV0dXJuO1xuIH1cblxuLy9cbi8vXG5sb29wKCkuY2F0Y2gocmVqZWN0KTtcbiB9O1xuXG5sb29wKCkuY2F0Y2gocmVqZWN0KTtcbiB9KTtcbiB9OyRo4oCNX29uY2UuYXN5bmNEb1doaWxlKGFzeW5jRG9XaGlsZSk7XG5oYXJkZW4oYXN5bmNEb1doaWxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzeW5jRG9XaGlsZSI6WyJhc3luY0RvV2hpbGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAWkIhVY0BAACNAQAAIgAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcxL21haW4uanN7ImltcG9ydHMiOlsiLi9hc3luYy10b29scy5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vYXN5bmMtdG9vbHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9hc3luYy10b29scy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsBAh4DCgAAAAAAAAAAAMzOQhEt5QEALeUBABQAAAAAAAAAAAAAAKSBAAAAAGNvbXBhcnRtZW50LW1hcC5qc29uUEsBAh4DCgAAAAAAAAAAAKeA7R2EAQAAhAEAACAAAAAAAAAAAAAAAKSBX+UBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9oZWFwLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACcAAAAAAAAAAAAAAKSBIecBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvZXhwb3J0cy5qc1BLAQIeAwoAAAAAAAAAAACbQYZgdwoAAHcKAAAkAAAAAAAAAAAAAACkgbXoAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2hlYXAuanNQSwECHgMKAAAAAAAAAAAAETdOXHACAABwAgAAJQAAAAAAAAAAAAAApIFu8wEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAAqLbT5YAIAAGACAAArAAAAAAAAAAAAAACkgSH2AQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2lzLXBhc3NhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAIafySh7AwAAewMAACQAAAAAAAAAAAAAAKSByvgBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMva2V5cy5qc1BLAQIeAwoAAAAAAAAAAAClfRN+6gYAAOoGAAApAAAAAAAAAAAAAACkgYf8AQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL21ha2Utb25jZS5qc1BLAQIeAwoAAAAAAAAAAABoc8uBbwkAAG8JAAAtAAAAAAAAAAAAAACkgbgDAgBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL3dhdGNoLXByb21pc2UuanNQSwECHgMKAAAAAAAAAAAAnQGtIwUFAAAFBQAAIQAAAAAAAAAAAAAApIFyDQIAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL2NhY2hlLmpzUEsBAh4DCgAAAAAAAAAAAHnwkU4IAgAACAIAACAAAAAAAAAAAAAAAKSBthICAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy9tYWluLmpzUEsBAh4DCgAAAAAAAAAAAAp16cMUBAAAFAQAACEAAAAAAAAAAAAAAKSB/BQCAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy9zdGF0ZS5qc1BLAQIeAwoAAAAAAAAAAAD1t26JnRcAAJ0XAAAhAAAAAAAAAAAAAACkgU8ZAgBAYWdvcmljL2NhY2hlLXYwLjMuMi9zcmMvc3RvcmUuanNQSwECHgMKAAAAAAAAAAAAh5JSp08BAABPAQAAIQAAAAAAAAAAAAAApIErMQIAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAOF8hTvqHAAA6hwAACYAAAAAAAAAAAAAAKSBuTICAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9hbW91bnRNYXRoLmpzUEsBAh4DCgAAAAAAAAAAAOiT/y8jBAAAIwQAACcAAAAAAAAAAAAAAKSB508CAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9hbW91bnRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAADLEMbG0wUAANMFAAAnAAAAAAAAAAAAAACkgU9UAgBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvZGlzcGxheUluZm8uanNQSwECHgMKAAAAAAAAAAAAUfBylgMCAAADAgAAIQAAAAAAAAAAAAAApIFnWgIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAFYNhUWGFgAAhhYAACUAAAAAAAAAAAAAAKSBqVwCAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9pc3N1ZXJLaXQuanNQSwECHgMKAAAAAAAAAAAA72F5q/cFAAD3BQAAOgAAAAAAAAAAAAAApIFycwIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAAATTu0+tQUAALUFAAA6AAAAAAAAAAAAAACkgcF5AgBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAEOT4BZzBAAAcwQAADYAAAAAAAAAAAAAAKSBzn8CAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAAAD8kbKXAYAAFwGAAA2AAAAAAAAAAAAAACkgZWEAgBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAqh1vP4cDAACHAwAAIwAAAAAAAAAAAAAApIFFiwIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3BheW1lbnQuanNQSwECHgMKAAAAAAAAAAAAIfnH9w0gAAANIAAAKQAAAAAAAAAAAAAApIENjwIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3BheW1lbnRMZWRnZXIuanNQSwECHgMKAAAAAAAAAAAA2cc3cfQQAAD0EAAAIQAAAAAAAAAAAAAApIFhrwIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3B1cnNlLmpzUEsBAh4DCgAAAAAAAAAAALtDDBziBQAA4gUAAC0AAAAAAAAAAAAAAKSBlMACAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy90cmFuc2llbnROb3RpZmllci5qc1BLAQIeAwoAAAAAAAAAAABy3Wqx+BgAAPgYAAAmAAAAAAAAAAAAAACkgcHGAgBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvdHlwZUd1YXJkcy5qc1BLAQIeAwoAAAAAAAAAAAD+/laOBRoAAAUaAAAnAAAAAAAAAAAAAACkgf3fAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvY2FsbGJhY2suanNQSwECHgMKAAAAAAAAAAAAEj5XxRwGAAAcBgAAJQAAAAAAAAAAAAAApIFH+gIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2NvbmZpZy5qc1BLAQIeAwoAAAAAAAAAAADQ365PTgQAAE4EAAAkAAAAAAAAAAAAAACkgaYAAwBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZGVidWcuanNQSwECHgMKAAAAAAAAAAAAJmmVZpYCAACWAgAAJQAAAAAAAAAAAAAApIE2BQMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2Vycm9ycy5qc1BLAQIeAwoAAAAAAAAAAADNeqQpzAQAAMwEAAAkAAAAAAAAAAAAAACkgQ8IAwBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAA57a6PKQVAACkFQAALwAAAAAAAAAAAAAApIEdDQMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNQSwECHgMKAAAAAAAAAAAACTqpybAOAACwDgAAJgAAAAAAAAAAAAAApIEOIwMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL21hcnNoYWwuanNQSwECHgMKAAAAAAAAAAAAleyqvXUIAAB1CAAAKwAAAAAAAAAAAAAApIECMgMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL21ldGhvZC10b29scy5qc1BLAQIeAwoAAAAAAAAAAADmh5yvFh0AABYdAAAxAAAAAAAAAAAAAACkgcA6AwBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAAC1GjYoBgAAKAYAACwAAAAAAAAAAAAAAKSBJVgDAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90ZXN0aW5nLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAPRK7R4GAwAABgMAACgAAAAAAAAAAAAAAKSBl14DAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90eXBlQ2hlY2suanNQSwECHgMKAAAAAAAAAAAArVi+CVcDAABXAwAAKQAAAAAAAAAAAAAApIHjYQMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAAh5JSp08BAABPAQAAKgAAAAAAAAAAAAAApIGBZQMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVzLWluZGV4LmpzUEsBAh4DCgAAAAAAAAAAABzwdbAfBwAAHwcAACoAAAAAAAAAAAAAAKSBGGcDAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy91cGdyYWRlLWFwaS5qc1BLAQIeAwoAAAAAAAAAAABttfUwKCMAACgjAAAkAAAAAAAAAAAAAACkgX9uAwBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAIJVqyBQIAAAUCAAAMwAAAAAAAAAAAAAApIHpkQMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzUEsBAh4DCgAAAAAAAAAAAOn1AVHiBwAA4gcAACQAAAAAAAAAAAAAAKSBTpoDAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADxQQ7ghBAAAIQQAAAnAAAAAAAAAAAAAACkgXKiAwBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvbm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAAlQRrDE4rAABOKwAAKgAAAAAAAAAAAAAApIE7swMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3B1Ymxpc2gta2l0LmpzUEsBAh4DCgAAAAAAAAAAADQZ89EhCAAAIQgAAC4AAAAAAAAAAAAAAKSB0d4DAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdG9yZWQtbm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAAnY0qkAkWAAAJFgAAJwAAAAAAAAAAAAAApIE+5wMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N0b3Jlc3ViLmpzUEsBAh4DCgAAAAAAAAAAAIM8jbM3EgAANxIAACgAAAAAAAAAAAAAAKSBjP0DAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdWJzY3JpYmUuanNQSwECHgMKAAAAAAAAAAAAEK1p3uIHAADiBwAAKQAAAAAAAAAAAAAApIEJEAQAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N1YnNjcmliZXIuanNQSwECHgMKAAAAAAAAAAAAX2geNfUDAAD1AwAAJAAAAAAAAAAAAAAApIEyGAQAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3RvcGljLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACoAAAAAAAAAAAAAAKSBaRwEAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy90eXBlcy1pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABTWNDLjQYAAI0GAAAtAAAAAAAAAAAAAACkgQAeBABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi90b29scy90ZXN0U3VwcG9ydHMuanNQSwECHgMKAAAAAAAAAAAAGjl5naMdAACjHQAAMwAAAAAAAAAAAAAApIHYJAQAQGFnb3JpYy9zbWFydC13YWxsZXQtdjAuNS4zL3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzUEsBAh4DCgAAAAAAAAAAAKkp1sCcDQAAnA0AACEAAAAAAAAAAAAAAKSBzEIEAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADXs6x+PwUAAD8FAAAsAAAAAAAAAAAAAACkgadQBABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qc1BLAQIeAwoAAAAAAAAAAAAyAVX2AQUAAAEFAAAwAAAAAAAAAAAAAACkgTBWBABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanNQSwECHgMKAAAAAAAAAAAAl46XO70QAAC9EAAAMQAAAAAAAAAAAAAApIF/WwQAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAACNSUio6gsAAOoLAAAxAAAAAAAAAAAAAACkgYtsBABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAEqRF/XJDQAAyQ0AADUAAAAAAAAAAAAAAKSBxHgEAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAACt5d6eKCgAAigoAADUAAAAAAAAAAAAAAKSB4IYEAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAK1WK+LADgAAwA4AAC4AAAAAAAAAAAAAAKSBvZEEAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAh5JSp08BAABPAQAAIQAAAAAAAAAAAAAApIHJoAQAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAIdAXNyyFgAAshYAACgAAAAAAAAAAAAAAKSBV6IEAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9leG8tdXRpbHMuanNQSwECHgMKAAAAAAAAAAAA3XOiDq0IAACtCAAAJAAAAAAAAAAAAAAApIFPuQQAQGFnb3JpYy92YXQtZGF0YS12MC41LjIvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAGWWpiTKFgAAyhYAADAAAAAAAAAAAAAAAKSBPsIEAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy92YXQtZGF0YS1iaW5kaW5ncy5qc1BLAQIeAwoAAAAAAAAAAAAslRxJRREAAEURAAAfAAAAAAAAAAAAAACkgVbZBABAYWdvcmljL3ZhdHMtdjAuMTUuMS9zcmMvY3JjLmpzUEsBAh4DCgAAAAAAAAAAABQlvW9ZIQAAWSEAACUAAAAAAAAAAAAAAKSB2OoEAEBhZ29yaWMvdmF0cy12MC4xNS4xL3NyYy9saWItYm9hcmQuanNQSwECHgMKAAAAAAAAAAAAAi7Ho8ILAADCCwAALQAAAAAAAAAAAAAApIF0DAUAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9hY3Rpb25zLmpzUEsBAh4DCgAAAAAAAAAAAJzixjyuAgAArgIAADUAAAAAAAAAAAAAAKSBgRgFAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvYmlnaW50U3RyaW5naWZ5LmpzUEsBAh4DCgAAAAAAAAAAADqupTppCQAAaQkAAC4AAAAAAAAAAAAAAKSBghsFAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvZGF0ZS1ub3cuanNQSwECHgMKAAAAAAAAAAAAmHUVKe0SAADtEgAAOgAAAAAAAAAAAAAApIE3JQUAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9maW5kT3JNYWtlSW52aXRhdGlvbi5qc1BLAQIeAwoAAAAAAAAAAAA8aU7GUAIAAFACAAA0AAAAAAAAAAAAAACkgXw4BQBAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2ludGVybmFsLXR5cGVzLmpzUEsBAh4DCgAAAAAAAAAAABV4Uy+oCAAAqAgAADEAAAAAAAAAAAAAAKSBHjsFAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvaXNzdWVyVGFibGUuanNQSwECHgMKAAAAAAAAAAAAq92NmiweAAAsHgAAMwAAAAAAAAAAAAAApIEVRAUAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9saWItZGVoeWRyYXRlLmpzUEsBAh4DCgAAAAAAAAAAAAND6jeRpQAAkaUAADAAAAAAAAAAAAAAAKSBkmIFAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvbGliLXdhbGxldC5qc1BLAQIeAwoAAAAAAAAAAABT4BLqvwIAAL8CAAAsAAAAAAAAAAAAAACkgXEIBgBAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL3B1YnN1Yi5qc1BLAQIeAwoAAAAAAAAAAAC8xd4fFDUAABQ1AAAsAAAAAAAAAAAAAACkgXoLBgBAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL3dhbGxldC5qc1BLAQIeAwoAAAAAAAAAAADKDpYscBgAAHAYAAAzAAAAAAAAAAAAAACkgdhABgBAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanNQSwECHgMKAAAAAAAAAAAA6bPLfI0BAACNAQAAHgAAAAAAAAAAAAAApIGZWQYAQGFnb3JpYy96b25lLXYwLjIuMi9kdXJhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAGqwJS4yEQAAMhEAACIAAAAAAAAAAAAAAKSBYlsGAEBhZ29yaWMvem9uZS12MC4yLjIvc3JjL2R1cmFibGUuanNQSwECHgMKAAAAAAAAAAAANJDkptMEAADTBAAAKwAAAAAAAAAAAAAApIHUbAYAQGVuZG8vY29tbW9uLXYxLjIuNS9hcHBseS1sYWJlbGluZy1lcnJvci5qc1BLAQIeAwoAAAAAAAAAAAC3mQvAZgQAAGYEAAAqAAAAAAAAAAAAAACkgfBxBgBAZW5kby9jb21tb24tdjEuMi41L2Zyb20tdW5pcXVlLWVudHJpZXMuanNQSwECHgMKAAAAAAAAAAAACm/VKz0CAAA9AgAAJAAAAAAAAAAAAAAApIGedgYAQGVuZG8vY29tbW9uLXYxLjIuNS9pZGVudC1jaGVja2VyLmpzUEsBAh4DCgAAAAAAAAAAALtD5hd+AgAAfgIAACYAAAAAAAAAAAAAAKSBHXkGAEBlbmRvL2NvbW1vbi12MS4yLjUvbGlzdC1kaWZmZXJlbmNlLmpzUEsBAh4DCgAAAAAAAAAAAPAoIjtlAwAAZQMAACoAAAAAAAAAAAAAAKSB33sGAEBlbmRvL2NvbW1vbi12MS4yLjUvbWFrZS1hcnJheS1pdGVyYXRvci5qc1BLAQIeAwoAAAAAAAAAAADjetlKPwIAAD8CAAAkAAAAAAAAAAAAAACkgYx/BgBAZW5kby9jb21tb24tdjEuMi41L21ha2UtaXRlcmF0b3IuanNQSwECHgMKAAAAAAAAAAAAqWJQiggDAAAIAwAAIQAAAAAAAAAAAAAApIENggYAQGVuZG8vY29tbW9uLXYxLjIuNS9vYmplY3QtbWFwLmpzUEsBAh4DCgAAAAAAAAAAAOFzK0znAwAA5wMAACYAAAAAAAAAAAAAAKSBVIUGAEBlbmRvL2NvbW1vbi12MS4yLjUvb2JqZWN0LW1ldGEtbWFwLmpzUEsBAh4DCgAAAAAAAAAAAO0+I7HtAwAA7QMAACQAAAAAAAAAAAAAAKSBf4kGAEBlbmRvL2NvbW1vbi12MS4yLjUvdGhyb3ctbGFiZWxlZC5qc1BLAQIeAwoAAAAAAAAAAABUnPw8mQEAAJkBAAAhAAAAAAAAAAAAAACkga6NBgBAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYvaW5kZXguanNQSwECHgMKAAAAAAAAAAAATeP7/PUNAAD1DQAAKwAAAAAAAAAAAAAApIGGjwYAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42L3NyYy9lbnYtb3B0aW9ucy5qc1BLAQIeAwoAAAAAAAAAAADX1j4G8QcAAPEHAAAcAAAAAAAAAAAAAACkgcSdBgBAZW5kby9lcnJvcnMtdjEuMi41L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAMZt/ZukEAAApBAAACMAAAAAAAAAAAAAAKSB76UGAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41L3NyYy9FLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACkAAAAAAAAAAAAAAKSB1LYGAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41L3NyYy9leHBvcnRzLmpzUEsBAh4DCgAAAAAAAAAAAM7iumi1DAAAtQwAACcAAAAAAAAAAAAAAKSBargGAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41L3NyYy9sb2NhbC5qc1BLAQIeAwoAAAAAAAAAAABhurys8QwAAPEMAAA1AAAAAAAAAAAAAACkgWTFBgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qc1BLAQIeAwoAAAAAAAAAAACf7/MTPAMAADwDAAApAAAAAAAAAAAAAACkgajSBgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvbm8tc2hpbS5qc1BLAQIeAwoAAAAAAAAAAABGMUZBaQkAAGkJAAAtAAAAAAAAAAAAAACkgSvWBgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvdHJhY2stdHVybnMuanNQSwECHgMKAAAAAAAAAAAAe9gXB1sCAABbAgAAIwAAAAAAAAAAAAAApIHf3wYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUvdXRpbHMuanNQSwECHgMKAAAAAAAAAAAA3BBWdlcCAABXAgAAGQAAAAAAAAAAAAAApIF74gYAQGVuZG8vZXhvLXYxLjUuMy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAAbVpeV7hQAAO4UAAAiAAAAAAAAAAAAAACkgQnlBgBAZW5kby9leG8tdjEuNS4zL3NyYy9leG8tbWFrZXJzLmpzUEsBAh4DCgAAAAAAAAAAADGqSZYRMAAAETAAACEAAAAAAAAAAAAAAKSBN/oGAEBlbmRvL2V4by12MS41LjMvc3JjL2V4by10b29scy5qc1BLAQIeAwoAAAAAAAAAAABytQfPPAIAADwCAAAlAAAAAAAAAAAAAACkgYcqBwBAZW5kby9leG8tdjEuNS4zL3NyYy9nZXQtaW50ZXJmYWNlLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAAB0AAAAAAAAAAAAAAKSBBi0HAEBlbmRvL2V4by12MS41LjMvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAA0vIA1bAgAAWwIAAB0AAAAAAAAAAAAAAKSBkC4HAEBlbmRvL2Zhci12MS4xLjUvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAIjgb/J5BwAAeQcAAB0AAAAAAAAAAAAAAKSBJjEHAEBlbmRvL21hcnNoYWwtdjEuNS4zL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAHLn8HFuQwAAbkMAACoAAAAAAAAAAAAAAKSB2jgHAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9lbmNvZGVQYXNzYWJsZS5qc1BLAQIeAwoAAAAAAAAAAAAwjHTXciIAAHIiAAArAAAAAAAAAAAAAACkgZB8BwBAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzUEsBAh4DCgAAAAAAAAAAAAeEjUlLIgAASyIAAC0AAAAAAAAAAAAAAKSBS58HAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qc1BLAQIeAwoAAAAAAAAAAADcHLoAJiMAACYjAAAqAAAAAAAAAAAAAACkgeHBBwBAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvbWFyc2hhbC1qdXN0aW4uanNQSwECHgMKAAAAAAAAAAAAbcoZY2cGAABnBgAALQAAAAAAAAAAAAAApIFP5QcAQGVuZG8vbWFyc2hhbC12MS41LjMvc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzUEsBAh4DCgAAAAAAAAAAAFcTv9dSJwAAUicAACMAAAAAAAAAAAAAAKSBAewHAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9tYXJzaGFsLmpzUEsBAh4DCgAAAAAAAAAAAK8iuY7sJQAA7CUAACUAAAAAAAAAAAAAAKSBlBMIAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9yYW5rT3JkZXIuanNQSwECHgMKAAAAAAAAAAAAh5JSp08BAABPAQAAIQAAAAAAAAAAAAAApIHDOQgAQGVuZG8vbWFyc2hhbC12MS41LjMvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAALI5TcNgBQAAYAUAAB4AAAAAAAAAAAAAAKSBUTsIAEBlbmRvL25hdC12NS4wLjEwL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAAt4qeYRAoAAEQKAAAgAAAAAAAAAAAAAACkge1ACABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAD+FZ/rYAYAAGAGAAAoAAAAAAAAAAAAAACkgW9LCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvY29weUFycmF5LmpzUEsBAh4DCgAAAAAAAAAAAKSpjes3CAAANwgAACkAAAAAAAAAAAAAAKSBFVIIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9jb3B5UmVjb3JkLmpzUEsBAh4DCgAAAAAAAAAAAMZ9Al1sCgAAbAoAAC4AAAAAAAAAAAAAAKSBk1oIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9kZWVwbHlGdWxmaWxsZWQuanNQSwECHgMKAAAAAAAAAAAAoHX1XEQSAABEEgAAJAAAAAAAAAAAAAAApIFLZQgAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL2Vycm9yLmpzUEsBAh4DCgAAAAAAAAAAAFQYrimYBQAAmAUAACsAAAAAAAAAAAAAAKSB0XcIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9pdGVyLWhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAA5QY3uVoRAABaEQAAJwAAAAAAAAAAAAAApIGyfQgAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL21ha2UtZmFyLmpzUEsBAh4DCgAAAAAAAAAAAG5j4lmMBAAAjAQAACkAAAAAAAAAAAAAAKSBUY8IAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9tYWtlVGFnZ2VkLmpzUEsBAh4DCgAAAAAAAAAAAHnvc1kpFQAAKRUAADAAAAAAAAAAAAAAAKSBJJQIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAAA/mIlJ5SQAAOUkAAAqAAAAAAAAAAAAAACkgZupCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvcGFzc1N0eWxlT2YuanNQSwECHgMKAAAAAAAAAAAAd9FSe8QXAADEFwAAKAAAAAAAAAAAAAAApIHIzggAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3JlbW90YWJsZS5qc1BLAQIeAwoAAAAAAAAAAACbaC+klwwAAJcMAAArAAAAAAAAAAAAAACkgdLmCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvc2FmZS1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAABkIm22+BwAAvgcAACUAAAAAAAAAAAAAAKSBsvMIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9zdHJpbmcuanNQSwECHgMKAAAAAAAAAAAAQfcjRQkKAAAJCgAAJQAAAAAAAAAAAAAApIGz+wgAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3N5bWJvbC5qc1BLAQIeAwoAAAAAAAAAAAA6ytL1JgcAACYHAAAlAAAAAAAAAAAAAACkgf8FCQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvdGFnZ2VkLmpzUEsBAh4DCgAAAAAAAAAAALH08vgPCQAADwkAACkAAAAAAAAAAAAAAKSBaA0JAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACQAAAAAAAAAAAAAAKSBvhYJAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAAVVGkMvA4AALwOAAAeAAAAAAAAAAAAAACkgU8YCQBAZW5kby9wYXR0ZXJucy12MS40LjMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAA+L/F34IyAACCMgAAKgAAAAAAAAAAAAAApIFHJwkAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL2NoZWNrS2V5LmpzUEsBAh4DCgAAAAAAAAAAANL+vHU6FQAAOhUAAC0AAAAAAAAAAAAAAKSBEVoJAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMva2V5cy9jb21wYXJlS2V5cy5qc1BLAQIeAwoAAAAAAAAAAAB9Z1ck4Q0AAOENAAApAAAAAAAAAAAAAACkgZZvCQBAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL2tleXMvY29weUJhZy5qc1BLAQIeAwoAAAAAAAAAAACTDHgB6AsAAOgLAAApAAAAAAAAAAAAAACkgb59CQBAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL2tleXMvY29weVNldC5qc1BLAQIeAwoAAAAAAAAAAABsEyht9xIAAPcSAAA5AAAAAAAAAAAAAACkge2JCQBAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAAvjyHBGwWAABsFgAANQAAAAAAAAAAAAAApIE7nQkAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAA0g0Dya0cAACtHAAANQAAAAAAAAAAAAAApIH6swkAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAAsbeQNRYZAAAWGQAANgAAAAAAAAAAAAAApIH60AkAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzUEsBAh4DCgAAAAAAAAAAAMBhos8zrgAAM64AADUAAAAAAAAAAAAAAKSBZOoJAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACIAAAAAAAAAAAAAAKSB6pgKAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAA5KbFhFEGAABRBgAAIQAAAAAAAAAAAAAApIF5mgoAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAMAoeclbAgAAWwIAACoAAAAAAAAAAAAAAKSBCaEKAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNS9zcmMvaXMtcHJvbWlzZS5qc1BLAQIeAwoAAAAAAAAAAABtLwE4ogcAAKIHAAApAAAAAAAAAAAAAACkgayjCgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjUvc3JjL21lbW8tcmFjZS5qc1BLAQIeAwoAAAAAAAAAAAD4cDHEggUAAIIFAAA0AAAAAAAAAAAAAACkgZWrCgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjUvc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACUAAAAAAAAAAAAAAKSBabEKAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNS9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAANN+elaARAACgEQAAHAAAAAAAAAAAAAAApIH7sgoAQGVuZG8vc3RyZWFtLXYxLjIuNS9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABqoyJQyAEAAMgBAAAcAAAAAAAAAAAAAACkgdXECgBqZXNzaWUuanMtdjAuMy40L3NyYy9tYWluLmpzUEsBAh4DCgAAAAAAAAAAAHsYXhl4AQAAeAEAAB8AAAAAAAAAAAAAAKSB18YKAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL0UuanNQSwECHgMKAAAAAAAAAAAAun+i63UCAAB1AgAALAAAAAAAAAAAAAAApIGMyAoAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanNQSwECHgMKAAAAAAAAAAAA6FQve+sBAADrAQAAIgAAAAAAAAAAAAAApIFLywoAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFpbi5qc1BLAQIeAwoAAAAAAAAAAACXQPPL1gcAANYHAAAkAAAAAAAAAAAAAACkgXbNCgBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9tYWtlcnMuanNQSwECHgMKAAAAAAAAAAAAWuO/OlEDAABRAwAAKQAAAAAAAAAAAAAApIGO1QoAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanNQSwECHgMKAAAAAAAAAAAAWkIhVY0BAACNAQAAIgAAAAAAAAAAAAAApIEm2QoAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvbWFpbi5qc1BLBQYAAAAAngCeAFM1AADz2goAAAA=","endoZipBase64Sha512":"acc5c257a8751536f2f0fd3fc591145708b6c12df4bd91fd82a644412ef5c184d74aa59acfee21e28c2631926668f1effcd02d5d7714cc69e0fe7243eb273f56"};
1
+ export default {"moduleFormat":"endoZipBase64","endoZipBase64":"UEsDBAoAAAAAAAAAAACAT33QLeUBAC3lAQAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zIiwKICAgICJtb2R1bGUiOiAiLi9zcmMvd2FsbGV0LmpzIgogIH0sCiAgImNvbXBhcnRtZW50cyI6IHsKICAgICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvYmFzZS16b25lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvdG9vbHMvKiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLyoiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvem9uZS1oZWxwZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vem9uZS1oZWxwZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pZGVudC1jaGVja2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGlzdC1kaWZmZXJlbmNlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1hc3NpZ24uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtYXNzaWduLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi90aHJvdy1sYWJlbGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rocm93LWxhYmVsZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vaGVhcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJoZWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDg5Zjg3MGM4MGJiY2MwYzBmMzc3MDk0YTI2NGQ1YjIwNmM1OTkxZWRjYzM0MmQzNmQwOTYyYTRlZTEyNWE0MzAyNzRhNGRhYzljMzlhZTczZTBiZjc3MWYwYWRiZmRiOThhMmQ2YmQxYmNlMmFlODg0NjYyMmMxMjJjZDk3MjAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhwb3J0cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhwb3J0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3NjdiOWRlODMwYTZlZDFiZGJhMjRlMTc3YTFjZTUwZjA4M2JjZDc2Y2QzMzcwMzIzNmEyNDQ4YzQxNzgyYzE0MDdjNWZkODVmOTA1ZWY4ZGVjNzljMTJlZGQwMjk1MjE4N2MyMTYxNjZmYTM0YzVmYWEwYjE1NTNkMjA4YTdhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2hlYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2hlYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5ZGUzYjE2NWYzNTc0MGJlMzE4NzQyZGE5YTc1YzkyOTEwNmYyYTc4NDQwYTBjMTY5MTc5OGZlZWMzZDhhMzFlOGEwZDNlZjVjMDlkZmEzNjIxZjgwYzQ4NmQxZDk1OTk3YWUzYjc1YjdiYjRiZDZmMDZkNDZhYzJjMWFhMDY5MyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMWJiN2Y1YTdjNjIyY2E1Y2UzZDIyMmZiMWU2NjY0ZmY4NDg3YjA0NjU2YjViOWQ4ZmU3MGM1OGJhNWM2ZWViNDMyMzEzYzliN2IxYTEwNjdhYjAxZDcxMWFjZDEyNGUwNmUxZWUzNmYyNzk3MjQ2NjU1ZDVkMzY5Njg0MTM3ZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pcy1wYXNzYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXMtcGFzc2FibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1YTAwM2QwZTdkMDkzZGQ2MWUyMGFlMWJmMGVlYzY4OTE5NjBlYmE5ZWVkMTNkM2FjMDEzODlmYWFiMjQwMmY4NTllMmJjYTcwOTcwZjg1NDdjMDliNWY5YjQ2M2ZlNDhiYjdjZGQzMDZiZjhmMzNlYjQ0NDFjMmJmYzc4Y2NmMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjBmZDI2YTk3YTA1YjY0NGY4YTk5N2Y1MDQ2ZGFiZjlhMmUzZTE0ZWMwZDU5YmMyYjA3YjMwZDI3NGM5MDAyMWRiMjU1YTYzNjFmNmFkZDYxMDMwODUxNzg0OGEwOTYzNDk4OTgzMjM4NDYyM2E0MjZhNTZkYzBlNGM0ZTU0YzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZS1vbmNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlLW9uY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhYzYzODJhYmM2NDlhM2ZlMGQ2ZTMwYTAzOWExYjhjMzg3MjA2OWZlZjE2NjQ0ZjMzYjNhNTRlZGI1MGJjYzQ4MTliODZkMThmY2RmY2RkMTAyMDNmZTRlMDRlOTM3ZDY1YjY4ZWMxYTZmNDM2MzVkZmI4MmIwOTVkNzBhY2ViNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy93YXRjaC1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy93YXRjaC1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZGNkZWExMDc0ZmE2NGRhMjRjZDk5NmI3ODM0MDM5Y2FlNDlmODFhZDE4M2JlNmJlYjUzOTU5MzQ5MGJkZjM2YmRhYzZjZGY1NGQ3NWRiMTc0ZGUzMDhmYTFmYzk2Y2IyMzQ3NjMyNjJiZDUzZGNmNmI5OTY5NGJhYTRmODE1ZDYiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvY2FjaGUtdjAuMy4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2NhY2hlIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvY2FjaGUtdjAuMy4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvY2FjaGUtdjAuMy4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvY2FjaGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jYWNoZS12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3N1YnNjcmliZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NhY2hlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jYWNoZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjllOWY3NDU1YTJlYWJjODYyNjI2ZWVmMjNmNGJhN2ZiOGU4Yjk4YWQzOGEyOWYzZTAzNjRjMDQ5NmJkZTg5ZDg0YjBjOTlkMjJjOWU1NGYxNzIyYTIyZTBlODZjYmQzNDNhNTQxZGY3MTE5MDYzZTRhYWU5YjgwYjUzYWZhNDNlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmODk2MTc0N2U0MWNhM2M2ZGJlYWYzMDViZjFkZTk3MmEyNWMzZDM0MzlmM2FjNGQ2MjUyYzEyMjI5N2E5ZGQ3NjliMmQ3MTY5NWQ0NzZmYWRlNjY2MmIyNWI5NDcwNzBkOWU0YWUzNTczMGI0N2I2YzU0NWQ3MGFhYzZkYWI2NSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdGF0ZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RhdGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkYzQ4MDdmNDRiNGQwODQ1ZWJiNWYyMzY4ZWIxMmEwZjk5MDZmZGIxMTQxNmIzMmVkMWE2MTcxNDE0ZDM5YjdkZjBiZDUxNjVhZjVlODczZWI4YWVlNWM0YWRmZGY3MmQwMjJjZTVhY2VjN2E1YjgzYTcyZTExYzdjMWE5ZTA5NiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlNmYyODQyYjQ1ZDE5N2FiZmMwOTk1NGRhMWQxYjg4MjlkMGJiMWMyNmYzNTdiODA2YWJmM2JhMDg3NGQ0ZDczN2YxNjFiYTk0ODY3ODUyNDJmNmY1NDlmYWFkOWQ2MWRhNGU2YWNlNWJjMzEzNDI2NTZjNmIzNmY1NDgxNDY3NSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmNzY3YjlkZTgzMGE2ZWQxYmRiYTI0ZTE3N2ExY2U1MGYwODNiY2Q3NmNkMzM3MDMyMzZhMjQ0OGM0MTc4MmMxNDA3YzVmZDg1ZjkwNWVmOGRlYzc5YzEyZWRkMDI5NTIxODdjMjE2MTY2ZmEzNGM1ZmFhMGIxNTUzZDIwOGE3YSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvZXJ0cCIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL2VydHAtdjAuMTYuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2VydHAtdjAuMTYuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2VydHAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3N1YnNjcmliZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kdXJhYmxlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9oZWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL3ZpcnR1YWwuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdmlydHVhbC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hbW91bnRNYXRoLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9hbW91bnRNYXRoLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmQ1ZTljYmY0ZWQ4NDVkZGM5NGJlY2JjMzc3ZTIxZWFlM2Y4MDA3ZDI5NDI3YmMxNWMzZTViY2RhY2VkNWNhNzRkYWIyODQzNTk4NGJhNThlNzZkMTdkMGFkNzAxYmQ4NDAzNGJlNzJjNWIxMDA4ZmMwZWM1MDJjZDUwZmM5YzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYW1vdW50U3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Ftb3VudFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDFhMWU2MzQzOTg0MTg5YTc4MGFjNDYyY2YyYTBhYzhkYzljNDA1MDViYTExODBmODJiZDZiY2YxNGE4ZDBkN2Y2OThhNGM2YTQ4NzdhZTY2MWRhNzhjYTVmZmEyZWQ3NTM5M2MwNWMwM2MyZTk5Njk1ZjAyMjA3MjAzZDNiNDgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGlzcGxheUluZm8uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Rpc3BsYXlJbmZvLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDgyZjI4NjMxOTljN2YzNWM2OTI3ODhkYjMxN2U5MDQ4YWNkNmYxMWU1Y2IzZDQ0MWNiODE1MTViZTFkY2E4NmY0MjA0ZjBhMmE1OWU2Yzk5NzA5OGQ0NDlhMDhjMTJiOTFjZWEyYTcwZWM4NzI4N2Y2YzUzODI3YWQ4MDk5OGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZGRmNDAwZmRjMGU3YmJkZWJkMTk2YmU0OTUxYWRhZjE2ZmM4ODk3OTMzMjk3OWQ3ODZlYTUzYTAwZTZlMGFjZDUwODYzYWQ1ZDQxZTA2NjZmMDQ5N2M0NTc0MTYyZjA0MGVkNzZiZmY5OTY0Y2M1OTdmZGQ1M2RjNTE5YmRiZTIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXNzdWVyS2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pc3N1ZXJLaXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3MTc0NmUzNTM4ODk4NjI4OGU1NjA4ZjZkNDY3MmM0NmNlNTQyMTMyOTRiMGZmMGUxYWM3NzhkY2Q3NmJlMDMwZjM0NTBmMDZjMjJkOGU2ZDIzMWRlODYyMzlkODE4NmE2MmZkYTZlNjc4YzkzN2I0OGI2ZjJlZmZjYWM4ZDUyMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUzZDU5ODA0NzYyNzg1NmExZDMyMWJiMGFhNThlNzM5OTlkZWNjN2YzYWFhNzE4NzBhYmIwYmIwZDc0YmJhNDYxOGQ1MDU0NDJjZDU3OGJmZTljNDcxYmZmOTVmMjAwMGFlM2I3NGIxZDFjMmNlYzc4ZmFmMzM5ZjVjODE3NTBmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjM3YzAxODA2NTM4M2M0MmQyNWMyNzY1MTRjNDYyMDJlYWU3ZDFmMWVhMzk3NTU5NjVmMGJhOTljNmRlYWRlM2JjM2MyYmQ2NjU5NjlmOWZkOTBkOWE0NGI3MmM4NjI4Y2JkZjkxMDJlMzJjZDQ5ZDI5NTEyM2RlZTAxN2I1ZDAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGYxYjdlYTljYzA1NmNiNTZjYTM0YmNjNWYzYThlNTdiNTcwMzYwZTNlYzRkZmJjYjIwY2E3YTI4NDZmZDIxNGFjYzNiYWU5MmI4NzBjOWIzY2VjMDE5MjI5NTAyNmM5NTA1ZGFmZTA5NjM5MDMwZjhiZmUwM2I4MzJhNGFjMzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGQ2MTYzYzU0MzQ5MDdmNzQ5N2E4ZDVhOGFjYTRmZmQ3OGMxNGY4MjZiOTA4NzViMTUzMjY2MzgyNzE3OTVlYjU0ZmJhYTIxOTdmYmYxNDA0NTMwNDVmZmFjYmEwYTFiNzYzYjMxNDlkYTRkZWY1NDRiNTUzZTIxMjc0NTlmYWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF5bWVudC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGF5bWVudC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA5OGQxMzQ4YmQ2ODJiYTI0YTlkZTc3NzgzMmRmMzM3YzRmYWI5MWU4OTY0ODZlNzcyNTgxNjc3OTk5MTM0OWJkZmZhYWRkYTkyYzQwZDM0Yzc3YTM3MmI4NjM3ZTNhN2U0NTU5MWExZjliMDczNGNmMGFkYjQ4YWNkZGQ1NTVhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BheW1lbnRMZWRnZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BheW1lbnRMZWRnZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1ODZhM2M5M2FhZjkzYTM2NTMwMGExNjIzOTBlZTA1ODhlMDg1N2NhMjU3NGYwNTAwN2EwNTg5YmFlZTIzYTM4MjdjMDdmYTYyNjE0NjhlZGQ0MDVlZjkzZWVlYTEzZmMzOWViOTFkZmNiODY5YTA2OGZhYTk3NmRkMDkzN2MwYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdXJzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHVyc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3NTY2ZThlNjMwN2ZhZGI1NzQxYTJlMWYyNDZlNTdjODRmMGU3MTk1NWQ4OTc2ZmZjNzEzMzZkZTJkNWM4MzQ5NDJhYTkzNGJlNDE1NDA5ZWIzN2Y2OGNjOWMyMGM3OWFhMTk2MWJjMmE4MDVlN2U1NTVkZjVlZDc3Njg5NDRmZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90cmFuc2llbnROb3RpZmllci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHJhbnNpZW50Tm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhODI0ZDU2ZmEwNWYzZTRhYWYwOGQ1MjQ1NTM5NzY2Y2FkNjVlNjU0YzM2YTU1ZWIyOTYyN2Y4ODU4YzQ3YjgxZTU3NmU0ZDk4OTQxMzFkYTQ3OGI0ZmI4ODAwNGYwOTk1OWYwNzdhZGYyMTQ1YWI1NjA5YmVjMGExOTQ3OGUzNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjM3N2U4MDA1NDJkYjI4ZWYzNzk3NGJiMGFjNmI1NTljODA1Yjk0MmJkZDM0ZDk5NDljOGQ5NWE5ZjBmMTIxZTVmYWQwOGFhZTEyOGJmMDRlM2MxMTU5MjVhNTQ5OTVmOTYwMmU0YTY1MzZiOWE5MjY5NjlkYWViNmIyOGQ3MmIiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2ludGVybmFsIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3Rvb2xzLyoiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy8qIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3pvbmUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3pvbmUtaGVscGVycy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtYXNzaWduLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLWFzc2lnbi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90aHJvdy1sYWJlbGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvZGVidWcuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2RlYnVnLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvbGVnYWN5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sZWdhY3kuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW5pdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW5pdC12MS4xLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbml0L3ByZS1idW5kbGUtc291cmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wcmUtYnVuZGxlLXNvdXJjZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbml0L3ByZS1yZW1vdGluZy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbml0LXYxLjEuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcHJlLXJlbW90aW5nLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2luaXQvcHJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2luaXQtdjEuMS40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wcmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW5pdC91bnNhZmUtZmFzdC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbml0LXYxLjEuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdW5zYWZlLWZhc3QuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3N0cmVhbSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9zdHJlYW0tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9zdHJlYW0vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3N0cmVhbS12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJhbnlsb2dnZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiYW55bG9nZ2VyLXYwLjIxLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FueWxvZ2dlci5qcyIKICAgICAgICB9LAogICAgICAgICJqZXNzaWUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL21haW4uanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY2FsbGJhY2suanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NhbGxiYWNrLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODFmZDUyOGUyNDdhMmZiMmY4MjdjMjgxZGU0NDM5YjYxNmRjNmUwNzhiMmI3MzQyZjZmNjY3NDc3NjY5OTJhMmI1MDMwZDcxMzU3YjZlYTIyMGIzYWRiY2VmM2Y1NzE1YmJlZmZlZDNhNDI5NDMyMGI1ZDlhZTU2MDQwMzljNzEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29uZmlnLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb25maWcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiZmE2OTdiOGMyNzEyZmFjYzQ3ZmUyOWY2NmQyYTE5YTFlMjAwNGVkZDY3MmFiY2M3ZDBiYjgxZmY4ZGNhYWIyNDk4YzFmNGFiZDgzZTM1ZTU4YjQ4MTcyNThlZmNlZTM5ZDJiNjFmOWU3ZTQzNjdkMmYzZDQ5MThjMTFjZjAxZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kZWJ1Zy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZGVidWcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4OTI5ODZmMzA4YzIxYWI0MzZjZTdiNmMxZjFjYTIyM2JmMGI2NjE0YzBjZjU4MTA0ZGY5MWRmODhhOGJlY2JhZGY1YmE3ZDg2ZDRjZjU1MTM1Yzg3NWYzNWI3ODZjMWU3Mjk4Y2YxNDg3YjFiM2RiYTA0OTU4YTllMzk0MTM5YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lcnJvcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vycm9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjRjOWVmMGEwNTI0MGI5ZWUxYzJjNDdhMGFlMzQxYzg3NjY1Y2JlMWU5NDhlNmQxNjJmMGJlNDQxNzUxMjg3OGRlZjQ4ZGIzY2U0MWNhN2U4Njg1ODYxMWVhYTdjYzE3NmQwMGRhYzgxMDFlNGMyNDNiNzUyOWM5MTdhNDI2NGFiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk2OGE4ODI2ZWIwMTEzOGIyMjJkZmQ0NGFiZjY2YTJkYzVmNzBmOTQ4ZDEzN2IzYTRjYjBjYWUzOWI2ZWQ5MTI2ODQ3NjE4OTdlMDgzYWY5ZTZkODgzZGM1MDcxMGEyOGQ1MDQ5Nzc2NjFjYWRkZWZmMGU2MTUzOWFmN2EwMzk3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1MjczZDhiMzk3MGU2ZDA3MGE1Yjg4MzJlNDU4NWMzYzM0YjVkOThiNGFhYjlhMmNiZTNlZTJjNzdhYzZkYzI4MGYyZTQ4Y2Y5NDBjZTZhNjZlMzU5ZWUzNmEzYTU0ZTM3YWExNmJhZTk2YzhhYzE2NzE5NjcwZjY2NzBlMmRkYiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDViMWI3ZTlmMmQzMWQ2NmZlNTQ4ZDk2MTMzZjkyOTNlNjAzMzk2NTFiNWIxZTgyYjJjNTM5YThlMmQ5OGQzOWYxYWM1NDFlODQwNTJjYWI0YjI4MzBiZDYwYmYwODVlOGI4Mjg2Yzg5YzQ4MDk4MzZmZWQyN2Q0ZjdjMmJiNTAiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWV0aG9kLXRvb2xzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZXRob2QtdG9vbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YjljZWM4ODNiNWZkYmI4YmNlZTJlYTJiNWI3MmNiMjliYzU4NDlhYzZmNDRmMDYzMDE4NjMxMGQ2M2Q3MGZhZjU0YzU2YTdmMmRhYzZlMjYzZjhhMjliY2U1OTE0N2VkMmNmYTUwODA1ZTYzZGQwYmFmZDI2M2M5NzhkMmMyYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY4N2QyNTMxNWUxNzBkOWIzN2QyOTk2Zjk3MjU3ZDIwMjMwOTEyMGViYzAyZmQ1ZmY0NzdkNjk5YTllZTE0Mzg0YjlhMWEyODgxYTQ4MzczOTFkNmUyZGRhMDk5ZjkwOTIxMjBlYzcxMDg1YmY2YmRhOTkyNGFkYmQ1ZTFjZjNhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Rlc3RpbmctdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Rlc3RpbmctdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2YjY2ZjBhYTdlYmE0YzQ0M2MwMTUyOTRjODExYmMyYWZlNmU0MmQ3MWRmODMxNDQ3NzA0YjAyZDk2MjJjOTQwNmMzOGFiYTQwMjhlZWRiZDExZDg1YjI3M2Y5MTgzMDhjNmIxNjRlNDRiMDM3ZGMxNTY3NmIyNGYxNGVmMDhjMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlQ2hlY2suanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVDaGVjay5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhjZTMyNGRiZWQxYjBkOTE2NzE3ZWQxMjYxNDE2ZjdlZmY4OTc2MzQ5MzA3MTdiMGM2NmVkNTczZTg4MzUyOTNmMmM1MTBjM2YwZTk2ZGI2MjU2MzM1YWY2ODc2N2Y0NzVmMTdhNTM1YWMzZGM2NjVlMTM1ZjA1MzEyMmMwNzc2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5YjQ2MTQ3MGE2ZjVkNDMzMGM4ZGVlZDUxNzc5N2EzMTVjZjI0MzYzNTdhMmM0ZDc2YTY1YmFhOGZjZWE0ODU0YWJjYTdlNjZkODIxOTk5MzA2ZmFjMmY1N2JjNzRjYWZkNWU5Yjg0ZGQzN2U4M2U3NDE5OTZjMjJhMzFkMWJkNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy1pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMtaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmNzY3YjlkZTgzMGE2ZWQxYmRiYTI0ZTE3N2ExY2U1MGYwODNiY2Q3NmNkMzM3MDMyMzZhMjQ0OGM0MTc4MmMxNDA3YzVmZDg1ZjkwNWVmOGRlYzc5YzEyZWRkMDI5NTIxODdjMjE2MTY2ZmEzNGM1ZmFhMGIxNTUzZDIwOGE3YSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy91cGdyYWRlLWFwaS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdXBncmFkZS1hcGkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3YTU2NWQwMjQ2YzBhYmQ5NWVkN2M1MWFkYzllMDA2NmYwMDMwZTFjNTY1ZTI4MzUzOTYxODI3ZTI4MWE5ZjQwN2MzNWNiMTVjNjllZmUwNTRhODU5ZGJiM2E1YTczOWI5OGMyYWI4YTZiMmM0NmVmODg5YjBhMzkxNDE0NGUwYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy91dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0ZWNjMzlhZjQyODczNzAxMTE4OWJhMGNhZDgwODRmZjE0MGRiYWIzMjg4NjBkZjBiODI0ZjkyY2NlMjRmNWE5MjI1NTY3NzgxZDdmNDlmZTMwZDNiNTA0MTAzNjEzZWRlMTI2NmM5ZDI2NmZkZjlmYTc5NjI4MTUyNGYwNWUxZCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvbm90aWZpZXIiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3Rlc3RpbmctdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy90ZXN0aW5nLXV0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3VwZ3JhZGUtYXBpLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvdXBncmFkZS1hcGkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvZXhwb3J0ZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2V4cG9ydGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvc3Vic2NyaWJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zdWJzY3JpYmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci90b29scy90ZXN0U3VwcG9ydHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YWI1YjRkYjRmN2IyMWQ0ZDQxM2ZjNjIzNzRjNjkzZGU3ZWFlZmE2NTg5MGY5NWU2ZTQ4ZGMwZWNkZDM0YzA3OGRjZDRiOWMyNTQ3NmQwODRiZDZjMGYyZWU4ZGE0OWEzN2RjOTU1MmFkYzA5N2UyYTQyMjMzMmI3YTJkOWU0MSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOGY2NTI5ZGQ3NmE3OTMzMjU5N2NjOThiZWY0ODA3ZTIyZTJlOTFjYTEyMjFjNzRmNjM5NTkyNTQ3MDM2OTZjOWYzZGY4YmNiZGVmY2I2Njg3OTcwY2RlZjQ5MjJjMDk1MTkwNGUxNWU4ZTdhZmMzYzU2ZGNmNTg4ZDYzNTVmYyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9ub3RpZmllci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbm90aWZpZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyNGE5NGUzN2Q1MzI5NmYwOGZjOWVkOTU5ZjRhY2FjOTNmMzA4ZWY1YjBkMzVmZWQ3YmJjOTc1MDdiYzc0OWNmZTgyYzkwZWQ5NmU1NGFjMDUxZjEwNWIzY2NmNWFmMTk1MjhkZDFmMDA1MDZiNmI5ODJmYzc5MzdkNjk3ZTljZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdWJsaXNoLWtpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHVibGlzaC1raXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2NjAyYTlkMmQzZGY1YTFlMTg3OWViYzNkODkwZmMwODY2YzdhNTc1M2E5N2RmZGVlODQzMTQ3MTQ0ZWUzMzViYmZiMmIzMmE5NGQ4ZjJhMTcyNGQwN2UyMjI1YTExOTFlNjdhMTg4ZTcyZmQ5Yzg2NGZhYjQzYmI0YzQzNTVmNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZWQtbm90aWZpZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3JlZC1ub3RpZmllci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA0NTg2Y2Q4NjdhY2M4NmFmMTQ5MjRiYmUyZDM1MzJhY2IyNDUyZDVkZDRmZDMzNzM0MTgzYWFmMGIxYWJjNmU4NDZlMjU0YWFlYTkyNjZlMjA5YWYxMDAxMGZmMTg0MGVjNDkxY2VkZWZjNDZjZTQ2YjhjYTM2MDQ4OTViN2UzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlc3ViLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXN1Yi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUzMzNlY2Q1NjU4NGQyNzY4YjgxZTc2NjJhOWZhZTRlOWQwOGIyMWE3NjMyOWE5Y2MzNGUxNTc0ZGIxZjA1ZTMzYTZlZWIxOTU4YWFjMDkxNDJkNjE2ZjA3N2YyZTc0YzRlYzU3MzkyNDdiMjZkMDE4NDY0NGM2M2RmMjJiNDMxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N1YnNjcmliZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3Vic2NyaWJlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmJmNjM3NDQ1Nzg5NjZhYmY5OWJkMDQ5MzUyOGI4Y2Q5Zjc3MjIyYTAwMjJkYWM4MDM4ZGM5Njc1OWJhMjAyMGVmN2FmZGU5ZDQ3MTY3MTBjMjMzNGEzODgzZTlmMzM4OGE4NDYxMDQ5ZTQyYjkwZTYwZGQwYWIxMWEyMTliZmIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3Vic2NyaWJlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3Vic2NyaWJlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImVmNzk1ZmNkMmVlNzg4MDY4MDAzODkxNzdlMTE3ZGYwM2ZkODY4ZTIxMTIyMjk4ZGE2MDQyOTQzZjczMzg1OGQwNDA5OTFmYjI3NDk5MGEyMjBkNzAxN2NjMzg1ODBlOTNlMjA2MjlmNjJjNjRmYzdjOGY5NTNmMTJlZWQ4MTMxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RvcGljLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90b3BpYy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3MGVlNDNkMTI3ZjQzNTAwZmE4N2FmMDFiMTY4MGQ5OThiZTExYWU5NzExNDBiYmZmNmExNTgzMjI1NDMwODA0MTA1NGNlMjgwNTQ0OWUzMjc0ZTI1MjcxNTBkYzdlNGJlODM1YmQ1ZDZhZjFiMzZhMWQ0ZGRlM2M3YzAxZGIxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLWluZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy1pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3NjdiOWRlODMwYTZlZDFiZGJhMjRlMTc3YTFjZTUwZjA4M2JjZDc2Y2QzMzcwMzIzNmEyNDQ4YzQxNzgyYzE0MDdjNWZkODVmOTA1ZWY4ZGVjNzljMTJlZGQwMjk1MjE4N2MyMTYxNjZmYTM0YzVmYWEwYjE1NTNkMjA4YTdhIgogICAgICAgIH0sCiAgICAgICAgIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInRvb2xzL3Rlc3RTdXBwb3J0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA0ZDkxYzA4MmVmMTkxOTk4OWM1MDlhYWQwNmM4MmZiMmQwZjA2YjI1MjFiODIwMTM1NTM2NjBiNDJlYjdkZjc3YjdlODc5MzE0MjMwZDg0OWYyYTg2ZWJkNjQ0YjUzNDg0ODZmMmY5ZTU0OWZhMzM5NDQ1NmVmN2Q5MGM5ZWZhIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3NtYXJ0LXdhbGxldC12MC41LjMiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvc21hcnQtd2FsbGV0IiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3NtYXJ0LXdhbGxldC12MC41LjMiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9jYXN0aW5nIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY2FzdGluZy12MC40LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvZXJ0cCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2VydHAtdjAuMTYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3N1YnNjcmliZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc21hcnQtd2FsbGV0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXRzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0cy12MC4xNS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdHMvc3JjL2xpYi1ib2FyZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdHMtdjAuMTUuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2xpYi1ib2FyZC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZvdyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3Zvdy12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvZS12MC4yNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvem9lU2VydmljZS96b2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kdXJhYmxlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9oZWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL3ZpcnR1YWwuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdmlydHVhbC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLWNvbnRleHRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjZiZjlkMjc1MTVlYjVlOWExOTdmNmFjMWVkODcwZjc1MDFkNGViNGZlZTRhZjI1NjUyYTBhMTBhNGE5N2MwMmIwNTFjNjZjMzkxZjU0YTQ0MTUzODY1M2I1NTNjM2M2MjBiOTE1YzY0YmE0YzdjNGVhNjQxZjQ5ZTc1MjdlNmIiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvc3RvcmUtdjAuOS4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3N0b3JlIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjI5MDY4NzhiNDRiZjgxNjlmNWVlNGI2YWJkYjI1ZGM0YmQ4OWZlYWNhZDEwYzE4YmU3MTRjNWRlYmRhMjM4MzQ1NzkxNDc1MWViYWQyNjAzMTA2ZjMzZTQ0ODUwNTU2OWE3ZWNiZjgwNmYwZWIyMTVhYmIwMjJmZTZkYmRiOWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGVnYWN5L2xlZ2FjeU1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJiMTlmY2I4MmRiZDBjYzBjYzU4MGUyOTRhYWQwNDAwYjM0MTViMWU3MzdkZGNlYWQxMzUyNmMzOTRkNzAxYWEwNGYwMzk2OTk4ZjdlNDQ3M2IwMjEyNmIwNzE4YmJlYzM5NWNkMjI0NWU2OTllZjJmMWEzNmQwY2I1NzRlYTRiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImE1NWQ3M2Y4NDJkZmU0NDE2MjMwZjYwZDFlMjI0ODNhZTNmZDI5MzIzNDNkZmZlODE2MWU1MWQ5MWE2MDM5Y2RjOTJhZDQ1NmI3OGFkODczNzMwYWQ4NWI2ZWU4ZWRkOGU1MDMzYTc3MDdhNGQwYTE5NGY4MjYwMWUzNDEzMGE4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjU4ZTFiNmEwYjljYWVjZWUzODY0MTU0OTVjMDllYjFlMzNkYzM2ZTM4M2JhYjM3MGY2NDEwMDJkNjcwYjEwNWNjZmNhYzFkNTViZmVhZDExOGM5NDliYThiMDQzNjFjNDgxZDE1ZDA1OTAxNmVhZTZmODg1YzA3ODA4ZTRjYjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXMvc2NhbGFyU2V0U3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YTZmZjM3Yjc1YzA1ODAwYmE1MzRmMzcyZjA0MzFkYjVlMjg0YzUzNjdjYjAwZjdmNGQxMTZjY2ZkMGFjOWY5OWYzMmMwYjhhNzM3YjE4YjFjYzM5OGQyYjRlYjgyYWIyMmUzZmQ0ZjczZTc3OTk2ZjE4NDI2ZThmOTgzNzQwNSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOWEyYjRjOGYyYThiMzdlYWYyMjg5MGJmYTNiMzZkYjg5N2I4YTM1NTU0Y2UwNmExOGI4MDk5MDBiYmE2NmJmMjY5YTYwYzc0ZGVkZjU3MjRmY2E3NWJiNzRkOGIxNDZhODA0NjZlMjIyN2Y0Zjc1YzUzMzVmMzBhYWY4YTBlMGUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY3NDRlNDE2NmQ0NmNiNGQwY2EyZmEzZTY1YTQ2ODZjMjAxNzIyY2QyMzMxN2I5ZTdkZjUyMzVlNWViYTJlYWIyNTAwZTcxN2NkZmE1OGMwNDJiNTJmZmMxZjE1MjA5NTAxMTdlOTI5Y2VmOThiYzk2N2E1YjE2ODdjYzc0ZjY3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zdG9yZS11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZmM4YzI0OGRmZTM4NjA3OGNkYmE4OWM4YmU5MjQzYTE1NzUwOTgzNDE5NjQ3NGEyN2Q4YjhhZDE2M2VkZTNmOWUxZDU2YjViYTUxMTBkMWY2ZWM2ZmFlOThjZDUwODFiOTlhYTJlMjFhN2I2ZDdkNTkxNmJiMDMxYmQyYWY1ZTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjc2N2I5ZGU4MzBhNmVkMWJkYmEyNGUxNzdhMWNlNTBmMDgzYmNkNzZjZDMzNzAzMjM2YTI0NDhjNDE3ODJjMTQwN2M1ZmQ4NWY5MDVlZjhkZWM3OWMxMmVkZDAyOTUyMTg3YzIxNjE2NmZhMzRjNWZhYTBiMTU1M2QyMDhhN2EiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3ZhdC1kYXRhIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3Rvb2xzLyoiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy8qIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3pvbmUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3pvbmUtaGVscGVycy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zd2luZ3NldC1saXZlc2xvdHMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zd2luZ3NldC1saXZlc2xvdHMtdjAuMTAuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leG8tdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by11dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzZGMyMTlmMjhmYjhlMjk4ODVmNTU0M2EwNjFmM2RiMGNlZWEwYmVmOTllYWI5N2Q3MTY0MzljMGM0YmQ0NTQwZDM4NDU0MjBlY2FlYzRhNmU4ZTczZmVhNjYwZmE2NWQxZDQ4MTUzYzc5MmE2NzE2NTFhZWQ1NDk5MWM0YjRlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjc3ZWYwZjRiMDZkZTczNTNlYjg1ZDkyNjgxNDhjMDg3NWVhN2ZmNmI1NzJmMjM0YjFmZGJlODA4M2YzZWVjMWVlNDdkZmFkYjQyY2I3N2EzYWJiOWU4MGM3ZjU4NzliOTQ5NWJlYjJhYWEwZGVkNjA2ODQwNGFjZWQzMjU0Mzc2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy92YXQtZGF0YS1iaW5kaW5ncy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjc3NDJlNDA4M2IyNjc3MmNlYWExMDdjZjQzZmExOTFmMmM2NGJjYTI2YmRhZWZjOGUwNjUzMDU0MGQ2N2I5ZGFkNGJjNDYxMTVjMzM0YWIzMDE1Y2ExN2MxOWU5OTNlY2M3YWFjYWE4NGEwZTc1ODQzMTM0YTNjNGE3ZGI1YjkwIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3ZhdHMtdjAuMTUuMSI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy92YXRzIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvdmF0cy12MC4xNS4xIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvdmF0cy12MC4xNS4xIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9hZ29yaWMvKi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9hZ29yaWMvKi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3MvKi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3MvKi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3MvYmFuay92MWJldGExL3F1ZXJ5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy9iYW5rL3YxYmV0YTEvcXVlcnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL2JhbmsvdjFiZXRhMS90eC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3MvYmFuay92MWJldGExL3R4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy9kaXN0cmlidXRpb24vdjFiZXRhMS9xdWVyeS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3MvZGlzdHJpYnV0aW9uL3YxYmV0YTEvcXVlcnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL2Rpc3RyaWJ1dGlvbi92MWJldGExL3R4LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy9kaXN0cmlidXRpb24vdjFiZXRhMS90eC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9jb3Ntb3Mvc3Rha2luZy92MWJldGExL3F1ZXJ5LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy9zdGFraW5nL3YxYmV0YTEvcXVlcnkuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vY29zbW9zL3N0YWtpbmcvdjFiZXRhMS90eC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9jb3Ntb3Mvc3Rha2luZy92MWJldGExL3R4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2Nvc21vcy90eC92MWJldGExL3R4LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Nvc21vcy90eC92MWJldGExL3R4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2dvb2dsZS8qLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2dvb2dsZS8qLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2dvb2dsZS9wcm90b2J1Zi9hbnkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vZ29vZ2xlL3Byb3RvYnVmL2FueS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pYmMvKi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9pYmMvKi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pYmMvYXBwbGljYXRpb25zL2ludGVyY2hhaW5fYWNjb3VudHMvdjEvcGFja2V0LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2liYy9hcHBsaWNhdGlvbnMvaW50ZXJjaGFpbl9hY2NvdW50cy92MS9wYWNrZXQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWJjL2FwcGxpY2F0aW9ucy90cmFuc2Zlci92MS90eC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9pYmMvYXBwbGljYXRpb25zL3RyYW5zZmVyL3YxL3R4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL2liYy9jb3JlL2NoYW5uZWwvdjEvY2hhbm5lbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9pYmMvY29yZS9jaGFubmVsL3YxL2NoYW5uZWwuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vaWJjL2NvcmUvY29ubmVjdGlvbi92MS9jb25uZWN0aW9uLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2liYy9jb3JlL2Nvbm5lY3Rpb24vdjEvY29ubmVjdGlvbi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pY3EvKi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi9pY3EvdjEvKi5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by9pY3EvdjEvcGFja2V0LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2ljcS92MS9wYWNrZXQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3N3aW5nc2V0L21zZ3MuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vYWdvcmljL3N3aW5nc2V0L21zZ3MuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vc3dpbmdzZXQvcXVlcnkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vYWdvcmljL3N3aW5nc2V0L3F1ZXJ5LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3N3aW5nc2V0L3N3aW5nc2V0LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvY29zbWljLXByb3RvLXYwLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZGlzdC9jb2RlZ2VuL2Fnb3JpYy9zd2luZ3NldC9zd2luZ3NldC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2Nvc21pYy1wcm90by90ZW5kZXJtaW50LyouanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vdGVuZGVybWludC8qLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvY29zbWljLXByb3RvL3RlbmRlcm1pbnQvYWJjaS90eXBlcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Nvc21pYy1wcm90by12MC40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Rpc3QvY29kZWdlbi90ZW5kZXJtaW50L2FiY2kvdHlwZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9jb3NtaWMtcHJvdG8vdnN0b3JhZ2UvcXVlcnkuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9jb3NtaWMtcHJvdG8tdjAuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9kaXN0L2NvZGVnZW4vYWdvcmljL3ZzdG9yYWdlL3F1ZXJ5LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvZXJ0cCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2VydHAtdjAuMTYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvZ292ZXJuYW5jZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2dvdmVybmFuY2UtdjAuMTAuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25ldHdvcmsiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9uZXR3b3JrLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL2V4cG9ydGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9leHBvcnRlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3N1YnNjcmliZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3Vic2NyaWJlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy90ZXN0U3VwcG9ydHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3dpbmdzZXQtdmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3dpbmdzZXQtdmF0LXYwLjMyLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3RpbWUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy90aW1lLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0cyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdHMtdjAuMTUuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92b3ciOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92b3ctdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b2UiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b2UtdjAuMjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL3pvZVNlcnZpY2Uvem9lLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9lL3NyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b2UtdjAuMjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvdmlydHVhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi92aXJ0dWFsLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ltcG9ydC1idW5kbGUvc291cmNlLW1hcC1ub2RlLXBvd2Vycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc291cmNlLW1hcC1ub2RlLXBvd2Vycy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3NvdXJjZS1tYXAtbm9kZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9pbXBvcnQtYnVuZGxlLXYxLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc291cmNlLW1hcC1ub2RlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEwIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiaW1wb3J0LW1ldGEtcmVzb2x2ZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJpbXBvcnQtbWV0YS1yZXNvbHZlLXYyLjIuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiamVzc2llLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogImplc3NpZS5qcy12MC4zLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NyYy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY3JjLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzgwODJjNzQwOGUyODMyY2NhNDc0NDc4MTA4YWQzMjNiOTBiOGZiNjBlYzM0MmFiZGU2NmRjNDEwM2JkYmFjM2ZiN2E3MGJkYTAxZDdlN2E0ZjJlMTFkMDUxOTJhNzUwZDMxMmUwOTViYTM5MDI2NjRhYjNiZDA0Njg0YzM4NjkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGliLWJvYXJkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9saWItYm9hcmQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZGFlMTQ3ODFiZTlmYzcwMzM5N2E1Y2UwNDcxYmIyOGU2Mjk2NGFlZWYxYTQxOTJlZTNiMGE2ZDdhNmY5NDA5OTM1Mzc3ZGZhOGQzYWVkYjY2ZmU5NGQxMzEwNDE5NjNjYzczMDZkMzlhNjQ2OGJkYmYzYWIyMThlZjE5YmZhYiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3dhbGxldC1iYWNrZW5kIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9jYWNoZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2NhY2hlLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL21haW4uanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9lcnRwIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZXJ0cC12MC4xNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9leHBvcnRlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZXhwb3J0ZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci9zdWJzY3JpYmUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3N1YnNjcmliZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMvdGVzdFN1cHBvcnRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc21hcnQtd2FsbGV0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc21hcnQtd2FsbGV0L3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL21hcnNoYWwtY29udGV4dHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdGltZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3RpbWUtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy93YWxsZXQtYmFja2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9lLXYwLjI2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy96b2VTZXJ2aWNlL3pvZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvdmlydHVhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi92aXJ0dWFsLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJpbXBvcnQtbWV0YS1yZXNvbHZlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogImltcG9ydC1tZXRhLXJlc29sdmUtdjIuMi4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hY3Rpb25zLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9hY3Rpb25zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDIwZmY2MzFjYjRiYWViODFjM2YyNzE4YmQ3Y2Q0MTBkZTljYThlZjIyMzEyMjQzNDZjOTA4ZjMxZDg0NDc5ZTM2MDJmZmE1MjUxMzcxYWExY2RmYmZkODY5YmNhZDNmZTM0OGY5Nzc2MzIzZTNmM2ZhZTEwMmMwZGNlMzIxYzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYmlnaW50U3RyaW5naWZ5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9iaWdpbnRTdHJpbmdpZnkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2YWNmY2QxMWE5YWNkYmUyZmM2M2E0ZDk4NzM3OWRkYzBiYTBkMzY3NTY1MDRkMTc2M2U0OGI5ZTY1M2FiMjYxYzkwMjM3NmFhYmU2ZTdjNzViNzhjM2VlMDgwYzYwOWQ2YmNjZDEzZDJjZTNiZDJhNjE2OGY5OGE0ZmQzYTdlMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kYXRlLW5vdy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZGF0ZS1ub3cuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlMjJlNjA4MDEwYmVjODQ3YTZmNDUxZmFmNWIzMjQ2MTc2MjkyNTY3ZmNiNjEwYTAwNDhhNTJlNDk4NTk4Y2E1MDA3MDIwYTkyMGZiZDAyZTZiYmY2NWYyZTA4NTg2ZDU3MjAwNjUzMmU2NThjY2JlM2RhZmRjOGFlNmUwOWExYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9maW5kT3JNYWtlSW52aXRhdGlvbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZmluZE9yTWFrZUludml0YXRpb24uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0ZGZiMjZjZTRlMjYzMDFmMzhiZmIyODU5MTJhNzM0NDYzNGQxNDUwYWIxNzU0MzJjMDc3YTUzZDkxNzIyOTJlMzdlMTA1ZTFkNTVkMjE2YTY4NmJjM2M1ZDUyYjY2OGU2ZTRlZDlhNWM5ZTQ5MTAwMzVjNTVmNzk3N2U1ODA1NSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbnRlcm5hbC10eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW50ZXJuYWwtdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiYzk1MzdjZGJiMmUyNWM0MDE1NzE0YTNmOWFkMTU2YmU0ZmI2NjY5ZjU5MDk1MThhYTk5NTEwZWJmODAwZTNhMzNlNGZjMGJlNmY5YmViNTc4MzFiMTNiNjEyNDQyODViYzAyNWZhOGMzNDc4OWZlZDQwNzE0YmQ0N2VmMzc1OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pc3N1ZXJUYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXNzdWVyVGFibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkNjdiOTM3MmQ3NjYxNTVhYjExZTMzYzM0ZGNmZDg1YWIyMTI5YTlmMDhmYTM4NzllYThiNTRkZjBmNWJjNTcyOWJkNGZmZjVlOTJlZTNlNThmYzJiZjg1ZWY5NWIxOTE2ZmI3MTVjMWIxMzBjYmEwNDg0YzMyZjY4NmZhOGQ1YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9saWItZGVoeWRyYXRlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9saWItZGVoeWRyYXRlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGI0Njc1NjkzYTliNjNjOTExNjBhNjk0ZmVmMDJlODc2YmI4MTFiMTZkOWYyYzEyZTFkZmZkZDMxNTY5Mjc2ZGUxNjA2MWRjMjA0YTc0ODIxYTczNWI2ZWIwNWM0YTRlZGMxOGQzNDk1NTE4YjRhYTBiZTRjYTJkMjdkMmQyZTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGliLXdhbGxldC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGliLXdhbGxldC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQyNzhlNDJiNGQ5NzczNzMzM2UzOGZjYzI4ZTZmODdlMDRlOTE3NjMwZjI2MDA4MTFhZWFkY2QzY2I2ZWY4NzExMjk1MzliNGM3ZWJiYTE3N2NlMDQ0NjMxZmJjNDk5ODFiMmNhZDQwZmM3MTQyZjI5M2M0NjVjYTZiNmM2MGI4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3B1YnN1Yi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHVic3ViLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNWM2NzMyNTExY2NkOTc2ZTk4ODExNWUyYTg2ZjI2YzkzZjg4ODEzZTlmOGI3YTA2OWU1NGI1Y2U0MjNiNmE3YTc2YWZhZmZlYTEzYjE1OTkyZjgxNjEyY2IzNTEwNTJmZmE1NGU5ZGE0ZWI1YjNkNzY1MmFmOGFhMGE4NWQ2NDIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvd2FsbGV0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy93YWxsZXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4MTcwYzRiMTkyN2MzMGZkNTQ2OGE4ZWFhNTBkMTZkYTNhYjgxMjI2ZTUwMjE5YTBjMmYzZjBmMTk4MTJjNTQ0NTRhYmRlOGRmNzRiMTAwZjQzZGVlMDZlNDVkNDU0YjA1ZGM1NjdmYjE3YjgwODk5YTMyY2M2MzU5Y2ViYmE5YyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy96b2UtdjAuMjYuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy96b2UiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy96b2UtdjAuMjYuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3pvZS12MC4yNi4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9oZWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3Rvb2xzLyoiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy8qIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvYmFzZS16b25lL3pvbmUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3pvbmUtaGVscGVycy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2VydHAiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvZXhwb3J0ZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2V4cG9ydGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvc3Vic2NyaWJlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zdWJzY3JpYmUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllci90b29scy90ZXN0U3VwcG9ydHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zd2luZ3NldC1saXZlc2xvdHMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zd2luZ3NldC1saXZlc2xvdHMtdjAuMTAuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3dpbmdzZXQtdmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3dpbmdzZXQtdmF0LXYwLjMyLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3RpbWUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy90aW1lLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXQtZGF0YSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdm93IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdm93LXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9lIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9lLXYwLjI2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy96b2VTZXJ2aWNlL3pvZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvdmlydHVhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi92aXJ0dWFsLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2J1bmRsZS1zb3VyY2UiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vYnVuZGxlLXNvdXJjZS12My40LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9idW5kbGUtc291cmNlL2NhY2hlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2J1bmRsZS1zb3VyY2UtdjMuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jYWNoZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9idW5kbGUtc291cmNlL2V4cG9ydGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2J1bmRsZS1zb3VyY2UtdjMuNC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9leHBvcnRlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9idW5kbGUtc291cmNlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9idW5kbGUtc291cmNlLXYzLjQuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NhcHRwIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NhcHRwLXY0LjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NhcHRwL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jYXB0cC12NC4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pZGVudC1jaGVja2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGlzdC1kaWZmZXJlbmNlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1hc3NpZ24uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtYXNzaWduLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi90aHJvdy1sYWJlbGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rocm93LWxhYmVsZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8vdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2ltcG9ydC1idW5kbGUtdjEuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9pbXBvcnQtYnVuZGxlL3NvdXJjZS1tYXAtbm9kZS1wb3dlcnMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NvdXJjZS1tYXAtbm9kZS1wb3dlcnMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vaW1wb3J0LWJ1bmRsZS9zb3VyY2UtbWFwLW5vZGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vaW1wb3J0LWJ1bmRsZS12MS4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NvdXJjZS1tYXAtbm9kZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInlhcmdzLXBhcnNlciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJ5YXJncy1wYXJzZXItdjIxLjEuMSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYnVpbGQvbGliL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInlhcmdzLXBhcnNlci9icm93c2VyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInlhcmdzLXBhcnNlci12MjEuMS4xIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9icm93c2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzRmMTU0MzVlZGQ1OWI5NmRiNmUwYmJlYjE0ODdjZGRlMjAzNzEyYTQ1NmFlODI2Mzg2MDBjZjkyOTk5NTM4MWFhMzc4ODc0NGE4MzZkZWQxZjIxMjUyNjFiN2FkM2FmNzBhMDZkY2JkMWNhYWY5NGRhOTZhNWE4MWZjYjZjNTMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvem9uZS12MC4yLjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvem9uZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvdG9vbHMvKiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLyoiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvem9uZS1oZWxwZXJzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vem9uZS1oZWxwZXJzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvem9uZS9kdXJhYmxlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2R1cmFibGUuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2hlYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaGVhcC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvbmUvdmlydHVhbC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3pvbmUtdjAuMi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi92aXJ0dWFsLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9kdXJhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImR1cmFibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1NzhmMTYxN2RlZGZiNTM3NWNkMjBiN2M2MGY4N2YwNjAyYzk3NDNiYmM0NGMzOThiOWIwMTczZmM2NDgwNTBjNjI3OGEzNmI2Y2I1MzZkNzc5NGVlMDJhNjFkOGQxM2UwZTcxNTgyN2RkZTQ1OTkyMmU5YjQ4ZGRlYmY0ZTU3ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kdXJhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kdXJhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDkyNGQxZmZkOGYzZDY5NTZjYThlOGNhNmVlZDEzZWQ5YmNlZjY4ZWM5ODEyYWU3NmY3MGVjMjQxYTE0ZGY0N2JmZTRjYzgxMTIwYmZkYTc3MmU5OTExMWU3ZTNkNmE5YWJlOTI2YmZkZGJiNTVkYWJlYzUzNzQ2ZjAyODUyNDkiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2NvbW1vbi12MS4yLjUiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2NvbW1vbiIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtYXNzaWduLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLWFzc2lnbi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90aHJvdy1sYWJlbGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImFwcGx5LWxhYmVsaW5nLWVycm9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMTA4Y2YyODBiMDA5ZTkwODk3OWU3MzNjZjc0ZjYxMDUwN2JhMWU5YTRhOTJkMWFkZmI0ZmIwNGQ3Y2E4NjE5MjI4MDdkMzJiN2E2MDUyZjZlMDI4MmQ0YWVjZjdkZTI1OWY3OGZkNTM1Y2I4YjI4ZjcyZGMyMDE0Mjc5Y2UyMmEiCiAgICAgICAgfSwKICAgICAgICAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImZyb20tdW5pcXVlLWVudHJpZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0MmRhN2M2NTA4NDU2MDFhODc0ODYwMjhlMDZlOTU1YTlkMjQ4NjAyNGI1Njg1ZjM3M2UwYTFjMGEyOWRhMjAyNGZjOGViNzY5NjRkMTNmM2ZmYTAyYmNmZGRhYTNmOGNiNDhhYzQzNDQ0NzgzYjhhZjI3NDU4OWU2NTkwYWM3MiIKICAgICAgICB9LAogICAgICAgICIuL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaWRlbnQtY2hlY2tlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNiNTNmMTQ0ZDBiYjEzOWU2ODA1NzE3OGY2OWRkYWQ0NzRiMjMxYzk3YTUxMjE1NDg0MWRmNTY4YzQxZDE2Yzg3OTM3N2JjOWI0YmQwOThiZWIyNzY5MDhlNmU5ZjBkNzU0ZDU4Njc4OTQwOWE2NmJhZjJhOGNkMWFkYmRmYThmIgogICAgICAgIH0sCiAgICAgICAgIi4vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImxpc3QtZGlmZmVyZW5jZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjZlZmNjNTAwNjkwMTkwNGM3Y2RkM2EwNDAxOTJlMjE0NTU4ZTYwMzk2NTlkOWUwZjdmMjJiZTZlZGE4ZjRjOTQ5YWU0MDIxNjBkMDYzYTUzZjY5Zjc4ZTVmYmRkNmUyNDk3YzU1NjI2MTU0NGY3NjIxZWQ0Y2NlZmM1MjgwYWFmIgogICAgICAgIH0sCiAgICAgICAgIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJtYWtlLWFycmF5LWl0ZXJhdG9yLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjZmOTIzNzRlOGQ3N2I4NmVjMjAzNWMyMWJlOWUzYTQwNzZmMGQxZWY1ZThlOWY3ODU5NzBiMjMzNGE3MDcyODQ2MDBkMTIyNWNkOGY0YWY2OWIzNzMyNmUxYjlmNTJjYTVmZjFhNzJjMjNjYzllNmIzNjZiNjEwOTdkN2E0ODciCiAgICAgICAgfSwKICAgICAgICAiLi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm1ha2UtaXRlcmF0b3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2ZWUyNmQwYTZlYjAwM2Y3NzZmODNhYmQ3NDM2MjdmOTZiZTFlMDU0NzFkM2NjMjY2YmViYzU4OTQ5ZmIwNTEwMzQ3NjA3MjBhOWQzMjM0MGYzMmU2ZGE5NjE2NGZjMWEzNzg4MmE4ZDQxMmFmODljZWI0YjhjYjkxODJmZmIyMyIKICAgICAgICB9LAogICAgICAgICIuL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAib2JqZWN0LW1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjEwN2JkODg3YWE4MzRiMzE1MTE1YjgxOGEwYTZlMGMyMWNlMTM4ZmI0NzhkYzM3NDQxMDYzZjMxNzdkMmQ2NzU3NGNkYTQ1OGJkZjA5ODAyZDg3MzRjNTVjMjhkODM1NmNhNGQyZGUwZTA1ZTgzMDNiZTQ4NDk5NTY4MTNjZmNhIgogICAgICAgIH0sCiAgICAgICAgIi4vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm9iamVjdC1tZXRhLW1hcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjRhNWE2MTYwNmRmZmNkOTlkMmI2NjJmZDQzNDdlYzkyMjFjZTIyYmUwOWI4M2EzZGZhMDQ1NWY4OTI1ZmVlN2IyZDY0NWVkZDRmODA1MWY3MzY4MTFlNTk3Mjk0MjVlMGZiZGU4YjdjMzBlODE0NjIzOGFlMGZlNzhlODg4MWIxIgogICAgICAgIH0sCiAgICAgICAgIi4vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJ0aHJvdy1sYWJlbGVkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2YxNWEyZTE3ZDgzZDZkOGM3YTU2YjYzYTE0OTY0YjYyMjVjNzhhYmM0NTFmZWZkODY2NTUzOTQxNDBjZjRkYmQ4NGZlNDM2MGYxZmU0ZDllMmZhMGRkMzdhNjJmOWZmNmQ0N2Y4NGE4ZmI1MTMxZDk3YjM3MGFiNTYzZTBmNzYiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNiI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZW52LW9wdGlvbnMiLAogICAgICAibGFiZWwiOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjkzMzBlY2MyZDU1NDljYmI3OGE0Mzc0ZTk2ZmRjZTBkMDIzNGU1NzFlNDgzYTNhZmI4YmNiNDc5MTYwMDM4MTM4ZThiMDAyOTg3YzZlYjhlMzZlZDQ2ZTg2OGMyOGFkZGNjYzI4YTFiMWM4NjJiODBmYmI4YzI2NWMxNjcyZGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW52LW9wdGlvbnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Vudi1vcHRpb25zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZWI1MDliOThhY2E0NDgxZjc5NWQwY2E5OGM2OGU4MmJlMzEwNzI5YTVkZDRiZDU5NTlhY2FkNDMzODQ4YjdkMWI3NzllNmVlMTAzMzQ4MDUxNzg3ZjgwM2UzNjI2Yzg0YzhkNzBmYjkwN2ExYzk2YjI2YWZkOWU4MjJmNjM1MjMiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2Vycm9ycy12MS4yLjUiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2Vycm9ycyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvYXNzZXJ0LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXNzZXJ0LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbXBhcnRtZW50LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29tcGFydG1lbnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbG9ja2Rvd24tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJzZXMvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBhYzA5MTQxMTJkZTk0Y2JhYjJlNTZkZTdiMDg0YjA5NjQ0YTcyYjU4MGVhMjgxYjc3YTYzYjU3MGZhNThlNWQ4ZGRlZDFhNGFkOTcxNjRhNTA0MDQ3NGYzMWJiNmM1ZWZiYjFiMDM3NWRlMGEzN2QwYmFhMjRkMmYzMTcyNzI1IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9FLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9FLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzkyM2JiZTcxM2M4ZDdmZjQ3MmE2Njc4OTM5MWVmNDBlZTkzY2I5N2M2OWI2Mzg3NTM0NGFlNDdmMGIzZTBhOWY4MTJmNTRlZTkzOThmNWVkZDU4YmYzODU5NmI5Y2I1Mjc1MzhlZDQ0MzVlYmFhODQ4MjEwZGY3YTlmODcxYWIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZXhwb3J0cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhwb3J0cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3NjdiOWRlODMwYTZlZDFiZGJhMjRlMTc3YTFjZTUwZjA4M2JjZDc2Y2QzMzcwMzIzNmEyNDQ4YzQxNzgyYzE0MDdjNWZkODVmOTA1ZWY4ZGVjNzljMTJlZGQwMjk1MjE4N2MyMTYxNjZmYTM0YzVmYWEwYjE1NTNkMjA4YTdhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xvY2FsLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9sb2NhbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjY4NDVlYThlYWViM2ViZTc4ZmVjNjg3NGFjY2VkNGZkOThkYTcyMjExMGExNTY2ODVhMzVmZDkxNWViMmY5MDg2ZDA0ZGU0N2UzMzgxZTk2MDhlNTc5ZDQ2Yzc3MzQ1NGRjMGMyNzkzNWU5ZmQyMjgyZGE1MjkyMWE3OTUzMjhjIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMmYwN2Y1NjdjY2NlNjcwMmUwOGMwNmE3MDQ5YmQ0MTNiNDIwMzAxODY4YjAwMTNmZjFiM2YzY2IwNThmOTJjY2Y5NjMwNmE4YjdkMWNiMjFlZTJhYWQ0OTRkOWQzYTUzNDdiZDJiMmQwNDczNzJmYzExOWNiZTc5MjgwYjczZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9uby1zaGltLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9uby1zaGltLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzMxMzI0ZjFlMWVhMzcwMGQ5OTJkMGNlNzVlM2YwZGY0YjRkNDk0YjBlMTZhY2ZkMzg4ZTE1MjYzOGM4NTg0YTJmYzZkZDJjYmUzMDNhNjI2MGQ4ZDY3OTBjZGIwYmEwMmMxYjI1ZTNmZTg5ZjQxN2NjOTg1MGIwY2YxOTRkODciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHJhY2stdHVybnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RyYWNrLXR1cm5zLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTc1ZGM2ZmExZTI3OWE5Y2U3MDZhMjQ3ZTE5YTRjNmQ4ZjM0NTQzMTY0MDJmMDhlODZiYmZhNjM0ZjM2MzA1Y2ViZTE4OWU3YTJjMWEyZjQ4ZjU3OWViMGJmYWY5ZTQyYzIxYjM4OTMxZWMzMGVjZmJhMzhhNjU0NGMyNWZhN2IiCiAgICAgICAgfSwKICAgICAgICAiLi91dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJ1dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjUxMTgzZDhiMzNlYmJiZWEwN2ZhZTM1Y2ZkZmI5M2I5MzljY2RhMzg0ZDNiNGMzODc1YjM2MTdmNDY3ZDJlNTI4NmViODA1YjA4ZTY3MzNiZWQzNjQ5YjMzYzU4YzQxMTVkZmU4MmVkOWEzOTIyMDVhZWNmYjJkMzE5MWRlMWRkIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9leG8tdjEuNS4zIjogewogICAgICAibmFtZSI6ICJAZW5kby9leG8iLAogICAgICAibGFiZWwiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2lkZW50LWNoZWNrZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9saXN0LWRpZmZlcmVuY2UuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1hcnJheS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLWFzc2lnbi5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1hc3NpZ24uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWV0YS1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL3Rocm93LWxhYmVsZWQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdGhyb3ctbGFiZWxlZC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXhvIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V4by12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4by90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Zhci9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhmZTRjMWJlNmNlOGMxYzViZTc1ZTA4MzY2ZmZhMDRjOTU5YWQ1ODIzMDEwZTRiNjEwNjI4NmUxM2E4YjhlYmY4OGYzZWY4ZDcxZmY4Y2U0OThmZjA1ZGYxZjcxOWUyZGFlNDBlZDUzMDFiNzRlMGM2OTMzNWQyYTAyOTFlOWY4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4by1tYWtlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by1tYWtlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5OWI1MGYxNTNhNWZkMDZlOGJkZmQwMGMwZGZiOWE3MTVkOTQwMDYxNGM3OWQ0NGRiYmM0MDAyM2FiMTRmOWFkYTA2NDI5NjRlOTZmOWQ2NjQ1ZTgwNmMyOTI1ZDIwNGI4NmEyYmMyZWFjZTVjZGE2ZTY4Mzk3NzMxZjlkZjIzMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leG8tdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNkNGY4MGI1MDdmNGFjZTNkMmUwM2FkMzRiZTI1YzY2Yzg3YzA4NGYzNGU3YWY5NGJkOWFjYjcwMWU2NGFmMjdiNzM0OGQ3NmY5NWYxYmMwNTA4ODAzMzAzZTBmNGJiMjFlOTI3YmVlMmNkNjJkNjFjN2VlOTE2MjhjYzRmZDY4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2dldC1pbnRlcmZhY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2dldC1pbnRlcmZhY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxN2E3N2UwMzhiOWQ1ZDVlMTM2MmY4N2NmM2M0YTA5YzcwNjE0YjI4ZGU1NDljNGQ2MjY2ZDg1MGJhZjM4NTg5ZDAxOWZhNGJjYWU1YTFmNzFhNTQ0MzRiZWVlOWFmMjk5Nzc1Y2IwODRhNDNiNWE2NjM3N2U0ZTZiMDVlZjBlMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmNzY3YjlkZTgzMGE2ZWQxYmRiYTI0ZTE3N2ExY2U1MGYwODNiY2Q3NmNkMzM3MDMyMzZhMjQ0OGM0MTc4MmMxNDA3YzVmZDg1ZjkwNWVmOGRlYzc5YzEyZWRkMDI5NTIxODdjMjE2MTY2ZmEzNGM1ZmFhMGIxNTUzZDIwOGE3YSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZmFyLXYxLjEuNSI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZmFyIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZmFyLXYxLjEuNSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL2VuZG93LmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9lbmRvdy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rvb2xzLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQwNmY0MzUzZjVjNjg4MTdhMmRlZTdjODFkYTE1NjNhZWZmNWYyZWM4ODNiZmVkYjkxNTc1MWYzNzVjYTg1NTA1MWRjNDUzYWJmNjU2OWMxOGIyZDljMzAxMmE4MGE0NWY2N2YxOWFlNTgyNjUxNTc5YjY3YzI2ZGZlMTU5NjcxIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9tYXJzaGFsLXYxLjUuMyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vbWFyc2hhbCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pZGVudC1jaGVja2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGlzdC1kaWZmZXJlbmNlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1hc3NpZ24uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtYXNzaWduLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi90aHJvdy1sYWJlbGVkLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3Rocm93LWxhYmVsZWQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEwIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvZW5kb3cuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2VuZG93LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBjMzM3MDAxMDg1Mzk2NDZjZjBmZDM3MmU3NzM5OGE3ODQ2ODJkZGExYWVmZjQyYmNiNjYzYjZjYmJmNzA5ZWY0NzlhYjRmMmY1YWNmYWNjZDE3MTFlMDMyYTAxM2FhYWZhZmYyMmRmMjljOGViY2UyMmFlOWI1MThiZDkyYWRiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2VuY29kZVBhc3NhYmxlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbmNvZGVQYXNzYWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY0MmY3OTMyZmE5NzUyNWJlOThlMjdlNTE4YWI4M2ZjMjEwZWQwNGZjNmE2ODc4ZTY0NTVhOTBkMjA3NDA5NWYwNzcwOTBjMzRlZDFjNGVkMDhiMjI2OWM2MmJhMTk2Mjc3YzQzM2NlNzgzMDQyYTBkMDI4ZjE5MWU3Y2NjNGI2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW5jb2RlVG9DYXBEYXRhLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjM4NGVlYzRjNzE5ODUwNzRmNmQ1NDdiMWNkMTAxYzhlNWI1ZTNkMGEyODA5M2ZiZDgzZDJkNTQzYjIxNmM0NmQ5MzQ0NGY1MmFjMmZhYmEzNzgzMTk5MTYwNjllMjg3MjdjNWYxYTk3MzVlZWEzZmYxZWE0MmQwZDQ0OTI3NzgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZW5jb2RlVG9TbWFsbGNhcHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZVRvU21hbGxjYXBzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTY2ZGM2ZjBiYmE4Y2I0ZTU1YmI5NTBmMjAxMzY0ZmNmNGEwMWY2NzYwMmVjM2QxNTk3MjQ0NmFkMWZhMzZhYzA0OTU1OGFiYWM3NWU3ZjFlNDhhMTM3NDQzMGQyNjYwOTAzODMxMzE2OWRmOWVmYWEyNGExMjcxZjU2ZTE5ZTIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFyc2hhbC1qdXN0aW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwtanVzdGluLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjI0ZmFiY2I2MDQzMDNmMTM3YmVhYWY5ZGMxOThmYTU2YTViYjA4YmE4NzUwMGY2NGZjNzZiNzJjOWEwZmI0ODgzMDVjMTVhNWZkYjY1NDQ3ZTBkMzI3M2MwOTUzOGJkOWY4NmJiMDkxZWFmMzkzNzJkMjM4YWM0YWJkMWMzZmYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYWQ0NWZhYmUwYzcxNzZmNjg3M2ZjYzhiYmMxMTVjNjZkMzU4MDc1ZDhiMTU4YzczY2U5NWZmMmJiNWI3YjVkZmYxNmZiMmMzYzk1MWZjMDZlNzVmNWVlMDUyNWZiZmZkOTU5ODA2MzQyOWQxOTliZGRhNjg5ZTc3MjkyYWNiNDkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFyc2hhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFyc2hhbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjVkYWZhZWNhMThhYzhhYzAxM2RiYzZkZTQ1MGVlZmVlNjQzNGIzZDVmMmM0ZjYxMDRjMzhhMTcyNDliODkyMmE1ZmVmNDgwZDU1OThjMjliYjJjOTZjMzViYzYwNDA4Njc1ZTFlYzExZGRlNWFlZDhiYzE5ZDQxMTMzMWVlYTdmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JhbmtPcmRlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmFua09yZGVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTM1NDY5NGMwZDM2YWY4MDA2YWI4MThmM2I0Yzg0NWFlZDYwODAwMWMzYjllNmI1NWIwNjBmMjAzNTAxMTdhZGI3NGNhNzU1ODcxZDEwYTQ5ODY5ZjM3MTAyMjdjOTY4NmI0NDE5NTM1YTZiNDI5NTE0ZGVlNGNjNWMxODdlOTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjc2N2I5ZGU4MzBhNmVkMWJkYmEyNGUxNzdhMWNlNTBmMDgzYmNkNzZjZDMzNzAzMjM2YTI0NDhjNDE3ODJjMTQwN2M1ZmQ4NWY5MDVlZjhkZWM3OWMxMmVkZDAyOTUyMTg3YzIxNjE2NmZhMzRjNWZhYTBiMTU1M2QyMDhhN2EiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL25hdC12NS4wLjEwIjogewogICAgICAibmFtZSI6ICJAZW5kby9uYXQiLAogICAgICAibGFiZWwiOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vbmF0LXY1LjAuMTAiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjEwIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjc0MDYxMzdlMWJkM2I1NTg0YzVmMjdkYmZjYmFlMmVjNzdjYmE2M2RmMDgxYzJkNDQwNWJhZGVhYjc5ZGY1ZWQyZTc2NTY0YTAwOTUzNTUzYWYxYzFjMGYzNTcxMDQ5NjM0OGY3ZWZlYzNhOTE2NzkwZTRiNWZjZmUzMTVlZjIxIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcGFzcy1zdHlsZSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9lbmRvdy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZW5kb3cuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlL3Rvb2xzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9zaGltLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZmFzdC1jaGVjay9hdmEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGZhc3QtY2hlY2svYXZhLXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGliL2VzbS9hdmEtZmFzdC1jaGVjay5qcyIKICAgICAgICB9LAogICAgICAgICJAZmFzdC1jaGVjay9hdmEvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBmYXN0LWNoZWNrL2F2YS12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmU3OGMyNGZhYmEwN2Y2NGEwY2Y4NDI5N2EzZmUxZWRjNmE1NzVkNjk0M2U2M2VlNjBhMTgxZTdmYWQ2NDQ0NGU2YTI3MzRkYTY4ZmRhNzgwMzZmMGZiZWUzYWExYjFlZGNkNzgzYzM5NTk4NGVkMTNhNTg0ZWZiZjlkZjFkNjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29weUFycmF5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb3B5QXJyYXkuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5NjAwZjhjY2Q3MzE0YzA3MDkwNWVmODdjZGFmMTU2NWNjNjY0NWYzOGE0ZmNhYmMxYjNhMjVkYTAxODhmYmNjODBjMDZjMzM1OTZjYTllNTljODgyYWMzNjVhYWFmODk3NTg5ZGY3ZDI1OGI5NDIxNmFjN2E0NzRmYzQzNDJlNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb3B5UmVjb3JkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb3B5UmVjb3JkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNTg5NjA3MzQwYjI1MDc5N2Y5MzAzMjM3M2I4NGJkNWUzY2MyZmE2NjdmNWUxNTJmNjI5NGZmZDA2ZjUzMGQzZDZiMDUwYmJjZTcxM2UzMTllZmQ1MTMxNjQyMGVhNTlkZDg3NWMwN2Y4MzBkNDc1ZDgwNWIyYmJjNzFlZGZmMjUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kZWVwbHlGdWxmaWxsZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyNTY2ZmRjNWFiZDA3NzdmYWRjNDQ0ZWZmNmM5N2NhYWQ1OTI5N2QyYzk1NGI2NDIxMzIzYzFmOTc4NjliY2Y5Y2RhYTQzZjNmNTJkZDQxODAxMWM3YWJkYjEzMzdlMGM5OWNiNjU0YzgwOWM4MmE4Njk4NmNhMzRkYzgzYzIyMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lcnJvci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXJyb3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4MGRhN2UzNjY5M2FmMzk5NDdmYTNiM2RkZjZmYTcwODQ4OTViNzhiZDYwNGU1ZTYwNmI1NTc2MTE4ZmIxZDQ5YzQ4MTQ2NzA0MWE1NzcyY2ZjNTQ5YjJjMTk0NzZkNzNmNDhkN2FmNzYxOWViMDU5YzI5ZGYzNzJjNjMwOGQ1MCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pdGVyLWhlbHBlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2l0ZXItaGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjkzM2YxZjY5YmU2OGQzNTFmMzEyZWQ4NWQyY2YyMzIxNGE3ZjFmMGQ5YmJmYTE1M2I1M2ZmMDFiMDhjNDE2N2NkZmMzYjI3NWViZmU3YTYwOTI3YjI2YTljMjA4ZWMwYWY4MDhkZWE5MmQ4NzJjNDJmYTExNzRmOWFlZGZkYWMwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2UtZmFyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWtlLWZhci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU5NzEzN2VkYmIyMGUwMTM0YzZmNWZmY2NmYjhhNzc1MGMyNmEzMGY4NzQ3YjhjMzZjZTE3ZTMzNGJkMTg1YzRjYzkzMjY5NzI2YTUwYjllZjk4MzA2NDc1NGRiMTU2YzllMGVmMDIzZGE0YTg0ZDQ5NDkxOGJhNGQwMDUwODQ5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2VUYWdnZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ha2VUYWdnZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwNGI0OGI1NDUyNmY1NTA4NTAxMWFkZWQ0Yjg1MmU5Zjc3ODVkYTYxM2ZkNzQ0MTFhMjFkMWM1NWEyZTc0NjdlYTU4NmJjMDMzZTNkYzEzNGM2Nzc1YjQ2Mzg0ZjE4NjkzNjQ2Mzc4MGIwYmJiNGZiYjM0M2RjZWUxYjA5ZTk4YyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZGRhMzkwNzk0NzQ4YmIxYTVhMjk2OTMzZTY1M2Y2NGM0ZDQ5YjkzMDgxYmM1NTEwYjI1YmMxYjUzZTRjZWJhMWExNWEyNmUyNDQ0Y2FmYWQ2N2EwZjgxNmQyZWI0MTI4MDdhMzA0ODA5NDNjMjIxNjYwM2U0N2M4YTAyZDI5OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXNzU3R5bGVPZi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGFzc1N0eWxlT2YuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjNjk0OWVhNmYwZDg4NGYyNDY5ZWFkYzc3YzQ3NjU5NDYwZWJmNTA2NjZlYmI5ZTVhZmNiNmU5ZTlkMTEzY2Q4M2ZkMGQ3MDU2MDZkMDZkYmU1MjdhYTg4NGU3MTI4MWZhZTFlNTlmZjQwZTY2YzZiYTcyY2M5MTAyZjkzMDMzNCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yZW1vdGFibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JlbW90YWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjM0ZDljZTU1YjNlOTY5MWQ0ZDRmOTU2OGM0YjI0YzJhNDA5MThiYmNlNmY0NzdhOTAxNTk5M2Q5MmZlNTU0YWY2MTQxZjQwYzBiNGM5OGU2ZDMwYWUyNWUwNmMwYWEyMzM4ZjZlZDQyYTliOGJkZGM2YWU3ZGE0NGFlNmQwODZjIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3NhZmUtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc2FmZS1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjUxYWE0YTE5OTMzOTQ4NjY3ODMwMzA3NWM2MWUyYWQyMGFhZDY1MjBmZjJiMGQ5ODE2MjY5NWFlNTc3ZTdlYzM3YTFlNTNmZjNiNDEzYWE3MmJhMGNhZTI5OGMxMzM2NTI4ZWJiMWFiMGFjNDAyYTc4Mjg1ODIyMWYzOTJiOGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RyaW5nLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdHJpbmcuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3Y2Y4ODkxOTk0YmY0ZmUwYjUxZWYzYmY3ZjFkODZhOWMwNThmZWE4NjJlNGRlYzQ4ZThhNjYwZjBlODdlNTQ0OGEzZjdjMmJkMzc2OGFiYThiOGY2NTE1NDI5ZTU2MzM3MmE1YmEwMGYwZGI4MjZhMzZiNTI3ZTMyMGUyNjhhZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zeW1ib2wuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N5bWJvbC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImNjYTliZTU1NzM0YjEyYzIzZWNiY2NjM2VmYWIzMjRiYjM0NGE1NzFjZGI0ZmRjN2NkN2M1YTgwMTFlNWZkMjIxYWQyMzdmNDc2YzVmYjI2ZjE2ZThhNzNkZTE1ZWQ3YzQ5NzkzYzlmNTU3YWUwMDNiOWRjY2Q5ZDNiNDQ2ODAwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RhZ2dlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdGFnZ2VkLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNGY3Njg3NzYyN2FhZTg0NjVlZDZhNjdiNDNkOGY3ZmUwZjYyMjMwMTAzOTA5MzE5NmQzZTUwN2ZhMzM3YjE2ZDFhY2FmYTliYWQ5MDhhMTA2M2FmODU0ZjNlOWVkNWNhYzg2MzgxMWJhZTkxY2VhY2ZiNWJmNDAxMmU4ODU0MmIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUd1YXJkcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZUd1YXJkcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ4Mzg5N2ZjNDc2YWE4ZGFhNmQ0ODc0YmI2YmIyNGQ2ODIzZTYxMTA3MTMwZmQ4ZTM0NDc0YWMwMWUzYmNjMTJkYWQ2M2VmNzc5MmE4MzFiYWNmZGVkNjc2MzFmMDE1ZTVmOGYyZTQ2NmE2NmZjOThmNGUxMGNlNTliOThlNGZmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3NjdiOWRlODMwYTZlZDFiZGJhMjRlMTc3YTFjZTUwZjA4M2JjZDc2Y2QzMzcwMzIzNmEyNDQ4YzQxNzgyYzE0MDdjNWZkODVmOTA1ZWY4ZGVjNzljMTJlZGQwMjk1MjE4N2MyMTYxNjZmYTM0YzVmYWEwYjE1NTNkMjA4YTdhIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wYXR0ZXJucy12MS40LjMiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3BhdHRlcm5zIiwKICAgICAgImxhYmVsIjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wYXR0ZXJucy12MS40LjMiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vY29tbW9uL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaWRlbnQtY2hlY2tlci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vbWFrZS1hcnJheS1pdGVyYXRvci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtYXNzaWduLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLWFzc2lnbi5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1ldGEtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tZXRhLW1hcC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vdGhyb3ctbGFiZWxlZC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90aHJvdy1sYWJlbGVkLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNS4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjUuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0L3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhYTNjMTRhZWI3ZWY0ZTFhNjAwYWY5ZGExYTI5NWQ3NzNhYzdmNzI5YTI3NWVlYWE0ZGNlMzkyYWQ4ZTE4YTc2M2QwMzZjOTdmNWFkZGZlYTliMWIwMjQxMDIwNmVlMjk1YWI5YzFmMjllNDc4ODdhMTY4YWIxZDFlYjBhMmU1YiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2NoZWNrS2V5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNWQzYjIzNWM4YzI3NWJiMjBkZTFkMzAzNmZiODllZmYxMWJlMmY3MDcyNjU1YWJjMDYwZGI2MGI0YWFmZGI0MmVhYzlhNDE5YmFjNzA0YjM1OWVlY2FhYzIzYTU0MmM5N2VjNzhkYTk2MmQwZWY4MmYxOTcwNWE0ZDdiZTAwMDEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb21wYXJlS2V5cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBjZjQwMzZkNGI4NGM4YWVlNWY1MDFiMzZiNzQ4N2EyNmM1YjM5ZWMwODY0MzFjNGRjNmY4MGI5NjdjNTY2MGUwYzM2MWZjYzI2ODRiNDQ5ZWNlMWJlOTQzMDUwYmNhYTU3OTMxMWMzZWZhODg1OTYyNzk4N2U1M2MyMzc5MjJhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29weUJhZy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb3B5QmFnLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDUyNjNjOWZmODE4MTdiOGY1NDcxMTVhYzU4NjdmNDkyNGNjZDcxYjE2MmQ0ODQ5MTc0ZjZlN2VjYzBlOGEzMjk0ZjgzOTI1NWIxMjIyYTZjNjMxYzY0NDMzZDg4MTQ5NWJjN2JlNjRlYWIxNjY5ODlhODJiZTQ0ZTVmODQ1YzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jb3B5U2V0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2NvcHlTZXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJlYmYyOTBmNDFhMzU0ODdkNTNhMTQ5ZDQ1NGRmMWRhMTA0MWZlMGE3NmExMzg4YzJhYWFhNjRlODMwMTI1ODgzYzNiZWE2OGNhNzU1YzczNGM2MWFhNGM0ZjkzZTE5MjA3N2FkMDM1NTE5NDY3YjQ4MzdmZjhjMDgxYjU5OGZkMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYThjOTBjMTJjZGI4ZTY0ZGRlNTcxNTA3ZjczMWVmZDkyYmUyYjdhYTMzZjZiOTJkNjJmYTU3NzExMzMwMmQ2MDU5MmE0NWZlNjliYjJiMTZiYzRmZTI2ODI4NGI0M2ViYmM5NzY3YTcyM2Q2YjllYzQzMjEyM2FhMTYxMWE1YTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwNzM0YTdlYjA4NGQ3ZTU0N2VlYjJiZDcxMGM0ZmFhMDEyYjRjYWFkMmRlYmM4MTQ5Nzg0NDVlZThhZjA1Y2IyN2U4MDIzMWIwYjk0NTk4OWNkOWUxNWFjMjJiNGNkMTg4NDYzY2Q1NDQ5OGFlMjgzNmIwZmQ4YTYzYjEyMzIwMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjljYTdmODExMjVmZDcwZDg1YzM5Mzc2YzdhMGRkOGE2M2Y4MzJkMjJjMTM4NDdjMWQxNmNjZTJiYmY5ZTE3MjU0N2EyNTA0NjIxNDMwODRiMzc5N2Y0MjJhMWQ4NTc2YWM0MWZlYzg2YjA0YzFjZTA0Zjk0YThkMzNhYmJjYTIxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMTRhM2RiOGUyM2YzNmFlMDU3MTlmZGYyN2ExYTk3ZmNkODJlOTgyNDA1Y2JlM2M1NDlkNmQzMjZmOTc3YTkzNDhiNDUwN2E5NDgxYTZjZDQ2ZDg5N2YxNjYzOTZiYmI0NjVkMWI5ODYyZjJjOTUxNDA3ZDI1OTRkYzYyZTU0MCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImM1NGU0MGFiYTc2M2Y4YzdjZGY2MjBlZDhjZjUyMWY1NzM2Nzg5MjAwZWUyMDNkODBiZmIzMGRmZGI4ZjA5YTMxZjI3YWFiZTg3ZDExNGU4MjY2ZjhlODhlZTIwNWI2NDg5NDljZDc4ODJkMzVmZTc5YzQ2MDI2YzY4NmJhOGI4IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY3NjdiOWRlODMwYTZlZDFiZGJhMjRlMTc3YTFjZTUwZjA4M2JjZDc2Y2QzMzcwMzIzNmEyNDQ4YzQxNzgyYzE0MDdjNWZkODVmOTA1ZWY4ZGVjNzljMTJlZGQwMjk1MjE4N2MyMTYxNjZmYTM0YzVmYWEwYjE1NTNkMjA4YTdhIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3Byb21pc2Uta2l0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9hc3NlcnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9hc3NlcnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvY29tcGFydG1lbnQtc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9jb21wYXJ0bWVudC1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9sb2NrZG93biI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24tc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9sb2NrZG93bi1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgInNlcy9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcy90b29scy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjAwYjgxYzVlODRlYThlZTYwMjBmMDNkNzI5YzdlMGFhNjllOTliZTM3YmRiNzcyYjc0YjkxZWE3ZTNhMjA4NGI0ZDE0NDk0ZmI0NzcyMDU1MTg2ZTViNzY3OTBkNmEzMDBmMmIxYTY3OGYwZjljYmZjNTg2ZDE4MGY0NGFmNjciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXMtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXMtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImFmNWM2MTU5MTdkNTQ0ZjMzZmMyOGY1YmRhZTJlOTAwYzU2MTY0NDY3OGIwMmEzZmI1YzgwYjgxMTA2NjExYmI2ZDA5NWM1NzU5NTY2YmFjYmFlY2YzNjNhNWU3MjM4NmQxN2ZkZjEyNzQ4NWEwY2JhMGFkMTk2MGRkNDkwMDA5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21lbW8tcmFjZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWVtby1yYWNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDllOGZjNGRjYTIxYWUzNmRhM2QyYjY2ODA0YTJhZmJhNDg4M2NhNWIxMGRhOTgwM2E4MThkYzMxNTgzZWUwNDAwYzliYTQyZWQ1M2YyYTk4MGZiZjU1Y2E0YjQ4ZDEzYzc4NTJlMzViNWFkZTVhZDc1ZGRjY2FkOTg3YTRkMmEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzg1ZDRlZmI4YzE3ZTBhZTYyOWJkMDk1ZjQ4NDdiNjY4NDM5ZGE0ZDFlN2VkMTQyNTU5Y2FhNTY1YTEyYzEwZjExOGMyMDM5ZDYxNWFhZDNhMTUzZTY3OWU2NzVmOGU0N2ZlOGJkMGI3YWQxYTc4YzMxZmNhYjNlMTdiYTM1NzkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjc2N2I5ZGU4MzBhNmVkMWJkYmEyNGUxNzdhMWNlNTBmMDgzYmNkNzZjZDMzNzAzMjM2YTI0NDhjNDE3ODJjMTQwN2M1ZmQ4NWY5MDVlZjhkZWM3OWMxMmVkZDAyOTUyMTg3YzIxNjE2NmZhMzRjNWZhYTBiMTU1M2QyMDhhN2EiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3N0cmVhbS12MS4yLjUiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL3N0cmVhbSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9zdHJlYW0tdjEuMi41IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3N0cmVhbS12MS4yLjUiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3NoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdC9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcHJvbWlzZS1raXQvc2hpbS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vc3RyZWFtIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3N0cmVhbS12MS4yLjUiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3N0cmVhbS9wYWNrYWdlLmpzb24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vc3RyZWFtLXYxLjIuNSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vcGFja2FnZS5qc29uIgogICAgICAgIH0sCiAgICAgICAgInNlcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJzZXMtdjEuOC4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvYXNzZXJ0LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXNzZXJ0LXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2NvbXBhcnRtZW50LXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vY29tcGFydG1lbnQtc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvbG9ja2Rvd24iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAic2VzL2xvY2tkb3duLXNoaW0uanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbG9ja2Rvd24tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJzZXMvcGFja2FnZS5qc29uIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogInNlcy12MS44LjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3BhY2thZ2UuanNvbiIKICAgICAgICB9LAogICAgICAgICJzZXMvdG9vbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAic2VzLXYxLjguMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vdG9vbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJkZjc2Y2NiZTc2ZDA4MjgzMzQ5ZGFlNzJlNDAxOWYwYTA5MjNmZjBiMjYzNDA4NGE2YzE5YjVlYTI2NzdhNTE4OWYyYTA0Zjc0NWY5N2EwNWY3ODQxYjZiMjM3NDlhNzhiZDQyZTZkOTFmMGQ5N2E1MmJlY2ZlZTc0YmM0NWFkIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJqZXNzaWUuanMtdjAuMy40IjogewogICAgICAibmFtZSI6ICJqZXNzaWUuanMiLAogICAgICAibGFiZWwiOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICJsb2NhdGlvbiI6ICJqZXNzaWUuanMtdjAuMy40IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyL3BhY2thZ2UuanNvbiI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS41IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9wYWNrYWdlLmpzb24iCiAgICAgICAgfSwKICAgICAgICAiamVzc2llLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogImplc3NpZS5qcy12MC4zLjQiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYWluLmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhNDI1NjAxYTg2M2YwMzNiOWZlODUyM2JkZjc4OGYyZGYxZjAxN2E1YjU0NTllNTAxNWJjYjg1NmY0MDYxYzFhMmYyMTkyZjE0YTRhNDhhMWYyMjQyZjFhZjJjNGVhOGY0NjVjYjc1OGIzYzhlMzU5NDlmNTE3YTdmZGI5MTZiMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMC9FLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMC9FLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTI4ZThmM2RhNGQ2MTFmNzk3OThjMDU4MWI4MWIyY2FhNDBkNzM1NDVkZmM3ZDI5ZDQ2NDY1OTYwYWMwOThiOTkxZmYwMGIzN2Q2OWFhMWY3ZTdhY2I3NWM0NzllYmFiODU0MzQ2NjBiYWEyMzVmNjMyNTRjZjYwY2YzZTE2YjYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcwL2FzeW5jLWdlbmVyYXRlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGNlMzcwMjZiYWIwOWYxZWIyODBkZTMwNjViYmMyNjNlN2Y4YTdlNTVjNzhlNmIzMmJhMWIwMTY1NzFiYTQ3ODQ5MjMyYWU0OTBmM2IwNTgwNGJkZjM3YjYxMTQyYmFkOWViMWI0NTRmMzE5NzM0YTRhODc1YTkwMGRjYzIwNDgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImU0ODEzNTJkYzA5Nzk5MmUxNGQ3NzYzYjljY2ZkZWY0ZjRjZTMyMjJhOWQ1NmZiOWRkNWNjYzkwYTQ2ODllNTk2NjdhYmFiODE3MzVkODk2NzcwZThiZmU5NTMxNDg4YTYxOGZhY2Y3YTJjMmM4ZTY4OThiZDk4M2E3ZGUxMzUxIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcwL21ha2Vycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvbWFrZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTA1YzIyM2U1ZjQwNWJmMzljMjJkYTdhMjI2ZGUyODYxNTVlMjM4MmY3YmJhZjE2NTA4ZmM5MWIxYjZmNWZjYjM2NWE1MDMwNjg2NDVlNDUzNThjYWUyNmE2OTRlMTkwOTU1ZDY1ZDdiMjYxMjhlMGM0MmM0ZmNhZDE1NDA0ZjQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcxL2FzeW5jLXRvb2xzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzJmNzAyOWUyYWNiNzk3YjgzY2FlODNiZDkxYjAwMzk4ZDIxMmVmYTg5NDEzZTY2NDg1ZjYwYmY2YmZhMGU0NWY0MmU1N2E4MGRjNTE0MGQ2MDU3M2UxNjNlNzFjNDZhZDJkZDAyNjFlMWQzMGZjNTAxZDJlMDZkNzgzMGM0ZjIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzEvbWFpbi5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzEvbWFpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhmMDIxZDI5NDVhNzcyYzMyYmRiYWUwZjk0ZGI2MGM4ZWZiMTNjMjgyZWQ1NTdiN2Q5ZmEwMGY5MWM0YzlkMzAyYWQ4NGUyNWUyMjY2NmZlYTdjZmRkMGEzZmJjM2M5MjEyNDU0YmRiMzFjZGUzYzY5OTc1YzBkYTdmYmRlZWY4IgogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KfVBLAwQKAAAAAAAAAAAAp4DtHYQBAACEAQAAIAAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9oZWFwLmpzeyJpbXBvcnRzIjpbIi4vc3JjL2hlYXAuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9oZWFwLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vc3JjL2hlYXAuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh5JSp08BAABPAQAAJwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvZXhwb3J0cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACbQYZgdwoAAHcKAAAkAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9oZWFwLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9leG8iLCJAYWdvcmljL3N0b3JlIiwiLi9tYWtlLW9uY2UuanMiLCIuL2tleXMuanMiLCIuL3dhdGNoLXByb21pc2UuanMiXSwiZXhwb3J0cyI6WyJtYWtlSGVhcFpvbmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcixpc1Bhc3NhYmxlLG1ha2VFeG8sZGVmaW5lRXhvQ2xhc3MsZGVmaW5lRXhvQ2xhc3NLaXQsbWFrZVNjYWxhck1hcFN0b3JlLG1ha2VTY2FsYXJTZXRTdG9yZSxtYWtlU2NhbGFyV2Vha01hcFN0b3JlLG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUsbWFrZU9uY2VLaXQsa2V5cyx3YXRjaFByb21pc2U7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dLFtcImlzUGFzc2FibGVcIiwgWyRo4oCNX2EgPT4gKGlzUGFzc2FibGUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXhvXCIsIFtbXCJtYWtlRXhvXCIsIFskaOKAjV9hID0+IChtYWtlRXhvID0gJGjigI1fYSldXSxbXCJkZWZpbmVFeG9DbGFzc1wiLCBbJGjigI1fYSA9PiAoZGVmaW5lRXhvQ2xhc3MgPSAkaOKAjV9hKV1dLFtcImRlZmluZUV4b0NsYXNzS2l0XCIsIFskaOKAjV9hID0+IChkZWZpbmVFeG9DbGFzc0tpdCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlU2NhbGFyTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRo4oCNX2EpXV0sW1wibWFrZVNjYWxhclNldFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyU2V0U3RvcmUgPSAkaOKAjV9hKV1dLFtcIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUgPSAkaOKAjV9hKV1dLFtcIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUgPSAkaOKAjV9hKV1dXV0sW1wiLi9tYWtlLW9uY2UuanNcIiwgW1tcIm1ha2VPbmNlS2l0XCIsIFskaOKAjV9hID0+IChtYWtlT25jZUtpdCA9ICRo4oCNX2EpXV1dXSxbXCIuL2tleXMuanNcIiwgW1tcImFnb3JpY1ZhdERhdGFLZXlzXCIsIFskaOKAjV9hID0+IChrZXlzID0gJGjigI1fYSldXV1dLFtcIi4vd2F0Y2gtcHJvbWlzZS5qc1wiLCBbW1wid2F0Y2hQcm9taXNlXCIsIFskaOKAjV9hID0+ICh3YXRjaFByb21pc2UgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuY29uc3QgZGV0YWNoZWRIZWFwU3RvcmVzPUZhcignaGVhcFN0b3Jlcycse1xuZGV0YWNoZWQ6KCk9PmRldGFjaGVkSGVhcFN0b3JlcyxcbmlzU3RvcmFibGU6aXNQYXNzYWJsZSxcblxuc2V0U3RvcmU6bWFrZVNjYWxhclNldFN0b3JlLFxubWFwU3RvcmU6bWFrZVNjYWxhck1hcFN0b3JlLFxud2Vha01hcFN0b3JlOm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUsXG53ZWFrU2V0U3RvcmU6bWFrZVNjYWxhcldlYWtTZXRTdG9yZX0pO1xuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VIZWFwWm9uZT0oYmFzZUxhYmVsPSdoZWFwWm9uZScpPT57XG5jb25zdHttYWtlT25jZSx3cmFwUHJvdmlkZXJ9PW1ha2VPbmNlS2l0KGJhc2VMYWJlbCxkZXRhY2hlZEhlYXBTdG9yZXMpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBtYWtlU3ViWm9uZT0obGFiZWwsX29wdGlvbnMpPT5cbm1ha2VIZWFwWm9uZSggYCR7YmFzZUxhYmVsfS4ke2xhYmVsfWApO1xuXG5yZXR1cm4gRmFyKCdoZWFwWm9uZScse1xuZXhvOndyYXBQcm92aWRlcihtYWtlRXhvLGtleXMuZXhvKSxcbmV4b0NsYXNzOndyYXBQcm92aWRlcihkZWZpbmVFeG9DbGFzcyxrZXlzLmV4b0NsYXNzKSxcbmV4b0NsYXNzS2l0OndyYXBQcm92aWRlcihkZWZpbmVFeG9DbGFzc0tpdCxrZXlzLmV4b0NsYXNzS2l0KSxcbnN1YlpvbmU6d3JhcFByb3ZpZGVyKG1ha2VTdWJab25lKSxcblxubWFrZU9uY2UsXG53YXRjaFByb21pc2UsXG5kZXRhY2hlZDpkZXRhY2hlZEhlYXBTdG9yZXMuZGV0YWNoZWQsXG5pc1N0b3JhYmxlOmRldGFjaGVkSGVhcFN0b3Jlcy5pc1N0b3JhYmxlLFxuXG5tYXBTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLm1hcFN0b3JlKSxcbnNldFN0b3JlOndyYXBQcm92aWRlcihkZXRhY2hlZEhlYXBTdG9yZXMuc2V0U3RvcmUpLFxud2Vha01hcFN0b3JlOndyYXBQcm92aWRlcihkZXRhY2hlZEhlYXBTdG9yZXMud2Vha01hcFN0b3JlKSxcbndlYWtTZXRTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLndlYWtTZXRTdG9yZSl9KTtcblxuIH07JGjigI1fb25jZS5tYWtlSGVhcFpvbmUobWFrZUhlYXBab25lKTtcbmhhcmRlbihtYWtlSGVhcFpvbmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUhlYXBab25lIjpbIm1ha2VIZWFwWm9uZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAARN05ccAIAAHACAAAlAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL2V4cG9ydHMuanMiLCIuL21ha2Utb25jZS5qcyIsIi4va2V5cy5qcyIsIi4vaXMtcGFzc2FibGUuanMiLCIuL3dhdGNoLXByb21pc2UuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2V4cG9ydHMuanMiLCIuL2lzLXBhc3NhYmxlLmpzIiwiLi9rZXlzLmpzIiwiLi9tYWtlLW9uY2UuanMiLCIuL3dhdGNoLXByb21pc2UuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9leHBvcnRzLmpzXCIsIFtdXSxbXCIuL21ha2Utb25jZS5qc1wiLCBbXV0sW1wiLi9rZXlzLmpzXCIsIFtdXSxbXCIuL2lzLXBhc3NhYmxlLmpzXCIsIFtdXSxbXCIuL3dhdGNoLXByb21pc2UuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAKi20+WACAABgAgAAKwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaXMtcGFzc2FibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSJdLCJleHBvcnRzIjpbImlzUGFzc2FibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHJlYWxJc1Bhc3NhYmxlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImlzUGFzc2FibGVcIiwgWyRo4oCNX2EgPT4gKHJlYWxJc1Bhc3NhYmxlID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlPShzcGVjaW1lbik9PnJlYWxJc1Bhc3NhYmxlKHNwZWNpbWVuKTskaOKAjV9vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Bhc3NhYmxlIjpbImlzUGFzc2FibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAhp/JKHsDAAB7AwAAJAAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMva2V5cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYWdvcmljVmF0RGF0YUtleXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qga2luZD0obGFiZWwpPT4gYCR7bGFiZWx9X2tpbmRIYW5kbGVgO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzaW5nbGV0b249KGxhYmVsKT0+IGAke2xhYmVsfV9zaW5nbGV0b25gO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgYWdvcmljVmF0RGF0YUtleXM9e1xuZXhvQ2xhc3M6KGxhYmVsKT0+aGFyZGVuKFtraW5kKGxhYmVsKV0pLFxuZXhvQ2xhc3NLaXQ6KGxhYmVsKT0+aGFyZGVuKFtraW5kKGxhYmVsKV0pLFxuZXhvOihsYWJlbCk9PmhhcmRlbihba2luZChsYWJlbCksc2luZ2xldG9uKGxhYmVsKV0pLFxuc3RvcmU6KGxhYmVsKT0+aGFyZGVuKFtsYWJlbF0pLFxuem9uZToobGFiZWwpPT5oYXJkZW4oW2xhYmVsXSl9OyRo4oCNX29uY2UuYWdvcmljVmF0RGF0YUtleXMoYWdvcmljVmF0RGF0YUtleXMpO1xuXG5oYXJkZW4oYWdvcmljVmF0RGF0YUtleXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYWdvcmljVmF0RGF0YUtleXMiOlsiYWdvcmljVmF0RGF0YUtleXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAApX0TfuoGAADqBgAAKQAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvbWFrZS1vbmNlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIm1ha2VPbmNlS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRlZmF1bHRMYWJlbFRvS2V5cz0obGFiZWwpPT5oYXJkZW4oW2xhYmVsXSk7XG5oYXJkZW4oZGVmYXVsdExhYmVsVG9LZXlzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VPbmNlS2l0PShkZWJ1Z05hbWUsc3RvcmVzLGJhY2tpbmdTdG9yZT11bmRlZmluZWQpPT57XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHVzZWRLZXlzPXN0b3Jlcy5kZXRhY2hlZCgpLnNldFN0b3JlKCBgJHtkZWJ1Z05hbWV9IHVzZWQga2V5c2ApO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYXNzZXJ0T25seU9uY2U9KGtleSk9PntcbnR5cGVvZiBrZXk9PT0nc3RyaW5nJ3x8RmFpbCBga2V5ICR7a2V5fSBtdXN0IGJlIGEgc3RyaW5nYDtcbiF1c2VkS2V5cy5oYXMoa2V5KXx8XG5GYWlsIGBrZXkgJHtrZXl9IGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpbiB0aGlzIHpvbmUgYW5kIGluY2FybmF0aW9uYDtcblxuLy9cbi8vXG51c2VkS2V5cy5hZGQoa2V5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgd3JhcFByb3ZpZGVyPShwcm92aWRlcixsYWJlbFRvS2V5cz1kZWZhdWx0TGFiZWxUb0tleXMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd3JhcHBlcj0obGFiZWwsLi4ucmVzdCk9PntcbmZvcihjb25zdCBrZXkgb2YgbGFiZWxUb0tleXMobGFiZWwpKXtcbmFzc2VydE9ubHlPbmNlKGtleSk7XG4gfVxucmV0dXJuIHByb3ZpZGVyKGxhYmVsLC4uLnJlc3QpO1xuIH07XG5yZXR1cm4gKC8qICAgICAgICAgICAgKi93cmFwcGVyKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZU9uY2U9KGtleSxtYWtlcik9PntcbmFzc2VydE9ubHlPbmNlKGtleSk7XG5pZihiYWNraW5nU3RvcmUmJmJhY2tpbmdTdG9yZS5oYXMoa2V5KSl7XG5yZXR1cm4gYmFja2luZ1N0b3JlLmdldChrZXkpO1xuIH1cbmNvbnN0IHZhbHVlPW1ha2VyKGtleSk7XG5zdG9yZXMuaXNTdG9yYWJsZSh2YWx1ZSl8fFxuRmFpbCBgbWFrZXIgcmV0dXJuIHZhbHVlICR7dmFsdWV9IGlzIG5vdCBzdG9yYWJsZWA7XG5iYWNraW5nU3RvcmUmJmJhY2tpbmdTdG9yZS5pbml0KGtleSx2YWx1ZSk7XG5yZXR1cm4gdmFsdWU7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7bWFrZU9uY2Usd3JhcFByb3ZpZGVyfSk7XG4gfTskaOKAjV9vbmNlLm1ha2VPbmNlS2l0KG1ha2VPbmNlS2l0KTtcbmhhcmRlbihtYWtlT25jZUtpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlT25jZUtpdCI6WyJtYWtlT25jZUtpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABoc8uBbwkAAG8JAAAtAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy93YXRjaC1wcm9taXNlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3BhdHRlcm5zIiwiQGVuZG8vZmFyIl0sImV4cG9ydHMiOlsiUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWRJIiwiUHJvbWlzZVdhdGNoZXJIYW5kbGVyIiwiUHJvbWlzZVdhdGNoZXJJIiwiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiLCJ3YXRjaFByb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsTSxFOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5cbi8qXG5cbiAqL1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVySGFuZGxlcj1NLmNhbGwoTS5yYXcoKSkucmVzdChNLnJhdygpKS5yZXR1cm5zKCk7XG5cbi8qXG5cbiAqLyRo4oCNX29uY2UuUHJvbWlzZVdhdGNoZXJIYW5kbGVyKFByb21pc2VXYXRjaGVySGFuZGxlcik7XG5jb25zdCAgICAgICAgUHJvbWlzZVdhdGNoZXJJPU0uaW50ZXJmYWNlKCdQcm9taXNlV2F0Y2hlcicse1xub25GdWxmaWxsZWQ6UHJvbWlzZVdhdGNoZXJIYW5kbGVyLFxub25SZWplY3RlZDpQcm9taXNlV2F0Y2hlckhhbmRsZXJ9KTtcblxuXG4vKlxuXG4gKi8kaOKAjV9vbmNlLlByb21pc2VXYXRjaGVySShQcm9taXNlV2F0Y2hlckkpO1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVyRnVsZmlsbGVkST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWQnLHtcbm9uRnVsZmlsbGVkOlByb21pc2VXYXRjaGVySGFuZGxlcn0pO1xuXG5cbi8qXG5cbiAqLyRo4oCNX29uY2UuUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWRJKFByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSk7XG5jb25zdCAgICAgICAgUHJvbWlzZVdhdGNoZXJSZWplY3RlZEk9TS5pbnRlcmZhY2UoJ1Byb21pc2VXYXRjaGVyUmVqZWN0ZWQnLHtcbm9uUmVqZWN0ZWQ6UHJvbWlzZVdhdGNoZXJIYW5kbGVyfSk7XG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLlByb21pc2VXYXRjaGVyUmVqZWN0ZWRJKFByb21pc2VXYXRjaGVyUmVqZWN0ZWRJKTtcbmNvbnN0IGNhbGxNZU1heWJlPSh0aGF0LHByb3AscG9zdEFyZ3MpPT57XG5jb25zdCBmbj10aGF0W3Byb3BdO1xuaWYoIWZuKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuYXNzZXJ0LnR5cGVvZihmbiwnZnVuY3Rpb24nKTtcbi8qXG5cbiAgICovXG5jb25zdCB3cmFwcGVkPShhcmcpPT57XG4vL1xuLy9cbmFwcGx5KGZuLHRoYXQsW2FyZywuLi5wb3N0QXJnc10pO1xuIH07XG5yZXR1cm4gd3JhcHBlZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgd2F0Y2hQcm9taXNlPShwLHdhdGNoZXIsLi4ud2F0Y2hlckFyZ3MpPT57XG5Qcm9taXNlLnJlc29sdmUocCk9PT1wfHxGYWlsIGB3YXRjaFByb21pc2Ugb25seSB3YXRjaGVzIHByb21pc2VzYDtcbmNvbnN0IG9uRnVsZmlsbGVkPWNhbGxNZU1heWJlKHdhdGNoZXIsJ29uRnVsZmlsbGVkJyx3YXRjaGVyQXJncyk7XG5jb25zdCBvblJlamVjdGVkPWNhbGxNZU1heWJlKHdhdGNoZXIsJ29uUmVqZWN0ZWQnLHdhdGNoZXJBcmdzKTtcbm9uRnVsZmlsbGVkfHxcbm9uUmVqZWN0ZWR8fFxuRmFpbCBgcHJvbWlzZSB3YXRjaGVyIG11c3QgaW1wbGVtZW50IGF0IGxlYXN0IG9uZSBoYW5kbGVyIG1ldGhvZGA7XG52b2lkIEUud2hlbihwLG9uRnVsZmlsbGVkLG9uUmVqZWN0ZWQpO1xuIH07JGjigI1fb25jZS53YXRjaFByb21pc2Uod2F0Y2hQcm9taXNlKTtcbmhhcmRlbih3YXRjaFByb21pc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUHJvbWlzZVdhdGNoZXJIYW5kbGVyIjpbIlByb21pc2VXYXRjaGVySGFuZGxlciJdLCJQcm9taXNlV2F0Y2hlckkiOlsiUHJvbWlzZVdhdGNoZXJJIl0sIlByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSI6WyJQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkiXSwiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiOlsiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiXSwid2F0Y2hQcm9taXNlIjpbIndhdGNoUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACdAa0jBQUAAAUFAAAhAAAAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL2NhY2hlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIi4vc3RvcmUuanMiXSwiZXhwb3J0cyI6WyJtYWtlQ2FjaGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV0sW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dXV0sW1wiLi9zdG9yZS5qc1wiLCBbW1wibWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3JcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ2FjaGU9KGNvb3JkaW5hdG9yPW1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yKCkpPT57XG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjYWNoZT0oa2V5LC4uLm9wdFVwZGF0ZUd1YXJkUGF0dGVybik9PntcbmlmKG9wdFVwZGF0ZUd1YXJkUGF0dGVybi5sZW5ndGg9PT0wKXtcbnJldHVybiBFKGNvb3JkaW5hdG9yKS5nZXRSZWNlbnRWYWx1ZShrZXkpO1xuIH1cblxuY29uc3RbdXBkYXRlLGd1YXJkUGF0dGVybl09b3B0VXBkYXRlR3VhcmRQYXR0ZXJuO1xuaWYodHlwZW9mIHVwZGF0ZSE9PSdmdW5jdGlvbicpe1xucmV0dXJuIEUoY29vcmRpbmF0b3IpLnNldENhY2hlVmFsdWUoa2V5LHVwZGF0ZSxndWFyZFBhdHRlcm4pO1xuIH1cblxuY29uc3QgdXBkYXRlcj1GYXIoJ2NhY2hlIHVwZGF0ZXInLHtcbnVwZGF0ZToob2xkVmFsdWUpPT57XG5yZXR1cm4gdXBkYXRlKG9sZFZhbHVlKTtcbiB9fSk7XG5cbnJldHVybiBFKGNvb3JkaW5hdG9yKS51cGRhdGVDYWNoZVZhbHVlKGtleSx1cGRhdGVyLGd1YXJkUGF0dGVybik7XG4gfTtcblxucmV0dXJuIGNhY2hlO1xuIH07JGjigI1fb25jZS5tYWtlQ2FjaGUobWFrZUNhY2hlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VDYWNoZSI6WyJtYWtlQ2FjaGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAefCRTggCAAAIAgAAIAAAAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy9tYWluLmpzeyJpbXBvcnRzIjpbIi4vdHlwZXMuanMiLCIuL3N0b3JlLmpzIiwiLi9jYWNoZS5qcyIsIi4vc3RhdGUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2NhY2hlLmpzIiwiLi9zdGF0ZS5qcyIsIi4vc3RvcmUuanMiLCIuL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vdHlwZXMuanNcIiwgW11dLFtcIi4vc3RvcmUuanNcIiwgW11dLFtcIi4vY2FjaGUuanNcIiwgW11dLFtcIi4vc3RhdGUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAACnXpwxQEAAAUBAAAIQAAAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy9zdGF0ZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiR1JPVU5EX1NUQVRFIiwibWFrZVN0YXRlIiwid2l0aEdyb3VuZFN0YXRlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgR1JPVU5EX1NUQVRFPWhhcmRlbih7Z2VuZXJhdGlvbjowbix2YWx1ZTp1bmRlZmluZWR9KTtcblxuLypcblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLkdST1VORF9TVEFURShHUk9VTkRfU1RBVEUpO1xuY29uc3QgICAgICAgIG1ha2VTdGF0ZT0odmFsdWUscHJpb3JTdGF0ZT1HUk9VTkRfU1RBVEUpPT5cbmhhcmRlbih7XG5nZW5lcmF0aW9uOnByaW9yU3RhdGUuZ2VuZXJhdGlvbisxbixcbnZhbHVlfSk7XG5cblxuLypcblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZVN0YXRlKG1ha2VTdGF0ZSk7XG5jb25zdCAgICAgICAgd2l0aEdyb3VuZFN0YXRlPShzdGF0ZVN0b3JlKT0+KHtcbi4uLnN0YXRlU3RvcmUsXG5nZXQ6KGtleSk9PntcbmlmKCFzdGF0ZVN0b3JlLmhhcyhrZXkpKXtcbnJldHVybiBHUk9VTkRfU1RBVEU7XG4gfVxucmV0dXJuIHN0YXRlU3RvcmUuZ2V0KGtleSk7XG4gfX0pOyRo4oCNX29uY2Uud2l0aEdyb3VuZFN0YXRlKHdpdGhHcm91bmRTdGF0ZSk7XG5cbmhhcmRlbih3aXRoR3JvdW5kU3RhdGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiR1JPVU5EX1NUQVRFIjpbIkdST1VORF9TVEFURSJdLCJtYWtlU3RhdGUiOlsibWFrZVN0YXRlIl0sIndpdGhHcm91bmRTdGF0ZSI6WyJ3aXRoR3JvdW5kU3RhdGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA9bduiZ0XAACdFwAAIQAAAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy9zdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL2ludGVybmFsIiwiLi9zdGF0ZS5qcyJdLCJleHBvcnRzIjpbIm1ha2VDaGFpblN0b3JhZ2VDb29yZGluYXRvciIsIm1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLEZhcixkZWVwbHlGdWxmaWxsZWQsbWFrZU1hcnNoYWwsbWF0Y2hlcyxtYWtlU2NhbGFyTWFwU3RvcmUsbWFrZVNjYWxhckJpZ01hcFN0b3JlLHVudGlsVHJ1ZSx3aXRoR3JvdW5kU3RhdGUsbWFrZVN0YXRlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV0sW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiZGVlcGx5RnVsZmlsbGVkXCIsIFskaOKAjV9hID0+IChkZWVwbHlGdWxmaWxsZWQgPSAkaOKAjV9hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaOKAjV9hID0+IChtYWtlTWFyc2hhbCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYXRjaGVzXCIsIFskaOKAjV9hID0+IChtYXRjaGVzID0gJGjigI1fYSldXSxbXCJtYWtlU2NhbGFyTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJ1bnRpbFRydWVcIiwgWyRo4oCNX2EgPT4gKHVudGlsVHJ1ZSA9ICRo4oCNX2EpXV1dXSxbXCIuL3N0YXRlLmpzXCIsIFtbXCJ3aXRoR3JvdW5kU3RhdGVcIiwgWyRo4oCNX2EgPT4gKHdpdGhHcm91bmRTdGF0ZSA9ICRo4oCNX2EpXV0sW1wibWFrZVN0YXRlXCIsIFskaOKAjV9hID0+IChtYWtlU3RhdGUgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlS2V5VG9TdHJpbmc9KHNhbml0aXplPShvYmopPT5vYmopPT57XG5sZXQgbGFzdE5vbmNlPTA7XG5jb25zdCB2YWxUb05vbmNlPW5ldyBXZWFrTWFwKCk7XG5jb25zdCB2YWxUb1Nsb3Q9KHZhbCk9PntcbmxldCBzbG90PXZhbFRvTm9uY2UuZ2V0KHZhbCk7XG5pZighc2xvdCl7XG5sYXN0Tm9uY2UrPTE7XG5zbG90PWxhc3ROb25jZTtcbnZhbFRvTm9uY2Uuc2V0KHZhbCxzbG90KTtcbiB9XG5yZXR1cm4gc2xvdDtcbiB9O1xuXG5jb25zdHt0b0NhcERhdGE6a2V5VG9Kc29uYWJsZX09bWFrZU1hcnNoYWwodmFsVG9TbG90LHVuZGVmaW5lZCx7XG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cbmNvbnN0IGtleVRvU3RyaW5nPWFzeW5jKGtleVApPT57XG5jb25zdCBrZXk9YXdhaXQgc2FuaXRpemUoa2V5UCk7XG5jb25zdCBvYmo9a2V5VG9Kc29uYWJsZShrZXkpO1xucmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XG4gfTtcbnJldHVybiBrZXlUb1N0cmluZztcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgYXBwbHlDYWNoZVRyYW5zYWN0aW9uPWFzeW5jKFxua2V5U3RyLFxudHhuLFxuZ3VhcmRQYXR0ZXJuLFxuc2FuaXRpemUsXG5zdGF0ZVN0b3JlKT0+XG57XG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0VXBkYXRlZFN0YXRlPWFzeW5jKGJhc2lzU3RhdGUpPT57XG5jb25zdHt2YWx1ZX09YmFzaXNTdGF0ZTtcbmlmKCFtYXRjaGVzKHZhbHVlLGd1YXJkUGF0dGVybikpe1xuLy9cbnJldHVybiBudWxsO1xuIH1cblxuY29uc3QgbmV3VmFsdWU9YXdhaXQgc2FuaXRpemUodHhuKHZhbHVlKSk7XG5yZXR1cm4gbWFrZVN0YXRlKG5ld1ZhbHVlLGJhc2lzU3RhdGUpO1xuIH07XG5cbmxldCBiYXNpc1N0YXRlPXN0YXRlU3RvcmUuZ2V0KGtleVN0cik7XG5sZXQgdXBkYXRlZFN0YXRlPWF3YWl0IGdldFVwZGF0ZWRTdGF0ZShiYXNpc1N0YXRlKTtcblxuLy9cblxuLy9cbmJhc2lzU3RhdGU9c3RhdGVTdG9yZS5nZXQoa2V5U3RyKTtcbmNvbnN0IHVudGlsVXBkYXRlU3luY2VkPXVudGlsVHJ1ZShcbigpPT4hdXBkYXRlZFN0YXRlfHx1cGRhdGVkU3RhdGUuZ2VuZXJhdGlvbj5iYXNpc1N0YXRlLmdlbmVyYXRpb24pO1xuXG5mb3IgYXdhaXQoY29uc3QgXyBvZiB1bnRpbFVwZGF0ZVN5bmNlZCl7XG51cGRhdGVkU3RhdGU9YXdhaXQgZ2V0VXBkYXRlZFN0YXRlKGJhc2lzU3RhdGUpO1xuLy9cbmJhc2lzU3RhdGU9c3RhdGVTdG9yZS5nZXQoa2V5U3RyKTtcbiB9XG5cbmlmKCF1cGRhdGVkU3RhdGUpe1xuLy9cbi8vXG5yZXR1cm4gYmFzaXNTdGF0ZS52YWx1ZTtcbiB9XG5cbi8vXG4vL1xuaWYoYmFzaXNTdGF0ZS5nZW5lcmF0aW9uPDFuKXtcbi8vXG5zdGF0ZVN0b3JlLmluaXQoa2V5U3RyLHVwZGF0ZWRTdGF0ZSk7XG4gfWVsc2V7XG5zdGF0ZVN0b3JlLnNldChrZXlTdHIsdXBkYXRlZFN0YXRlKTtcbiB9XG5cbi8vXG5yZXR1cm4gdXBkYXRlZFN0YXRlLnZhbHVlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IHN0cmluZ2lmeVN0YXRlU3RvcmU9YXN5bmMoc3RhdGVTdG9yZSxtYXJzaGFsbGVyKT0+e1xuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9iaj17fTtcbmZvcihjb25zdFtrZXksdmFsdWVdb2Ygc3RhdGVTdG9yZS5lbnRyaWVzKCkpe1xub2JqW2tleV09RShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuIH1cbnJldHVybiBkZWVwbHlGdWxmaWxsZWQoaGFyZGVuKG9iaikpLnRoZW4oKGZ1bGZpbGxlZE9iaik9PlxuSlNPTi5zdHJpbmdpZnkoZnVsZmlsbGVkT2JqKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3I9KFxuc3RhdGVTdG9yZT1tYWtlU2NhbGFyTWFwU3RvcmUoKSxcbnNhbml0aXplPWRlZXBseUZ1bGZpbGxlZCk9Plxue1xuY29uc3Qgc2VyaWFsaXplUGFzc2FibGU9bWFrZUtleVRvU3RyaW5nKHNhbml0aXplKTtcblxuY29uc3QgZGVmYXVsdFN0YXRlU3RvcmU9d2l0aEdyb3VuZFN0YXRlKHN0YXRlU3RvcmUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29vcmQ9RmFyKCdzdG9yZSBjYWNoZSBjb29yZGluYXRvcicse1xuZ2V0UmVjZW50VmFsdWU6YXN5bmMoa2V5KT0+e1xuY29uc3Qga2V5U3RyPWF3YWl0IHNlcmlhbGl6ZVBhc3NhYmxlKGtleSk7XG5yZXR1cm4gZGVmYXVsdFN0YXRlU3RvcmUuZ2V0KGtleVN0cikudmFsdWU7XG4gfSxcbnNldENhY2hlVmFsdWU6YXN5bmMoa2V5LG5ld1ZhbHVlLGd1YXJkUGF0dGVybik9PntcbmNvbnN0IGtleVN0cj1hd2FpdCBzZXJpYWxpemVQYXNzYWJsZShrZXkpO1xucmV0dXJuIGFwcGx5Q2FjaGVUcmFuc2FjdGlvbihcbmtleVN0cixcbigpPT5uZXdWYWx1ZSxcbmd1YXJkUGF0dGVybixcbnNhbml0aXplLFxuZGVmYXVsdFN0YXRlU3RvcmUpO1xuXG4gfSxcbnVwZGF0ZUNhY2hlVmFsdWU6YXN5bmMoa2V5LHVwZGF0ZXIsZ3VhcmRQYXR0ZXJuKT0+e1xuY29uc3Qga2V5U3RyPWF3YWl0IHNlcmlhbGl6ZVBhc3NhYmxlKGtleSk7XG5yZXR1cm4gYXBwbHlDYWNoZVRyYW5zYWN0aW9uKFxua2V5U3RyLFxuKG9sZFZhbHVlKT0+RSh1cGRhdGVyKS51cGRhdGUob2xkVmFsdWUpLFxuZ3VhcmRQYXR0ZXJuLFxuc2FuaXRpemUsXG5kZWZhdWx0U3RhdGVTdG9yZSk7XG5cbiB9fSk7XG5cbnJldHVybiBjb29yZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvcihtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvcik7XG5jb25zdCBtYWtlTGFzdFdpbnNVcGRhdGVyPShzdGF0ZVN0b3JlLG1hcnNoYWxsZXIsc3RvcmFnZU5vZGUpPT57XG5sZXQgbGFzdFByZXBhcmVUaWNrZXQ9MG47XG5sZXQgbGFzdENvbW1pdFRpY2tldD0wbjtcblxucmV0dXJuIGFzeW5jKHN0b3JlZFZhbHVlKT0+e1xuLy9cbi8vXG4vL1xubGFzdFByZXBhcmVUaWNrZXQrPTFuO1xuY29uc3QgbWFyc2hhbGxUaWNrZXQ9bGFzdFByZXBhcmVUaWNrZXQ7XG5jb25zdCBzZXJpYWxpemVkU3RvcmU9YXdhaXQgc3RyaW5naWZ5U3RhdGVTdG9yZShzdGF0ZVN0b3JlLG1hcnNoYWxsZXIpO1xuaWYobWFyc2hhbGxUaWNrZXQ8bGFzdENvbW1pdFRpY2tldCl7XG4vL1xucmV0dXJuIHN0b3JlZFZhbHVlO1xuIH1cbmF3YWl0IEUoc3RvcmFnZU5vZGUpLnNldFZhbHVlKHNlcmlhbGl6ZWRTdG9yZSk7XG5sYXN0Q29tbWl0VGlja2V0PW1hcnNoYWxsVGlja2V0O1xucmV0dXJuIHN0b3JlZFZhbHVlO1xuIH07XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ2hhaW5TdG9yYWdlQ29vcmRpbmF0b3I9KHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5jb25zdCBzdGF0ZVN0b3JlPW1ha2VTY2FsYXJCaWdNYXBTdG9yZSgnc3RhdGVLZXknKTtcblxuY29uc3Qgc2FuaXRpemU9ZGVlcGx5RnVsZmlsbGVkO1xuY29uc3Qgc2VyaWFsaXplUGFzc2FibGU9bWFrZUtleVRvU3RyaW5nKHNhbml0aXplKTtcblxuY29uc3QgZGVmYXVsdFN0YXRlU3RvcmU9d2l0aEdyb3VuZFN0YXRlKHN0YXRlU3RvcmUpO1xuXG5jb25zdCB1cGRhdGVTdG9yYWdlTm9kZT1tYWtlTGFzdFdpbnNVcGRhdGVyKFxuZGVmYXVsdFN0YXRlU3RvcmUsXG5tYXJzaGFsbGVyLFxuc3RvcmFnZU5vZGUpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb29yZD1GYXIoJ3N0b3JlIGNhY2hlIGNvb3JkaW5hdG9yJyx7XG5nZXRSZWNlbnRWYWx1ZTphc3luYyhrZXkpPT57XG5jb25zdCBrZXlTdHI9YXdhaXQgc2VyaWFsaXplUGFzc2FibGUoa2V5KTtcbnJldHVybiBkZWZhdWx0U3RhdGVTdG9yZS5nZXQoa2V5U3RyKS52YWx1ZTtcbiB9LFxuc2V0Q2FjaGVWYWx1ZTphc3luYyhrZXksbmV3VmFsdWUsZ3VhcmRQYXR0ZXJuKT0+e1xuY29uc3Qga2V5U3RyPWF3YWl0IHNlcmlhbGl6ZVBhc3NhYmxlKGtleSk7XG5jb25zdCBzdG9yZWRWYWx1ZT1hd2FpdCBhcHBseUNhY2hlVHJhbnNhY3Rpb24oXG5rZXlTdHIsXG4oKT0+bmV3VmFsdWUsXG5ndWFyZFBhdHRlcm4sXG5zYW5pdGl6ZSxcbmRlZmF1bHRTdGF0ZVN0b3JlKTtcblxucmV0dXJuIHVwZGF0ZVN0b3JhZ2VOb2RlKHN0b3JlZFZhbHVlKTtcbiB9LFxudXBkYXRlQ2FjaGVWYWx1ZTphc3luYyhrZXksdXBkYXRlcixndWFyZFBhdHRlcm4pPT57XG5jb25zdCBrZXlTdHI9YXdhaXQgc2VyaWFsaXplUGFzc2FibGUoa2V5KTtcbmNvbnN0IHN0b3JlZFZhbHVlPWF3YWl0IGFwcGx5Q2FjaGVUcmFuc2FjdGlvbihcbmtleVN0cixcbihvbGRWYWx1ZSk9PkUodXBkYXRlcikudXBkYXRlKG9sZFZhbHVlKSxcbmd1YXJkUGF0dGVybixcbnNhbml0aXplLFxuZGVmYXVsdFN0YXRlU3RvcmUpO1xuXG5yZXR1cm4gdXBkYXRlU3RvcmFnZU5vZGUoc3RvcmVkVmFsdWUpO1xuIH19KTtcblxucmV0dXJuIGNvb3JkO1xuIH07JGjigI1fb25jZS5tYWtlQ2hhaW5TdG9yYWdlQ29vcmRpbmF0b3IobWFrZUNoYWluU3RvcmFnZUNvb3JkaW5hdG9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yIjpbIm1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yIl0sIm1ha2VDaGFpblN0b3JhZ2VDb29yZGluYXRvciI6WyJtYWtlQ2hhaW5TdG9yYWdlQ29vcmRpbmF0b3IiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh5JSp08BAABPAQAAIQAAAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADhfIU76hwAAOocAAAmAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Ftb3VudE1hdGguanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvc3RvcmUiLCIuL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzIiwiLi9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzIiwiLi9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJBbW91bnRNYXRoIiwiQXNzZXRLaW5kIiwiYXNzZXJ0QXNzZXRLaW5kIiwiYXNzZXJ0VmFsdWVHZXRIZWxwZXJzIiwiZ2V0QXNzZXRLaW5kIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwscGFzc1N0eWxlT2YsYXNzZXJ0UmVtb3RhYmxlLGFzc2VydFJlY29yZCxNLG1hdGNoZXMsbmF0TWF0aEhlbHBlcnMsc2V0TWF0aEhlbHBlcnMsY29weVNldE1hdGhIZWxwZXJzLGNvcHlCYWdNYXRoSGVscGVyczskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJhc3NlcnRSZW1vdGFibGVcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFJlbW90YWJsZSA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0UmVjb3JkXCIsIFskaOKAjV9hID0+IChhc3NlcnRSZWNvcmQgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjigI1fYSA9PiAobWF0Y2hlcyA9ICRo4oCNX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL25hdE1hdGhIZWxwZXJzLmpzXCIsIFtbXCJuYXRNYXRoSGVscGVyc1wiLCBbJGjigI1fYSA9PiAobmF0TWF0aEhlbHBlcnMgPSAkaOKAjV9hKV1dXV0sW1wiLi9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qc1wiLCBbW1wic2V0TWF0aEhlbHBlcnNcIiwgWyRo4oCNX2EgPT4gKHNldE1hdGhIZWxwZXJzID0gJGjigI1fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzXCIsIFtbXCJjb3B5U2V0TWF0aEhlbHBlcnNcIiwgWyRo4oCNX2EgPT4gKGNvcHlTZXRNYXRoSGVscGVycyA9ICRo4oCNX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qc1wiLCBbW1wiY29weUJhZ01hdGhIZWxwZXJzXCIsIFskaOKAjV9hID0+IChjb3B5QmFnTWF0aEhlbHBlcnMgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgQXNzZXRLaW5kPWhhcmRlbih7XG5OQVQ6J25hdCcsXG5TRVQ6J3NldCcsXG5DT1BZX1NFVDonY29weVNldCcsXG5DT1BZX0JBRzonY29weUJhZyd9KTskaOKAjV9vbmNlLkFzc2V0S2luZChBc3NldEtpbmQpO1xuXG5jb25zdCBhc3NldEtpbmROYW1lcz1oYXJkZW4oT2JqZWN0LnZhbHVlcyhBc3NldEtpbmQpLnNvcnQoKSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhc3NlcnRBc3NldEtpbmQ9KGFsbGVnZWRBSyk9PntcbmFzc2V0S2luZE5hbWVzLmluY2x1ZGVzKGFsbGVnZWRBSyl8fFxuRmFpbCBgVGhlIGFzc2V0S2luZCAke2FsbGVnZWRBS30gbXVzdCBiZSBvbmUgb2YgJHtxKGFzc2V0S2luZE5hbWVzKX1gO1xuIH07JGjigI1fb25jZS5hc3NlcnRBc3NldEtpbmQoYXNzZXJ0QXNzZXRLaW5kKTtcbmhhcmRlbihhc3NlcnRBc3NldEtpbmQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgaGVscGVycz17XG5uYXQ6bmF0TWF0aEhlbHBlcnMsXG5zZXQ6c2V0TWF0aEhlbHBlcnMsXG5jb3B5U2V0OmNvcHlTZXRNYXRoSGVscGVycyxcbmNvcHlCYWc6Y29weUJhZ01hdGhIZWxwZXJzfTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYXNzZXJ0VmFsdWVHZXRBc3NldEtpbmQ9KHZhbHVlKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbHVlKTtcbmlmKHBhc3NTdHlsZT09PSdiaWdpbnQnKXtcbnJldHVybiduYXQnO1xuIH1cbmlmKHBhc3NTdHlsZT09PSdjb3B5QXJyYXknKXtcbnJldHVybidzZXQnO1xuIH1cbmlmKG1hdGNoZXModmFsdWUsTS5zZXQoKSkpe1xucmV0dXJuJ2NvcHlTZXQnO1xuIH1cbmlmKG1hdGNoZXModmFsdWUsTS5iYWcoKSkpe1xucmV0dXJuJ2NvcHlCYWcnO1xuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xudGhyb3cgRmFpbCBgdmFsdWUgJHt2YWx1ZX0gbXVzdCBiZSBhIGJpZ2ludCwgY29weVNldCwgY29weUJhZywgb3IgYW4gYXJyYXksIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0VmFsdWVHZXRIZWxwZXJzPSh2YWx1ZSk9PlxuLy9cbmhlbHBlcnNbYXNzZXJ0VmFsdWVHZXRBc3NldEtpbmQodmFsdWUpXTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaOKAjV9vbmNlLmFzc2VydFZhbHVlR2V0SGVscGVycyhhc3NlcnRWYWx1ZUdldEhlbHBlcnMpO1xuY29uc3Qgb3B0aW9uYWxCcmFuZENoZWNrPShhbGxlZ2VkQnJhbmQsYnJhbmQpPT57XG5pZihicmFuZCE9PXVuZGVmaW5lZCl7XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5hbGxlZ2VkQnJhbmQ9PT1icmFuZHx8XG5GYWlsIGBhbW91bnQncyBicmFuZCAke3EoYWxsZWdlZEJyYW5kKX0gZGlkIG5vdCBtYXRjaCBleHBlY3RlZCBicmFuZCAke3EoXG5icmFuZClcbiB9YDtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrTFJBbmRHZXRIZWxwZXJzPShsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmFzc2VydFJlY29yZChsZWZ0QW1vdW50LCdsZWZ0QW1vdW50Jyk7XG5hc3NlcnRSZWNvcmQocmlnaHRBbW91bnQsJ3JpZ2h0QW1vdW50Jyk7XG5jb25zdHt2YWx1ZTpsZWZ0VmFsdWUsYnJhbmQ6bGVmdEJyYW5kfT1sZWZ0QW1vdW50O1xuY29uc3R7dmFsdWU6cmlnaHRWYWx1ZSxicmFuZDpyaWdodEJyYW5kfT1yaWdodEFtb3VudDtcbmFzc2VydFJlbW90YWJsZShsZWZ0QnJhbmQsJ2xlZnRCcmFuZCcpO1xuYXNzZXJ0UmVtb3RhYmxlKHJpZ2h0QnJhbmQsJ3JpZ2h0QnJhbmQnKTtcbm9wdGlvbmFsQnJhbmRDaGVjayhsZWZ0QnJhbmQsYnJhbmQpO1xub3B0aW9uYWxCcmFuZENoZWNrKHJpZ2h0QnJhbmQsYnJhbmQpO1xubGVmdEJyYW5kPT09cmlnaHRCcmFuZHx8XG5GYWlsIGBCcmFuZHMgaW4gbGVmdCAke3EobGVmdEJyYW5kKX0gYW5kIHJpZ2h0ICR7cShcbnJpZ2h0QnJhbmQpXG4gfSBzaG91bGQgbWF0Y2ggYnV0IGRvIG5vdGA7XG5jb25zdCBsZWZ0SGVscGVycz1hc3NlcnRWYWx1ZUdldEhlbHBlcnMobGVmdFZhbHVlKTtcbmNvbnN0IHJpZ2h0SGVscGVycz1hc3NlcnRWYWx1ZUdldEhlbHBlcnMocmlnaHRWYWx1ZSk7XG5sZWZ0SGVscGVycz09PXJpZ2h0SGVscGVyc3x8XG5GYWlsIGBUaGUgbGVmdCAke2xlZnRBbW91bnR9IGFuZCByaWdodCBhbW91bnQgJHtyaWdodEFtb3VudH0gaGFkIGRpZmZlcmVudCBhc3NldEtpbmRzYDtcbnJldHVybiBsZWZ0SGVscGVycztcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29lcmNlTFI9KGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCk9Pntcbi8vXG5yZXR1cm5baC5kb0NvZXJjZShsZWZ0QW1vdW50LnZhbHVlKSxoLmRvQ29lcmNlKHJpZ2h0QW1vdW50LnZhbHVlKV07XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzR1RFPShsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmNvbnN0IGg9Y2hlY2tMUkFuZEdldEhlbHBlcnMobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZCk7XG5yZXR1cm4gaC5kb0lzR1RFKC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IEFtb3VudE1hdGg9e1xuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xubWFrZTooYnJhbmQsYWxsZWdlZFZhbHVlKT0+e1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuY29uc3QgaD1hc3NlcnRWYWx1ZUdldEhlbHBlcnMoYWxsZWdlZFZhbHVlKTtcbmNvbnN0IHZhbHVlPWguZG9Db2VyY2UoYWxsZWdlZFZhbHVlKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZCx2YWx1ZX0pO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29lcmNlOihicmFuZCxhbGxlZ2VkQW1vdW50KT0+e1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuYXNzZXJ0UmVjb3JkKGFsbGVnZWRBbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7YnJhbmQ6YWxsZWdlZEJyYW5kLHZhbHVlOmFsbGVnZWRWYWx1ZX09YWxsZWdlZEFtb3VudDtcbmJyYW5kPT09YWxsZWdlZEJyYW5kfHxcbkZhaWwgYFRoZSBicmFuZCBpbiB0aGUgYWxsZWdlZEFtb3VudCAke2FsbGVnZWRBbW91bnR9IGluICdjb2VyY2UnIGRpZG4ndCBtYXRjaCB0aGUgc3BlY2lmaWVkIGJyYW5kICR7YnJhbmR9LmA7XG4vL1xuLy9cbnJldHVybiBBbW91bnRNYXRoLm1ha2UoYnJhbmQsYWxsZWdlZFZhbHVlKTtcbiB9LFxuLypcblxuXG5cblxuXG5cbiAgICovXG5nZXRWYWx1ZTooYnJhbmQsYW1vdW50KT0+QW1vdW50TWF0aC5jb2VyY2UoYnJhbmQsYW1vdW50KS52YWx1ZSxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5tYWtlRW1wdHk6KGJyYW5kLGFzc2V0S2luZD0vKiAgICAgICAgICAgICAgICAqLyduYXQnKT0+e1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuYXNzZXJ0QXNzZXRLaW5kKGFzc2V0S2luZCk7XG5jb25zdCB2YWx1ZT1oZWxwZXJzW2Fzc2V0S2luZF0uZG9NYWtlRW1wdHkoKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZCx2YWx1ZX0pO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbm1ha2VFbXB0eUZyb21BbW91bnQ6KGFtb3VudCk9PntcbmFzc2VydFJlY29yZChhbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7YnJhbmQsdmFsdWV9PWFtb3VudDtcbmNvbnN0IGFzc2V0S2luZD1hc3NlcnRWYWx1ZUdldEFzc2V0S2luZCh2YWx1ZSk7XG4vL1xucmV0dXJuIEFtb3VudE1hdGgubWFrZUVtcHR5KGJyYW5kLGFzc2V0S2luZCk7XG4gfSxcbi8qXG5cblxuXG5cblxuICAgKi9cbmlzRW1wdHk6KGFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5hc3NlcnRSZWNvcmQoYW1vdW50LCdhbW91bnQnKTtcbmNvbnN0e2JyYW5kOmFsbGVnZWRCcmFuZCx2YWx1ZX09YW1vdW50O1xuYXNzZXJ0UmVtb3RhYmxlKGFsbGVnZWRCcmFuZCwnYnJhbmQnKTtcbm9wdGlvbmFsQnJhbmRDaGVjayhhbGxlZ2VkQnJhbmQsYnJhbmQpO1xuY29uc3QgaD1hc3NlcnRWYWx1ZUdldEhlbHBlcnModmFsdWUpO1xucmV0dXJuIGguZG9Jc0VtcHR5KGguZG9Db2VyY2UodmFsdWUpKTtcbiB9LFxuaXNHVEUsXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5pc0VxdWFsOihsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmNvbnN0IGg9Y2hlY2tMUkFuZEdldEhlbHBlcnMobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZCk7XG5yZXR1cm4gaC5kb0lzRXF1YWwoLi4uY29lcmNlTFIoaCxsZWZ0QW1vdW50LHJpZ2h0QW1vdW50KSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmFkZDoobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xuY29uc3QgdmFsdWU9aC5kb0FkZCguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZDpsZWZ0QW1vdW50LmJyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuc3VidHJhY3Q6KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuY29uc3QgaD1jaGVja0xSQW5kR2V0SGVscGVycyhsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kKTtcbmNvbnN0IHZhbHVlPWguZG9TdWJ0cmFjdCguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbi8vXG5yZXR1cm4gaGFyZGVuKHticmFuZDpsZWZ0QW1vdW50LmJyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5taW46KHgseSxicmFuZD11bmRlZmluZWQpPT5cbi8vXG5pc0dURSh4LHksYnJhbmQpP1xueTpcbmlzR1RFKHkseCxicmFuZCk/XG54OlxuRmFpbCBgJHt4fSBhbmQgJHt5fSBhcmUgaW5jb21wYXJhYmxlYCxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5tYXg6KHgseSxicmFuZD11bmRlZmluZWQpPT5cbi8vXG5pc0dURSh4LHksYnJhbmQpP1xueDpcbmlzR1RFKHkseCk/XG55OlxuRmFpbCBgJHt4fSBhbmQgJHt5fSBhcmUgaW5jb21wYXJhYmxlYH07JGjigI1fb25jZS5BbW91bnRNYXRoKEFtb3VudE1hdGgpO1xuXG5oYXJkZW4oQW1vdW50TWF0aCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBnZXRBc3NldEtpbmQ9KGFtb3VudCk9PntcbmFzc2VydFJlY29yZChhbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7dmFsdWV9PWFtb3VudDtcbnJldHVybiBhc3NlcnRWYWx1ZUdldEFzc2V0S2luZCh2YWx1ZSk7XG4gfTskaOKAjV9vbmNlLmdldEFzc2V0S2luZChnZXRBc3NldEtpbmQpO1xuaGFyZGVuKGdldEFzc2V0S2luZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJBc3NldEtpbmQiOlsiQXNzZXRLaW5kIl0sImFzc2VydEFzc2V0S2luZCI6WyJhc3NlcnRBc3NldEtpbmQiXSwiQW1vdW50TWF0aCI6WyJBbW91bnRNYXRoIl0sImdldEFzc2V0S2luZCI6WyJnZXRBc3NldEtpbmQiXSwiYXNzZXJ0VmFsdWVHZXRIZWxwZXJzIjpbImFzc2VydFZhbHVlR2V0SGVscGVycyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADok/8vIwQAACMEAAAnAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Ftb3VudFN0b3JlLmpzeyJpbXBvcnRzIjpbIi4vYW1vdW50TWF0aC5qcyJdLCJleHBvcnRzIjpbIm1ha2VBbW91bnRTdG9yZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgQW1vdW50TWF0aDskaOKAjV9pbXBvcnRzKFtbXCIuL2Ftb3VudE1hdGguanNcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRo4oCNX2EgPT4gKEFtb3VudE1hdGggPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VBbW91bnRTdG9yZT0oc3RhdGUsa2V5KT0+e1xucmV0dXJuIGhhcmRlbih7XG5nZXRBbW91bnQ6KCk9PnN0YXRlW2tleV0sXG5pbmNyZW1lbnQ6KGRlbHRhKT0+e1xuc3RhdGVba2V5XT1BbW91bnRNYXRoLmFkZChzdGF0ZVtrZXldLGRlbHRhKTtcbiB9LFxuZGVjcmVtZW50OihkZWx0YSk9PntcbmlmKEFtb3VudE1hdGguaXNHVEUoc3RhdGVba2V5XSxkZWx0YSkpe1xuc3RhdGVba2V5XT1BbW91bnRNYXRoLnN1YnRyYWN0KHN0YXRlW2tleV0sZGVsdGEpO1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGZhbHNlO1xuIH19KTtcblxuIH07JGjigI1fb25jZS5tYWtlQW1vdW50U3RvcmUobWFrZUFtb3VudFN0b3JlKTtcbmhhcmRlbihtYWtlQW1vdW50U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUFtb3VudFN0b3JlIjpbIm1ha2VBbW91bnRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADLEMbG0wUAANMFAAAnAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Rpc3BsYXlJbmZvLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCIuL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJjb2VyY2VEaXNwbGF5SW5mbyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtdXN0TWF0Y2gsRGlzcGxheUluZm9TaGFwZTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaOKAjV9hID0+IChtdXN0TWF0Y2ggPSAkaOKAjV9hKV1dXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtbXCJEaXNwbGF5SW5mb1NoYXBlXCIsIFskaOKAjV9hID0+IChEaXNwbGF5SW5mb1NoYXBlID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY29lcmNlRGlzcGxheUluZm89KGFsbGVnZWREaXNwbGF5SW5mbyxhc3NldEtpbmQpPT57XG5tdXN0TWF0Y2goYWxsZWdlZERpc3BsYXlJbmZvLERpc3BsYXlJbmZvU2hhcGUsJ2Rpc3BsYXlJbmZvJyk7XG5cbmlmKGFsbGVnZWREaXNwbGF5SW5mby5hc3NldEtpbmQhPT11bmRlZmluZWQpe1xuYWxsZWdlZERpc3BsYXlJbmZvLmFzc2V0S2luZD09PWFzc2V0S2luZHx8XG5GYWlsIGBkaXNwbGF5SW5mby5hc3NldEtpbmQgd2FzIHByZXNlbnQgKCR7YWxsZWdlZERpc3BsYXlJbmZvLmFzc2V0S2luZH0pIGFuZCBkaWQgbm90IG1hdGNoIHRoZSBhc3NldEtpbmQgYXJndW1lbnQgKCR7YXNzZXRLaW5kfSlgO1xuIH1cbmNvbnN0IGRpc3BsYXlJbmZvPWhhcmRlbih7Li4uYWxsZWdlZERpc3BsYXlJbmZvLGFzc2V0S2luZH0pO1xuXG5pZihkaXNwbGF5SW5mby5kZWNpbWFsUGxhY2VzIT09dW5kZWZpbmVkKXtcbk51bWJlci5pc1NhZmVJbnRlZ2VyKGRpc3BsYXlJbmZvLmRlY2ltYWxQbGFjZXMpfHxcbkZhaWwgYGRlY2ltYWxQbGFjZXMgJHtkaXNwbGF5SW5mby5kZWNpbWFsUGxhY2VzfSBpcyBub3QgYSBzYWZlIGludGVnZXJgO1xuIH1cblxucmV0dXJuIGRpc3BsYXlJbmZvO1xuIH07JGjigI1fb25jZS5jb2VyY2VEaXNwbGF5SW5mbyhjb2VyY2VEaXNwbGF5SW5mbyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb2VyY2VEaXNwbGF5SW5mbyI6WyJjb2VyY2VEaXNwbGF5SW5mbyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABR8HKWAwIAAAMCAAAhAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vYW1vdW50TWF0aC5qcyIsIi4vaXNzdWVyS2l0LmpzIiwiLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9hbW91bnRNYXRoLmpzIiwiLi9pc3N1ZXJLaXQuanMiLCIuL3R5cGVHdWFyZHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtdXSxbXCIuL2lzc3VlcktpdC5qc1wiLCBbXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFYNhUWGFgAAhhYAACUAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvaXNzdWVyS2l0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy96b25lL2R1cmFibGUuanMiLCIuL2Ftb3VudE1hdGguanMiLCIuL2Rpc3BsYXlJbmZvLmpzIiwiLi9wYXltZW50TGVkZ2VyLmpzIl0sImV4cG9ydHMiOlsiaGFzSXNzdWVyIiwibWFrZUR1cmFibGVJc3N1ZXJLaXQiLCJtYWtlSXNzdWVyS2l0IiwicHJlcGFyZUlzc3VlcktpdCIsInVwZ3JhZGVJc3N1ZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxGYWlsLGFzc2VydFBhdHRlcm4sbWFrZVNjYWxhckJpZ01hcFN0b3JlLG1ha2VEdXJhYmxlWm9uZSxBc3NldEtpbmQsYXNzZXJ0QXNzZXRLaW5kLGNvZXJjZURpc3BsYXlJbmZvLHByZXBhcmVQYXltZW50TGVkZ2VyOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaOKAjV9hID0+IChhc3NlcnQgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3pvbmUvZHVyYWJsZS5qc1wiLCBbW1wibWFrZUR1cmFibGVab25lXCIsIFskaOKAjV9hID0+IChtYWtlRHVyYWJsZVpvbmUgPSAkaOKAjV9hKV1dXV0sW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBc3NldEtpbmRcIiwgWyRo4oCNX2EgPT4gKEFzc2V0S2luZCA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0QXNzZXRLaW5kXCIsIFskaOKAjV9hID0+IChhc3NlcnRBc3NldEtpbmQgPSAkaOKAjV9hKV1dXV0sW1wiLi9kaXNwbGF5SW5mby5qc1wiLCBbW1wiY29lcmNlRGlzcGxheUluZm9cIiwgWyRo4oCNX2EgPT4gKGNvZXJjZURpc3BsYXlJbmZvID0gJGjigI1fYSldXV1dLFtcIi4vcGF5bWVudExlZGdlci5qc1wiLCBbW1wicHJlcGFyZVBheW1lbnRMZWRnZXJcIiwgWyRo4oCNX2EgPT4gKHByZXBhcmVQYXltZW50TGVkZ2VyID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNldHVwSXNzdWVyS2l0PShcbntuYW1lLGFzc2V0S2luZCxkaXNwbGF5SW5mbyxlbGVtZW50U2hhcGV9LFxuaXNzdWVyWm9uZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQpPT5cbntcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5hc3NlcnRBc3NldEtpbmQoYXNzZXRLaW5kKTtcblxuLy9cbmNvbnN0IGNsZWFuRGlzcGxheUluZm89Y29lcmNlRGlzcGxheUluZm8oZGlzcGxheUluZm8sYXNzZXRLaW5kKTtcbmlmKG9wdFNodXRkb3duV2l0aEZhaWx1cmUhPT11bmRlZmluZWQpe1xuYXNzZXJ0LnR5cGVvZihvcHRTaHV0ZG93bldpdGhGYWlsdXJlLCdmdW5jdGlvbicpO1xuIH1cblxuaWYoZWxlbWVudFNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4oZWxlbWVudFNoYXBlKTtcbiB9XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3R7aXNzdWVyLG1pbnQsYnJhbmQsbWludFJlY292ZXJ5UHVyc2V9PXByZXBhcmVQYXltZW50TGVkZ2VyKFxuaXNzdWVyWm9uZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5jbGVhbkRpc3BsYXlJbmZvLFxuZWxlbWVudFNoYXBlLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmJyYW5kLFxuaXNzdWVyLFxubWludCxcbm1pbnRSZWNvdmVyeVB1cnNlLFxuZGlzcGxheUluZm86Y2xlYW5EaXNwbGF5SW5mb30pO1xuXG4gfTtcbmhhcmRlbihzZXR1cElzc3VlcktpdCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IElOU1RBTkNFX0tFWT0naXNzdWVyJztcbi8qXG5cblxuXG4gKi9cbmNvbnN0IFJFQ09WRVJZX1NFVFNfU1RBVEU9J3JlY292ZXJ5U2V0c1N0YXRlJztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHVwZ3JhZGVJc3N1ZXJLaXQ9KFxuaXNzdWVyQmFnZ2FnZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkLFxucmVjb3ZlcnlTZXRzT3B0aW9uPXVuZGVmaW5lZCk9Plxue1xuY29uc3QgaXNzdWVyUmVjb3JkPWlzc3VlckJhZ2dhZ2UuZ2V0KElOU1RBTkNFX0tFWSk7XG5jb25zdCBpc3N1ZXJab25lPW1ha2VEdXJhYmxlWm9uZShpc3N1ZXJCYWdnYWdlKTtcbmNvbnN0IG9sZFJlY292ZXJ5U2V0c1N0YXRlPWlzc3VlckJhZ2dhZ2UuaGFzKFJFQ09WRVJZX1NFVFNfU1RBVEUpP1xuaXNzdWVyQmFnZ2FnZS5nZXQoUkVDT1ZFUllfU0VUU19TVEFURSk6XG4naGFzUmVjb3ZlcnlTZXRzJztcbmlmKFxub2xkUmVjb3ZlcnlTZXRzU3RhdGU9PT0nbm9SZWNvdmVyeVNldHMnJiZcbnJlY292ZXJ5U2V0c09wdGlvbj09PSdoYXNSZWNvdmVyeVNldHMnKVxue1xuRmFpbCBgQ2Fubm90ICh5ZXQ/KSB1cGdyYWRlIGZyb20gJ25vUmVjb3ZlcnlTZXRzJyB0byAnaGFzUmVjb3ZlcnlTZXRzJ2A7XG4gfVxuLy9cbi8vXG4vL1xuY29uc3QgcmVjb3ZlcnlTZXRzU3RhdGU9cmVjb3ZlcnlTZXRzT3B0aW9ufHxvbGRSZWNvdmVyeVNldHNTdGF0ZTtcbnJldHVybiBzZXR1cElzc3VlcktpdChcbmlzc3VlclJlY29yZCxcbmlzc3VlclpvbmUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUpO1xuXG4gfTskaOKAjV9vbmNlLnVwZ3JhZGVJc3N1ZXJLaXQodXBncmFkZUlzc3VlcktpdCk7XG5oYXJkZW4odXBncmFkZUlzc3VlcktpdCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBoYXNJc3N1ZXI9KGJhZ2dhZ2UpPT5iYWdnYWdlLmhhcyhJTlNUQU5DRV9LRVkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmhhc0lzc3VlcihoYXNJc3N1ZXIpO1xuY29uc3QgICAgICAgIG1ha2VEdXJhYmxlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5uYW1lLFxuLy9cbmFzc2V0S2luZD1Bc3NldEtpbmQuTkFULFxuZGlzcGxheUluZm89aGFyZGVuKHt9KSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkLFxue2VsZW1lbnRTaGFwZT11bmRlZmluZWQscmVjb3ZlcnlTZXRzT3B0aW9uPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGlzc3VlckRhdGE9aGFyZGVuKHtcbm5hbWUsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbmVsZW1lbnRTaGFwZX0pO1xuXG5pc3N1ZXJCYWdnYWdlLmluaXQoSU5TVEFOQ0VfS0VZLGlzc3VlckRhdGEpO1xuY29uc3QgaXNzdWVyWm9uZT1tYWtlRHVyYWJsZVpvbmUoaXNzdWVyQmFnZ2FnZSk7XG5jb25zdCByZWNvdmVyeVNldHNTdGF0ZT1yZWNvdmVyeVNldHNPcHRpb258fCdoYXNSZWNvdmVyeVNldHMnO1xuaXNzdWVyQmFnZ2FnZS5pbml0KFJFQ09WRVJZX1NFVFNfU1RBVEUscmVjb3ZlcnlTZXRzU3RhdGUpO1xucmV0dXJuIHNldHVwSXNzdWVyS2l0KFxuaXNzdWVyRGF0YSxcbmlzc3VlclpvbmUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUpO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VEdXJhYmxlSXNzdWVyS2l0KG1ha2VEdXJhYmxlSXNzdWVyS2l0KTtcbmhhcmRlbihtYWtlRHVyYWJsZUlzc3VlcktpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVJc3N1ZXJLaXQ9KFxuaXNzdWVyQmFnZ2FnZSxcbm5hbWUsXG4vL1xuYXNzZXRLaW5kPUFzc2V0S2luZC5OQVQsXG5kaXNwbGF5SW5mbz1oYXJkZW4oe30pLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQsXG5vcHRpb25zPXt9KT0+XG57XG5pZihoYXNJc3N1ZXIoaXNzdWVyQmFnZ2FnZSkpe1xuY29uc3R7ZWxlbWVudFNoYXBlOl89dW5kZWZpbmVkLHJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWR9PVxub3B0aW9ucztcbmNvbnN0IGlzc3VlcktpdD11cGdyYWRlSXNzdWVyS2l0KFxuaXNzdWVyQmFnZ2FnZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUsXG5yZWNvdmVyeVNldHNPcHRpb24pO1xuXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xucmV0dXJuIGlzc3VlcktpdDtcbiB9ZWxzZXtcbmNvbnN0IGlzc3VlcktpdD1tYWtlRHVyYWJsZUlzc3VlcktpdChcbmlzc3VlckJhZ2dhZ2UsXG5uYW1lLFxuYXNzZXRLaW5kLFxuZGlzcGxheUluZm8sXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlLFxub3B0aW9ucyk7XG5cbnJldHVybiBpc3N1ZXJLaXQ7XG4gfVxuIH07JGjigI1fb25jZS5wcmVwYXJlSXNzdWVyS2l0KHByZXBhcmVJc3N1ZXJLaXQpO1xuaGFyZGVuKHByZXBhcmVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VJc3N1ZXJLaXQ9KFxubmFtZSxcbi8vXG5hc3NldEtpbmQ9QXNzZXRLaW5kLk5BVCxcbmRpc3BsYXlJbmZvPWhhcmRlbih7fSksXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbntlbGVtZW50U2hhcGU9dW5kZWZpbmVkLHJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWR9PXt9KT0+XG5cbm1ha2VEdXJhYmxlSXNzdWVyS2l0KFxubWFrZVNjYWxhckJpZ01hcFN0b3JlKCdkcm9wcGVkIGlzc3VlciBraXQnLHtkdXJhYmxlOnRydWV9KSxcbm5hbWUsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUsXG57ZWxlbWVudFNoYXBlLHJlY292ZXJ5U2V0c09wdGlvbn0pOyRo4oCNX29uY2UubWFrZUlzc3VlcktpdChtYWtlSXNzdWVyS2l0KTtcblxuaGFyZGVuKG1ha2VJc3N1ZXJLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidXBncmFkZUlzc3VlcktpdCI6WyJ1cGdyYWRlSXNzdWVyS2l0Il0sImhhc0lzc3VlciI6WyJoYXNJc3N1ZXIiXSwibWFrZUR1cmFibGVJc3N1ZXJLaXQiOlsibWFrZUR1cmFibGVJc3N1ZXJLaXQiXSwicHJlcGFyZUlzc3VlcktpdCI6WyJwcmVwYXJlSXNzdWVyS2l0Il0sIm1ha2VJc3N1ZXJLaXQiOlsibWFrZUlzc3VlcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADvYXmr9wUAAPcFAAA6AAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIl0sImV4cG9ydHMiOlsiY29weUJhZ01hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBrZXlFUSxtYWtlQ29weUJhZyxtdXN0TWF0Y2gsTSxnZXRDb3B5QmFnRW50cmllcyxiYWdJc1N1cGVyYmFnLGJhZ1VuaW9uLGJhZ0Rpc2pvaW50U3VidHJhY3Q7JGjigI1faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wia2V5RVFcIiwgWyRo4oCNX2EgPT4gKGtleUVRID0gJGjigI1fYSldXSxbXCJtYWtlQ29weUJhZ1wiLCBbJGjigI1fYSA9PiAobWFrZUNvcHlCYWcgPSAkaOKAjV9hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAobXVzdE1hdGNoID0gJGjigI1fYSldXSxbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJnZXRDb3B5QmFnRW50cmllc1wiLCBbJGjigI1fYSA9PiAoZ2V0Q29weUJhZ0VudHJpZXMgPSAkaOKAjV9hKV1dLFtcImJhZ0lzU3VwZXJiYWdcIiwgWyRo4oCNX2EgPT4gKGJhZ0lzU3VwZXJiYWcgPSAkaOKAjV9hKV1dLFtcImJhZ1VuaW9uXCIsIFskaOKAjV9hID0+IChiYWdVbmlvbiA9ICRo4oCNX2EpXV0sW1wiYmFnRGlzam9pbnRTdWJ0cmFjdFwiLCBbJGjigI1fYSA9PiAoYmFnRGlzam9pbnRTdWJ0cmFjdCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PW1ha2VDb3B5QmFnKFtdKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgY29weUJhZ01hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZTooYmFnKT0+e1xubXVzdE1hdGNoKGJhZyxNLmJhZygpLCdiYWcgb2YgYW1vdW50Jyk7XG5yZXR1cm4gYmFnO1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KGJhZyk9PmdldENvcHlCYWdFbnRyaWVzKGJhZykubGVuZ3RoPT09MCxcbmRvSXNHVEU6YmFnSXNTdXBlcmJhZyxcbmRvSXNFcXVhbDprZXlFUSxcbmRvQWRkOmJhZ1VuaW9uLFxuZG9TdWJ0cmFjdDpiYWdEaXNqb2ludFN1YnRyYWN0fSk7JGjigI1fb25jZS5jb3B5QmFnTWF0aEhlbHBlcnMoY29weUJhZ01hdGhIZWxwZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImNvcHlCYWdNYXRoSGVscGVycyI6WyJjb3B5QmFnTWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAE07tPrUFAAC1BQAAOgAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9jb3B5U2V0TWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbImNvcHlTZXRNYXRoSGVscGVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQga2V5RVEsbWFrZUNvcHlTZXQsbXVzdE1hdGNoLE0sZ2V0Q29weVNldEtleXMsc2V0SXNTdXBlcnNldCxzZXREaXNqb2ludFVuaW9uLHNldERpc2pvaW50U3VidHJhY3Q7JGjigI1faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wia2V5RVFcIiwgWyRo4oCNX2EgPT4gKGtleUVRID0gJGjigI1fYSldXSxbXCJtYWtlQ29weVNldFwiLCBbJGjigI1fYSA9PiAobWFrZUNvcHlTZXQgPSAkaOKAjV9hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAobXVzdE1hdGNoID0gJGjigI1fYSldXSxbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjigI1fYSA9PiAoZ2V0Q29weVNldEtleXMgPSAkaOKAjV9hKV1dLFtcInNldElzU3VwZXJzZXRcIiwgWyRo4oCNX2EgPT4gKHNldElzU3VwZXJzZXQgPSAkaOKAjV9hKV1dLFtcInNldERpc2pvaW50VW5pb25cIiwgWyRo4oCNX2EgPT4gKHNldERpc2pvaW50VW5pb24gPSAkaOKAjV9hKV1dLFtcInNldERpc2pvaW50U3VidHJhY3RcIiwgWyRo4oCNX2EgPT4gKHNldERpc2pvaW50U3VidHJhY3QgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PW1ha2VDb3B5U2V0KFtdKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb3B5U2V0TWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihzZXQpPT57XG5tdXN0TWF0Y2goc2V0LE0uc2V0KCksJ3NldCBvZiBhbW91bnQnKTtcbnJldHVybiBzZXQ7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eTooc2V0KT0+Z2V0Q29weVNldEtleXMoc2V0KS5sZW5ndGg9PT0wLFxuZG9Jc0dURTpzZXRJc1N1cGVyc2V0LFxuZG9Jc0VxdWFsOmtleUVRLFxuZG9BZGQ6c2V0RGlzam9pbnRVbmlvbixcbmRvU3VidHJhY3Q6c2V0RGlzam9pbnRTdWJ0cmFjdH0pOyRo4oCNX29uY2UuY29weVNldE1hdGhIZWxwZXJzKGNvcHlTZXRNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb3B5U2V0TWF0aEhlbHBlcnMiOlsiY29weVNldE1hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEOT4BZzBAAAcwQAADYAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbmF0Il0sImV4cG9ydHMiOlsibmF0TWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsTmF0LGlzTmF0OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjigI1fYSA9PiAoTmF0ID0gJGjigI1fYSldXSxbXCJpc05hdFwiLCBbJGjigI1fYSA9PiAoaXNOYXQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0IGVtcHR5PTBuO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbmF0TWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihuYXQpPT57XG4vL1xuYXNzZXJ0LnR5cGVvZihuYXQsJ2JpZ2ludCcpO1xuaXNOYXQobmF0KXx8RmFpbCBgdmFsdWUgJHtuYXR9IG11c3QgYmUgYSBuYXR1cmFsIG51bWJlcmA7XG5yZXR1cm4gTmF0KG5hdCk7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eToobmF0KT0+bmF0PT09ZW1wdHksXG5kb0lzR1RFOihsZWZ0LHJpZ2h0KT0+bGVmdD49cmlnaHQsXG5kb0lzRXF1YWw6KGxlZnQscmlnaHQpPT5sZWZ0PT09cmlnaHQsXG4vL1xuZG9BZGQ6KGxlZnQscmlnaHQpPT5sZWZ0K3JpZ2h0LFxuZG9TdWJ0cmFjdDoobGVmdCxyaWdodCk9Pk5hdChsZWZ0LXJpZ2h0KX0pOyRo4oCNX29uY2UubmF0TWF0aEhlbHBlcnMobmF0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibmF0TWF0aEhlbHBlcnMiOlsibmF0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAA/JGylwGAABcBgAANgAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbInNldE1hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixhc3NlcnRLZXksZWxlbWVudHNJc1N1cGVyc2V0LGVsZW1lbnRzRGlzam9pbnRVbmlvbixlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QsY29lcmNlVG9FbGVtZW50cyxlbGVtZW50c0NvbXBhcmU7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImFzc2VydEtleVwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0S2V5ID0gJGjigI1fYSldXSxbXCJlbGVtZW50c0lzU3VwZXJzZXRcIiwgWyRo4oCNX2EgPT4gKGVsZW1lbnRzSXNTdXBlcnNldCA9ICRo4oCNX2EpXV0sW1wiZWxlbWVudHNEaXNqb2ludFVuaW9uXCIsIFskaOKAjV9hID0+IChlbGVtZW50c0Rpc2pvaW50VW5pb24gPSAkaOKAjV9hKV1dLFtcImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdFwiLCBbJGjigI1fYSA9PiAoZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0ID0gJGjigI1fYSldXSxbXCJjb2VyY2VUb0VsZW1lbnRzXCIsIFskaOKAjV9hID0+IChjb2VyY2VUb0VsZW1lbnRzID0gJGjigI1fYSldXSxbXCJlbGVtZW50c0NvbXBhcmVcIiwgWyRo4oCNX2EgPT4gKGVsZW1lbnRzQ29tcGFyZSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbXB0eT1oYXJkZW4oW10pO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNldE1hdGhIZWxwZXJzPWhhcmRlbih7XG5kb0NvZXJjZToobGlzdCk9Pntcbmxpc3Q9Y29lcmNlVG9FbGVtZW50cyhsaXN0KTtcbi8vXG4vL1xuLy9cbi8vXG5hc3NlcnRLZXkobGlzdCk7XG5yZXR1cm4gbGlzdDtcbiB9LFxuZG9NYWtlRW1wdHk6KCk9PmVtcHR5LFxuZG9Jc0VtcHR5OihsaXN0KT0+cGFzc1N0eWxlT2YobGlzdCk9PT0nY29weUFycmF5JyYmbGlzdC5sZW5ndGg9PT0wLFxuZG9Jc0dURTplbGVtZW50c0lzU3VwZXJzZXQsXG5kb0lzRXF1YWw6KHgseSk9PmVsZW1lbnRzQ29tcGFyZSh4LHkpPT09MCxcbmRvQWRkOmVsZW1lbnRzRGlzam9pbnRVbmlvbixcbmRvU3VidHJhY3Q6ZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0fSk7JGjigI1fb25jZS5zZXRNYXRoSGVscGVycyhzZXRNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzZXRNYXRoSGVscGVycyI6WyJzZXRNYXRoSGVscGVycyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACqHW8/hwMAAIcDAAAjAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3BheW1lbnQuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbInByZXBhcmVQYXltZW50S2luZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaW5pdEVtcHR5OyRo4oCNX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImluaXRFbXB0eVwiLCBbJGjigI1fYSA9PiAoaW5pdEVtcHR5ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLy9cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUGF5bWVudEtpbmQ9KGlzc3VlclpvbmUsbmFtZSxicmFuZCxQYXltZW50SSk9PntcbmNvbnN0IG1ha2VQYXltZW50PWlzc3VlclpvbmUuZXhvQ2xhc3MoXG4gYCR7bmFtZX0gcGF5bWVudGAsXG5QYXltZW50SSxcbmluaXRFbXB0eSxcbntcbmdldEFsbGVnZWRCcmFuZCgpe1xucmV0dXJuIGJyYW5kO1xuIH19KTtcblxuXG5yZXR1cm4gbWFrZVBheW1lbnQ7XG4gfTskaOKAjV9vbmNlLnByZXBhcmVQYXltZW50S2luZChwcmVwYXJlUGF5bWVudEtpbmQpO1xuaGFyZGVuKHByZXBhcmVQYXltZW50S2luZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwcmVwYXJlUGF5bWVudEtpbmQiOlsicHJlcGFyZVBheW1lbnRLaW5kIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACH5x/cNIAAADSAAACkAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvcGF5bWVudExlZGdlci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBhZ29yaWMvc3RvcmUiLCIuL2Ftb3VudE1hdGguanMiLCIuL3BheW1lbnQuanMiLCIuL3B1cnNlLmpzIiwiLi90eXBlR3VhcmRzLmpzIl0sImV4cG9ydHMiOlsicHJlcGFyZVBheW1lbnRMZWRnZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgscSxGYWlsLGFubm90YXRlRXJyb3IsaXNQcm9taXNlLG11c3RNYXRjaCxNLGtleUVRLEFtb3VudE1hdGgscHJlcGFyZVBheW1lbnRLaW5kLHByZXBhcmVQdXJzZUtpbmQsQnJhbmRJLG1ha2VJc3N1ZXJJbnRlcmZhY2VzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjigI1fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaOKAjV9hID0+IChpc1Byb21pc2UgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaOKAjV9hID0+IChtdXN0TWF0Y2ggPSAkaOKAjV9hKV1dLFtcIk1cIiwgWyRo4oCNX2EgPT4gKE0gPSAkaOKAjV9hKV1dLFtcImtleUVRXCIsIFskaOKAjV9hID0+IChrZXlFUSA9ICRo4oCNX2EpXV1dXSxbXCIuL2Ftb3VudE1hdGguanNcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRo4oCNX2EgPT4gKEFtb3VudE1hdGggPSAkaOKAjV9hKV1dXV0sW1wiLi9wYXltZW50LmpzXCIsIFtbXCJwcmVwYXJlUGF5bWVudEtpbmRcIiwgWyRo4oCNX2EgPT4gKHByZXBhcmVQYXltZW50S2luZCA9ICRo4oCNX2EpXV1dXSxbXCIuL3B1cnNlLmpzXCIsIFtbXCJwcmVwYXJlUHVyc2VLaW5kXCIsIFskaOKAjV9hID0+IChwcmVwYXJlUHVyc2VLaW5kID0gJGjigI1fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiQnJhbmRJXCIsIFskaOKAjV9hID0+IChCcmFuZEkgPSAkaOKAjV9hKV1dLFtcIm1ha2VJc3N1ZXJJbnRlcmZhY2VzXCIsIFskaOKAjV9hID0+IChtYWtlSXNzdWVySW50ZXJmYWNlcyA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBhbW91bnRTaGFwZUZyb21FbGVtZW50U2hhcGU9KGJyYW5kLGFzc2V0S2luZCxlbGVtZW50U2hhcGUpPT57XG5sZXQgdmFsdWVTaGFwZTtcbnN3aXRjaChhc3NldEtpbmQpe1xuY2FzZSduYXQnOntcbnZhbHVlU2hhcGU9TS5uYXQoKTtcbmVsZW1lbnRTaGFwZT09PXVuZGVmaW5lZHx8XG5GYWlsIGBGdW5naWJsZSBhc3NldHMgY2Fubm90IGhhdmUgYW4gZWxlbWVudFNoYXBlOiAke3EoZWxlbWVudFNoYXBlKX1gO1xuYnJlYWs7XG4gfVxuY2FzZSdzZXQnOntcbmlmKGVsZW1lbnRTaGFwZT09PXVuZGVmaW5lZCl7XG52YWx1ZVNoYXBlPU0uYXJyYXlPZihNLmtleSgpKTtcbiB9ZWxzZXtcbnZhbHVlU2hhcGU9TS5hcnJheU9mKE0uYW5kKE0ua2V5KCksZWxlbWVudFNoYXBlKSk7XG4gfVxuYnJlYWs7XG4gfVxuY2FzZSdjb3B5U2V0Jzp7XG5pZihlbGVtZW50U2hhcGU9PT11bmRlZmluZWQpe1xudmFsdWVTaGFwZT1NLnNldCgpO1xuIH1lbHNle1xudmFsdWVTaGFwZT1NLnNldE9mKGVsZW1lbnRTaGFwZSk7XG4gfVxuYnJlYWs7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG5pZihlbGVtZW50U2hhcGU9PT11bmRlZmluZWQpe1xudmFsdWVTaGFwZT1NLmJhZygpO1xuIH1lbHNle1xudmFsdWVTaGFwZT1NLmJhZ09mKGVsZW1lbnRTaGFwZSk7XG4gfVxuYnJlYWs7XG4gfVxuZGVmYXVsdDp7XG5GYWlsIGB1bmV4cGVjdGVkIGFzc2V0IGtpbmQgJHtxKGFzc2V0S2luZCl9YDtcbiB9fVxuXG5cbmNvbnN0IGFtb3VudFNoYXBlPWhhcmRlbih7XG5icmFuZCwvL1xudmFsdWU6dmFsdWVTaGFwZX0pO1xuXG5yZXR1cm4gYW1vdW50U2hhcGU7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVQYXltZW50TGVkZ2VyPShcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuZGlzcGxheUluZm8sXG5lbGVtZW50U2hhcGUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkKT0+XG57XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGJyYW5kPWlzc3VlclpvbmUuZXhvKCBgJHtuYW1lfSBicmFuZGAsQnJhbmRJLHtcbmlzTXlJc3N1ZXIoYWxsZWdlZElzc3Vlcil7XG4vL1xucmV0dXJuIGFsbGVnZWRJc3N1ZXI9PT1pc3N1ZXI7XG4gfSxcbmdldEFsbGVnZWROYW1lKCl7XG5yZXR1cm4gbmFtZTtcbiB9LFxuLy9cbmdldERpc3BsYXlJbmZvKCl7XG5yZXR1cm4gZGlzcGxheUluZm87XG4gfSxcbmdldEFtb3VudFNoYXBlKCl7XG5yZXR1cm4gYW1vdW50U2hhcGU7XG4gfX0pO1xuXG5cbmNvbnN0IGFtb3VudFNoYXBlPWFtb3VudFNoYXBlRnJvbUVsZW1lbnRTaGFwZShcbmJyYW5kLFxuYXNzZXRLaW5kLFxuZWxlbWVudFNoYXBlKTtcblxuXG5jb25zdHtJc3N1ZXJJLE1pbnRJLFBheW1lbnRJLFB1cnNlSUtpdH09bWFrZUlzc3VlckludGVyZmFjZXMoXG5icmFuZCxcbmFzc2V0S2luZCxcbmFtb3VudFNoYXBlKTtcblxuXG5jb25zdCBtYWtlUGF5bWVudD1wcmVwYXJlUGF5bWVudEtpbmQoaXNzdWVyWm9uZSxuYW1lLGJyYW5kLFBheW1lbnRJKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZT0ocmVhc29uKT0+e1xuLy9cbi8vXG5pZihvcHRTaHV0ZG93bldpdGhGYWlsdXJlIT09dW5kZWZpbmVkKXtcbnRyeXtcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUocmVhc29uKTtcbiB9Y2F0Y2goZXJySW5TaHV0ZG93bil7XG5hbm5vdGF0ZUVycm9yKGVyckluU2h1dGRvd24sWCBgQ2F1c2VkIGJ5OiAke3JlYXNvbn1gKTtcbnRocm93IGVyckluU2h1dGRvd247XG4gfVxuIH1cbnRocm93IHJlYXNvbjtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGF5bWVudExlZGdlcj1pc3N1ZXJab25lLndlYWtNYXBTdG9yZSgncGF5bWVudExlZGdlcicse1xudmFsdWVTaGFwZTphbW91bnRTaGFwZX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHBheW1lbnRSZWNvdmVyeVNldHM9aXNzdWVyWm9uZS53ZWFrTWFwU3RvcmUoJ3BheW1lbnRSZWNvdmVyeVNldHMnKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBpbml0UGF5bWVudD0ocGF5bWVudCxhbW91bnQsb3B0UmVjb3ZlcnlTZXQ9dW5kZWZpbmVkKT0+e1xuaWYocmVjb3ZlcnlTZXRzU3RhdGU9PT0nbm9SZWNvdmVyeVNldHMnKXtcbm9wdFJlY292ZXJ5U2V0PT09dW5kZWZpbmVkfHxcbkZhaWwgYHdoZW4gcmVjb3ZlclNldHNTdGF0ZSA9PT0gJ25vUmVjb3ZlcnlTZXRzJywgb3B0UmVjb3ZlcnlTZXQgbXVzdCBiZSBlbXB0eWA7XG4gfVxuaWYob3B0UmVjb3ZlcnlTZXQhPT11bmRlZmluZWQmJiFBbW91bnRNYXRoLmlzRW1wdHkoYW1vdW50KSl7XG5vcHRSZWNvdmVyeVNldC5hZGQocGF5bWVudCk7XG5wYXltZW50UmVjb3ZlcnlTZXRzLmluaXQocGF5bWVudCxvcHRSZWNvdmVyeVNldCk7XG4gfVxucGF5bWVudExlZGdlci5pbml0KHBheW1lbnQsYW1vdW50KTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVsZXRlUGF5bWVudD0ocGF5bWVudCk9PntcbnBheW1lbnRMZWRnZXIuZGVsZXRlKHBheW1lbnQpO1xuaWYocGF5bWVudFJlY292ZXJ5U2V0cy5oYXMocGF5bWVudCkpe1xuY29uc3QgcmVjb3ZlcnlTZXQ9cGF5bWVudFJlY292ZXJ5U2V0cy5nZXQocGF5bWVudCk7XG5wYXltZW50UmVjb3ZlcnlTZXRzLmRlbGV0ZShwYXltZW50KTtcbnJlY292ZXJ5U2V0LmRlbGV0ZShwYXltZW50KTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb2VyY2U9KGFsbGVnZWRBbW91bnQpPT5BbW91bnRNYXRoLmNvZXJjZShicmFuZCxhbGxlZ2VkQW1vdW50KTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhc3NlcnRBbW91bnRDb25zaXN0ZW50PShwYXltZW50QmFsYW5jZSxvcHRBbW91bnRTaGFwZSk9PntcbmlmKG9wdEFtb3VudFNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChwYXltZW50QmFsYW5jZSxvcHRBbW91bnRTaGFwZSwnYW1vdW50Jyk7XG4gfVxuIH07XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGFzc2VydExpdmVQYXltZW50PShwYXltZW50KT0+e1xucGF5bWVudExlZGdlci5oYXMocGF5bWVudCl8fFxuRmFpbCBgJHtwYXltZW50fSB3YXMgbm90IGEgbGl2ZSBwYXltZW50IGZvciBicmFuZCAke3EoXG5icmFuZClcbiB9LiBJdCBjb3VsZCBiZSBhIHVzZWQtdXAgcGF5bWVudCwgYSBwYXltZW50IGZvciBhbm90aGVyIGJyYW5kLCBvciBpdCBtaWdodCBub3QgYmUgYSBwYXltZW50IGF0IGFsbC5gO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVwb3NpdEludGVybmFsPShcbmJhbGFuY2VTdG9yZSxcbnNyY1BheW1lbnQsXG5vcHRBbW91bnRTaGFwZT11bmRlZmluZWQpPT5cbntcbiFpc1Byb21pc2Uoc3JjUGF5bWVudCl8fFxuYXNzZXJ0LmZhaWwoXG4gYGRlcG9zaXQgZG9lcyBub3QgYWNjZXB0IHByb21pc2VzIGFzIGZpcnN0IGFyZ3VtZW50LiBJbnN0ZWFkIG9mIHBhc3NpbmcgdGhlIHByb21pc2UgKGRlcG9zaXQocGF5bWVudFByb21pc2UpKSwgY29uc2lkZXIgdW53cmFwcGluZyB0aGUgcHJvbWlzZSBmaXJzdDogRS53aGVuKHBheW1lbnRQcm9taXNlLCAoYWN0dWFsUGF5bWVudCA9PiBkZXBvc2l0KGFjdHVhbFBheW1lbnQpKWAsXG5UeXBlRXJyb3IpO1xuXG5hc3NlcnRMaXZlUGF5bWVudChzcmNQYXltZW50KTtcbmNvbnN0IHNyY1BheW1lbnRCYWxhbmNlPXBheW1lbnRMZWRnZXIuZ2V0KHNyY1BheW1lbnQpO1xuYXNzZXJ0QW1vdW50Q29uc2lzdGVudChzcmNQYXltZW50QmFsYW5jZSxvcHRBbW91bnRTaGFwZSk7XG50cnl7XG4vL1xuLy9cbi8vXG5kZWxldGVQYXltZW50KHNyY1BheW1lbnQpO1xuYmFsYW5jZVN0b3JlLmluY3JlbWVudChzcmNQYXltZW50QmFsYW5jZSk7XG4gfWNhdGNoKGVycil7XG5zaHV0ZG93bkxlZGdlcldpdGhGYWlsdXJlKGVycik7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIHNyY1BheW1lbnRCYWxhbmNlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgd2l0aGRyYXdJbnRlcm5hbD0oYmFsYW5jZVN0b3JlLGFtb3VudCxyZWNvdmVyeVNldD11bmRlZmluZWQpPT57XG5hbW91bnQ9Y29lcmNlKGFtb3VudCk7XG5jb25zdCBwYXltZW50PW1ha2VQYXltZW50KCk7XG4vL1xuLy9cbmJhbGFuY2VTdG9yZS5kZWNyZW1lbnQoYW1vdW50KXx8XG5GYWlsIGBXaXRoZHJhd2FsIG9mICR7YW1vdW50fSBmYWlsZWQgYmVjYXVzZSB0aGUgcHVyc2Ugb25seSBjb250YWluZWQgJHtiYWxhbmNlU3RvcmUuZ2V0QW1vdW50KCl9YDtcbnRyeXtcbmluaXRQYXltZW50KHBheW1lbnQsYW1vdW50LHJlY292ZXJ5U2V0KTtcbiB9Y2F0Y2goZXJyKXtcbnNodXRkb3duTGVkZ2VyV2l0aEZhaWx1cmUoZXJyKTtcbnRocm93IGVycjtcbiB9XG5yZXR1cm4gcGF5bWVudDtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IG1ha2VFbXB0eVB1cnNlPXByZXBhcmVQdXJzZUtpbmQoXG5pc3N1ZXJab25lLFxubmFtZSxcbmFzc2V0S2luZCxcbmJyYW5kLFxuUHVyc2VJS2l0LFxuaGFyZGVuKHtcbmRlcG9zaXRJbnRlcm5hbCxcbndpdGhkcmF3SW50ZXJuYWx9KSxcblxucmVjb3ZlcnlTZXRzU3RhdGUsXG5wYXltZW50UmVjb3ZlcnlTZXRzKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBpc3N1ZXI9aXNzdWVyWm9uZS5leG8oIGAke25hbWV9IGlzc3VlcmAsSXNzdWVySSx7XG5nZXRCcmFuZCgpe1xucmV0dXJuIGJyYW5kO1xuIH0sXG5nZXRBbGxlZ2VkTmFtZSgpe1xucmV0dXJuIG5hbWU7XG4gfSxcbmdldEFzc2V0S2luZCgpe1xucmV0dXJuIGFzc2V0S2luZDtcbiB9LFxuZ2V0RGlzcGxheUluZm8oKXtcbnJldHVybiBkaXNwbGF5SW5mbztcbiB9LFxubWFrZUVtcHR5UHVyc2UoKXtcbnJldHVybiBtYWtlRW1wdHlQdXJzZSgpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmlzTGl2ZShwYXltZW50KXtcbi8vXG5yZXR1cm4gcGF5bWVudExlZGdlci5oYXMocGF5bWVudCk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0QW1vdW50T2YocGF5bWVudCl7XG4vL1xuYXNzZXJ0TGl2ZVBheW1lbnQocGF5bWVudCk7XG5yZXR1cm4gcGF5bWVudExlZGdlci5nZXQocGF5bWVudCk7XG4gfSxcbi8qXG5cblxuICAgICAqL1xuYnVybihwYXltZW50LG9wdEFtb3VudFNoYXBlPXVuZGVmaW5lZCl7XG4vL1xuYXNzZXJ0TGl2ZVBheW1lbnQocGF5bWVudCk7XG5jb25zdCBwYXltZW50QmFsYW5jZT1wYXltZW50TGVkZ2VyLmdldChwYXltZW50KTtcbmFzc2VydEFtb3VudENvbnNpc3RlbnQocGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUpO1xudHJ5e1xuLy9cbmRlbGV0ZVBheW1lbnQocGF5bWVudCk7XG4gfWNhdGNoKGVycil7XG5zaHV0ZG93bkxlZGdlcldpdGhGYWlsdXJlKGVycik7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIHBheW1lbnRCYWxhbmNlO1xuIH19KTtcblxuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtaW50UmVjb3ZlcnlQdXJzZT0vKiAgICAgICAgICAgICAgICAgICAqL1xuaXNzdWVyWm9uZS5tYWtlT25jZSgnbWludFJlY292ZXJ5UHVyc2UnLCgpPT5tYWtlRW1wdHlQdXJzZSgpKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtaW50PWlzc3VlclpvbmUuZXhvKCBgJHtuYW1lfSBtaW50YCxNaW50SSx7XG5nZXRJc3N1ZXIoKXtcbnJldHVybiBpc3N1ZXI7XG4gfSxcbm1pbnRQYXltZW50KG5ld0Ftb3VudCl7XG5uZXdBbW91bnQ9Y29lcmNlKG5ld0Ftb3VudCk7XG5tdXN0TWF0Y2gobmV3QW1vdW50LGFtb3VudFNoYXBlLCdtaW50ZWQgYW1vdW50Jyk7XG4vL1xuLy9cbmNvbnN0IHJhd1BheW1lbnQ9bWFrZVBheW1lbnQoKTtcbmluaXRQYXltZW50KHJhd1BheW1lbnQsbmV3QW1vdW50LHVuZGVmaW5lZCk7XG5cbmNvbnN0IG1pbnRSZWNvdmVyeVB1cnNlQmVmb3JlPW1pbnRSZWNvdmVyeVB1cnNlLmdldEN1cnJlbnRBbW91bnQoKTtcbm1pbnRSZWNvdmVyeVB1cnNlLmRlcG9zaXQocmF3UGF5bWVudCxuZXdBbW91bnQpO1xuY29uc3QgcGF5bWVudD1taW50UmVjb3ZlcnlQdXJzZS53aXRoZHJhdyhuZXdBbW91bnQpO1xuY29uc3QgbWludFJlY292ZXJ5UHVyc2VBZnRlcj1taW50UmVjb3ZlcnlQdXJzZS5nZXRDdXJyZW50QW1vdW50KCk7XG5hc3NlcnQoa2V5RVEobWludFJlY292ZXJ5UHVyc2VCZWZvcmUsbWludFJlY292ZXJ5UHVyc2VBZnRlcikpO1xucmV0dXJuIHBheW1lbnQ7XG4gfX0pO1xuXG5cbmNvbnN0IGlzc3VlcktpdD1oYXJkZW4oe2lzc3VlcixtaW50LGJyYW5kLG1pbnRSZWNvdmVyeVB1cnNlfSk7XG5yZXR1cm4gaXNzdWVyS2l0O1xuIH07JGjigI1fb25jZS5wcmVwYXJlUGF5bWVudExlZGdlcihwcmVwYXJlUGF5bWVudExlZGdlcik7XG5oYXJkZW4ocHJlcGFyZVBheW1lbnRMZWRnZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicHJlcGFyZVBheW1lbnRMZWRnZXIiOlsicHJlcGFyZVBheW1lbnRMZWRnZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA2cc3cfQQAAD0EAAAIQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wdXJzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiLi9hbW91bnRNYXRoLmpzIiwiLi90cmFuc2llbnROb3RpZmllci5qcyIsIi4vYW1vdW50U3RvcmUuanMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUHVyc2VLaW5kIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLE0sbWFrZUNvcHlTZXQsQW1vdW50TWF0aCxtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQsbWFrZUFtb3VudFN0b3JlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJtYWtlQ29weVNldFwiLCBbJGjigI1fYSA9PiAobWFrZUNvcHlTZXQgPSAkaOKAjV9hKV1dXV0sW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaOKAjV9hID0+IChBbW91bnRNYXRoID0gJGjigI1fYSldXV1dLFtcIi4vdHJhbnNpZW50Tm90aWZpZXIuanNcIiwgW1tcIm1ha2VUcmFuc2llbnROb3RpZmllcktpdFwiLCBbJGjigI1fYSA9PiAobWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0ID0gJGjigI1fYSldXV1dLFtcIi4vYW1vdW50U3RvcmUuanNcIiwgW1tcIm1ha2VBbW91bnRTdG9yZVwiLCBbJGjigI1fYSA9PiAobWFrZUFtb3VudFN0b3JlID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0IEVNUFRZX0NPUFlfU0VUPW1ha2VDb3B5U2V0KFtdKTtcblxuLy9cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZVB1cnNlS2luZD0oXG5pc3N1ZXJab25lLFxubmFtZSxcbmFzc2V0S2luZCxcbmJyYW5kLFxuUHVyc2VJS2l0LFxucHVyc2VNZXRob2RzLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5wYXltZW50UmVjb3ZlcnlTZXRzKT0+XG57XG5jb25zdCBhbW91bnRTaGFwZT1icmFuZC5nZXRBbW91bnRTaGFwZSgpO1xuXG4vL1xuLy9cbi8vXG5jb25zdHtwcm92aWRlTm90aWZpZXIsdXBkYXRlOnVwZGF0ZUJhbGFuY2V9PW1ha2VUcmFuc2llbnROb3RpZmllcktpdCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWF5YmVSZWNvdmVyeVNldD0oc3RhdGUpPT57XG5jb25zdHtyZWNvdmVyeVNldH09c3RhdGU7XG5pZihyZWNvdmVyeVNldHNTdGF0ZT09PSdoYXNSZWNvdmVyeVNldHMnKXtcbnJldHVybiByZWNvdmVyeVNldDtcbiB9ZWxzZXtcbnJlY292ZXJ5U2V0c1N0YXRlPT09J25vUmVjb3ZlcnlTZXRzJ3x8XG5GYWlsIGByZWNvdmVyU2V0c1N0YXRlIG11c3QgYmUgbm9SZWNvdmVyeVNldHMgaWYgaXQgaXNuJ3QgaGFzUmVjb3ZlclNldHNgO1xucGF5bWVudFJlY292ZXJ5U2V0cyE9PXVuZGVmaW5lZHx8XG5GYWlsIGBwYXltZW50UmVjb3ZlcnlTZXRzIG11c3QgYWx3YXlzIGJlIGRlZmluZWRgO1xucmVjb3ZlcnlTZXQuZ2V0U2l6ZSgpPT09MHx8XG5GYWlsIGBXaXRoIG5vUmVjb3ZlcnlTZXRzLCByZWNvdmVyeVNldCBtdXN0IGJlIGVtcHR5YDtcblxucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3R7ZGVwb3NpdEludGVybmFsLHdpdGhkcmF3SW50ZXJuYWx9PXB1cnNlTWV0aG9kcztcbmNvbnN0IG1ha2VQdXJzZUtpdD1pc3N1ZXJab25lLmV4b0NsYXNzS2l0KFxuIGAke25hbWV9IFB1cnNlYCxcblB1cnNlSUtpdCxcbigpPT57XG5jb25zdCBjdXJyZW50QmFsYW5jZT1BbW91bnRNYXRoLm1ha2VFbXB0eShicmFuZCxhc3NldEtpbmQpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVjb3ZlcnlTZXQ9aXNzdWVyWm9uZS5kZXRhY2hlZCgpLnNldFN0b3JlKCdyZWNvdmVyeSBzZXQnKTtcblxucmV0dXJue1xuY3VycmVudEJhbGFuY2UsXG5yZWNvdmVyeVNldH07XG5cbiB9LFxue1xucHVyc2U6e1xuZGVwb3NpdChzcmNQYXltZW50LG9wdEFtb3VudFNoYXBlPXVuZGVmaW5lZCl7XG4vL1xuLy9cbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3R7cHVyc2V9PXRoaXMuZmFjZXRzO1xuY29uc3QgYmFsYW5jZVN0b3JlPW1ha2VBbW91bnRTdG9yZShzdGF0ZSwnY3VycmVudEJhbGFuY2UnKTtcbi8vXG5jb25zdCBzcmNQYXltZW50QmFsYW5jZT1kZXBvc2l0SW50ZXJuYWwoXG5iYWxhbmNlU3RvcmUsXG5zcmNQYXltZW50LFxub3B0QW1vdW50U2hhcGUpO1xuXG51cGRhdGVCYWxhbmNlKHB1cnNlLGJhbGFuY2VTdG9yZS5nZXRBbW91bnQoKSk7XG5yZXR1cm4gc3JjUGF5bWVudEJhbGFuY2U7XG4gfSxcbndpdGhkcmF3KGFtb3VudCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0e3B1cnNlfT10aGlzLmZhY2V0cztcblxuY29uc3Qgb3B0UmVjb3ZlcnlTZXQ9bWF5YmVSZWNvdmVyeVNldChzdGF0ZSk7XG5jb25zdCBiYWxhbmNlU3RvcmU9bWFrZUFtb3VudFN0b3JlKHN0YXRlLCdjdXJyZW50QmFsYW5jZScpO1xuLy9cbmNvbnN0IHBheW1lbnQ9d2l0aGRyYXdJbnRlcm5hbChcbmJhbGFuY2VTdG9yZSxcbmFtb3VudCxcbm9wdFJlY292ZXJ5U2V0KTtcblxudXBkYXRlQmFsYW5jZShwdXJzZSxiYWxhbmNlU3RvcmUuZ2V0QW1vdW50KCkpO1xucmV0dXJuIHBheW1lbnQ7XG4gfSxcbmdldEN1cnJlbnRBbW91bnQoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3QgYmFsYW5jZVN0b3JlPW1ha2VBbW91bnRTdG9yZShzdGF0ZSwnY3VycmVudEJhbGFuY2UnKTtcbnJldHVybiBiYWxhbmNlU3RvcmUuZ2V0QW1vdW50KCk7XG4gfSxcbmdldEN1cnJlbnRBbW91bnROb3RpZmllcigpe1xucmV0dXJuIHByb3ZpZGVOb3RpZmllcih0aGlzLmZhY2V0cy5wdXJzZSk7XG4gfSxcbmdldEFsbGVnZWRCcmFuZCgpe1xucmV0dXJuIGJyYW5kO1xuIH0sXG5cbmdldERlcG9zaXRGYWNldCgpe1xucmV0dXJuIHRoaXMuZmFjZXRzLmRlcG9zaXRGYWNldDtcbiB9LFxuXG5nZXRSZWNvdmVyeVNldCgpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5jb25zdCBvcHRSZWNvdmVyeVNldD1tYXliZVJlY292ZXJ5U2V0KHN0YXRlKTtcbmlmKG9wdFJlY292ZXJ5U2V0PT09dW5kZWZpbmVkKXtcbnJldHVybiBFTVBUWV9DT1BZX1NFVDtcbiB9XG5yZXR1cm4gb3B0UmVjb3ZlcnlTZXQuc25hcHNob3QoKTtcbiB9LFxucmVjb3ZlckFsbCgpe1xuY29uc3R7c3RhdGUsZmFjZXRzfT10aGlzO1xubGV0IGFtb3VudD1BbW91bnRNYXRoLm1ha2VFbXB0eShicmFuZCxhc3NldEtpbmQpO1xuY29uc3Qgb3B0UmVjb3ZlcnlTZXQ9bWF5YmVSZWNvdmVyeVNldChzdGF0ZSk7XG5pZihvcHRSZWNvdmVyeVNldD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gYW1vdW50Oy8vXG4gfVxuZm9yKGNvbnN0IHBheW1lbnQgb2Ygb3B0UmVjb3ZlcnlTZXQua2V5cygpKXtcbi8vXG4vL1xuY29uc3QgZGVsdGE9ZmFjZXRzLnB1cnNlLmRlcG9zaXQocGF5bWVudCk7XG5hbW91bnQ9QW1vdW50TWF0aC5hZGQoYW1vdW50LGRlbHRhLGJyYW5kKTtcbiB9XG5vcHRSZWNvdmVyeVNldC5nZXRTaXplKCk9PT0wfHxcbkZhaWwgYGludGVybmFsOiBSZW1haW5pbmcgdW5yZWNvdmVyZWQgcGF5bWVudHM6ICR7ZmFjZXRzLnB1cnNlLmdldFJlY292ZXJ5U2V0KCl9YDtcbnJldHVybiBhbW91bnQ7XG4gfX0sXG5cbmRlcG9zaXRGYWNldDp7XG5yZWNlaXZlKC4uLmFyZ3Mpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnB1cnNlLmRlcG9zaXQoLi4uYXJncyk7XG4gfX19LFxuXG5cbntcbnN0YXRlU2hhcGU6e1xuY3VycmVudEJhbGFuY2U6YW1vdW50U2hhcGUsXG5yZWNvdmVyeVNldDpNLnJlbW90YWJsZSgncmVjb3ZlcnlTZXQnKX19KTtcblxuXG5cbnJldHVybigpPT5tYWtlUHVyc2VLaXQoKS5wdXJzZTtcbiB9OyRo4oCNX29uY2UucHJlcGFyZVB1cnNlS2luZChwcmVwYXJlUHVyc2VLaW5kKTtcbmhhcmRlbihwcmVwYXJlUHVyc2VLaW5kKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVQdXJzZUtpbmQiOlsicHJlcGFyZVB1cnNlS2luZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC7Qwwc4gUAAOIFAAAtAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3RyYW5zaWVudE5vdGlmaWVyLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy9ub3RpZmllciJdLCJleHBvcnRzIjpbIm1ha2VUcmFuc2llbnROb3RpZmllcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSxwcm92aWRlTGF6eSxtYWtlTm90aWZpZXJLaXQ7JGjigI1faW1wb3J0cyhbW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZVwiLCBbJGjigI1fYSA9PiAobWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJwcm92aWRlTGF6eVwiLCBbJGjigI1fYSA9PiAocHJvdmlkZUxhenkgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wibWFrZU5vdGlmaWVyS2l0XCIsIFskaOKAjV9hID0+IChtYWtlTm90aWZpZXJLaXQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vL1xuLy9cbmNvbnN0ICAgICAgICBtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQ9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHRyYW5zaWVudE5vdGlmZXJLaXRzPW1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUoXG4ndHJhbnNpZW50Tm90aWZlcktpdHMnKTtcblxuXG5jb25zdCBwcm92aWRlTm90aWZpZXJLaXQ9KGtleSk9PlxucHJvdmlkZUxhenkodHJhbnNpZW50Tm90aWZlcktpdHMsa2V5LCgpPT5cbm1ha2VOb3RpZmllcktpdChrZXkuZ2V0Q3VycmVudEFtb3VudCgpKSk7XG5cblxuY29uc3QgcHJvdmlkZU5vdGlmaWVyPShrZXkpPT5wcm92aWRlTm90aWZpZXJLaXQoa2V5KS5ub3RpZmllcjtcbmNvbnN0IHVwZGF0ZT0oa2V5LG5ld1ZhbHVlKT0+e1xuaWYodHJhbnNpZW50Tm90aWZlcktpdHMuaGFzKGtleSkpe1xuY29uc3R7dXBkYXRlcn09dHJhbnNpZW50Tm90aWZlcktpdHMuZ2V0KGtleSk7XG51cGRhdGVyLnVwZGF0ZVN0YXRlKG5ld1ZhbHVlKTtcbiB9XG4gfTtcblxucmV0dXJue3Byb3ZpZGVOb3RpZmllcix1cGRhdGV9O1xuIH07JGjigI1fb25jZS5tYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQobWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KTtcbmhhcmRlbihtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0IjpbIm1ha2VUcmFuc2llbnROb3RpZmllcktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABy3Wqx+BgAAPgYAAAmAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJBbW91bnRQYXR0ZXJuU2hhcGUiLCJBbW91bnRTaGFwZSIsIkFzc2V0S2luZFNoYXBlIiwiQnJhbmRJIiwiQnJhbmRTaGFwZSIsIkRlcG9zaXRGYWNldFNoYXBlIiwiRGlzcGxheUluZm9TaGFwZSIsIklzc3VlcktpdFNoYXBlIiwiSXNzdWVyU2hhcGUiLCJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiLCJNaW50U2hhcGUiLCJOb3RpZmllclNoYXBlIiwiUGF5bWVudFNoYXBlIiwiUHVyc2VTaGFwZSIsIlJhdGlvU2hhcGUiLCJpc0NvcHlCYWdWYWx1ZSIsImlzQ29weVNldFZhbHVlIiwiaXNOYXRWYWx1ZSIsImlzU2V0VmFsdWUiLCJtYWtlSXNzdWVySW50ZXJmYWNlcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTSxtYXRjaGVzLGdldEludGVyZmFjZUd1YXJkUGF5bG9hZDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjigI1fYSA9PiAobWF0Y2hlcyA9ICRo4oCNX2EpXV0sW1wiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkXCIsIFskaOKAjV9hID0+IChnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCAgICAgICAgQnJhbmRTaGFwZT1NLnJlbW90YWJsZSgnQnJhbmQnKTskaOKAjV9vbmNlLkJyYW5kU2hhcGUoQnJhbmRTaGFwZSk7XG5jb25zdCAgICAgICAgSXNzdWVyU2hhcGU9TS5yZW1vdGFibGUoJ0lzc3VlcicpOyRo4oCNX29uY2UuSXNzdWVyU2hhcGUoSXNzdWVyU2hhcGUpO1xuY29uc3QgICAgICAgIFBheW1lbnRTaGFwZT1NLnJlbW90YWJsZSgnUGF5bWVudCcpOyRo4oCNX29uY2UuUGF5bWVudFNoYXBlKFBheW1lbnRTaGFwZSk7XG5jb25zdCAgICAgICAgUHVyc2VTaGFwZT1NLnJlbW90YWJsZSgnUHVyc2UnKTskaOKAjV9vbmNlLlB1cnNlU2hhcGUoUHVyc2VTaGFwZSk7XG5jb25zdCAgICAgICAgRGVwb3NpdEZhY2V0U2hhcGU9TS5yZW1vdGFibGUoJ0RlcG9zaXRGYWNldCcpOyRo4oCNX29uY2UuRGVwb3NpdEZhY2V0U2hhcGUoRGVwb3NpdEZhY2V0U2hhcGUpO1xuY29uc3QgICAgICAgIE5vdGlmaWVyU2hhcGU9TS5yZW1vdGFibGUoJ05vdGlmaWVyJyk7JGjigI1fb25jZS5Ob3RpZmllclNoYXBlKE5vdGlmaWVyU2hhcGUpO1xuY29uc3QgICAgICAgIE1pbnRTaGFwZT1NLnJlbW90YWJsZSgnTWludCcpO1xuXG4vKlxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLk1pbnRTaGFwZShNaW50U2hhcGUpO1xuY29uc3QgTmF0VmFsdWVTaGFwZT1NLm5hdCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgQ29weVNldFZhbHVlU2hhcGU9TS5zZXQoKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IFNldFZhbHVlU2hhcGU9TS5hcnJheU9mKE0ua2V5KCkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBDb3B5QmFnVmFsdWVTaGFwZT1NLmJhZygpO1xuXG5jb25zdCBBbW91bnRWYWx1ZVNoYXBlPU0ub3IoXG5OYXRWYWx1ZVNoYXBlLFxuQ29weVNldFZhbHVlU2hhcGUsXG5TZXRWYWx1ZVNoYXBlLFxuQ29weUJhZ1ZhbHVlU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBBbW91bnRTaGFwZT1oYXJkZW4oe1xuYnJhbmQ6QnJhbmRTaGFwZSxcbnZhbHVlOkFtb3VudFZhbHVlU2hhcGV9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5BbW91bnRTaGFwZShBbW91bnRTaGFwZSk7XG5jb25zdCAgICAgICAgQW1vdW50UGF0dGVyblNoYXBlPU0ucGF0dGVybigpOyRo4oCNX29uY2UuQW1vdW50UGF0dGVyblNoYXBlKEFtb3VudFBhdHRlcm5TaGFwZSk7XG5cbmNvbnN0ICAgICAgICBSYXRpb1NoYXBlPWhhcmRlbih7XG5udW1lcmF0b3I6QW1vdW50U2hhcGUsXG5kZW5vbWluYXRvcjpBbW91bnRTaGFwZX0pO1xuXG5cbi8qXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuUmF0aW9TaGFwZShSYXRpb1NoYXBlKTtcbmNvbnN0ICAgICAgICBpc05hdFZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsTmF0VmFsdWVTaGFwZSk7JGjigI1fb25jZS5pc05hdFZhbHVlKGlzTmF0VmFsdWUpO1xuaGFyZGVuKGlzTmF0VmFsdWUpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0NvcHlTZXRWYWx1ZT0odmFsdWUpPT5tYXRjaGVzKHZhbHVlLENvcHlTZXRWYWx1ZVNoYXBlKTskaOKAjV9vbmNlLmlzQ29weVNldFZhbHVlKGlzQ29weVNldFZhbHVlKTtcbmhhcmRlbihpc0NvcHlTZXRWYWx1ZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzU2V0VmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxTZXRWYWx1ZVNoYXBlKTskaOKAjV9vbmNlLmlzU2V0VmFsdWUoaXNTZXRWYWx1ZSk7XG5oYXJkZW4oaXNTZXRWYWx1ZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weUJhZ1ZhbHVlPSh2YWx1ZSk9Pm1hdGNoZXModmFsdWUsQ29weUJhZ1ZhbHVlU2hhcGUpOyRo4oCNX29uY2UuaXNDb3B5QmFnVmFsdWUoaXNDb3B5QmFnVmFsdWUpO1xuaGFyZGVuKGlzQ29weUJhZ1ZhbHVlKTtcblxuLy9cbmNvbnN0ICAgICAgICBNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVM9MTAwOyRo4oCNX29uY2UuTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTKE1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyk7XG5cbmNvbnN0ICAgICAgICBBc3NldEtpbmRTaGFwZT1NLm9yKCduYXQnLCdzZXQnLCdjb3B5U2V0JywnY29weUJhZycpOyRo4oCNX29uY2UuQXNzZXRLaW5kU2hhcGUoQXNzZXRLaW5kU2hhcGUpO1xuXG5jb25zdCAgICAgICAgRGlzcGxheUluZm9TaGFwZT1NLnNwbGl0UmVjb3JkKFxue30sXG57XG5kZWNpbWFsUGxhY2VzOk0uYW5kKFxuTS5ndGUoLU1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyksXG5NLmx0ZShNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMpKSxcblxuYXNzZXRLaW5kOkFzc2V0S2luZFNoYXBlfSxcblxue1xuLy9cbi8vXG59KTskaOKAjV9vbmNlLkRpc3BsYXlJbmZvU2hhcGUoRGlzcGxheUluZm9TaGFwZSk7XG5cblxuY29uc3QgICAgICAgIElzc3VlcktpdFNoYXBlPWhhcmRlbih7XG5icmFuZDpCcmFuZFNoYXBlLFxubWludDpNaW50U2hhcGUsXG5taW50UmVjb3ZlcnlQdXJzZTpQdXJzZVNoYXBlLFxuaXNzdWVyOklzc3VlclNoYXBlLFxuZGlzcGxheUluZm86RGlzcGxheUluZm9TaGFwZX0pO1xuXG5cbi8vXG4kaOKAjV9vbmNlLklzc3VlcktpdFNoYXBlKElzc3VlcktpdFNoYXBlKTtcbmNvbnN0ICAgICAgICBCcmFuZEk9TS5pbnRlcmZhY2UoJ0JyYW5kJyx7XG5pc015SXNzdWVyOk0uY2FsbFdoZW4oTS5hd2FpdChJc3N1ZXJTaGFwZSkpLnJldHVybnMoTS5ib29sZWFuKCkpLFxuZ2V0QWxsZWdlZE5hbWU6TS5jYWxsKCkucmV0dXJucyhNLnN0cmluZygpKSxcbmdldERpc3BsYXlJbmZvOk0uY2FsbCgpLnJldHVybnMoRGlzcGxheUluZm9TaGFwZSksXG5nZXRBbW91bnRTaGFwZTpNLmNhbGwoKS5yZXR1cm5zKE0ucGF0dGVybigpKX0pO1xuXG5cbi8qXG5cblxuXG4gKi8kaOKAjV9vbmNlLkJyYW5kSShCcmFuZEkpO1xuY29uc3QgICAgICAgIG1ha2VJc3N1ZXJJbnRlcmZhY2VzPShcbmJyYW5kU2hhcGU9QnJhbmRTaGFwZSxcbmFzc2V0S2luZFNoYXBlPUFzc2V0S2luZFNoYXBlLFxuYW1vdW50U2hhcGU9QW1vdW50U2hhcGUpPT5cbntcbmNvbnN0IElzc3Vlckk9TS5pbnRlcmZhY2UoJ0lzc3Vlcicse1xuZ2V0QnJhbmQ6TS5jYWxsKCkucmV0dXJucyhicmFuZFNoYXBlKSxcbmdldEFsbGVnZWROYW1lOk0uY2FsbCgpLnJldHVybnMoTS5zdHJpbmcoKSksXG5nZXRBc3NldEtpbmQ6TS5jYWxsKCkucmV0dXJucyhhc3NldEtpbmRTaGFwZSksXG5nZXREaXNwbGF5SW5mbzpNLmNhbGwoKS5yZXR1cm5zKERpc3BsYXlJbmZvU2hhcGUpLFxubWFrZUVtcHR5UHVyc2U6TS5jYWxsKCkucmV0dXJucyhQdXJzZVNoYXBlKSxcblxuaXNMaXZlOk0uY2FsbFdoZW4oTS5hd2FpdChQYXltZW50U2hhcGUpKS5yZXR1cm5zKE0uYm9vbGVhbigpKSxcbmdldEFtb3VudE9mOk0uY2FsbFdoZW4oTS5hd2FpdChQYXltZW50U2hhcGUpKS5yZXR1cm5zKGFtb3VudFNoYXBlKSxcbmJ1cm46TS5jYWxsV2hlbihNLmF3YWl0KFBheW1lbnRTaGFwZSkpLlxub3B0aW9uYWwoQW1vdW50UGF0dGVyblNoYXBlKS5cbnJldHVybnMoYW1vdW50U2hhcGUpfSk7XG5cblxuY29uc3QgTWludEk9TS5pbnRlcmZhY2UoJ01pbnQnLHtcbmdldElzc3VlcjpNLmNhbGwoKS5yZXR1cm5zKElzc3VlclNoYXBlKSxcbm1pbnRQYXltZW50Ok0uY2FsbChhbW91bnRTaGFwZSkucmV0dXJucyhQYXltZW50U2hhcGUpfSk7XG5cblxuY29uc3QgUGF5bWVudEk9TS5pbnRlcmZhY2UoJ1BheW1lbnQnLHtcbmdldEFsbGVnZWRCcmFuZDpNLmNhbGwoKS5yZXR1cm5zKGJyYW5kU2hhcGUpfSk7XG5cblxuY29uc3QgUHVyc2VJPU0uaW50ZXJmYWNlKCdQdXJzZScse1xuZ2V0QWxsZWdlZEJyYW5kOk0uY2FsbCgpLnJldHVybnMoYnJhbmRTaGFwZSksXG5nZXRDdXJyZW50QW1vdW50Ok0uY2FsbCgpLnJldHVybnMoYW1vdW50U2hhcGUpLFxuZ2V0Q3VycmVudEFtb3VudE5vdGlmaWVyOk0uY2FsbCgpLnJldHVybnMoTm90aWZpZXJTaGFwZSksXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuZGVwb3NpdDpNLmNhbGwoUGF5bWVudFNoYXBlKS5cbm9wdGlvbmFsKEFtb3VudFBhdHRlcm5TaGFwZSkuXG5yZXR1cm5zKGFtb3VudFNoYXBlKSxcbmdldERlcG9zaXRGYWNldDpNLmNhbGwoKS5yZXR1cm5zKERlcG9zaXRGYWNldFNoYXBlKSxcbndpdGhkcmF3Ok0uY2FsbChhbW91bnRTaGFwZSkucmV0dXJucyhQYXltZW50U2hhcGUpLFxuZ2V0UmVjb3ZlcnlTZXQ6TS5jYWxsKCkucmV0dXJucyhNLnNldE9mKFBheW1lbnRTaGFwZSkpLFxucmVjb3ZlckFsbDpNLmNhbGwoKS5yZXR1cm5zKGFtb3VudFNoYXBlKX0pO1xuXG5cbmNvbnN0IERlcG9zaXRGYWNldEk9TS5pbnRlcmZhY2UoJ0RlcG9zaXRGYWNldCcse1xucmVjZWl2ZTpnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoUHVyc2VJKS5tZXRob2RHdWFyZHMuZGVwb3NpdH0pO1xuXG5cbmNvbnN0IFB1cnNlSUtpdD1oYXJkZW4oe1xucHVyc2U6UHVyc2VJLFxuZGVwb3NpdEZhY2V0OkRlcG9zaXRGYWNldEl9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbklzc3VlckksXG5NaW50SSxcblBheW1lbnRJLFxuUHVyc2VJS2l0fSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZUlzc3VlckludGVyZmFjZXMobWFrZUlzc3VlckludGVyZmFjZXMpO1xuaGFyZGVuKG1ha2VJc3N1ZXJJbnRlcmZhY2VzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkJyYW5kU2hhcGUiOlsiQnJhbmRTaGFwZSJdLCJJc3N1ZXJTaGFwZSI6WyJJc3N1ZXJTaGFwZSJdLCJQYXltZW50U2hhcGUiOlsiUGF5bWVudFNoYXBlIl0sIlB1cnNlU2hhcGUiOlsiUHVyc2VTaGFwZSJdLCJEZXBvc2l0RmFjZXRTaGFwZSI6WyJEZXBvc2l0RmFjZXRTaGFwZSJdLCJOb3RpZmllclNoYXBlIjpbIk5vdGlmaWVyU2hhcGUiXSwiTWludFNoYXBlIjpbIk1pbnRTaGFwZSJdLCJBbW91bnRTaGFwZSI6WyJBbW91bnRTaGFwZSJdLCJBbW91bnRQYXR0ZXJuU2hhcGUiOlsiQW1vdW50UGF0dGVyblNoYXBlIl0sIlJhdGlvU2hhcGUiOlsiUmF0aW9TaGFwZSJdLCJpc05hdFZhbHVlIjpbImlzTmF0VmFsdWUiXSwiaXNDb3B5U2V0VmFsdWUiOlsiaXNDb3B5U2V0VmFsdWUiXSwiaXNTZXRWYWx1ZSI6WyJpc1NldFZhbHVlIl0sImlzQ29weUJhZ1ZhbHVlIjpbImlzQ29weUJhZ1ZhbHVlIl0sIk1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyI6WyJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiXSwiQXNzZXRLaW5kU2hhcGUiOlsiQXNzZXRLaW5kU2hhcGUiXSwiRGlzcGxheUluZm9TaGFwZSI6WyJEaXNwbGF5SW5mb1NoYXBlIl0sIklzc3VlcktpdFNoYXBlIjpbIklzc3VlcktpdFNoYXBlIl0sIkJyYW5kSSI6WyJCcmFuZEkiXSwibWFrZUlzc3VlckludGVyZmFjZXMiOlsibWFrZUlzc3VlckludGVyZmFjZXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA/v5WjgUaAAAFGgAAJwAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9jYWxsYmFjay5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJjYWxsRSIsImNhbGxTeW5jIiwiaXNDYWxsYmFjayIsIm1ha2VGdW5jdGlvbkNhbGxiYWNrIiwibWFrZU1ldGhvZENhbGxiYWNrIiwibWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrIiwibWFrZVN5bmNNZXRob2RDYWxsYmFjayIsInByZXBhcmVBdHRlbnVhdG9yIiwicHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLG1ha2VFcnJvcixxLEUsaXNPYmplY3QsaXNQYXNzYWJsZVN5bWJvbCxnZXRJbnRlcmZhY2VNZXRob2RLZXlzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaOKAjV9hID0+IChtYWtlRXJyb3IgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaOKAjV9hID0+IChpc09iamVjdCA9ICRo4oCNX2EpXV0sW1wiaXNQYXNzYWJsZVN5bWJvbFwiLCBbJGjigI1fYSA9PiAoaXNQYXNzYWJsZVN5bWJvbCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5c1wiLCBbJGjigI1fYSA9PiAoZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuY29uc3R7b3duS2V5czpyYXdPd25LZXlzfT1SZWZsZWN0O1xuY29uc3Qgb3duS2V5cz1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yYXdPd25LZXlzO1xuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpc1Byb3BlcnR5S2V5PShrZXkpPT57XG5zd2l0Y2godHlwZW9mIGtleSl7XG5jYXNlJ3N0cmluZyc6XG5jYXNlJ251bWJlcic6XG5jYXNlJ3N5bWJvbCc6XG5yZXR1cm4gdHJ1ZTtcbmRlZmF1bHQ6XG5yZXR1cm4gZmFsc2U7fVxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNhbGxTeW5jPShjYWxsYmFjaywuLi5hcmdzKT0+e1xuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdGFyZ2V0KC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH1cbnJldHVybiB0YXJnZXRbbWV0aG9kTmFtZV0oLi4uYm91bmQsLi4uYXJncyk7XG4gfTskaOKAjV9vbmNlLmNhbGxTeW5jKGNhbGxTeW5jKTtcbmhhcmRlbihjYWxsU3luYyk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjYWxsRT0oY2FsbGJhY2ssLi4uYXJncyk9PntcbmNvbnN0e3RhcmdldCxtZXRob2ROYW1lLGJvdW5kfT1jYWxsYmFjaztcbmlmKG1ldGhvZE5hbWU9PT11bmRlZmluZWQpe1xucmV0dXJuIEUodGFyZ2V0KSguLi5ib3VuZCwuLi5hcmdzKTtcbiB9XG5yZXR1cm4gRSh0YXJnZXQpW21ldGhvZE5hbWVdKC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH07JGjigI1fb25jZS5jYWxsRShjYWxsRSk7XG5oYXJkZW4oY2FsbEUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTeW5jRnVuY3Rpb25DYWxsYmFjaz0odGFyZ2V0LC4uLmJvdW5kKT0+e1xudHlwZW9mIHRhcmdldD09PSdmdW5jdGlvbid8fFxuRmFpbCBgc3luYyBmdW5jdGlvbiBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhIGZ1bmN0aW9uOiAke3RhcmdldH1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsYm91bmQsaXNTeW5jOnRydWV9KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgICAgICovY2IpO1xuIH07JGjigI1fb25jZS5tYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2sobWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrKTtcbmhhcmRlbihtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VGdW5jdGlvbkNhbGxiYWNrPSh0YXJnZXQsLi4uYm91bmQpPT57XG5pc09iamVjdCh0YXJnZXQpfHxcbkZhaWwgYGZ1bmN0aW9uIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGEgZnVuY3Rpb24gcHJlc2VuY2U6ICR7dGFyZ2V0fWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxib3VuZH0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRo4oCNX29uY2UubWFrZUZ1bmN0aW9uQ2FsbGJhY2sobWFrZUZ1bmN0aW9uQ2FsbGJhY2spO1xuaGFyZGVuKG1ha2VGdW5jdGlvbkNhbGxiYWNrKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTeW5jTWV0aG9kQ2FsbGJhY2s9KHRhcmdldCxtZXRob2ROYW1lLC4uLmJvdW5kKT0+e1xuaXNPYmplY3QodGFyZ2V0KXx8XG5GYWlsIGBzeW5jIG1ldGhvZCBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3Q6ICR7dGFyZ2V0fWA7XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSl8fFxuRmFpbCBgbWV0aG9kIG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBwYXNzYWJsZSBzeW1ib2w6ICR7bWV0aG9kTmFtZX1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsbWV0aG9kTmFtZSxib3VuZCxpc1N5bmM6dHJ1ZX0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9jYik7XG4gfTskaOKAjV9vbmNlLm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2sobWFrZVN5bmNNZXRob2RDYWxsYmFjayk7XG5oYXJkZW4obWFrZVN5bmNNZXRob2RDYWxsYmFjayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWV0aG9kQ2FsbGJhY2s9KHRhcmdldCxtZXRob2ROYW1lLC4uLmJvdW5kKT0+e1xuaXNPYmplY3QodGFyZ2V0KXx8RmFpbCBgbWV0aG9kIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGFuIG9iamVjdDogJHt0YXJnZXR9YDtcbnR5cGVvZiBtZXRob2ROYW1lPT09J3N0cmluZyd8fFxuaXNQYXNzYWJsZVN5bWJvbChtZXRob2ROYW1lKXx8XG5GYWlsIGBtZXRob2QgbmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIHBhc3NhYmxlIHN5bWJvbDogJHttZXRob2ROYW1lfWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxtZXRob2ROYW1lLGJvdW5kfSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICovY2IpO1xuIH07JGjigI1fb25jZS5tYWtlTWV0aG9kQ2FsbGJhY2sobWFrZU1ldGhvZENhbGxiYWNrKTtcbmhhcmRlbihtYWtlTWV0aG9kQ2FsbGJhY2spO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ2FsbGJhY2s9KGNhbGxiYWNrKT0+e1xuaWYoIWlzT2JqZWN0KGNhbGxiYWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xucmV0dXJuKFxuaXNPYmplY3QodGFyZ2V0KSYmKFxubWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSkpJiZcbkFycmF5LmlzQXJyYXkoYm91bmQpKTtcblxuIH07JGjigI1fb25jZS5pc0NhbGxiYWNrKGlzQ2FsbGJhY2spO1xuaGFyZGVuKGlzQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUF0dGVudWF0b3I9KFxuem9uZSxcbm1ldGhvZE5hbWVzLFxue2ludGVyZmFjZUd1YXJkLHRhZz0nQXR0ZW51YXRvcid9PXt9KT0+XG57XG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtZXRob2RzPS8qICAgICAgICAgICAgICAgICAgKi9cbmZyb21FbnRyaWVzKFxubWV0aG9kTmFtZXMubWFwKChrZXkpPT57XG4vL1xuaWYoIWlzUHJvcGVydHlLZXkoa2V5KSl7XG50aHJvdyBGYWlsIGBrZXkgJHtxKGtleSl9IGlzIG5vdCBhIFByb3BlcnR5S2V5YDtcbiB9XG5cbmNvbnN0IG09LyogICAgICAgICAgICAgICAgICAqL3tcbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICovXG5ba2V5XSguLi5hcmdzKXtcbi8vXG5jb25zdCBjYj10aGlzLnN0YXRlLmNic1trZXldO1xuaWYoIWNiKXtcbmNvbnN0IGVycj1tYWtlRXJyb3IoIGB1bmltcGxlbWVudGVkICR7cSh0YWcpfSBtZXRob2QgJHtxKGtleSl9YCk7XG5pZih0aGlzLnN0YXRlLmlzU3luYyl7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIFByb21pc2UucmVqZWN0KGVycik7XG4gfVxuaWYoY2IuaXNTeW5jKXtcbnJldHVybiBjYWxsU3luYyhjYiwuLi5hcmdzKTtcbiB9XG5yZXR1cm4gY2FsbEUoY2IsLi4uYXJncyk7XG4gfX1bXG5rZXldO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAqL1trZXksbV0pO1xuIH0pKTtcblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VBdHRlbnVhdG9yPXpvbmUuZXhvQ2xhc3MoXG50YWcsXG5pbnRlcmZhY2VHdWFyZCxcbi8qXG5cblxuXG5cbiAgICAgKi9cbih7XG50YXJnZXQ9bnVsbCxcbmlzU3luYz1mYWxzZSxcbm92ZXJyaWRlcz0vKiAgICAgICAgICAgICAgICAgICAgKi97fX0pPT5cbntcbmNvbnN0IGNicz0vKiAgICAgICAgICAgICAgICAgICAgKi97fTtcblxuY29uc3QgcmVtYWluaW5nPW5ldyBTZXQobWV0aG9kTmFtZXMpO1xuZm9yKGNvbnN0IGtleSBvZiBvd25LZXlzKG92ZXJyaWRlcykpe1xucmVtYWluaW5nLmhhcyhrZXkpfHxcbkZhaWwgYCR7cSh0YWcpfSBvdmVycmlkZXNbJHtxKGtleSl9XSBub3QgYWxsb3dlZCBieSBtZXRob2ROYW1lc2A7XG5cbnJlbWFpbmluZy5kZWxldGUoa2V5KTtcbmNvbnN0IGNiPW92ZXJyaWRlc1trZXldO1xuY2I9PW51bGx8fFxuaXNDYWxsYmFjayhjYil8fFxuRmFpbCBgJHtxKHRhZyl9IG92ZXJyaWRlc1ske3Eoa2V5KX1dIGlzIG5vdCBhIGNhbGxiYWNrOyBnb3QgJHtjYn1gO1xuY2JzW2tleV09Y2I7XG4gfVxuZm9yKGNvbnN0IGtleSBvZiByZW1haW5pbmcpe1xuaWYoaXNTeW5jKXtcbmNic1trZXldPW1ha2VTeW5jTWV0aG9kQ2FsbGJhY2sodGFyZ2V0LGtleSk7XG4gfWVsc2V7XG5jYnNba2V5XT1tYWtlTWV0aG9kQ2FsbGJhY2sodGFyZ2V0LGtleSk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2Nicyxpc1N5bmN9KTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAqL21ldGhvZHMpO1xuXG5yZXR1cm4gbWFrZUF0dGVudWF0b3I7XG4gfTskaOKAjV9vbmNlLnByZXBhcmVBdHRlbnVhdG9yKHByZXBhcmVBdHRlbnVhdG9yKTtcbmhhcmRlbihwcmVwYXJlQXR0ZW51YXRvcik7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcj0oem9uZSxpbnRlcmZhY2VHdWFyZCxvcHRzPXt9KT0+e1xuY29uc3QgbWV0aG9kTmFtZXM9Z2V0SW50ZXJmYWNlTWV0aG9kS2V5cyhpbnRlcmZhY2VHdWFyZCk7XG5jb25zdCBtYWtlQXR0ZW51YXRvcj1wcmVwYXJlQXR0ZW51YXRvcih6b25lLG1ldGhvZE5hbWVzLHtcbi4uLm9wdHMsXG5pbnRlcmZhY2VHdWFyZH0pO1xuXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9tYWtlQXR0ZW51YXRvcik7XG4gfTskaOKAjV9vbmNlLnByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcihwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IpO1xuaGFyZGVuKHByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjYWxsU3luYyI6WyJjYWxsU3luYyJdLCJjYWxsRSI6WyJjYWxsRSJdLCJtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2siOlsibWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrIl0sIm1ha2VGdW5jdGlvbkNhbGxiYWNrIjpbIm1ha2VGdW5jdGlvbkNhbGxiYWNrIl0sIm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2siOlsibWFrZVN5bmNNZXRob2RDYWxsYmFjayJdLCJtYWtlTWV0aG9kQ2FsbGJhY2siOlsibWFrZU1ldGhvZENhbGxiYWNrIl0sImlzQ2FsbGJhY2siOlsiaXNDYWxsYmFjayJdLCJwcmVwYXJlQXR0ZW51YXRvciI6WyJwcmVwYXJlQXR0ZW51YXRvciJdLCJwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IiOlsicHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABI+V8UcBgAAHAYAACUAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvY29uZmlnLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJCcmlkZ2VJZCIsIkNvc21vc0luaXRLZXlUb0JyaWRnZUlkIiwiVkJhbmtBY2NvdW50IiwiV2FsbGV0TmFtZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBCcmlkZ2VJZD0vKiAgICAgICAgICAgICAgICAqL3tcbkJBTks6J2JhbmsnLFxuQ09SRTonY29yZScsXG5ESUJDOidkaWJjJyxcblNUT1JBR0U6J3N0b3JhZ2UnLFxuUFJPVklTSU9OOidwcm92aXNpb24nLFxuUFJPVklTSU9OX1NNQVJUX1dBTExFVDoncHJvdmlzaW9uV2FsbGV0JyxcblZMT0NBTENIQUlOOid2bG9jYWxjaGFpbicsXG5WVFJBTlNGRVI6J3Z0cmFuc2ZlcicsXG5XQUxMRVQ6J3dhbGxldCd9OyRo4oCNX29uY2UuQnJpZGdlSWQoQnJpZGdlSWQpO1xuXG5oYXJkZW4oQnJpZGdlSWQpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0ICAgICAgICBDb3Ntb3NJbml0S2V5VG9CcmlkZ2VJZD17XG52YmFua1BvcnQ6QnJpZGdlSWQuQkFOSyxcbnZpYmNQb3J0OkJyaWRnZUlkLkRJQkN9OyRo4oCNX29uY2UuQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQoQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQpO1xuXG5cbmNvbnN0ICAgICAgICBXYWxsZXROYW1lPS8qICAgICAgICAgICAgICAgICove1xuZGVwb3NpdEZhY2V0OidkZXBvc2l0RmFjZXQnfTskaOKAjV9vbmNlLldhbGxldE5hbWUoV2FsbGV0TmFtZSk7XG5cbmhhcmRlbihXYWxsZXROYW1lKTtcblxuLy9cbmNvbnN0ICAgICAgICBWQmFua0FjY291bnQ9LyogICAgICAgICAgICAgICAgKi97XG5yZXNlcnZlOntcbm1vZHVsZTondmJhbmsvcmVzZXJ2ZScsXG5hZGRyZXNzOidhZ29yaWMxYWUwbG10emxncmNubGE5eGprcGFhcnE1ZDVkZmV6NjNoM251Y2wnfSxcblxucHJvdmlzaW9uOntcbm1vZHVsZTondmJhbmsvcHJvdmlzaW9uJyxcbmFkZHJlc3M6J2Fnb3JpYzFtZWd6eXRnNjVjeXJnenM2ZnZ6eGdyY3F2d3dsN3VncHQ2MjM0Nid9fTskaOKAjV9vbmNlLlZCYW5rQWNjb3VudChWQmFua0FjY291bnQpO1xuXG5cbmhhcmRlbihWQmFua0FjY291bnQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQnJpZGdlSWQiOlsiQnJpZGdlSWQiXSwiQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQiOlsiQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQiXSwiV2FsbGV0TmFtZSI6WyJXYWxsZXROYW1lIl0sIlZCYW5rQWNjb3VudCI6WyJWQmFua0FjY291bnQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA0N+uT04EAABOBAAAJAAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9kZWJ1Zy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZVRyYWNlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvL1xuXG5sZXQgZGVidWdJbnN0YW5jZT0xO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VUcmFjZXI9KG5hbWUsZW5hYmxlPXRydWUpPT57XG5kZWJ1Z0luc3RhbmNlKz0xO1xubGV0IGRlYnVnQ291bnQ9MTtcbmNvbnN0IGtleT0gYC0tLS0tICR7bmFtZX0uJHtkZWJ1Z0luc3RhbmNlfSBgO1xuLy9cbnN3aXRjaChlbmFibGUpe1xuY2FzZSBmYWxzZTp7XG5jb25zdCBsb2dEaXNhYmxlZD0oLi4uX2FyZ3MpPT57IH07XG5yZXR1cm4gbG9nRGlzYWJsZWQ7XG4gfVxuY2FzZSd2ZXJib3NlJzp7XG5jb25zdCBpbmZvVGljaz0ob3B0TG9nLC4uLmFyZ3MpPT57XG5pZihvcHRMb2cubG9nKXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSwuLi5hcmdzKTtcbiB9ZWxzZXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSxvcHRMb2csLi4uYXJncyk7XG4gfVxuIH07XG5yZXR1cm4gaW5mb1RpY2s7XG4gfVxuZGVmYXVsdDp7XG5jb25zdCBkZWJ1Z1RpY2s9KG9wdExvZywuLi5hcmdzKT0+e1xuaWYob3B0TG9nLmxvZyl7XG5vcHRMb2cubG9nKGtleSxkZWJ1Z0NvdW50Kz0xLC4uLmFyZ3MpO1xuIH1lbHNle1xuY29uc29sZS5pbmZvKGtleSxkZWJ1Z0NvdW50Kz0xLG9wdExvZywuLi5hcmdzKTtcbiB9XG4gfTtcbnJldHVybiBkZWJ1Z1RpY2s7XG4gfX1cblxuIH07JGjigI1fb25jZS5tYWtlVHJhY2VyKG1ha2VUcmFjZXIpO1xuaGFyZGVuKG1ha2VUcmFjZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYWNlciI6WyJtYWtlVHJhY2VyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACZplWaWAgAAlgIAACUAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZXJyb3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIk5vbk51bGxpc2giXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHE7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIE5vbk51bGxpc2g9KHZhbCxvcHREZXRhaWxzPSBgdW5leHBlY3RlZCAke3EodmFsKX1gKT0+e1xuaWYodmFsIT1udWxsKXtcbi8vXG5yZXR1cm4gdmFsO1xuIH1cbmFzc2VydC5mYWlsKG9wdERldGFpbHMpO1xuIH07JGjigI1fb25jZS5Ob25OdWxsaXNoKE5vbk51bGxpc2gpO1xuaGFyZGVuKE5vbk51bGxpc2gpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiTm9uTnVsbGlzaCI6WyJOb25OdWxsaXNoIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAM16pCnMBAAAzAQAACQAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9jb25maWcuanMiLCIuL2RlYnVnLmpzIiwiLi9lcnJvcnMuanMiLCIuL3V0aWxzLmpzIiwiLi9tZXRob2QtdG9vbHMuanMiLCIuL3R5cGVDaGVjay5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vdHlwZXMtaW5kZXguanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiLCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyJdLCJleHBvcnRzIjpbbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9jb25maWcuanMiLCIuL2RlYnVnLmpzIiwiLi9lcnJvcnMuanMiLCIuL21ldGhvZC10b29scy5qcyIsIi4vdHlwZUNoZWNrLmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi90eXBlcy1pbmRleC5qcyIsIi4vdXRpbHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9jb25maWcuanNcIiwgW11dLFtcIi4vZGVidWcuanNcIiwgW11dLFtcIi4vZXJyb3JzLmpzXCIsIFtdXSxbXCIuL3V0aWxzLmpzXCIsIFtdXSxbXCIuL21ldGhvZC10b29scy5qc1wiLCBbXV0sW1wiLi90eXBlQ2hlY2suanNcIiwgW11dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi90eXBlcy1pbmRleC5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiOltbIm9iamVjdE1hcCIsIm9iamVjdE1hcCJdXSwiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyI6W1sib2JqZWN0TWV0YU1hcCIsIm9iamVjdE1ldGFNYXAiXV0sIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIjpbWyJmcm9tVW5pcXVlRW50cmllcyIsImZyb21VbmlxdWVFbnRyaWVzIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABYJffQ6xUAAOsVAAAvAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vcGF0dGVybnMiLCJAYWdvcmljL2Jhc2Utem9uZS9oZWFwLmpzIiwiLi9jYWxsYmFjay5qcyJdLCJleHBvcnRzIjpbImFzc2VydENhcERhdGEiLCJhc3NlcnRQYXRoU2VnbWVudCIsImlzU3RyZWFtQ2VsbCIsIm1ha2VDaGFpblN0b3JhZ2VSb290IiwibWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSIsIm1ha2VTdG9yYWdlTm9kZUNoaWxkIiwicHJlcGFyZUNoYWluU3RvcmFnZU5vZGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRSxGYXIsTSxtYWtlSGVhcFpvbmUsY2I7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV0sW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRo4oCNX2EgPT4gKE0gPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qc1wiLCBbW1wibWFrZUhlYXBab25lXCIsIFskaOKAjV9hID0+IChtYWtlSGVhcFpvbmUgPSAkaOKAjV9hKV1dXV0sW1wiLi9jYWxsYmFjay5qc1wiLCBbW1wiKlwiLCBbJGjigI1fYSA9PiAoY2IgPSAkaOKAjV9hKV1dXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZUNoYWluU3RvcmFnZVJvb3QsICduYW1lJywge3ZhbHVlOiBcIm1ha2VDaGFpblN0b3JhZ2VSb290XCJ9KTskaOKAjV9vbmNlLm1ha2VDaGFpblN0b3JhZ2VSb290KG1ha2VDaGFpblN0b3JhZ2VSb290KTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZVN0b3JhZ2VOb2RlQ2hpbGQsICduYW1lJywge3ZhbHVlOiBcIm1ha2VTdG9yYWdlTm9kZUNoaWxkXCJ9KTskaOKAjV9vbmNlLm1ha2VTdG9yYWdlTm9kZUNoaWxkKG1ha2VTdG9yYWdlTm9kZUNoaWxkKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBDaGFpblN0b3JhZ2VOb2RlST1NLmludGVyZmFjZSgnU3RvcmFnZU5vZGUnLHtcbnNldFZhbHVlOk0uY2FsbFdoZW4oTS5zdHJpbmcoKSkucmV0dXJucygpLFxuZ2V0UGF0aDpNLmNhbGwoKS5yZXR1cm5zKE0uc3RyaW5nKCkpLFxuZ2V0U3RvcmVLZXk6TS5jYWxsV2hlbigpLnJldHVybnMoTS5yZWNvcmQoKSksXG5tYWtlQ2hpbGROb2RlOk0uY2FsbChNLnN0cmluZygpKS5cbm9wdGlvbmFsKE0uc3BsaXRSZWNvcmQoe30se3NlcXVlbmNlOk0uYm9vbGVhbigpfSx7fSkpLlxucmV0dXJucyhNLnJlbW90YWJsZSgnU3RvcmFnZU5vZGUnKSl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNTdHJlYW1DZWxsPShjZWxsKT0+XG5jZWxsJiZcbnR5cGVvZiBjZWxsPT09J29iamVjdCcmJlxuQXJyYXkuaXNBcnJheShjZWxsLnZhbHVlcykmJlxudHlwZW9mIGNlbGwuYmxvY2tIZWlnaHQ9PT0nc3RyaW5nJyYmXG4vXjAkfF5bMS05XVswLTldKiQvLnRlc3QoY2VsbC5ibG9ja0hlaWdodCk7JGjigI1fb25jZS5pc1N0cmVhbUNlbGwoaXNTdHJlYW1DZWxsKTtcbmhhcmRlbihpc1N0cmVhbUNlbGwpO1xuXG4vL1xuLy9cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Q2FwRGF0YT0oZGF0YSk9PntcbmFzc2VydC50eXBlb2YoZGF0YSwnb2JqZWN0Jyk7XG5hc3NlcnQoZGF0YSk7XG5hc3NlcnQudHlwZW9mKGRhdGEuYm9keSwnc3RyaW5nJyk7XG5hc3NlcnQoQXJyYXkuaXNBcnJheShkYXRhLnNsb3RzKSk7XG4vL1xuIH07JGjigI1fb25jZS5hc3NlcnRDYXBEYXRhKGFzc2VydENhcERhdGEpO1xuaGFyZGVuKGFzc2VydENhcERhdGEpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgcGF0aFNlZ21lbnRQYXR0ZXJuPS9eW2EtekEtWjAtOV8tXXsxLDEwMH0kLztcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGFzc2VydFBhdGhTZWdtZW50PShuYW1lKT0+e1xucGF0aFNlZ21lbnRQYXR0ZXJuLnRlc3QobmFtZSl8fFxuRmFpbCBgUGF0aCBzZWdtZW50IG5hbWVzIG11c3QgY29uc2lzdCBvZiAxIHRvIDEwMCBjaGFyYWN0ZXJzIGxpbWl0ZWQgdG8gQVNDSUkgYWxwaGFudW1lcmljcywgdW5kZXJzY29yZXMsIGFuZC9vciBkYXNoZXM6ICR7bmFtZX1gO1xuIH07JGjigI1fb25jZS5hc3NlcnRQYXRoU2VnbWVudChhc3NlcnRQYXRoU2VnbWVudCk7XG5oYXJkZW4oYXNzZXJ0UGF0aFNlZ21lbnQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZT0oem9uZSk9Pntcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VDaGFpblN0b3JhZ2VOb2RlPXpvbmUuZXhvQ2xhc3MoXG4nQ2hhaW5TdG9yYWdlTm9kZScsXG5DaGFpblN0b3JhZ2VOb2RlSSxcbi8qXG5cblxuXG5cblxuXG4gICAgICovXG4obWVzc2VuZ2VyLHBhdGgse3NlcXVlbmNlPWZhbHNlfT17fSk9PntcbmFzc2VydC50eXBlb2YocGF0aCwnc3RyaW5nJyk7XG5hc3NlcnQudHlwZW9mKHNlcXVlbmNlLCdib29sZWFuJyk7XG5yZXR1cm4gaGFyZGVuKHtwYXRoLG1lc3NlbmdlcixzZXF1ZW5jZX0pO1xuIH0sXG57XG5nZXRQYXRoKCl7XG5yZXR1cm4gdGhpcy5zdGF0ZS5wYXRoO1xuIH0sXG4vKlxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgZ2V0U3RvcmVLZXkoKXtcbmNvbnN0e3BhdGgsbWVzc2VuZ2VyfT10aGlzLnN0YXRlO1xucmV0dXJuIGNiLmNhbGxFKG1lc3Nlbmdlcix7XG5tZXRob2Q6J2dldFN0b3JlS2V5JyxcbmFyZ3M6W3BhdGhdfSk7XG5cbiB9LFxuLypcblxuXG5cblxuICAgICAgICovXG5tYWtlQ2hpbGROb2RlKG5hbWUsY2hpbGROb2RlT3B0aW9ucz17fSl7XG5jb25zdHtzZXF1ZW5jZSxwYXRoLG1lc3Nlbmdlcn09dGhpcy5zdGF0ZTtcbmFzc2VydFBhdGhTZWdtZW50KG5hbWUpO1xuY29uc3QgbWVyZ2VkT3B0aW9ucz17c2VxdWVuY2UsLi4uY2hpbGROb2RlT3B0aW9uc307XG5yZXR1cm4gbWFrZUNoYWluU3RvcmFnZU5vZGUoXG5tZXNzZW5nZXIsXG4gYCR7cGF0aH0uJHtuYW1lfWAsXG5tZXJnZWRPcHRpb25zKTtcblxuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgc2V0VmFsdWUodmFsdWUpe1xuY29uc3R7c2VxdWVuY2UscGF0aCxtZXNzZW5nZXJ9PXRoaXMuc3RhdGU7XG5hc3NlcnQudHlwZW9mKHZhbHVlLCdzdHJpbmcnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGVudHJ5O1xuaWYoIXNlcXVlbmNlJiYhdmFsdWUpe1xuZW50cnk9W3BhdGhdO1xuIH1lbHNle1xuZW50cnk9W3BhdGgsdmFsdWVdO1xuIH1cbmF3YWl0IGNiLmNhbGxFKG1lc3Nlbmdlcix7XG5tZXRob2Q6c2VxdWVuY2U/J2FwcGVuZCc6J3NldCcsXG5hcmdzOltlbnRyeV19KTtcblxuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG59KTtcblxucmV0dXJuIG1ha2VDaGFpblN0b3JhZ2VOb2RlO1xuIH07JGjigI1fb25jZS5wcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZShwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSk7XG5cbmNvbnN0IG1ha2VIZWFwQ2hhaW5TdG9yYWdlTm9kZT1wcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZShtYWtlSGVhcFpvbmUoKSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZUNoYWluU3RvcmFnZVJvb3QoXG5oYW5kbGVTdG9yYWdlTWVzc2FnZSxcbnJvb3RQYXRoLFxucm9vdE9wdGlvbnM9e30pXG57XG5jb25zdCBtZXNzZW5nZXI9Y2IubWFrZUZ1bmN0aW9uQ2FsbGJhY2soaGFuZGxlU3RvcmFnZU1lc3NhZ2UpO1xuXG4vL1xuY29uc3Qgcm9vdE5vZGU9bWFrZUhlYXBDaGFpblN0b3JhZ2VOb2RlKG1lc3Nlbmdlcixyb290UGF0aCxyb290T3B0aW9ucyk7XG5yZXR1cm4gcm9vdE5vZGU7XG4gfVxuXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFrZU51bGxTdG9yYWdlTm9kZT0oKT0+e1xuLy9cbnJldHVybiBtYWtlQ2hhaW5TdG9yYWdlUm9vdChcbkZhcignTnVsbE1lc3NlbmdlcicsKCk9Pm51bGwpLFxuJ251bGwnKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gICAgICAgIG1ha2VTdG9yYWdlTm9kZUNoaWxkKHN0b3JhZ2VOb2RlUmVmLGNoaWxkTmFtZSl7XG5jb25zdCBleGlzdGluZ1N0b3JhZ2VOb2RlPWF3YWl0IHN0b3JhZ2VOb2RlUmVmO1xuY29uc3Qgc3RvcmFnZU5vZGU9ZXhpc3RpbmdTdG9yYWdlTm9kZXx8bWFrZU51bGxTdG9yYWdlTm9kZSgpO1xucmV0dXJuIEUoc3RvcmFnZU5vZGUpLm1ha2VDaGlsZE5vZGUoY2hpbGROYW1lKTtcbiB9XG5oYXJkZW4obWFrZVN0b3JhZ2VOb2RlQ2hpbGQpO1xuXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTZXJpYWxpemVUb1N0b3JhZ2U9KHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5yZXR1cm4gYXN5bmModmFsdWUpPT57XG5jb25zdCBtYXJzaGFsbGVkPWF3YWl0IEUobWFyc2hhbGxlcikudG9DYXBEYXRhKHZhbHVlKTtcbmNvbnN0IHNlcmlhbGl6ZWQ9SlNPTi5zdHJpbmdpZnkobWFyc2hhbGxlZCk7XG5yZXR1cm4gRShzdG9yYWdlTm9kZSkuc2V0VmFsdWUoc2VyaWFsaXplZCk7XG4gfTtcbiB9OyRo4oCNX29uY2UubWFrZVNlcmlhbGl6ZVRvU3RvcmFnZShtYWtlU2VyaWFsaXplVG9TdG9yYWdlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzU3RyZWFtQ2VsbCI6WyJpc1N0cmVhbUNlbGwiXSwiYXNzZXJ0Q2FwRGF0YSI6WyJhc3NlcnRDYXBEYXRhIl0sImFzc2VydFBhdGhTZWdtZW50IjpbImFzc2VydFBhdGhTZWdtZW50Il0sInByZXBhcmVDaGFpblN0b3JhZ2VOb2RlIjpbInByZXBhcmVDaGFpblN0b3JhZ2VOb2RlIl0sIm1ha2VDaGFpblN0b3JhZ2VSb290IjpbIm1ha2VDaGFpblN0b3JhZ2VSb290Il0sIm1ha2VTdG9yYWdlTm9kZUNoaWxkIjpbIm1ha2VTdG9yYWdlTm9kZUNoaWxkIl0sIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2UiOlsibWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAJOqnJsA4AALAOAAAmAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL21hcnNoYWwuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIi4vbGliLWNoYWluU3RvcmFnZS5qcyJdLCJleHBvcnRzIjpbImJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyIiwibWFrZUJvYXJkUmVtb3RlIiwibWFrZUhpc3RvcnlSZXZpdmVyIiwic2xvdFRvQm9hcmRSZW1vdGUiLCJ1bm1hcnNoYWxGcm9tVnN0b3JhZ2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRmFyLG1ha2VNYXJzaGFsLGlzU3RyZWFtQ2VsbDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjigI1fYSA9PiAobWFrZU1hcnNoYWwgPSAkaOKAjV9hKV1dXV0sW1wiLi9saWItY2hhaW5TdG9yYWdlLmpzXCIsIFtbXCJpc1N0cmVhbUNlbGxcIiwgWyRo4oCNX2EgPT4gKGlzU3RyZWFtQ2VsbCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VCb2FyZFJlbW90ZT0oe2JvYXJkSWQsaWZhY2V9KT0+e1xuY29uc3Qgbm9uYWxsZWdlZD1pZmFjZT9pZmFjZS5yZXBsYWNlKC9eQWxsZWdlZDogLywnJyk6Jyc7XG5yZXR1cm4gRmFyKCBgQm9hcmRSZW1vdGUke25vbmFsbGVnZWR9YCx7Z2V0Qm9hcmRJZDooKT0+Ym9hcmRJZH0pO1xuIH07XG5cbi8qXG5cblxuICovJGjigI1fb25jZS5tYWtlQm9hcmRSZW1vdGUobWFrZUJvYXJkUmVtb3RlKTtcbmNvbnN0ICAgICAgICBzbG90VG9Cb2FyZFJlbW90ZT0oYm9hcmRJZCxpZmFjZSk9PlxubWFrZUJvYXJkUmVtb3RlKHtib2FyZElkLGlmYWNlfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaOKAjV9vbmNlLnNsb3RUb0JvYXJkUmVtb3RlKHNsb3RUb0JvYXJkUmVtb3RlKTtcbmNvbnN0IGJvYXJkVmFsVG9TbG90PSh2YWwpPT57XG5pZignZ2V0Qm9hcmRJZCdpbiB2YWwpe1xucmV0dXJuIHZhbC5nZXRCb2FyZElkKCk7XG4gfVxudGhyb3cgRmFpbCBgdW5rbm93biBvYmogaW4gYm9hcmRTbG90dGluZ01hcnNoYWxsZXIudmFsVG9TbG90ICR7dmFsfWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyPShzbG90VG9WYWw9dW5kZWZpbmVkKT0+e1xucmV0dXJuIG1ha2VNYXJzaGFsKGJvYXJkVmFsVG9TbG90LHNsb3RUb1ZhbCx7XG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cbiB9O1xuXG4vL1xuLy9cbi8qXG5cblxuICovJGjigI1fb25jZS5ib2FyZFNsb3R0aW5nTWFyc2hhbGxlcihib2FyZFNsb3R0aW5nTWFyc2hhbGxlcik7XG5jb25zdCBhc3NlcnRDYXBEYXRhPShkYXRhKT0+e1xuYXNzZXJ0LnR5cGVvZihkYXRhLCdvYmplY3QnKTtcbmFzc2VydChkYXRhKTtcbmFzc2VydC50eXBlb2YoZGF0YS5ib2R5LCdzdHJpbmcnKTtcbmFzc2VydChBcnJheS5pc0FycmF5KGRhdGEuc2xvdHMpKTtcbi8vXG4gfTtcbmhhcmRlbihhc3NlcnRDYXBEYXRhKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdW5tYXJzaGFsRnJvbVZzdG9yYWdlPShkYXRhLGtleSxmcm9tQ2FwRGF0YSxpbmRleCk9PntcbmNvbnN0IHNlcmlhbGl6ZWQ9ZGF0YS5nZXQoa2V5KXx8RmFpbCBgbm8gZGF0YSBmb3IgJHtrZXl9YDtcbmFzc2VydC50eXBlb2Yoc2VyaWFsaXplZCwnc3RyaW5nJyk7XG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcblxuY29uc3Qgc3RyZWFtQ2VsbD1KU09OLnBhcnNlKHNlcmlhbGl6ZWQpO1xuaWYoIWlzU3RyZWFtQ2VsbChzdHJlYW1DZWxsKSl7XG50aHJvdyBGYWlsIGBub3QgYSBTdHJlYW1DZWxsOiAke3N0cmVhbUNlbGx9YDtcbiB9XG5cbmNvbnN0e3ZhbHVlc309c3RyZWFtQ2VsbDtcbnZhbHVlcy5sZW5ndGg+MHx8RmFpbCBgbm8gU3RyZWFtQ2VsbCB2YWx1ZXM6ICR7c3RyZWFtQ2VsbH1gO1xuXG5jb25zdCBtYXJzaGFsbGVkPXZhbHVlcy5hdChpbmRleCk7XG5hc3NlcnQudHlwZW9mKG1hcnNoYWxsZWQsJ3N0cmluZycpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNhcERhdGE9aGFyZGVuKEpTT04ucGFyc2UobWFyc2hhbGxlZCkpO1xuYXNzZXJ0Q2FwRGF0YShjYXBEYXRhKTtcblxuY29uc3QgdW5tYXJzaGFsbGVkPWZyb21DYXBEYXRhKGNhcERhdGEpO1xucmV0dXJuIHVubWFyc2hhbGxlZDtcbiB9OyRo4oCNX29uY2UudW5tYXJzaGFsRnJvbVZzdG9yYWdlKHVubWFyc2hhbEZyb21Wc3RvcmFnZSk7XG5oYXJkZW4odW5tYXJzaGFsRnJvbVZzdG9yYWdlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUhpc3RvcnlSZXZpdmVyPShlbnRyaWVzLHNsb3RUb1ZhbD11bmRlZmluZWQpPT57XG5jb25zdCBib2FyZD1ib2FyZFNsb3R0aW5nTWFyc2hhbGxlcihzbG90VG9WYWwpO1xuY29uc3QgdnNNYXA9bmV3IE1hcChlbnRyaWVzKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZnJvbUNhcERhdGE9KC4uLmFyZ3MpPT5cblJlZmxlY3QuYXBwbHkoYm9hcmQuZnJvbUNhcERhdGEsYm9hcmQsYXJncyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBnZXRJdGVtPShrZXkpPT51bm1hcnNoYWxGcm9tVnN0b3JhZ2UodnNNYXAsa2V5LGZyb21DYXBEYXRhLC0xKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNoaWxkcmVuPShwcmVmaXgpPT57XG5wcmVmaXguZW5kc1dpdGgoJy4nKXx8RmFpbCBgcHJlZml4IG11c3QgZW5kIHdpdGggJy4nYDtcbnJldHVybiBoYXJkZW4oW1xuLi4ubmV3IFNldChcbmVudHJpZXMuXG5tYXAoKFtrLF9dKT0+aykuXG5maWx0ZXIoKGspPT5rLnN0YXJ0c1dpdGgocHJlZml4KSkuXG5tYXAoKGspPT5rLnNsaWNlKHByZWZpeC5sZW5ndGgpLnNwbGl0KCcuJylbMF0pKV0pO1xuXG5cbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGhhcz0oayk9PnZzTWFwLmdldChrKSE9PXVuZGVmaW5lZDtcblxucmV0dXJuIGhhcmRlbih7Z2V0SXRlbSxjaGlsZHJlbixoYXN9KTtcbiB9OyRo4oCNX29uY2UubWFrZUhpc3RvcnlSZXZpdmVyKG1ha2VIaXN0b3J5UmV2aXZlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlQm9hcmRSZW1vdGUiOlsibWFrZUJvYXJkUmVtb3RlIl0sInNsb3RUb0JvYXJkUmVtb3RlIjpbInNsb3RUb0JvYXJkUmVtb3RlIl0sImJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyIjpbImJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyIl0sInVubWFyc2hhbEZyb21Wc3RvcmFnZSI6WyJ1bm1hcnNoYWxGcm9tVnN0b3JhZ2UiXSwibWFrZUhpc3RvcnlSZXZpdmVyIjpbIm1ha2VIaXN0b3J5UmV2aXZlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACV7Kq9dQgAAHUIAAArAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL21ldGhvZC10b29scy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIl0sImV4cG9ydHMiOlsiYmluZEFsbE1ldGhvZHMiLCJnZXRNZXRob2ROYW1lcyIsImdldFN0cmluZ01ldGhvZE5hbWVzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpc09iamVjdDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJpc09iamVjdFwiLCBbJGjigI1fYSA9PiAoaXNPYmplY3QgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHtnZXRQcm90b3R5cGVPZixjcmVhdGUsZnJvbUVudHJpZXMsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309XG5PYmplY3Q7XG5jb25zdHtvd25LZXlzLGFwcGx5fT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29tcGFyZVN0cmluZ2lmaWVkPShhLGIpPT57XG5pZih0eXBlb2YgYT09PXR5cGVvZiBiKXtcbmNvbnN0IGxlZnQ9U3RyaW5nKGEpO1xuY29uc3QgcmlnaHQ9U3RyaW5nKGIpO1xuLy9cbnJldHVybiBsZWZ0PHJpZ2h0Py0xOmxlZnQ+cmlnaHQ/MTowO1xuIH1cbmlmKHR5cGVvZiBhPT09J3N5bWJvbCcpe1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N0cmluZycpO1xucmV0dXJuLTE7XG4gfVxuYXNzZXJ0KHR5cGVvZiBhPT09J3N0cmluZycpO1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N5bWJvbCcpO1xucmV0dXJuIDE7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRNZXRob2ROYW1lcz0odmFsKT0+e1xubGV0IGxheWVyPXZhbDtcbmNvbnN0IG5hbWVzPW5ldyBTZXQoKTsvL1xud2hpbGUobGF5ZXIhPT1udWxsJiZsYXllciE9PU9iamVjdC5wcm90b3R5cGUpe1xuLy9cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobGF5ZXIpO1xuY29uc3Qgb3duTmFtZXM9LyogICAgICAgICAgICAgICovb3duS2V5cyhkZXNjcyk7XG5mb3IoY29uc3QgbmFtZSBvZiBvd25OYW1lcyl7XG4vL1xuLy9cbmlmKHR5cGVvZiB2YWxbbmFtZV09PT0nZnVuY3Rpb24nKXtcbm5hbWVzLmFkZChuYW1lKTtcbiB9XG4gfVxuaWYoIWlzT2JqZWN0KHZhbCkpe1xuYnJlYWs7XG4gfVxubGF5ZXI9Z2V0UHJvdG90eXBlT2YobGF5ZXIpO1xuIH1cbnJldHVybiBoYXJkZW4oWy4uLm5hbWVzXS5zb3J0KGNvbXBhcmVTdHJpbmdpZmllZCkpO1xuIH07JGjigI1fb25jZS5nZXRNZXRob2ROYW1lcyhnZXRNZXRob2ROYW1lcyk7XG5oYXJkZW4oZ2V0TWV0aG9kTmFtZXMpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldFN0cmluZ01ldGhvZE5hbWVzPSh2YWwpPT5cbi8qICAgICAgICAgICAgICAgICAgICovXG5nZXRNZXRob2ROYW1lcyh2YWwpLmZpbHRlcigobmFtZSk9PnR5cGVvZiBuYW1lPT09J3N0cmluZycpO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmdldFN0cmluZ01ldGhvZE5hbWVzKGdldFN0cmluZ01ldGhvZE5hbWVzKTtcbmNvbnN0ICAgICAgICBiaW5kQWxsTWV0aG9kcz0ob2JqKT0+XG5oYXJkZW4oXG5jcmVhdGUoXG5vYmosXG5mcm9tRW50cmllcyhcbmdldE1ldGhvZE5hbWVzKG9iaikubWFwKChuYW1lKT0+W1xubmFtZSxcbntcbnZhbHVlOigvKiAgICAgICAgICAgICAgICAgICAgKi8uLi5hcmdzKT0+XG5hcHBseShvYmpbbmFtZV0sb2JqLGFyZ3MpLFxuZW51bWVyYWJsZTp0cnVlfV0pKSkpOyRo4oCNX29uY2UuYmluZEFsbE1ldGhvZHMoYmluZEFsbE1ldGhvZHMpO1xuXG5cblxuXG5cbmhhcmRlbihiaW5kQWxsTWV0aG9kcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJnZXRTdHJpbmdNZXRob2ROYW1lcyI6WyJnZXRTdHJpbmdNZXRob2ROYW1lcyJdLCJiaW5kQWxsTWV0aG9kcyI6WyJiaW5kQWxsTWV0aG9kcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAACnOVnLx0AAC8dAAAxAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9tYXJzaGFsIiwiLi9tYXJzaGFsLmpzIiwiLi9kZWJ1Zy5qcyIsIi4vbGliLWNoYWluU3RvcmFnZS5qcyIsIi4vbWV0aG9kLXRvb2xzLmpzIiwiLi90ZXN0aW5nLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdE1hcnNoYWxsZXIiLCJkb2N1bWVudFN0b3JhZ2VTY2hlbWEiLCJtYWtlRmFrZVN0b3JhZ2VLaXQiLCJtYWtlTW9ja0NoYWluU3RvcmFnZVJvb3QiLCJzbG90U3RyaW5nVW5zZXJpYWxpemUiLCJzbG90VG9SZW1vdGFibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRmFyLG1ha2VNYXJzaGFsLFJlbW90YWJsZSx1bm1hcnNoYWxGcm9tVnN0b3JhZ2UsbWFrZVRyYWNlcixpc1N0cmVhbUNlbGwsbWFrZUNoYWluU3RvcmFnZVJvb3QsYmluZEFsbE1ldGhvZHMsZXZlbnRMb29wSXRlcmF0aW9uOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIm1ha2VNYXJzaGFsXCIsIFskaOKAjV9hID0+IChtYWtlTWFyc2hhbCA9ICRo4oCNX2EpXV0sW1wiUmVtb3RhYmxlXCIsIFskaOKAjV9hID0+IChSZW1vdGFibGUgPSAkaOKAjV9hKV1dXV0sW1wiLi9tYXJzaGFsLmpzXCIsIFtbXCJ1bm1hcnNoYWxGcm9tVnN0b3JhZ2VcIiwgWyRo4oCNX2EgPT4gKHVubWFyc2hhbEZyb21Wc3RvcmFnZSA9ICRo4oCNX2EpXV1dXSxbXCIuL2RlYnVnLmpzXCIsIFtbXCJtYWtlVHJhY2VyXCIsIFskaOKAjV9hID0+IChtYWtlVHJhY2VyID0gJGjigI1fYSldXV1dLFtcIi4vbGliLWNoYWluU3RvcmFnZS5qc1wiLCBbW1wiaXNTdHJlYW1DZWxsXCIsIFskaOKAjV9hID0+IChpc1N0cmVhbUNlbGwgPSAkaOKAjV9hKV1dLFtcIm1ha2VDaGFpblN0b3JhZ2VSb290XCIsIFskaOKAjV9hID0+IChtYWtlQ2hhaW5TdG9yYWdlUm9vdCA9ICRo4oCNX2EpXV1dXSxbXCIuL21ldGhvZC10b29scy5qc1wiLCBbW1wiYmluZEFsbE1ldGhvZHNcIiwgWyRo4oCNX2EgPT4gKGJpbmRBbGxNZXRob2RzID0gJGjigI1fYSldXV1dLFtcIi4vdGVzdGluZy11dGlscy5qc1wiLCBbW1wiZXZlbnRMb29wSXRlcmF0aW9uXCIsIFskaOKAjV9hID0+IChldmVudExvb3BJdGVyYXRpb24gPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0IHRyYWNlPW1ha2VUcmFjZXIoJ1N0b3JUVScsZmFsc2UpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNsb3RUb1JlbW90YWJsZT0oX3Nsb3RJZCxpZmFjZT0nUmVtb3RhYmxlJyk9PlxuUmVtb3RhYmxlKGlmYWNlKTtcblxuLypcblxuXG4gKi8kaOKAjV9vbmNlLnNsb3RUb1JlbW90YWJsZShzbG90VG9SZW1vdGFibGUpO1xuY29uc3QgICAgICAgIGRlZmF1bHRNYXJzaGFsbGVyPW1ha2VNYXJzaGFsKHVuZGVmaW5lZCxzbG90VG9SZW1vdGFibGUse1xuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5kZWZhdWx0TWFyc2hhbGxlcihkZWZhdWx0TWFyc2hhbGxlcik7XG5jb25zdCBtYWtlU2xvdFN0cmluZ1Vuc2VyaWFsaXplPSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlkZW50aXR5U2xvdFRvVmFsRm49KHNsb3QsXyk9PkZhcigndW5rJyx7dG9KU09OOigpPT5zbG90fSk7XG5jb25zdHtmcm9tQ2FwRGF0YX09bWFrZU1hcnNoYWwodW5kZWZpbmVkLGlkZW50aXR5U2xvdFRvVmFsRm4pO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZT0oY2FwRGF0YSk9PlxuSlNPTi5wYXJzZShcbkpTT04uc3RyaW5naWZ5KGZyb21DYXBEYXRhKGNhcERhdGEpLChfLHZhbCk9PntcbmlmKHR5cGVvZiB2YWw9PT0nYmlnaW50Jyl7XG4vL1xuLy9cbnJldHVybiBgQGVuY3JvbXVsYXRlOiR7dmFsfWA7XG4gfWVsc2V7XG5yZXR1cm4gdmFsO1xuIH1cbiB9KSxcbihfa2V5LHZhbCk9PntcbmlmKHR5cGVvZiB2YWw9PT0nc3RyaW5nJyYmdmFsLnN0YXJ0c1dpdGgoJ0BlbmNyb211bGF0ZScpKXtcbnJldHVybiBCaWdJbnQodmFsLnNwbGl0KCc6JylbMV0pO1xuIH1lbHNle1xucmV0dXJuIHZhbDtcbiB9XG4gfSk7XG5cbnJldHVybiBoYXJkZW4odW5zZXJpYWxpemUpO1xuIH07XG5jb25zdCAgICAgICAgc2xvdFN0cmluZ1Vuc2VyaWFsaXplPW1ha2VTbG90U3RyaW5nVW5zZXJpYWxpemUoKTtcblxuLypcblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2Uuc2xvdFN0cmluZ1Vuc2VyaWFsaXplKHNsb3RTdHJpbmdVbnNlcmlhbGl6ZSk7XG5jb25zdCAgICAgICAgbWFrZUZha2VTdG9yYWdlS2l0PShyb290UGF0aCxyb290T3B0aW9ucyk9PntcbmNvbnN0IHJlc29sdmVkT3B0aW9ucz17c2VxdWVuY2U6dHJ1ZSwuLi5yb290T3B0aW9uc307XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRhdGE9bmV3IE1hcCgpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdldENoaWxkRW50cmllcz0ocHJlZml4KT0+e1xuYXNzZXJ0KHByZWZpeC5lbmRzV2l0aCgnLicpKTtcbmNvbnN0IGNoaWxkRW50cmllcz1uZXcgTWFwKCk7XG5mb3IoY29uc3RbcGF0aCx2YWx1ZV1vZiBkYXRhLmVudHJpZXMoKSl7XG5pZighcGF0aC5zdGFydHNXaXRoKHByZWZpeCkpe1xuY29udGludWU7XG4gfVxuY29uc3Rbc2VnbWVudCwuLi5zdWZmaXhdPXBhdGguc2xpY2UocHJlZml4Lmxlbmd0aCkuc3BsaXQoJy4nKTtcbmlmKHN1ZmZpeC5sZW5ndGg9PT0wKXtcbmNoaWxkRW50cmllcy5zZXQoc2VnbWVudCx2YWx1ZSk7XG4gfWVsc2UgaWYoIWNoaWxkRW50cmllcy5oYXMoc2VnbWVudCkpe1xuY2hpbGRFbnRyaWVzLnNldChzZWdtZW50LG51bGwpO1xuIH1cbiB9XG5yZXR1cm4gY2hpbGRFbnRyaWVzO1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtZXNzYWdlcz1bXTtcblxuY29uc3QgdG9TdG9yYWdlPUZhcihcbidUb1N0b3JhZ2UnLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbihtZXNzYWdlKT0+e1xubWVzc2FnZXMucHVzaChtZXNzYWdlKTtcbnN3aXRjaChtZXNzYWdlLm1ldGhvZCl7XG5jYXNlJ2dldFN0b3JlS2V5Jzp7XG5jb25zdFtrZXldPW1lc3NhZ2UuYXJncztcbnJldHVybntzdG9yZU5hbWU6J3N3aW5nc2V0JyxzdG9yZVN1YmtleTogYGZha2U6JHtrZXl9YH07XG4gfVxuY2FzZSdnZXQnOntcbmNvbnN0W2tleV09bWVzc2FnZS5hcmdzO1xucmV0dXJuIGRhdGEuaGFzKGtleSk/ZGF0YS5nZXQoa2V5KTpudWxsO1xuIH1cbmNhc2UnY2hpbGRyZW4nOntcbmNvbnN0W2tleV09bWVzc2FnZS5hcmdzO1xuY29uc3QgY2hpbGRFbnRyaWVzPWdldENoaWxkRW50cmllcyggYCR7a2V5fS5gKTtcbnJldHVyblsuLi5jaGlsZEVudHJpZXMua2V5cygpXTtcbiB9XG5jYXNlJ2VudHJpZXMnOntcbmNvbnN0W2tleV09bWVzc2FnZS5hcmdzO1xuY29uc3QgY2hpbGRFbnRyaWVzPWdldENoaWxkRW50cmllcyggYCR7a2V5fS5gKTtcbnJldHVyblsuLi5jaGlsZEVudHJpZXMuZW50cmllcygpXS5tYXAoKGVudHJ5KT0+XG5lbnRyeVsxXSE9bnVsbD9lbnRyeTpbZW50cnlbMF1dKTtcblxuIH1cbmNhc2Unc2V0JzpcbmNhc2Unc2V0V2l0aG91dE5vdGlmeSc6e1xudHJhY2UoJ3RvU3RvcmFnZSBzZXQnLG1lc3NhZ2UpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5ld0VudHJpZXM9bWVzc2FnZS5hcmdzO1xuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBuZXdFbnRyaWVzKXtcbmlmKHZhbHVlIT1udWxsKXtcbmRhdGEuc2V0KGtleSx2YWx1ZSk7XG4gfWVsc2V7XG5kYXRhLmRlbGV0ZShrZXkpO1xuIH1cbiB9XG5icmVhaztcbiB9XG5jYXNlJ2FwcGVuZCc6e1xudHJhY2UoJ3RvU3RvcmFnZSBhcHBlbmQnLG1lc3NhZ2UpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5ld0VudHJpZXM9bWVzc2FnZS5hcmdzO1xuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBuZXdFbnRyaWVzKXtcbnZhbHVlIT1udWxsfHxGYWlsIGBhdHRlbXB0IHRvIGFwcGVuZCB3aXRoIG5vIHZhbHVlYDtcbi8vXG5jb25zdCBvbGRWYWw9ZGF0YS5nZXQoa2V5KTtcbmxldCBzdHJlYW1DZWxsO1xuaWYob2xkVmFsIT1udWxsKXtcbnRyeXtcbnN0cmVhbUNlbGw9SlNPTi5wYXJzZShvbGRWYWwpO1xuYXNzZXJ0KGlzU3RyZWFtQ2VsbChzdHJlYW1DZWxsKSk7XG4gfWNhdGNoKF9lcnIpe1xuc3RyZWFtQ2VsbD11bmRlZmluZWQ7XG4gfVxuIH1cbmlmKHN0cmVhbUNlbGw9PT11bmRlZmluZWQpe1xuc3RyZWFtQ2VsbD17XG5ibG9ja0hlaWdodDonMCcsXG52YWx1ZXM6b2xkVmFsIT1udWxsP1tvbGRWYWxdOltdfTtcblxuIH1cbnN0cmVhbUNlbGwudmFsdWVzLnB1c2godmFsdWUpO1xuZGF0YS5zZXQoa2V5LEpTT04uc3RyaW5naWZ5KHN0cmVhbUNlbGwpKTtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3NpemUnOlxuLy9cbi8vXG5yZXR1cm5bLi4uZGF0YS5rZXlzKCldLmZpbHRlcigoayk9Plxuay5zdGFydHNXaXRoKCBgJHttZXNzYWdlLmFyZ3NbMF19LmApKS5cbmxlbmd0aDtcbmRlZmF1bHQ6XG50aHJvdyBFcnJvciggYHVuc3VwcG9ydGVkIG1ldGhvZDogJHttZXNzYWdlLm1ldGhvZH1gKTt9XG5cbiB9KTtcblxuY29uc3Qgcm9vdE5vZGU9bWFrZUNoYWluU3RvcmFnZVJvb3QodG9TdG9yYWdlLHJvb3RQYXRoLHJlc29sdmVkT3B0aW9ucyk7XG5yZXR1cm57XG5yb290Tm9kZSxcbi8vXG5kYXRhOi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9kYXRhLFxubWVzc2FnZXMsXG50b1N0b3JhZ2V9O1xuXG4gfTskaOKAjV9vbmNlLm1ha2VGYWtlU3RvcmFnZUtpdChtYWtlRmFrZVN0b3JhZ2VLaXQpO1xuaGFyZGVuKG1ha2VGYWtlU3RvcmFnZUtpdCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdD0oKT0+e1xuY29uc3R7cm9vdE5vZGUsZGF0YX09bWFrZUZha2VTdG9yYWdlS2l0KCdtb2NrQ2hhaW5TdG9yYWdlUm9vdCcpO1xucmV0dXJuIEZhcignbW9ja0NoYWluU3RvcmFnZScse1xuLi4uYmluZEFsbE1ldGhvZHMocm9vdE5vZGUpLFxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmdldEJvZHk6KHBhdGgsbWFyc2hhbGxlcj1kZWZhdWx0TWFyc2hhbGxlcixpbmRleD0tMSk9PntcbmRhdGEuc2l6ZXx8RmFpbCBgbm8gZGF0YSBpbiBzdG9yYWdlYDtcbi8qXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGZyb21DYXBEYXRhPSguLi5hcmdzKT0+XG5SZWZsZWN0LmFwcGx5KG1hcnNoYWxsZXIuZnJvbUNhcERhdGEsbWFyc2hhbGxlcixhcmdzKTtcbnJldHVybiB1bm1hcnNoYWxGcm9tVnN0b3JhZ2UoZGF0YSxwYXRoLGZyb21DYXBEYXRhLGluZGV4KTtcbiB9LFxua2V5czooKT0+Wy4uLmRhdGEua2V5cygpXX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlTW9ja0NoYWluU3RvcmFnZVJvb3QobWFrZU1vY2tDaGFpblN0b3JhZ2VSb290KTtcbmNvbnN0ICAgICAgICBkb2N1bWVudFN0b3JhZ2VTY2hlbWE9YXN5bmModCxzdG9yYWdlLG9wdHMpPT57XG4vL1xuYXdhaXQgZXZlbnRMb29wSXRlcmF0aW9uKCk7XG5cbmNvbnN0W2tleXMsZ2V0Qm9keV09XG4na2V5cydpbiBzdG9yYWdlP1xuW3N0b3JhZ2Uua2V5cygpLCgvKiAgICAgICAgICAgICAgICAgKi9rKT0+c3RvcmFnZS5nZXRCb2R5KGspXTpcbltzdG9yYWdlLmRhdGEua2V5cygpLCgvKiAgICAgICAgICAgICAgICAgKi9rKT0+c3RvcmFnZS5kYXRhLmdldChrKV07XG5cbmNvbnN0e3BhdHRlcm4scmVwbGFjZW1lbnR9PVxuJ3BhdHRlcm4naW4gb3B0cz9cbm9wdHM6XG57cGF0dGVybjonbW9ja0NoYWluU3RvcmFnZVJvb3QuJyxyZXBsYWNlbWVudDoncHVibGlzaGVkLid9O1xuY29uc3QgaWxsdXN0cmF0aW9uPVsuLi5rZXlzXS5zb3J0KCkubWFwKFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbihrZXkpPT5ba2V5LnJlcGxhY2UocGF0dGVybixyZXBsYWNlbWVudCksZ2V0Qm9keShrZXkpXSk7XG5cbmNvbnN0IHBydW5lZD1pbGx1c3RyYXRpb24uZmlsdGVyKFxuJ25vZGUnaW4gb3B0cz9cbihba2V5LF9dKT0+a2V5LnN0YXJ0c1dpdGgoIGBwdWJsaXNoZWQuJHtvcHRzLm5vZGV9YCk6XG4oX2VudHJ5KT0+dHJ1ZSk7XG5cblxuY29uc3Qgbm90ZT1cbidub3RlJ2luIG9wdHM/XG5vcHRzLm5vdGU6XG4gYFVuZGVyIFwicHVibGlzaGVkXCIsIHRoZSBcIiR7b3B0cy5ub2RlfVwiIG5vZGUgaXMgZGVsZWdhdGVkIHRvICR7b3B0cy5vd25lcn0uYDtcbmNvbnN0IGJvaWxlcnBsYXRlPSBgXG5UaGUgZXhhbXBsZSBiZWxvdyBpbGx1c3RyYXRlcyB0aGUgc2NoZW1hIG9mIHRoZSBkYXRhIHB1Ymxpc2hlZCB0aGVyZS5cblxuU2VlIGFsc28gYm9hcmQgbWFyc2hhbGxpbmcgY29udmVudGlvbnMgKF90byBhcHBlYXJfKS5gO1xudC5zbmFwc2hvdChwcnVuZWQsbm90ZStib2lsZXJwbGF0ZSk7XG4gfTskaOKAjV9vbmNlLmRvY3VtZW50U3RvcmFnZVNjaGVtYShkb2N1bWVudFN0b3JhZ2VTY2hlbWEpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2xvdFRvUmVtb3RhYmxlIjpbInNsb3RUb1JlbW90YWJsZSJdLCJkZWZhdWx0TWFyc2hhbGxlciI6WyJkZWZhdWx0TWFyc2hhbGxlciJdLCJzbG90U3RyaW5nVW5zZXJpYWxpemUiOlsic2xvdFN0cmluZ1Vuc2VyaWFsaXplIl0sIm1ha2VGYWtlU3RvcmFnZUtpdCI6WyJtYWtlRmFrZVN0b3JhZ2VLaXQiXSwibWFrZU1vY2tDaGFpblN0b3JhZ2VSb290IjpbIm1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdCJdLCJkb2N1bWVudFN0b3JhZ2VTY2hlbWEiOlsiZG9jdW1lbnRTdG9yYWdlU2NoZW1hIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAC1GjYoBgAAKAYAACwAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdGVzdGluZy11dGlscy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZXZlbnRMb29wSXRlcmF0aW9uIiwiaW5zcGVjdE1hcFN0b3JlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8vXG4vKlxuXG5cbiAqL1xuLyogICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVudExvb3BJdGVyYXRpb249YXN5bmMoKT0+XG5uZXcgUHJvbWlzZSgocmVzb2x2ZSk9PnNldEltbWVkaWF0ZShyZXNvbHZlKSk7JGjigI1fb25jZS5ldmVudExvb3BJdGVyYXRpb24oZXZlbnRMb29wSXRlcmF0aW9uKTtcbmhhcmRlbihldmVudExvb3BJdGVyYXRpb24pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdPclRhZz0odmFsdWUpPT57XG5pZih0eXBlb2YgdmFsdWU9PT0nc3RyaW5nJyl7XG5yZXR1cm4gdmFsdWU7XG4gfWVsc2UgaWYodHlwZW9mIHZhbHVlPT09J29iamVjdCcmJlN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZSl7XG5yZXR1cm4gdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiB9XG5yZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiB9O1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpbnNwZWN0TWFwU3RvcmU9KHN0b3JlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9iaj17fTtcbmZvcihjb25zdCBrZXkgb2Ygc3RvcmUua2V5cygpKXtcbmNvbnN0IHZhbHVlPXN0b3JlLmdldChrZXkpO1xuY29uc3QgaGFzS2V5cz10eXBlb2YgdmFsdWU9PT0nb2JqZWN0JyYmJ2tleXMnaW4gdmFsdWU7XG5jb25zdCBpbmRleD1zdHJpbmdPclRhZyhrZXkpO1xuaWYoaGFzS2V5cyYmJ2dldCdpbiB2YWx1ZSl7XG5vYmpbaW5kZXhdPWluc3BlY3RNYXBTdG9yZSh2YWx1ZSk7XG4gfWVsc2UgaWYoaGFzS2V5cyl7XG5vYmpbaW5kZXhdPUFycmF5LmZyb20odmFsdWUua2V5cygpKTtcbiB9ZWxzZXtcbm9ialtpbmRleF09XG52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCYmU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlP1xudmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXTpcbnZhbHVlO1xuIH1cbiB9XG5yZXR1cm4gb2JqO1xuIH07JGjigI1fb25jZS5pbnNwZWN0TWFwU3RvcmUoaW5zcGVjdE1hcFN0b3JlKTtcbmhhcmRlbihpbnNwZWN0TWFwU3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZXZlbnRMb29wSXRlcmF0aW9uIjpbImV2ZW50TG9vcEl0ZXJhdGlvbiJdLCJpbnNwZWN0TWFwU3RvcmUiOlsiaW5zcGVjdE1hcFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPRK7R4GAwAABgMAACgAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdHlwZUNoZWNrLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiY2FzdCIsIm11c3RNYXRjaCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHlwZWxlc3NNdXN0TWF0Y2g7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAodHlwZWxlc3NNdXN0TWF0Y2ggPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG4vKlxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbXVzdE1hdGNoPXR5cGVsZXNzTXVzdE1hdGNoO1xuXG4vKlxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm11c3RNYXRjaChtdXN0TWF0Y2gpO1xuY29uc3QgICAgICAgIGNhc3Q9KHNwZWNpbWVuLHBhdHQpPT57XG4vL1xuLy9cbi8vXG5tdXN0TWF0Y2goc3BlY2ltZW4scGF0dCk7XG5yZXR1cm4gc3BlY2ltZW47XG4gfTskaOKAjV9vbmNlLmNhc3QoY2FzdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtdXN0TWF0Y2giOlsibXVzdE1hdGNoIl0sImNhc3QiOlsiY2FzdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACtWL4JVwMAAFcDAAApAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJTdG9yYWdlTm9kZVNoYXBlIiwiVW5ndWFyZGVkSGVscGVySSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuY29uc3QgICAgICAgIFN0b3JhZ2VOb2RlU2hhcGU9TS5yZW1vdGFibGUoJ1N0b3JhZ2VOb2RlJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRo4oCNX29uY2UuU3RvcmFnZU5vZGVTaGFwZShTdG9yYWdlTm9kZVNoYXBlKTtcbmNvbnN0ICAgICAgICBVbmd1YXJkZWRIZWxwZXJJPU0uaW50ZXJmYWNlKFxuJ2hlbHBlcicsXG57fSxcbi8vXG57c2xvcHB5OnRydWV9KTskaOKAjV9vbmNlLlVuZ3VhcmRlZEhlbHBlckkoVW5ndWFyZGVkSGVscGVySSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJTdG9yYWdlTm9kZVNoYXBlIjpbIlN0b3JhZ2VOb2RlU2hhcGUiXSwiVW5ndWFyZGVkSGVscGVySSI6WyJVbmd1YXJkZWRIZWxwZXJJIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAACoAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdHlwZXMtaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAHPB1sB8HAAAfBwAAKgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy91cGdyYWRlLWFwaS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUiLCJpc0FiYW5kb25lZEVycm9yIiwiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiIsIm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgTSxtYXRjaGVzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJtYXRjaGVzXCIsIFskaOKAjV9hID0+IChtYXRjaGVzID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNvbnN0e2lzRnJvemVufT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlPWhhcmRlbih7XG5uYW1lOid2YXRVcGdyYWRlZCcsXG51cGdyYWRlTWVzc2FnZTpNLnN0cmluZygpLFxuaW5jYXJuYXRpb25OdW1iZXI6TS5udW1iZXIoKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUoVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSk7XG5jb25zdCAgICAgICAgbWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uPSh1cGdyYWRlTWVzc2FnZSx0b0luY2FybmF0aW9uTnVtYmVyKT0+XG5oYXJkZW4oe1xubmFtZTondmF0VXBncmFkZWQnLFxudXBncmFkZU1lc3NhZ2UsXG5pbmNhcm5hdGlvbk51bWJlcjp0b0luY2FybmF0aW9uTnVtYmVyfSk7JGjigI1fb25jZS5tYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24obWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uKTtcblxuaGFyZGVuKG1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzVXBncmFkZURpc2Nvbm5lY3Rpb249KHJlYXNvbik9PlxucmVhc29uIT1udWxsJiYvL1xuaXNGcm96ZW4ocmVhc29uKSYmXG5tYXRjaGVzKHJlYXNvbixVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlKTskaOKAjV9vbmNlLmlzVXBncmFkZURpc2Nvbm5lY3Rpb24oaXNVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5oYXJkZW4oaXNVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNBYmFuZG9uZWRFcnJvcj0ocmVhc29uKT0+XG5yZWFzb24hPW51bGwmJi8vXG5pc0Zyb3plbihyZWFzb24pJiZcbm1hdGNoZXMocmVhc29uLE0uZXJyb3IoKSkmJlxuLy9cbi8vXG5yZWFzb24ubWVzc2FnZT09PSd2YXQgdGVybWluYXRlZCc7JGjigI1fb25jZS5pc0FiYW5kb25lZEVycm9yKGlzQWJhbmRvbmVkRXJyb3IpO1xuaGFyZGVuKGlzQWJhbmRvbmVkRXJyb3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSI6WyJVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlIl0sIm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbiI6WyJtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24iXSwiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiI6WyJpc1VwZ3JhZGVEaXNjb25uZWN0aW9uIl0sImlzQWJhbmRvbmVkRXJyb3IiOlsiaXNBYmFuZG9uZWRFcnJvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABttfUwKCMAACgjAAAkAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3V0aWxzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL3N0cmVhbSIsImplc3NpZS5qcyJdLCJleHBvcnRzIjpbIkJBU0lTX1BPSU5UUyIsIlByb21pc2VBbGxPckVycm9ycyIsImFnZ3JlZ2F0ZVRyeUZpbmFsbHkiLCJhbGxWYWx1ZXMiLCJhc3NlcnRBbGxEZWZpbmVkIiwiZGVlcE1hcE9iamVjdCIsImRlZXBseUZ1bGZpbGxlZE9iamVjdCIsImZvcmV2ZXIiLCJtYWtlTWVhc3VyZVNlY29uZHMiLCJzeW5jaHJvbml6ZWRUZWUiLCJ1bnRpbFRydWUiLCJ3aGlsZVRydWUiLCJ3aXRoRGVmZXJyZWRDbGVhbnVwIiwiemlwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhaWwsbWFrZUVycm9yLGFubm90YXRlRXJyb3IsWCxkZWVwbHlGdWxmaWxsZWQsaXNPYmplY3QsbWFrZVByb21pc2VLaXQsbWFrZVF1ZXVlLGFzeW5jR2VuZXJhdGU7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRo4oCNX2EgPT4gKG1ha2VFcnJvciA9ICRo4oCNX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjigI1fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRo4oCNX2EpXV0sW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJkZWVwbHlGdWxmaWxsZWRcIiwgWyRo4oCNX2EgPT4gKGRlZXBseUZ1bGZpbGxlZCA9ICRo4oCNX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRo4oCNX2EgPT4gKGlzT2JqZWN0ID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjigI1fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vc3RyZWFtXCIsIFtbXCJtYWtlUXVldWVcIiwgWyRo4oCNX2EgPT4gKG1ha2VRdWV1ZSA9ICRo4oCNX2EpXV1dXSxbXCJqZXNzaWUuanNcIiwgW1tcImFzeW5jR2VuZXJhdGVcIiwgWyRo4oCNX2EgPT4gKGFzeW5jR2VuZXJhdGUgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5jb25zdHtmcm9tRW50cmllcyxrZXlzLHZhbHVlc309T2JqZWN0O1xuXG5jb25zdCAgICAgICAgQkFTSVNfUE9JTlRTPTEwXzAwMG47XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLkJBU0lTX1BPSU5UUyhCQVNJU19QT0lOVFMpO1xuY29uc3QgICAgICAgIGRlZXBseUZ1bGZpbGxlZE9iamVjdD1hc3luYyhvYmopPT57XG5pc09iamVjdChvYmopfHxGYWlsIGBwYXJhbSBtdXN0IGJlIGFuIG9iamVjdGA7XG5yZXR1cm4gZGVlcGx5RnVsZmlsbGVkKG9iaik7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmRlZXBseUZ1bGZpbGxlZE9iamVjdChkZWVwbHlGdWxmaWxsZWRPYmplY3QpO1xuY29uc3QgZGVlcE1hcE9iamVjdEludGVybmFsPSh2YWx1ZSxuYW1lLGNvbnRhaW5lcixtYXBwZXIpPT57XG5pZihjb250YWluZXImJnR5cGVvZiBuYW1lPT09J3N0cmluZycpe1xuY29uc3QgbWFwcGVkPW1hcHBlcih2YWx1ZSxuYW1lLGNvbnRhaW5lcik7XG5pZihtYXBwZWQhPT12YWx1ZSl7XG5yZXR1cm4gbWFwcGVkO1xuIH1cbiB9XG5cbmlmKHR5cGVvZiB2YWx1ZSE9PSdvYmplY3QnfHwhdmFsdWUpe1xucmV0dXJuIHZhbHVlO1xuIH1cblxubGV0IHdhc01hcHBlZD1mYWxzZTtcbmNvbnN0IG1hcHBlZEVudHJpZXM9T2JqZWN0LmVudHJpZXModmFsdWUpLm1hcCgoW2lubmVyTmFtZSxpbm5lclZhbHVlXSk9PntcbmNvbnN0IG1hcHBlZElubmVyVmFsdWU9ZGVlcE1hcE9iamVjdEludGVybmFsKFxuaW5uZXJWYWx1ZSxcbmlubmVyTmFtZSxcbnZhbHVlLFxubWFwcGVyKTtcblxud2FzTWFwcGVkfHw9bWFwcGVkSW5uZXJWYWx1ZSE9PWlubmVyVmFsdWU7XG5yZXR1cm5baW5uZXJOYW1lLG1hcHBlZElubmVyVmFsdWVdO1xuIH0pO1xuXG5yZXR1cm4gd2FzTWFwcGVkP09iamVjdC5mcm9tRW50cmllcyhtYXBwZWRFbnRyaWVzKTp2YWx1ZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWVwTWFwT2JqZWN0PShvYmosbWFwcGVyKT0+XG5kZWVwTWFwT2JqZWN0SW50ZXJuYWwob2JqLHVuZGVmaW5lZCx1bmRlZmluZWQsbWFwcGVyKTtcblxuLypcblxuXG5cbiAqLyRo4oCNX29uY2UuZGVlcE1hcE9iamVjdChkZWVwTWFwT2JqZWN0KTtcbmNvbnN0IG1ha2VBZ2dyZWdhdGVFcnJvcj1cbnR5cGVvZiBBZ2dyZWdhdGVFcnJvcj09PSdmdW5jdGlvbic/XG4oZXJyb3JzLG1lc3NhZ2Usb3B0aW9ucyk9PkFnZ3JlZ2F0ZUVycm9yKGVycm9ycyxtZXNzYWdlLG9wdGlvbnMpOlxuKGVycm9ycyxtZXNzYWdlLG9wdGlvbnMpPT57XG5yZXR1cm4gbWFrZUVycm9yKG1lc3NhZ2U/PydtdWx0aXBsZSBlcnJvcnMnLHVuZGVmaW5lZCx7XG4uLi5vcHRpb25zLFxuZXJyb3JzfSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgUHJvbWlzZUFsbE9yRXJyb3JzPWFzeW5jKGl0ZW1zKT0+e1xucmV0dXJuIFByb21pc2UuYWxsU2V0dGxlZChpdGVtcykudGhlbigocmVzdWx0cyk9PntcbmNvbnN0IGVycm9ycz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucmVzdWx0cy5maWx0ZXIoKHtzdGF0dXN9KT0+c3RhdHVzPT09J3JlamVjdGVkJykuXG5tYXAoKHJlc3VsdCk9PnJlc3VsdC5yZWFzb24pO1xuaWYoIWVycm9ycy5sZW5ndGgpe1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9yZXN1bHRzLm1hcChcbihyZXN1bHQpPT5yZXN1bHQudmFsdWUpKTtcblxuIH1lbHNlIGlmKGVycm9ycy5sZW5ndGg9PT0xKXtcbnRocm93IGVycm9yc1swXTtcbiB9ZWxzZXtcbnRocm93IG1ha2VBZ2dyZWdhdGVFcnJvcihlcnJvcnMpO1xuIH1cbiB9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLlByb21pc2VBbGxPckVycm9ycyhQcm9taXNlQWxsT3JFcnJvcnMpO1xuY29uc3QgICAgICAgIGFnZ3JlZ2F0ZVRyeUZpbmFsbHk9YXN5bmModHJpZXIsZmluYWxpemVyKT0+XG50cmllcigpLnRoZW4oXG5hc3luYyhyZXN1bHQpPT5maW5hbGl6ZXIoKS50aGVuKCgpPT5yZXN1bHQpLFxuYXN5bmModHJ5RXJyb3IpPT5cbmZpbmFsaXplcih0cnlFcnJvcikuXG50aGVuKFxuKCk9PnRyeUVycm9yLFxuKGZpbmFsaXplRXJyb3IpPT5tYWtlQWdncmVnYXRlRXJyb3IoW3RyeUVycm9yLGZpbmFsaXplRXJyb3JdKSkuXG5cbnRoZW4oKGVycm9yKT0+UHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5hZ2dyZWdhdGVUcnlGaW5hbGx5KGFnZ3JlZ2F0ZVRyeUZpbmFsbHkpO1xuY29uc3QgICAgICAgIHdpdGhEZWZlcnJlZENsZWFudXA9YXN5bmMoZm4pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNsZWFudXBzTElGTz1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWRkQ2xlYW51cD0oY2xlYW51cCk9PntcbmNsZWFudXBzTElGTy51bnNoaWZ0KGNsZWFudXApO1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZmluYWxpemVyPWFzeW5jKGVycik9Pntcbi8vXG5jb25zdCBjbGVhbnVwUmVzdWx0cz1jbGVhbnVwc0xJRk8ubWFwKGFzeW5jKGNsZWFudXApPT57XG5hd2FpdCBudWxsO1xucmV0dXJuIGNsZWFudXAoZXJyKTtcbiB9KTtcbmF3YWl0IFByb21pc2VBbGxPckVycm9ycyhjbGVhbnVwUmVzdWx0cyk7XG4gfTtcbnJldHVybiBhZ2dyZWdhdGVUcnlGaW5hbGx5KCgpPT5mbihhZGRDbGVhbnVwKSxmaW5hbGl6ZXIpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS53aXRoRGVmZXJyZWRDbGVhbnVwKHdpdGhEZWZlcnJlZENsZWFudXApO1xuY29uc3QgICAgICAgIG1ha2VNZWFzdXJlU2Vjb25kcz0oY3VycmVudFRpbWVNaWxsaXNlYyk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1lYXN1cmVTZWNvbmRzPWFzeW5jKGZuKT0+e1xuY29uc3QgdDA9Y3VycmVudFRpbWVNaWxsaXNlYygpO1xuY29uc3QgcmVzdWx0PWF3YWl0IGZuKCk7XG5jb25zdCBkdXJhdGlvbk1pbGxpc2VjPWN1cnJlbnRUaW1lTWlsbGlzZWMoKS10MDtcbnJldHVybntyZXN1bHQsZHVyYXRpb246ZHVyYXRpb25NaWxsaXNlYy8xMDAwfTtcbiB9O1xucmV0dXJuIG1lYXN1cmVTZWNvbmRzO1xuIH07XG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZU1lYXN1cmVTZWNvbmRzKG1ha2VNZWFzdXJlU2Vjb25kcyk7XG5jb25zdCAgICAgICAgYXNzZXJ0QWxsRGVmaW5lZD0ob2JqKT0+e1xuY29uc3QgbWlzc2luZz1bXTtcbmZvcihjb25zdFtrZXksdmFsXW9mIE9iamVjdC5lbnRyaWVzKG9iaikpe1xuaWYodmFsPT09dW5kZWZpbmVkKXtcbm1pc3NpbmcucHVzaChrZXkpO1xuIH1cbiB9XG5pZihtaXNzaW5nLmxlbmd0aD4wKXtcbkZhaWwgYG1pc3NpbmcgJHtxKG1pc3NpbmcpfWA7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjigI1fb25jZS5hc3NlcnRBbGxEZWZpbmVkKGFzc2VydEFsbERlZmluZWQpO1xuY29uc3Qgbm90RG9uZT1oYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6dW5kZWZpbmVkfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWx3YXlzRG9uZT1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcblxuY29uc3QgICAgICAgIGZvcmV2ZXI9YXN5bmNHZW5lcmF0ZSgoKT0+bm90RG9uZSk7XG5cbi8qXG5cblxuXG5cblxuICovJGjigI1fb25jZS5mb3JldmVyKGZvcmV2ZXIpO1xuY29uc3QgICAgICAgIHdoaWxlVHJ1ZT0ocHJvZHVjZSk9PlxuYXN5bmNHZW5lcmF0ZShhc3luYygpPT57XG5jb25zdCB2YWx1ZT1hd2FpdCBwcm9kdWNlKCk7XG5pZighdmFsdWUpe1xucmV0dXJuIGFsd2F5c0RvbmU7XG4gfVxucmV0dXJuIGhhcmRlbih7XG5kb25lOmZhbHNlLFxudmFsdWV9KTtcblxuIH0pO1xuXG4vKlxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2Uud2hpbGVUcnVlKHdoaWxlVHJ1ZSk7XG5jb25zdCAgICAgICAgdW50aWxUcnVlPShwcm9kdWNlKT0+XG5hc3luY0dlbmVyYXRlKGFzeW5jKCk9PntcbmNvbnN0IHZhbHVlPWF3YWl0IHByb2R1Y2UoKTtcbmlmKHZhbHVlKXtcbnJldHVybiBoYXJkZW4oe1xuZG9uZTp0cnVlLFxudmFsdWV9KTtcblxuIH1cbnJldHVybiBoYXJkZW4oe1xuZG9uZTpmYWxzZSxcbnZhbHVlfSk7XG5cbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjigI1fb25jZS51bnRpbFRydWUodW50aWxUcnVlKTtcbmNvbnN0ICAgICAgICB6aXA9KHhzLHlzKT0+aGFyZGVuKHhzLm1hcCgoeCxpKT0+W3gseXNbK2ldXSkpO1xuXG4vKlxuXG5cblxuICovJGjigI1fb25jZS56aXAoemlwKTtcbmNvbnN0ICAgICAgICBhbGxWYWx1ZXM9YXN5bmMob2JqKT0+e1xuY29uc3QgcmVzb2x2ZWQ9YXdhaXQgUHJvbWlzZS5hbGwodmFsdWVzKG9iaikpO1xuLy9cbnJldHVybiBoYXJkZW4oZnJvbUVudHJpZXMoemlwKGtleXMob2JqKSxyZXNvbHZlZCkpKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmFsbFZhbHVlcyhhbGxWYWx1ZXMpO1xuY29uc3QgICAgICAgIHN5bmNocm9uaXplZFRlZT0oc291cmNlU3RyZWFtLHJlYWRlckNvdW50KT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBkb25lUmVzdWx0O1xuXG4vKlxuXG5cblxuICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHF1ZXVlcz1bXTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVsbE5leHQ9YXN5bmMoKT0+e1xuY29uc3QgcmVxdWVzdHM9YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKHF1ZXVlcy5tYXAoKHF1ZXVlKT0+cXVldWUuZ2V0KCkpKTtcbmNvbnN0IHJlamVjdGlvbnM9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc29sdmVycz1bXTtcbmxldCBkb25lPWZhbHNlO1xuZm9yKGNvbnN0IHNldHRsZWRSZXN1bHQgb2YgcmVxdWVzdHMpe1xuaWYoc2V0dGxlZFJlc3VsdC5zdGF0dXM9PT0ncmVqZWN0ZWQnKXtcbnJlamVjdGlvbnMucHVzaChzZXR0bGVkUmVzdWx0LnJlYXNvbik7XG4gfWVsc2V7XG5kb25lfHw9ISFzZXR0bGVkUmVzdWx0LnZhbHVlLmRvbmU7XG5yZXNvbHZlcnMucHVzaChzZXR0bGVkUmVzdWx0LnZhbHVlLnZhbHVlKTtcbiB9XG4gfVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZXN1bHQ7XG5pZihkb25lUmVzdWx0KXtcbnJlc3VsdD1Qcm9taXNlLnJlc29sdmUoZG9uZVJlc3VsdCk7XG4gfWVsc2UgaWYocmVqZWN0aW9ucy5sZW5ndGgpe1xuY29uc3QgZXJyb3I9bWFrZUVycm9yKFggYFRlZWQgc3RyZWFtIHRocmV3YCk7XG5hbm5vdGF0ZUVycm9yKGVycm9yLFggYFRlZWQgcmVqZWN0aW9uczogJHtyZWplY3Rpb25zfWApO1xucmVzdWx0PVxuc291cmNlU3RyZWFtLnRocm93Py4oZXJyb3IpfHxcblByb21pc2UucmVzb2x2ZShzb3VyY2VTdHJlYW0ucmV0dXJuPy4oKSkudGhlbigoKT0+XG5Qcm9taXNlLnJlamVjdChlcnJvcikpO1xuXG4gfWVsc2UgaWYoZG9uZSl7XG5yZXN1bHQ9XG5zb3VyY2VTdHJlYW0ucmV0dXJuPy4oKXx8XG5Qcm9taXNlLnJlc29sdmUoe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9ZWxzZXtcbnJlc3VsdD1zb3VyY2VTdHJlYW0ubmV4dCgpO1xuIH1cbnJlc3VsdC50aGVuKFxuKHIpPT57XG5pZihyLmRvbmUpe1xuZG9uZVJlc3VsdD1yO1xuIH1cbiB9LFxuKCk9PntcbmRvbmVSZXN1bHQ9e2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9O1xuIH0pO1xuXG5mb3IoY29uc3QgcmVzb2x2ZSBvZiByZXNvbHZlcnMpe1xucmVzb2x2ZShyZXN1bHQpO1xuIH1cbnJldHVybiBwdWxsTmV4dCgpO1xuIH07XG5cbmNvbnN0IHJlYWRlcnM9QXJyYXkuZnJvbSh7bGVuZ3RoOnJlYWRlckNvdW50fSkubWFwKCgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcXVldWU9bWFrZVF1ZXVlKCk7XG5xdWV1ZXMucHVzaChxdWV1ZSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWFkZXI9aGFyZGVuKHtcbiAgICAgIGFzeW5jIG5leHQoKXtcbi8qXG5cblxuXG4gICAgICAgICAqL1xuY29uc3R7cHJvbWlzZSxyZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucXVldWUucHV0KHt2YWx1ZTpyZXNvbHZlLGRvbmU6ZmFsc2V9KTtcbnJldHVybiBwcm9taXNlO1xuIH0sXG4gICAgICBhc3luYyByZXR1cm4oKXtcbi8qXG5cblxuXG4gICAgICAgICAqL1xuY29uc3R7cHJvbWlzZSxyZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucXVldWUucHV0KHt2YWx1ZTpyZXNvbHZlLGRvbmU6dHJ1ZX0pO1xucmV0dXJuIHByb21pc2U7XG4gfSxcbiAgICAgIGFzeW5jIHRocm93KHJlYXNvbil7XG5jb25zdCByZWplY3Rpb249UHJvbWlzZS5yZWplY3QocmVhc29uKTtcbnF1ZXVlLnB1dChyZWplY3Rpb24pO1xucmV0dXJuIHJlamVjdGlvbjtcbiB9LFxuLy9cbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtcbnJldHVybiByZWFkZXI7XG4gfSxcbi8vXG4gICAgICBhc3luY1tTeW1ib2wuYXN5bmNEaXNwb3NlXSgpe1xuYXdhaXQgcmVhZGVyLnJldHVybigpO1xuIH19KTtcblxucmV0dXJuIHJlYWRlcjtcbiB9KTtcblxudm9pZCBwdWxsTmV4dCgpO1xucmV0dXJuIHJlYWRlcnM7XG4gfTskaOKAjV9vbmNlLnN5bmNocm9uaXplZFRlZShzeW5jaHJvbml6ZWRUZWUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQkFTSVNfUE9JTlRTIjpbIkJBU0lTX1BPSU5UUyJdLCJkZWVwbHlGdWxmaWxsZWRPYmplY3QiOlsiZGVlcGx5RnVsZmlsbGVkT2JqZWN0Il0sImRlZXBNYXBPYmplY3QiOlsiZGVlcE1hcE9iamVjdCJdLCJQcm9taXNlQWxsT3JFcnJvcnMiOlsiUHJvbWlzZUFsbE9yRXJyb3JzIl0sImFnZ3JlZ2F0ZVRyeUZpbmFsbHkiOlsiYWdncmVnYXRlVHJ5RmluYWxseSJdLCJ3aXRoRGVmZXJyZWRDbGVhbnVwIjpbIndpdGhEZWZlcnJlZENsZWFudXAiXSwibWFrZU1lYXN1cmVTZWNvbmRzIjpbIm1ha2VNZWFzdXJlU2Vjb25kcyJdLCJhc3NlcnRBbGxEZWZpbmVkIjpbImFzc2VydEFsbERlZmluZWQiXSwiZm9yZXZlciI6WyJmb3JldmVyIl0sIndoaWxlVHJ1ZSI6WyJ3aGlsZVRydWUiXSwidW50aWxUcnVlIjpbInVudGlsVHJ1ZSJdLCJ6aXAiOlsiemlwIl0sImFsbFZhbHVlcyI6WyJhbGxWYWx1ZXMiXSwic3luY2hyb25pemVkVGVlIjpbInN5bmNocm9uaXplZFRlZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAglWrIFAgAABQIAAAzAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIi4vc3Vic2NyaWJlLmpzIl0sImV4cG9ydHMiOlsibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiLCJvYnNlcnZlSXRlcmF0aW9uIiwib2JzZXJ2ZUl0ZXJhdG9yIiwib2JzZXJ2ZU5vdGlmaWVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLHN1YnNjcmliZUxhdGVzdDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV0sW1wiLi9zdWJzY3JpYmUuanNcIiwgW1tcInN1YnNjcmliZUxhdGVzdFwiLCBbJGjigI1fYSA9PiAoc3Vic2NyaWJlTGF0ZXN0ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXI9c3Vic2NyaWJlTGF0ZXN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllcihtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllcik7XG5jb25zdCAgICAgICAgb2JzZXJ2ZUl0ZXJhdG9yPShhc3luY0l0ZXJhdG9yUCxpdGVyYXRpb25PYnNlcnZlcik9PntcbnJldHVybiBuZXcgUHJvbWlzZSgoYWNrLG9ic2VydmVyRXJyb3IpPT57XG5jb25zdCByZWN1cj0oKT0+e1xuRS53aGVuKFxuRShhc3luY0l0ZXJhdG9yUCkubmV4dCgpLFxuKHt2YWx1ZSxkb25lfSk9PntcbmlmKGRvbmUpe1xuaXRlcmF0aW9uT2JzZXJ2ZXIuZmluaXNoJiZpdGVyYXRpb25PYnNlcnZlci5maW5pc2godmFsdWUpO1xuYWNrKHVuZGVmaW5lZCk7XG4gfWVsc2V7XG5pdGVyYXRpb25PYnNlcnZlci51cGRhdGVTdGF0ZSYmXG5pdGVyYXRpb25PYnNlcnZlci51cGRhdGVTdGF0ZSh2YWx1ZSk7XG5yZWN1cigpO1xuIH1cbiB9LFxuKHJlYXNvbik9Pntcbml0ZXJhdGlvbk9ic2VydmVyLmZhaWwmJml0ZXJhdGlvbk9ic2VydmVyLmZhaWwocmVhc29uKTtcbmFjayh1bmRlZmluZWQpO1xuIH0pLlxuY2F0Y2gob2JzZXJ2ZXJFcnJvcik7XG4gfTtcbnJlY3VyKCk7XG4gfSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2Uub2JzZXJ2ZUl0ZXJhdG9yKG9ic2VydmVJdGVyYXRvcik7XG5jb25zdCAgICAgICAgb2JzZXJ2ZUl0ZXJhdGlvbj0oYXN5bmNJdGVyYWJsZVAsaXRlcmF0aW9uT2JzZXJ2ZXIpPT57XG5jb25zdCBpdGVyYXRvclA9RShhc3luY0l0ZXJhYmxlUClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5yZXR1cm4gb2JzZXJ2ZUl0ZXJhdG9yKGl0ZXJhdG9yUCxpdGVyYXRpb25PYnNlcnZlcik7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2Uub2JzZXJ2ZUl0ZXJhdGlvbihvYnNlcnZlSXRlcmF0aW9uKTtcbmNvbnN0ICAgICAgICBvYnNlcnZlTm90aWZpZXI9KG5vdGlmaWVyUCxpdGVyYXRpb25PYnNlcnZlcik9Plxub2JzZXJ2ZUl0ZXJhdGlvbihzdWJzY3JpYmVMYXRlc3Qobm90aWZpZXJQKSxpdGVyYXRpb25PYnNlcnZlcik7JGjigI1fb25jZS5vYnNlcnZlTm90aWZpZXIob2JzZXJ2ZU5vdGlmaWVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIjpbIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIl0sIm9ic2VydmVJdGVyYXRvciI6WyJvYnNlcnZlSXRlcmF0b3IiXSwib2JzZXJ2ZUl0ZXJhdGlvbiI6WyJvYnNlcnZlSXRlcmF0aW9uIl0sIm9ic2VydmVOb3RpZmllciI6WyJvYnNlcnZlTm90aWZpZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA6fUBUeIHAADiBwAAJAAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3B1Ymxpc2gta2l0LmpzIiwiLi9zdWJzY3JpYmUuanMiLCIuL25vdGlmaWVyLmpzIiwiLi9zdWJzY3JpYmVyLmpzIiwiLi90b3BpYy5qcyIsIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanMiLCIuL3N0b3Jlc3ViLmpzIiwiLi9zdG9yZWQtbm90aWZpZXIuanMiLCIuL3R5cGVzLWluZGV4LmpzIl0sImV4cG9ydHMiOlsibWFrZU5vdGlmaWVyS2l0IiwibWFrZU5vdGlmaWVyS2l0IiwibWFrZVN1YnNjcmlwdGlvbktpdCIsIm1ha2VTdWJzY3JpcHRpb25LaXQiLCJvYnNlcnZlSXRlcmF0b3IiLCJvYnNlcnZlSXRlcmF0b3IiLCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiLCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiLCJzdWJzY3JpYmVMYXRlc3QiLCJzdWJzY3JpYmVMYXRlc3QiLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zdG9yZWQtbm90aWZpZXIuanMiLCIuL3N0b3Jlc3ViLmpzIiwiLi90eXBlcy1pbmRleC5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtbXCIuL3B1Ymxpc2gta2l0LmpzXCIsIFtdXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbXV0sW1wiLi9ub3RpZmllci5qc1wiLCBbXV0sW1wiLi9zdWJzY3JpYmVyLmpzXCIsIFtdXSxbXCIuL3RvcGljLmpzXCIsIFtdXSxbXCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzXCIsIFtdXSxbXCIuL3N0b3Jlc3ViLmpzXCIsIFtdXSxbXCIuL3N0b3JlZC1ub3RpZmllci5qc1wiLCBbXV0sW1wiLi90eXBlcy1pbmRleC5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vcHVibGlzaC1raXQuanMiOltbIm1ha2VQdWJsaXNoS2l0IiwibWFrZVB1Ymxpc2hLaXQiXSxbInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCJdLFsiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSIsIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiXSxbIkl0ZXJhYmxlRWFjaFRvcGljSSIsIkl0ZXJhYmxlRWFjaFRvcGljSSJdLFsiSXRlcmFibGVMYXRlc3RUb3BpY0kiLCJJdGVyYWJsZUxhdGVzdFRvcGljSSJdLFsiU3Vic2NyaWJlclNoYXBlIiwiU3Vic2NyaWJlclNoYXBlIl1dLCIuL3N1YnNjcmliZS5qcyI6W1sic3Vic2NyaWJlRWFjaCIsInN1YnNjcmliZUVhY2giXSxbInN1YnNjcmliZUxhdGVzdCIsInN1YnNjcmliZUxhdGVzdCJdXSwiLi9ub3RpZmllci5qcyI6W1sibWFrZU5vdGlmaWVyIiwibWFrZU5vdGlmaWVyIl0sWyJtYWtlTm90aWZpZXJLaXQiLCJtYWtlTm90aWZpZXJLaXQiXSxbIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIiwibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiXSxbIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIiwibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiXV0sIi4vc3Vic2NyaWJlci5qcyI6W1sibWFrZVN1YnNjcmlwdGlvbiIsIm1ha2VTdWJzY3JpcHRpb24iXSxbIm1ha2VTdWJzY3JpcHRpb25LaXQiLCJtYWtlU3Vic2NyaXB0aW9uS2l0Il1dLCIuL3RvcGljLmpzIjpbWyJtYWtlUGlubmVkSGlzdG9yeVRvcGljIiwibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyJdXSwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyI6W1sib2JzZXJ2ZU5vdGlmaWVyIiwib2JzZXJ2ZU5vdGlmaWVyIl0sWyJvYnNlcnZlSXRlcmF0b3IiLCJvYnNlcnZlSXRlcmF0b3IiXSxbIm9ic2VydmVJdGVyYXRpb24iLCJvYnNlcnZlSXRlcmF0aW9uIl0sWyJtYWtlQXN5bmNJdGVyYWJsZUZyb21Ob3RpZmllciIsIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADxQQ7ghBAAAIQQAAAnAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL25vdGlmaWVyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIi4vcHVibGlzaC1raXQuanMiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbIm1ha2VOb3RpZmllciIsIm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlIiwibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiLCJtYWtlTm90aWZpZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxFLEZhcixtYWtlUHVibGlzaEtpdCxzdWJzY3JpYmVMYXRlc3Q7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhc3NlcnRcIiwgWyRo4oCNX2EgPT4gKGFzc2VydCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dLFtcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIi4vcHVibGlzaC1raXQuanNcIiwgW1tcIm1ha2VQdWJsaXNoS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUHVibGlzaEtpdCA9ICRo4oCNX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlTGF0ZXN0XCIsIFskaOKAjV9hID0+IChzdWJzY3JpYmVMYXRlc3QgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllcj0oc2hhcmFibGVJbnRlcm5hbHNQKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5vdGlmaWVyPUZhcignbm90aWZpZXInLHtcbi4uLnN1YnNjcmliZUxhdGVzdChzaGFyYWJsZUludGVybmFsc1ApLFxuZ2V0VXBkYXRlU2luY2U6YXN5bmModXBkYXRlQ291bnQpPT5cbkUoc2hhcmFibGVJbnRlcm5hbHNQKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCksXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbmdldFNoYXJhYmxlTm90aWZpZXJJbnRlcm5hbHM6YXN5bmMoKT0+c2hhcmFibGVJbnRlcm5hbHNQLFxuLypcblxuXG5cbiAgICAgKi9cbmdldFN0b3JlS2V5OigpPT5oYXJkZW4oe25vdGlmaWVyfSl9KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VOb3RpZmllcihtYWtlTm90aWZpZXIpO1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyPShzdWJzY3JpYmVyKT0+e1xuLypcblxuICAgKi9cbmNvbnN0IGJhc2VOb3RpZmllcj1oYXJkZW4oe1xuZ2V0VXBkYXRlU2luY2U6KHVwZGF0ZUNvdW50PXVuZGVmaW5lZCk9PlxuRShzdWJzY3JpYmVyKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgbm90aWZpZXI9RmFyKCdub3RpZmllcicse1xuLi4ubWFrZU5vdGlmaWVyKGJhc2VOb3RpZmllciksXG4uLi5iYXNlTm90aWZpZXJ9KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH07JGjigI1fb25jZS5tYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcihtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcik7XG5oYXJkZW4obWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU5vdGlmaWVyS2l0PSguLi5pbml0aWFsU3RhdGVBcnIpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxuY29uc3Qgbm90aWZpZXI9bWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIoc3Vic2NyaWJlcik7XG5cbmNvbnN0IHVwZGF0ZXI9RmFyKCd1cGRhdGVyJyx7XG51cGRhdGVTdGF0ZTooc3RhdGUpPT5wdWJsaXNoZXIucHVibGlzaChzdGF0ZSksXG5maW5pc2g6KGNvbXBsZXRpb24pPT5wdWJsaXNoZXIuZmluaXNoKGNvbXBsZXRpb24pLFxuZmFpbDoocmVhc29uKT0+cHVibGlzaGVyLmZhaWwocmVhc29uKX0pO1xuXG5cbmFzc2VydChpbml0aWFsU3RhdGVBcnIubGVuZ3RoPD0xLCd0b28gbWFueSBhcmd1bWVudHMnKTtcbmlmKGluaXRpYWxTdGF0ZUFyci5sZW5ndGg9PT0xKXtcbnVwZGF0ZXIudXBkYXRlU3RhdGUoaW5pdGlhbFN0YXRlQXJyWzBdKTtcbiB9XG5cbi8vXG4vL1xucmV0dXJuIGhhcmRlbih7bm90aWZpZXIsdXBkYXRlcn0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZU5vdGlmaWVyS2l0KG1ha2VOb3RpZmllcktpdCk7XG5jb25zdCAgICAgICAgbWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGU9KGFzeW5jSXRlcmFibGVQKT0+e1xuY29uc3QgaXRlcmF0b3JQPUUoYXN5bmNJdGVyYWJsZVApW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgb3B0TmV4dFByb21pc2U7XG5sZXQgY3VycmVudFVwZGF0ZUNvdW50PTBuO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGN1cnJlbnRSZXNwb25zZTtcbmxldCBmaW5hbD1mYWxzZTtcblxuLypcblxuICAgKi9cbmNvbnN0IGJhc2VOb3RpZmllcj1GYXIoJ2Jhc2VOb3RpZmllcicse1xuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQ9LTFuKXtcbmlmKHVwZGF0ZUNvdW50PGN1cnJlbnRVcGRhdGVDb3VudCl7XG5pZihjdXJyZW50UmVzcG9uc2Upe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShjdXJyZW50UmVzcG9uc2UpO1xuIH1cbiB9ZWxzZSBpZih1cGRhdGVDb3VudCE9PWN1cnJlbnRVcGRhdGVDb3VudCl7XG50aHJvdyBFcnJvcihcbidnZXRVcGRhdGVTaW5jZSBhcmd1bWVudCBtdXN0IGJlIGEgcHJldmlvdXNseS1pc3N1ZWQgdXBkYXRlQ291bnQuJyk7XG5cbiB9XG5cbi8vXG5pZihmaW5hbCl7XG5hc3NlcnQoY3VycmVudFJlc3BvbnNlIT09dW5kZWZpbmVkKTtcbnJldHVybiBQcm9taXNlLnJlc29sdmUoY3VycmVudFJlc3BvbnNlKTtcbiB9XG5pZighb3B0TmV4dFByb21pc2Upe1xuY29uc3QgbmV4dEl0ZXJSZXN1bHRQPUUoaXRlcmF0b3JQKS5uZXh0KCk7XG5vcHROZXh0UHJvbWlzZT1FLndoZW4oXG5uZXh0SXRlclJlc3VsdFAsXG4oe2RvbmUsdmFsdWV9KT0+e1xuYXNzZXJ0KCFmaW5hbCk7XG5pZihkb25lKXtcbmZpbmFsPXRydWU7XG4gfVxuY3VycmVudFVwZGF0ZUNvdW50Kz0xbjtcbmN1cnJlbnRSZXNwb25zZT1oYXJkZW4oe1xudmFsdWUsXG51cGRhdGVDb3VudDpkb25lP3VuZGVmaW5lZDpjdXJyZW50VXBkYXRlQ291bnR9KTtcblxub3B0TmV4dFByb21pc2U9dW5kZWZpbmVkO1xucmV0dXJuIGN1cnJlbnRSZXNwb25zZTtcbiB9LFxuKF9yZWFzb24pPT57XG5maW5hbD10cnVlO1xuY3VycmVudFJlc3BvbnNlPVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5uZXh0SXRlclJlc3VsdFA7XG5vcHROZXh0UHJvbWlzZT11bmRlZmluZWQ7XG5yZXR1cm4gY3VycmVudFJlc3BvbnNlO1xuIH0pO1xuXG4gfVxucmV0dXJuIG9wdE5leHRQcm9taXNlO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgbm90aWZpZXI9RmFyKCdub3RpZmllcicse1xuLy9cbi8vXG4uLi5tYWtlTm90aWZpZXIoYmFzZU5vdGlmaWVyKSxcbi4uLmJhc2VOb3RpZmllcn0pO1xuXG5yZXR1cm4gbm90aWZpZXI7XG4gfTskaOKAjV9vbmNlLm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlKG1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlKTtcbmhhcmRlbihtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTm90aWZpZXIiOlsibWFrZU5vdGlmaWVyIl0sIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIjpbIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIl0sIm1ha2VOb3RpZmllcktpdCI6WyJtYWtlTm90aWZpZXJLaXQiXSwibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiOlsibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAlQRrDE4rAABOKwAAKgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9wdWJsaXNoLWtpdC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL3BhdHRlcm5zIiwiQGFnb3JpYy92YXQtZGF0YSJdLCJleHBvcnRzIjpbIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiLCJJdGVyYWJsZUVhY2hUb3BpY0kiLCJJdGVyYWJsZUxhdGVzdFRvcGljSSIsIlB1Ymxpc2hlckkiLCJTdWJzY3JpYmVySSIsIlN1YnNjcmliZXJTaGFwZSIsIlVwZGF0ZUNvdW50U2hhcGUiLCJtYWtlUHVibGlzaEtpdCIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInB1Ymxpc2hLaXRJS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsRSxGYXIsbWFrZVByb21pc2VLaXQsTSxnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQsY2FuQmVEdXJhYmxlLHByZXBhcmVFeG9DbGFzc0tpdDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXSxbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VQcm9taXNlS2l0ID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWRcIiwgWyRo4oCNX2EgPT4gKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJjYW5CZUR1cmFibGVcIiwgWyRo4oCNX2EgPT4gKGNhbkJlRHVyYWJsZSA9ICRo4oCNX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaOKAjV9hID0+IChwcmVwYXJlRXhvQ2xhc3NLaXQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3Qgc2luaz0oKT0+eyB9O1xuY29uc3QgbWFrZVF1aWV0UmVqZWN0aW9uPShyZWFzb24pPT57XG5jb25zdCByZWplY3Rpb249aGFyZGVuKFByb21pc2UucmVqZWN0KHJlYXNvbikpO1xudm9pZCBFLndoZW4ocmVqZWN0aW9uLHNpbmssc2luayk7XG5yZXR1cm4gcmVqZWN0aW9uO1xuIH07XG5jb25zdCB0b29GYXJSZWplY3Rpb249bWFrZVF1aWV0UmVqZWN0aW9uKFxuaGFyZGVuKEVycm9yKCdDYW5ub3QgcmVhZCBwYXN0IGVuZCBvZiBpdGVyYXRpb24uJykpKTtcblxuXG5jb25zdCAgICAgICAgUHVibGlzaGVyST1NLmludGVyZmFjZSgnUHVibGlzaGVyJyx7XG5wdWJsaXNoOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCksXG5maW5pc2g6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoKSxcbmZhaWw6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoKX0pO1xuXG5cbi8vXG4kaOKAjV9vbmNlLlB1Ymxpc2hlckkoUHVibGlzaGVySSk7Y29uc3QgVXBkYXRlQ291bnRTaGFwZT1NLm9yKE0uYmlnaW50KCksTS5udW1iZXIoKSk7JGjigI1fb25jZS5VcGRhdGVDb3VudFNoYXBlKFVwZGF0ZUNvdW50U2hhcGUpO1xuY29uc3QgICAgICAgIFN1YnNjcmliZXJJPU0uaW50ZXJmYWNlKCdTdWJzY3JpYmVyJyx7XG5zdWJzY3JpYmVBZnRlcjpNLmNhbGwoKS5vcHRpb25hbChNLmJpZ2ludCgpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldFVwZGF0ZVNpbmNlOk0uY2FsbCgpLm9wdGlvbmFsKFVwZGF0ZUNvdW50U2hhcGUpLnJldHVybnMoTS5wcm9taXNlKCkpfSk7JGjigI1fb25jZS5TdWJzY3JpYmVySShTdWJzY3JpYmVySSk7XG5cbmNvbnN0ICAgICAgICBwdWJsaXNoS2l0SUtpdD1oYXJkZW4oe1xucHVibGlzaGVyOlB1Ymxpc2hlckksXG5zdWJzY3JpYmVyOlN1YnNjcmliZXJJfSk7JGjigI1fb25jZS5wdWJsaXNoS2l0SUtpdChwdWJsaXNoS2l0SUtpdCk7XG5cblxuY29uc3QgICAgICAgIEZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGU9TS5pbnRlcmZhY2UoXG4nRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3InLFxue1xuZm9yazpNLmNhbGwoKS5yZXR1cm5zKE0uYW55KCkpLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTpNLmNhbGwoKS5yZXR1cm5zKE0uYW55KCkpLC8vXG5uZXh0Ok0uY2FsbFdoZW4oKS5yZXR1cm5zKE0uYW55KCkpfSk7JGjigI1fb25jZS5Gb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlKEZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUpO1xuXG5cblxuY29uc3QgICAgICAgIEl0ZXJhYmxlRWFjaFRvcGljST1NLmludGVyZmFjZSgnSXRlcmFibGVFYWNoVG9waWMnLHtcbnN1YnNjcmliZUFmdGVyOlxuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKFN1YnNjcmliZXJJKS5tZXRob2RHdWFyZHMuc3Vic2NyaWJlQWZ0ZXIsXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOk0uY2FsbCgpLnJldHVybnMoXG5NLnJlbW90YWJsZSgnRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3InKSl9KTskaOKAjV9vbmNlLkl0ZXJhYmxlRWFjaFRvcGljSShJdGVyYWJsZUVhY2hUb3BpY0kpO1xuXG5cblxuY29uc3QgICAgICAgIEl0ZXJhYmxlTGF0ZXN0VG9waWNJPU0uaW50ZXJmYWNlKCdJdGVyYWJsZUxhdGVzdFRvcGljJyx7XG5nZXRVcGRhdGVTaW5jZTpcbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChTdWJzY3JpYmVySSkubWV0aG9kR3VhcmRzLmdldFVwZGF0ZVNpbmNlLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTpNLmNhbGwoKS5yZXR1cm5zKFxuTS5yZW1vdGFibGUoJ0ZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJykpfSk7XG5cblxuXG4vKlxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLkl0ZXJhYmxlTGF0ZXN0VG9waWNJKEl0ZXJhYmxlTGF0ZXN0VG9waWNJKTtcbmNvbnN0IHdlYWtNZW1vaXplVW5hcnk9KGZuKT0+e1xuY29uc3QgY2FjaGU9bmV3IFdlYWtNYXAoKTtcbnJldHVybihhcmcpPT57XG4vKiAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9hcmc9YXJnO1xuaWYoY2FjaGUuaGFzKG9hcmcpKXtcbnJldHVybiBjYWNoZS5nZXQob2FyZyk7XG4gfVxuY29uc3QgcmVzdWx0PWZuKGFyZyk7XG5jYWNoZS5zZXQob2FyZyxyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VVcGRhdGVSZWNvcmRGcm9tUHVibGljYXRpb25SZWNvcmQ9KHJlY29yZCk9PntcbmNvbnN0e1xuaGVhZDp7dmFsdWUsZG9uZX0sXG5wdWJsaXNoQ291bnR9PVxucmVjb3JkO1xuaWYoZG9uZSl7XG4vL1xucmV0dXJuIGhhcmRlbih7dmFsdWUsdXBkYXRlQ291bnQ6dW5kZWZpbmVkfSk7XG4gfVxucmV0dXJuIGhhcmRlbih7dmFsdWUsdXBkYXRlQ291bnQ6cHVibGlzaENvdW50fSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VQdWJsaXNoS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHRhaWxQO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdGFpbFI7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG5cbmxldCBjdXJyZW50UHVibGlzaENvdW50PTBuO1xubGV0IGN1cnJlbnRQPXRhaWxQO1xuY29uc3QgYWR2YW5jZUN1cnJlbnQ9KGRvbmUsdmFsdWUscmVqZWN0aW9uKT0+e1xuaWYodGFpbFI9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCB1cGRhdGUgc3RhdGUgYWZ0ZXIgdGVybWluYXRpb24uJyk7XG4gfVxuXG5jdXJyZW50UHVibGlzaENvdW50Kz0xbjtcbmN1cnJlbnRQPXRhaWxQO1xuY29uc3QgcmVzb2x2ZUN1cnJlbnQ9dGFpbFI7XG5cbmlmKGRvbmUpe1xudGFpbFA9dG9vRmFyUmVqZWN0aW9uO1xudGFpbFI9dW5kZWZpbmVkO1xuIH1lbHNle1xuKHtwcm9taXNlOnRhaWxQLHJlc29sdmU6dGFpbFJ9PW1ha2VQcm9taXNlS2l0KCkpO1xuIH1cblxuaWYocmVqZWN0aW9uKXtcbnJlc29sdmVDdXJyZW50KHJlamVjdGlvbik7XG4gfWVsc2V7XG5yZXNvbHZlQ3VycmVudChcbmhhcmRlbih7XG5oZWFkOnt2YWx1ZSxkb25lfSxcbnB1Ymxpc2hDb3VudDpjdXJyZW50UHVibGlzaENvdW50LFxudGFpbDp0YWlsUH0pKTtcblxuXG4gfVxuIH07XG5cbmNvbnN0IG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZD13ZWFrTWVtb2l6ZVVuYXJ5KFxubWFrZVVwZGF0ZVJlY29yZEZyb21QdWJsaWNhdGlvblJlY29yZCk7XG5cblxuLypcblxuXG4gICAqL1xuY29uc3Qgc3Vic2NyaWJlcj1GYXIoJ1N1YnNjcmliZXInLHtcbnN1YnNjcmliZUFmdGVyOihwdWJsaXNoQ291bnQ9LTFuKT0+e1xuYXNzZXJ0LnR5cGVvZihwdWJsaXNoQ291bnQsJ2JpZ2ludCcpO1xuaWYocHVibGlzaENvdW50PT09Y3VycmVudFB1Ymxpc2hDb3VudCl7XG5yZXR1cm4gdGFpbFA7XG4gfWVsc2UgaWYocHVibGlzaENvdW50PGN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIGN1cnJlbnRQO1xuIH1lbHNle1xudGhyb3cgRXJyb3IoXG4nc3Vic2NyaWJlQWZ0ZXIgYXJndW1lbnQgbXVzdCBiZSBhIHByZXZpb3VzbHktaXNzdWVkIHB1Ymxpc2hDb3VudC4nKTtcblxuIH1cbiB9LFxuZ2V0VXBkYXRlU2luY2U6KHVwZGF0ZUNvdW50KT0+e1xuaWYodXBkYXRlQ291bnQ9PT11bmRlZmluZWQpe1xucmV0dXJuIHN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIoKS50aGVuKG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZCk7XG4gfVxudXBkYXRlQ291bnQ9QmlnSW50KHVwZGF0ZUNvdW50KTtcbnJldHVybihcbnN1YnNjcmliZXJcbi8vXG4vL1xuLy9cbi5zdWJzY3JpYmVBZnRlcih1cGRhdGVDb3VudClcbi8vXG4vL1xuLnRoZW4oKCk9PnN1YnNjcmliZXIuZ2V0VXBkYXRlU2luY2UoKSkpO1xuXG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVibGlzaGVyPUZhcignUHVibGlzaGVyJyx7XG5wdWJsaXNoOih2YWx1ZSk9PntcbmFkdmFuY2VDdXJyZW50KGZhbHNlLHZhbHVlKTtcbiB9LFxuZmluaXNoOihmaW5hbFZhbHVlKT0+e1xuYWR2YW5jZUN1cnJlbnQodHJ1ZSxmaW5hbFZhbHVlKTtcbiB9LFxuZmFpbDoocmVhc29uKT0+e1xuYWR2YW5jZUN1cnJlbnQodHJ1ZSx1bmRlZmluZWQsbWFrZVF1aWV0UmVqZWN0aW9uKHJlYXNvbikpO1xuIH19KTtcblxucmV0dXJuIGhhcmRlbih7cHVibGlzaGVyLHN1YnNjcmliZXJ9KTtcbiB9OyRo4oCNX29uY2UubWFrZVB1Ymxpc2hLaXQobWFrZVB1Ymxpc2hLaXQpO1xuaGFyZGVuKG1ha2VQdWJsaXNoS2l0KTtcblxuY29uc3QgRHVyYWJsZVB1Ymxpc2hLaXRTdGF0ZVNoYXBlPWhhcmRlbih7XG52YWx1ZUR1cmFiaWxpdHk6TS5hbnkoKSxcbnB1Ymxpc2hDb3VudDpNLmFueSgpLFxuc3RhdHVzOk0uYW55KCksXG5oYXNWYWx1ZTpNLmFueSgpLFxudmFsdWU6TS5hbnkoKX0pO1xuXG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGluaXREdXJhYmxlUHVibGlzaEtpdFN0YXRlPShvcHRpb25zPXt9KT0+e1xuY29uc3R7dmFsdWVEdXJhYmlsaXR5PSdtYW5kYXRvcnknfT1vcHRpb25zO1xuYXNzZXJ0LmVxdWFsKHZhbHVlRHVyYWJpbGl0eSwnbWFuZGF0b3J5Jyk7XG5yZXR1cm57XG4vL1xudmFsdWVEdXJhYmlsaXR5LFxuXG4vL1xucHVibGlzaENvdW50OjBuLFxuc3RhdHVzOidsaXZlJywvL1xuXG4vL1xuLy9cbi8vXG5oYXNWYWx1ZTpmYWxzZSxcbnZhbHVlOnVuZGVmaW5lZH07XG5cbiB9O1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLypcblxuXG4gKi9cbmNvbnN0IGdldEVwaGVtZXJhbEtleT0oZmFjZXRzKT0+ZmFjZXRzLnB1Ymxpc2hlcjtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGE9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHByb3ZpZGVDdXJyZW50UD0oc3RhdGUsZmFjZXRzLHRhaWwpPT57XG5jb25zdCBlcGhlbWVyYWxLZXk9Z2V0RXBoZW1lcmFsS2V5KGZhY2V0cyk7XG5jb25zdCBmb3VuZERhdGE9ZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhLmdldChlcGhlbWVyYWxLZXkpO1xuY29uc3QgY3VycmVudFA9Zm91bmREYXRhJiZmb3VuZERhdGEuY3VycmVudFA7XG5pZihjdXJyZW50UCl7XG5yZXR1cm4gY3VycmVudFA7XG4gfVxuXG5jb25zdHtwdWJsaXNoQ291bnQsc3RhdHVzLGhhc1ZhbHVlLHZhbHVlfT1zdGF0ZTtcbmlmKCFoYXNWYWx1ZSl7XG5hc3NlcnQoc3RhdHVzPT09J2xpdmUnKTtcbnJldHVybiB0YWlsO1xuIH1cbmlmKHN0YXR1cz09PSdsaXZlJ3x8c3RhdHVzPT09J2ZpbmlzaGVkJyl7XG5jb25zdCBjZWxsPWhhcmRlbih7XG5oZWFkOnt2YWx1ZSxkb25lOnN0YXR1cyE9PSdsaXZlJ30sXG5wdWJsaXNoQ291bnQsXG50YWlsfSk7XG5cbnJldHVybiBFLnJlc29sdmUoY2VsbCk7XG4gfWVsc2UgaWYoc3RhdHVzPT09J2ZhaWxlZCcpe1xucmV0dXJuIG1ha2VRdWlldFJlamVjdGlvbih2YWx1ZSk7XG4gfWVsc2V7XG50aHJvdyBGYWlsIGBJbnZhbGlkIGR1cmFibGUgcHJvbWlzZSBraXQgc3RhdHVzOiAke3Eoc3RhdHVzKX1gO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YT0oc3RhdGUsZmFjZXRzKT0+e1xuY29uc3QgZXBoZW1lcmFsS2V5PWdldEVwaGVtZXJhbEtleShmYWNldHMpO1xuY29uc3QgZm91bmREYXRhPWR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YS5nZXQoZXBoZW1lcmFsS2V5KTtcbmlmKGZvdW5kRGF0YSl7XG5yZXR1cm4gZm91bmREYXRhO1xuIH1cblxuY29uc3R7c3RhdHVzfT1zdGF0ZTtcbmxldCB0YWlsUDtcbmxldCB0YWlsUjtcbmlmKHN0YXR1cz09PSdsaXZlJyl7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG52b2lkIEUud2hlbih0YWlsUCxzaW5rLHNpbmspO1xuIH1lbHNlIGlmKHN0YXR1cz09PSdmaW5pc2hlZCd8fHN0YXR1cz09PSdmYWlsZWQnKXtcbnRhaWxQPXRvb0ZhclJlamVjdGlvbjtcbiB9ZWxzZXtcbnRocm93IEZhaWwgYEludmFsaWQgZHVyYWJsZSBwcm9taXNlIGtpdCBzdGF0dXM6ICR7cShzdGF0dXMpfWA7XG4gfVxuLy9cbmNvbnN0IG9iaj1oYXJkZW4oe2N1cnJlbnRQOnVuZGVmaW5lZCx0YWlsUCx0YWlsUn0pO1xuZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhLnNldChlcGhlbWVyYWxLZXksb2JqKTtcbnJldHVybiBvYmo7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdD0oY29udGV4dCx2YWx1ZSx0YXJnZXRTdGF0dXM9J2xpdmUnKT0+e1xuY29uc3R7c3RhdGUsZmFjZXRzfT1jb250ZXh0O1xuY29uc3R7dmFsdWVEdXJhYmlsaXR5LHN0YXR1c309c3RhdGU7XG5pZihzdGF0dXMhPT0nbGl2ZScpe1xudGhyb3cgRXJyb3IoJ0Nhbm5vdCB1cGRhdGUgc3RhdGUgYWZ0ZXIgdGVybWluYXRpb24uJyk7XG4gfVxuY29uc3QgZG9uZT10YXJnZXRTdGF0dXMhPT0nbGl2ZSc7XG5pZihkb25lfHx2YWx1ZUR1cmFiaWxpdHk9PT0nbWFuZGF0b3J5Jyl7XG5jYW5CZUR1cmFibGUodmFsdWUpfHxGYWlsIGBDYW5ub3QgYWNjZXB0IG5vbi1kdXJhYmxlIHZhbHVlOiAke3ZhbHVlfWA7XG4gfVxuY29uc3R7dGFpbFA6b2xkVGFpbFAsdGFpbFI6cmVzb2x2ZU9sZFRhaWx9PVxucHJvdmlkZUR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YShzdGF0ZSxmYWNldHMpO1xuYXNzZXJ0LnR5cGVvZihyZXNvbHZlT2xkVGFpbCwnZnVuY3Rpb24nKTtcblxuY29uc3QgcHVibGlzaENvdW50PXN0YXRlLnB1Ymxpc2hDb3VudCsxbjtcbnN0YXRlLnB1Ymxpc2hDb3VudD1wdWJsaXNoQ291bnQ7XG5cbmxldCB0YWlsUDtcbmxldCB0YWlsUjtcbmlmKGRvbmUpe1xuc3RhdGUuc3RhdHVzPXRhcmdldFN0YXR1cztcbnRhaWxQPXRvb0ZhclJlamVjdGlvbjtcbnRhaWxSPXVuZGVmaW5lZDtcbiB9ZWxzZXtcbih7cHJvbWlzZTp0YWlsUCxyZXNvbHZlOnRhaWxSfT1tYWtlUHJvbWlzZUtpdCgpKTtcbnZvaWQgRS53aGVuKHRhaWxQLHNpbmssc2luayk7XG4gfVxuXG5sZXQgY3VycmVudFA7XG5pZih0YXJnZXRTdGF0dXM9PT0nZmFpbGVkJyl7XG5zdGF0ZS5oYXNWYWx1ZT10cnVlO1xuc3RhdGUudmFsdWU9dmFsdWU7XG5jb25zdCByZWplY3Rpb249bWFrZVF1aWV0UmVqZWN0aW9uKHZhbHVlKTtcbnJlc29sdmVPbGRUYWlsKHJlamVjdGlvbik7XG4gfWVsc2V7XG4vL1xuLy9cbmlmKGRvbmV8fHZhbHVlRHVyYWJpbGl0eSE9PSdpZ25vcmVkJyYmY2FuQmVEdXJhYmxlKHZhbHVlKSl7XG5zdGF0ZS5oYXNWYWx1ZT10cnVlO1xuc3RhdGUudmFsdWU9dmFsdWU7XG4gfWVsc2V7XG5zdGF0ZS5oYXNWYWx1ZT1mYWxzZTtcbnN0YXRlLnZhbHVlPXVuZGVmaW5lZDtcbi8vXG5jdXJyZW50UD1vbGRUYWlsUDtcbiB9XG5cbnJlc29sdmVPbGRUYWlsKFxuaGFyZGVuKHtcbmhlYWQ6e3ZhbHVlLGRvbmV9LFxucHVibGlzaENvdW50LFxudGFpbDp0YWlsUH0pKTtcblxuXG4gfVxuXG5kdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEuc2V0KFxuZ2V0RXBoZW1lcmFsS2V5KGZhY2V0cyksXG5oYXJkZW4oe2N1cnJlbnRQLHRhaWxQLHRhaWxSfSkpO1xuXG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQ9KGJhZ2dhZ2Usa2luZE5hbWUpPT57XG4vL1xuLy9cbmNvbnN0IG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZD1tYWtlVXBkYXRlUmVjb3JkRnJvbVB1YmxpY2F0aW9uUmVjb3JkO1xuXG4vKlxuXG4gICAqL1xucmV0dXJuIHByZXBhcmVFeG9DbGFzc0tpdChcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbnB1Ymxpc2hLaXRJS2l0LFxuaW5pdER1cmFibGVQdWJsaXNoS2l0U3RhdGUsXG57XG4vL1xuLy9cbnB1Ymxpc2hlcjp7XG5wdWJsaXNoKHZhbHVlKXtcbmFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdCh0aGlzLHZhbHVlKTtcbiB9LFxuZmluaXNoKGZpbmFsVmFsdWUpe1xuYWR2YW5jZUR1cmFibGVQdWJsaXNoS2l0KHRoaXMsZmluYWxWYWx1ZSwnZmluaXNoZWQnKTtcbiB9LFxuZmFpbChyZWFzb24pe1xuYWR2YW5jZUR1cmFibGVQdWJsaXNoS2l0KHRoaXMscmVhc29uLCdmYWlsZWQnKTtcbiB9fSxcblxuXG4vL1xuLy9cbnN1YnNjcmliZXI6e1xuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50PS0xbil7XG5jb25zdHtzdGF0ZSxmYWNldHN9PXRoaXM7XG5jb25zdHtwdWJsaXNoQ291bnQ6Y3VycmVudFB1Ymxpc2hDb3VudH09c3RhdGU7XG5jb25zdHtjdXJyZW50UCx0YWlsUH09cHJvdmlkZUR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YShcbnN0YXRlLFxuZmFjZXRzKTtcblxuaWYocHVibGlzaENvdW50PT09Y3VycmVudFB1Ymxpc2hDb3VudCl7XG5yZXR1cm4gdGFpbFA7XG4gfWVsc2UgaWYocHVibGlzaENvdW50PGN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIGN1cnJlbnRQfHxwcm92aWRlQ3VycmVudFAoc3RhdGUsZmFjZXRzLHRhaWxQKTtcbiB9ZWxzZXtcbnRocm93IEVycm9yKFxuJ3N1YnNjcmliZUFmdGVyIGFyZ3VtZW50IG11c3QgYmUgYSBwcmV2aW91c2x5LWlzc3VlZCBwdWJsaXNoQ291bnQuJyk7XG5cbiB9XG4gfSxcbmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KXtcbmNvbnN0e1xuZmFjZXRzOntzdWJzY3JpYmVyfX09XG50aGlzO1xuaWYodXBkYXRlQ291bnQ9PT11bmRlZmluZWQpe1xucmV0dXJuIHN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIoKS50aGVuKG1ha2VNZW1vaXplZFVwZGF0ZVJlY29yZCk7XG4gfVxudXBkYXRlQ291bnQ9QmlnSW50KHVwZGF0ZUNvdW50KTtcbnJldHVybihcbnN1YnNjcmliZXJcbi8vXG4vL1xuLy9cbi5zdWJzY3JpYmVBZnRlcih1cGRhdGVDb3VudClcbi8vXG4vL1xuLnRoZW4oKCk9PnN1YnNjcmliZXIuZ2V0VXBkYXRlU2luY2UoKSkpO1xuXG4gfX19LFxuXG5cbntcbnN0YXRlU2hhcGU6RHVyYWJsZVB1Ymxpc2hLaXRTdGF0ZVNoYXBlfSk7XG5cblxuIH07JGjigI1fb25jZS5wcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQocHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KTtcbmhhcmRlbihwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQpO1xuXG5jb25zdCAgICAgICAgU3Vic2NyaWJlclNoYXBlPU0ucmVtb3RhYmxlKCdTdWJzY3JpYmVyJyk7JGjigI1fb25jZS5TdWJzY3JpYmVyU2hhcGUoU3Vic2NyaWJlclNoYXBlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlB1Ymxpc2hlckkiOlsiUHVibGlzaGVySSJdLCJVcGRhdGVDb3VudFNoYXBlIjpbIlVwZGF0ZUNvdW50U2hhcGUiXSwiU3Vic2NyaWJlckkiOlsiU3Vic2NyaWJlckkiXSwicHVibGlzaEtpdElLaXQiOlsicHVibGlzaEtpdElLaXQiXSwiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSI6WyJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIl0sIkl0ZXJhYmxlRWFjaFRvcGljSSI6WyJJdGVyYWJsZUVhY2hUb3BpY0kiXSwiSXRlcmFibGVMYXRlc3RUb3BpY0kiOlsiSXRlcmFibGVMYXRlc3RUb3BpY0kiXSwibWFrZVB1Ymxpc2hLaXQiOlsibWFrZVB1Ymxpc2hLaXQiXSwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0IjpbInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCJdLCJTdWJzY3JpYmVyU2hhcGUiOlsiU3Vic2NyaWJlclNoYXBlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADQZ89EhCAAAIQgAAC4AAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3RvcmVkLW5vdGlmaWVyLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvaW50ZXJuYWwiLCJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIiwiQGVuZG8vZmFyIiwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyJdLCJleHBvcnRzIjpbIm1ha2VTdG9yZWROb3RpZmllciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0QWxsRGVmaW5lZCxtYWtlU2VyaWFsaXplVG9TdG9yYWdlLEUsRmFyLG9ic2VydmVOb3RpZmllcjskaOKAjV9pbXBvcnRzKFtbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJhc3NlcnRBbGxEZWZpbmVkXCIsIFskaOKAjV9hID0+IChhc3NlcnRBbGxEZWZpbmVkID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNcIiwgW1tcIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2VcIiwgWyRo4oCNX2EgPT4gKG1ha2VTZXJpYWxpemVUb1N0b3JhZ2UgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXSxbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV1dXSxbXCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzXCIsIFtbXCJvYnNlcnZlTm90aWZpZXJcIiwgWyRo4oCNX2EgPT4gKG9ic2VydmVOb3RpZmllciA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTdG9yZWROb3RpZmllcj0obm90aWZpZXIsc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbmFzc2VydEFsbERlZmluZWQoe25vdGlmaWVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXJ9KTtcblxuY29uc3QgbWFyc2hhbGxUb1N0b3JhZ2U9bWFrZVNlcmlhbGl6ZVRvU3RvcmFnZShzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKTtcblxub2JzZXJ2ZU5vdGlmaWVyKG5vdGlmaWVyLHtcbnVwZGF0ZVN0YXRlKHZhbHVlKXtcbm1hcnNoYWxsVG9TdG9yYWdlKHZhbHVlKS5jYXRjaCgocmVhc29uKT0+XG5jb25zb2xlLmVycm9yKCdTdG9yZWROb3RpZmllciBmYWlsZWQgdG8gdXBkYXRlU3RhdGUnLHJlYXNvbikpO1xuXG4gfSxcbmZhaWwocmVhc29uKXtcbmNvbnNvbGUuZXJyb3IoJ1N0b3JlZE5vdGlmaWVyIGZhaWxlZCB0byBpdGVyYXRlJyxyZWFzb24pO1xuIH19KS5cbmNhdGNoKChyZWFzb24pPT57XG5jb25zb2xlLmVycm9yKCdTdG9yZWROb3RpZmllciBoYWx0ZWQgaXRlcmF0aW9uJyxyZWFzb24pO1xuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHVuc2VyaWFsaXplcj1GYXIoJ3Vuc2VyaWFsaXplcicse1xuZnJvbUNhcERhdGE6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpLFxudW5zZXJpYWxpemU6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3JlZE5vdGlmaWVyPUZhcignU3RvcmVkTm90aWZpZXInLHtcbmdldFVwZGF0ZVNpbmNlOih1cGRhdGVDb3VudCk9PkUobm90aWZpZXIpLmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50KSxcbmdldFBhdGg6KCk9PkUoc3RvcmFnZU5vZGUpLmdldFBhdGgoKSxcbmdldFVuc2VyaWFsaXplcjooKT0+dW5zZXJpYWxpemVyfSk7XG5cbnJldHVybiBzdG9yZWROb3RpZmllcjtcbiB9OyRo4oCNX29uY2UubWFrZVN0b3JlZE5vdGlmaWVyKG1ha2VTdG9yZWROb3RpZmllcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU3RvcmVkTm90aWZpZXIiOlsibWFrZVN0b3JlZE5vdGlmaWVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJ2NKpAJFgAACRYAACcAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3RvcmVzdWIuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwiLCJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIiwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyIsIi4vcHVibGlzaC1raXQuanMiLCIuL3N1YnNjcmliZXIuanMiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbImZvckVhY2hQdWJsaWNhdGlvblJlY29yZCIsIm1ha2VTdG9yZWRQdWJsaXNoS2l0IiwibWFrZVN0b3JlZFB1Ymxpc2hlcktpdCIsIm1ha2VTdG9yZWRTdWJzY3JpYmVyIiwibWFrZVN0b3JlZFN1YnNjcmlwdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxGYXIsbWFrZU1hcnNoYWwsYXNzZXJ0QWxsRGVmaW5lZCxtYWtlU2VyaWFsaXplVG9TdG9yYWdlLG9ic2VydmVJdGVyYXRpb24sbWFrZVB1Ymxpc2hLaXQsbWFrZVN1YnNjcmlwdGlvbktpdCxzdWJzY3JpYmVFYWNoOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV0sW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wibWFrZU1hcnNoYWxcIiwgWyRo4oCNX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcImFzc2VydEFsbERlZmluZWRcIiwgWyRo4oCNX2EgPT4gKGFzc2VydEFsbERlZmluZWQgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvbGliLWNoYWluU3RvcmFnZS5qc1wiLCBbW1wibWFrZVNlcmlhbGl6ZVRvU3RvcmFnZVwiLCBbJGjigI1fYSA9PiAobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSA9ICRo4oCNX2EpXV1dXSxbXCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzXCIsIFtbXCJvYnNlcnZlSXRlcmF0aW9uXCIsIFskaOKAjV9hID0+IChvYnNlcnZlSXRlcmF0aW9uID0gJGjigI1fYSldXV1dLFtcIi4vcHVibGlzaC1raXQuanNcIiwgW1tcIm1ha2VQdWJsaXNoS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUHVibGlzaEtpdCA9ICRo4oCNX2EpXV1dXSxbXCIuL3N1YnNjcmliZXIuanNcIiwgW1tcIm1ha2VTdWJzY3JpcHRpb25LaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VTdWJzY3JpcHRpb25LaXQgPSAkaOKAjV9hKV1dXV0sW1wiLi9zdWJzY3JpYmUuanNcIiwgW1tcInN1YnNjcmliZUVhY2hcIiwgWyRo4oCNX2EgPT4gKHN1YnNjcmliZUVhY2ggPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmb3JFYWNoUHVibGljYXRpb25SZWNvcmQ9YXN5bmMoc3Vic2NyaWJlcixjb25zdW1lVmFsdWUpPT57XG4vL1xuLy9cbmNvbnN0IGl0ZXJhdG9yPXN1YnNjcmliZUVhY2goc3Vic2NyaWJlcilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5cbmxldCBmaW5pc2hlZD1mYWxzZTtcbmF3YWl0IG51bGw7XG53aGlsZSghZmluaXNoZWQpe1xuY29uc3R7dmFsdWUsZG9uZX09YXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuYXdhaXQgY29uc3VtZVZhbHVlKHZhbHVlKTtcbmZpbmlzaGVkPSEhZG9uZTtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5mb3JFYWNoUHVibGljYXRpb25SZWNvcmQoZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkKTtcbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkU3Vic2NyaWJlcj0oc3Vic2NyaWJlcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKT0+e1xuYXNzZXJ0QWxsRGVmaW5lZCh7c3Vic2NyaWJlcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyfSk7XG5cbmNvbnN0IG1hcnNoYWxsVG9TdG9yYWdlPW1ha2VTZXJpYWxpemVUb1N0b3JhZ2Uoc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik7XG5cbi8vXG5mb3JFYWNoUHVibGljYXRpb25SZWNvcmQoc3Vic2NyaWJlcixtYXJzaGFsbFRvU3RvcmFnZSkuY2F0Y2goKGVycik9Pntcbi8vXG4vL1xuY29uc29sZS5lcnJvcignU3RvcmVkU3Vic2NyaWJlciBmYWlsZWQgdG8gaXRlcmF0ZScsZXJyKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZXI9RmFyKCd1bnNlcmlhbGl6ZXInLHtcbmZyb21DYXBEYXRhOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKSxcbnVuc2VyaWFsaXplOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3Jlc3ViPUZhcignU3RvcmVkU3Vic2NyaWJlcicse1xuc3Vic2NyaWJlQWZ0ZXI6KHB1Ymxpc2hDb3VudCk9PnN1YnNjcmliZXIuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KSxcbmdldFVwZGF0ZVNpbmNlOih1cGRhdGVDb3VudCk9PnN1YnNjcmliZXIuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpLFxuZ2V0UGF0aDooKT0+RShzdG9yYWdlTm9kZSkuZ2V0UGF0aCgpLFxuZ2V0U3RvcmVLZXk6KCk9PkUoc3RvcmFnZU5vZGUpLmdldFN0b3JlS2V5KCksXG5nZXRVbnNlcmlhbGl6ZXI6KCk9PnVuc2VyaWFsaXplcn0pO1xuXG5yZXR1cm4gc3RvcmVzdWI7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VTdG9yZWRTdWJzY3JpYmVyKG1ha2VTdG9yZWRTdWJzY3JpYmVyKTtcbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkU3Vic2NyaXB0aW9uPShcbnN1YnNjcmlwdGlvbixcbnN0b3JhZ2VOb2RlLFxubWFyc2hhbGxlcj1tYWtlTWFyc2hhbCh1bmRlZmluZWQsdW5kZWZpbmVkLHtcbm1hcnNoYWxTYXZlRXJyb3I6KCk9PnsgfSxcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KSk9PlxuXG57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHVuc2VyaWFsaXplcj1GYXIoJ3Vuc2VyaWFsaXplcicse1xuZnJvbUNhcERhdGE6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpLFxudW5zZXJpYWxpemU6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpfSk7XG5cblxuLy9cbmxldCBwdWJsaXNoRmFpbGVkPWZhbHNlO1xubGV0IHB1Ymxpc2hFeGNlcHRpb247XG5cbmNvbnN0IGZhaWw9KGVycik9PntcbnB1Ymxpc2hGYWlsZWQ9dHJ1ZTtcbnB1Ymxpc2hFeGNlcHRpb249ZXJyO1xuIH07XG5cbi8vXG4vL1xuY29uc3QgcHVibGlzaFZhbHVlPShvYmopPT57XG5hc3NlcnQoc3RvcmFnZU5vZGUpO1xuaWYocHVibGlzaEZhaWxlZCl7XG4vL1xudGhyb3cgcHVibGlzaEV4Y2VwdGlvbjtcbiB9XG5cbi8vXG5FKG1hcnNoYWxsZXIpLlxudG9DYXBEYXRhKG9iaikuXG50aGVuKChzZXJpYWxpemVkKT0+e1xuY29uc3QgZW5jb2RlZD1KU09OLnN0cmluZ2lmeShzZXJpYWxpemVkKTtcbnJldHVybiBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShlbmNvZGVkKTtcbiB9KS5cbmNhdGNoKGZhaWwpO1xuIH07XG5cbmlmKHN0b3JhZ2VOb2RlKXtcbi8vXG5vYnNlcnZlSXRlcmF0aW9uKHN1YnNjcmlwdGlvbix7XG51cGRhdGVTdGF0ZTpwdWJsaXNoVmFsdWUsXG5maW5pc2g6cHVibGlzaFZhbHVlfSkuXG5jYXRjaChmYWlsKTtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RvcmVzdWI9RmFyKCdTdG9yZWRTdWJzY3JpcHRpb24nLHtcbi8vXG5nZXRTdG9yZUtleTphc3luYygpPT57XG5pZighc3RvcmFnZU5vZGUpe1xucmV0dXJuIGhhcmRlbih7c3Vic2NyaXB0aW9ufSk7XG4gfVxuY29uc3Qgc3RvcmVLZXk9YXdhaXQgRShzdG9yYWdlTm9kZSkuZ2V0U3RvcmVLZXkoKTtcbnJldHVybiBoYXJkZW4oey4uLnN0b3JlS2V5LHN1YnNjcmlwdGlvbn0pO1xuIH0sXG5nZXRVbnNlcmlhbGl6ZXI6KCk9PnVuc2VyaWFsaXplcixcbmdldFNoYXJhYmxlU3Vic2NyaXB0aW9uSW50ZXJuYWxzOigpPT5cbnN1YnNjcmlwdGlvbi5nZXRTaGFyYWJsZVN1YnNjcmlwdGlvbkludGVybmFscygpLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+c3Vic2NyaXB0aW9uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpLFxuc3Vic2NyaWJlQWZ0ZXI6KHB1Ymxpc2hDb3VudCk9PnN1YnNjcmlwdGlvbi5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQpfSk7XG5cbnJldHVybiBzdG9yZXN1YjtcbiB9OyRo4oCNX29uY2UubWFrZVN0b3JlZFN1YnNjcmlwdGlvbihtYWtlU3RvcmVkU3Vic2NyaXB0aW9uKTtcbmhhcmRlbihtYWtlU3RvcmVkU3Vic2NyaXB0aW9uKTtcblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFB1Ymxpc2hlcktpdD0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcixjaGlsZFBhdGgpPT57XG5jb25zdHtwdWJsaWNhdGlvbixzdWJzY3JpcHRpb259PW1ha2VTdWJzY3JpcHRpb25LaXQoKTtcblxuaWYoc3RvcmFnZU5vZGUmJmNoaWxkUGF0aCl7XG5zdG9yYWdlTm9kZT1FKHN0b3JhZ2VOb2RlKS5tYWtlQ2hpbGROb2RlKGNoaWxkUGF0aCk7XG4gfVxuXG4vL1xuY29uc3Qgc3Vic2NyaWJlcj1tYWtlU3RvcmVkU3Vic2NyaXB0aW9uKFxuc3Vic2NyaXB0aW9uLFxuc3RvcmFnZU5vZGUsXG5tYXJzaGFsbGVyKTtcblxuXG5yZXR1cm57XG5wdWJsaXNoZXI6cHVibGljYXRpb24sXG5zdWJzY3JpYmVyfTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQobWFrZVN0b3JlZFB1Ymxpc2hlcktpdCk7XG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFB1Ymxpc2hLaXQ9KHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxucmV0dXJue1xucHVibGlzaGVyLFxuLy9cbnN1YnNjcmliZXI6bWFrZVN0b3JlZFN1YnNjcmliZXIoc3Vic2NyaWJlcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKX07XG5cbiB9OyRo4oCNX29uY2UubWFrZVN0b3JlZFB1Ymxpc2hLaXQobWFrZVN0b3JlZFB1Ymxpc2hLaXQpO1xuaGFyZGVuKG1ha2VTdG9yZWRQdWJsaXNoS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImZvckVhY2hQdWJsaWNhdGlvblJlY29yZCI6WyJmb3JFYWNoUHVibGljYXRpb25SZWNvcmQiXSwibWFrZVN0b3JlZFN1YnNjcmliZXIiOlsibWFrZVN0b3JlZFN1YnNjcmliZXIiXSwibWFrZVN0b3JlZFN1YnNjcmlwdGlvbiI6WyJtYWtlU3RvcmVkU3Vic2NyaXB0aW9uIl0sIm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQiOlsibWFrZVN0b3JlZFB1Ymxpc2hlcktpdCJdLCJtYWtlU3RvcmVkUHVibGlzaEtpdCI6WyJtYWtlU3RvcmVkUHVibGlzaEtpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACDPI2zNxIAADcSAAAoAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N1YnNjcmliZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdXBncmFkZS1hcGkuanMiXSwiZXhwb3J0cyI6WyJzdWJzY3JpYmUiLCJzdWJzY3JpYmVFYWNoIiwic3Vic2NyaWJlTGF0ZXN0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLEZhaWwsYW5ub3RhdGVFcnJvcixFLEZhcixpc09iamVjdCxpc1VwZ3JhZGVEaXNjb25uZWN0aW9uOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjigI1fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dLFtcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaOKAjV9hID0+IChpc09iamVjdCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy91cGdyYWRlLWFwaS5qc1wiLCBbW1wiaXNVcGdyYWRlRGlzY29ubmVjdGlvblwiLCBbJGjigI1fYSA9PiAoaXNVcGdyYWRlRGlzY29ubmVjdGlvbiA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCBzaW5rPSgpPT57IH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgcmVjb25uZWN0QXNOZWVkZWQ9YXN5bmMoZ2V0dGVyLHNlZWQ9W10pPT57XG5sZXQgZGlzY29ubmVjdGlvbjtcbmxldCBsYXN0VmVyc2lvbj0tSW5maW5pdHk7XG4vL1xuYXdhaXQgbnVsbDtcbmZvcihsZXQgaT0wOztpKz0xKXtcbnRyeXtcbmNvbnN0IHJlc3VsdFA9aTxzZWVkLmxlbmd0aD9zZWVkW2ldOmdldHRlcigpO1xuY29uc3QgcmVzdWx0PWF3YWl0IHJlc3VsdFA7XG5yZXR1cm4gcmVzdWx0O1xuIH1jYXRjaChlcnIpe1xuaWYoaXNVcGdyYWRlRGlzY29ubmVjdGlvbihlcnIpKXtcbmlmKCFkaXNjb25uZWN0aW9uKXtcbmRpc2Nvbm5lY3Rpb249ZXJyO1xuIH1cbmNvbnN0e2luY2FybmF0aW9uTnVtYmVyOnZlcnNpb259PWVycjtcbmlmKHZlcnNpb24+bGFzdFZlcnNpb24pe1xuLy9cbi8vXG4vL1xubGFzdFZlcnNpb249dmVyc2lvbjtcbmNvbnRpbnVlO1xuIH1cbiB9XG4vL1xuLy9cbi8vXG5pZihpc09iamVjdChlcnIpJiZkaXNjb25uZWN0aW9uJiZkaXNjb25uZWN0aW9uIT09ZXJyKXtcbnRyeXtcbmFubm90YXRlRXJyb3IoXG5lcnIsXG5YIGBBdHRlbXB0aW5nIHRvIHJlY292ZXIgZnJvbSBkaXNjb25uZWN0aW9uOiAke2Rpc2Nvbm5lY3Rpb259YCk7XG5cbiB9Y2F0Y2goX2Vycil7XG4vL1xuIH1cbiB9XG50aHJvdyBlcnI7XG4gfVxuIH1cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzdWJzY3JpYmU9KGl0UCk9PlxuRmFyKCdBc3luY0l0ZXJhYmxlJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT57XG5jb25zdCBpdD1FKGl0UClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5jb25zdCBzZWxmPUZhcignQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5zZWxmLFxubmV4dDphc3luYygpPT5FKGl0KS5uZXh0KCl9KTtcblxucmV0dXJuIHNlbGY7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLnN1YnNjcmliZShzdWJzY3JpYmUpO1xuY29uc3QgbWFrZUVhY2hJdGVyYXRvcj0odG9waWMsbmV4dENlbGxQKT0+e1xuLy9cbi8vXG5jb25zdCBzZWxmPUZhcignRWFjaEl0ZXJhdG9yJyx7XG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOigpPT5zZWxmLFxubmV4dDooKT0+e1xuY29uc3R7XG5oZWFkOnJlc3VsdFAsXG5wdWJsaXNoQ291bnQ6cHVibGlzaENvdW50UCxcbnRhaWw6dGFpbFB9PVxuRS5nZXQobmV4dENlbGxQKTtcblxuLy9cbi8vXG5jb25zdCBnZXRTdWNjZXNzb3I9YXN5bmMoKT0+e1xuY29uc3QgcHVibGlzaENvdW50PWF3YWl0IHB1Ymxpc2hDb3VudFA7XG5hc3NlcnQudHlwZW9mKHB1Ymxpc2hDb3VudCwnYmlnaW50Jyk7XG5jb25zdCBzdWNjZXNzb3I9YXdhaXQgRSh0b3BpYykuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KTtcbmNvbnN0IG5ld1B1Ymxpc2hDb3VudD1zdWNjZXNzb3IucHVibGlzaENvdW50O1xuaWYobmV3UHVibGlzaENvdW50IT09cHVibGlzaENvdW50KzFuKXtcbkZhaWwgYGVhY2hJdGVyYXRvciBicm9rZW4gYnkgZ2FwIGZyb20gcHVibGlzaENvdW50ICR7cHVibGlzaENvdW50fSB0byAke25ld1B1Ymxpc2hDb3VudH1gO1xuIH1cbnJldHVybiBzdWNjZXNzb3I7XG4gfTtcblxuLy9cbi8vXG5uZXh0Q2VsbFA9cmVjb25uZWN0QXNOZWVkZWQoZ2V0U3VjY2Vzc29yLFt0YWlsUF0pO1xuXG4vL1xuLy9cbi8vXG4vL1xudm9pZCBFLndoZW4ocHVibGlzaENvdW50UCxzaW5rLHNpbmspO1xudm9pZCBFLndoZW4obmV4dENlbGxQLHNpbmssc2luayk7XG5yZXR1cm4gcmVzdWx0UDtcbiB9LFxuZm9yazooKT0+bWFrZUVhY2hJdGVyYXRvcih0b3BpYyxuZXh0Q2VsbFApfSk7XG5cbnJldHVybiBzZWxmO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc3Vic2NyaWJlRWFjaD0odG9waWMpPT57XG5jb25zdCBpdGVyYWJsZT1GYXIoJ0VhY2hJdGVyYWJsZScse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+e1xuY29uc3QgZmlyc3RDZWxsUD1yZWNvbm5lY3RBc05lZWRlZCgoKT0+RSh0b3BpYykuc3Vic2NyaWJlQWZ0ZXIoKSk7XG5yZXR1cm4gbWFrZUVhY2hJdGVyYXRvcih0b3BpYyxmaXJzdENlbGxQKTtcbiB9fSk7XG5cbnJldHVybiBpdGVyYWJsZTtcbiB9OyRo4oCNX29uY2Uuc3Vic2NyaWJlRWFjaChzdWJzY3JpYmVFYWNoKTtcbmhhcmRlbihzdWJzY3JpYmVFYWNoKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNsb25lTGF0ZXN0SXRlcmF0b3I9KHRvcGljLGxvY2FsVXBkYXRlQ291bnQsdGVybWluYWxSZXN1bHQpPT57XG5sZXQgbXV0ZXg9UHJvbWlzZS5yZXNvbHZlKCk7XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZVJlcXVlc3ROZXh0UmVzdWx0PWFzeW5jKCk9PntcbmlmKHRlcm1pbmFsUmVzdWx0KXtcbi8vXG4vL1xucmV0dXJuIHRlcm1pbmFsUmVzdWx0O1xuIH1cblxuLy9cbi8vXG5jb25zdHt2YWx1ZSx1cGRhdGVDb3VudH09YXdhaXQgcmVjb25uZWN0QXNOZWVkZWQoKCk9PlxuRSh0b3BpYykuZ2V0VXBkYXRlU2luY2UobG9jYWxVcGRhdGVDb3VudCkpO1xuXG4vL1xubG9jYWxVcGRhdGVDb3VudD11cGRhdGVDb3VudDtcblxuLy9cbmlmKHVwZGF0ZUNvdW50PT09dW5kZWZpbmVkKXtcbnRlcm1pbmFsUmVzdWx0PWhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlfSk7XG5yZXR1cm4gdGVybWluYWxSZXN1bHQ7XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH07XG5cbmNvbnN0IHNlbGY9RmFyKCdMYXRlc3RJdGVyYXRvcicse1xuZm9yazooKT0+Y2xvbmVMYXRlc3RJdGVyYXRvcih0b3BpYyxsb2NhbFVwZGF0ZUNvdW50LHRlcm1pbmFsUmVzdWx0KSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnNlbGYsXG5uZXh0OmFzeW5jKCk9Pntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuaWYodGVybWluYWxSZXN1bHQpe1xuLy9cbi8vXG5yZXR1cm4gdGVybWluYWxSZXN1bHQ7XG4gfVxuXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgbmV4dFJlc3VsdD1tdXRleC50aGVuKG1heWJlUmVxdWVzdE5leHRSZXN1bHQpO1xubXV0ZXg9bmV4dFJlc3VsdC50aGVuKHNpbmssc2luayk7XG4vL1xuXG5yZXR1cm4gbmV4dFJlc3VsdDtcbiB9fSk7XG5cbnJldHVybiBzZWxmO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VMYXRlc3RJdGVyYXRvcj0odG9waWMpPT5jbG9uZUxhdGVzdEl0ZXJhdG9yKHRvcGljKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzdWJzY3JpYmVMYXRlc3Q9KHRvcGljKT0+e1xuY29uc3QgaXRlcmFibGU9RmFyKCdMYXRlc3RJdGVyYWJsZScse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+bWFrZUxhdGVzdEl0ZXJhdG9yKHRvcGljKX0pO1xuXG5yZXR1cm4gaXRlcmFibGU7XG4gfTskaOKAjV9vbmNlLnN1YnNjcmliZUxhdGVzdChzdWJzY3JpYmVMYXRlc3QpO1xuaGFyZGVuKHN1YnNjcmliZUxhdGVzdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzdWJzY3JpYmUiOlsic3Vic2NyaWJlIl0sInN1YnNjcmliZUVhY2giOlsic3Vic2NyaWJlRWFjaCJdLCJzdWJzY3JpYmVMYXRlc3QiOlsic3Vic2NyaWJlTGF0ZXN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAABCtad7iBwAA4gcAACkAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3Vic2NyaWJlci5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiLCIuL3N1YnNjcmliZS5qcyIsIi4vcHVibGlzaC1raXQuanMiLCIuL3RvcGljLmpzIl0sImV4cG9ydHMiOlsibWFrZVN1YnNjcmlwdGlvbiIsIm1ha2VTdWJzY3JpcHRpb25LaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLHN1YnNjcmliZUVhY2gsbWFrZVB1Ymxpc2hLaXQsbWFrZVBpbm5lZEhpc3RvcnlUb3BpYzskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dLFtcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtbXCJzdWJzY3JpYmVFYWNoXCIsIFskaOKAjV9hID0+IChzdWJzY3JpYmVFYWNoID0gJGjigI1fYSldXV1dLFtcIi4vcHVibGlzaC1raXQuanNcIiwgW1tcIm1ha2VQdWJsaXNoS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUHVibGlzaEtpdCA9ICRo4oCNX2EpXV1dXSxbXCIuL3RvcGljLmpzXCIsIFtbXCJtYWtlUGlubmVkSGlzdG9yeVRvcGljXCIsIFskaOKAjV9hID0+IChtYWtlUGlubmVkSGlzdG9yeVRvcGljID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZVN1YnNjcmlwdGlvbj0odG9waWMpPT57XG5jb25zdCBzdWJzY3JpcHRpb249RmFyKCdTdWJzY3JpcHRpb24nLHtcbi4uLnN1YnNjcmliZUVhY2godG9waWMpLFxuc3Vic2NyaWJlQWZ0ZXI6YXN5bmMocHVibGlzaENvdW50KT0+RSh0b3BpYykuc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KSxcblxuLypcblxuXG5cblxuICAgICAqL1xuZ2V0U2hhcmFibGVTdWJzY3JpcHRpb25JbnRlcm5hbHM6YXN5bmMoKT0+dG9waWMsXG5cbmdldFN0b3JlS2V5OigpPT5oYXJkZW4oe3N1YnNjcmlwdGlvbn0pfSk7XG5cbnJldHVybiBzdWJzY3JpcHRpb247XG4gfTskaOKAjV9vbmNlLm1ha2VTdWJzY3JpcHRpb24obWFrZVN1YnNjcmlwdGlvbik7XG5oYXJkZW4obWFrZVN1YnNjcmlwdGlvbik7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlU3Vic2NyaXB0aW9uS2l0PSgpPT57XG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxuLy9cbi8vXG5cbmNvbnN0IHBpbm5lZEhpc3RvcnlUb3BpYz1tYWtlUGlubmVkSGlzdG9yeVRvcGljKHN1YnNjcmliZXIpO1xuY29uc3Qgc3Vic2NyaXB0aW9uPW1ha2VTdWJzY3JpcHRpb24ocGlubmVkSGlzdG9yeVRvcGljKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1YmxpY2F0aW9uPUZhcigncHVibGljYXRpb24nLHtcbnVwZGF0ZVN0YXRlOihub25GaW5hbFZhbHVlKT0+cHVibGlzaGVyLnB1Ymxpc2gobm9uRmluYWxWYWx1ZSksXG5maW5pc2g6KGNvbXBsZXRpb24pPT5wdWJsaXNoZXIuZmluaXNoKGNvbXBsZXRpb24pLFxuZmFpbDoocmVhc29uKT0+cHVibGlzaGVyLmZhaWwocmVhc29uKX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe3B1YmxpY2F0aW9uLHN1YnNjcmlwdGlvbn0pO1xuIH07JGjigI1fb25jZS5tYWtlU3Vic2NyaXB0aW9uS2l0KG1ha2VTdWJzY3JpcHRpb25LaXQpO1xuaGFyZGVuKG1ha2VTdWJzY3JpcHRpb25LaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVN1YnNjcmlwdGlvbiI6WyJtYWtlU3Vic2NyaXB0aW9uIl0sIm1ha2VTdWJzY3JpcHRpb25LaXQiOlsibWFrZVN1YnNjcmlwdGlvbktpdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABfaB419QMAAPUDAAAkAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3RvcGljLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciJdLCJleHBvcnRzIjpbIm1ha2VQaW5uZWRIaXN0b3J5VG9waWMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9mYXJcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVBpbm5lZEhpc3RvcnlUb3BpYz0odG9waWMpPT57XG4vL1xuXG4vL1xuY29uc3QgcGlubmVkUHViTGlzdD10b3BpYy5zdWJzY3JpYmVBZnRlcigpO1xuXG5yZXR1cm4gRmFyKCdQaW5uZWRIaXN0b3J5VG9waWMnLHtcbnN1YnNjcmliZUFmdGVyOmFzeW5jKHB1Ymxpc2hDb3VudD0tMW4pPT57XG5pZihwdWJsaXNoQ291bnQ9PT0tMW4pe1xucmV0dXJuIHBpbm5lZFB1Ykxpc3Q7XG4gfVxucmV0dXJuIHRvcGljLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCk7XG4gfSxcbmdldFVwZGF0ZVNpbmNlOmFzeW5jKHVwZGF0ZUNvdW50PXVuZGVmaW5lZCk9Pntcbi8vXG5yZXR1cm4gdG9waWMuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpO1xuIH19KTtcblxuIH07JGjigI1fb25jZS5tYWtlUGlubmVkSGlzdG9yeVRvcGljKG1ha2VQaW5uZWRIaXN0b3J5VG9waWMpO1xuaGFyZGVuKG1ha2VQaW5uZWRIaXN0b3J5VG9waWMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyI6WyJtYWtlUGlubmVkSGlzdG9yeVRvcGljIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAACoAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvdHlwZXMtaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAU1jQy40GAACNBgAALQAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdGVzdGluZy11dGlscy5qcyJdLCJleHBvcnRzIjpbIm1ha2VGYWtlTWFyc2hhbGxlciIsIm1ha2VGYWtlU3RvcmFnZSIsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXIsbWFrZU1hcnNoYWw7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaOKAjV9hID0+IChtYWtlTWFyc2hhbCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy90ZXN0aW5nLXV0aWxzLmpzXCIsIFtdXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUZha2VTdG9yYWdlPShwYXRoLHB1YmxpY2F0aW9uKT0+e1xubGV0IHNldFZhbHVlQ2FsbHM9MDtcbmNvbnN0IGZ1bGxQYXRoPSBgcHVibGlzaC4ke3BhdGh9YDtcbmNvbnN0IHN0b3JlS2V5PWhhcmRlbih7XG5zdG9yZU5hbWU6J3N3aW5nc2V0JyxcbnN0b3JlU3Via2V5OiBgc3dpbmdzZXQvZGF0YToke2Z1bGxQYXRofWAsXG5kYXRhUHJlZml4Qnl0ZXM6Jyd9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RvcmFnZT1GYXIoJ1N0b3JhZ2VOb2RlJyx7XG5nZXRQYXRoOigpPT5wYXRoLFxuZ2V0U3RvcmVLZXk6YXN5bmMoKT0+c3RvcmVLZXksXG5zZXRWYWx1ZTphc3luYyh2YWx1ZSk9PntcbnNldFZhbHVlQ2FsbHMrPTE7XG5hc3NlcnQudHlwZW9mKHZhbHVlLCdzdHJpbmcnKTtcbmlmKHB1YmxpY2F0aW9uKXtcbnB1YmxpY2F0aW9uLnVwZGF0ZVN0YXRlKHZhbHVlKTtcbiB9XG4gfSxcbm1ha2VDaGlsZE5vZGU6KCk9PnN0b3JhZ2UsXG5jb3VudFNldFZhbHVlQ2FsbHM6KCk9PnNldFZhbHVlQ2FsbHN9KTtcblxucmV0dXJuIHN0b3JhZ2U7XG4gfTskaOKAjV9vbmNlLm1ha2VGYWtlU3RvcmFnZShtYWtlRmFrZVN0b3JhZ2UpO1xuaGFyZGVuKG1ha2VGYWtlU3RvcmFnZSk7XG5cbmNvbnN0ICAgICAgICBtYWtlRmFrZU1hcnNoYWxsZXI9KCk9PlxubWFrZU1hcnNoYWwodW5kZWZpbmVkLHVuZGVmaW5lZCx7XG5tYXJzaGFsU2F2ZUVycm9yOigpPT57IH19KTskaOKAjV9vbmNlLm1ha2VGYWtlTWFyc2hhbGxlcihtYWtlRmFrZU1hcnNoYWxsZXIpO1xuXG5oYXJkZW4obWFrZUZha2VNYXJzaGFsbGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7IkBhZ29yaWMvaW50ZXJuYWwvc3JjL3Rlc3RpbmctdXRpbHMuanMiOltbImV2ZW50TG9vcEl0ZXJhdGlvbiIsImV2ZW50TG9vcEl0ZXJhdGlvbiJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRmFrZVN0b3JhZ2UiOlsibWFrZUZha2VTdG9yYWdlIl0sIm1ha2VGYWtlTWFyc2hhbGxlciI6WyJtYWtlRmFrZU1hcnNoYWxsZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGjl5naMdAACjHQAAMwAAAEBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMy9zcmMvbWFyc2hhbC1jb250ZXh0cy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGFnb3JpYy9zdG9yZSIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3ZhdHMvc3JjL2xpYi1ib2FyZC5qcyJdLCJleHBvcnRzIjpbIm1ha2VFeHBvcnRDb250ZXh0IiwibWFrZUltcG9ydENvbnRleHQiLCJtYWtlTG9nZ2luZ1ByZXNlbmNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsSGFuZGxlZFByb21pc2UsbWFrZVNjYWxhck1hcFN0b3JlLEZhcixtYWtlTWFyc2hhbCxSZW1vdGFibGUsREVGQVVMVF9QUkVGSVg7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkhhbmRsZWRQcm9taXNlXCIsIFskaOKAjV9hID0+IChIYW5kbGVkUHJvbWlzZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlU2NhbGFyTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV0sW1wibWFrZU1hcnNoYWxcIiwgWyRo4oCNX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjigI1fYSldXSxbXCJSZW1vdGFibGVcIiwgWyRo4oCNX2EgPT4gKFJlbW90YWJsZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3ZhdHMvc3JjL2xpYi1ib2FyZC5qc1wiLCBbW1wiREVGQVVMVF9QUkVGSVhcIiwgWyRo4oCNX2EgPT4gKERFRkFVTFRfUFJFRklYID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCBpc0RlZmF1bHRCb2FyZElkPShzcGVjaW1lbik9PntcbnJldHVybiB0eXBlb2Ygc3BlY2ltZW49PT0nc3RyaW5nJyYmc3BlY2ltZW4uc3RhcnRzV2l0aChERUZBVUxUX1BSRUZJWCk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVdhbGxldFNsb3Q9KF90YWJsZXMsa2luZCxpZCk9PntcbmNvbnN0IGRpZ2l0cz0vKiAgICAgICAgICAgICAgICAgKi8gYCR7aWR9YDtcbnJldHVybiBgJHtraW5kfToke2RpZ2l0c31gO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZmluZEtleT0ocmVjb3JkLHByZWRpY2F0ZSk9PntcbmNvbnN0IGtleT1PYmplY3Qua2V5cyhyZWNvcmQpLmZpbmQocHJlZGljYXRlKTtcbnJldHVybiBrZXk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBwYXJzZVdhbGxldFNsb3Q9KHRhYmxlcyxzbG90KT0+e1xuY29uc3Qga2luZD1maW5kS2V5KHRhYmxlcywoayk9PnNsb3Quc3RhcnRzV2l0aCggYCR7a306YCkpO1xuY29uc3QgaWQ9a2luZD9OdW1iZXIoc2xvdC5zbGljZShraW5kLmxlbmd0aCsxKSk6TmFOO1xucmV0dXJue2tpbmQsaWR9O1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBpbml0U2xvdFZhbD0odGFibGUsc2xvdCx2YWwpPT57XG50YWJsZS5ieVNsb3QuaW5pdChzbG90LHZhbCk7XG50YWJsZS5ieVZhbC5pbml0KHZhbCxzbG90KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFeHBvcnRDb250ZXh0PSgpPT57XG5jb25zdCB3YWxsZXRPYmplY3RzPXtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnB1cnNlOntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfSxcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wYXltZW50OntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfSxcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnVua25vd246e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9fTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYm9hcmRPYmplY3RzPXtcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgc2xvdFRvVmFsPShzbG90LF9pZmFjZSk9PntcbmlmKGlzRGVmYXVsdEJvYXJkSWQoc2xvdCkmJmJvYXJkT2JqZWN0cy5ieVNsb3QuaGFzKHNsb3QpKXtcbnJldHVybiBib2FyZE9iamVjdHMuYnlTbG90LmdldChzbG90KTtcbiB9XG5jb25zdHtraW5kLGlkfT1wYXJzZVdhbGxldFNsb3Qod2FsbGV0T2JqZWN0cyxzbG90KTtcbmtpbmR8fEZhaWwgYGJhZCBzbG90IGtpbmQ6ICR7c2xvdH1gO1xuY29uc3QgdmFsPXdhbGxldE9iamVjdHNba2luZF0uYnlTbG90LmdldChpZCk7Ly9cbnJldHVybiB2YWw7XG4gfTtcblxubGV0IHVua25vd25Ob25jZT0wO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCB2YWxUb1Nsb3Q9KHZhbCk9PntcbmlmKGJvYXJkT2JqZWN0cy5ieVZhbC5oYXModmFsKSl7XG5yZXR1cm4gYm9hcmRPYmplY3RzLmJ5VmFsLmdldCh2YWwpO1xuIH1cbmNvbnN0IGtpbmQ9ZmluZEtleSh3YWxsZXRPYmplY3RzLChrKT0+d2FsbGV0T2JqZWN0c1trXS5ieVZhbC5oYXModmFsKSk7XG5pZihraW5kKXtcbi8vXG5jb25zdCBpZD13YWxsZXRPYmplY3RzW2tpbmRdLmJ5VmFsLmdldCh2YWwpO1xucmV0dXJuIG1ha2VXYWxsZXRTbG90KHdhbGxldE9iamVjdHMsa2luZCxpZCk7XG4gfVxudW5rbm93bk5vbmNlKz0xO1xuY29uc3Qgc2xvdD1tYWtlV2FsbGV0U2xvdCh3YWxsZXRPYmplY3RzLCd1bmtub3duJyx1bmtub3duTm9uY2UpO1xuaW5pdFNsb3RWYWwod2FsbGV0T2JqZWN0cy51bmtub3duLHVua25vd25Ob25jZSx2YWwpO1xucmV0dXJuIHNsb3Q7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBtYWtlU2F2ZXI9KGtpbmQsdGFibGUpPT57XG5sZXQgbm9uY2U9MDtcbi8qICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2F2ZXI9KHZhbCk9Pntcbm5vbmNlKz0xO1xuaW5pdFNsb3RWYWwodGFibGUsbm9uY2UsdmFsKTtcbiB9O1xucmV0dXJuIHNhdmVyO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe1xuc2F2ZVB1cnNlQWN0aW9uczptYWtlU2F2ZXIoJ3B1cnNlJyx3YWxsZXRPYmplY3RzLnB1cnNlKSxcbnNhdmVQYXltZW50QWN0aW9uczptYWtlU2F2ZXIoJ3BheW1lbnQnLHdhbGxldE9iamVjdHMucGF5bWVudCksXG4vKlxuXG5cbiAgICAgKi9cbmluaXRQdXJzZUlkOihpZCxwdXJzZSk9PntcbmluaXRTbG90VmFsKHdhbGxldE9iamVjdHMucHVyc2UsaWQscHVyc2UpO1xuIH0sXG5wdXJzZUVudHJpZXM6d2FsbGV0T2JqZWN0cy5wdXJzZS5ieVNsb3QuZW50cmllcyxcbi8qXG5cblxuICAgICAqL1xuaW5pdEJvYXJkSWQ6KGlkLHZhbCk9PntcbmluaXRTbG90VmFsKGJvYXJkT2JqZWN0cyxpZCx2YWwpO1xuIH0sXG4vKlxuXG5cbiAgICAgKi9cbmVuc3VyZUJvYXJkSWQ6KGlkLHZhbCk9PntcbmlmKGJvYXJkT2JqZWN0cy5ieVZhbC5oYXModmFsKSl7XG5hc3NlcnQuZXF1YWwoYm9hcmRPYmplY3RzLmJ5VmFsLmdldCh2YWwpLGlkKTtcbnJldHVybjtcbiB9XG5pbml0U2xvdFZhbChib2FyZE9iamVjdHMsaWQsdmFsKTtcbiB9LFxuLi4ubWFrZU1hcnNoYWwodmFsVG9TbG90LHNsb3RUb1ZhbCx7c2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pfSk7XG5cbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaOKAjV9vbmNlLm1ha2VFeHBvcnRDb250ZXh0KG1ha2VFeHBvcnRDb250ZXh0KTtcblxuY29uc3QgZGVmYXVsdE1ha2VQcmVzZW5jZT0oaWZhY2UpPT57XG5jb25zdCBzZXZlcmVkPSBgU0VWRVJFRDogJHtpZmFjZS5yZXBsYWNlKC9eQWxsZWdlZDogLywnJyl9YDtcbnJldHVybiBGYXIoc2V2ZXJlZCx7fSk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUltcG9ydENvbnRleHQ9KG1ha2VQcmVzZW5jZT1kZWZhdWx0TWFrZVByZXNlbmNlKT0+e1xuY29uc3Qgd2FsbGV0T2JqZWN0cz17XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wdXJzZTp7XG5ieVNsb3Q6bWFrZVNjYWxhck1hcFN0b3JlKCksXG5ieVZhbDptYWtlU2NhbGFyTWFwU3RvcmUoKX0sXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnBheW1lbnQ6e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9LFxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG51bmtub3duOntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfX07XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGJvYXJkT2JqZWN0cz17XG5ieVNsb3Q6bWFrZVNjYWxhck1hcFN0b3JlKCksXG5ieVZhbDptYWtlU2NhbGFyTWFwU3RvcmUoKX07XG5cblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZVZhbD0odGFibGUsc2xvdCxpZmFjZSk9PntcbmlmKHRhYmxlLmJ5U2xvdC5oYXMoc2xvdCkpe1xucmV0dXJuIHRhYmxlLmJ5U2xvdC5nZXQoc2xvdCk7XG4gfVxuY29uc3QgdmFsPW1ha2VQcmVzZW5jZShpZmFjZSk7XG5pbml0U2xvdFZhbCh0YWJsZSxzbG90LHZhbCk7XG5yZXR1cm4gdmFsO1xuIH07XG5cbmNvbnN0IHNsb3RUb1ZhbD17XG4vKlxuXG5cbiAgICAgKi9cbmZyb21Cb2FyZDooc2xvdCxpZmFjZSk9PntcbmlzRGVmYXVsdEJvYXJkSWQoc2xvdCl8fEZhaWwgYGJhZCBib2FyZCBzbG90ICR7cShzbG90KX1gO1xucmV0dXJuIHByb3ZpZGVWYWwoYm9hcmRPYmplY3RzLHNsb3QsaWZhY2UpO1xuIH0sXG5cbi8qXG5cblxuICAgICAqL1xuZnJvbU15V2FsbGV0OihzbG90LGlmYWNlKT0+e1xuaWYoIXNsb3Qpe1xuLy9cbnJldHVybiBtYWtlUHJlc2VuY2UoIGAke3Nsb3R9YCk7XG4gfVxuY29uc3R7a2luZCxpZH09cGFyc2VXYWxsZXRTbG90KHdhbGxldE9iamVjdHMsc2xvdCk7XG5yZXR1cm4ga2luZD9cbnByb3ZpZGVWYWwod2FsbGV0T2JqZWN0c1traW5kXSxpZCxpZmFjZSk6XG5zbG90VG9WYWwuZnJvbUJvYXJkKHNsb3QsaWZhY2UpO1xuIH19O1xuXG5cbmNvbnN0IHZhbFRvU2xvdD17XG5mcm9tQm9hcmQ6KHZhbCk9PmJvYXJkT2JqZWN0cy5ieVZhbC5nZXQodmFsKSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmZyb21NeVdhbGxldDoodmFsKT0+e1xuY29uc3Qga2luZD1maW5kS2V5KHdhbGxldE9iamVjdHMsKGspPT53YWxsZXRPYmplY3RzW2tdLmJ5VmFsLmhhcyh2YWwpKTtcbmlmKGtpbmQ9PT11bmRlZmluZWQpe1xudGhyb3cgRmFpbCBgY2Fubm90IHNlcmlhbGl6ZSB1bnJlZ2lzdGVyZWQgJHt2YWx9YDtcbiB9XG5cbmNvbnN0IGlkPXdhbGxldE9iamVjdHNba2luZF0uYnlWYWwuZ2V0KHZhbCk7XG5yZXR1cm4gbWFrZVdhbGxldFNsb3Qod2FsbGV0T2JqZWN0cyxraW5kLGlkKTtcbiB9fTtcblxuXG5jb25zdCBtYXJzaGFsPXtcbmZyb21Cb2FyZDptYWtlTWFyc2hhbCh2YWxUb1Nsb3QuZnJvbUJvYXJkLHNsb3RUb1ZhbC5mcm9tQm9hcmQse1xubWFyc2hhbE5hbWU6J2Zyb21Cb2FyZCcsXG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSksXG5cbmZyb21NeVdhbGxldDptYWtlTWFyc2hhbCh2YWxUb1Nsb3QuZnJvbU15V2FsbGV0LHNsb3RUb1ZhbC5mcm9tTXlXYWxsZXQse1xubWFyc2hhbE5hbWU6J2Zyb21NeVdhbGxldCcsXG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSl9O1xuXG5cblxucmV0dXJuIGhhcmRlbih7XG4vKlxuXG5cbiAgICAgKi9cbmluaXRCb2FyZElkOihpZCx2YWwpPT57XG5pbml0U2xvdFZhbChib2FyZE9iamVjdHMsaWQsdmFsKTtcbiB9LFxuLypcblxuXG4gICAgICovXG5lbnN1cmVCb2FyZElkOihpZCx2YWwpPT57XG5pZihib2FyZE9iamVjdHMuYnlWYWwuaGFzKHZhbCkpe1xuYXNzZXJ0LmVxdWFsKGJvYXJkT2JqZWN0cy5ieVZhbC5nZXQodmFsKSxpZCk7XG5yZXR1cm47XG4gfVxuaW5pdFNsb3RWYWwoYm9hcmRPYmplY3RzLGlkLHZhbCk7XG4gfSxcbmZyb21NeVdhbGxldDpGYXIoJ3dhbGxldCBtYXJzaGFsbGVyJyx7Li4ubWFyc2hhbC5mcm9tTXlXYWxsZXR9KSxcbmZyb21Cb2FyZDpGYXIoJ2JvYXJkIG1hcnNoYWxsZXInLHsuLi5tYXJzaGFsLmZyb21Cb2FyZH0pfSk7XG5cbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZUltcG9ydENvbnRleHQobWFrZUltcG9ydENvbnRleHQpO1xuY29uc3QgbWFrZVByZXNlbmNlPShpZmFjZSxoYW5kbGVyKT0+e1xubGV0IG9iajtcblxudm9pZCBuZXcgSGFuZGxlZFByb21pc2UoKHJlc29sdmUscmVqZWN0LHJlc29sdmVXaXRoUHJlc2VuY2UpPT57XG5vYmo9cmVzb2x2ZVdpdGhQcmVzZW5jZShoYW5kbGVyKTtcbiB9KTtcbmFzc2VydChvYmopO1xucmV0dXJuIFJlbW90YWJsZShpZmFjZSx1bmRlZmluZWQsb2JqKTtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VMb2dnaW5nUHJlc2VuY2U9KGlmYWNlLGxvZyk9Pntcbi8qICAgICAgICAgICAgICAqLyAvL1xuY29uc3QgaXQ9bWFrZVByZXNlbmNlKGlmYWNlLHtcbmFwcGx5TWV0aG9kOih0YXJnZXQsbWV0aG9kLGFyZ3MpPT57XG5sb2coaGFyZGVuKFsnYXBwbHlNZXRob2QnLHRhcmdldCxtZXRob2QsYXJnc10pKTtcbiB9LFxuYXBwbHlGdW5jdGlvbjoodGFyZ2V0LGFyZ3MpPT57XG5sb2coaGFyZGVuKFsnYXBwbHlGdW5jdGlvbicsdGFyZ2V0LGFyZ3NdKSk7XG4gfX0pO1xuXG5yZXR1cm4gaXQ7XG4gfTskaOKAjV9vbmNlLm1ha2VMb2dnaW5nUHJlc2VuY2UobWFrZUxvZ2dpbmdQcmVzZW5jZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRXhwb3J0Q29udGV4dCI6WyJtYWtlRXhwb3J0Q29udGV4dCJdLCJtYWtlSW1wb3J0Q29udGV4dCI6WyJtYWtlSW1wb3J0Q29udGV4dCJdLCJtYWtlTG9nZ2luZ1ByZXNlbmNlIjpbIm1ha2VMb2dnaW5nUHJlc2VuY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAqSnWwJwNAACcDQAAIQAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyIsIi4vc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsIi4vc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiLCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qcyIsIkBlbmRvL2V4byIsIi4vbGVnYWN5L2xlZ2FjeU1hcC5qcyIsIi4vbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiLCIuL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5IiwiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzcyIsIm11c3RNYXRjaCIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCB0eXBlbGVzc011c3RNYXRjaDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wibXVzdE1hdGNoXCIsIFskaOKAjV9hID0+ICh0eXBlbGVzc011c3RNYXRjaCA9ICRo4oCNX2EpXV1dXSxbXCIuL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanNcIiwgW11dLFtcIi4vc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanNcIiwgW11dLFtcIi4vc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qc1wiLCBbXV0sW1wiQGVuZG8vZXhvXCIsIFtdXSxbXCIuL2xlZ2FjeS9sZWdhY3lNYXAuanNcIiwgW11dLFtcIi4vbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanNcIiwgW11dLFtcIi4vdHlwZXMuanNcIiwgW11dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbXVzdE1hdGNoPXR5cGVsZXNzTXVzdE1hdGNoOyRo4oCNX29uY2UubXVzdE1hdGNoKG11c3RNYXRjaCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiOltbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qcyI6W1sibWFrZVNjYWxhclNldFN0b3JlIiwibWFrZVNjYWxhclNldFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanMiOltbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyI6W1sibWFrZVNjYWxhck1hcFN0b3JlIiwibWFrZVNjYWxhck1hcFN0b3JlIl1dLCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qcyI6W1sicHJvdmlkZUxhenkiLCJwcm92aWRlTGF6eSJdXSwiQGVuZG8vcGF0dGVybnMiOltbImlzS2V5IiwiaXNLZXkiXSxbImFzc2VydEtleSIsImFzc2VydEtleSJdLFsiYXNzZXJ0U2NhbGFyS2V5IiwiYXNzZXJ0U2NhbGFyS2V5Il0sWyJtYWtlQ29weVNldCIsIm1ha2VDb3B5U2V0Il0sWyJnZXRDb3B5U2V0S2V5cyIsImdldENvcHlTZXRLZXlzIl0sWyJtYWtlQ29weUJhZyIsIm1ha2VDb3B5QmFnIl0sWyJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyIsIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIl0sWyJnZXRDb3B5QmFnRW50cmllcyIsImdldENvcHlCYWdFbnRyaWVzIl0sWyJtYWtlQ29weU1hcCIsIm1ha2VDb3B5TWFwIl0sWyJnZXRDb3B5TWFwRW50cmllcyIsImdldENvcHlNYXBFbnRyaWVzIl0sWyJjb2VyY2VUb0VsZW1lbnRzIiwiY29lcmNlVG9FbGVtZW50cyJdLFsiY29lcmNlVG9CYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIl0sWyJjb21wYXJlS2V5cyIsImNvbXBhcmVLZXlzIl0sWyJrZXlMVCIsImtleUxUIl0sWyJrZXlMVEUiLCJrZXlMVEUiXSxbImtleUVRIiwia2V5RVEiXSxbImtleUdURSIsImtleUdURSJdLFsia2V5R1QiLCJrZXlHVCJdLFsiZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNJc1N1cGVyc2V0Il0sWyJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzRGlzam9pbnQiXSxbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzQ29tcGFyZSJdLFsiZWxlbWVudHNVbmlvbiIsImVsZW1lbnRzVW5pb24iXSxbImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiJdLFsiZWxlbWVudHNJbnRlcnNlY3Rpb24iLCJlbGVtZW50c0ludGVyc2VjdGlvbiJdLFsiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IiwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0Il0sWyJzZXRJc1N1cGVyc2V0Iiwic2V0SXNTdXBlcnNldCJdLFsic2V0SXNEaXNqb2ludCIsInNldElzRGlzam9pbnQiXSxbInNldENvbXBhcmUiLCJzZXRDb21wYXJlIl0sWyJzZXRVbmlvbiIsInNldFVuaW9uIl0sWyJzZXREaXNqb2ludFVuaW9uIiwic2V0RGlzam9pbnRVbmlvbiJdLFsic2V0SW50ZXJzZWN0aW9uIiwic2V0SW50ZXJzZWN0aW9uIl0sWyJzZXREaXNqb2ludFN1YnRyYWN0Iiwic2V0RGlzam9pbnRTdWJ0cmFjdCJdLFsiYmFnSXNTdXBlcmJhZyIsImJhZ0lzU3VwZXJiYWciXSxbImJhZ0NvbXBhcmUiLCJiYWdDb21wYXJlIl0sWyJiYWdVbmlvbiIsImJhZ1VuaW9uIl0sWyJiYWdJbnRlcnNlY3Rpb24iLCJiYWdJbnRlcnNlY3Rpb24iXSxbImJhZ0Rpc2pvaW50U3VidHJhY3QiLCJiYWdEaXNqb2ludFN1YnRyYWN0Il0sWyJNIiwiTSJdLFsiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIl0sWyJpc1BhdHRlcm4iLCJpc1BhdHRlcm4iXSxbImFzc2VydFBhdHRlcm4iLCJhc3NlcnRQYXR0ZXJuIl0sWyJtYXRjaGVzIiwibWF0Y2hlcyJdLFsiaXNDb3B5U2V0IiwiaXNDb3B5U2V0Il0sWyJpc0NvcHlNYXAiLCJpc0NvcHlNYXAiXV0sIkBlbmRvL2V4byI6W1siaW5pdEVtcHR5IiwiaW5pdEVtcHR5Il0sWyJkZWZpbmVFeG9DbGFzcyIsImRlZmluZUV4b0NsYXNzIl0sWyJkZWZpbmVFeG9DbGFzc0tpdCIsImRlZmluZUV4b0NsYXNzS2l0Il0sWyJtYWtlRXhvIiwibWFrZUV4byJdXSwiLi9sZWdhY3kvbGVnYWN5TWFwLmpzIjpbWyJtYWtlTGVnYWN5TWFwIiwibWFrZUxlZ2FjeU1hcCJdXSwiLi9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyI6W1sibWFrZUxlZ2FjeVdlYWtNYXAiLCJtYWtlTGVnYWN5V2Vha01hcCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtdXN0TWF0Y2giOlsibXVzdE1hdGNoIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANezrH4/BQAAPwUAACwAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlTGVnYWN5TWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHE7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VMZWdhY3lNYXA9KHRhZz0na2V5Jyk9PntcbmNvbnN0IG09bmV3IE1hcCgpO1xuY29uc3QgYXNzZXJ0S2V5RG9lc05vdEV4aXN0PShrZXkpPT5cbiFtLmhhcyhrZXkpfHxGYWlsIGAke3EodGFnKX0gYWxyZWFkeSByZWdpc3RlcmVkOiAke2tleX1gO1xuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbm0uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIG0uaGFzKGtleSk7XG4gfSxcbmluaXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleURvZXNOb3RFeGlzdChrZXkpO1xubS5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZ2V0OihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbnJldHVybiBtLmdldChrZXkpO1xuIH0sXG5zZXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xubS5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbm0uZGVsZXRlKGtleSk7XG4gfSxcbmtleXM6KCk9Pm0ua2V5cygpLFxudmFsdWVzOigpPT5tLnZhbHVlcygpLFxuZW50cmllczooKT0+bS5lbnRyaWVzKCksXG5nZXRTaXplOigpPT5tLnNpemUsXG5jbGVhcjooKT0+bS5jbGVhcigpfSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZUxlZ2FjeU1hcChtYWtlTGVnYWN5TWFwKTtcbmhhcmRlbihtYWtlTGVnYWN5TWFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VMZWdhY3lNYXAiOlsibWFrZUxlZ2FjeU1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAyAVX2AQUAAAEFAAAwAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIm1ha2VMZWdhY3lXZWFrTWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHE7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTGVnYWN5V2Vha01hcD0odGFnPSdrZXknKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd209bmV3IFdlYWtNYXAoKTtcbmNvbnN0IGFzc2VydEtleURvZXNOb3RFeGlzdD0oa2V5KT0+XG4hd20uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7a2V5fWA7XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9Plxud20uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIHdtLmhhcyhrZXkpO1xuIH0sXG5pbml0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlEb2VzTm90RXhpc3Qoa2V5KTtcbndtLnNldChrZXksdmFsdWUpO1xuIH0sXG5nZXQ6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuLy9cbnJldHVybiAoLyogICAgICAgICAgICAqL3dtLmdldChrZXkpKTtcbiB9LFxuc2V0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbndtLnNldChrZXksdmFsdWUpO1xuIH0sXG5kZWxldGU6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xud20uZGVsZXRlKGtleSk7XG4gfX0pO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VMZWdhY3lXZWFrTWFwKG1ha2VMZWdhY3lXZWFrTWFwKTtcbmhhcmRlbihtYWtlTGVnYWN5V2Vha01hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTGVnYWN5V2Vha01hcCI6WyJtYWtlTGVnYWN5V2Vha01hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACXjpc7vRAAAL0QAAAxAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIiwiLi9zY2FsYXJXZWFrTWFwU3RvcmUuanMiLCIuL3N0b3JlLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsibWFrZU1hcFN0b3JlTWV0aG9kcyIsIm1ha2VTY2FsYXJNYXBTdG9yZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYXIsYXNzZXJ0UGFzc2FibGUsZmlsdGVySXRlcmFibGUsbWFwSXRlcmFibGUsY29tcGFyZVJhbmssYXNzZXJ0U2NhbGFyS2V5LG1ha2VDb3B5TWFwLG1hdGNoZXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4sbWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMsbWFrZUN1cnJlbnRLZXlzS2l0OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjigI1fYSldXSxbXCJmaWx0ZXJJdGVyYWJsZVwiLCBbJGjigI1fYSA9PiAoZmlsdGVySXRlcmFibGUgPSAkaOKAjV9hKV1dLFtcIm1hcEl0ZXJhYmxlXCIsIFskaOKAjV9hID0+IChtYXBJdGVyYWJsZSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJjb21wYXJlUmFua1wiLCBbJGjigI1fYSA9PiAoY29tcGFyZVJhbmsgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImFzc2VydFNjYWxhcktleVwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0U2NhbGFyS2V5ID0gJGjigI1fYSldXSxbXCJtYWtlQ29weU1hcFwiLCBbJGjigI1fYSA9PiAobWFrZUNvcHlNYXAgPSAkaOKAjV9hKV1dLFtcIm1hdGNoZXNcIiwgWyRo4oCNX2EgPT4gKG1hdGNoZXMgPSAkaOKAjV9hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAobXVzdE1hdGNoID0gJGjigI1fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjigI1fYSldXV1dLFtcIi4vc2NhbGFyV2Vha01hcFN0b3JlLmpzXCIsIFtbXCJtYWtlV2Vha01hcFN0b3JlTWV0aG9kc1wiLCBbJGjigI1fYSA9PiAobWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMgPSAkaOKAjV9hKV1dXV0sW1wiLi9zdG9yZS11dGlscy5qc1wiLCBbW1wibWFrZUN1cnJlbnRLZXlzS2l0XCIsIFskaOKAjV9hID0+IChtYWtlQ3VycmVudEtleXNLaXQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1hcFN0b3JlTWV0aG9kcz0oXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydEtleU9rVG9EZWxldGU9dW5kZWZpbmVkLFxudGFnPSdrZXknKT0+XG57XG5jb25zdHthc3NlcnRVcGRhdGVPbkFkZCxhc3NlcnRVcGRhdGVPbkRlbGV0ZSxpdGVyYWJsZUtleXN9PVxubWFrZUN1cnJlbnRLZXlzS2l0KFxuKCk9PmpzbWFwLmtleXMoKSxcbihrKT0+anNtYXAuaGFzKGspLFxuY29tcGFyZVJhbmssXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlLFxudGFnKTtcblxuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IGtleXM9KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGl0ZXJhYmxlS2V5cztcbiB9XG5jb25zdCBmaWx0ZXI9KGspPT57XG5pZihrZXlQYXR0IT09dW5kZWZpbmVkJiYhbWF0Y2hlcyhrLGtleVBhdHQpKXtcbnJldHVybiBmYWxzZTtcbiB9XG4vL1xuaWYodmFsdWVQYXR0IT09dW5kZWZpbmVkJiYhbWF0Y2hlcyhqc21hcC5nZXQoayksdmFsdWVQYXR0KSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcbnJldHVybiBmaWx0ZXJJdGVyYWJsZShpdGVyYWJsZUtleXMsZmlsdGVyKTtcbiB9O1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHZhbHVlcz0oa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PlxubWFwSXRlcmFibGUoa2V5cyhrZXlQYXR0LHZhbHVlUGF0dCksKGspPT4vKiAgICAgICAgICAgICovanNtYXAuZ2V0KGspKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBlbnRyaWVzPShrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5tYXBJdGVyYWJsZShrZXlzKGtleVBhdHQsdmFsdWVQYXR0KSwoayk9PltcbmssXG4vKiAgICAgICAgICAgICovanNtYXAuZ2V0KGspXSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG4uLi5tYWtlV2Vha01hcFN0b3JlTWV0aG9kcyhcbmpzbWFwLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxudGFnKSxcblxua2V5cyxcbnZhbHVlcyxcbmVudHJpZXMsXG5cbnNuYXBzaG90OihrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5tYWtlQ29weU1hcChlbnRyaWVzKGtleVBhdHQsdmFsdWVQYXR0KSksXG5cbmdldFNpemU6KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQmJnZhbHVlUGF0dD09PXVuZGVmaW5lZD9cbmpzbWFwLnNpemU6XG5bLi4ua2V5cyhrZXlQYXR0LHZhbHVlUGF0dCldLmxlbmd0aCxcblxuY2xlYXI6KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQpe1xuanNtYXAuY2xlYXIoKTtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIGtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpKXtcbmpzbWFwLmRlbGV0ZShrZXkpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VNYXBTdG9yZU1ldGhvZHMobWFrZU1hcFN0b3JlTWV0aG9kcyk7XG5jb25zdCAgICAgICAgbWFrZVNjYWxhck1hcFN0b3JlPShcbnRhZz0na2V5JyxcbntrZXlTaGFwZT11bmRlZmluZWQsdmFsdWVTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc21hcD1uZXcgTWFwKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4odmFsdWVTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLVk9rVG9TZXQ9KF9rZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbih2YWx1ZSk7XG5cbmFzc2VydFBhc3NhYmxlKHZhbHVlKTtcbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKHZhbHVlLHZhbHVlU2hhcGUsJ21hcFN0b3JlIHZhbHVlJyk7XG4gfVxuIH07XG5cbmNvbnN0IGFzc2VydEtWT2tUb0FkZD0oa2V5LHZhbHVlKT0+e1xuLy9cbi8vXG5oYXJkZW4oa2V5KTtcblxuYXNzZXJ0U2NhbGFyS2V5KGtleSk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2goa2V5LGtleVNoYXBlLCdtYXBTdG9yZSBrZXknKTtcbiB9XG5hc3NlcnRLVk9rVG9TZXQoa2V5LHZhbHVlKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIE1hcFN0b3JlIG9mICR7cSh0YWcpfWAse1xuLi4ubWFrZU1hcFN0b3JlTWV0aG9kcyhcbmpzbWFwLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxudW5kZWZpbmVkLFxudGFnKX0pO1xuXG5cbiB9OyRo4oCNX29uY2UubWFrZVNjYWxhck1hcFN0b3JlKG1ha2VTY2FsYXJNYXBTdG9yZSk7XG5oYXJkZW4obWFrZVNjYWxhck1hcFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VNYXBTdG9yZU1ldGhvZHMiOlsibWFrZU1hcFN0b3JlTWV0aG9kcyJdLCJtYWtlU2NhbGFyTWFwU3RvcmUiOlsibWFrZVNjYWxhck1hcFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAI1JSKjqCwAA6gsAADEAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiLCIuL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsIi4vc3RvcmUtdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlU2NhbGFyU2V0U3RvcmUiLCJtYWtlU2V0U3RvcmVNZXRob2RzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLEZhcixmaWx0ZXJJdGVyYWJsZSxjb21wYXJlUmFuayxhc3NlcnRTY2FsYXJLZXksbWFrZUNvcHlTZXQsbWF0Y2hlcyxtdXN0TWF0Y2gsYXNzZXJ0UGF0dGVybixtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyxtYWtlQ3VycmVudEtleXNLaXQ7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXSxbXCJmaWx0ZXJJdGVyYWJsZVwiLCBbJGjigI1fYSA9PiAoZmlsdGVySXRlcmFibGUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiY29tcGFyZVJhbmtcIiwgWyRo4oCNX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJhc3NlcnRTY2FsYXJLZXlcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFNjYWxhcktleSA9ICRo4oCNX2EpXV0sW1wibWFrZUNvcHlTZXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VDb3B5U2V0ID0gJGjigI1fYSldXSxbXCJtYXRjaGVzXCIsIFskaOKAjV9hID0+IChtYXRjaGVzID0gJGjigI1fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRo4oCNX2EgPT4gKG11c3RNYXRjaCA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRo4oCNX2EpXV1dXSxbXCIuL3NjYWxhcldlYWtTZXRTdG9yZS5qc1wiLCBbW1wibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHNcIiwgWyRo4oCNX2EgPT4gKG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzID0gJGjigI1fYSldXV1dLFtcIi4vc3RvcmUtdXRpbHMuanNcIiwgW1tcIm1ha2VDdXJyZW50S2V5c0tpdFwiLCBbJGjigI1fYSA9PiAobWFrZUN1cnJlbnRLZXlzS2l0ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNldFN0b3JlTWV0aG9kcz0oXG5qc3NldCxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmNvbnN0e2Fzc2VydFVwZGF0ZU9uQWRkLGFzc2VydFVwZGF0ZU9uRGVsZXRlLGl0ZXJhYmxlS2V5c309XG5tYWtlQ3VycmVudEtleXNLaXQoXG4oKT0+anNzZXQua2V5cygpLFxuKGspPT5qc3NldC5oYXMoayksXG5jb21wYXJlUmFuayxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlLFxua2V5TmFtZSk7XG5cblxuLypcblxuXG4gICAqL1xuY29uc3Qga2V5cz0oa2V5UGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQ/XG5pdGVyYWJsZUtleXM6XG5maWx0ZXJJdGVyYWJsZShpdGVyYWJsZUtleXMsKGspPT5tYXRjaGVzKGssa2V5UGF0dCkpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbi4uLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKFxuanNzZXQsXG5hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxua2V5TmFtZSksXG5cblxua2V5cyxcblxudmFsdWVzOmtleXMsXG5cbnNuYXBzaG90OihrZXlQYXR0PXVuZGVmaW5lZCk9Pm1ha2VDb3B5U2V0KGtleXMoa2V5UGF0dCkpLFxuXG5nZXRTaXplOihrZXlQYXR0PXVuZGVmaW5lZCk9Plxua2V5UGF0dD09PXVuZGVmaW5lZD9qc3NldC5zaXplOlsuLi5rZXlzKGtleVBhdHQpXS5sZW5ndGgsXG5cbmNsZWFyOihrZXlQYXR0PXVuZGVmaW5lZCk9PntcbmlmKGtleVBhdHQ9PT11bmRlZmluZWQpe1xuanNzZXQuY2xlYXIoKTtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIGtleXMoa2V5UGF0dCkpe1xuanNzZXQuZGVsZXRlKGtleSk7XG4gfVxuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlU2V0U3RvcmVNZXRob2RzKG1ha2VTZXRTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJTZXRTdG9yZT0oXG50YWc9J2tleScsXG57a2V5U2hhcGU9dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QganNzZXQ9bmV3IFNldCgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuXG5jb25zdCBhc3NlcnRLZXlPa1RvQWRkPShrZXkpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xuXG5hc3NlcnRTY2FsYXJLZXkoa2V5KTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ3NldFN0b3JlIGtleScpO1xuIH1cbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFNldFN0b3JlIG9mICR7cSh0YWcpfWAse1xuLi4ubWFrZVNldFN0b3JlTWV0aG9kcyhqc3NldCxhc3NlcnRLZXlPa1RvQWRkLHVuZGVmaW5lZCx0YWcpfSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZVNjYWxhclNldFN0b3JlKG1ha2VTY2FsYXJTZXRTdG9yZSk7XG5oYXJkZW4obWFrZVNjYWxhclNldFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VTZXRTdG9yZU1ldGhvZHMiOlsibWFrZVNldFN0b3JlTWV0aG9kcyJdLCJtYWtlU2NhbGFyU2V0U3RvcmUiOlsibWFrZVNjYWxhclNldFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEqRF/XJDQAAyQ0AADUAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIiwibWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxGYXIsYXNzZXJ0UGFzc2FibGUscGFzc1N0eWxlT2YsZ2V0Q29weU1hcEVudHJpZXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4saXNDb3B5TWFwOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjigI1fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjigI1fYSA9PiAocGFzc1N0eWxlT2YgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImdldENvcHlNYXBFbnRyaWVzXCIsIFskaOKAjV9hID0+IChnZXRDb3B5TWFwRW50cmllcyA9ICRo4oCNX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaOKAjV9hID0+IChtdXN0TWF0Y2ggPSAkaOKAjV9hKV1dLFtcImFzc2VydFBhdHRlcm5cIiwgWyRo4oCNX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaOKAjV9hKV1dLFtcImlzQ29weU1hcFwiLCBbJGjigI1fYSA9PiAoaXNDb3B5TWFwID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzPShcbmpzbWFwLFxuYXNzZXJ0S1ZPa1RvQWRkLFxuYXNzZXJ0S1ZPa1RvU2V0LFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5jb25zdCBhc3NlcnRLZXlEb2VzTm90RXhpc3Q9KGtleSk9PlxuIWpzbWFwLmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IGFscmVhZHkgcmVnaXN0ZXJlZDogJHtrZXl9YDtcblxuY29uc3QgYXNzZXJ0S2V5RXhpc3RzPShrZXkpPT5cbmpzbWFwLmhhcyhrZXkpfHxGYWlsIGAke3Eoa2V5TmFtZSl9IG5vdCBmb3VuZDogJHtrZXl9YDtcblxucmV0dXJuIGhhcmRlbih7XG5oYXM6KGtleSk9Pntcbi8vXG4vL1xuLy9cbnJldHVybiBqc21hcC5oYXMoa2V5KTtcbiB9LFxuZ2V0OihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbi8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgKi9qc21hcC5nZXQoa2V5KSk7XG4gfSxcblxuaW5pdDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RG9lc05vdEV4aXN0KGtleSk7XG5hc3NlcnRLVk9rVG9BZGQoa2V5LHZhbHVlKTtcbmpzbWFwLnNldChrZXksdmFsdWUpO1xuIH0sXG5zZXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuYXNzZXJ0S1ZPa1RvU2V0KGtleSx2YWx1ZSk7XG5qc21hcC5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbmlmKGFzc2VydEtleU9rVG9EZWxldGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0S2V5T2tUb0RlbGV0ZShrZXkpO1xuIH1cbmpzbWFwLmRlbGV0ZShrZXkpO1xuIH0sXG5cbmFkZEFsbDooZW50cmllcyk9PntcbmlmKHR5cGVvZiBlbnRyaWVzW1N5bWJvbC5pdGVyYXRvcl0hPT0nZnVuY3Rpb24nKXtcbmlmKE9iamVjdC5pc0Zyb3plbihlbnRyaWVzKSYmaXNDb3B5TWFwKGVudHJpZXMpKXtcbi8vXG5lbnRyaWVzPWdldENvcHlNYXBFbnRyaWVzKGVudHJpZXMpO1xuIH1lbHNle1xuRmFpbCBgcHJvdmlkZWQgZGF0YSBzb3VyY2UgaXMgbm90IGl0ZXJhYmxlOiAke2VudHJpZXN9YDtcbiB9XG4gfVxuZm9yKGNvbnN0W2tleSx2YWx1ZV1vZi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9lbnRyaWVzKXtcbi8vXG5hc3NlcnRLVk9rVG9BZGQoa2V5LHZhbHVlKTtcbmpzbWFwLnNldChrZXksdmFsdWUpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyV2Vha01hcFN0b3JlPShcbnRhZz0na2V5Jyxcbntsb25nTGl2ZWQ9dHJ1ZSxrZXlTaGFwZT11bmRlZmluZWQsdmFsdWVTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc21hcD1uZXcobG9uZ0xpdmVkP1dlYWtNYXA6TWFwKSgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuaWYodmFsdWVTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKHZhbHVlU2hhcGUpO1xuIH1cblxuY29uc3QgYXNzZXJ0S1ZPa1RvU2V0PShfa2V5LHZhbHVlKT0+e1xuLy9cbi8vXG5oYXJkZW4odmFsdWUpO1xuXG5hc3NlcnRQYXNzYWJsZSh2YWx1ZSk7XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaCh2YWx1ZSx2YWx1ZVNoYXBlLCd3ZWFrTWFwU3RvcmUgdmFsdWUnKTtcbiB9XG4gfTtcblxuY29uc3QgYXNzZXJ0S1ZPa1RvQWRkPShrZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xucGFzc1N0eWxlT2Yoa2V5KT09PSdyZW1vdGFibGUnfHxcbkZhaWwgYE9ubHkgcmVtb3RhYmxlcyBjYW4gYmUga2V5cyBvZiBzY2FsYXIgV2Vha01hcFN0b3JlczogJHtrZXl9YDtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ3dlYWtNYXBTdG9yZSBrZXknKTtcbiB9XG5hc3NlcnRLVk9rVG9TZXQoa2V5LHZhbHVlKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFdlYWtNYXBTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKFxuanNtYXAsXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG51bmRlZmluZWQsXG50YWcpfSk7XG5cblxuIH07JGjigI1fb25jZS5tYWtlU2NhbGFyV2Vha01hcFN0b3JlKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMiOlsibWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhcldlYWtNYXBTdG9yZSI6WyJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACt5d6eKCgAAigoAADUAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIiwibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxGYXIscGFzc1N0eWxlT2YsZ2V0Q29weVNldEtleXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4saXNDb3B5U2V0OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjigI1fYSA9PiAoZ2V0Q29weVNldEtleXMgPSAkaOKAjV9hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAobXVzdE1hdGNoID0gJGjigI1fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjigI1fYSldXSxbXCJpc0NvcHlTZXRcIiwgWyRo4oCNX2EgPT4gKGlzQ29weVNldCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlV2Vha1NldFN0b3JlTWV0aG9kcz0oXG5qc3NldCxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmNvbnN0IGFzc2VydEtleUV4aXN0cz0oa2V5KT0+XG5qc3NldC5oYXMoa2V5KXx8RmFpbCBgJHtxKGtleU5hbWUpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5cbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4ganNzZXQuaGFzKGtleSk7XG4gfSxcblxuYWRkOihrZXkpPT57XG5hc3NlcnRLZXlPa1RvQWRkKGtleSk7XG5qc3NldC5hZGQoa2V5KTtcbiB9LFxuZGVsZXRlOihrZXkpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbmlmKGFzc2VydEtleU9rVG9EZWxldGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0S2V5T2tUb0RlbGV0ZShrZXkpO1xuIH1cbmpzc2V0LmRlbGV0ZShrZXkpO1xuIH0sXG5cbmFkZEFsbDooa2V5cyk9PntcbmlmKHR5cGVvZiBrZXlzW1N5bWJvbC5pdGVyYXRvcl0hPT0nZnVuY3Rpb24nKXtcbmlmKE9iamVjdC5pc0Zyb3plbihrZXlzKSYmaXNDb3B5U2V0KGtleXMpKXtcbi8vXG5rZXlzPWdldENvcHlTZXRLZXlzKGtleXMpO1xuIH1lbHNle1xuRmFpbCBgcHJvdmlkZWQgZGF0YSBzb3VyY2UgaXMgbm90IGl0ZXJhYmxlOiAke2tleXN9YDtcbiB9XG4gfVxuZm9yKGNvbnN0IGtleSBvZi8qICAgICAgICAgICAgICAgICAgICAgICova2V5cyl7XG5hc3NlcnRLZXlPa1RvQWRkKGtleSk7XG5qc3NldC5hZGQoa2V5KTtcbiB9XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UubWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMobWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJXZWFrU2V0U3RvcmU9KFxudGFnPSdrZXknLFxue2xvbmdMaXZlZD10cnVlLGtleVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzc2V0PW5ldyhsb25nTGl2ZWQ/V2Vha1NldDpTZXQpKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtleU9rVG9BZGQ9KGtleSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5wYXNzU3R5bGVPZihrZXkpPT09J3JlbW90YWJsZSd8fFxuRmFpbCBgT25seSByZW1vdGFibGVzIGNhbiBiZSBrZXlzIG9mIHNjYWxhciBXZWFrU3RvcmVzOiAke2tleX1gO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnd2Vha1NldFN0b3JlIGtleScpO1xuIH1cbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFdlYWtTZXRTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKGpzc2V0LGFzc2VydEtleU9rVG9BZGQsdW5kZWZpbmVkLHRhZyl9KTtcblxuIH07JGjigI1fb25jZS5tYWtlU2NhbGFyV2Vha1NldFN0b3JlKG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJXZWFrU2V0U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMiOlsibWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhcldlYWtTZXRTdG9yZSI6WyJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAK1WK+LADgAAwA4AAC4AAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbImFwcGVuZFRvU3RvcmVkQXJyYXkiLCJpc0NvcHlNYXAiLCJpc0NvcHlTZXQiLCJtYWtlQXRvbWljUHJvdmlkZXIiLCJtYWtlQ3VycmVudEtleXNLaXQiLCJwcm92aWRlTGF6eSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEZhcixNLG1hdGNoZXM7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJtYXRjaGVzXCIsIFskaOKAjV9hID0+IChtYXRjaGVzID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5U2V0PShzKT0+bWF0Y2hlcyhzLE0uc2V0KCkpO1xuXG4vL1xuLy9cbi8qXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmlzQ29weVNldChpc0NvcHlTZXQpO1xuY29uc3QgICAgICAgIGlzQ29weU1hcD0obSk9Pm1hdGNoZXMobSxNLm1hcCgpKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5pc0NvcHlNYXAoaXNDb3B5TWFwKTtcbmNvbnN0ICAgICAgICBtYWtlQ3VycmVudEtleXNLaXQ9KFxuZ2V0UmF3S2V5cyxcbmNoZWNrSGFzLFxuY29tcGFyZSxcbmFzc2VydE9rVG9BZGQsXG5hc3NlcnRPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmxldCB1cGRhdGVDb3VudD0wO1xubGV0IHNvcnRlZEtleXNNZW1vO1xuXG5jb25zdCBhc3NlcnRVcGRhdGVPbkFkZD0oayx2PXVuZGVmaW5lZCk9PntcbmFzc2VydE9rVG9BZGQoayx2KTtcbnVwZGF0ZUNvdW50Kz0xO1xuc29ydGVkS2V5c01lbW89dW5kZWZpbmVkO1xuIH07XG5cbmNvbnN0IGFzc2VydFVwZGF0ZU9uRGVsZXRlPShrKT0+YXNzZXJ0T2tUb0RlbGV0ZSYmYXNzZXJ0T2tUb0RlbGV0ZShrKTtcblxuY29uc3QgZ2V0U29ydGVkS2V5cz0oKT0+e1xuaWYoc29ydGVkS2V5c01lbW89PT11bmRlZmluZWQpe1xuc29ydGVkS2V5c01lbW89aGFyZGVuKFsuLi5nZXRSYXdLZXlzKCldLnNvcnQoY29tcGFyZSkpO1xuIH1cbnJldHVybiBzb3J0ZWRLZXlzTWVtbztcbiB9O1xuXG5jb25zdCBpdGVyYWJsZUtleXM9RmFyKCdJdGVyYWJsZSBvZiBrZXlzJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgZ2VuZXJhdGlvbj11cGRhdGVDb3VudDtcbmdldFNvcnRlZEtleXMoKTtcbmNvbnN0IGxlbj1zb3J0ZWRLZXlzTWVtby5sZW5ndGg7XG5sZXQgaT0wO1xucmV0dXJuIEZhcignSXRlcmF0b3Igb2Yga2V5cycse1xubmV4dDooKT0+e1xuZ2VuZXJhdGlvbj09PXVwZGF0ZUNvdW50fHxGYWlsIGBTdG9yZSAke3Eoa2V5TmFtZSl9IGN1cnNvciBzdGFsZWA7XG4vL1xuLy9cbmZvcig7Oyl7XG5pZihpPGxlbil7XG5jb25zdCB2YWx1ZT1zb3J0ZWRLZXlzTWVtb1tpXTtcbmkrPTE7XG5pZihjaGVja0hhcyh2YWx1ZSkpe1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH1cbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9XG4gfVxuIH19KTtcblxuIH19KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmFzc2VydFVwZGF0ZU9uQWRkLFxuYXNzZXJ0VXBkYXRlT25EZWxldGUsXG5pdGVyYWJsZUtleXN9KTtcblxuIH07JGjigI1fb25jZS5tYWtlQ3VycmVudEtleXNLaXQobWFrZUN1cnJlbnRLZXlzS2l0KTtcbmhhcmRlbihtYWtlQ3VycmVudEtleXNLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcm92aWRlTGF6eT0obWFwU3RvcmUsa2V5LG1ha2VWYWx1ZSk9PntcbmlmKCFtYXBTdG9yZS5oYXMoa2V5KSl7XG5tYXBTdG9yZS5pbml0KGtleSxtYWtlVmFsdWUoa2V5KSk7XG4gfVxucmV0dXJuIG1hcFN0b3JlLmdldChrZXkpO1xuIH07JGjigI1fb25jZS5wcm92aWRlTGF6eShwcm92aWRlTGF6eSk7XG5oYXJkZW4ocHJvdmlkZUxhenkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQXRvbWljUHJvdmlkZXI9KHN0b3JlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwZW5kaW5nPW5ldyBNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUFzeW5jPShrZXksbWFrZVZhbHVlLGZpbmlzaFZhbHVlKT0+e1xuaWYoc3RvcmUuaGFzKGtleSkpe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShzdG9yZS5nZXQoa2V5KSk7XG4gfVxuaWYoIXBlbmRpbmcuaGFzKGtleSkpe1xuY29uc3QgdmFsUD1tYWtlVmFsdWUoa2V5KS5cbnRoZW4oKHYpPT57XG5zdG9yZS5pbml0KGtleSx2KTtcbnJldHVybiB2O1xuIH0pLlxudGhlbigodik9PntcbmlmKGZpbmlzaFZhbHVlKXtcbnJldHVybiBmaW5pc2hWYWx1ZShrZXksdikudGhlbigoKT0+dik7XG4gfVxucmV0dXJuIHY7XG4gfSkuXG5maW5hbGx5KCgpPT57XG5wZW5kaW5nLmRlbGV0ZShrZXkpO1xuIH0pO1xucGVuZGluZy5zZXQoa2V5LHZhbFApO1xuIH1cbmNvbnN0IHZhbFA9cGVuZGluZy5nZXQoa2V5KTtcbmFzc2VydCh2YWxQKTtcbnJldHVybiB2YWxQO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe3Byb3ZpZGVBc3luY30pO1xuIH07JGjigI1fb25jZS5tYWtlQXRvbWljUHJvdmlkZXIobWFrZUF0b21pY1Byb3ZpZGVyKTtcbmhhcmRlbihtYWtlQXRvbWljUHJvdmlkZXIpO1xuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFwcGVuZFRvU3RvcmVkQXJyYXk9KG1hcFN0b3JlLGtleSxpdGVtKT0+e1xuaWYobWFwU3RvcmUuaGFzKGtleSkpe1xuY29uc3QgZXh0YW50PW1hcFN0b3JlLmdldChrZXkpO1xubWFwU3RvcmUuc2V0KGtleSxoYXJkZW4oWy4uLmV4dGFudCxpdGVtXSkpO1xuIH1lbHNle1xubWFwU3RvcmUuaW5pdChrZXksaGFyZGVuKFtpdGVtXSkpO1xuIH1cbiB9OyRo4oCNX29uY2UuYXBwZW5kVG9TdG9yZWRBcnJheShhcHBlbmRUb1N0b3JlZEFycmF5KTtcbmhhcmRlbihhcHBlbmRUb1N0b3JlZEFycmF5KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzQ29weVNldCI6WyJpc0NvcHlTZXQiXSwiaXNDb3B5TWFwIjpbImlzQ29weU1hcCJdLCJtYWtlQ3VycmVudEtleXNLaXQiOlsibWFrZUN1cnJlbnRLZXlzS2l0Il0sInByb3ZpZGVMYXp5IjpbInByb3ZpZGVMYXp5Il0sIm1ha2VBdG9taWNQcm92aWRlciI6WyJtYWtlQXRvbWljUHJvdmlkZXIiXSwiYXBwZW5kVG9TdG9yZWRBcnJheSI6WyJhcHBlbmRUb1N0b3JlZEFycmF5Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAACEAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh0Bc3LIWAACyFgAAKAAAAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9leG8tdXRpbHMuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9zdG9yZSIsIi4vdmF0LWRhdGEtYmluZGluZ3MuanMiXSwiZXhwb3J0cyI6WyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiLCJkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3MiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJpZ25vcmVDb250ZXh0IiwibWFrZUV4b1V0aWxzIiwicHJlcGFyZUV4byIsInByZXBhcmVFeG9DbGFzcyIsInByZXBhcmVFeG9DbGFzc0tpdCIsInByZXBhcmVLaW5kIiwicHJlcGFyZUtpbmRNdWx0aSIsInByZXBhcmVTaW5nbGV0b24iLCJwcm92aWRlS2luZEhhbmRsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaW5pdEVtcHR5LHByb3ZpZGUsZ2xvYmFsVmF0RGF0YTskaOKAjV9pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJpbml0RW1wdHlcIiwgWyRo4oCNX2EgPT4gKGluaXRFbXB0eSA9ICRo4oCNX2EpXV1dXSxbXCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzXCIsIFtbXCJwcm92aWRlXCIsIFskaOKAjV9hID0+IChwcm92aWRlID0gJGjigI1fYSldXSxbXCJWYXREYXRhXCIsIFskaOKAjV9hID0+IChnbG9iYWxWYXREYXRhID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vL1xuLypcblxuICovXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaWdub3JlQ29udGV4dD1cbihmbik9PlxuKF9jb250ZXh0LC4uLmFyZ3MpPT5cbmZuKC4uLmFyZ3MpOyRo4oCNX29uY2UuaWdub3JlQ29udGV4dChpZ25vcmVDb250ZXh0KTtcbmhhcmRlbihpZ25vcmVDb250ZXh0KTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZUV4b1V0aWxzPShWYXREYXRhKT0+e1xuY29uc3R7XG5kZWZpbmVLaW5kLFxuZGVmaW5lS2luZE11bHRpLFxuZGVmaW5lRHVyYWJsZUtpbmQsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpLFxubWFrZUtpbmRIYW5kbGV9PVxuVmF0RGF0YTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVLaW5kSGFuZGxlPShiYWdnYWdlLGtpbmROYW1lKT0+XG5wcm92aWRlKGJhZ2dhZ2UsIGAke2tpbmROYW1lfV9raW5kSGFuZGxlYCwoKT0+bWFrZUtpbmRIYW5kbGUoa2luZE5hbWUpKTtcbmhhcmRlbihwcm92aWRlS2luZEhhbmRsZSk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVLaW5kPShcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmluaXQsXG5iZWhhdmlvcixcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVLaW5kKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVLaW5kKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZUtpbmRNdWx0aT0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVLaW5kTXVsdGkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZVZpcnR1YWxFeG9DbGFzcz0odGFnLGludGVyZmFjZUd1YXJkLGluaXQsbWV0aG9kcyxvcHRpb25zKT0+XG4vL1xuZGVmaW5lS2luZCh0YWcsaW5pdCxtZXRob2RzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmR9KTtcblxuaGFyZGVuKGRlZmluZVZpcnR1YWxFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0PShcbnRhZyxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpPT5cblxuLy9cbmRlZmluZUtpbmRNdWx0aSh0YWcsaW5pdCxmYWNldHMse1xuLi4ub3B0aW9ucyxcbnRoaXNmdWxNZXRob2RzOnRydWUsXG5pbnRlcmZhY2VHdWFyZEtpdH0pO1xuXG5oYXJkZW4oZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWZpbmVEdXJhYmxlRXhvQ2xhc3M9KFxua2luZEhhbmRsZSxcbmludGVyZmFjZUd1YXJkLFxuaW5pdCxcbm1ldGhvZHMsXG5vcHRpb25zKT0+XG5cbi8vXG5kZWZpbmVEdXJhYmxlS2luZChraW5kSGFuZGxlLGluaXQsbWV0aG9kcyx7XG4uLi5vcHRpb25zLFxudGhpc2Z1bE1ldGhvZHM6dHJ1ZSxcbmludGVyZmFjZUd1YXJkfSk7XG5cbmhhcmRlbihkZWZpbmVEdXJhYmxlRXhvQ2xhc3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdD0oXG5raW5kSGFuZGxlLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxuZmFjZXRzLFxub3B0aW9ucyk9PlxuXG4vL1xuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aShraW5kSGFuZGxlLGluaXQsZmFjZXRzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmRLaXR9KTtcblxuaGFyZGVuKGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlRXhvQ2xhc3M9KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVFeG9DbGFzcyhcbnByb3ZpZGVLaW5kSGFuZGxlKGJhZ2dhZ2Usa2luZE5hbWUpLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUV4b0NsYXNzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG9DbGFzc0tpdD0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5mYWNldHMsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQoXG5wcm92aWRlS2luZEhhbmRsZShiYWdnYWdlLGtpbmROYW1lKSxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG89KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5tZXRob2RzLFxub3B0aW9ucz11bmRlZmluZWQpPT5cbntcbmNvbnN0IG1ha2VTaW5nbGV0b249cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0RW1wdHksXG5tZXRob2RzLFxub3B0aW9ucyk7XG5cblxucmV0dXJuIHByb3ZpZGUoYmFnZ2FnZSwgYCR7a2luZE5hbWV9X3NpbmdsZXRvbmAsKCk9Pm1ha2VTaW5nbGV0b24oKSk7XG4gfTtcbmhhcmRlbihwcmVwYXJlRXhvKTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVTaW5nbGV0b249KGJhZ2dhZ2Usa2luZE5hbWUsbWV0aG9kcyxvcHRpb25zPXVuZGVmaW5lZCk9PlxucHJlcGFyZUV4byhiYWdnYWdlLGtpbmROYW1lLHVuZGVmaW5lZCxtZXRob2RzLG9wdGlvbnMpO1xuaGFyZGVuKHByZXBhcmVTaW5nbGV0b24pO1xuXG5yZXR1cm4gaGFyZGVuKHtcbmRlZmluZVZpcnR1YWxFeG9DbGFzcyxcbmRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCxcbmRlZmluZUR1cmFibGVFeG9DbGFzcyxcbmRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG9DbGFzcyxcbnByZXBhcmVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG8sXG5cbnByZXBhcmVTaW5nbGV0b24sXG5wcm92aWRlS2luZEhhbmRsZSxcbnByZXBhcmVLaW5kLFxucHJlcGFyZUtpbmRNdWx0aX0pO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VFeG9VdGlscyhtYWtlRXhvVXRpbHMpO1xuXG5jb25zdCBnbG9iYWxFeG9VdGlscz1tYWtlRXhvVXRpbHMoZ2xvYmFsVmF0RGF0YSk7XG5cbmNvbnN0ICAgICAgIHtcbmRlZmluZVZpcnR1YWxFeG9DbGFzcyxcbmRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCxcbmRlZmluZUR1cmFibGVFeG9DbGFzcyxcbmRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG9DbGFzcyxcbnByZXBhcmVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG8sXG5wcmVwYXJlU2luZ2xldG9ufT1cbmdsb2JhbEV4b1V0aWxzO1xuXG4vKlxuXG4gKi8kaOKAjV9vbmNlLmRlZmluZVZpcnR1YWxFeG9DbGFzcyhkZWZpbmVWaXJ0dWFsRXhvQ2xhc3MpOyRo4oCNX29uY2UuZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KGRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCk7JGjigI1fb25jZS5kZWZpbmVEdXJhYmxlRXhvQ2xhc3MoZGVmaW5lRHVyYWJsZUV4b0NsYXNzKTskaOKAjV9vbmNlLmRlZmluZUR1cmFibGVFeG9DbGFzc0tpdChkZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQpOyRo4oCNX29uY2UucHJlcGFyZUV4b0NsYXNzKHByZXBhcmVFeG9DbGFzcyk7JGjigI1fb25jZS5wcmVwYXJlRXhvQ2xhc3NLaXQocHJlcGFyZUV4b0NsYXNzS2l0KTskaOKAjV9vbmNlLnByZXBhcmVFeG8ocHJlcGFyZUV4byk7JGjigI1fb25jZS5wcmVwYXJlU2luZ2xldG9uKHByZXBhcmVTaW5nbGV0b24pO1xuY29uc3QgICAgICAge3Byb3ZpZGVLaW5kSGFuZGxlLHByZXBhcmVLaW5kLHByZXBhcmVLaW5kTXVsdGl9PVxuZ2xvYmFsRXhvVXRpbHM7JGjigI1fb25jZS5wcm92aWRlS2luZEhhbmRsZShwcm92aWRlS2luZEhhbmRsZSk7JGjigI1fb25jZS5wcmVwYXJlS2luZChwcmVwYXJlS2luZCk7JGjigI1fb25jZS5wcmVwYXJlS2luZE11bHRpKHByZXBhcmVLaW5kTXVsdGkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaWdub3JlQ29udGV4dCI6WyJpZ25vcmVDb250ZXh0Il0sIm1ha2VFeG9VdGlscyI6WyJtYWtlRXhvVXRpbHMiXSwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIjpbImRlZmluZVZpcnR1YWxFeG9DbGFzcyJdLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0Il0sImRlZmluZUR1cmFibGVFeG9DbGFzcyI6WyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiXSwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IjpbImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCJdLCJwcmVwYXJlRXhvQ2xhc3MiOlsicHJlcGFyZUV4b0NsYXNzIl0sInByZXBhcmVFeG9DbGFzc0tpdCI6WyJwcmVwYXJlRXhvQ2xhc3NLaXQiXSwicHJlcGFyZUV4byI6WyJwcmVwYXJlRXhvIl0sInByZXBhcmVTaW5nbGV0b24iOlsicHJlcGFyZVNpbmdsZXRvbiJdLCJwcm92aWRlS2luZEhhbmRsZSI6WyJwcm92aWRlS2luZEhhbmRsZSJdLCJwcmVwYXJlS2luZCI6WyJwcmVwYXJlS2luZCJdLCJwcmVwYXJlS2luZE11bHRpIjpbInByZXBhcmVLaW5kTXVsdGkiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA3XOiDq0IAACtCAAAJAAAAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIiwiLi92YXQtZGF0YS1iaW5kaW5ncy5qcyIsIi4vZXhvLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwibWFrZVNjYWxhck1hcFN0b3JlIiwibWFrZVNjYWxhck1hcFN0b3JlIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW11dLFtcIi4vdmF0LWRhdGEtYmluZGluZ3MuanNcIiwgW11dLFtcIi4vZXhvLXV0aWxzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGFnb3JpYy9zdG9yZSI6W1siTSIsIk0iXSxbIm1ha2VTY2FsYXJNYXBTdG9yZSIsIm1ha2VTY2FsYXJNYXBTdG9yZSJdLFsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSIsIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJTZXRTdG9yZSIsIm1ha2VTY2FsYXJTZXRTdG9yZSJdLFsibWFrZVNjYWxhcldlYWtTZXRTdG9yZSIsIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiXV0sIi4vdmF0LWRhdGEtYmluZGluZ3MuanMiOltbIm1ha2VLaW5kSGFuZGxlIiwibWFrZUtpbmRIYW5kbGUiXSxbInByb3ZpZGVQcm9taXNlV2F0Y2hlciIsInByb3ZpZGVQcm9taXNlV2F0Y2hlciJdLFsid2F0Y2hQcm9taXNlIiwid2F0Y2hQcm9taXNlIl0sWyJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIl0sWyJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiXSxbIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIl0sWyJjYW5CZUR1cmFibGUiLCJjYW5CZUR1cmFibGUiXSxbInBpY2tGYWNldCIsInBpY2tGYWNldCJdLFsicGFydGlhbEFzc2lnbiIsInBhcnRpYWxBc3NpZ24iXSxbInByb3ZpZGUiLCJwcm92aWRlIl0sWyJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVNYXBTdG9yZSJdLFsicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiLCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSJdLFsicHJvdmlkZUR1cmFibGVTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiXSxbInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiXSxbImRlZmluZUtpbmQiLCJkZWZpbmVLaW5kIl0sWyJkZWZpbmVLaW5kTXVsdGkiLCJkZWZpbmVLaW5kTXVsdGkiXSxbImRlZmluZUR1cmFibGVLaW5kIiwiZGVmaW5lRHVyYWJsZUtpbmQiXSxbImRlZmluZUR1cmFibGVLaW5kTXVsdGkiLCJkZWZpbmVEdXJhYmxlS2luZE11bHRpIl1dLCIuL2V4by11dGlscy5qcyI6W1siZGVmaW5lVmlydHVhbEV4b0NsYXNzIiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIl0sWyJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiXSxbImRlZmluZUR1cmFibGVFeG9DbGFzcyIsImRlZmluZUR1cmFibGVFeG9DbGFzcyJdLFsiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IiwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0Il0sWyJwcmVwYXJlRXhvQ2xhc3MiLCJwcmVwYXJlRXhvQ2xhc3MiXSxbInByZXBhcmVFeG9DbGFzc0tpdCIsInByZXBhcmVFeG9DbGFzc0tpdCJdLFsicHJlcGFyZUV4byIsInByZXBhcmVFeG8iXSxbInByZXBhcmVTaW5nbGV0b24iLCJwcmVwYXJlU2luZ2xldG9uIl0sWyJpZ25vcmVDb250ZXh0IiwiaWdub3JlQ29udGV4dCJdLFsicHJvdmlkZUtpbmRIYW5kbGUiLCJwcm92aWRlS2luZEhhbmRsZSJdLFsicHJlcGFyZUtpbmQiLCJwcmVwYXJlS2luZCJdLFsicHJlcGFyZUtpbmRNdWx0aSIsInByZXBhcmVLaW5kTXVsdGkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGWWpiTKFgAAyhYAADAAAABAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvdmF0LWRhdGEtYmluZGluZ3MuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbIlZhdERhdGEiLCJjYW5CZUR1cmFibGUiLCJkZWZpbmVEdXJhYmxlS2luZCIsImRlZmluZUR1cmFibGVLaW5kTXVsdGkiLCJkZWZpbmVLaW5kIiwiZGVmaW5lS2luZE11bHRpIiwibWFrZUtpbmRIYW5kbGUiLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSIsIm1ha2VTdG9yZVV0aWxzIiwicGFydGlhbEFzc2lnbiIsInBpY2tGYWNldCIsInByb3ZpZGUiLCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiLCJ3YXRjaFByb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscHJvdmlkZUxhenk7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcInByb3ZpZGVMYXp5XCIsIFskaOKAjV9hID0+IChwcm92aWRlTGF6eSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IFZhdERhdGFHbG9iYWw7XG5pZignVmF0RGF0YSdpbiBnbG9iYWxUaGlzKXtcbmdsb2JhbFRoaXMuVmF0RGF0YXx8RmFpbCBgVmF0RGF0YSBkZWZpbmVkIGluIGdsb2JhbCBhcyBudWxsIG9yIHVuZGVmaW5lZGA7XG4vL1xuVmF0RGF0YUdsb2JhbD0vKiAgICAgICAgICAgICAgKi9nbG9iYWxUaGlzLlZhdERhdGE7XG4gfWVsc2V7XG4vL1xuLy9cbi8vXG5jb25zdCB1bmF2YWlsYWJsZT0oKT0+RmFpbCBgVmF0RGF0YSB1bmF2YWlsYWJsZWA7XG5WYXREYXRhR2xvYmFsPXtcbmRlZmluZUtpbmQ6dW5hdmFpbGFibGUsXG5kZWZpbmVLaW5kTXVsdGk6dW5hdmFpbGFibGUsXG5kZWZpbmVEdXJhYmxlS2luZDp1bmF2YWlsYWJsZSxcbmRlZmluZUR1cmFibGVLaW5kTXVsdGk6dW5hdmFpbGFibGUsXG5tYWtlS2luZEhhbmRsZTp1bmF2YWlsYWJsZSxcbnByb3ZpZGVQcm9taXNlV2F0Y2hlcjp1bmF2YWlsYWJsZSxcbndhdGNoUHJvbWlzZTp1bmF2YWlsYWJsZSxcbm1ha2VTY2FsYXJCaWdNYXBTdG9yZTp1bmF2YWlsYWJsZSxcbm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmU6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnU2V0U3RvcmU6dW5hdmFpbGFibGUsXG5tYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlOnVuYXZhaWxhYmxlLFxuY2FuQmVEdXJhYmxlOnVuYXZhaWxhYmxlfTtcblxuIH1cblxuY29uc3QgVmF0RGF0YUV4cG9ydD1WYXREYXRhR2xvYmFsOyRo4oCNX29uY2UuVmF0RGF0YUV4cG9ydChWYXREYXRhRXhwb3J0KTtcblxuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgIHtcbmRlZmluZUtpbmQsXG5kZWZpbmVLaW5kTXVsdGksXG5kZWZpbmVEdXJhYmxlS2luZCxcbmRlZmluZUR1cmFibGVLaW5kTXVsdGl9PVxuVmF0RGF0YUdsb2JhbDskaOKAjV9vbmNlLmRlZmluZUtpbmQoZGVmaW5lS2luZCk7JGjigI1fb25jZS5kZWZpbmVLaW5kTXVsdGkoZGVmaW5lS2luZE11bHRpKTskaOKAjV9vbmNlLmRlZmluZUR1cmFibGVLaW5kKGRlZmluZUR1cmFibGVLaW5kKTskaOKAjV9vbmNlLmRlZmluZUR1cmFibGVLaW5kTXVsdGkoZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSk7XG5cbmNvbnN0ICAgICAgIHtcbm1ha2VLaW5kSGFuZGxlLFxucHJvdmlkZVByb21pc2VXYXRjaGVyLFxud2F0Y2hQcm9taXNlLFxubWFrZVNjYWxhckJpZ01hcFN0b3JlLFxubWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSxcbm1ha2VTY2FsYXJCaWdTZXRTdG9yZSxcbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUsXG5jYW5CZUR1cmFibGV9PVxuVmF0RGF0YUdsb2JhbDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5tYWtlS2luZEhhbmRsZShtYWtlS2luZEhhbmRsZSk7JGjigI1fb25jZS5wcm92aWRlUHJvbWlzZVdhdGNoZXIocHJvdmlkZVByb21pc2VXYXRjaGVyKTskaOKAjV9vbmNlLndhdGNoUHJvbWlzZSh3YXRjaFByb21pc2UpOyRo4oCNX29uY2UubWFrZVNjYWxhckJpZ01hcFN0b3JlKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSk7JGjigI1fb25jZS5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKG1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUpOyRo4oCNX29uY2UubWFrZVNjYWxhckJpZ1NldFN0b3JlKG1ha2VTY2FsYXJCaWdTZXRTdG9yZSk7JGjigI1fb25jZS5tYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlKG1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUpOyRo4oCNX29uY2UuY2FuQmVEdXJhYmxlKGNhbkJlRHVyYWJsZSk7XG5jb25zdCAgICAgICAgcGlja0ZhY2V0PVxuKG1ha2VyLGZhY2V0TmFtZSk9PlxuKC4uLmFyZ3MpPT5cbm1ha2VyKC4uLmFyZ3MpW2ZhY2V0TmFtZV07JGjigI1fb25jZS5waWNrRmFjZXQocGlja0ZhY2V0KTtcbmhhcmRlbihwaWNrRmFjZXQpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFydGlhbEFzc2lnbj0odGFyZ2V0LHNvdXJjZSk9Pntcbk9iamVjdC5hc3NpZ24odGFyZ2V0LHNvdXJjZSk7XG4gfTskaOKAjV9vbmNlLnBhcnRpYWxBc3NpZ24ocGFydGlhbEFzc2lnbik7XG5oYXJkZW4ocGFydGlhbEFzc2lnbik7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCAgICAgICAgcHJvdmlkZT1cbi8vXG4vKlxuXG5cblxuXG5cbiAgICovcHJvdmlkZUxhenk7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjigI1fb25jZS5wcm92aWRlKHByb3ZpZGUpO1xuY29uc3QgICAgICAgIG1ha2VTdG9yZVV0aWxzPShWYXREYXRhKT0+e1xuY29uc3R7XG4vL1xubWFrZVNjYWxhckJpZ01hcFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUsXG4vL1xubWFrZVNjYWxhckJpZ1NldFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmV9PVxuVmF0RGF0YTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZU1hcFN0b3JlPShiYWdnYWdlLG5hbWUsb3B0aW9ucz17fSk9PlxucHJvdmlkZShiYWdnYWdlLG5hbWUsKCk9PlxubWFrZVNjYWxhckJpZ01hcFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVNYXBTdG9yZSk7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUpO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlU2V0U3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnU2V0U3RvcmUobmFtZSx7ZHVyYWJsZTp0cnVlLC4uLm9wdGlvbnN9KSk7XG5cbmhhcmRlbihwcm92aWRlRHVyYWJsZVNldFN0b3JlKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZT0oYmFnZ2FnZSxuYW1lLG9wdGlvbnM9e30pPT5cbnByb3ZpZGUoYmFnZ2FnZSxuYW1lLCgpPT5cbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUobmFtZSx7ZHVyYWJsZTp0cnVlLC4uLm9wdGlvbnN9KSk7XG5cbmhhcmRlbihwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSk7XG5cbnJldHVybiBoYXJkZW4oe1xucHJvdmlkZUR1cmFibGVNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVTZXRTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlfSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZVN0b3JlVXRpbHMobWFrZVN0b3JlVXRpbHMpO1xuXG5jb25zdCBnbG9iYWxTdG9yZVV0aWxzPW1ha2VTdG9yZVV0aWxzKFZhdERhdGFHbG9iYWwpO1xuY29uc3QgICAgICAge1xucHJvdmlkZUR1cmFibGVNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVTZXRTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlfT1cbmdsb2JhbFN0b3JlVXRpbHM7JGjigI1fb25jZS5wcm92aWRlRHVyYWJsZU1hcFN0b3JlKHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUpOyRo4oCNX29uY2UucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUpOyRo4oCNX29uY2UucHJvdmlkZUR1cmFibGVTZXRTdG9yZShwcm92aWRlRHVyYWJsZVNldFN0b3JlKTskaOKAjV9vbmNlLnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlKHByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlZhdERhdGEiOlsiVmF0RGF0YUV4cG9ydCJdLCJkZWZpbmVLaW5kIjpbImRlZmluZUtpbmQiXSwiZGVmaW5lS2luZE11bHRpIjpbImRlZmluZUtpbmRNdWx0aSJdLCJkZWZpbmVEdXJhYmxlS2luZCI6WyJkZWZpbmVEdXJhYmxlS2luZCJdLCJkZWZpbmVEdXJhYmxlS2luZE11bHRpIjpbImRlZmluZUR1cmFibGVLaW5kTXVsdGkiXSwibWFrZUtpbmRIYW5kbGUiOlsibWFrZUtpbmRIYW5kbGUiXSwicHJvdmlkZVByb21pc2VXYXRjaGVyIjpbInByb3ZpZGVQcm9taXNlV2F0Y2hlciJdLCJ3YXRjaFByb21pc2UiOlsid2F0Y2hQcm9taXNlIl0sIm1ha2VTY2FsYXJCaWdNYXBTdG9yZSI6WyJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiXSwibWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSI6WyJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIl0sIm1ha2VTY2FsYXJCaWdTZXRTdG9yZSI6WyJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiXSwibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSI6WyJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIl0sImNhbkJlRHVyYWJsZSI6WyJjYW5CZUR1cmFibGUiXSwicGlja0ZhY2V0IjpbInBpY2tGYWNldCJdLCJwYXJ0aWFsQXNzaWduIjpbInBhcnRpYWxBc3NpZ24iXSwicHJvdmlkZSI6WyJwcm92aWRlIl0sIm1ha2VTdG9yZVV0aWxzIjpbIm1ha2VTdG9yZVV0aWxzIl0sInByb3ZpZGVEdXJhYmxlTWFwU3RvcmUiOlsicHJvdmlkZUR1cmFibGVNYXBTdG9yZSJdLCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSI6WyJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSJdLCJwcm92aWRlRHVyYWJsZVNldFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiXSwicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiOlsicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAALJUcSUURAABFEQAAHwAAAEBhZ29yaWMvdmF0cy12MC4xNS4xL3NyYy9jcmMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIkNSQyIsImNyYzEiLCJjcmMxMCIsImNyYzE2IiwiY3JjMjQiLCJjcmMzMiIsImNyYzMyYyIsImNyYzYiLCJjcmM4IiwibW9kZWxzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuXG4gKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgZW5jb2Rlcj1uZXcgVGV4dEVuY29kZXIoKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuZnVuY3Rpb24gY29udmVydChkYXRhKXtcbmlmKHR5cGVvZiBkYXRhPT09J251bWJlcicpe1xuY29uc3QgYnl0ZXM9W107XG4vL1xuLy9cbndoaWxlKGRhdGE+MHx8Ynl0ZXMubGVuZ3RoPDQpe1xuYnl0ZXMudW5zaGlmdChkYXRhJTI1Nik7XG5kYXRhPU1hdGguZmxvb3IoZGF0YS8yNTYpO1xuIH1cbnJldHVybiBuZXcgVWludDhBcnJheShieXRlcyk7XG4gfWVsc2UgaWYodHlwZW9mIGRhdGE9PT0nc3RyaW5nJyl7XG5yZXR1cm4gZW5jb2Rlci5lbmNvZGUoZGF0YSk7XG4gfWVsc2UgaWYoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKXtcbnJldHVybiBuZXcgVWludDhBcnJheShkYXRhLmJ1ZmZlcixkYXRhLmJ5dGVPZmZzZXQsZGF0YS5ieXRlTGVuZ3RoKTtcbiB9ZWxzZSBpZihkYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe1xucmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEpO1xuIH1cbnRocm93IFR5cGVFcnJvcihcbiBgY3JjIHJlcXVpcmVzIDMyIGJpdCBudW1iZXIsIGEgc3RyaW5nIG9yIFR5cGVkQXJyYXkgZm9yIGlucHV0YCk7XG5cbiB9XG5cbi8qXG5cblxuICovXG5mdW5jdGlvbiBtaXJyb3IoZGF0YSx3aWR0aCl7XG5sZXQgcmVzPTA7XG5mb3IobGV0IGk9MDtpPHdpZHRoO2krPTEpe1xucmVzPXJlczw8MXxkYXRhJjE7XG5kYXRhPj49MTtcbiB9XG5yZXR1cm4gcmVzO1xuIH1cblxuY2xhc3MgICAgICAgIENSQ3tcbi8qXG5cblxuXG5cblxuICAgKi9cbiAgICAgICAgICAgY29uc3RydWN0b3Iod2lkdGgscG9seSx4b3JJbix4b3JPdXQscmVmbGVjdCl7XG50aGlzLndpZHRoPXdpZHRoO1xudGhpcy5wb2x5PXBvbHk7XG50aGlzLnhvckluPXhvckluO1xudGhpcy5yZWZsZWN0ZWRYb3JJbj1taXJyb3IoeG9ySW4sd2lkdGgpO1xudGhpcy54b3JPdXQ9eG9yT3V0O1xudGhpcy5yZWZsZWN0PXJlZmxlY3Q7XG50aGlzLm1zYk1hc2s9MTw8dGhpcy53aWR0aC0xO1xudGhpcy5tYXNrPXRoaXMubXNiTWFzay0xPDwxfDE7XG50aGlzLmNyY1NoaWZ0PXRoaXMud2lkdGg8OD84LXRoaXMud2lkdGg6MDtcbnRoaXMuc2hpZnRlZFhvckluPXRoaXMueG9ySW48PHRoaXMuY3JjU2hpZnQ7XG5cbmNvbnN0IHRhYmxlPXRoaXMuZ2VuVGFibGUoKTtcbnRoaXMudGFibGU9dGFibGU7XG5cbmlmKHRoaXMud2lkdGg9PT04JiYhdGhpcy54b3JJbiYmIXRoaXMueG9yT3V0JiYhdGhpcy5yZWZsZWN0KXtcbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbnRoaXMuY2FsY3VsYXRlPWZ1bmN0aW9uIGNhbGN1bGF0ZShkYXRhKXtcbmNvbnN0IGJ1ZmZlcj1jb252ZXJ0KGRhdGEpO1xubGV0IGNyYz0wO1xuZm9yKGxldCBpPTA7aTxidWZmZXIubGVuZ3RoO2krPTEpe1xuY3JjPXRhYmxlW2NyY15idWZmZXJbaV1dO1xuIH1cbnJldHVybiBjcmM7XG4gfTtcbiB9XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICBjYWxjdWxhdGUoZGF0YSl7XG5jb25zdCBidWZmZXI9Y29udmVydChkYXRhKTtcbmxldCBjcmM7XG5jb25zdHt0YWJsZSx3aWR0aCxjcmNTaGlmdCxtYXNrfT10aGlzO1xuaWYodGhpcy5yZWZsZWN0KXtcbmNyYz10aGlzLnJlZmxlY3RlZFhvckluO1xuZm9yKGxldCBpPTA7aTxidWZmZXIubGVuZ3RoO2krPTEpe1xuY29uc3QgYnl0ZT1idWZmZXJbaV07XG5jcmM9KHRhYmxlWyhjcmNeYnl0ZSkmMHhmZl1eY3JjPj4+OCkmbWFzaztcbiB9XG4gfWVsc2V7XG5jcmM9dGhpcy5zaGlmdGVkWG9ySW47XG5mb3IobGV0IGk9MDtpPGJ1ZmZlci5sZW5ndGg7aSs9MSl7XG5jcmM9XG50YWJsZVsoY3JjPj53aWR0aC04K2NyY1NoaWZ0XmJ1ZmZlcltpXSkmMHhmZl08PFxuY3JjU2hpZnReXG5jcmM8PDgtY3JjU2hpZnQmbWFzazw8Y3JjU2hpZnQ7XG4gfVxuY3JjPj49Y3JjU2hpZnQ7XG4gfVxuY3JjXj10aGlzLnhvck91dDtcbnJldHVybiBjcmM+Pj4wO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZU5vVGFibGUoZGF0YSl7XG5jb25zdCBidWZmZXI9Y29udmVydChkYXRhKTtcbmxldCBjcmM9dGhpcy54b3JJbjtcbmZvcihsZXQgaT0wO2k8YnVmZmVyLmxlbmd0aDtpKz0xKXtcbmxldCBvY3RldD1idWZmZXJbaV07XG5pZih0aGlzLnJlZmxlY3Qpb2N0ZXQ9bWlycm9yKG9jdGV0LDgpO1xuZm9yKGxldCBqPTA7ajw4O2orPTEpe1xubGV0IHRvcGJpdD1jcmMmdGhpcy5tc2JNYXNrO1xuaWYob2N0ZXQmMHg4MD4+ail0b3BiaXRePXRoaXMubXNiTWFzaztcbmNyYzw8PTE7XG5pZih0b3BiaXQpY3JjXj10aGlzLnBvbHk7XG4gfVxuY3JjJj10aGlzLm1hc2s7XG4gfVxuaWYodGhpcy5yZWZsZWN0KWNyYz1taXJyb3IoY3JjLHRoaXMud2lkdGgpO1xuY3JjXj10aGlzLnhvck91dDtcbnJldHVybiBjcmM+Pj4wO1xuIH1cblxuICAgICAgICBnZW5UYWJsZSgpe1xuY29uc3QgdGFibGVMZW5ndGg9MjU2O1xuY29uc3QgdGFibGU9W107XG5mb3IobGV0IGk9MDtpPHRhYmxlTGVuZ3RoO2krPTEpe1xubGV0IHJlZz1pO1xuaWYodGhpcy5yZWZsZWN0KXJlZz1taXJyb3IocmVnLDgpO1xucmVnPDw9dGhpcy53aWR0aC04K3RoaXMuY3JjU2hpZnQ7XG5mb3IobGV0IGo9MDtqPDg7ais9MSl7XG5pZigocmVnJnRoaXMubXNiTWFzazw8dGhpcy5jcmNTaGlmdCkhPT0wKXtcbnJlZzw8PTE7XG5yZWdePXRoaXMucG9seTw8dGhpcy5jcmNTaGlmdDtcbiB9ZWxzZXtcbnJlZzw8PTE7XG4gfVxuIH1cbmlmKHRoaXMucmVmbGVjdClcbnJlZz1taXJyb3IocmVnPj50aGlzLmNyY1NoaWZ0LHRoaXMud2lkdGgpPDx0aGlzLmNyY1NoaWZ0O1xucmVnPXJlZz4+dGhpcy5jcmNTaGlmdCZ0aGlzLm1hc2s7XG50YWJsZVtpXT1yZWc+Pj4wO1xuIH1cbnJldHVybiBuZXcgSW50MzJBcnJheSh0YWJsZSk7XG4gfX0kaOKAjV9vbmNlLiBDUkMoQ1JDKTtcblxuXG5jb25zdCAgICAgICAgY3JjMT1uZXcgQ1JDKDEsMHgwMSwweDAwLDB4MDAsZmFsc2UpOyRo4oCNX29uY2UuY3JjMShjcmMxKTtcbmNvbnN0ICAgICAgICBjcmM2PW5ldyBDUkMoNiwweDJmLDB4MDAsMHgwMCxmYWxzZSk7JGjigI1fb25jZS5jcmM2KGNyYzYpO1xuY29uc3QgICAgICAgIGNyYzg9bmV3IENSQyg4LDB4MDcsMHgwMCwweDAwLGZhbHNlKTskaOKAjV9vbmNlLmNyYzgoY3JjOCk7XG5jb25zdCAgICAgICAgY3JjMTA9bmV3IENSQygxMCwweDIzMywweDAwMDAsMHgwMDAwLGZhbHNlKTskaOKAjV9vbmNlLmNyYzEwKGNyYzEwKTtcbmNvbnN0ICAgICAgICBjcmMxNj1uZXcgQ1JDKDE2LDB4ODAwNSwweDAwMDAsMHgwMDAwLHRydWUpOyRo4oCNX29uY2UuY3JjMTYoY3JjMTYpO1xuY29uc3QgICAgICAgIGNyYzI0PW5ldyBDUkMoMjQsMHg4NjRjZmIsMHhiNzA0Y2UsMHgwMDAwMDAsZmFsc2UpOyRo4oCNX29uY2UuY3JjMjQoY3JjMjQpO1xuY29uc3QgICAgICAgIGNyYzMyPW5ldyBDUkMoMzIsMHgwNGMxMWRiNywweGZmZmZmZmZmLDB4ZmZmZmZmZmYsdHJ1ZSk7JGjigI1fb25jZS5jcmMzMihjcmMzMik7XG5jb25zdCAgICAgICAgY3JjMzJjPW5ldyBDUkMoMzIsMHgxZWRjNmY0MSwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsdHJ1ZSk7JGjigI1fb25jZS5jcmMzMmMoY3JjMzJjKTtcblxuY29uc3QgICAgICAgIG1vZGVscz17Y3JjMSxjcmM2LGNyYzgsY3JjMTAsY3JjMTYsY3JjMjQsY3JjMzIsY3JjMzJjfTskaOKAjV9vbmNlLm1vZGVscyhtb2RlbHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQ1JDIjpbIkNSQyJdLCJjcmMxIjpbImNyYzEiXSwiY3JjNiI6WyJjcmM2Il0sImNyYzgiOlsiY3JjOCJdLCJjcmMxMCI6WyJjcmMxMCJdLCJjcmMxNiI6WyJjcmMxNiJdLCJjcmMyNCI6WyJjcmMyNCJdLCJjcmMzMiI6WyJjcmMzMiJdLCJjcmMzMmMiOlsiY3JjMzJjIl0sIm1vZGVscyI6WyJtb2RlbHMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAFCW9b1khAABZIQAAJQAAAEBhZ29yaWMvdmF0cy12MC4xNS4xL3NyYy9saWItYm9hcmQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9ub3RpZmllciIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL3pvZS9zcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIi4vY3JjLmpzIl0sImV4cG9ydHMiOlsiREVGQVVMVF9DUkNfRElHSVRTIiwiREVGQVVMVF9QUkVGSVgiLCJwcmVwYXJlQm9hcmRLaXQiLCJwcmVwYXJlUmVjb3JkZXJGYWN0b3J5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRmFpbCxxLHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCxNLG1ha2VTY2FsYXJCaWdNYXBTdG9yZSxwcmVwYXJlRXhvQ2xhc3NLaXQsZGVmaW5lUmVjb3JkZXJLaXQscHJlcGFyZVJlY29yZGVyLEUsRmFyLGlzUmVtb3RhYmxlLG1ha2VNYXJzaGFsLGNyYzY7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhc3NlcnRcIiwgWyRo4oCNX2EgPT4gKGFzc2VydCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyXCIsIFtbXCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXRcIiwgWyRo4oCNX2EgPT4gKHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRo4oCNX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaOKAjV9hID0+IChwcmVwYXJlRXhvQ2xhc3NLaXQgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy96b2Uvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qc1wiLCBbW1wiZGVmaW5lUmVjb3JkZXJLaXRcIiwgWyRo4oCNX2EgPT4gKGRlZmluZVJlY29yZGVyS2l0ID0gJGjigI1fYSldXSxbXCJwcmVwYXJlUmVjb3JkZXJcIiwgWyRo4oCNX2EgPT4gKHByZXBhcmVSZWNvcmRlciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dLFtcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzUmVtb3RhYmxlXCIsIFskaOKAjV9hID0+IChpc1JlbW90YWJsZSA9ICRo4oCNX2EpXV0sW1wibWFrZU1hcnNoYWxcIiwgWyRo4oCNX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjigI1fYSldXV1dLFtcIi4vY3JjLmpzXCIsIFtbXCJjcmM2XCIsIFskaOKAjV9hID0+IChjcmM2ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBERUZBVUxUX0NSQ19ESUdJVFM9MjskaOKAjV9vbmNlLkRFRkFVTFRfQ1JDX0RJR0lUUyhERUZBVUxUX0NSQ19ESUdJVFMpO1xuY29uc3QgICAgICAgIERFRkFVTFRfUFJFRklYPSdib2FyZDAnO1xuXG4vL1xuLy9cbiRo4oCNX29uY2UuREVGQVVMVF9QUkVGSVgoREVGQVVMVF9QUkVGSVgpO2NvbnN0IENhcERhdGFTaGFwZT17Ym9keTpNLnN0cmluZygpLHNsb3RzOk0uYXJyYXkoKX07XG5jb25zdCBNYXJzaGFsST1NLmludGVyZmFjZSgnTWFyc2hhbGxlcicse1xudG9DYXBEYXRhOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKENhcERhdGFTaGFwZSksXG5zZXJpYWxpemU6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoQ2FwRGF0YVNoYXBlKSxcbmZyb21DYXBEYXRhOk0uY2FsbChDYXBEYXRhU2hhcGUpLnJldHVybnMoTS5hbnkoKSksXG51bnNlcmlhbGl6ZTpNLmNhbGwoQ2FwRGF0YVNoYXBlKS5yZXR1cm5zKE0uYW55KCkpfSk7XG5cblxuY29uc3QgSWRTaGFwZT1NLnN0cmluZygpO1xuY29uc3QgVmFsU2hhcGU9TS5zY2FsYXIoKTtcbmNvbnN0IEJvYXJkS2l0SUtpdD17XG5ib2FyZDpNLmludGVyZmFjZSgnQm9hcmQnLHtcbmhhczpNLmNhbGwoVmFsU2hhcGUpLnJldHVybnMoTS5ib29sZWFuKCkpLFxuZ2V0VmFsdWU6TS5jYWxsKElkU2hhcGUpLnJldHVybnMoVmFsU2hhcGUpLFxubG9va3VwOk0uY2FsbCgpLnJlc3QoTS5hcnJheU9mKElkU2hhcGUpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbmdldElkOk0uY2FsbChWYWxTaGFwZSkucmV0dXJucyhJZFNoYXBlKSxcbmlkczpNLmNhbGwoKS5yZXR1cm5zKE0uYXJyYXlPZihJZFNoYXBlKSksXG5nZXRQdWJsaXNoaW5nTWFyc2hhbGxlcjpNLmNhbGwoKS5yZXR1cm5zKE0ucmVtb3RhYmxlKCkpLFxuZ2V0UmVhZG9ubHlNYXJzaGFsbGVyOk0uY2FsbCgpLnJldHVybnMoTS5yZW1vdGFibGUoKSl9KSxcblxucHVibGlzaGluZ01hcnNoYWxsZXI6TWFyc2hhbEksXG5yZWFkb25seU1hcnNoYWxsZXI6TWFyc2hhbEl9O1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgY2FsY0NyYz0oZGF0YSxjcmNEaWdpdHMpPT57XG4vL1xuLy9cbmNvbnN0IGNyYz1jcmM2LmNhbGN1bGF0ZShkYXRhKSsxO1xuY29uc3QgY3JjU3RyPWNyYy50b1N0cmluZygpLnBhZFN0YXJ0KGNyY0RpZ2l0cywnMCcpO1xuYXNzZXJ0KGNyY1N0ci5sZW5ndGg8PWNyY0RpZ2l0cywgYENSQyB0b28gYmlnIGZvciBpdHMgYnJpdGNoZXMgJHtjcmNTdHJ9YCk7XG5yZXR1cm4gY3JjU3RyO1xuIH07XG5cbi8qXG5cblxuICovXG5cbi8vXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGluaXREdXJhYmxlQm9hcmRTdGF0ZT0oXG5pbml0U2VxdWVuY2U9MCxcbntwcmVmaXg9REVGQVVMVF9QUkVGSVgsY3JjRGlnaXRzPURFRkFVTFRfQ1JDX0RJR0lUU309e30pPT5cbntcbmNvbnN0IGltbXV0YWJsZT17cHJlZml4LGNyY0RpZ2l0c307XG5cbmNvbnN0IGxhc3RTZXF1ZW5jZT1CaWdJbnQoaW5pdFNlcXVlbmNlKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlkVG9WYWw9bWFrZVNjYWxhckJpZ01hcFN0b3JlKCdpZFRvVmFsJyx7XG5kdXJhYmxlOnRydWUsXG5rZXlTaGFwZTpJZFNoYXBlLFxudmFsdWVTaGFwZTpWYWxTaGFwZX0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB2YWxUb0lkPW1ha2VTY2FsYXJCaWdNYXBTdG9yZSgndmFsVG9JZCcse1xuZHVyYWJsZTp0cnVlLFxua2V5U2hhcGU6VmFsU2hhcGUsXG52YWx1ZVNoYXBlOklkU2hhcGV9KTtcblxuXG5jb25zdCBtdXRhYmxlPXtsYXN0U2VxdWVuY2UsaWRUb1ZhbCx2YWxUb0lkfTtcblxucmV0dXJue1xuLi4uaW1tdXRhYmxlLFxuLi4ubXV0YWJsZX07XG5cbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLypcblxuXG4gKi9cbmNvbnN0IGdldElkPSh2YWx1ZSxzdGF0ZSk9PntcbmNvbnN0e2lkVG9WYWwsdmFsVG9JZCxwcmVmaXgsY3JjRGlnaXRzfT1zdGF0ZTtcbmlmKCFpc1JlbW90YWJsZSh2YWx1ZSkpe1xuRmFpbCBgQm9hcmQgY2Fubm90IGNyZWF0ZSBpZCBmb3Igbm9uLXJlbW90YWJsZWA7XG4gfVxuXG5pZih2YWxUb0lkLmhhcyh2YWx1ZSkpe1xucmV0dXJuIHZhbFRvSWQuZ2V0KHZhbHVlKTtcbiB9XG5cbnN0YXRlLmxhc3RTZXF1ZW5jZSs9MW47XG5jb25zdCBzZXE9c3RhdGUubGFzdFNlcXVlbmNlO1xuXG5jb25zdCBjcmNJbnB1dD0gYCR7cHJlZml4fSR7c2VxfWA7XG5jb25zdCBjcmM9Y2FsY0NyYyhjcmNJbnB1dCxjcmNEaWdpdHMpO1xuXG5jb25zdCBpZD0gYCR7cHJlZml4fSR7Y3JjfSR7c2VxfWA7XG5cbnZhbFRvSWQuaW5pdCh2YWx1ZSxpZCk7XG5pZFRvVmFsLmluaXQoaWQsdmFsdWUpO1xucmV0dXJuIGlkO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCBnZXRWYWx1ZT0oaWQse3ByZWZpeCxjcmNEaWdpdHMsaWRUb1ZhbH0pPT57XG5pZC5zdGFydHNXaXRoKHByZWZpeCl8fEZhaWwgYGlkIG11c3Qgc3RhcnQgd2l0aCAke3EocHJlZml4KX06ICR7aWR9YDtcbmNvbnN0IGRpZ2l0cz1pZC5zbGljZShwcmVmaXgubGVuZ3RoKTtcbi8vXG5jb25zdCBESUdJVFNfUkVHRVhQPW5ldyBSZWdFeHAoIGBeWzAtOV17JHtjcmNEaWdpdHMrMX0sfSRgKTtcbkRJR0lUU19SRUdFWFAudGVzdChkaWdpdHMpfHxcbkZhaWwgYGlkIG11c3QgZW5kIGluIGF0IGxlYXN0ICR7cShjcmNEaWdpdHMrMSl9IGRpZ2l0czogJHtpZH1gO1xuXG5pZihpZFRvVmFsLmhhcyhpZCkpe1xucmV0dXJuIGlkVG9WYWwuZ2V0KGlkKTtcbiB9XG5cbmNvbnN0IGFsbGVnZWRDcmM9ZGlnaXRzLnNsaWNlKDAsY3JjRGlnaXRzKTtcblxuY29uc3Qgc2VxPWRpZ2l0cy5zbGljZShjcmNEaWdpdHMpO1xuY29uc3QgY3JjSW5wdXQ9IGAke3ByZWZpeH0ke3NlcX1gO1xuY29uc3QgY3JjPWNhbGNDcmMoY3JjSW5wdXQsY3JjRGlnaXRzKTtcblxuYWxsZWdlZENyYz09PWNyY3x8RmFpbCBgaWQgaXMgcHJvYmFibHkgYSB0eXBvLCBjYW5ub3QgdmVyaWZ5IENSQzogJHtpZH1gO1xuLy9cbnRocm93IEZhaWwgYGJvYXJkIGRvZXMgbm90IGhhdmUgaWQ6ICR7aWR9YDtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWFrZVNsb3RUb1ZhbD0oc3RhdGUpPT57XG5jb25zdCBpZmFjZUFsbGVnZWRQcmVmaXg9J0FsbGVnZWQ6ICc7XG5jb25zdCBpZmFjZUluYWNjZXNzaWJsZVByZWZpeD0nU0VWRVJFRDogJztcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBzbG90VG9WYWw9KHNsb3QsaWZhY2UpPT57XG5pZihzbG90IT09bnVsbCl7XG5yZXR1cm4gZ2V0VmFsdWUoc2xvdCxzdGF0ZSk7XG4gfVxuXG4vL1xuaWYodHlwZW9mIGlmYWNlPT09J3N0cmluZycmJmlmYWNlLnN0YXJ0c1dpdGgoaWZhY2VBbGxlZ2VkUHJlZml4KSl7XG5pZmFjZT1pZmFjZS5zbGljZShpZmFjZUFsbGVnZWRQcmVmaXgubGVuZ3RoKTtcbiB9XG5yZXR1cm4gRmFyKCBgJHtpZmFjZUluYWNjZXNzaWJsZVByZWZpeH0ke2lmYWNlfWAse30pO1xuIH07XG5yZXR1cm4gc2xvdFRvVmFsO1xuIH07XG5cbi8vXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFrZVJlYWRvbmx5TWFyc2hhbGxlcj0oc3RhdGUpPT57XG5jb25zdHt2YWxUb0lkfT1zdGF0ZTtcbmNvbnN0IHNsb3RUb1ZhbD1tYWtlU2xvdFRvVmFsKHN0YXRlKTtcbmNvbnN0IHZhbFRvU2xvdD0odmFsKT0+e1xuaWYoIXZhbFRvSWQuaGFzKHZhbCkpe1xuLy9cbnJldHVybiBudWxsO1xuIH1cblxuLy9cbnJldHVybiB2YWxUb0lkLmdldCh2YWwpO1xuIH07XG5yZXR1cm4gbWFrZU1hcnNoYWwodmFsVG9TbG90LHNsb3RUb1ZhbCx7XG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgbWFrZVB1Ymxpc2hpbmdNYXJzaGFsbGVyPShzdGF0ZSk9PntcbmNvbnN0IHNsb3RUb1ZhbD1tYWtlU2xvdFRvVmFsKHN0YXRlKTtcbi8vXG5jb25zdCB2YWxUb1Nsb3Q9KHZhbCk9PmdldElkKHZhbCxzdGF0ZSk7XG5yZXR1cm4gbWFrZU1hcnNoYWwodmFsVG9TbG90LHNsb3RUb1ZhbCx7XG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cbiB9O1xuLy9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVCb2FyZEtpdD0oYmFnZ2FnZSk9PntcbnJldHVybiBwcmVwYXJlRXhvQ2xhc3NLaXQoXG5iYWdnYWdlLFxuJ0JvYXJkJyxcbkJvYXJkS2l0SUtpdCxcbmluaXREdXJhYmxlQm9hcmRTdGF0ZSxcbntcbmJvYXJkOntcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbmdldElkKHZhbHVlKXtcbnJldHVybiBnZXRJZCh2YWx1ZSx0aGlzLnN0YXRlKTtcbiB9LFxuLypcblxuXG4gICAgICAgICAqL1xuZ2V0VmFsdWUoaWQpe1xucmV0dXJuIGdldFZhbHVlKGlkLHRoaXMuc3RhdGUpO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG4gICAgICBhc3luYyBsb29rdXAoLi4ucGF0aCl7XG5jb25zdHtcbmZhY2V0czp7Ym9hcmR9fT1cbnRoaXM7XG5pZihwYXRoLmxlbmd0aD09PTApe1xucmV0dXJuIGJvYXJkO1xuIH1cbmNvbnN0W2ZpcnN0LC4uLnJlc3RdPXBhdGg7XG4vKiAgICAgICAgICAgICAgKi9cbmNvbnN0IGZpcnN0VmFsdWU9Ym9hcmQuZ2V0VmFsdWUoLyogICAgICAgICAgICAgICAgICAqL2ZpcnN0KTtcbmlmKHJlc3QubGVuZ3RoPT09MCl7XG5yZXR1cm4gZmlyc3RWYWx1ZTtcbiB9XG5yZXR1cm4gRShmaXJzdFZhbHVlKS5sb29rdXAoLi4ucmVzdCk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5oYXModmFsKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIHN0YXRlLnZhbFRvSWQuaGFzKHZhbCk7XG4gfSxcbmlkcygpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5yZXR1cm4gaGFyZGVuKFsuLi5zdGF0ZS5pZFRvVmFsLmtleXMoKV0pO1xuIH0sXG4vKlxuXG5cbiAgICAgICAgICovXG5nZXRQdWJsaXNoaW5nTWFyc2hhbGxlcigpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnB1Ymxpc2hpbmdNYXJzaGFsbGVyO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuICAgICAgICAgKi9cbmdldFJlYWRvbmx5TWFyc2hhbGxlcigpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnJlYWRvbmx5TWFyc2hhbGxlcjtcbiB9fSxcblxucmVhZG9ubHlNYXJzaGFsbGVyOntcbnRvQ2FwRGF0YSh2YWwpe1xuY29uc3QgcmVhZG9ubHk9bWFrZVJlYWRvbmx5TWFyc2hhbGxlcih0aGlzLnN0YXRlKTtcbnJldHVybiByZWFkb25seS50b0NhcERhdGEodmFsKTtcbiB9LFxuZnJvbUNhcERhdGEoZGF0YSl7XG5jb25zdCByZWFkb25seT1tYWtlUmVhZG9ubHlNYXJzaGFsbGVyKHRoaXMuc3RhdGUpO1xucmV0dXJuIHJlYWRvbmx5LmZyb21DYXBEYXRhKGRhdGEpO1xuIH0sXG5zZXJpYWxpemUoZGF0YSl7XG5yZXR1cm4gdGhpcy5mYWNldHMucmVhZG9ubHlNYXJzaGFsbGVyLnRvQ2FwRGF0YShkYXRhKTtcbiB9LFxudW5zZXJpYWxpemUoZGF0YSl7XG5yZXR1cm4gdGhpcy5mYWNldHMucmVhZG9ubHlNYXJzaGFsbGVyLmZyb21DYXBEYXRhKGRhdGEpO1xuIH19LFxuXG5wdWJsaXNoaW5nTWFyc2hhbGxlcjp7XG50b0NhcERhdGEodmFsKXtcbmNvbnN0IHB1Ymxpc2hpbmc9bWFrZVB1Ymxpc2hpbmdNYXJzaGFsbGVyKHRoaXMuc3RhdGUpO1xucmV0dXJuIHB1Ymxpc2hpbmcudG9DYXBEYXRhKHZhbCk7XG4gfSxcbmZyb21DYXBEYXRhKGRhdGEpe1xuY29uc3QgcHVibGlzaGluZz1tYWtlUHVibGlzaGluZ01hcnNoYWxsZXIodGhpcy5zdGF0ZSk7XG5yZXR1cm4gcHVibGlzaGluZy5mcm9tQ2FwRGF0YShkYXRhKTtcbiB9LFxuc2VyaWFsaXplKGRhdGEpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnB1Ymxpc2hpbmdNYXJzaGFsbGVyLnRvQ2FwRGF0YShkYXRhKTtcbiB9LFxudW5zZXJpYWxpemUoZGF0YSl7XG5yZXR1cm4gdGhpcy5mYWNldHMucHVibGlzaGluZ01hcnNoYWxsZXIuZnJvbUNhcERhdGEoZGF0YSk7XG4gfX19KTtcblxuXG5cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaOKAjV9vbmNlLnByZXBhcmVCb2FyZEtpdChwcmVwYXJlQm9hcmRLaXQpO1xuY29uc3QgICAgICAgIHByZXBhcmVSZWNvcmRlckZhY3Rvcnk9KHpvbmUpPT57XG5jb25zdCBiYWdnYWdlPXpvbmUubWFwU3RvcmUoIGBSZWNvcmRlciBCYWdnYWdlYCk7XG5jb25zdCBtYWtlRHVyYWJsZVB1Ymxpc2hLaXQ9cHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KFxuYmFnZ2FnZSxcbidEdXJhYmxlUHVibGlzaEtpdCcpO1xuXG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVSZWNvcmRlcktpdD0obGFiZWwsbWFyc2hhbGxlcik9PntcbmNvbnN0IG15Wm9uZT16b25lLnN1YlpvbmUobGFiZWwpO1xuY29uc3QgbWFrZVJlY29yZGVyPXByZXBhcmVSZWNvcmRlcihcbm15Wm9uZS5tYXBTdG9yZSggYFJlY29yZGVyIEJhZ2dhZ2U6ICR7bGFiZWx9YCksXG5tYXJzaGFsbGVyKTtcblxucmV0dXJuIGRlZmluZVJlY29yZGVyS2l0KHttYWtlUmVjb3JkZXIsbWFrZUR1cmFibGVQdWJsaXNoS2l0fSk7XG4gfTtcblxucmV0dXJuIHByZXBhcmVSZWNvcmRlcktpdDtcbiB9OyRo4oCNX29uY2UucHJlcGFyZVJlY29yZGVyRmFjdG9yeShwcmVwYXJlUmVjb3JkZXJGYWN0b3J5KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkRFRkFVTFRfQ1JDX0RJR0lUUyI6WyJERUZBVUxUX0NSQ19ESUdJVFMiXSwiREVGQVVMVF9QUkVGSVgiOlsiREVGQVVMVF9QUkVGSVgiXSwicHJlcGFyZUJvYXJkS2l0IjpbInByZXBhcmVCb2FyZEtpdCJdLCJwcmVwYXJlUmVjb3JkZXJGYWN0b3J5IjpbInByZXBhcmVSZWNvcmRlckZhY3RvcnkiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAAi7Ho8ILAADCCwAALQAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvYWN0aW9ucy5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9ldmVudHVhbC1zZW5kIl0sImV4cG9ydHMiOlsibWFrZVBheW1lbnRBY3Rpb25zIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlUHJvbWlzZUtpdCxGYXIsRTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VQcm9taXNlS2l0ID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5jb25zdCAgICAgICAgbWFrZVBheW1lbnRBY3Rpb25zPSh7XG5nZXRCcmFuZFJlY29yZCxcbmdldFB1cnNlQnlQZXRuYW1lLFxuZ2V0UmVjb3JkLFxudXBkYXRlUmVjb3JkLFxuZ2V0QXV0b0RlcG9zaXRQdXJzZSxcbmdldElzc3VlckJvYXJkSWR9KT0+XG57XG5jb25zdCBkZXBvc2l0ZWRQSz1tYWtlUHJvbWlzZUtpdCgpO1xuXG5yZXR1cm4gRmFyKCdwYXltZW50IGFjdGlvbnMnLHtcbmRlcG9zaXQ6YXN5bmMocHVyc2VPclBldG5hbWU9dW5kZWZpbmVkKT0+e1xuY29uc3Qgb2xkUGF5bWVudFJlY29yZD1nZXRSZWNvcmQoKTtcbmNvbnN0e2JyYW5kLHBheW1lbnR9PW9sZFBheW1lbnRSZWNvcmQ7XG5hc3NlcnQocGF5bWVudCk7XG5cbi8qICAgICAgICAgICAgICAgICovXG5sZXQgcHVyc2U7XG5pZihwdXJzZU9yUGV0bmFtZT09PXVuZGVmaW5lZCl7XG5jb25zdCBhdXRvRGVwb3NpdFB1cnNlPWdldEF1dG9EZXBvc2l0UHVyc2UoYnJhbmQpO1xuaWYoIWF1dG9EZXBvc2l0UHVyc2Upe1xuLy9cbnJldHVybiBkZXBvc2l0ZWRQSy5wcm9taXNlO1xuIH1cbi8vXG5wdXJzZT1nZXRBdXRvRGVwb3NpdFB1cnNlKGJyYW5kKTtcbiB9ZWxzZSBpZihcbkFycmF5LmlzQXJyYXkocHVyc2VPclBldG5hbWUpfHxcbnR5cGVvZiBwdXJzZU9yUGV0bmFtZT09PSdzdHJpbmcnKVxue1xucHVyc2U9Z2V0UHVyc2VCeVBldG5hbWUocHVyc2VPclBldG5hbWUpO1xuIH1lbHNle1xucHVyc2U9cHVyc2VPclBldG5hbWU7XG4gfVxuY29uc3QgYnJhbmRSZWNvcmQ9Z2V0QnJhbmRSZWNvcmQoYnJhbmQpO1xudXBkYXRlUmVjb3JkKHsuLi5vbGRQYXltZW50UmVjb3JkLHN0YXR1czoncGVuZGluZyd9LGJyYW5kUmVjb3JkKTtcbi8vXG5FKHB1cnNlKS5cbmRlcG9zaXQocGF5bWVudCkuXG50aGVuKFxuKGRlcG9zaXRlZEFtb3VudCk9PntcbnVwZGF0ZVJlY29yZChcbntcbi4uLmdldFJlY29yZCgpLFxuLy9cbnBheW1lbnQ6dW5kZWZpbmVkLFxuc3RhdHVzOidkZXBvc2l0ZWQnLFxuZGVwb3NpdGVkQW1vdW50fSxcblxuYnJhbmRSZWNvcmQpO1xuXG5kZXBvc2l0ZWRQSy5yZXNvbHZlKGRlcG9zaXRlZEFtb3VudCk7XG4gfSxcbihlKT0+e1xuY29uc29sZS5lcnJvcihcbidFcnJvciBkZXBvc2l0aW5nIHBheW1lbnQgaW4nLFxucHVyc2VPclBldG5hbWV8fCdkZWZhdWx0IHB1cnNlJyxcbmUpO1xuXG5pZihwdXJzZU9yUGV0bmFtZT09PXVuZGVmaW5lZCl7XG4vL1xuLy9cbnVwZGF0ZVJlY29yZCh7XG4uLi5nZXRSZWNvcmQoKSxcbnN0YXR1czp1bmRlZmluZWR9KTtcblxuZGVwb3NpdGVkUEsucmVqZWN0KGUpO1xuIH1lbHNle1xuLy9cbi8vXG5kZXBvc2l0ZWRQSy5yZXNvbHZlKGdldFJlY29yZCgpLmFjdGlvbnMuZGVwb3NpdCh1bmRlZmluZWQpKTtcbiB9XG4gfSk7XG5cbnJldHVybiBkZXBvc2l0ZWRQSy5wcm9taXNlO1xuIH0sXG5yZWZyZXNoOmFzeW5jKCk9PntcbmNvbnN0IG9sZFBheW1lbnRSZWNvcmQ9Z2V0UmVjb3JkKCk7XG5jb25zdHticmFuZCxpc3N1ZXIscGF5bWVudH09b2xkUGF5bWVudFJlY29yZDtcbmNvbnN0IGJyYW5kUmVjb3JkPWdldEJyYW5kUmVjb3JkKGJyYW5kKTtcbmlmKCFicmFuZFJlY29yZCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5pZighaXNzdWVyKXtcbnVwZGF0ZVJlY29yZChcbntcbi4uLm9sZFBheW1lbnRSZWNvcmQsXG5pc3N1ZXJCb2FyZElkOmdldElzc3VlckJvYXJkSWQoYnJhbmRSZWNvcmQuaXNzdWVyKX0sXG5cbmJyYW5kUmVjb3JkKTtcblxucmV0dXJuIHRydWU7XG4gfVxuXG5pZighcGF5bWVudCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5jb25zdCBpc0xpdmU9YXdhaXQgRShpc3N1ZXIpLmlzTGl2ZShwYXltZW50KTtcbmlmKGlzTGl2ZSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG51cGRhdGVSZWNvcmQoe1xuLi4ub2xkUGF5bWVudFJlY29yZCxcbi8vXG5wYXltZW50OnVuZGVmaW5lZCxcbnN0YXR1czonZXhwaXJlZCd9KTtcblxucmV0dXJuIHRydWU7XG4gfSxcbmdldEFtb3VudE9mOmFzeW5jKCk9PntcbmNvbnN0IG9sZFBheW1lbnRSZWNvcmQ9Z2V0UmVjb3JkKCk7XG5jb25zdHtpc3N1ZXIscGF5bWVudH09b2xkUGF5bWVudFJlY29yZDtcbmFzc2VydChpc3N1ZXIpO1xuYXNzZXJ0KHBheW1lbnQpO1xuXG4vL1xuY29uc3QgbGFzdEFtb3VudD1hd2FpdCBFKGlzc3VlcikuZ2V0QW1vdW50T2YocGF5bWVudCk7XG5cbnVwZGF0ZVJlY29yZCh7XG4uLi5vbGRQYXltZW50UmVjb3JkLFxubGFzdEFtb3VudH0pO1xuXG5yZXR1cm4gdHJ1ZTtcbiB9fSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZVBheW1lbnRBY3Rpb25zKG1ha2VQYXltZW50QWN0aW9ucyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUGF5bWVudEFjdGlvbnMiOlsibWFrZVBheW1lbnRBY3Rpb25zIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJzixjyuAgAArgIAADUAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2JpZ2ludFN0cmluZ2lmeS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYmlnaW50U3RyaW5naWZ5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8vXG4vL1xuLy9cbi8vXG5jb25zdCAgICAgICAgYmlnaW50U3RyaW5naWZ5PSh4KT0+XG5KU09OLnN0cmluZ2lmeSh4LChfa2V5LHZhbHVlKT0+e1xuaWYodHlwZW9mIHZhbHVlIT09J2JpZ2ludCcpe1xuLy9cbnJldHVybiB2YWx1ZTtcbiB9XG5pZih2YWx1ZTw9QmlnSW50KE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSl7XG4vL1xucmV0dXJuIE51bWJlcih2YWx1ZSk7XG4gfVxuLy9cbi8vXG5yZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcbiB9KTskaOKAjV9vbmNlLmJpZ2ludFN0cmluZ2lmeShiaWdpbnRTdHJpbmdpZnkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYmlnaW50U3RyaW5naWZ5IjpbImJpZ2ludFN0cmluZ2lmeSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA6rqU6aQkAAGkJAAAuAAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9kYXRlLW5vdy5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGFnb3JpYy9ub3RpZmllciIsIkBlbmRvL3Byb21pc2Uta2l0Il0sImV4cG9ydHMiOlsiREVGQVVMVF9USU1FUl9ERVZJQ0VfU0NBTEUiLCJERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCIsIm1ha2VUaW1lckRldmljZURhdGVOb3ciLCJtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxvYnNlcnZlTm90aWZpZXIsbWFrZVByb21pc2VLaXQ7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyXCIsIFtbXCJvYnNlcnZlTm90aWZpZXJcIiwgWyRo4oCNX2EgPT4gKG9ic2VydmVOb3RpZmllciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VQcm9taXNlS2l0ID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5jb25zdCAgICAgICAgREVGQVVMVF9USU1FUl9TRVJWSUNFX1BPTExfSU5URVJWQUw9NjBfMDAwbjskaOKAjV9vbmNlLkRFRkFVTFRfVElNRVJfU0VSVklDRV9QT0xMX0lOVEVSVkFMKERFRkFVTFRfVElNRVJfU0VSVklDRV9QT0xMX0lOVEVSVkFMKTtcbmNvbnN0ICAgICAgICBERUZBVUxUX1RJTUVSX0RFVklDRV9TQ0FMRT0xO1xuXG4vL1xuLy9cbiRo4oCNX29uY2UuREVGQVVMVF9USU1FUl9ERVZJQ0VfU0NBTEUoREVGQVVMVF9USU1FUl9ERVZJQ0VfU0NBTEUpO2NvbnN0IG1ha2VUaW1lckRldmljZURhdGVOb3c9XG4oRCx0aW1lckRldmljZSx0aW1lckRldmljZVNjYWxlPURFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFKT0+XG4oKT0+e1xuY29uc3Qgc3RhbXA9RCh0aW1lckRldmljZSkuZ2V0TGFzdFBvbGxlZCgpO1xuY29uc3QgbGFzdFBvbGxlZFN0YW1wPXBhcnNlSW50KCBgJHtzdGFtcH1gLDEwKSp0aW1lckRldmljZVNjYWxlO1xucmV0dXJuIGxhc3RQb2xsZWRTdGFtcDtcbiB9O1xuXG4vL1xuLy9cbiRo4oCNX29uY2UubWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyhtYWtlVGltZXJEZXZpY2VEYXRlTm93KTtjb25zdCBtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdz0oXG50aW1lclNlcnZpY2UsXG50aW1lclBvbGxJbnRlcnZhbD1ERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCk9Plxue1xubGV0IGxhc3RQb2xsZWRTdGFtcD1OYU47XG5jb25zdCBkYXRlTm93PSgpPT5sYXN0UG9sbGVkU3RhbXA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkYXRlTm93UEs9bWFrZVByb21pc2VLaXQoKTtcblxuLy9cbmNvbnN0IG9ic2VydmVUaW1lcj1hc3luYygpPT57XG5jb25zdCBvYnNlcnZlcj17XG51cGRhdGVTdGF0ZShzdGFtcCl7XG5sYXN0UG9sbGVkU3RhbXA9cGFyc2VJbnQoIGAke3N0YW1wfWAsMTApO1xuZGF0ZU5vd1BLLnJlc29sdmUoZGF0ZU5vdyk7XG4gfX07XG5cblxuLy9cbmNvbnN0IHN0YW1wPWF3YWl0IEUodGltZXJTZXJ2aWNlKS5nZXRDdXJyZW50VGltZXN0YW1wKCk7XG5vYnNlcnZlci51cGRhdGVTdGF0ZShzdGFtcCk7XG5cbi8vXG4vL1xuY29uc3QgdGltZXJOb3RpZmllcj1FKHRpbWVyU2VydmljZSkubWFrZU5vdGlmaWVyKDBuLHRpbWVyUG9sbEludGVydmFsKTtcblxuLy9cbmF3YWl0IG9ic2VydmVOb3RpZmllcih0aW1lck5vdGlmaWVyLG9ic2VydmVyKTtcbiB9O1xuXG5vYnNlcnZlVGltZXIoKS5jYXRjaCgoZSk9PmRhdGVOb3dQSy5yZWplY3QoZSkpO1xuXG4vL1xucmV0dXJuIGRhdGVOb3dQSy5wcm9taXNlO1xuIH07JGjigI1fb25jZS5tYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyhtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCI6WyJERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCJdLCJERUZBVUxUX1RJTUVSX0RFVklDRV9TQ0FMRSI6WyJERUZBVUxUX1RJTUVSX0RFVklDRV9TQ0FMRSJdLCJtYWtlVGltZXJEZXZpY2VEYXRlTm93IjpbIm1ha2VUaW1lckRldmljZURhdGVOb3ciXSwibWFrZVRpbWVyU2VydmljZURhdGVOb3ciOlsibWFrZVRpbWVyU2VydmljZURhdGVOb3ciXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmHUVKe0SAADtEgAAOgAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvZmluZE9yTWFrZUludml0YXRpb24uanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL2VydHAiXSwiZXhwb3J0cyI6WyJmaW5kT3JNYWtlSW52aXRhdGlvbiIsIm1ha2VJZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEZhaWwscSxFLHBhc3NTdHlsZU9mLEFtb3VudE1hdGg7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhc3NlcnRcIiwgWyRo4oCNX2EgPT4gKGFzc2VydCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaOKAjV9hID0+IChwYXNzU3R5bGVPZiA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2VydHBcIiwgW1tcIkFtb3VudE1hdGhcIiwgWyRo4oCNX2EgPT4gKEFtb3VudE1hdGggPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuY29uc3QgICAgICAgIG1ha2VJZD0oZGFwcE9yaWdpbixyYXdJZCk9PiBgJHtkYXBwT3JpZ2lufSMke3Jhd0lkfWA7JGjigI1fb25jZS5tYWtlSWQobWFrZUlkKTtcblxuY29uc3QgYXNzZXJ0Rmlyc3RDYXBBU0NJST0oc3RyKT0+e1xuYXNzZXJ0LnR5cGVvZihzdHIsJ3N0cmluZycpO1xuY29uc3QgZmlyc3RDYXBBU0NJST0vXltBLVpdW2EtekEtWjAtOV8kXSokLztcbmZpcnN0Q2FwQVNDSUkudGVzdChzdHIpfHxcbkZhaWwgYFRoZSBzdHJpbmcgJHtxKFxuc3RyKVxuIH0gbXVzdCBiZSBhbiBhc2NpaSBpZGVudGlmaWVyIHN0YXJ0aW5nIHdpdGggdXBwZXIgY2FzZS5gO1xuc3RyIT09J05hTicmJnN0ciE9PSdJbmZpbml0eSd8fFxuRmFpbCBga2V5d29yZCAke3Eoc3RyKX0gbXVzdCBub3QgYmUgYSBudW1iZXIncyBuYW1lYDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCBmaW5kQnlCb2FyZElkPWFzeW5jKGludml0YXRpb25QdXJzZUJhbGFuY2Use2JvYXJkLGJvYXJkSWR9KT0+e1xuYXNzZXJ0LnR5cGVvZihib2FyZElkLCdzdHJpbmcnKTtcbmNvbnN0IGludml0YXRpb25IYW5kbGU9YXdhaXQgRShib2FyZCkuZ2V0VmFsdWUoYm9hcmRJZCk7XG5jb25zdCBtYXRjaD0oZWxlbWVudCk9PmVsZW1lbnQuaGFuZGxlPT09aW52aXRhdGlvbkhhbmRsZTtcbmNvbnN0IG1hdGNoaW5nVmFsdWU9aW52aXRhdGlvblB1cnNlQmFsYW5jZS52YWx1ZS5maW5kKG1hdGNoKTtcbm1hdGNoaW5nVmFsdWV8fEZhaWwgYENhbm5vdCBmaW5kIGludml0YXRpb24gY29ycmVzcG9uZGluZyB0byAke3EoYm9hcmRJZCl9YDtcblxucmV0dXJuIGhhcmRlbihbbWF0Y2hpbmdWYWx1ZV0pO1xuIH07XG5cbi8vXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0IGZpbmRCeUtleVZhbHVlUGFpcnM9YXN5bmMoaW52aXRhdGlvblB1cnNlQmFsYW5jZSxrdnMpPT57XG4vL1xuLy9cbi8vXG5jb25zdCBtYXRjaGVzPShpbnZpdGF0aW9uRGV0YWlsKT0+XG5PYmplY3QuZW50cmllcyhrdnMpLmV2ZXJ5KFxuKFtrZXksdmFsdWVdKT0+aW52aXRhdGlvbkRldGFpbFtrZXldPT09dmFsdWUpO1xuXG5cbmNvbnN0IG1hdGNoaW5nVmFsdWU9aW52aXRhdGlvblB1cnNlQmFsYW5jZS52YWx1ZS5maW5kKG1hdGNoZXMpO1xubWF0Y2hpbmdWYWx1ZXx8RmFpbCBgQ2Fubm90IGZpbmQgaW52aXRhdGlvbiBjb3JyZXNwb25kaW5nIHRvICR7cShrdnMpfWA7XG5yZXR1cm4gaGFyZGVuKFttYXRjaGluZ1ZhbHVlXSk7XG4gfTtcblxuY29uc3QgbWFrZUZpbmRJbnZpdGF0aW9uPShpbnZpdGF0aW9uUHVyc2UsaW52aXRhdGlvbkJyYW5kKT0+e1xuY29uc3QgZmluZEludml0YXRpb249YXN5bmMocXVlcnlGbixxdWVyeVBhcmFtcyk9PntcbmNvbnN0IHB1cnNlQmFsYW5jZT1hd2FpdCBFKGludml0YXRpb25QdXJzZSkuZ2V0Q3VycmVudEFtb3VudCgpO1xuY29uc3QgdmFsdWU9YXdhaXQgcXVlcnlGbihwdXJzZUJhbGFuY2UscXVlcnlQYXJhbXMpO1xuY29uc3QgaW52aXRhdGlvbkFtb3VudD1BbW91bnRNYXRoLm1ha2UoaW52aXRhdGlvbkJyYW5kLHZhbHVlKTtcbmNvbnN0IGludml0YXRpb25QPUUoaW52aXRhdGlvblB1cnNlKS53aXRoZHJhdyhpbnZpdGF0aW9uQW1vdW50KTtcbnJldHVybiBpbnZpdGF0aW9uUDtcbiB9O1xucmV0dXJuIGZpbmRJbnZpdGF0aW9uO1xuIH07XG5cbmNvbnN0IG1ha2VDb250aW51aW5nSW52aXRhdGlvbj1hc3luYyhcbmlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQsXG5kYXBwT3JpZ2luLFxue3ByaW9yT2ZmZXJJZDpyYXdQcmlvck9mZmVySWQsZGVzY3JpcHRpb259KT0+XG57XG5hc3NlcnRGaXJzdENhcEFTQ0lJKGRlc2NyaXB0aW9uKTtcblxuY29uc3QgcHJpb3JPZmZlcklkPW1ha2VJZChkYXBwT3JpZ2luLHJhd1ByaW9yT2ZmZXJJZCk7XG5jb25zdCBvZmZlclJlc3VsdD1hd2FpdCBpZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LmdldChwcmlvck9mZmVySWQpLnByb21pc2U7XG5hc3NlcnQoXG5wYXNzU3R5bGVPZihvZmZlclJlc3VsdCk9PT0nY29weVJlY29yZCcsXG4gYG9mZmVyUmVzdWx0IG11c3QgYmUgYSByZWNvcmQgdG8gaGF2ZSBhbiBpbnZpdGF0aW9uTWFrZXJzIHByb3BlcnR5YCk7XG5cbmFzc2VydChcbm9mZmVyUmVzdWx0Lmludml0YXRpb25NYWtlcnMsXG4gYG9mZmVyUmVzdWx0IGRvZXMgbm90IGhhdmUgYW4gaW52aXRhdGlvbk1ha2VycyBwcm9wZXJ0eWApO1xuXG5cbmNvbnN0IGludml0YXRpb25QPUUob2ZmZXJSZXN1bHQuaW52aXRhdGlvbk1ha2VycylbZGVzY3JpcHRpb25dKCk7XG5yZXR1cm4gaW52aXRhdGlvblA7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUludml0YXRpb249YXN5bmMoXG5pbnZpdGF0aW9uTWFrZXIsXG5pbnN0YW5jZUhhbmRsZUJvYXJkSWQsXG5ib2FyZCxcbnpvZSk9Plxue1xuY29uc3QgaW5zdGFuY2U9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbkUoYm9hcmQpLmdldFZhbHVlKGluc3RhbmNlSGFuZGxlQm9hcmRJZCk7XG5cbmNvbnN0IHB1YmxpY0ZhY2V0PUUoem9lKS5nZXRQdWJsaWNGYWNldChpbnN0YW5jZSk7XG5jb25zdHttZXRob2QsYXJncz1bXX09aW52aXRhdGlvbk1ha2VyO1xuXG5yZXR1cm4gRShwdWJsaWNGYWNldClbbWV0aG9kXSguLi5hcmdzKTtcbiB9O1xuXG5jb25zdCAgICAgICAgZmluZE9yTWFrZUludml0YXRpb249YXN5bmMoXG5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LFxuYm9hcmQsXG56b2UsXG5pbnZpdGF0aW9uUHVyc2UsXG5pbnZpdGF0aW9uQnJhbmQsXG5vZmZlcik9Plxue1xuaWYob2ZmZXIuaW52aXRhdGlvbil7XG4vL1xucmV0dXJuIG9mZmVyLmludml0YXRpb247XG4gfVxuXG5jb25zdCBmaW5kSW52aXRhdGlvbj1tYWtlRmluZEludml0YXRpb24oaW52aXRhdGlvblB1cnNlLGludml0YXRpb25CcmFuZCk7XG5cbi8vXG5pZihvZmZlci5pbnZpdGVIYW5kbGVCb2FyZElkKXtcbmNvbnN0IHF1ZXJ5UGFyYW1zPXtcbmJvYXJkLFxuYm9hcmRJZDpvZmZlci5pbnZpdGVIYW5kbGVCb2FyZElkfTtcblxucmV0dXJuIGZpbmRJbnZpdGF0aW9uKGZpbmRCeUJvYXJkSWQscXVlcnlQYXJhbXMpO1xuIH1cblxuLy9cbmlmKG9mZmVyLmludml0YXRpb25IYW5kbGVCb2FyZElkKXtcbmNvbnN0IHF1ZXJ5UGFyYW1zPXtcbmJvYXJkLFxuYm9hcmRJZDpvZmZlci5pbnZpdGF0aW9uSGFuZGxlQm9hcmRJZH07XG5cbnJldHVybiBmaW5kSW52aXRhdGlvbihmaW5kQnlCb2FyZElkLHF1ZXJ5UGFyYW1zKTtcbiB9XG5cbmlmKG9mZmVyLmludml0YXRpb25NYWtlcil7XG5yZXR1cm4gbWFrZUludml0YXRpb24oXG5vZmZlci5pbnZpdGF0aW9uTWFrZXIsXG5vZmZlci5pbnN0YW5jZUhhbmRsZUJvYXJkSWQsXG5ib2FyZCxcbnpvZSk7XG5cbiB9XG5cbmlmKG9mZmVyLmludml0YXRpb25RdWVyeSl7XG5yZXR1cm4gZmluZEludml0YXRpb24oZmluZEJ5S2V5VmFsdWVQYWlycyxvZmZlci5pbnZpdGF0aW9uUXVlcnkpO1xuIH1cblxuaWYob2ZmZXIuY29udGludWluZ0ludml0YXRpb24pe1xuY29uc3QgZGFwcE9yaWdpbj1cbm9mZmVyLnJlcXVlc3RDb250ZXh0JiZvZmZlci5yZXF1ZXN0Q29udGV4dC5kYXBwT3JpZ2luP1xub2ZmZXIucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbjpcbiBgdW5rbm93bmA7XG5yZXR1cm4gbWFrZUNvbnRpbnVpbmdJbnZpdGF0aW9uKFxuaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdCxcbmRhcHBPcmlnaW4sXG5vZmZlci5jb250aW51aW5nSW52aXRhdGlvbik7XG5cbiB9XG5cbnRocm93IEZhaWwgYG5vIGludml0YXRpb24gd2FzIGZvdW5kIG9yIG1hZGUgZm9yIHRoaXMgb2ZmZXIgJHtvZmZlci5pZH1gO1xuIH07JGjigI1fb25jZS5maW5kT3JNYWtlSW52aXRhdGlvbihmaW5kT3JNYWtlSW52aXRhdGlvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlSWQiOlsibWFrZUlkIl0sImZpbmRPck1ha2VJbnZpdGF0aW9uIjpbImZpbmRPck1ha2VJbnZpdGF0aW9uIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADxpTsZQAgAAUAIAADQAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2ludGVybmFsLXR5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAFXhTL6gIAACoCAAAMQAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvaXNzdWVyVGFibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBhZ29yaWMvc3RvcmUiLCIuL2ludGVybmFsLXR5cGVzLmpzIl0sImV4cG9ydHMiOlsibWFrZUlzc3VlclRhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRSxtYWtlU2NhbGFyV2Vha01hcFN0b3JlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaOKAjV9hID0+IChhc3NlcnQgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyV2Vha01hcFN0b3JlID0gJGjigI1fYSldXV1dLFtcIi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlSXNzdWVyVGFibGU9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBicmFuZFRvSXNzdWVyUmVjb3JkPW1ha2VTY2FsYXJXZWFrTWFwU3RvcmUoJ2JyYW5kJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3VlclRvSXNzdWVyUmVjb3JkPW1ha2VTY2FsYXJXZWFrTWFwU3RvcmUoJ2lzc3VlcicpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNzdWVyVGFibGU9e1xuaGFzQnlCcmFuZDpicmFuZFRvSXNzdWVyUmVjb3JkLmhhcyxcbmdldEJ5QnJhbmQ6YnJhbmRUb0lzc3VlclJlY29yZC5nZXQsXG5oYXNCeUlzc3Vlcjppc3N1ZXJUb0lzc3VlclJlY29yZC5oYXMsXG5nZXRCeUlzc3Vlcjppc3N1ZXJUb0lzc3VlclJlY29yZC5nZXQsXG4vL1xuLy9cbmluaXRJc3N1ZXI6YXN5bmMoaXNzdWVyUCxhZGRNZXRhPSh4KT0+eCk9PntcbmNvbnN0IGJyYW5kUD1FKGlzc3VlclApLmdldEJyYW5kKCk7XG5jb25zdCBicmFuZElzc3Vlck1hdGNoUD1FKGJyYW5kUCkuaXNNeUlzc3Vlcihpc3N1ZXJQKTtcbmNvbnN0IGRpc3BsYXlJbmZvUD1FKGJyYW5kUCkuZ2V0RGlzcGxheUluZm8oKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0W2lzc3VlcixicmFuZCxicmFuZElzc3Vlck1hdGNoLGRpc3BsYXlJbmZvXT1hd2FpdCBQcm9taXNlLmFsbChbXG5pc3N1ZXJQLFxuYnJhbmRQLFxuYnJhbmRJc3N1ZXJNYXRjaFAsXG5kaXNwbGF5SW5mb1BdKTtcblxuLy9cblxuaWYoaXNzdWVyVG9Jc3N1ZXJSZWNvcmQuaGFzKGlzc3Vlcikpe1xucmV0dXJuIGlzc3VlclRvSXNzdWVyUmVjb3JkLmdldChpc3N1ZXIpO1xuIH1cbmFzc2VydChcbmJyYW5kSXNzdWVyTWF0Y2gsXG4gYGlzc3VlciB3YXMgdXNpbmcgYSBicmFuZCB3aGljaCB3YXMgbm90IGl0cyBvd25gKTtcblxuaXNzdWVyVGFibGUuaW5pdElzc3VlckJ5UmVjb3JkKFxuYWRkTWV0YSh7XG5icmFuZCxcbmlzc3VlcixcbmFzc2V0S2luZDpkaXNwbGF5SW5mby5hc3NldEtpbmQsXG5kaXNwbGF5SW5mb30pKTtcblxuXG5yZXR1cm4gaXNzdWVyVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG4gfSxcbmluaXRJc3N1ZXJCeVJlY29yZDooaXNzdWVyUmVjb3JkKT0+e1xuY29uc3R7YnJhbmQsaXNzdWVyfT1pc3N1ZXJSZWNvcmQ7XG5icmFuZFRvSXNzdWVyUmVjb3JkLmluaXQoYnJhbmQsaXNzdWVyUmVjb3JkKTtcbmlzc3VlclRvSXNzdWVyUmVjb3JkLmluaXQoaXNzdWVyLGlzc3VlclJlY29yZCk7XG4gfX07XG5cblxucmV0dXJuIGlzc3VlclRhYmxlO1xuIH07JGjigI1fb25jZS5tYWtlSXNzdWVyVGFibGUobWFrZUlzc3VlclRhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VJc3N1ZXJUYWJsZSI6WyJtYWtlSXNzdWVyVGFibGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAq92NmiweAAAsHgAAMwAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvbGliLWRlaHlkcmF0ZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbImlzUGF0aCIsIm1ha2VEZWh5ZHJhdG9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRmFpbCxxLG1ha2VNYXJzaGFsLG1hcEl0ZXJhYmxlLG1ha2VMZWdhY3lNYXAsbWFrZVNjYWxhck1hcFN0b3JlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaOKAjV9hID0+IChhc3NlcnQgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wibWFrZU1hcnNoYWxcIiwgWyRo4oCNX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjigI1fYSldXSxbXCJtYXBJdGVyYWJsZVwiLCBbJGjigI1fYSA9PiAobWFwSXRlcmFibGUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibWFrZUxlZ2FjeU1hcFwiLCBbJGjigI1fYSA9PiAobWFrZUxlZ2FjeU1hcCA9ICRo4oCNX2EpXV0sW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1BhdGg9KHgpPT57XG5pZighQXJyYXkuaXNBcnJheSh4KSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxueC5sZW5ndGg+MHx8RmFpbCBgUGF0aCAke3EoeCl9IG11c3Qgbm90IGJlIGVtcHR5YDtcbmZvcihjb25zdCBuYW1lIG9mIHgpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07JGjigI1fb25jZS5pc1BhdGgoaXNQYXRoKTtcblxuY29uc3QgSU1QTE9ERV9QUkVGSVg9J0lFOic7XG5cbi8vXG4vL1xuLy9cbmNvbnN0ICAgICAgICBtYWtlRGVoeWRyYXRvcj0oaW5pdGlhbFVubmFtZWRDb3VudD0wKT0+e1xubGV0IHVubmFtZWRDb3VudD1pbml0aWFsVW5uYW1lZENvdW50O1xuXG4vL1xuY29uc3QgcGV0bmFtZUtpbmRUb01hcHBpbmc9bWFrZUxlZ2FjeU1hcCgncGV0bmFtZUtpbmQnKTtcblxuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNlYXJjaE9yZGVyPVtdO1xuXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHZhbFRvUGF0aHM9bWFrZVNjYWxhck1hcFN0b3JlKCd2YWx1ZScpO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBleHBsb2RlPShkYXRhKT0+e1xuZGF0YS5zdGFydHNXaXRoKElNUExPREVfUFJFRklYKXx8XG5GYWlsIGBleHBsb2RlZCBzdHJpbmcgJHtkYXRhfSBtdXN0IHN0YXJ0IHdpdGggJHtxKElNUExPREVfUFJFRklYKX1gO1xuY29uc3Qgc3Ryb25nbmFtZT1KU09OLnBhcnNlKGRhdGEuc2xpY2UoSU1QTE9ERV9QUkVGSVgubGVuZ3RoKSk7XG5pZighaXNQYXRoKHN0cm9uZ25hbWUpKXtcbnJldHVybiBzdHJvbmduYW1lO1xuIH1cbi8vXG5jb25zdHt2YWxUb1BldG5hbWU6cm9vdFRvUGV0bmFtZX09ZWRnZU1hcHBpbmc7XG5jb25zdCBwZXRuYW1lPXJvb3RUb1BldG5hbWUuZ2V0KHN0cm9uZ25hbWVbMF0pO1xuYXNzZXJ0KCFpc1BhdGgocGV0bmFtZSkpO1xuc3Ryb25nbmFtZVswXT1wZXRuYW1lO1xucmV0dXJuIGhhcmRlbihzdHJvbmduYW1lKTtcbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBpbXBsb2RlPShzdHJvbmduYW1lKT0+e1xuaWYoIWlzUGF0aChzdHJvbmduYW1lKSl7XG5yZXR1cm4gYCR7SU1QTE9ERV9QUkVGSVh9JHtKU09OLnN0cmluZ2lmeShzdHJvbmduYW1lKX1gO1xuIH1cblxuLy9cbmNvbnN0IHBhdGg9Wy4uLnN0cm9uZ25hbWVdO1xuLy9cbmNvbnN0e3BldG5hbWVUb1ZhbDpwZXRuYW1lVG9Sb290fT1lZGdlTWFwcGluZztcbmlmKCFwZXRuYW1lVG9Sb290LmhhcyhwYXRoWzBdKSl7XG4vL1xuRmFpbCBgRWRnZW5hbWUgZm9yICR7cShwYXRoWzBdKX0gcGV0bmFtZSBub3QgZm91bmRgO1xuIH1cbmNvbnN0IHJvb3Q9cGV0bmFtZVRvUm9vdC5nZXQocGF0aFswXSk7XG5wYXRoWzBdPXJvb3Q7XG5cbnJldHVybiBgJHtJTVBMT0RFX1BSRUZJWH0ke0pTT04uc3RyaW5naWZ5KHBhdGgpfWA7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBtYWtlTWFwcGluZz0oa2luZCx7dXNlTGVnYWN5TWFwPWZhbHNlfT17fSk9PntcbnR5cGVvZiBraW5kPT09J3N0cmluZyd8fCBga2luZCAke2tpbmR9IG11c3QgYmUgYSBzdHJpbmdgO1xuY29uc3QgbWFrZU1hcD11c2VMZWdhY3lNYXA/bWFrZUxlZ2FjeU1hcDptYWtlU2NhbGFyTWFwU3RvcmU7XG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByYXdWYWxUb1BldG5hbWU9bWFrZU1hcCgndmFsdWUnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB2YWxUb1BldG5hbWU9e1xuLi4ucmF3VmFsVG9QZXRuYW1lLFxuc2V0KGtleSx2YWwpe1xucmF3VmFsVG9QZXRuYW1lLnNldChrZXksaW1wbG9kZSh2YWwpKTtcbiB9LFxuaW5pdChrZXksdmFsKXtcbnJhd1ZhbFRvUGV0bmFtZS5pbml0KGtleSxpbXBsb2RlKHZhbCkpO1xuIH0sXG5nZXQoa2V5KXtcbnJldHVybiBleHBsb2RlKHJhd1ZhbFRvUGV0bmFtZS5nZXQoa2V5KSk7XG4gfSxcbmVudHJpZXMoKXtcbnJldHVybiBtYXBJdGVyYWJsZShyYXdWYWxUb1BldG5hbWUuZW50cmllcygpLChba2V5LHZhbF0pPT5bXG5rZXksXG5leHBsb2RlKHZhbCldKTtcblxuIH0sXG52YWx1ZXMoKXtcbnJldHVybiBtYXBJdGVyYWJsZShyYXdWYWxUb1BldG5hbWUudmFsdWVzKCksKHZhbCk9PmV4cGxvZGUodmFsKSk7XG4gfX07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmF3UGV0bmFtZVRvVmFsPW1ha2VTY2FsYXJNYXBTdG9yZSgncGV0bmFtZScpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGV0bmFtZVRvVmFsPXtcbi4uLnJhd1BldG5hbWVUb1ZhbCxcbmluaXQoa2V5LHZhbCl7XG5yZXR1cm4gcmF3UGV0bmFtZVRvVmFsLmluaXQoaW1wbG9kZShrZXkpLHZhbCk7XG4gfSxcbnNldChrZXksdmFsKXtcbnJldHVybiByYXdQZXRuYW1lVG9WYWwuc2V0KGltcGxvZGUoa2V5KSx2YWwpO1xuIH0sXG5oYXMoa2V5KXtcbnRyeXtcbnJldHVybiByYXdQZXRuYW1lVG9WYWwuaGFzKGltcGxvZGUoa2V5KSk7XG4gfWNhdGNoKGUpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfSxcbmdldChrZXkpe1xucmV0dXJuIHJhd1BldG5hbWVUb1ZhbC5nZXQoaW1wbG9kZShrZXkpKTtcbiB9LFxuZGVsZXRlKGtleSl7XG5yZXR1cm4gcmF3UGV0bmFtZVRvVmFsLmRlbGV0ZShpbXBsb2RlKGtleSkpO1xuIH0sXG5rZXlzKCl7XG5yZXR1cm4gbWFwSXRlcmFibGUocmF3UGV0bmFtZVRvVmFsLmtleXMoKSwoa2V5KT0+ZXhwbG9kZShrZXkpKTtcbiB9LFxuZW50cmllcygpe1xucmV0dXJuIG1hcEl0ZXJhYmxlKHJhd1BldG5hbWVUb1ZhbC5lbnRyaWVzKCksKFtrZXksdmFsXSk9PltcbmV4cGxvZGUoa2V5KSxcbnZhbF0pO1xuXG4gfX07XG5cblxuLypcblxuXG4gICAgICovXG5jb25zdCBhZGRQYXRoPShwYXRoLHZhbCk9PntcbmlzUGF0aChwYXRoKXx8RmFpbCBgcGF0aCAke3EocGF0aCl9IG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nc2A7XG5cbmlmKFxuIXZhbFRvUGV0bmFtZS5oYXModmFsKSYmXG4vL1xuZWRnZU1hcHBpbmcudmFsVG9QZXRuYW1lLmhhcyhwYXRoWzBdKSlcbntcbi8vXG4vL1xudmFsVG9QZXRuYW1lLmluaXQodmFsLHBhdGgpO1xuIH1cblxuLy9cbmlmKCF2YWxUb1BhdGhzLmhhcyh2YWwpKXtcbnZhbFRvUGF0aHMuaW5pdCh2YWwsaGFyZGVuKFtwYXRoXSkpO1xucmV0dXJuO1xuIH1cbmNvbnN0IHBhdGhzPXZhbFRvUGF0aHMuZ2V0KHZhbCk7XG5cbi8vXG5jb25zdCBmb3VuZD1wYXRocy5maW5kKChlbmFtZSk9PntcbmlmKGVuYW1lLmxlbmd0aCE9PXBhdGgubGVuZ3RoKXtcbnJldHVybiBmYWxzZTtcbiB9XG5mb3IobGV0IGk9MDtpPGVuYW1lLmxlbmd0aDtpKz0xKXtcbmlmKGVuYW1lW2ldIT09cGF0aFtpXSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH0pO1xuXG4vL1xuaWYoIWZvdW5kKXtcbnZhbFRvUGF0aHMuc2V0KHZhbCxoYXJkZW4oWy4uLnBhdGhzLHBhdGhdKSk7XG4gfVxuIH07XG5cbmNvbnN0IGFkZFBldG5hbWU9KHBldG5hbWUsdmFsKT0+e1xuaWYocGV0bmFtZVRvVmFsLmhhcyhwZXRuYW1lKSYmcGV0bmFtZVRvVmFsLmdldChwZXRuYW1lKT09PXZhbCl7XG5yZXR1cm47XG4gfVxuIXBldG5hbWVUb1ZhbC5oYXMocGV0bmFtZSl8fEZhaWwgYHBldG5hbWUgJHtwZXRuYW1lfSBpcyBhbHJlYWR5IGluIHVzZWA7XG4hdmFsVG9QZXRuYW1lLmhhcyh2YWwpfHxGYWlsIGB2YWwgJHt2YWx9IGFscmVhZHkgaGFzIGEgcGV0bmFtZWA7XG5wZXRuYW1lVG9WYWwuaW5pdChwZXRuYW1lLHZhbCk7XG52YWxUb1BldG5hbWUuaW5pdCh2YWwscGV0bmFtZSk7XG5cbmlmKGlzUGF0aChwZXRuYW1lKSl7XG5hZGRQYXRoKHBldG5hbWUsdmFsKTtcbiB9XG4gfTtcblxuY29uc3QgcmVuYW1lUGV0bmFtZT0ocGV0bmFtZSx2YWwpPT57XG52YWxUb1BldG5hbWUuaGFzKHZhbCl8fFxuRmFpbCBgdmFsICR7dmFsfSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBuYW1lZCwgd291bGQgeW91IGxpa2UgdG8gYWRkIGl0IGluc3RlYWQ/YDtcbiFwZXRuYW1lVG9WYWwuaGFzKHBldG5hbWUpfHxGYWlsIGBwZXRuYW1lICR7cGV0bmFtZX0gaXMgYWxyZWFkeSBpbiB1c2VgO1xuLy9cbmNvbnN0IG9sZFBldG5hbWU9dmFsVG9QZXRuYW1lLmdldCh2YWwpO1xucGV0bmFtZVRvVmFsLmRlbGV0ZShvbGRQZXRuYW1lKTtcbnZhbFRvUGV0bmFtZS5kZWxldGUodmFsKTtcblxuLy9cbnBldG5hbWVUb1ZhbC5pbml0KHBldG5hbWUsdmFsKTtcbnZhbFRvUGV0bmFtZS5pbml0KHZhbCxwZXRuYW1lKTtcbiB9O1xuXG4vKlxuXG5cblxuICAgICAqL1xuY29uc3Qgc3VnZ2VzdFBldG5hbWU9KHBldG5hbWUsdmFsKT0+e1xuaWYodmFsVG9QZXRuYW1lLmhhcyh2YWwpKXtcbi8vXG5yZXR1cm4gdmFsVG9QZXRuYW1lLmdldCh2YWwpO1xuIH1cblxuLy9cbmxldCB1bmlxdWVQYXRoPXBldG5hbWU7XG5sZXQgbm9uY2U9MjtcbndoaWxlKHBldG5hbWVUb1ZhbC5oYXModW5pcXVlUGF0aCkpe1xuLy9cbmlmKGlzUGF0aChwZXRuYW1lKSl7XG51bmlxdWVQYXRoPVsuLi5wZXRuYW1lLCBgJHtub25jZX1gXTtcbiB9ZWxzZXtcbnVuaXF1ZVBhdGg9IGAke3BldG5hbWV9JHtub25jZX1gO1xuIH1cbm5vbmNlKz0xO1xuIH1cblxuLy9cbi8vXG4vL1xuYWRkUGV0bmFtZSh1bmlxdWVQYXRoLHZhbCk7XG5yZXR1cm4gdW5pcXVlUGF0aDtcbiB9O1xuXG5jb25zdCBkZWxldGVQZXRuYW1lPShwZXRuYW1lKT0+e1xucGV0bmFtZVRvVmFsLmhhcyhwZXRuYW1lKXx8XG5GYWlsIGBwZXRuYW1lICR7cShcbnBldG5hbWUpXG4gfSBoYXMgbm90IGJlZW4gcHJldmlvdXNseSBuYW1lZCwgd291bGQgeW91IGxpa2UgdG8gYWRkIGl0IGluc3RlYWQ/YDtcblxuLy9cbmNvbnN0IHZhbD1wZXRuYW1lVG9WYWwuZ2V0KHBldG5hbWUpO1xucGV0bmFtZVRvVmFsLmRlbGV0ZShwZXRuYW1lKTtcbnZhbFRvUGV0bmFtZS5kZWxldGUodmFsKTtcbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXBwaW5nPWhhcmRlbih7XG5pbXBsb2RlLFxuZXhwbG9kZSxcbnZhbFRvUGV0bmFtZSxcbnZhbFRvUGF0aHMsXG5wZXRuYW1lVG9WYWwsXG5hZGRQZXRuYW1lLFxuYWRkUGF0aCxcbnJlbmFtZVBldG5hbWUsXG5kZWxldGVQZXRuYW1lLFxuc3VnZ2VzdFBldG5hbWUsXG5raW5kfSk7XG5cbnBldG5hbWVLaW5kVG9NYXBwaW5nLmluaXQoa2luZCxtYXBwaW5nKTtcbnJldHVybiBtYXBwaW5nO1xuIH07XG5cbmNvbnN0IGVkZ2VNYXBwaW5nPW1ha2VNYXBwaW5nKCdlZGdlJyk7XG5jb25zdCB1bm5hbWVkTWFwcGluZz1tYWtlTWFwcGluZygndW5uYW1lZCcpO1xuXG5jb25zdCBhZGRUb1VubmFtZWQ9KHZhbCk9PntcbnVubmFtZWRDb3VudCs9MTtcbmNvbnN0IHBsYWNlaG9sZGVyPSBgdW5uYW1lZC0ke3VubmFtZWRDb3VudH1gO1xudW5uYW1lZE1hcHBpbmcuYWRkUGV0bmFtZShwbGFjZWhvbGRlcix2YWwpO1xuY29uc3QgcGxhY2Vob2xkZXJOYW1lPWhhcmRlbih7XG5raW5kOid1bm5hbWVkJyxcbnBldG5hbWU6cGxhY2Vob2xkZXJ9KTtcblxucmV0dXJuIHBsYWNlaG9sZGVyTmFtZTtcbiB9O1xuXG4vL1xuLy9cbmNvbnN0IGNvbnZlcnRWYWxUb05hbWU9KHZhbCk9PntcbmZvcihsZXQgaT0wO2k8c2VhcmNoT3JkZXIubGVuZ3RoO2krPTEpe1xuY29uc3Qga2luZD1zZWFyY2hPcmRlcltpXTtcbmNvbnN0e3ZhbFRvUGV0bmFtZX09cGV0bmFtZUtpbmRUb01hcHBpbmcuZ2V0KGtpbmQpO1xuaWYodmFsVG9QZXRuYW1lLmhhcyh2YWwpKXtcbnJldHVybiBoYXJkZW4oe1xua2luZCxcbnBldG5hbWU6dmFsVG9QZXRuYW1lLmdldCh2YWwpfSk7XG5cbiB9XG4gfVxuLy9cbi8vXG5pZih1bm5hbWVkTWFwcGluZy52YWxUb1BldG5hbWUuaGFzKHZhbCkpe1xucmV0dXJuIGhhcmRlbih7XG5raW5kOid1bm5hbWVkJyxcbnBldG5hbWU6dW5uYW1lZE1hcHBpbmcudmFsVG9QZXRuYW1lLmdldCh2YWwpfSk7XG5cbiB9XG4vL1xuY29uc3QgcGxhY2Vob2xkZXJOYW1lPWFkZFRvVW5uYW1lZCh2YWwpO1xucmV0dXJuIHBsYWNlaG9sZGVyTmFtZTtcbiB9O1xuXG5jb25zdCBjb252ZXJ0TmFtZVRvVmFsPSh7a2luZCxwZXRuYW1lfSxfaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7cGV0bmFtZVRvVmFsfT1wZXRuYW1lS2luZFRvTWFwcGluZy5nZXQoa2luZCk7XG5yZXR1cm4gcGV0bmFtZVRvVmFsLmdldChwZXRuYW1lKTtcbiB9O1xuXG5jb25zdHt0b0NhcERhdGE6ZGVoeWRyYXRlLGZyb21DYXBEYXRhOmh5ZHJhdGV9PW1ha2VNYXJzaGFsKFxuY29udmVydFZhbFRvTmFtZSxcbmNvbnZlcnROYW1lVG9WYWwsXG57XG5tYXJzaGFsTmFtZTonaHlkcmF0aW9uJyxcbi8vXG4vL1xuZXJyb3JJZE51bTozMF8wMDAsXG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5oeWRyYXRlLFxuZGVoeWRyYXRlLFxuZWRnZU1hcHBpbmcsXG4vKlxuXG5cblxuXG4gICAgICovXG5tYWtlTWFwcGluZzooa2luZCxsZWdhY3lPcHRpb25zPXVuZGVmaW5lZCk9PntcbmNvbnN0IG1hcHBpbmc9bWFrZU1hcHBpbmcoa2luZCxsZWdhY3lPcHRpb25zKTtcbnNlYXJjaE9yZGVyLnB1c2goa2luZCk7XG5yZXR1cm4gbWFwcGluZztcbiB9fSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZURlaHlkcmF0b3IobWFrZURlaHlkcmF0b3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQYXRoIjpbImlzUGF0aCJdLCJtYWtlRGVoeWRyYXRvciI6WyJtYWtlRGVoeWRyYXRvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAADQ+o3kaUAAJGlAAAwAAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9saWItd2FsbGV0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvY2FjaGUiLCJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL2VydHAiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL25hdCIsIkBhZ29yaWMvbm90aWZpZXIiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBhZ29yaWMvc21hcnQtd2FsbGV0L3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzIiwiLi9pc3N1ZXJUYWJsZS5qcyIsIi4vbGliLWRlaHlkcmF0ZS5qcyIsIi4vZmluZE9yTWFrZUludml0YXRpb24uanMiLCIuL2JpZ2ludFN0cmluZ2lmeS5qcyIsIi4vYWN0aW9ucy5qcyIsIi4vaW50ZXJuYWwtdHlwZXMuanMiXSwiZXhwb3J0cyI6WyJtYWtlV2FsbGV0Um9vdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LHEsRmFpbCxtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvcixvYmplY3RNYXAsV2FsbGV0TmFtZSxzbG90U3RyaW5nVW5zZXJpYWxpemUsbWFrZUxlZ2FjeU1hcCxtYWtlU2NhbGFyTWFwU3RvcmUsbWFrZVNjYWxhcldlYWtNYXBTdG9yZSxtYWtlU2NhbGFyQmlnTWFwU3RvcmUsQW1vdW50TWF0aCxFLHBhc3NTdHlsZU9mLEZhcixtYXBJdGVyYWJsZSxOYXQsbWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIsbWFrZU5vdGlmaWVyS2l0LG9ic2VydmVJdGVyYXRpb24sb2JzZXJ2ZU5vdGlmaWVyLHN1YnNjcmliZUVhY2gsbWFrZVByb21pc2VLaXQsbWFrZUV4cG9ydENvbnRleHQsbWFrZUlzc3VlclRhYmxlLG1ha2VEZWh5ZHJhdG9yLG1ha2VJZCxmaW5kT3JNYWtlSW52aXRhdGlvbixiaWdpbnRTdHJpbmdpZnksbWFrZVBheW1lbnRBY3Rpb25zOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaOKAjV9hID0+IChhc3NlcnQgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9jYWNoZVwiLCBbW1wibWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3JcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjigI1fYSA9PiAob2JqZWN0TWFwID0gJGjigI1fYSldXSxbXCJXYWxsZXROYW1lXCIsIFskaOKAjV9hID0+IChXYWxsZXROYW1lID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qc1wiLCBbW1wic2xvdFN0cmluZ1Vuc2VyaWFsaXplXCIsIFskaOKAjV9hID0+IChzbG90U3RyaW5nVW5zZXJpYWxpemUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibWFrZUxlZ2FjeU1hcFwiLCBbJGjigI1fYSA9PiAobWFrZUxlZ2FjeU1hcCA9ICRo4oCNX2EpXV0sW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaOKAjV9hKV1dLFtcIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyQmlnTWFwU3RvcmUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaOKAjV9hID0+IChBbW91bnRNYXRoID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV0sW1wibWFwSXRlcmFibGVcIiwgWyRo4oCNX2EgPT4gKG1hcEl0ZXJhYmxlID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaOKAjV9hID0+IChOYXQgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXJcIiwgWyRo4oCNX2EgPT4gKG1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyID0gJGjigI1fYSldXSxbXCJtYWtlTm90aWZpZXJLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VOb3RpZmllcktpdCA9ICRo4oCNX2EpXV0sW1wib2JzZXJ2ZUl0ZXJhdGlvblwiLCBbJGjigI1fYSA9PiAob2JzZXJ2ZUl0ZXJhdGlvbiA9ICRo4oCNX2EpXV0sW1wib2JzZXJ2ZU5vdGlmaWVyXCIsIFskaOKAjV9hID0+IChvYnNlcnZlTm90aWZpZXIgPSAkaOKAjV9hKV1dLFtcInN1YnNjcmliZUVhY2hcIiwgWyRo4oCNX2EgPT4gKHN1YnNjcmliZUVhY2ggPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL3NtYXJ0LXdhbGxldC9zcmMvbWFyc2hhbC1jb250ZXh0cy5qc1wiLCBbW1wibWFrZUV4cG9ydENvbnRleHRcIiwgWyRo4oCNX2EgPT4gKG1ha2VFeHBvcnRDb250ZXh0ID0gJGjigI1fYSldXV1dLFtcIi4vaXNzdWVyVGFibGUuanNcIiwgW1tcIm1ha2VJc3N1ZXJUYWJsZVwiLCBbJGjigI1fYSA9PiAobWFrZUlzc3VlclRhYmxlID0gJGjigI1fYSldXV1dLFtcIi4vbGliLWRlaHlkcmF0ZS5qc1wiLCBbW1wibWFrZURlaHlkcmF0b3JcIiwgWyRo4oCNX2EgPT4gKG1ha2VEZWh5ZHJhdG9yID0gJGjigI1fYSldXV1dLFtcIi4vZmluZE9yTWFrZUludml0YXRpb24uanNcIiwgW1tcIm1ha2VJZFwiLCBbJGjigI1fYSA9PiAobWFrZUlkID0gJGjigI1fYSldXSxbXCJmaW5kT3JNYWtlSW52aXRhdGlvblwiLCBbJGjigI1fYSA9PiAoZmluZE9yTWFrZUludml0YXRpb24gPSAkaOKAjV9hKV1dXV0sW1wiLi9iaWdpbnRTdHJpbmdpZnkuanNcIiwgW1tcImJpZ2ludFN0cmluZ2lmeVwiLCBbJGjigI1fYSA9PiAoYmlnaW50U3RyaW5naWZ5ID0gJGjigI1fYSldXV1dLFtcIi4vYWN0aW9ucy5qc1wiLCBbW1wibWFrZVBheW1lbnRBY3Rpb25zXCIsIFskaOKAjV9hID0+IChtYWtlUGF5bWVudEFjdGlvbnMgPSAkaOKAjV9hKV1dXV0sW1wiLi9pbnRlcm5hbC10eXBlcy5qc1wiLCBbXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZVdhbGxldFJvb3QsICduYW1lJywge3ZhbHVlOiBcIm1ha2VXYWxsZXRSb290XCJ9KTskaOKAjV9vbmNlLm1ha2VXYWxsZXRSb290KG1ha2VXYWxsZXRSb290KTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG5jb25zdCBub0FjdGlvblN0YXRlQ2hhbmdlSGFuZGxlcj0oX25ld1N0YXRlKT0+eyB9O1xuXG5jb25zdCBjbXA9KGEsYik9PntcbmlmKGE+Yil7XG5yZXR1cm4gMTtcbiB9XG5pZihhPT09Yil7XG5yZXR1cm4gMDtcbiB9XG5yZXR1cm4tMTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZVdhbGxldFJvb3Qoe1xuem9lLFxuYm9hcmQsXG5hZ29yaWNOYW1lcyxcbm5hbWVzQnlBZGRyZXNzLFxubXlBZGRyZXNzTmFtZUFkbWluLFxucHVyc2VzU3RhdGVDaGFuZ2VIYW5kbGVyPW5vQWN0aW9uU3RhdGVDaGFuZ2VIYW5kbGVyLFxuaW5ib3hTdGF0ZUNoYW5nZUhhbmRsZXI9bm9BY3Rpb25TdGF0ZUNoYW5nZUhhbmRsZXIsXG5kYXRlTm93PXVuZGVmaW5lZH0pXG57XG5hc3NlcnQobXlBZGRyZXNzTmFtZUFkbWluLCdtaXNzaW5nIG15QWRkcmVzc05hbWVBZG1pbicpO1xuXG5sZXQgbGFzdElkPTA7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhZGRNZXRhPShyZWNvcmQpPT57XG5jb25zdHttZXRhOm9sZE1ldGE9e319PXJlY29yZDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1ldGE9ey4uLm9sZE1ldGF9O1xuaWYoIW1ldGEuaWQpe1xuLy9cbmxhc3RJZCs9MTtcbm1ldGEuaWQ9bGFzdElkO1xuIH1cbmlmKGRhdGVOb3cpe1xuY29uc3Qgbm93U3RhbXA9ZGF0ZU5vdygpO1xuaWYoIW1ldGEuY3JlYXRpb25TdGFtcCl7XG4vL1xubWV0YS5jcmVhdGlvblN0YW1wPW5vd1N0YW1wO1xuIH1cbm1ldGEudXBkYXRlZFN0YW1wPW5vd1N0YW1wO1xuIH1cbnJldHVybnsuLi5yZWNvcmQsbWV0YX07XG4gfTtcblxuY29uc3QgY29udGV4dD1tYWtlRXhwb3J0Q29udGV4dCgpO1xuXG4vL1xuLy9cbmNvbnN0e21ha2VNYXBwaW5nLGRlaHlkcmF0ZSxlZGdlTWFwcGluZ309bWFrZURlaHlkcmF0b3IoKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZU1hcHBpbmc9bWFrZU1hcHBpbmcoJ3B1cnNlJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRNYXBwaW5nPW1ha2VNYXBwaW5nKCdicmFuZCcpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29udGFjdE1hcHBpbmc9bWFrZU1hcHBpbmcoXG4nY29udGFjdCcsXG57dXNlTGVnYWN5TWFwOnRydWV9Ly9cbik7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5zdGFuY2VNYXBwaW5nPW1ha2VNYXBwaW5nKCdpbnN0YW5jZScpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnN0YWxsYXRpb25NYXBwaW5nPW1ha2VNYXBwaW5nKCdpbnN0YWxsYXRpb24nKTtcblxuY29uc3QgYnJhbmRUYWJsZT1tYWtlSXNzdWVyVGFibGUoKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3VlclRvQm9hcmRJZD1tYWtlU2NhbGFyV2Vha01hcFN0b3JlKCdpc3N1ZXInKTtcblxuLy9cbmNvbnN0IGluaXRJc3N1ZXJUb0JvYXJkSWQ9YXN5bmMoaXNzdWVyLGJyYW5kKT0+e1xuaWYoaXNzdWVyVG9Cb2FyZElkLmhhcyhpc3N1ZXIpKXtcbi8vXG5yZXR1cm4gaXNzdWVyVG9Cb2FyZElkLmdldChpc3N1ZXIpO1xuIH1cblxuLy9cbmNvbnN0W2lzc3VlckJvYXJkSWQsYnJhbmRCb2FyZElkXT1hd2FpdCBQcm9taXNlLmFsbChbXG5FKGJvYXJkKS5nZXRJZChpc3N1ZXIpLFxuRShib2FyZCkuZ2V0SWQoYnJhbmQpXSk7XG5cbmlmKGlzc3VlclRvQm9hcmRJZC5oYXMoaXNzdWVyKSl7XG4vL1xucmV0dXJuIGlzc3VlclRvQm9hcmRJZC5nZXQoaXNzdWVyKTtcbiB9XG5cbi8vXG4vL1xuY29udGV4dC5lbnN1cmVCb2FyZElkKGlzc3VlckJvYXJkSWQsaXNzdWVyKTtcbmNvbnRleHQuaW5pdEJvYXJkSWQoYnJhbmRCb2FyZElkLGJyYW5kKTtcblxuLy9cbmlzc3VlclRvQm9hcmRJZC5pbml0KGlzc3Vlcixpc3N1ZXJCb2FyZElkKTtcbnJldHVybiBpc3N1ZXJCb2FyZElkO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZVRvQnJhbmQ9bWFrZVNjYWxhcldlYWtNYXBTdG9yZSgncHVyc2UnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBicmFuZFRvRGVwb3NpdEZhY2V0SWQ9bWFrZVNjYWxhck1hcFN0b3JlKCdicmFuZCcpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2U9bWFrZVNjYWxhck1hcFN0b3JlKCdicmFuZCcpO1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpZFRvT2ZmZXI9bWFrZVNjYWxhck1hcFN0b3JlKCdvZmZlcklkJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdD1tYWtlTGVnYWN5TWFwKCdpZCcpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGludml0YXRpb25IYW5kbGVUb09mZmVyUmVzdWx0PVxubWFrZVNjYWxhcldlYWtNYXBTdG9yZSgnaW52aXRhdGlvbkhhbmRsZScpO1xuXG4vL1xuY29uc3QgaWRUb0NvbXBpbGVkT2ZmZXJQPW5ldyBNYXAoKTtcbmNvbnN0IGlkVG9Db21wbGV0ZT1uZXcgTWFwKCk7XG5jb25zdCBpZFRvU2VhdD1uZXcgTWFwKCk7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZXNTdGF0ZT1uZXcgTWFwKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVyc2VzRnVsbFN0YXRlPW5ldyBNYXAoKTtcbmNvbnN0IGluYm94U3RhdGU9bmV3IE1hcCgpO1xuXG4vKlxuXG5cblxuICAgKi9cbmxldCB6b2VJbnZpdGVQdXJzZTtcblxuY29uc3QgWk9FX0lOVklURV9CUkFORF9QRVROQU1FPSd6b2UgaW52aXRlJztcblxuZnVuY3Rpb24gZ2V0U29ydGVkVmFsdWVzKG1hcCl7XG5jb25zdCBlbnRyaWVzPVsuLi5tYXAuZW50cmllcygpXTtcbi8vXG5jb25zdCB2YWx1ZXM9ZW50cmllcy5cbnNvcnQoKFtpZDFdLFtpZDJdKT0+Y21wKGlkMSxpZDIpKS5cbm1hcCgoW19pZCx2YWx1ZV0pPT52YWx1ZSk7XG5cbnJldHVybiBiaWdpbnRTdHJpbmdpZnkoaGFyZGVuKHZhbHVlcykpO1xuIH1cblxuZnVuY3Rpb24gZ2V0UHVyc2VzU3RhdGUoKXtcbnJldHVybiBnZXRTb3J0ZWRWYWx1ZXMocHVyc2VzU3RhdGUpO1xuIH1cblxuZnVuY3Rpb24gZ2V0SW5ib3hTdGF0ZSgpe1xucmV0dXJuIGdldFNvcnRlZFZhbHVlcyhpbmJveFN0YXRlKTtcbiB9XG5cbi8vXG4vL1xuLy9cbmNvbnN0IGZpbGxJblNsb3RzPXNsb3RTdHJpbmdVbnNlcmlhbGl6ZTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3R7bm90aWZpZXI6b2ZmZXJzTm90aWZpZXIsdXBkYXRlcjpvZmZlcnNVcGRhdGVyfT1tYWtlTm90aWZpZXJLaXQoXG5bXSk7XG5cblxuY29uc3R7cHVyc2VzTm90aWZpZXIsYXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyLHB1cnNlc1VwZGF0ZXJ9PSgoKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdHtub3RpZmllcjppcG4sdXBkYXRlcjppcHV9PW1ha2VOb3RpZmllcktpdChbXSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0e25vdGlmaWVyOmFwbix1cGRhdGVyOmFwdX09bWFrZU5vdGlmaWVyS2l0KFtdKTtcbi8vXG4vKlxuXG5cbiAgICAgKi9cbmNvbnN0IGlubmVyRmlsdGVyPSh7XG5icmFuZCxcbmJyYW5kQm9hcmRJZCxcbmRlcG9zaXRCb2FyZElkLFxuYnJhbmRQZXRuYW1lLFxucHVyc2VQZXRuYW1lLFxuZGlzcGxheUluZm8sXG52YWx1ZSxcbmN1cnJlbnRBbW91bnRTbG90cyxcbmN1cnJlbnRBbW91bnR9KT0+XG5cbmhhcmRlbih7XG5icmFuZCxcbmJyYW5kQm9hcmRJZCxcbi4uLihkZXBvc2l0Qm9hcmRJZCYme2RlcG9zaXRCb2FyZElkfSksXG5icmFuZFBldG5hbWUsXG5wdXJzZVBldG5hbWUsXG4uLi4oZGlzcGxheUluZm8mJntkaXNwbGF5SW5mb30pLFxudmFsdWUsXG5jdXJyZW50QW1vdW50U2xvdHMsXG5jdXJyZW50QW1vdW50fSk7XG5cbmNvbnN0IGZpbHRlcj0oc3RhdGUpPT5zdGF0ZS5tYXAoaW5uZXJGaWx0ZXIpO1xuY29uc3QgcHU9RmFyKCdwdXJzZXNVcGRhdGVyJyx7XG51cGRhdGVTdGF0ZToobmV3U3RhdGUpPT57XG5pcHUudXBkYXRlU3RhdGUobmV3U3RhdGUpO1xuYXB1LnVwZGF0ZVN0YXRlKGZpbHRlcihuZXdTdGF0ZSkpO1xuIH0sXG5maW5pc2g6KGZpbmFsU3RhdGUpPT57XG5pcHUuZmluaXNoKGZpbmFsU3RhdGUpO1xuYXB1LmZpbmlzaChmaWx0ZXIoZmluYWxTdGF0ZSkpO1xuIH0sXG5mYWlsOihyZWFzb24pPT57XG5pcHUuZmFpbChyZWFzb24pO1xuYXB1LmZhaWwocmVhc29uKTtcbiB9fSk7XG5cbnJldHVybiBoYXJkZW4oe1xucHVyc2VzTm90aWZpZXI6aXBuLFxuYXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyOmFwbixcbnB1cnNlc1VwZGF0ZXI6cHV9KTtcblxuIH0pKCk7XG5cbi8qXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVB1cnNlc1N0YXRlKHB1cnNlUGV0bmFtZSxwdXJzZSl7XG5jb25zdCBwdXJzZUtleT1wdXJzZU1hcHBpbmcuaW1wbG9kZShwdXJzZVBldG5hbWUpO1xuZm9yKGNvbnN0IGtleSBvZiBwdXJzZXNTdGF0ZS5rZXlzKCkpe1xuaWYoIXB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuaGFzKHB1cnNlTWFwcGluZy5leHBsb2RlKGtleSkpKXtcbnB1cnNlc1N0YXRlLmRlbGV0ZShrZXkpO1xuIH1cbiB9XG5jb25zdCBjdXJyZW50QW1vdW50PWF3YWl0IEUocHVyc2UpLmdldEN1cnJlbnRBbW91bnQoKTtcbmNvbnN0e3ZhbHVlLGJyYW5kfT1jdXJyZW50QW1vdW50O1xuY29uc3QgYnJhbmRQZXRuYW1lPWJyYW5kTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KGJyYW5kKTtcbmNvbnN0IGRlaHlkcmF0ZWRDdXJyZW50QW1vdW50PWRlaHlkcmF0ZShjdXJyZW50QW1vdW50KTtcbmNvbnN0IGJyYW5kQm9hcmRJZD1hd2FpdCBFKGJvYXJkKS5nZXRJZChicmFuZCk7XG5cbmxldCBkZXBvc2l0Qm9hcmRJZDtcbmlmKFxuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaGFzKGJyYW5kKSYmXG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5nZXQoYnJhbmQpPT09cHVyc2UmJlxuYnJhbmRUb0RlcG9zaXRGYWNldElkLmhhcyhicmFuZCkpXG57XG4vL1xuZGVwb3NpdEJvYXJkSWQ9YnJhbmRUb0RlcG9zaXRGYWNldElkLmdldChicmFuZCk7XG4gfVxuXG5jb25zdCBpc3N1ZXJSZWNvcmQ9XG5icmFuZFRhYmxlLmhhc0J5QnJhbmQoYnJhbmQpJiZicmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xuLypcblxuICAgICAqL1xuY29uc3QganN0YXRlPWFkZE1ldGEoe1xuLi4ucHVyc2VzU3RhdGUuZ2V0KHB1cnNlS2V5KSxcbmJyYW5kLFxuYnJhbmRCb2FyZElkLFxuLi4uKGRlcG9zaXRCb2FyZElkJiZ7ZGVwb3NpdEJvYXJkSWR9KSxcbmJyYW5kUGV0bmFtZSxcbnB1cnNlUGV0bmFtZSxcbmRpc3BsYXlJbmZvOmlzc3VlclJlY29yZCYmaXNzdWVyUmVjb3JkLmRpc3BsYXlJbmZvLFxudmFsdWUsXG5jdXJyZW50QW1vdW50U2xvdHM6ZGVoeWRyYXRlZEN1cnJlbnRBbW91bnQsXG5jdXJyZW50QW1vdW50OmZpbGxJblNsb3RzKGRlaHlkcmF0ZWRDdXJyZW50QW1vdW50KX0pO1xuXG5wdXJzZXNTdGF0ZS5zZXQocHVyc2VLZXksanN0YXRlKTtcblxucHVyc2VzRnVsbFN0YXRlLnNldChcbnB1cnNlLFxuaGFyZGVuKHtcbi4uLmpzdGF0ZSxcbnB1cnNlLFxuYnJhbmQsXG5hY3Rpb25zOkZhcigncHVyc2UuYWN0aW9ucycse1xuLy9cbiAgICAgIGFzeW5jIHNlbmQocmVjZWl2ZXJQLHNlbmRWYWx1ZSl7XG5jb25zdCBhbW91bnQ9QW1vdW50TWF0aC5tYWtlKGJyYW5kLHNlbmRWYWx1ZSk7XG5jb25zdCBwYXltZW50PWF3YWl0IEUocHVyc2UpLndpdGhkcmF3KGFtb3VudCk7XG50cnl7XG5hd2FpdCBFKHJlY2VpdmVyUCkucmVjZWl2ZShwYXltZW50KTtcbiB9Y2F0Y2goZSl7XG4vL1xuYXdhaXQgRShwdXJzZSkuZGVwb3NpdChwYXltZW50KTtcbnRocm93IGU7XG4gfVxuIH0sXG4gICAgICBhc3luYyByZWNlaXZlKHBheW1lbnRQKXtcbmNvbnN0IHBheW1lbnQ9YXdhaXQgcGF5bWVudFA7XG5yZXR1cm4gRShwdXJzZSkuZGVwb3NpdChwYXltZW50KTtcbiB9LFxuZGVwb3NpdChwYXltZW50LGFtb3VudD11bmRlZmluZWQpe1xucmV0dXJuIEUocHVyc2UpLmRlcG9zaXQocGF5bWVudCxhbW91bnQpO1xuIH19KX0pKTtcblxuXG5cbnB1cnNlc1VwZGF0ZXIudXBkYXRlU3RhdGUoWy4uLnB1cnNlc0Z1bGxTdGF0ZS52YWx1ZXMoKV0pO1xucHVyc2VzU3RhdGVDaGFuZ2VIYW5kbGVyKGdldFB1cnNlc1N0YXRlKCkpO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWxsUHVyc2VTdGF0ZSgpe1xucmV0dXJuIFByb21pc2UuYWxsKFxubWFwSXRlcmFibGUocHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCksKFtwZXRuYW1lLHB1cnNlXSk9PlxudXBkYXRlUHVyc2VzU3RhdGUocGV0bmFtZSxwdXJzZSkpKTtcblxuXG4gfVxuXG5jb25zdCBkaXNwbGF5PSh2YWx1ZSk9PmZpbGxJblNsb3RzKGRlaHlkcmF0ZShoYXJkZW4odmFsdWUpKSk7XG5cbmNvbnN0IGV4cGFuZEludml0YXRpb25CcmFuZHM9YXN5bmMoaW52aXRhdGlvbkRldGFpbHMpPT57XG4vL1xuY29uc3R7ZmVlfT1pbnZpdGF0aW9uRGV0YWlscztcbmlmKCFmZWUpe1xucmV0dXJuIGludml0YXRpb25EZXRhaWxzO1xuIH1cblxuLy9cbmNvbnN0IGRpc3BsYXlJbmZvPWF3YWl0IEUoRSh6b2UpLmdldEZlZUlzc3VlcigpKS5nZXREaXNwbGF5SW5mbygpO1xuY29uc3QgYXVnbWVudGVkRGV0YWlscz17XG4uLi5pbnZpdGF0aW9uRGV0YWlscyxcbmZlZTp7Li4uZmVlLGRpc3BsYXlJbmZvfX07XG5cbnJldHVybiBkaXNwbGF5KGF1Z21lbnRlZERldGFpbHMpO1xuIH07XG5cbmNvbnN0IGRpc3BsYXlQcm9wb3NhbD0ocHJvcG9zYWxUZW1wbGF0ZSk9PntcbmNvbnN0e1xud2FudCxcbmdpdmUsXG5leGl0PXtvbkRlbWFuZDpudWxsfSxcbmFyZ3VtZW50czphcmdzfT1cbnByb3Bvc2FsVGVtcGxhdGU7XG5jb25zdCBkaXNwbGF5UmVjb3JkPShwdXJzZVBldG5hbWVWYWx1ZUtleXdvcmRSZWNvcmQpPT57XG5pZihwdXJzZVBldG5hbWVWYWx1ZUtleXdvcmRSZWNvcmQ9PT11bmRlZmluZWQpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5yZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuT2JqZWN0LmVudHJpZXMocHVyc2VQZXRuYW1lVmFsdWVLZXl3b3JkUmVjb3JkKS5tYXAoXG4oW2tleXdvcmQse3B1cnNlUGV0bmFtZSx2YWx1ZSxhbW91bnQscHVyc2V9XSk9PntcbmlmKCFhbW91bnQpe1xuLy9cbnB1cnNlPWdldFB1cnNlKHB1cnNlUGV0bmFtZSk7XG5hbW91bnQ9e3ZhbHVlfTtcbiB9ZWxzZXtcbnB1cnNlUGV0bmFtZT1wdXJzZU1hcHBpbmcudmFsVG9QZXRuYW1lLmdldChwdXJzZSk7XG4gfVxuXG5jb25zdCBicmFuZD1wdXJzZVRvQnJhbmQuZ2V0KHB1cnNlKTtcbmNvbnN0IGlzc3VlclJlY29yZD1cbmJyYW5kVGFibGUuaGFzQnlCcmFuZChicmFuZCkmJmJyYW5kVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG5hbW91bnQ9aGFyZGVuKHtcbi4uLmFtb3VudCxcbmJyYW5kLFxuZGlzcGxheUluZm86aXNzdWVyUmVjb3JkJiZpc3N1ZXJSZWNvcmQuZGlzcGxheUluZm99KTtcblxuY29uc3QgZGlzcGxheUFtb3VudD1kaXNwbGF5KGFtb3VudCk7XG5yZXR1cm5bXG5rZXl3b3JkLFxue1xucHVyc2VQZXRuYW1lLFxucHVyc2UsXG5hbW91bnQ6ZGlzcGxheUFtb3VudH1dO1xuXG5cbiB9KSk7XG5cblxuIH07XG5jb25zdCBwcm9wb3NhbEZvckRpc3BsYXk9e1xud2FudDpkaXNwbGF5UmVjb3JkKHdhbnQpLFxuZ2l2ZTpkaXNwbGF5UmVjb3JkKGdpdmUpLFxuZXhpdH07XG5cbmlmKGFyZ3MhPT11bmRlZmluZWQpe1xucHJvcG9zYWxGb3JEaXNwbGF5LmFyZ3VtZW50cz1kaXNwbGF5KGFyZ3MpO1xuIH1cbnJldHVybiBwcm9wb3NhbEZvckRpc3BsYXk7XG4gfTtcblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJ1bmVPZmZlcldoZW5JbmFjdGl2ZT0oaWQpPT57XG5hc3NlcnQoaW5ib3hTdGF0ZS5oYXMoaWQpKTtcbmNvbnN0IG9mZmVyPWluYm94U3RhdGUuZ2V0KGlkKTtcbmNvbnN0e3N0YXR1c309b2ZmZXI7XG5cbnN3aXRjaChzdGF0dXMpe1xuY2FzZSdkZWNsaW5lJzpcbmNhc2UnY2FuY2VsJzpcbmNhc2UncmVqZWN0ZWQnOlxuaW5ib3hTdGF0ZS5kZWxldGUoaWQpO1xucmV0dXJuO1xuY2FzZSdhY2NlcHQnOlxuYXNzZXJ0KGlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQuaGFzKGlkKSk7XG52b2lkIEUud2hlbihpZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LmdldChpZCkucHJvbWlzZSwocmVzdWx0KT0+e1xuY29uc3Qgc3R5bGU9cGFzc1N0eWxlT2YocmVzdWx0KTtcbmNvbnN0IGFjdGl2ZT1cbnN0eWxlPT09J3JlbW90YWJsZSd8fFxuc3R5bGU9PT0nY29weVJlY29yZCcmJidpbnZpdGF0aW9uTWFrZXJzJ2luIHJlc3VsdDtcbmlmKCFhY3RpdmUpe1xuaW5ib3hTdGF0ZS5kZWxldGUoaWQpO1xuIH1cbiB9KTtcbmJyZWFrO1xuY2FzZSdwZW5kaW5nJzpcbmNhc2UnY29tcGxldGUnOlxuZGVmYXVsdDp9XG5cbiB9O1xuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVJbmJveFN0YXRlKGlkLG9mZmVyLGRvUHVzaD10cnVlKXtcbi8vXG5jb25zdHtwcm9wb3NhbFRlbXBsYXRlfT1vZmZlcjtcbmNvbnN0e2luc3RhbmNlLGluc3RhbGxhdGlvbixpbnZpdGF0aW9uRGV0YWlsc309aWRUb09mZmVyLmdldChpZCk7XG5pZighaW5zdGFuY2V8fCFpbnN0YWxsYXRpb24pe1xuLy9cbi8vXG5yZXR1cm47XG4gfVxuY29uc3QgaW5zdGFuY2VEaXNwbGF5PWRpc3BsYXkoaW5zdGFuY2UpO1xuY29uc3QgaW5zdGFsbGF0aW9uRGlzcGxheT1kaXNwbGF5KGluc3RhbGxhdGlvbik7XG5jb25zdCBhbHJlYWR5RGlzcGxheWVkPVxuaW5ib3hTdGF0ZS5oYXMoaWQpJiZpbmJveFN0YXRlLmdldChpZCkucHJvcG9zYWxGb3JEaXNwbGF5O1xuXG5jb25zdCBhdWdtZW50ZWRJbnZpdGF0aW9uRGV0YWlscz1cbmF3YWl0IGV4cGFuZEludml0YXRpb25CcmFuZHMoaW52aXRhdGlvbkRldGFpbHMpO1xuXG5jb25zdCBvZmZlckZvckRpc3BsYXk9e1xuLi4ub2ZmZXIsXG4vL1xuLy9cbi8vXG5hY3Rpb25zOnVuZGVmaW5lZCxcbmluc3RhbGxhdGlvbjp1bmRlZmluZWQsXG5pbnN0YW5jZTp1bmRlZmluZWQsXG5wcm9wb3NhbFRlbXBsYXRlLFxuaW52aXRhdGlvbkRldGFpbHM6ZGlzcGxheShhdWdtZW50ZWRJbnZpdGF0aW9uRGV0YWlscyksXG5pbnN0YW5jZVBldG5hbWU6aW5zdGFuY2VEaXNwbGF5LnBldG5hbWUsXG5pbnN0YWxsYXRpb25QZXRuYW1lOmluc3RhbGxhdGlvbkRpc3BsYXkucGV0bmFtZSxcbnByb3Bvc2FsRm9yRGlzcGxheTpkaXNwbGF5UHJvcG9zYWwoYWxyZWFkeURpc3BsYXllZHx8cHJvcG9zYWxUZW1wbGF0ZSl9O1xuXG5cbmluYm94U3RhdGUuc2V0KGlkLG9mZmVyRm9yRGlzcGxheSk7XG5pZihkb1B1c2gpe1xuLy9cbm9mZmVyc1VwZGF0ZXIudXBkYXRlU3RhdGUoW29mZmVyRm9yRGlzcGxheV0pO1xuaW5ib3hTdGF0ZUNoYW5nZUhhbmRsZXIoZ2V0SW5ib3hTdGF0ZSgpKTtcbiB9XG5wcnVuZU9mZmVyV2hlbkluYWN0aXZlKGlkKTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUFsbEluYm94U3RhdGUoKXtcbmF3YWl0IFByb21pc2UuYWxsKFxuQXJyYXkuZnJvbShpbmJveFN0YXRlLmVudHJpZXMoKSkubWFwKChbaWQsb2ZmZXJdKT0+XG4vL1xudXBkYXRlSW5ib3hTdGF0ZShpZCxvZmZlcixmYWxzZSkpKTtcblxuXG4vL1xub2ZmZXJzVXBkYXRlci51cGRhdGVTdGF0ZShbLi4uaW5ib3hTdGF0ZS52YWx1ZXMoKV0pO1xuaW5ib3hTdGF0ZUNoYW5nZUhhbmRsZXIoZ2V0SW5ib3hTdGF0ZSgpKTtcbiB9XG5cbmNvbnN0e3VwZGF0ZXI6aXNzdWVyc1VwZGF0ZXIsbm90aWZpZXI6aXNzdWVyc05vdGlmaWVyfT1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubWFrZU5vdGlmaWVyS2l0KFtdKTtcblxuXG5mdW5jdGlvbiB1cGRhdGVBbGxJc3N1ZXJzU3RhdGUoKXtcbmlzc3VlcnNVcGRhdGVyLnVwZGF0ZVN0YXRlKFxuWy4uLmJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcygpXS5tYXAoKFtwZXRuYW1lLGJyYW5kXSk9PntcbmNvbnN0IGlzc3VlclJlY29yZD1icmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xucmV0dXJuW1xucGV0bmFtZSxcbntcbi4uLmlzc3VlclJlY29yZCxcbmlzc3VlckJvYXJkSWQ6aXNzdWVyVG9Cb2FyZElkLmdldChpc3N1ZXJSZWNvcmQuaXNzdWVyKX1dO1xuXG5cbiB9KSk7XG5cbiB9XG5cbi8vXG4vL1xuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWxsU3RhdGUoKXtcbnVwZGF0ZUFsbElzc3VlcnNTdGF0ZSgpO1xuYXdhaXQgdXBkYXRlQWxsUHVyc2VTdGF0ZSgpO1xuYXdhaXQgdXBkYXRlQWxsSW5ib3hTdGF0ZSgpO1xuIH1cblxuLy9cbi8vXG5mdW5jdGlvbiB1cGRhdGVPclJlc3Vic2NyaWJlKGlkLHNlYXQsdXBkYXRlKXtcbmNvbnN0e3VwZGF0ZUNvdW50fT11cGRhdGU7XG5hc3NlcnQodXBkYXRlQ291bnQ9PT11bmRlZmluZWQpO1xuaWRUb1NlYXQuZGVsZXRlKGlkKTtcblxuY29uc3Qgb2ZmZXI9aWRUb09mZmVyLmdldChpZCk7XG5jb25zdCBjb21wbGV0ZWRPZmZlcj1hZGRNZXRhKHtcbi4uLm9mZmVyLFxuc3RhdHVzOidjb21wbGV0ZSd9KTtcblxuaWRUb09mZmVyLnNldChpZCxjb21wbGV0ZWRPZmZlcik7XG52b2lkIHVwZGF0ZUluYm94U3RhdGUoaWQsY29tcGxldGVkT2ZmZXIpO1xuIH1cblxuLypcblxuXG5cblxuICAgKi9cbmZ1bmN0aW9uIHN1YnNjcmliZVRvVXBkYXRlcyhpZCxzZWF0KXtcbnJldHVybiBFKEUoc2VhdCkuZ2V0RXhpdFN1YnNjcmliZXIoKSkuXG5zdWJzY3JpYmVBZnRlcigpLlxudGhlbigodXBkYXRlKT0+dXBkYXRlT3JSZXN1YnNjcmliZShpZCxzZWF0LHVwZGF0ZSkpO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY3V0ZU9mZmVyKGNvbXBpbGVkT2ZmZXJQKXtcbi8vXG4vL1xuLy9cbmNvbnN0e1xuaW52aXRlUCxcbnB1cnNlS2V5d29yZFJlY29yZCxcbnByb3Bvc2FsLFxuYXJndW1lbnRzOmFyZ3N9PVxuYXdhaXQgY29tcGlsZWRPZmZlclA7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwYXltZW50VG9QdXJzZT1uZXcgTWFwKCk7XG5cbi8vXG4vL1xuY29uc3Qga2V5d29yZFBheW1lbnRQcz1PYmplY3QuZW50cmllcyhwcm9wb3NhbC5naXZlfHxoYXJkZW4oe30pKS5tYXAoXG5hc3luYyhba2V5d29yZCxhbW91bnRdKT0+e1xuY29uc3QgcHVyc2U9cHVyc2VLZXl3b3JkUmVjb3JkW2tleXdvcmRdO1xucHVyc2UhPT11bmRlZmluZWR8fFxuRmFpbCBgcHVyc2Ugd2FzIG5vdCBmb3VuZCBmb3Iga2V5d29yZCAke3Eoa2V5d29yZCl9YDtcblxuY29uc3QgcGF5bWVudD1hd2FpdCBFKHB1cnNlKS53aXRoZHJhdyhhbW91bnQpO1xucGF5bWVudFRvUHVyc2Uuc2V0KHBheW1lbnQscHVyc2UpO1xucmV0dXJuW2tleXdvcmQscGF5bWVudF07XG4gfSk7XG5cblxuLy9cbi8vXG5jb25zdCB0cnlSZWNsYWltaW5nV2l0aGRyYXduUGF5bWVudHM9KCk9PlxuLy9cbi8vXG5Qcm9taXNlLmFsbFNldHRsZWQoXG5rZXl3b3JkUGF5bWVudFBzLm1hcChhc3luYyhrZXl3b3JkUGF5bWVudFApPT57XG4vL1xuLy9cbmNvbnN0W19rZXl3b3JkLHBheW1lbnRdPWF3YWl0IGtleXdvcmRQYXltZW50UDtcblxuLy9cbmNvbnN0IHB1cnNlPXBheW1lbnRUb1B1cnNlLmdldChwYXltZW50KTtcbmlmKHB1cnNlPT09dW5kZWZpbmVkKXtcbi8vXG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLy9cbnRyeXtcbi8vXG5yZXR1cm4gYWRkUGF5bWVudChwYXltZW50LHB1cnNlKTtcbiB9ZmluYWxseXtcbi8vXG5wYXltZW50VG9QdXJzZS5kZWxldGUocGF5bWVudCk7XG4gfVxuIH0pKTtcblxuXG4vL1xuLy9cbmNvbnN0IHdpdGhkcmF3QWxsUGF5bWVudHM9UHJvbWlzZS5hbGwoa2V5d29yZFBheW1lbnRQcyk7XG53aXRoZHJhd0FsbFBheW1lbnRzLmNhdGNoKHRyeVJlY2xhaW1pbmdXaXRoZHJhd25QYXltZW50cyk7XG5cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuY29uc3QgcGF5bWVudEtleXdvcmRzPWF3YWl0IHdpdGhkcmF3QWxsUGF5bWVudHM7XG5cbmNvbnN0IHBheW1lbnRLZXl3b3JkUmVjb3JkPWhhcmRlbihPYmplY3QuZnJvbUVudHJpZXMocGF5bWVudEtleXdvcmRzKSk7XG5cbmNvbnN0IHNlYXQ9RSh6b2UpLm9mZmVyKFxuaW52aXRlUCxcbmhhcmRlbihwcm9wb3NhbCksXG5wYXltZW50S2V5d29yZFJlY29yZCxcbmFyZ3MpO1xuXG4vL1xuLy9cbnZvaWQgc2VhdC5maW5hbGx5KHRyeVJlY2xhaW1pbmdXaXRoZHJhd25QYXltZW50cyk7XG5cbi8vXG4vL1xuY29uc3QgZGVwb3NpdGVkUD1FKHNlYXQpLlxuZ2V0UGF5b3V0cygpLlxudGhlbigocGF5b3V0T2JqKT0+e1xucmV0dXJuIFByb21pc2UuYWxsKFxuT2JqZWN0LmVudHJpZXMocGF5b3V0T2JqKS5tYXAoKFtrZXl3b3JkLHBheW91dFBdKT0+e1xuLy9cbi8vXG5jb25zdCBwdXJzZU9yVW5kZWZpbmVkPXB1cnNlS2V5d29yZFJlY29yZFtrZXl3b3JkXTtcblxuLy9cbnJldHVybiBhZGRQYXltZW50KHBheW91dFAscHVyc2VPclVuZGVmaW5lZCk7XG4gfSkpO1xuXG4gfSk7XG5cbi8vXG4vL1xuLy9cbnZvaWQgZGVwb3NpdGVkUC5maW5hbGx5KHRyeVJlY2xhaW1pbmdXaXRoZHJhd25QYXltZW50cyk7XG5cbi8vXG4vL1xucmV0dXJue2RlcG9zaXRlZFAsc2VhdH07XG4gfVxuXG4vL1xuXG5jb25zdCBhZGRJc3N1ZXI9YXN5bmMocGV0bmFtZUZvckJyYW5kLGlzc3VlclAsbWFrZVB1cnNlPWZhbHNlKT0+e1xuY29uc3QgaXNzdWVyPWF3YWl0IGlzc3VlclA7XG5jb25zdCByZWNQPWJyYW5kVGFibGUuaGFzQnlJc3N1ZXIoaXNzdWVyKT9cbmJyYW5kVGFibGUuZ2V0QnlJc3N1ZXIoaXNzdWVyKTpcbmJyYW5kVGFibGUuaW5pdElzc3Vlcihpc3N1ZXIsYWRkTWV0YSk7XG5jb25zdHticmFuZH09YXdhaXQgcmVjUDtcbmF3YWl0IGluaXRJc3N1ZXJUb0JvYXJkSWQoaXNzdWVyLGJyYW5kKTtcbmNvbnN0IGFkZEJyYW5kUGV0bmFtZT0oKT0+e1xubGV0IHA7XG5jb25zdCBhbHJlYWR5PWJyYW5kTWFwcGluZy52YWxUb1BldG5hbWUuaGFzKGJyYW5kKTtcbnBldG5hbWVGb3JCcmFuZD1icmFuZE1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZUZvckJyYW5kLGJyYW5kKTtcbmlmKCFhbHJlYWR5JiZtYWtlUHVyc2Upe1xuLy9cbnA9bWFrZUVtcHR5UHVyc2UocGV0bmFtZUZvckJyYW5kLHBldG5hbWVGb3JCcmFuZCx0cnVlKTtcbiB9ZWxzZXtcbnA9UHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gfVxucmV0dXJuIEUud2hlbihwLChfKT0+cGV0bmFtZUZvckJyYW5kKTtcbiB9O1xucmV0dXJuIGFkZEJyYW5kUGV0bmFtZSgpLnRoZW4oYXN5bmMoYnJhbmROYW1lKT0+e1xuYXdhaXQgdXBkYXRlQWxsSXNzdWVyc1N0YXRlKCk7XG5yZXR1cm4gYnJhbmROYW1lO1xuIH0pO1xuIH07XG5cbmNvbnN0IHB1Ymxpc2hJc3N1ZXI9YXN5bmMoYnJhbmQpPT57XG5jb25zdHtpc3N1ZXJ9PWJyYW5kVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG5jb25zdCBpc3N1ZXJCb2FyZElkPWF3YWl0IGluaXRJc3N1ZXJUb0JvYXJkSWQoaXNzdWVyLGJyYW5kKTtcbnVwZGF0ZUFsbElzc3VlcnNTdGF0ZSgpO1xucmV0dXJuIGlzc3VlckJvYXJkSWQ7XG4gfTtcblxuY29uc3R7dXBkYXRlcjpjb250YWN0c1VwZGF0ZXIsbm90aWZpZXI6Y29udGFjdHNOb3RpZmllcn09XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubWFrZU5vdGlmaWVyS2l0KFtdKTtcblxuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IGFkZENvbnRhY3Q9YXN5bmMocGV0bmFtZSxhY3Rpb25zLGFkZHJlc3M9dW5kZWZpbmVkKT0+e1xuLy9cbmNvbnN0IGFscmVhZHk9YXdhaXQgRShib2FyZCkuaGFzKGFjdGlvbnMpO1xuLyogICAgICAgICAgICAgICovXG5sZXQgZGVwb3NpdEZhY2V0O1xuaWYoYWxyZWFkeSl7XG5kZXBvc2l0RmFjZXQ9YWN0aW9ucztcbiB9ZWxzZXtcbmRlcG9zaXRGYWNldD1GYXIoV2FsbGV0TmFtZS5kZXBvc2l0RmFjZXQse1xucmVjZWl2ZShwYXltZW50UCl7XG5yZXR1cm4gRShhY3Rpb25zKS5yZWNlaXZlKHBheW1lbnRQKTtcbiB9fSk7XG5cbiB9XG5jb25zdCBkZXBvc2l0Qm9hcmRJZD1hd2FpdCBFKGJvYXJkKS5nZXRJZChkZXBvc2l0RmFjZXQpO1xuY29uc3QgZm91bmQ9Wy4uLmNvbnRhY3RNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCldLmZpbmQoXG4oW19wbix7ZGVwb3NpdEJvYXJkSWQ6ZGJpZH1dKT0+ZGVwb3NpdEJvYXJkSWQ9PT1kYmlkKTtcblxuIWZvdW5kfHxcbkZhaWwgYCR7cShmb3VuZCYmZm91bmRbMF0pfSBpcyBhbHJlYWR5IHRoZSBwZXRuYW1lIGZvciBib2FyZCBJRCAke3EoXG5kZXBvc2l0Qm9hcmRJZClcbiB9YDtcblxuY29uc3QgY29udGFjdD1oYXJkZW4oXG5hZGRNZXRhKHtcbmFjdGlvbnMsXG5hZGRyZXNzLFxuZGVwb3NpdEJvYXJkSWR9KSk7XG5cblxuXG5jb250YWN0TWFwcGluZy5zdWdnZXN0UGV0bmFtZShwZXRuYW1lLGNvbnRhY3QpO1xuY29udGFjdHNVcGRhdGVyLnVwZGF0ZVN0YXRlKFsuLi5jb250YWN0TWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcygpXSk7XG5yZXR1cm4gY29udGFjdDtcbiB9O1xuXG5jb25zdCBhZGRJbnN0YW5jZT0ocGV0bmFtZSxpbnN0YW5jZUhhbmRsZSk9Pntcbi8vXG4vL1xuLy9cbnBldG5hbWU9aW5zdGFuY2VNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKHBldG5hbWUsaW5zdGFuY2VIYW5kbGUpO1xuLy9cbnZvaWQgdXBkYXRlQWxsU3RhdGUoKTtcbnJldHVybiBgaW5zdGFuY2UgJHtxKHBldG5hbWUpfSBzdWNjZXNzZnVsbHkgYWRkZWQgdG8gd2FsbGV0YDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgaW50ZXJuYWxVbnNhZmVJbXBvcnRQdXJzZT1hc3luYyhcbmJyYW5kUGV0bmFtZSxcbnBldG5hbWVGb3JQdXJzZSxcbmRlZmF1bHRBdXRvRGVwb3NpdCxcbnB1cnNlVG9JbXBvcnQpPT5cbntcbmNvbnN0IGJyYW5kPWJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KGJyYW5kUGV0bmFtZSk7XG5jb25zdHtpc3N1ZXJ9PWJyYW5kVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG5cbi8qICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZT1hd2FpdChwdXJzZVRvSW1wb3J0fHxFKGlzc3VlcikubWFrZUVtcHR5UHVyc2UoKSk7XG5cbnB1cnNlVG9CcmFuZC5pbml0KHB1cnNlLGJyYW5kKTtcbnBldG5hbWVGb3JQdXJzZT1wdXJzZU1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZUZvclB1cnNlLHB1cnNlKTtcblxuaWYoZGVmYXVsdEF1dG9EZXBvc2l0JiYhYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaGFzKGJyYW5kKSl7XG4vL1xuLy9cbi8vXG5hd2FpdCBkb0VuYWJsZUF1dG9EZXBvc2l0KHBldG5hbWVGb3JQdXJzZSxmYWxzZSk7XG4gfVxuXG5hd2FpdCB1cGRhdGVQdXJzZXNTdGF0ZShwZXRuYW1lRm9yUHVyc2UscHVyc2UpO1xuXG4vL1xudm9pZCBvYnNlcnZlTm90aWZpZXIoRShwdXJzZSkuZ2V0Q3VycmVudEFtb3VudE5vdGlmaWVyKCkse1xudXBkYXRlU3RhdGUoX2JhbGFuY2Upe1xudXBkYXRlUHVyc2VzU3RhdGUocHVyc2VNYXBwaW5nLnZhbFRvUGV0bmFtZS5nZXQocHVyc2UpLHB1cnNlKS5jYXRjaChcbihlKT0+Y29uc29sZS5lcnJvcignY2Fubm90IHVwZGF0ZVN0YXRlJyxlKSk7XG5cbiB9LFxuZmFpbChyZWFzb24pe1xuY29uc29sZS5lcnJvciggYGZhaWxlZCB1cGRhdGVTdGF0ZSBvYnNlcnZlcmAscmVhc29uKTtcbiB9fSk7XG5cblxucmV0dXJuIHBldG5hbWVGb3JQdXJzZTtcbiB9O1xuXG4vL1xuLypcblxuXG5cbiAgICovXG5jb25zdCBtYWtlRW1wdHlQdXJzZT0oXG5icmFuZFBldG5hbWUsXG5wZXRuYW1lRm9yUHVyc2UsXG5kZWZhdWx0QXV0b0RlcG9zaXQ9dHJ1ZSk9PlxuXG5pbnRlcm5hbFVuc2FmZUltcG9ydFB1cnNlKFxuYnJhbmRQZXRuYW1lLFxucGV0bmFtZUZvclB1cnNlLFxuZGVmYXVsdEF1dG9EZXBvc2l0LFxudW5kZWZpbmVkKTtcblxuXG4vKlxuXG5cbiAgICovXG5hc3luYyBmdW5jdGlvbiBkZXBvc2l0KHB1cnNlUGV0bmFtZSxwYXltZW50KXtcbmNvbnN0IHB1cnNlPXB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHB1cnNlUGV0bmFtZSk7XG5yZXR1cm4gRShwdXJzZSkuZGVwb3NpdChwYXltZW50KTtcbiB9XG5cbmZ1bmN0aW9uIGdldFB1cnNlcygpe1xucmV0dXJuWy4uLnB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcygpXTtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnVuY3Rpb24gZ2V0UHVyc2UocHVyc2VQZXRuYW1lKXtcbnJldHVybiBwdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldChwdXJzZVBldG5hbWUpO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5mdW5jdGlvbiBnZXRQdXJzZUlzc3VlcihwdXJzZVBldG5hbWUpe1xuY29uc3QgcHVyc2U9cHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocHVyc2VQZXRuYW1lKTtcbmNvbnN0IGJyYW5kPXB1cnNlVG9CcmFuZC5nZXQocHVyc2UpO1xuY29uc3R7aXNzdWVyfT1icmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xucmV0dXJuIGlzc3VlcjtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5mdW5jdGlvbiBnZXRPZmZlcnMoe29yaWdpbj1udWxsfT17fSl7XG4vL1xucmV0dXJuWy4uLmlkVG9PZmZlci5lbnRyaWVzKCldLlxuZmlsdGVyKFxuKFtfaWQsb2ZmZXJdKT0+XG5vcmlnaW49PT1udWxsfHxcbm9mZmVyLnJlcXVlc3RDb250ZXh0JiZvZmZlci5yZXF1ZXN0Q29udGV4dC5kYXBwT3JpZ2luPT09b3JpZ2luKS5cblxuc29ydCgoW2lkMV0sW2lkMl0pPT5jbXAoaWQxLGlkMikpLlxubWFwKChbX2lkLG9mZmVyXSk9PmhhcmRlbihvZmZlcikpO1xuIH1cblxuY29uc3QgY29tcGlsZVByb3Bvc2FsPShwcm9wb3NhbFRlbXBsYXRlKT0+e1xuY29uc3R7XG53YW50PWhhcmRlbih7fSksXG5naXZlPWhhcmRlbih7fSksXG5leGl0PXtvbkRlbWFuZDpudWxsfSxcbmFyZ3VtZW50czphcmdzfT1cbnByb3Bvc2FsVGVtcGxhdGU7XG5cbmNvbnN0IHB1cnNlS2V5d29yZFJlY29yZD17fTtcblxuY29uc3QgY29tcGlsZT0oYW1vdW50S2V5d29yZFJlY29yZCk9PntcbnJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG5PYmplY3QuZW50cmllcyhhbW91bnRLZXl3b3JkUmVjb3JkKS5tYXAoXG4oW2tleXdvcmQse3B1cnNlUGV0bmFtZSx2YWx1ZX1dKT0+e1xuLy9cbmlmKHR5cGVvZiB2YWx1ZT09PSdudW1iZXInKXtcbnZhbHVlPU5hdCh2YWx1ZSk7XG4gfVxuY29uc3QgcHVyc2U9Z2V0UHVyc2UocHVyc2VQZXRuYW1lKTtcbnB1cnNlS2V5d29yZFJlY29yZFtrZXl3b3JkXT1wdXJzZTtcbmNvbnN0IGJyYW5kPXB1cnNlVG9CcmFuZC5nZXQocHVyc2UpO1xuXG5yZXR1cm5ba2V5d29yZCx7YnJhbmQsdmFsdWV9XTtcbiB9KSk7XG5cblxuIH07XG5cbmNvbnN0IHByb3Bvc2FsPXtcbndhbnQ6Y29tcGlsZSh3YW50KSxcbmdpdmU6Y29tcGlsZShnaXZlKSxcbmV4aXR9O1xuXG5cbnJldHVybntwcm9wb3NhbCxhcmd1bWVudHM6YXJncyxwdXJzZUtleXdvcmRSZWNvcmR9O1xuIH07XG5cbmNvbnN0IGNvbXBpbGVPZmZlcj1hc3luYyhvZmZlcik9PntcbmNvbnN0e1xucHJvcG9zYWwsXG5wdXJzZUtleXdvcmRSZWNvcmQsXG5hcmd1bWVudHM6YXJnc309XG5jb21waWxlUHJvcG9zYWwob2ZmZXIucHJvcG9zYWxUZW1wbGF0ZSk7XG5cbi8vXG5jb25zdCB6b2VJc3N1ZXI9aXNzdWVyTWFuYWdlci5nZXQoWk9FX0lOVklURV9CUkFORF9QRVROQU1FKTtcbmNvbnN0e2JyYW5kOmludml0YXRpb25CcmFuZH09YnJhbmRUYWJsZS5nZXRCeUlzc3Vlcih6b2VJc3N1ZXIpO1xuY29uc3QgaW52aXRhdGlvblA9ZmluZE9yTWFrZUludml0YXRpb24oXG5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LFxuYm9hcmQsXG56b2UsXG56b2VJbnZpdGVQdXJzZSxcbmludml0YXRpb25CcmFuZCxcbm9mZmVyKTtcblxuXG5jb25zdCBpbnZpdGF0aW9uRGV0YWlscz1hd2FpdCBFKHpvZSkuZ2V0SW52aXRhdGlvbkRldGFpbHMoaW52aXRhdGlvblApO1xuY29uc3R7aW5zdGFsbGF0aW9uLGluc3RhbmNlfT1pbnZpdGF0aW9uRGV0YWlscztcblxuY29uc3QgY29tcGlsZWQ9e1xuYXJndW1lbnRzOmFyZ3MsXG5wcm9wb3NhbCxcbmludml0ZVA6aW52aXRhdGlvblAsXG5wdXJzZUtleXdvcmRSZWNvcmQsXG5pbnZpdGF0aW9uRGV0YWlscyxcbmluc3RhbGxhdGlvbixcbmluc3RhbmNlfTtcblxucmV0dXJuIGNvbXBpbGVkO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRhcHBPcmlnaW5zPW1ha2VTY2FsYXJNYXBTdG9yZSgnZGFwcE9yaWdpbicpO1xuY29uc3R7bm90aWZpZXI6ZGFwcHNOb3RpZmllcix1cGRhdGVyOmRhcHBzVXBkYXRlcn09XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZU5vdGlmaWVyS2l0KFtdKTtcblxuY29uc3QgdXBkYXRlRGFwcD0oZGFwcFJlY29yZCk9PntcbmhhcmRlbihhZGRNZXRhKGRhcHBSZWNvcmQpKTtcbmRhcHBPcmlnaW5zLnNldChkYXBwUmVjb3JkLm9yaWdpbixkYXBwUmVjb3JkKTtcbmRhcHBzVXBkYXRlci51cGRhdGVTdGF0ZShbLi4uZGFwcE9yaWdpbnMudmFsdWVzKCldKTtcbiB9O1xuXG5jb25zdCBkZWxldGVEYXBwPSh7b3JpZ2lufSk9PntcbmRhcHBPcmlnaW5zLmRlbGV0ZShvcmlnaW4pO1xuZGFwcHNVcGRhdGVyLnVwZGF0ZVN0YXRlKFsuLi5kYXBwT3JpZ2lucy52YWx1ZXMoKV0pO1xuIH07XG5cbmNvbnN0IHNoYXJlZENhY2hlQ29vcmRpbmF0b3I9bWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3IoXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmUoIGBzaGFyZWQgY2FjaGVgKSk7XG5cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckRhcHBBcHByb3ZhbChcbnN1Z2dlc3RlZFBldG5hbWUsXG5vcmlnaW4sXG5ub3RZZXRFbmFibGVkPSgpPT57IH0pXG57XG5sZXQgZGFwcFJlY29yZDtcbmlmKGRhcHBPcmlnaW5zLmhhcyhvcmlnaW4pKXtcbmRhcHBSZWNvcmQ9ZGFwcE9yaWdpbnMuZ2V0KG9yaWdpbik7XG4gfWVsc2V7XG5sZXQgcmVzb2x2ZTtcbmxldCByZWplY3Q7XG5sZXQgYXBwcm92YWxQO1xuXG5jb25zdCBjYWNoZUNvb3JkaW5hdG9yPW1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yKFxubWFrZVNjYWxhckJpZ01hcFN0b3JlKCBgb3JpZ2luICR7b3JpZ2lufSBjYWNoZWApKTtcblxuZGFwcFJlY29yZD1hZGRNZXRhKHtcbnN1Z2dlc3RlZFBldG5hbWUsXG5wZXRuYW1lOnN1Z2dlc3RlZFBldG5hbWUsXG5vcmlnaW4sXG5jYWNoZUNvb3JkaW5hdG9yLFxuYXBwcm92YWxQLFxuZW5hYmxlOmZhbHNlLFxuYWN0aW9uczpGYXIoJ2RhcHAuYWN0aW9ucycse1xuc2V0UGV0bmFtZShwZXRuYW1lKXtcbmlmKGRhcHBSZWNvcmQucGV0bmFtZT09PXBldG5hbWUpe1xucmV0dXJuIGRhcHBSZWNvcmQuYWN0aW9ucztcbiB9XG5pZihlZGdlTWFwcGluZy52YWxUb1BldG5hbWUuaGFzKG9yaWdpbikpe1xuZWRnZU1hcHBpbmcucmVuYW1lUGV0bmFtZShwZXRuYW1lLG9yaWdpbik7XG4gfWVsc2V7XG5wZXRuYW1lPWVkZ2VNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKHBldG5hbWUsb3JpZ2luKTtcbiB9XG5kYXBwUmVjb3JkPWFkZE1ldGEoe1xuLi4uZGFwcFJlY29yZCxcbnBldG5hbWV9KTtcblxudXBkYXRlRGFwcChkYXBwUmVjb3JkKTtcbnZvaWQgdXBkYXRlQWxsU3RhdGUoKTtcbnJldHVybiBkYXBwUmVjb3JkLmFjdGlvbnM7XG4gfSxcbmVuYWJsZSgpe1xuLy9cbmRhcHBSZWNvcmQ9YWRkTWV0YSh7XG4uLi5kYXBwUmVjb3JkLFxuZW5hYmxlOnRydWV9KTtcblxuZWRnZU1hcHBpbmcuc3VnZ2VzdFBldG5hbWUoZGFwcFJlY29yZC5wZXRuYW1lLG9yaWdpbik7XG51cGRhdGVEYXBwKGRhcHBSZWNvcmQpO1xuXG4vL1xucmVzb2x2ZSgpO1xucmV0dXJuIGRhcHBSZWNvcmQuYWN0aW9ucztcbiB9LFxuZGlzYWJsZShyZWFzb249dW5kZWZpbmVkKXtcbi8vXG5pZihyZWplY3Qpe1xucmVqZWN0KHJlYXNvbik7XG4gfVxuLy9cbih7cmVzb2x2ZSxyZWplY3QscHJvbWlzZTphcHByb3ZhbFB9PW1ha2VQcm9taXNlS2l0KCkpO1xuZGFwcFJlY29yZD1hZGRNZXRhKHtcbi4uLmRhcHBSZWNvcmQsXG5lbmFibGU6ZmFsc2UsXG5hcHByb3ZhbFB9KTtcblxudXBkYXRlRGFwcChkYXBwUmVjb3JkKTtcbnJldHVybiBkYXBwUmVjb3JkLmFjdGlvbnM7XG4gfSxcbmRlbGV0ZSgpe1xuaWYocmVqZWN0KXtcbnJlamVjdCgnRGFwcCBkZWxldGVkJyk7XG4gfVxuZGVsZXRlRGFwcChkYXBwUmVjb3JkKTtcbiB9fSl9KTtcblxuXG5cbi8vXG5kYXBwT3JpZ2lucy5pbml0KG9yaWdpbixkYXBwUmVjb3JkKTtcblxuLy9cbmRhcHBSZWNvcmQuYWN0aW9ucy5kaXNhYmxlKCk7XG4gfVxuXG5pZighZGFwcFJlY29yZC5lbmFibGUpe1xubm90WWV0RW5hYmxlZCgpO1xuIH1cbmF3YWl0IGRhcHBSZWNvcmQuYXBwcm92YWxQO1xuLy9cbi8vXG5yZXR1cm4gZGFwcE9yaWdpbnMuZ2V0KG9yaWdpbik7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBhZGRPZmZlcihyYXdPZmZlcixyZXF1ZXN0Q29udGV4dD17fSl7XG5jb25zdCBkYXBwT3JpZ2luPVxucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbnx8cmVxdWVzdENvbnRleHQub3JpZ2lufHwndW5rbm93bic7XG5jb25zdHtpZDpyYXdJZH09cmF3T2ZmZXI7XG5jb25zdCBpZD1tYWtlSWQoZGFwcE9yaWdpbixyYXdJZCk7XG5jb25zdCBvZmZlcj1oYXJkZW4oXG5hZGRNZXRhKHtcbi4uLnJhd09mZmVyLFxucmF3SWQsXG5pZCxcbnJlcXVlc3RDb250ZXh0OnsuLi5yZXF1ZXN0Q29udGV4dCxkYXBwT3JpZ2lufSxcbnN0YXR1czp1bmRlZmluZWR9KSk7XG5cblxuaWRUb09mZmVyLmluaXQoaWQsb2ZmZXIpO1xuaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5pbml0KGlkLG1ha2VQcm9taXNlS2l0KCkpO1xuYXdhaXQgdXBkYXRlSW5ib3hTdGF0ZShpZCxvZmZlcik7XG5cbi8vXG5jb25zdCBjb21waWxlZE9mZmVyUD1jb21waWxlT2ZmZXIob2ZmZXIpO1xuaWRUb0NvbXBpbGVkT2ZmZXJQLnNldChpZCxjb21waWxlZE9mZmVyUCk7XG5cbi8vXG5hd2FpdCB1cGRhdGVJbmJveFN0YXRlKGlkLGlkVG9PZmZlci5nZXQoaWQpKTtcbmNvbnN0e2luc3RhbGxhdGlvbixpbnN0YW5jZSxpbnZpdGF0aW9uRGV0YWlsc309YXdhaXQgY29tcGlsZWRPZmZlclA7XG5cbmlmKCFpZFRvT2ZmZXIuaGFzKGlkKSl7XG5yZXR1cm4gcmF3SWQ7XG4gfVxuaWRUb09mZmVyLnNldChcbmlkLFxuaGFyZGVuKFxuYWRkTWV0YSh7XG4uLi5pZFRvT2ZmZXIuZ2V0KGlkKSxcbmluc3RhbGxhdGlvbixcbmluc3RhbmNlLFxuaW52aXRhdGlvbkRldGFpbHN9KSkpO1xuXG5cblxuYXdhaXQgdXBkYXRlSW5ib3hTdGF0ZShpZCxpZFRvT2ZmZXIuZ2V0KGlkKSk7XG5yZXR1cm4gcmF3SWQ7XG4gfVxuXG5mdW5jdGlvbiBjb25zdW1tYXRlZChvZmZlcil7XG5pZihvZmZlci5zdGF0dXMhPT11bmRlZmluZWQpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYob2ZmZXIuYWN0aW9ucyl7XG5FKG9mZmVyLmFjdGlvbnMpLmhhbmRsZWQob2ZmZXIpO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGRlY2xpbmVPZmZlcihpZCl7XG5jb25zdCBvZmZlcj1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmlmKGNvbnN1bW1hdGVkKG9mZmVyKSl7XG5yZXR1cm47XG4gfVxuXG4vL1xuY29uc3QgZGVjbGluZWRPZmZlcj1hZGRNZXRhKHtcbi4uLm9mZmVyLFxuc3RhdHVzOidkZWNsaW5lJ30pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLGRlY2xpbmVkT2ZmZXIpO1xudm9pZCB1cGRhdGVJbmJveFN0YXRlKGlkLGRlY2xpbmVkT2ZmZXIpO1xuXG4vL1xuY29uc3QgY29tcGlsZWRPZmZlclA9aWRUb0NvbXBpbGVkT2ZmZXJQLmdldChpZCk7XG5pZighY29tcGlsZWRPZmZlclApe1xucmV0dXJuO1xuIH1cblxuLy9cbmF3YWl0IGFkZFBheW1lbnQoRS5nZXQoY29tcGlsZWRPZmZlclApLmludml0ZVApLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gY2FuY2VsT2ZmZXIoaWQpe1xuY29uc3QgY29tcGxldGVGbj1pZFRvQ29tcGxldGUuZ2V0KGlkKTtcbmlmKCFjb21wbGV0ZUZuKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbmNvbXBsZXRlRm4oKS5cbnRoZW4oKF8pPT57XG5pZFRvQ29tcGxldGUuZGVsZXRlKGlkKTtcbmNvbnN0IG9mZmVyPWlkVG9PZmZlci5nZXQoaWQpO1xuY29uc3QgY2FuY2VsbGVkT2ZmZXI9YWRkTWV0YSh7XG4uLi5vZmZlcixcbnN0YXR1czonY2FuY2VsJ30pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLGNhbmNlbGxlZE9mZmVyKTtcbnJldHVybiB1cGRhdGVJbmJveFN0YXRlKGlkLGNhbmNlbGxlZE9mZmVyKTtcbiB9KS5cbmNhdGNoKChlKT0+Y29uc29sZS5lcnJvciggYENhbm5vdCBjYW5jZWwgb2ZmZXIgJHtpZH06YCxlKSk7XG5cbnJldHVybiB0cnVlO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gYWNjZXB0T2ZmZXIoaWQpe1xuY29uc3Qgb2ZmZXI9aWRUb09mZmVyLmdldChpZCk7XG5pZihjb25zdW1tYXRlZChvZmZlcikpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmV0PXt9O1xubGV0IGFscmVhZHlSZXNvbHZlZD1mYWxzZTtcbmNvbnN0IHJlamVjdGVkPShlKT0+e1xuaWYoYWxyZWFkeVJlc29sdmVkKXtcbnJldHVybjtcbiB9XG5jb25zdCByZWplY3RPZmZlcj1hZGRNZXRhKHtcbi4uLm9mZmVyLFxuc3RhdHVzOidyZWplY3RlZCcsXG5lcnJvcjogYCR7ZX1gfSk7XG5cbmlkVG9PZmZlci5zZXQoaWQscmVqZWN0T2ZmZXIpO1xudm9pZCB1cGRhdGVJbmJveFN0YXRlKGlkLHJlamVjdE9mZmVyKTtcbiB9O1xuXG5hd2FpdCBudWxsO1xudHJ5e1xuY29uc3QgcGVuZGluZ09mZmVyPWFkZE1ldGEoe1xuLi4ub2ZmZXIsXG5zdGF0dXM6J3BlbmRpbmcnfSk7XG5cbmlkVG9PZmZlci5zZXQoaWQscGVuZGluZ09mZmVyKTtcbnZvaWQgdXBkYXRlSW5ib3hTdGF0ZShpZCxwZW5kaW5nT2ZmZXIpO1xuY29uc3QgY29tcGlsZWRPZmZlcj1hd2FpdCBpZFRvQ29tcGlsZWRPZmZlclAuZ2V0KGlkKTtcblxuY29uc3R7ZGVwb3NpdGVkUCxzZWF0fT1hd2FpdCBleGVjdXRlT2ZmZXIoY29tcGlsZWRPZmZlcik7XG5cbmlkVG9Db21wbGV0ZS5zZXQoaWQsKCk9PntcbmFscmVhZHlSZXNvbHZlZD10cnVlO1xucmV0dXJuIEUoc2VhdCkudHJ5RXhpdCgpO1xuIH0pO1xuaWRUb1NlYXQuc2V0KGlkLHNlYXQpO1xuLy9cbi8vXG52b2lkIEUoc2VhdCkuXG5oYXNFeGl0ZWQoKS5cbnRoZW4oKGV4aXRlZCk9PntcbmlmKCFleGl0ZWQpe1xucmV0dXJuIHN1YnNjcmliZVRvVXBkYXRlcyhpZCxzZWF0KTtcbiB9XG4gfSk7XG5cbmNvbnN0IG9mZmVyUmVzdWx0UD1FKHNlYXQpLmdldE9mZmVyUmVzdWx0KCk7XG5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LmdldChpZCkucmVzb2x2ZShvZmZlclJlc3VsdFApO1xuXG5yZXQ9e1xuZGVwb3NpdGVkUCxcbmRhcHBDb250ZXh0Om9mZmVyLmRhcHBDb250ZXh0fTtcblxuXG4vL1xuZGVwb3NpdGVkUC5cbnRoZW4oKF8pPT57XG4vL1xuaWYoIWFscmVhZHlSZXNvbHZlZCl7XG5hbHJlYWR5UmVzb2x2ZWQ9dHJ1ZTtcbmNvbnN0IGFjY2VwdGVkT2ZmZXI9YWRkTWV0YSh7XG4uLi5wZW5kaW5nT2ZmZXIsXG5zdGF0dXM6J2FjY2VwdCd9KTtcblxuaWRUb09mZmVyLnNldChpZCxhY2NlcHRlZE9mZmVyKTtcbnZvaWQgdXBkYXRlSW5ib3hTdGF0ZShpZCxhY2NlcHRlZE9mZmVyKTtcbiB9XG4gfSkuXG5jYXRjaChyZWplY3RlZCk7XG4gfWNhdGNoKGUpe1xuaWYob2ZmZXIuYWN0aW9ucyl7XG5FKG9mZmVyLmFjdGlvbnMpLmVycm9yKG9mZmVyLGUpO1xuIH1cbnJlamVjdGVkKGUpO1xudGhyb3cgZTtcbiB9XG5yZXR1cm4gcmV0O1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaWRUb1BheW1lbnRSZWNvcmQ9bWFrZVNjYWxhck1hcFN0b3JlKCdwYXltZW50SWQnKTtcbmNvbnN0e3VwZGF0ZXI6cGF5bWVudHNVcGRhdGVyLG5vdGlmaWVyOnBheW1lbnRzTm90aWZpZXJ9PVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL21ha2VOb3RpZmllcktpdChbXSk7XG4vKlxuXG4gICAqL1xuY29uc3QgdXBkYXRlUGF5bWVudFJlY29yZD0oe2FjdGlvbnMsLi4ucHJlRGlzcGxheX0pPT57XG4vL1xuLy9cbmRlbGV0ZSBwcmVEaXNwbGF5LmRpc3BsYXlQYXltZW50O1xuY29uc3QgZGlzcGxheVBheW1lbnQ9ZmlsbEluU2xvdHMoZGVoeWRyYXRlKGhhcmRlbihwcmVEaXNwbGF5KSkpO1xuY29uc3QgcGF5bWVudFJlY29yZD1hZGRNZXRhKHtcbi4uLnByZURpc3BsYXksXG5hY3Rpb25zLFxuZGlzcGxheVBheW1lbnR9KTtcblxuY29uc3R7aWR9PXBheW1lbnRSZWNvcmQubWV0YTtcbmlkVG9QYXltZW50UmVjb3JkLnNldChpZCxoYXJkZW4ocGF5bWVudFJlY29yZCkpO1xucGF5bWVudHNVcGRhdGVyLnVwZGF0ZVN0YXRlKFtwYXltZW50UmVjb3JkXSk7XG4gfTtcblxuY29uc3QgbWFrZVBheW1lbnRBY3Rpb25zRm9ySWQ9KGlkKT0+XG5tYWtlUGF5bWVudEFjdGlvbnMoe1xuZ2V0UmVjb3JkOigpPT5pZFRvUGF5bWVudFJlY29yZC5nZXQoaWQpLFxudXBkYXRlUmVjb3JkOihyZWNvcmQsd2l0aG91dE1ldGE9e30pPT57XG4vL1xuLy9cbnVwZGF0ZVBheW1lbnRSZWNvcmQoey4uLndpdGhvdXRNZXRhLC4uLmFkZE1ldGEocmVjb3JkKX0pO1xuIH0sXG5nZXRCcmFuZFJlY29yZDooYnJhbmQpPT5cbmJyYW5kVGFibGUuaGFzQnlCcmFuZChicmFuZCkmJmJyYW5kVGFibGUuZ2V0QnlCcmFuZChicmFuZCksXG5nZXRQdXJzZUJ5UGV0bmFtZToocGV0bmFtZSk9PnB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHBldG5hbWUpLFxuZ2V0QXV0b0RlcG9zaXRQdXJzZTooYik9PlxuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaGFzKGIpP1xuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuZ2V0KGIpOlxudW5kZWZpbmVkLFxuZ2V0SXNzdWVyQm9hcmRJZDppc3N1ZXJUb0JvYXJkSWQuZ2V0fSk7XG5cblxuLypcblxuXG4gICAqL1xuY29uc3QgYWRkUGF5bWVudD1hc3luYyhwYXltZW50UCxkZXBvc2l0VG89dW5kZWZpbmVkKT0+e1xuLy9cbmNvbnN0W3BheW1lbnQsYnJhbmRdPWF3YWl0IFByb21pc2UuYWxsKFtcbnBheW1lbnRQLFxuRShwYXltZW50UCkuZ2V0QWxsZWdlZEJyYW5kKCldKTtcblxuXG5jb25zdCBiYXNlUGF5bWVudFJlY29yZD1hZGRNZXRhKHtcbnBheW1lbnQsXG5icmFuZH0pO1xuXG5jb25zdHtpZH09YmFzZVBheW1lbnRSZWNvcmQubWV0YTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGF5bWVudFJlY29yZD17XG4uLi5iYXNlUGF5bWVudFJlY29yZCxcbmFjdGlvbnM6bWFrZVBheW1lbnRBY3Rpb25zRm9ySWQoaWQpfTtcblxuaWRUb1BheW1lbnRSZWNvcmQuaW5pdChpZCxoYXJkZW4ocGF5bWVudFJlY29yZCkpO1xuXG5jb25zdCByZWZyZXNoZWQ9YXdhaXQgcGF5bWVudFJlY29yZC5hY3Rpb25zLnJlZnJlc2goKTtcbmlmKCFyZWZyZXNoZWQpe1xuLy9cbnVwZGF0ZVBheW1lbnRSZWNvcmQocGF5bWVudFJlY29yZCk7XG4gfVxuXG4vL1xuYXdhaXQgcGF5bWVudFJlY29yZC5hY3Rpb25zLmRlcG9zaXQoZGVwb3NpdFRvKTtcbiB9O1xuXG5sZXQgc2VsZkNvbnRhY3RQO1xuYXN5bmMgZnVuY3Rpb24gZ2V0RGVwb3NpdEZhY2V0SWQoX2JyYW5kQm9hcmRJZCl7XG4vL1xucmV0dXJuIEUuZ2V0KHNlbGZDb250YWN0UCkuZGVwb3NpdEJvYXJkSWQ7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBkaXNhYmxlQXV0b0RlcG9zaXQocHVyc2VQZXRuYW1lKXtcbmNvbnN0IHB1cnNlPXB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHB1cnNlUGV0bmFtZSk7XG5jb25zdCBicmFuZD1wdXJzZVRvQnJhbmQuZ2V0KHB1cnNlKTtcbmlmKFxuIWJyYW5kVG9BdXRvRGVwb3NpdFB1cnNlLmhhcyhicmFuZCl8fFxuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuZ2V0KGJyYW5kKSE9PXB1cnNlKVxue1xucmV0dXJuO1xuIH1cblxuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuZGVsZXRlKGJyYW5kKTtcbmF3YWl0IHVwZGF0ZUFsbFB1cnNlU3RhdGUoKTtcbiB9XG5cbmNvbnN0IHBlbmRpbmdFbmFibGVBdXRvRGVwb3NpdHM9bWFrZVNjYWxhck1hcFN0b3JlKCdicmFuZCcpO1xuYXN5bmMgZnVuY3Rpb24gZG9FbmFibGVBdXRvRGVwb3NpdChwdXJzZVBldG5hbWUsdXBkYXRlU3RhdGUpe1xuY29uc3QgcHVyc2U9cHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocHVyc2VQZXRuYW1lKTtcbmNvbnN0IGJyYW5kPXB1cnNlVG9CcmFuZC5nZXQocHVyc2UpO1xuaWYoYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaGFzKGJyYW5kKSl7XG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5zZXQoYnJhbmQscHVyc2UpO1xuIH1lbHNle1xuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaW5pdChicmFuZCxwdXJzZSk7XG4gfVxuXG5hd2FpdCBudWxsO1xuaWYodXBkYXRlU3RhdGUpe1xuYXdhaXQgdXBkYXRlQWxsUHVyc2VTdGF0ZSgpO1xuIH1cblxuY29uc3QgcGVuZGluZ1A9XG5wZW5kaW5nRW5hYmxlQXV0b0RlcG9zaXRzLmhhcyhicmFuZCkmJlxucGVuZGluZ0VuYWJsZUF1dG9EZXBvc2l0cy5nZXQoYnJhbmQpO1xuaWYocGVuZGluZ1Ape1xucmV0dXJuIHBlbmRpbmdQO1xuIH1cblxuY29uc3QgYm9hcmRJZFA9RS5nZXQoc2VsZkNvbnRhY3RQKS5kZXBvc2l0Qm9hcmRJZDtcbnBlbmRpbmdFbmFibGVBdXRvRGVwb3NpdHMuaW5pdChicmFuZCxib2FyZElkUCk7XG5jb25zdCBib2FyZElkPWF3YWl0IGJvYXJkSWRQO1xuYnJhbmRUb0RlcG9zaXRGYWNldElkLmluaXQoYnJhbmQsYm9hcmRJZCk7XG5cbmlmKHVwZGF0ZVN0YXRlKXtcbmF3YWl0IHVwZGF0ZUFsbFB1cnNlU3RhdGUoKTtcbiB9XG5yZXR1cm4gYm9hcmRJZFA7XG4gfVxuXG4vKlxuXG5cblxuXG4gICAqL1xuZnVuY3Rpb24gYWNjZXB0UGV0bmFtZShcbmFjY2VwdEZuLFxuc3VnZ2VzdGVkUGV0bmFtZSxcbmJvYXJkSWQsXG5kYXBwT3JpZ2luPXVuZGVmaW5lZClcbntcbi8qICAgICAgICAgICAgICAgICAgKi9cbmxldCBwZXRuYW1lO1xuaWYoZGFwcE9yaWdpbj09PXVuZGVmaW5lZCl7XG5wZXRuYW1lPXN1Z2dlc3RlZFBldG5hbWU7XG4gfWVsc2V7XG5jb25zdCBlZGdlbmFtZT1lZGdlTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KGRhcHBPcmlnaW4pO1xuLy9cbnBldG5hbWU9W2VkZ2VuYW1lLHN1Z2dlc3RlZFBldG5hbWVdO1xuIH1cblxucmV0dXJuIEUoYm9hcmQpLlxuZ2V0VmFsdWUoYm9hcmRJZCkuXG50aGVuKCh2YWx1ZSk9PntcbmNvbnRleHQuZW5zdXJlQm9hcmRJZChib2FyZElkLHZhbHVlKTtcbnJldHVybiBhY2NlcHRGbihwZXRuYW1lLHZhbHVlKTtcbiB9KTtcbiB9XG5cbi8qXG5cblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gc3VnZ2VzdElzc3VlcihcbnN1Z2dlc3RlZFBldG5hbWUsXG5pc3N1ZXJCb2FyZElkLFxuZGFwcE9yaWdpbj11bmRlZmluZWQpXG57XG4vL1xuLy9cbi8vXG5yZXR1cm4gYWNjZXB0UGV0bmFtZShcbi8vXG4ocGV0bmFtZSx2YWx1ZSk9PmFkZElzc3VlcihwZXRuYW1lLHZhbHVlLHRydWUpLFxuc3VnZ2VzdGVkUGV0bmFtZSxcbmlzc3VlckJvYXJkSWQsXG5kYXBwT3JpZ2luKTtcblxuIH1cblxuLypcblxuXG5cbiAgICovXG5hc3luYyBmdW5jdGlvbiBzdWdnZXN0SW5zdGFuY2UoXG5zdWdnZXN0ZWRQZXRuYW1lLFxuaW5zdGFuY2VIYW5kbGVCb2FyZElkLFxuZGFwcE9yaWdpbj11bmRlZmluZWQpXG57XG4vL1xuLy9cbi8vXG5cbnJldHVybiBhY2NlcHRQZXRuYW1lKFxuYWRkSW5zdGFuY2UsXG5zdWdnZXN0ZWRQZXRuYW1lLFxuaW5zdGFuY2VIYW5kbGVCb2FyZElkLFxuZGFwcE9yaWdpbik7XG5cbiB9XG5cbi8qXG5cblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gc3VnZ2VzdEluc3RhbGxhdGlvbihcbnN1Z2dlc3RlZFBldG5hbWUsXG5pbnN0YWxsYXRpb25IYW5kbGVCb2FyZElkLFxuZGFwcE9yaWdpbj11bmRlZmluZWQpXG57XG4vL1xuLy9cbi8vXG5yZXR1cm4gYWNjZXB0UGV0bmFtZShcbi8vXG5pbnN0YWxsYXRpb25NYW5hZ2VyLmFkZCxcbnN1Z2dlc3RlZFBldG5hbWUsXG5pbnN0YWxsYXRpb25IYW5kbGVCb2FyZElkLFxuZGFwcE9yaWdpbik7XG5cbiB9XG5cbmZ1bmN0aW9uIGdldEJyYW5kKHBldG5hbWUpe1xuY29uc3QgYnJhbmQ9YnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSk7XG5yZXR1cm4gYnJhbmQ7XG4gfVxuXG5mdW5jdGlvbiBnZXRCcmFuZFBldG5hbWVzKGJyYW5kcyl7XG5yZXR1cm4gYnJhbmRzLm1hcChicmFuZE1hcHBpbmcudmFsVG9QZXRuYW1lLmdldCk7XG4gfVxuXG5mdW5jdGlvbiBnZXRTZWxmQ29udGFjdCgpe1xucmV0dXJuIHNlbGZDb250YWN0UDtcbiB9XG5cbmNvbnN0IG1ha2VNYW5hZ2VyPShwZXRuYW1lTWFwcGluZyxtYW5hZ2VyVHlwZSk9PntcbmNvbnN0IG1hbmFnZXI9RmFyKG1hbmFnZXJUeXBlLHtcbnJlbmFtZTphc3luYyhwZXRuYW1lLHRoaW5nKT0+e1xucGV0bmFtZU1hcHBpbmcucmVuYW1lUGV0bmFtZShwZXRuYW1lLHRoaW5nKTtcbmF3YWl0IHVwZGF0ZUFsbFN0YXRlKCk7XG4gfSxcbmdldDpwZXRuYW1lTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0LFxuZ2V0QWxsOnBldG5hbWVNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzLFxuYWRkOmFzeW5jKHBldG5hbWUsdGhpbmcpPT57XG5wZXRuYW1lTWFwcGluZy5zdWdnZXN0UGV0bmFtZShwZXRuYW1lLHRoaW5nKTtcbmF3YWl0IHVwZGF0ZUFsbFN0YXRlKCk7XG4gfX0pO1xuXG5yZXR1cm4gbWFuYWdlcjtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnN0YWxsYXRpb25NYW5hZ2VyPW1ha2VNYW5hZ2VyKFxuaW5zdGFsbGF0aW9uTWFwcGluZyxcbidJbnN0YWxsYXRpb25NYW5hZ2VyJyk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnN0YW5jZU1hbmFnZXI9bWFrZU1hbmFnZXIoaW5zdGFuY2VNYXBwaW5nLCdJbnN0YW5jZU1hbmFnZXInKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNzdWVyTWFuYWdlcj1GYXIoJ0lzc3Vlck1hbmFnZXInLHtcbnJlbmFtZTphc3luYyhwZXRuYW1lLGlzc3Vlcik9PntcbmJyYW5kVGFibGUuaGFzQnlJc3N1ZXIoaXNzdWVyKXx8XG5GYWlsIGBpc3N1ZXIgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgYWRkZWRgO1xuY29uc3QgYnJhbmRSZWNvcmQ9YnJhbmRUYWJsZS5nZXRCeUlzc3Vlcihpc3N1ZXIpO1xuYnJhbmRNYXBwaW5nLnJlbmFtZVBldG5hbWUocGV0bmFtZSxicmFuZFJlY29yZC5icmFuZCk7XG5hd2FpdCB1cGRhdGVBbGxTdGF0ZSgpO1xuIH0sXG5nZXQ6KHBldG5hbWUpPT57XG5jb25zdCBicmFuZD1icmFuZE1hcHBpbmcucGV0bmFtZVRvVmFsLmdldChwZXRuYW1lKTtcbnJldHVybiBicmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpLmlzc3VlcjtcbiB9LFxuZ2V0QWxsOigpPT57XG5yZXR1cm5bLi4uYnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCldLm1hcChcbihbcGV0bmFtZSxicmFuZF0pPT57XG5jb25zdHtpc3N1ZXJ9PWJyYW5kVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG5yZXR1cm5bcGV0bmFtZSxpc3N1ZXJdO1xuIH0pO1xuXG4gfSxcbmFkZDphc3luYyhwZXRuYW1lLGlzc3VlclApPT57XG5jb25zdHticmFuZCxpc3N1ZXJ9PWF3YWl0IGJyYW5kVGFibGUuaW5pdElzc3Vlcihpc3N1ZXJQLGFkZE1ldGEpO1xuYXdhaXQgaW5pdElzc3VlclRvQm9hcmRJZChpc3N1ZXIsYnJhbmQpO1xuYnJhbmRNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKHBldG5hbWUsYnJhbmQpO1xuYXdhaXQgdXBkYXRlQWxsSXNzdWVyc1N0YXRlKCk7XG4gfX0pO1xuXG5cbmZ1bmN0aW9uIGdldEluc3RhbGxhdGlvbk1hbmFnZXIoKXtcbnJldHVybiBpbnN0YWxsYXRpb25NYW5hZ2VyO1xuIH1cblxuZnVuY3Rpb24gZ2V0SW5zdGFuY2VNYW5hZ2VyKCl7XG5yZXR1cm4gaW5zdGFuY2VNYW5hZ2VyO1xuIH1cblxuZnVuY3Rpb24gZ2V0SXNzdWVyTWFuYWdlcigpe1xucmV0dXJuIGlzc3Vlck1hbmFnZXI7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBzYXZlT2ZmZXJSZXN1bHQoaW52aXRhdGlvbkhhbmRsZSxvZmZlclJlc3VsdCl7XG5pbnZpdGF0aW9uSGFuZGxlVG9PZmZlclJlc3VsdC5pbml0KGludml0YXRpb25IYW5kbGUsb2ZmZXJSZXN1bHQpO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0T2ZmZXJSZXN1bHQoaW52aXRhdGlvbkhhbmRsZSl7XG5yZXR1cm4gaW52aXRhdGlvbkhhbmRsZVRvT2ZmZXJSZXN1bHQuZ2V0KGludml0YXRpb25IYW5kbGUpO1xuIH1cblxuLypcblxuXG5cblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0VUlOb3RpZmllcihyYXdJZCxkYXBwT3JpZ2luPSd1bmtub3duJyl7XG5jb25zdCBpZD1tYWtlSWQoZGFwcE9yaWdpbixyYXdJZCk7XG5jb25zdCBvZmZlclJlc3VsdD1hd2FpdCBpZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LmdldChpZCkucHJvbWlzZTtcbmFzc2VydChcbnBhc3NTdHlsZU9mKG9mZmVyUmVzdWx0KT09PSdjb3B5UmVjb3JkJyxcbiBgb2ZmZXJSZXN1bHQgbXVzdCBiZSBhIHJlY29yZCB0byBoYXZlIGEgdWlOb3RpZmllcmApO1xuXG5vZmZlclJlc3VsdC51aU5vdGlmaWVyfHxGYWlsIGBvZmZlclJlc3VsdCBkb2VzIG5vdCBoYXZlIGEgdWlOb3RpZmllcmA7XG5yZXR1cm4gb2ZmZXJSZXN1bHQudWlOb3RpZmllcjtcbiB9XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UHVibGljU3Vic2NyaWJlcnMocmF3SWQsZGFwcE9yaWdpbj0ndW5rbm93bicpe1xuY29uc3QgaWQ9bWFrZUlkKGRhcHBPcmlnaW4scmF3SWQpO1xuXG5jb25zdCBvZmZlclJlc3VsdD1hd2FpdCBpZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LmdldChpZCkucHJvbWlzZTtcbmFzc2VydChcbnBhc3NTdHlsZU9mKG9mZmVyUmVzdWx0KT09PSdjb3B5UmVjb3JkJyxcbiBgb2ZmZXJSZXN1bHQgJHtvZmZlclJlc3VsdH0gbXVzdCBiZSBhIHJlY29yZCB0byBoYXZlIHB1YmxpY1N1YnNjcmliZXJzYCk7XG5cblxuY29uc3R7cHVibGljU3Vic2NyaWJlcnN9PW9mZmVyUmVzdWx0O1xucHVibGljU3Vic2NyaWJlcnN8fFxuRmFpbCBgb2ZmZXJSZXN1bHQgJHtvZmZlclJlc3VsdH0gZG9lcyBub3QgaGF2ZSBwdWJsaWNTdWJzY3JpYmVyc2A7XG5wYXNzU3R5bGVPZihwdWJsaWNTdWJzY3JpYmVycyk9PT0nY29weVJlY29yZCd8fFxuRmFpbCBgcHVibGljU3Vic2NyaWJlcnMgJHtwdWJsaWNTdWJzY3JpYmVyc30gbXVzdCBiZSBhIHJlY29yZGA7XG5cbnJldHVybiBwdWJsaWNTdWJzY3JpYmVycztcbiB9XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0UHVibGljTm90aWZpZXJzKHJhd0lkLGRhcHBPcmlnaW49J3Vua25vd24nKXtcbmNvbnN0IHB1YmxpY1N1YnNjcmliZXJzPWF3YWl0IGdldFB1YmxpY1N1YnNjcmliZXJzKHJhd0lkLGRhcHBPcmlnaW4pO1xucmV0dXJuIG9iamVjdE1hcChwdWJsaWNTdWJzY3JpYmVycyxtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcik7XG4gfVxuXG4vL1xuLy9cbmNvbnN0IGNyZWF0ZVJvb3RMb29rdXBzPSgpPT57XG5jb25zdCByb290UGF0aFRvTG9va3VwPW1ha2VMZWdhY3lNYXAoJ2xvb2t1cHMnKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBtYWtlTG9va3VwPShraW5kLGxvb2t1cCk9PntcbnJvb3RQYXRoVG9Mb29rdXAuaW5pdChcbmtpbmQsXG5GYXIoIGAke2tpbmR9TG9va3VwYCx7XG5sb29rdXB9KSk7XG5cblxuIH07XG5cbi8vXG4vL1xuY29uc3QgcGV0bmFtZU9yUGF0aD1cbihsb29rdXApPT5cbiguLi5wYXRoKT0+e1xudHJ5e1xuaWYocGF0aC5sZW5ndGg9PT0xKXtcbi8vXG5yZXR1cm4gbG9va3VwKHBhdGhbMF0pO1xuIH1cbiB9Y2F0Y2goZSl7XG4vL1xuIH1cbnJldHVybiBsb29rdXAocGF0aCk7XG4gfTtcblxubWFrZUxvb2t1cCgnYnJhbmQnLHBldG5hbWVPclBhdGgoYnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQpKTtcbm1ha2VMb29rdXAoJ2NvbnRhY3QnLHBldG5hbWVPclBhdGgoY29udGFjdE1hcHBpbmcucGV0bmFtZVRvVmFsLmdldCkpO1xubWFrZUxvb2t1cCgnaXNzdWVyJyxwZXRuYW1lT3JQYXRoKGlzc3Vlck1hbmFnZXIuZ2V0KSk7XG5tYWtlTG9va3VwKCdpbnN0YW5jZScscGV0bmFtZU9yUGF0aChpbnN0YW5jZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldCkpO1xubWFrZUxvb2t1cChcbidpbnN0YWxsYXRpb24nLFxucGV0bmFtZU9yUGF0aChpbnN0YWxsYXRpb25NYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQpKTtcblxubWFrZUxvb2t1cCgncHVyc2UnLHBldG5hbWVPclBhdGgocHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQpKTtcblxuLy9cbmNvbnN0IGlkT25seT1cbihraW5kLGxvb2t1cCk9PlxuKC4uLnBhdGgpPT57XG5wYXRoLmxlbmd0aD09PTF8fFxuRmFpbCBgJHtxKFxua2luZClcbiB9IGxvb2t1cCBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgc2luZ2xlIG9mZmVyIElELCBub3QgJHtwYXRofWA7XG5yZXR1cm4gbG9va3VwKHBhdGhbMF0pO1xuIH07XG5tYWtlTG9va3VwKCdvZmZlcicsaWRPbmx5KCdvZmZlcicsaWRUb09mZmVyLmdldCkpO1xubWFrZUxvb2t1cChcbidvZmZlclJlc3VsdCcsXG5pZE9ubHkoJ29mZmVyUmVzdWx0JywoaWQpPT5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LmdldChpZCkucHJvbWlzZSkpO1xuXG5cbnJldHVybiByb290UGF0aFRvTG9va3VwO1xuIH07XG5cbmNvbnN0IGZpcnN0UGF0aFRvTG9va3VwPWNyZWF0ZVJvb3RMb29rdXBzKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWFyc2hhbGxlcj1oYXJkZW4oe1xuZnJvbUNhcERhdGE6Y29udGV4dC5mcm9tQ2FwRGF0YSxcbnRvQ2FwRGF0YTpjb250ZXh0LnRvQ2FwRGF0YSxcbnVuc2VyaWFsaXplOmNvbnRleHQuZnJvbUNhcERhdGEsXG5zZXJpYWxpemU6Y29udGV4dC50b0NhcERhdGF9KTtcblxuXG5jb25zdCBoYW5kbGVBY2NlcHRPZmZlckFjdGlvbj1hc3luYyhvZmZlcik9PntcbmNvbnN0e3JlcXVlc3RDb250ZXh0fT1vZmZlcjtcbmNvbnN0IHJhd0lkPWF3YWl0IGFkZE9mZmVyKG9mZmVyLHJlcXVlc3RDb250ZXh0KTtcbmNvbnN0IGRhcHBPcmlnaW49XG5yZXF1ZXN0Q29udGV4dC5kYXBwT3JpZ2lufHxyZXF1ZXN0Q29udGV4dC5vcmlnaW58fCd1bmtub3duJztcbnJldHVybiBhY2NlcHRPZmZlciggYCR7ZGFwcE9yaWdpbn0jJHtyYXdJZH1gKTtcbiB9O1xuXG5jb25zdCBoYW5kbGVTdWdnZXN0SXNzdWVyQWN0aW9uPSh7cGV0bmFtZSxib2FyZElkfSk9Plxuc3VnZ2VzdElzc3VlcihwZXRuYW1lLGJvYXJkSWQpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKlxuXG5cbiAgICovXG5jb25zdCBwZXJmb3JtQWN0aW9uPShvYmopPT57XG5jb25zdHt0eXBlLGRhdGF9PUpTT04ucGFyc2Uob2JqLnNwZW5kQWN0aW9uKTtcbnN3aXRjaCh0eXBlKXtcbmNhc2UnYWNjZXB0T2ZmZXInOlxucmV0dXJuIGhhbmRsZUFjY2VwdE9mZmVyQWN0aW9uKGRhdGEpO1xuY2FzZSdzdWdnZXN0SXNzdWVyJzpcbnJldHVybiBoYW5kbGVTdWdnZXN0SXNzdWVyQWN0aW9uKGRhdGEpO1xuZGVmYXVsdDpcbnRocm93IEVycm9yKCBgVW5rbm93biB3YWxsZXQgYWN0aW9uICR7dHlwZX1gKTt9XG5cbiB9O1xuXG5jb25zdCB3YWxsZXQ9RmFyKCd3YWxsZXQnLHtcbmxvb2t1cDooLi4ucGF0aCk9Pntcbi8vXG5pZihwYXRoLmxlbmd0aD09PTApe1xucmV0dXJuIHdhbGxldDtcbiB9XG5jb25zdFtmaXJzdCwuLi5yZW1haW5pbmddPXBhdGg7XG5jb25zdCBmaXJzdFZhbHVlPWZpcnN0UGF0aFRvTG9va3VwLmdldChmaXJzdCk7XG5pZihyZW1haW5pbmcubGVuZ3RoPT09MCl7XG5yZXR1cm4gZmlyc3RWYWx1ZTtcbiB9XG5yZXR1cm4gRShmaXJzdFZhbHVlKS5sb29rdXAoLi4ucmVtYWluaW5nKTtcbiB9LFxuZ2V0TWFyc2hhbGxlcjooKT0+bWFyc2hhbGxlcixcbmdldERhcHBDYWNoZUNvb3JkaW5hdG9yOihkYXBwT3JpZ2luKT0+XG5kYXBwT3JpZ2lucy5nZXQoZGFwcE9yaWdpbikuY2FjaGVDb29yZGluYXRvcixcbmdldENhY2hlQ29vcmRpbmF0b3I6KCk9PnNoYXJlZENhY2hlQ29vcmRpbmF0b3IsXG5zYXZlT2ZmZXJSZXN1bHQsXG5nZXRPZmZlclJlc3VsdCxcbndhaXRGb3JEYXBwQXBwcm92YWwsXG5nZXREYXBwc05vdGlmaWVyKCl7XG5yZXR1cm4gZGFwcHNOb3RpZmllcjtcbiB9LFxuZ2V0UHVyc2VzTm90aWZpZXIoKXtcbnJldHVybiBwdXJzZXNOb3RpZmllcjtcbiB9LFxuZ2V0QXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyKCl7XG5yZXR1cm4gYXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyO1xuIH0sXG5nZXRJc3N1ZXJzTm90aWZpZXIoKXtcbnJldHVybiBpc3N1ZXJzTm90aWZpZXI7XG4gfSxcbmdldE9mZmVyc05vdGlmaWVyKCl7XG5yZXR1cm4gb2ZmZXJzTm90aWZpZXI7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuYWRkSXNzdWVyOmlzc3Vlck1hbmFnZXIuYWRkLFxuZ2V0QnJhbmQsXG5nZXRCcmFuZFBldG5hbWVzLFxucHVibGlzaElzc3Vlcixcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5hZGRJbnN0YW5jZTppbnN0YW5jZU1hbmFnZXIuYWRkLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5hZGRJbnN0YWxsYXRpb246aW5zdGFsbGF0aW9uTWFuYWdlci5hZGQsXG5nZXRJbnN0YWxsYXRpb25NYW5hZ2VyLFxuZ2V0SW5zdGFuY2VNYW5hZ2VyLFxuZ2V0SXNzdWVyTWFuYWdlcixcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucmVuYW1lSXNzdWVyOmlzc3Vlck1hbmFnZXIucmVuYW1lLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJlbmFtZUluc3RhbmNlOmluc3RhbmNlTWFuYWdlci5yZW5hbWUsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJlbmFtZUluc3RhbGxhdGlvbjppbnN0YWxsYXRpb25NYW5hZ2VyLnJlbmFtZSxcbmdldFNlbGZDb250YWN0LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldEluc3RhbmNlOmluc3RhbmNlTWFuYWdlci5nZXQsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldEluc3RhbGxhdGlvbjppbnN0YWxsYXRpb25NYW5hZ2VyLmdldCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0SW5zdGFsbGF0aW9uczppbnN0YWxsYXRpb25NYW5hZ2VyLmdldEFsbCxcbm1ha2VFbXB0eVB1cnNlLFxuZGVwb3NpdCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0SXNzdWVyOmlzc3Vlck1hbmFnZXIuZ2V0LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRJc3N1ZXJzOmlzc3Vlck1hbmFnZXIuZ2V0QWxsLFxuZ2V0UHVyc2VzLFxuZ2V0UHVyc2UsXG5nZXRQdXJzZUlzc3VlcixcbmFkZE9mZmVyLFxuZGVjbGluZU9mZmVyLFxuY2FuY2VsT2ZmZXIsXG5hY2NlcHRPZmZlcixcbmdldE9mZmVycyxcbmdldFNlYXQ6KGlkKT0+aWRUb1NlYXQuZ2V0KGlkKSxcbmdldFNlYXRzOihpZHMpPT5pZHMubWFwKHdhbGxldC5nZXRTZWF0KSxcbmVuYWJsZUF1dG9EZXBvc2l0KHB1cnNlUGV0bmFtZSl7XG4vL1xucmV0dXJuIGRvRW5hYmxlQXV0b0RlcG9zaXQocHVyc2VQZXRuYW1lLHRydWUpO1xuIH0sXG5kaXNhYmxlQXV0b0RlcG9zaXQsXG5wZXJmb3JtQWN0aW9uLFxuZ2V0RGVwb3NpdEZhY2V0SWQsXG5zdWdnZXN0SXNzdWVyLFxuc3VnZ2VzdEluc3RhbmNlLFxuc3VnZ2VzdEluc3RhbGxhdGlvbixcbmFkZENvbnRhY3QsXG5nZXRDb250YWN0c05vdGlmaWVyKCl7XG5yZXR1cm4gY29udGFjdHNOb3RpZmllcjtcbiB9LFxuYWRkUGF5bWVudCxcbmdldFBheW1lbnRzTm90aWZpZXIoKXtcbnJldHVybiBwYXltZW50c05vdGlmaWVyO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldFVJTm90aWZpZXIsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldFB1YmxpY05vdGlmaWVycyxcbmdldFB1YmxpY1N1YnNjcmliZXJzLFxuZ2V0Wm9lKCl7XG5yZXR1cm4gem9lO1xuIH0sXG5nZXRCb2FyZCgpe1xucmV0dXJuIGJvYXJkO1xuIH0sXG5nZXRBZ29yaWNOYW1lcyguLi5wYXRoKXtcbmlmKCFhZ29yaWNOYW1lcyl7XG50aHJvdyBGYWlsIGBhZ29yaWNOYW1lcyB3YXMgbm90IHN1cHBsaWVkIHRvIHRoZSB3YWxsZXQgbWFrZXJgO1xuIH1cbnJldHVybiBFKGFnb3JpY05hbWVzKS5sb29rdXAoLi4ucGF0aCk7XG4gfSxcbmdldE5hbWVzQnlBZGRyZXNzKC4uLnBhdGgpe1xuaWYobmFtZXNCeUFkZHJlc3M9PT11bmRlZmluZWQpe1xuLy9cbi8vXG50aHJvdyBGYWlsIGBuYW1lc0J5QWRkcmVzcyB3YXMgbm90IHN1cHBsaWVkIHRvIHRoZSB3YWxsZXQgbWFrZXJgO1xuIH1cbnJldHVybiBFKG5hbWVzQnlBZGRyZXNzKS5sb29rdXAoLi4ucGF0aCk7XG4gfX0pO1xuXG5cbmNvbnN0IGluaXRpYWxpemU9YXN5bmMoKT0+e1xuLy9cbmNvbnN0IHNlbGZEZXBvc2l0RmFjZXQ9RmFyKCdjb250YWN0Jyx7XG5yZWNlaXZlKHBheW1lbnQpe1xucmV0dXJuIGFkZFBheW1lbnQocGF5bWVudCk7XG4gfX0pO1xuXG5cbmNvbnN0IGFkZHJlc3M9YXdhaXQgRShteUFkZHJlc3NOYW1lQWRtaW4pLmdldE15QWRkcmVzcygpO1xuLy9cbnNlbGZDb250YWN0UD1hZGRDb250YWN0KCdTZWxmJyxzZWxmRGVwb3NpdEZhY2V0LGFkZHJlc3MpO1xuXG4vL1xuY29uc3QgWk9FX0lOVklURV9QVVJTRV9QRVROQU1FPSdEZWZhdWx0IFpvZSBpbnZpdGUgcHVyc2UnO1xuY29uc3QgaW52aXRlSXNzdWVyUD1FKHpvZSkuZ2V0SW52aXRhdGlvbklzc3VlcigpO1xuY29uc3QgYWRkWm9lSXNzdWVyPShpc3N1ZXJQKT0+XG5pc3N1ZXJNYW5hZ2VyLmFkZChaT0VfSU5WSVRFX0JSQU5EX1BFVE5BTUUsaXNzdWVyUCk7XG5jb25zdCBtYWtlSW52aXRlUHVyc2U9KCk9Plxud2FsbGV0Lm1ha2VFbXB0eVB1cnNlKFpPRV9JTlZJVEVfQlJBTkRfUEVUTkFNRSxaT0VfSU5WSVRFX1BVUlNFX1BFVE5BTUUpO1xuY29uc3QgYWRkSW52aXRlRGVwb3NpdEZhY2V0PSgpPT5cbkUod2FsbGV0KS5lbmFibGVBdXRvRGVwb3NpdChaT0VfSU5WSVRFX1BVUlNFX1BFVE5BTUUpO1xuXG5hd2FpdCBhZGRab2VJc3N1ZXIoaW52aXRlSXNzdWVyUCkuXG50aGVuKG1ha2VJbnZpdGVQdXJzZSkuXG50aGVuKGFkZEludml0ZURlcG9zaXRGYWNldCk7XG56b2VJbnZpdGVQdXJzZT13YWxsZXQuZ2V0UHVyc2UoWk9FX0lOVklURV9QVVJTRV9QRVROQU1FKTtcblxuYXdhaXQgRShteUFkZHJlc3NOYW1lQWRtaW4pLnVwZGF0ZShcbldhbGxldE5hbWUuZGVwb3NpdEZhY2V0LFxuc2VsZkRlcG9zaXRGYWNldCk7XG5cbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGltcG9ydEJhbmtBc3NldHM9YXN5bmMoYmFuayk9PntcbnZvaWQgb2JzZXJ2ZUl0ZXJhdGlvbihcbnN1YnNjcmliZUVhY2goRShiYW5rKS5nZXRBc3NldFN1YnNjcmlwdGlvbigpKSxcbmhhcmRlbih7XG4gICAgICBhc3luYyB1cGRhdGVTdGF0ZSh7cHJvcG9zZWROYW1lLGlzc3Vlck5hbWUsaXNzdWVyLGJyYW5kfSl7XG5hd2FpdCBudWxsO1xudHJ5e1xuaXNzdWVyTmFtZT1hd2FpdCBhZGRJc3N1ZXIoaXNzdWVyTmFtZSxpc3N1ZXIpO1xuY29uc3QgcHVyc2U9YXdhaXQgRShiYW5rKS5nZXRQdXJzZShicmFuZCk7XG4vL1xuYXdhaXQgaW50ZXJuYWxVbnNhZmVJbXBvcnRQdXJzZShcbmlzc3Vlck5hbWUsXG5wcm9wb3NlZE5hbWUsXG50cnVlLFxucHVyc2UpO1xuXG4gfWNhdGNoKGUpe1xuY29uc29sZS5lcnJvcignLy8vIGNvdWxkIG5vdCBhZGQgYmFuayBhc3NldCBwdXJzZScsZSx7XG5pc3N1ZXJOYW1lLFxucHJvcG9zZWROYW1lLFxuaXNzdWVyLFxuYnJhbmR9KTtcblxuIH1cbiB9fSkpLlxuXG5maW5hbGx5KCgpPT5jb25zb2xlLmVycm9yKCcvLy8gVGhpcyBpcyB0aGUgZW5kIG9mIHRoZSBiYW5rIGFzc2V0cycpKTtcbiB9O1xucmV0dXJue1xuYWRtaW46d2FsbGV0LFxuaW5pdGlhbGl6ZWQ6aW5pdGlhbGl6ZSgpLFxuaW1wb3J0QmFua0Fzc2V0c307XG5cbiB9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVdhbGxldFJvb3QiOlsibWFrZVdhbGxldFJvb3QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAU+AS6r8CAAC/AgAALAAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvcHVic3ViLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJkZWZhdWx0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIGZ1bmN0aW9uICAgICAgICAgICAgICAgIG1ha2VQdWJzdWIoRSl7XG5sZXQgbGFzdFB1Ymxpc2hlZDtcbmNvbnN0IHN1YnNjcmliZXJzPVtdO1xuXG5yZXR1cm4gaGFyZGVuKHtcbnN1YnNjcmliZShzKXtcbnN1YnNjcmliZXJzLnB1c2gocyk7XG5pZihsYXN0UHVibGlzaGVkIT09dW5kZWZpbmVkKXtcbkUocykubm90aWZ5KGxhc3RQdWJsaXNoZWQpO1xuIH1cbiB9LFxucHVibGlzaChtKXtcbmxhc3RQdWJsaXNoZWQ9bTtcbmZvcihjb25zdCBzIG9mIHN1YnNjcmliZXJzKXtcbkUocykubm90aWZ5KG0pO1xuIH1cbiB9fSk7XG5cbiB9JGjigI1fb25jZS5kZWZhdWx0KCAgICAgbWFrZVB1YnN1Yik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAvMXeHxQ1AAAUNQAALAAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvd2FsbGV0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAYWdvcmljL25vdGlmaWVyIiwiQGVuZG8vbWFyc2hhbCIsIi4vbGliLXdhbGxldC5qcyIsIi4vcHVic3ViLmpzIiwiLi9iaWdpbnRTdHJpbmdpZnkuanMiLCIuL2RhdGUtbm93LmpzIiwiLi9pbnRlcm5hbC10eXBlcy5qcyJdLCJleHBvcnRzIjpbImJ1aWxkUm9vdE9iamVjdCIsImRlZmF1bHQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsbWFrZU5vdGlmaWVyS2l0LG9ic2VydmVJdGVyYXRpb24sRmFyLG1ha2VXYWxsZXRSb290LHB1YnN1YixiaWdpbnRTdHJpbmdpZnksbWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyxtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdzskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaOKAjV9hID0+IChFID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcIm1ha2VOb3RpZmllcktpdFwiLCBbJGjigI1fYSA9PiAobWFrZU5vdGlmaWVyS2l0ID0gJGjigI1fYSldXSxbXCJvYnNlcnZlSXRlcmF0aW9uXCIsIFskaOKAjV9hID0+IChvYnNlcnZlSXRlcmF0aW9uID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dLFtcIi4vbGliLXdhbGxldC5qc1wiLCBbW1wibWFrZVdhbGxldFJvb3RcIiwgWyRo4oCNX2EgPT4gKG1ha2VXYWxsZXRSb290ID0gJGjigI1fYSldXV1dLFtcIi4vcHVic3ViLmpzXCIsIFtbXCJkZWZhdWx0XCIsIFskaOKAjV9hID0+IChwdWJzdWIgPSAkaOKAjV9hKV1dXV0sW1wiLi9iaWdpbnRTdHJpbmdpZnkuanNcIiwgW1tcImJpZ2ludFN0cmluZ2lmeVwiLCBbJGjigI1fYSA9PiAoYmlnaW50U3RyaW5naWZ5ID0gJGjigI1fYSldXV1dLFtcIi4vZGF0ZS1ub3cuanNcIiwgW1tcIm1ha2VUaW1lckRldmljZURhdGVOb3dcIiwgWyRo4oCNX2EgPT4gKG1ha2VUaW1lckRldmljZURhdGVOb3cgPSAkaOKAjV9hKV1dLFtcIm1ha2VUaW1lclNlcnZpY2VEYXRlTm93XCIsIFskaOKAjV9hID0+IChtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyA9ICRo4oCNX2EpXV1dXSxbXCIuL2ludGVybmFsLXR5cGVzLmpzXCIsIFtdXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShidWlsZFJvb3RPYmplY3QsICduYW1lJywge3ZhbHVlOiBcImJ1aWxkUm9vdE9iamVjdFwifSk7JGjigI1fb25jZS5idWlsZFJvb3RPYmplY3QoYnVpbGRSb290T2JqZWN0KTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5mdW5jdGlvbiAgICAgICAgYnVpbGRSb290T2JqZWN0KHZhdFBvd2Vycyl7XG4vL1xuY29uc3R7RH09dmF0UG93ZXJzfHx7fTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgd2FsbGV0Um9vdDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB3YWxsZXRBZG1pbjtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBwdXJzZXNTdGF0ZT1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW5ib3hTdGF0ZT1bXTtcbmxldCBodHRwO1xuXG5jb25zdCBicmlkZ2VIYW5kbGVzPW5ldyBTZXQoKTtcbmNvbnN0IG9mZmVyU3Vic2NyaXB0aW9ucz1uZXcgTWFwKCk7XG5cbmNvbnN0IGh0dHBTZW5kPShvYmosY2hhbm5lbEhhbmRsZXMpPT5cbkUoaHR0cCkuc2VuZChKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpLGNoYW5uZWxIYW5kbGVzKTtcblxuY29uc3QgcHVzaE9mZmVyU3Vic2NyaXB0aW9ucz0oY2hhbm5lbEhhbmRsZSxvZmZlcnMpPT57XG5jb25zdCBzdWJzPW9mZmVyU3Vic2NyaXB0aW9ucy5nZXQoY2hhbm5lbEhhbmRsZSk7XG5mb3IoY29uc3R7b3JpZ2luLHN0YXR1c31vZiBzdWJzfHxbXSl7XG4vL1xuY29uc3QgcmVzdWx0PWhhcmRlbihcbm9mZmVycy5maWx0ZXIoXG4ob2ZmZXIpPT5cbihzdGF0dXM9PT1udWxsfHxvZmZlci5zdGF0dXM9PT1zdGF0dXMpJiZcbm9mZmVyLnJlcXVlc3RDb250ZXh0JiZcbm9mZmVyLnJlcXVlc3RDb250ZXh0Lm9yaWdpbj09PW9yaWdpbikpO1xuXG5cbmh0dHBTZW5kKFxue1xudHlwZTond2FsbGV0T2ZmZXJEZXNjcmlwdGlvbnMnLFxuZGF0YTpyZXN1bHR9LFxuXG5bY2hhbm5lbEhhbmRsZV0pO1xuXG4gfVxuIH07XG5cbmNvbnN0IHN1YnNjcmliZVRvT2ZmZXJzPShjaGFubmVsSGFuZGxlLHtvcmlnaW4sc3RhdHVzPW51bGx9KT0+e1xubGV0IHN1YnM9b2ZmZXJTdWJzY3JpcHRpb25zLmdldChjaGFubmVsSGFuZGxlKTtcbmlmKCFzdWJzKXtcbnN1YnM9W107XG5vZmZlclN1YnNjcmlwdGlvbnMuc2V0KGNoYW5uZWxIYW5kbGUsc3Vicyk7XG4gfVxuc3Vicy5wdXNoKHtvcmlnaW4sc3RhdHVzfSk7XG5wdXNoT2ZmZXJTdWJzY3JpcHRpb25zKGNoYW5uZWxIYW5kbGUsaW5ib3hTdGF0ZSk7XG4gfTtcblxuY29uc3R7cHVibGlzaDpwdXJzZXNQdWJsaXNoLHN1YnNjcmliZTpwdXJzZXNTdWJzY3JpYmV9PXB1YnN1YihFKTtcbmNvbnN0e3VwZGF0ZXI6aW5ib3hVcGRhdGVyLG5vdGlmaWVyOm9mZmVyTm90aWZpZXJ9PVxubWFrZU5vdGlmaWVyS2l0KGluYm94U3RhdGUpO1xuY29uc3R7cHVibGlzaDppbmJveFB1Ymxpc2gsc3Vic2NyaWJlOmluYm94U3Vic2NyaWJlfT1wdWJzdWIoRSk7XG5cbmNvbnN0IG5vdGlmaWVycz1oYXJkZW4oe1xuZ2V0SW5ib3hOb3RpZmllcigpe1xucmV0dXJuIG9mZmVyTm90aWZpZXI7XG4gfX0pO1xuXG5cbi8qXG5cbiAgICovXG5hc3luYyBmdW5jdGlvbiBzdGFydHVwKHtcbnpvZSxcbmJvYXJkLFxuYWdvcmljTmFtZXMsXG5uYW1lc0J5QWRkcmVzcyxcbm15QWRkcmVzc05hbWVBZG1pbixcbnRpbWVyRGV2aWNlLFxudGltZXJEZXZpY2VTY2FsZSxcbmxvY2FsVGltZXJTZXJ2aWNlLFxubG9jYWxUaW1lclBvbGxJbnRlcnZhbH0pXG57XG5hc3NlcnQobXlBZGRyZXNzTmFtZUFkbWluLCdtaXNzaW5nIG15QWRkcmVzc05hbWVBZG1pbicpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBkYXRlTm93UDtcbmlmKHRpbWVyRGV2aWNlKXtcbmRhdGVOb3dQPW1ha2VUaW1lckRldmljZURhdGVOb3coRCx0aW1lckRldmljZSx0aW1lckRldmljZVNjYWxlKTtcbiB9XG5pZihsb2NhbFRpbWVyU2VydmljZSl7XG5kYXRlTm93UD1tYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyhcbmxvY2FsVGltZXJTZXJ2aWNlLFxubG9jYWxUaW1lclBvbGxJbnRlcnZhbCk7XG5cbiB9XG5cbmNvbnN0IGRhdGVOb3c9YXdhaXQgZGF0ZU5vd1A7XG5jb25zdCB3PW1ha2VXYWxsZXRSb290KHtcbmFnb3JpY05hbWVzLFxubmFtZXNCeUFkZHJlc3MsXG5teUFkZHJlc3NOYW1lQWRtaW4sXG56b2UsXG5ib2FyZCxcbnB1cnNlc1N0YXRlQ2hhbmdlSGFuZGxlcjpwdXJzZXNQdWJsaXNoLFxuaW5ib3hTdGF0ZUNoYW5nZUhhbmRsZXI6aW5ib3hQdWJsaXNoLFxuZGF0ZU5vd30pO1xuXG5jb25zb2xlLmRlYnVnKCd3YWl0aW5nIGZvciB3YWxsZXQgdG8gaW5pdGlhbGl6ZScpO1xuYXdhaXQgdy5pbml0aWFsaXplZDtcbmNvbnNvbGUuZGVidWcoJ3dhbGxldCBpbml0aWFsaXplZCcpO1xud2FsbGV0QWRtaW49dy5hZG1pbjtcbndhbGxldFJvb3Q9dztcbiB9XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZUJyaWRnZT0oYXBwcm92ZSxkYXBwT3JpZ2luLG1ldGE9e30pPT57XG5hc3luYyBmdW5jdGlvbiptYWtlQXBwcm92ZWROb3RpZmllcihzb3VyY2VOb3RpZmllcil7XG5hd2FpdCBhcHByb3ZlKCk7XG5mb3IgYXdhaXQoY29uc3Qgc3RhdGUgb2Ygc291cmNlTm90aWZpZXIpe1xuYXdhaXQgYXBwcm92ZSgpO1xueWllbGQgc3RhdGU7XG4gfVxuIH1cbmhhcmRlbihtYWtlQXBwcm92ZWROb3RpZmllcik7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJpZGdlPUZhcignYnJpZGdlJyx7XG4gICAgICBhc3luYyBnZXRQdXJzZXNOb3RpZmllcigpe1xuYXdhaXQgYXBwcm92ZSgpO1xuY29uc3QgcHVyc2VzTm90aWZpZXI9d2FsbGV0QWRtaW4uZ2V0QXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyKCk7XG5jb25zdHtub3RpZmllcix1cGRhdGVyfT1tYWtlTm90aWZpZXJLaXQoKTtcbnZvaWQgb2JzZXJ2ZUl0ZXJhdGlvbihtYWtlQXBwcm92ZWROb3RpZmllcihwdXJzZXNOb3RpZmllciksdXBkYXRlcik7XG5yZXR1cm4gbm90aWZpZXI7XG4gfSxcbiAgICAgIGFzeW5jIGdldENhY2hlQ29vcmRpbmF0b3IoKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXREYXBwQ2FjaGVDb29yZGluYXRvcihkYXBwT3JpZ2luKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0SXNzdWVyc05vdGlmaWVyKCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0SXNzdWVyc05vdGlmaWVyKCk7XG4gfSxcbiAgICAgIGFzeW5jIGFkZE9mZmVyKG9mZmVyKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5hZGRPZmZlcihvZmZlcix7Li4ubWV0YSxkYXBwT3JpZ2lufSk7XG4gfSxcbiAgICAgIGFzeW5jIGdldE9mZmVyc05vdGlmaWVyKHN0YXR1cz1udWxsKXtcbmF3YWl0IGFwcHJvdmUoKTtcbmNvbnN0e25vdGlmaWVyLHVwZGF0ZXJ9PW1ha2VOb3RpZmllcktpdChpbmJveFN0YXRlKTtcbmNvbnN0IGZpbHRlcj0ob2ZmZXIpPT5cbihzdGF0dXM9PT1udWxsfHxvZmZlci5zdGF0dXM9PT1zdGF0dXMpJiZcbm9mZmVyLnJlcXVlc3RDb250ZXh0JiZcbm9mZmVyLnJlcXVlc3RDb250ZXh0LmRhcHBPcmlnaW49PT1kYXBwT3JpZ2luO1xuY29uc3QgZmlsdGVyZWRPZmZlcnM9KG9mZmVycyk9PntcbnJldHVybiBvZmZlcnMuZmlsdGVyKGZpbHRlcikubWFwKCh7cmF3SWQsLi4udn0pPT4oe1xuLi4udixcbmlkOnJhd0lkfSkpO1xuXG4gfTtcblxudm9pZCBvYnNlcnZlSXRlcmF0aW9uKG1ha2VBcHByb3ZlZE5vdGlmaWVyKG9mZmVyTm90aWZpZXIpLHtcbnVwZGF0ZVN0YXRlKG9mZmVycyl7XG51cGRhdGVyLnVwZGF0ZVN0YXRlKGZpbHRlcmVkT2ZmZXJzKG9mZmVycykpO1xuIH0sXG5maW5pc2gob2ZmZXJzKXtcbnVwZGF0ZXIuZmluaXNoKGZpbHRlcmVkT2ZmZXJzKG9mZmVycykpO1xuIH0sXG5mYWlsKGUpe1xudXBkYXRlci5mYWlsKGUpO1xuIH19KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH0sXG4gICAgICBhc3luYyBnZXREZXBvc2l0RmFjZXRJZChicmFuZEJvYXJkSWQpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldERlcG9zaXRGYWNldElkKGJyYW5kQm9hcmRJZCk7XG4gfSxcbiAgICAgIGFzeW5jIHN1Z2dlc3RJc3N1ZXIocGV0bmFtZSxib2FyZElkKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5zdWdnZXN0SXNzdWVyKHBldG5hbWUsYm9hcmRJZCxkYXBwT3JpZ2luKTtcbiB9LFxuICAgICAgYXN5bmMgc3VnZ2VzdEluc3RhbGxhdGlvbihwZXRuYW1lLGJvYXJkSWQpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLnN1Z2dlc3RJbnN0YWxsYXRpb24ocGV0bmFtZSxib2FyZElkLGRhcHBPcmlnaW4pO1xuIH0sXG4gICAgICBhc3luYyBzdWdnZXN0SW5zdGFuY2UocGV0bmFtZSxib2FyZElkKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5zdWdnZXN0SW5zdGFuY2UocGV0bmFtZSxib2FyZElkLGRhcHBPcmlnaW4pO1xuIH0sXG4gICAgICBhc3luYyBnZXRVSU5vdGlmaWVyKHJhd0lkKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRVSU5vdGlmaWVyKHJhd0lkLGRhcHBPcmlnaW4pO1xuIH0sXG4gICAgICBhc3luYyBnZXRQdWJsaWNOb3RpZmllcnMocmF3SWQpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldFB1YmxpY05vdGlmaWVycyhyYXdJZCxkYXBwT3JpZ2luKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0Wm9lKCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0Wm9lKCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldEJvYXJkKCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0Qm9hcmQoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0QWdvcmljTmFtZXMoLi4ucGF0aCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0QWdvcmljTmFtZXMoLi4ucGF0aCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldE5hbWVzQnlBZGRyZXNzKC4uLnBhdGgpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldE5hbWVzQnlBZGRyZXNzKC4uLnBhdGgpO1xuIH0sXG4gICAgICBhc3luYyBnZXRCcmFuZFBldG5hbWVzKGJyYW5kcyl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0QnJhbmRQZXRuYW1lcyhicmFuZHMpO1xuIH19KTtcblxucmV0dXJuIGJyaWRnZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVhcHByb3ZlZEJyaWRnZT1GYXIoJ3ByZWFwcHJvdmVkQnJpZGdlJyx7XG4vKlxuXG5cbiAgICAgKi9cbmFkZE9mZmVyKG9mZmVyLG1ldGEpe1xucmV0dXJuIHdhbGxldEFkbWluLmFkZE9mZmVyKG9mZmVyLG1ldGEpO1xuIH0sXG5nZXREZXBvc2l0RmFjZXRJZChicmFuZEJvYXJkSWQpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldERlcG9zaXRGYWNldElkKGJyYW5kQm9hcmRJZCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldE9mZmVyc05vdGlmaWVyKCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0T2ZmZXJzTm90aWZpZXIoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0UHVyc2VzTm90aWZpZXIoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRBdHRlbnVhdGVkUHVyc2VzTm90aWZpZXIoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0SXNzdWVyc05vdGlmaWVyKCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0SXNzdWVyc05vdGlmaWVyKCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldENhY2hlQ29vcmRpbmF0b3IoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRDYWNoZUNvb3JkaW5hdG9yKCk7XG4gfSxcbnN1Z2dlc3RJbnN0YWxsYXRpb24ocGV0bmFtZSxpbnN0YWxsYXRpb25Cb2FyZElkKXtcbnJldHVybiB3YWxsZXRBZG1pbi5zdWdnZXN0SW5zdGFsbGF0aW9uKHBldG5hbWUsaW5zdGFsbGF0aW9uQm9hcmRJZCk7XG4gfSxcbnN1Z2dlc3RJbnN0YW5jZShwZXRuYW1lLGluc3RhbmNlQm9hcmRJZCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uc3VnZ2VzdEluc3RhbmNlKHBldG5hbWUsaW5zdGFuY2VCb2FyZElkKTtcbiB9LFxuc3VnZ2VzdElzc3VlcihwZXRuYW1lLGlzc3VlckJvYXJkSWQpe1xucmV0dXJuIHdhbGxldEFkbWluLnN1Z2dlc3RJc3N1ZXIocGV0bmFtZSxpc3N1ZXJCb2FyZElkKTtcbiB9LFxuZ2V0VUlOb3RpZmllcihyYXdJZCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0VUlOb3RpZmllcihyYXdJZCk7XG4gfSxcbmdldFB1YmxpY05vdGlmaWVycyhyYXdJZCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0UHVibGljTm90aWZpZXJzKHJhd0lkKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0Wm9lKCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0Wm9lKCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldEJvYXJkKCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0Qm9hcmQoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0QWdvcmljTmFtZXMoLi4ucGF0aCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0QWdvcmljTmFtZXMoLi4ucGF0aCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldE5hbWVzQnlBZGRyZXNzKC4uLnBhdGgpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldE5hbWVzQnlBZGRyZXNzKC4uLnBhdGgpO1xuIH0sXG4gICAgICBhc3luYyBnZXRCcmFuZFBldG5hbWVzKGJyYW5kcyl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0QnJhbmRQZXRuYW1lcyhicmFuZHMpO1xuIH19KTtcblxuaGFyZGVuKHByZWFwcHJvdmVkQnJpZGdlKTtcblxuYXN5bmMgZnVuY3Rpb24gZ2V0V2FsbGV0KGJhbmspe1xuYXdhaXQgd2FsbGV0Um9vdC5pbXBvcnRCYW5rQXNzZXRzKGJhbmspO1xuXG4vKlxuXG4gICAgICovXG5jb25zdCB3YWxsZXQ9RmFyKCd3YWxsZXQnLHtcbmFkZFBheW1lbnQ6d2FsbGV0QWRtaW4uYWRkUGF5bWVudCxcbiAgICAgIGFzeW5jIGdldFNjb3BlZEJyaWRnZShzdWdnZXN0ZWREYXBwUGV0bmFtZSxkYXBwT3JpZ2luKXtcbmNvbnN0IGFwcHJvdmU9YXN5bmMoKT0+e1xuYXdhaXQgd2FsbGV0QWRtaW4ud2FpdEZvckRhcHBBcHByb3ZhbChcbnN1Z2dlc3RlZERhcHBQZXRuYW1lLFxuZGFwcE9yaWdpbik7XG5cbiB9O1xuXG5yZXR1cm4gbWFrZUJyaWRnZShhcHByb3ZlLGRhcHBPcmlnaW4pO1xuIH0sXG4gICAgICBhc3luYyBnZXRCcmlkZ2UoKXtcbnJldHVybiBwcmVhcHByb3ZlZEJyaWRnZTtcbiB9LFxuZ2V0RGVwb3NpdEZhY2V0SWQ6d2FsbGV0QWRtaW4uZ2V0RGVwb3NpdEZhY2V0SWQsXG5nZXRBZG1pbkZhY2V0KCl7XG5yZXR1cm4gRmFyKCdhZG1pbkZhY2V0Jyx7XG4uLi53YWxsZXRBZG1pbixcbi4uLm5vdGlmaWVycyxcbmdldFNjb3BlZEJyaWRnZTp3YWxsZXQuZ2V0U2NvcGVkQnJpZGdlfSk7XG5cbiB9LFxuZ2V0SXNzdWVyOndhbGxldEFkbWluLmdldElzc3VlcixcbmdldElzc3VlcnM6d2FsbGV0QWRtaW4uZ2V0SXNzdWVycyxcbmdldFB1cnNlOndhbGxldEFkbWluLmdldFB1cnNlLFxuZ2V0UHVyc2VzOndhbGxldEFkbWluLmdldFB1cnNlcyxcblxuZ2V0TWFyc2hhbGxlcjp3YWxsZXRBZG1pbi5nZXRNYXJzaGFsbGVyLFxuXG5sb29rdXA6d2FsbGV0QWRtaW4ubG9va3VwfSk7XG5cbnJldHVybiBoYXJkZW4od2FsbGV0KTtcbiB9XG5cbmZ1bmN0aW9uIHNldEhUVFBPYmplY3Qobyl7XG5odHRwPW87XG4gfVxuXG5mdW5jdGlvbiBzdGFydFN1YnNjcmlwdGlvbnMoKXtcbi8vXG4vL1xucHVyc2VzU3Vic2NyaWJlKFxuaGFyZGVuKHtcbm5vdGlmeShtKXtcbnB1cnNlc1N0YXRlPUpTT04ucGFyc2UobSk7XG4gfX0pKTtcblxuXG5cbi8vXG4vL1xuaW5ib3hTdWJzY3JpYmUoXG5oYXJkZW4oe1xubm90aWZ5KG0pe1xuaW5ib3hTdGF0ZT1KU09OLnBhcnNlKG0pO1xuaW5ib3hVcGRhdGVyLnVwZGF0ZVN0YXRlKGluYm94U3RhdGUpO1xuaWYoaHR0cCl7XG4vL1xuZm9yKGNvbnN0IGNoYW5uZWxIYW5kbGUgb2Ygb2ZmZXJTdWJzY3JpcHRpb25zLmtleXMoKSl7XG5wdXNoT2ZmZXJTdWJzY3JpcHRpb25zKGNoYW5uZWxIYW5kbGUsaW5ib3hTdGF0ZSk7XG4gfVxuIH1cbiB9fSkpO1xuXG5cbiB9XG5cbmZ1bmN0aW9uIGdldEJyaWRnZVVSTEhhbmRsZXIoKXtcbnJldHVybiBGYXIoJ2JyaWRnZVVSTEhhbmRsZXInLHtcbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICAgICAgICovXG4gICAgICBhc3luYyBnZXRCb290c3RyYXAob3RoZXJTaWRlLG1ldGEsb2JqKXtcbmNvbnN0e2RhcHBPcmlnaW49bWV0YS5vcmlnaW59PW9iajtcbmNvbnN0IHN1Z2dlc3RlZERhcHBQZXRuYW1lPVN0cmluZyhcbm1ldGEucXVlcnkmJm1ldGEucXVlcnkuc3VnZ2VzdGVkRGFwcFBldG5hbWV8fFxubWV0YS5kYXBwT3JpZ2lufHxcbmRhcHBPcmlnaW4pO1xuXG5cbmNvbnN0IGFwcHJvdmU9YXN5bmMoKT0+e1xubGV0IG5vdFlldEVuYWJsZWQ9ZmFsc2U7XG5hd2FpdCB3YWxsZXRBZG1pbi53YWl0Rm9yRGFwcEFwcHJvdmFsKFxuc3VnZ2VzdGVkRGFwcFBldG5hbWUsXG5kYXBwT3JpZ2luLFxuKCk9Pntcbm5vdFlldEVuYWJsZWQ9dHJ1ZTtcbkUob3RoZXJTaWRlKS5cbm5lZWREYXBwQXBwcm92YWwoZGFwcE9yaWdpbixzdWdnZXN0ZWREYXBwUGV0bmFtZSkuXG5jYXRjaCgoXyk9PnsgfSk7XG4gfSk7XG5cbmlmKG5vdFlldEVuYWJsZWQpe1xuYXdhaXQgRShvdGhlclNpZGUpLmRhcHBBcHByb3ZlZChkYXBwT3JpZ2luKTtcbiB9XG4gfTtcblxucmV0dXJuIG1ha2VCcmlkZ2UoYXBwcm92ZSxkYXBwT3JpZ2luLG1ldGEpO1xuIH0sXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgICAgICovXG5nZXRDb21tYW5kSGFuZGxlcigpe1xucmV0dXJuIEZhcignY29tbWFuZEhhbmRsZXInLHtcbm9uT3Blbihfb2JqLG1ldGEpe1xuYnJpZGdlSGFuZGxlcy5hZGQobWV0YS5jaGFubmVsSGFuZGxlKTtcbiB9LFxub25DbG9zZShfb2JqLG1ldGEpe1xuYnJpZGdlSGFuZGxlcy5kZWxldGUobWV0YS5jaGFubmVsSGFuZGxlKTtcbm9mZmVyU3Vic2NyaXB0aW9ucy5kZWxldGUobWV0YS5jaGFubmVsSGFuZGxlKTtcbiB9LFxuXG4gICAgICBhc3luYyBvbk1lc3NhZ2Uob2JqLG1ldGEpe1xuY29uc3R7XG50eXBlLFxuZGFwcE9yaWdpbj1tZXRhLm9yaWdpbixcbnN1Z2dlc3RlZERhcHBQZXRuYW1lPW1ldGEucXVlcnkmJlxubWV0YS5xdWVyeS5zdWdnZXN0ZWREYXBwUGV0bmFtZXx8XG5vYmouZGFwcE9yaWdpbnx8XG5tZXRhLm9yaWdpbn09XG5vYmo7XG5cbi8vXG5sZXQgbmVlZEFwcHJvdmFsPWZhbHNlO1xuYXdhaXQgd2FsbGV0QWRtaW4ud2FpdEZvckRhcHBBcHByb3ZhbChcbnN1Z2dlc3RlZERhcHBQZXRuYW1lLFxuZGFwcE9yaWdpbixcbigpPT57XG5uZWVkQXBwcm92YWw9dHJ1ZTtcbmh0dHBTZW5kKFxue1xudHlwZTond2FsbGV0TmVlZERhcHBBcHByb3ZhbCcsXG5kYXRhOntcbmRhcHBPcmlnaW4sXG5zdWdnZXN0ZWREYXBwUGV0bmFtZX19LFxuXG5cblttZXRhLmNoYW5uZWxIYW5kbGVdKTtcblxuIH0pO1xuXG5pZihuZWVkQXBwcm92YWwpe1xuaHR0cFNlbmQoXG57XG50eXBlOid3YWxsZXRIYXZlRGFwcEFwcHJvdmFsJyxcbmRhdGE6e1xuZGFwcE9yaWdpbn19LFxuXG5cblttZXRhLmNoYW5uZWxIYW5kbGVdKTtcblxuIH1cblxuc3dpdGNoKHR5cGUpe1xuY2FzZSd3YWxsZXRHZXRQdXJzZXMnOntcbnJldHVybntcbnR5cGU6J3dhbGxldFVwZGF0ZVB1cnNlcycsXG5kYXRhOmJpZ2ludFN0cmluZ2lmeShwdXJzZXNTdGF0ZSl9O1xuXG4gfVxuY2FzZSd3YWxsZXRBZGRPZmZlcic6e1xubGV0IGhhbmRsZWQ9ZmFsc2U7XG5jb25zdCBhY3Rpb25zPUZhcignYWN0aW9ucycse1xuaGFuZGxlZChvZmZlcil7XG5pZihoYW5kbGVkKXtcbnJldHVybjtcbiB9XG5oYW5kbGVkPXRydWU7XG5odHRwU2VuZChcbntcbnR5cGU6J3dhbGxldE9mZmVySGFuZGxlZCcsXG5kYXRhOm9mZmVyLmlkfSxcblxuW21ldGEuY2hhbm5lbEhhbmRsZV0pO1xuXG4gfX0pO1xuXG5yZXR1cm57XG50eXBlOid3YWxsZXRPZmZlckFkZGVkJyxcbmRhdGE6YXdhaXQgd2FsbGV0QWRtaW4uYWRkT2ZmZXIoXG57Li4ub2JqLmRhdGEsYWN0aW9uc30sXG57Li4ubWV0YSxkYXBwT3JpZ2lufSl9O1xuXG5cbiB9XG5cbmNhc2Und2FsbGV0U3Vic2NyaWJlT2ZmZXJzJzp7XG5jb25zdHtzdGF0dXM9bnVsbH09b2JqO1xuY29uc3R7Y2hhbm5lbEhhbmRsZX09bWV0YTtcblxuaWYoIWNoYW5uZWxIYW5kbGUpe1xucmV0dXJue1xudHlwZTond2FsbGV0U3Vic2NyaWJlZE9mZmVycycsXG5kYXRhOmZhbHNlfTtcblxuIH1cblxuLy9cbnN1YnNjcmliZVRvT2ZmZXJzKGNoYW5uZWxIYW5kbGUse1xub3JpZ2luOmRhcHBPcmlnaW4sXG5zdGF0dXN9KTtcblxucmV0dXJue1xudHlwZTond2FsbGV0U3Vic2NyaWJlZE9mZmVycycsXG5kYXRhOnRydWV9O1xuXG4gfVxuXG5jYXNlJ3dhbGxldEdldE9mZmVycyc6e1xuY29uc3R7c3RhdHVzPW51bGx9PW9iajtcblxuLy9cbmxldCByZXN1bHQ9YXdhaXQgd2FsbGV0QWRtaW4uZ2V0T2ZmZXJzKHtcbm9yaWdpbjpkYXBwT3JpZ2lufSk7XG5cbmlmKHN0YXR1cyE9PW51bGwpe1xuLy9cbnJlc3VsdD1oYXJkZW4oXG5yZXN1bHQuZmlsdGVyKChvZmZlcik9Pm9mZmVyLnN0YXR1cz09PXN0YXR1cykpO1xuXG4gfVxuXG5yZXR1cm57XG50eXBlOid3YWxsZXRPZmZlckRlc2NyaXB0aW9ucycsXG5kYXRhOnJlc3VsdH07XG5cbiB9XG5cbmNhc2Und2FsbGV0R2V0RGVwb3NpdEZhY2V0SWQnOntcbmNvbnN0e2JyYW5kQm9hcmRJZH09b2JqO1xuY29uc3QgcmVzdWx0PVxuYXdhaXQgd2FsbGV0QWRtaW4uZ2V0RGVwb3NpdEZhY2V0SWQoYnJhbmRCb2FyZElkKTtcbnJldHVybntcbnR5cGU6J3dhbGxldERlcG9zaXRGYWNldElkUmVzcG9uc2UnLFxuZGF0YTpyZXN1bHR9O1xuXG4gfVxuXG5jYXNlJ3dhbGxldFN1Z2dlc3RJc3N1ZXInOntcbmNvbnN0e3BldG5hbWUsYm9hcmRJZH09b2JqO1xuY29uc3QgcmVzdWx0PWF3YWl0IHdhbGxldEFkbWluLnN1Z2dlc3RJc3N1ZXIoXG5wZXRuYW1lLFxuYm9hcmRJZCxcbmRhcHBPcmlnaW4pO1xuXG5yZXR1cm57XG50eXBlOid3YWxsZXRTdWdnZXN0SXNzdWVyUmVzcG9uc2UnLFxuZGF0YTpyZXN1bHR9O1xuXG4gfVxuXG5jYXNlJ3dhbGxldFN1Z2dlc3RJbnN0YW5jZSc6e1xuY29uc3R7cGV0bmFtZSxib2FyZElkfT1vYmo7XG5jb25zdCByZXN1bHQ9YXdhaXQgd2FsbGV0QWRtaW4uc3VnZ2VzdEluc3RhbmNlKFxucGV0bmFtZSxcbmJvYXJkSWQsXG5kYXBwT3JpZ2luKTtcblxucmV0dXJue1xudHlwZTond2FsbGV0U3VnZ2VzdEluc3RhbmNlUmVzcG9uc2UnLFxuZGF0YTpyZXN1bHR9O1xuXG4gfVxuXG5jYXNlJ3dhbGxldFN1Z2dlc3RJbnN0YWxsYXRpb24nOntcbmNvbnN0e3BldG5hbWUsYm9hcmRJZH09b2JqO1xuY29uc3QgcmVzdWx0PWF3YWl0IHdhbGxldEFkbWluLnN1Z2dlc3RJbnN0YWxsYXRpb24oXG5wZXRuYW1lLFxuYm9hcmRJZCxcbmRhcHBPcmlnaW4pO1xuXG5yZXR1cm57XG50eXBlOid3YWxsZXRTdWdnZXN0SW5zdGFsbGF0aW9uUmVzcG9uc2UnLFxuZGF0YTpyZXN1bHR9O1xuXG4gfVxuXG5kZWZhdWx0OlxucmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7fVxuXG4gfX0pO1xuXG4gfX0pO1xuXG4gfVxuXG5zdGFydFN1YnNjcmlwdGlvbnMoKTtcblxuZnVuY3Rpb24gZ2V0Q29tbWFuZEhhbmRsZXIoLi4ucGFyYW1zKXtcbmNvbnNvbGUuZGVidWcoXG4nZ2V0Q29tbWFuZEhhbmRsZXIgY2FsbGVkIGluIHdhbGxldCwgYnV0IGRvZXMgbm90IGV4aXN0JyxcbnBhcmFtcyk7XG5cbiB9XG5cbnJldHVybiBGYXIoJ3Jvb3QnLHtcbnN0YXJ0dXAsXG5nZXRXYWxsZXQsXG5zZXRIVFRQT2JqZWN0LFxuZ2V0QnJpZGdlVVJMSGFuZGxlcixcbmdldENvbW1hbmRIYW5kbGVyfSk7XG5cbiB9XG5cbi8qXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgICAgICAgICBzcGF3bih0ZXJtcyxfaW52aXRlTWFrZXIpe1xuY29uc3Qgd2FsbGV0VmF0PWJ1aWxkUm9vdE9iamVjdCgpO1xucmV0dXJuIHdhbGxldFZhdC5zdGFydHVwKHRlcm1zKS50aGVuKChfKT0+d2FsbGV0VmF0KTtcbiB9JGjigI1fb25jZS5kZWZhdWx0KCAgICAgc3Bhd24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdCI6WyJkZWZhdWx0Il0sImJ1aWxkUm9vdE9iamVjdCI6WyJidWlsZFJvb3RPYmplY3QiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAyg6WLHAYAABwGAAAMwAAAEBhZ29yaWMvem9lLXYwLjI2LjIvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL2ludGVybmFsIiwiQGFnb3JpYy9ub3RpZmllciIsIkBhZ29yaWMvbm90aWZpZXIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAZW5kby9ldmVudHVhbC1zZW5kIl0sImV4cG9ydHMiOlsiZGVmaW5lRVJlY29yZGVyS2l0IiwiZGVmaW5lUmVjb3JkZXJLaXQiLCJwcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzIiwicHJlcGFyZVJlY29yZGVyIiwicHJlcGFyZVJlY29yZGVyS2l0IiwicHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLFN0b3JhZ2VOb2RlU2hhcGUscHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0LG1ha2VGYWtlTWFyc2hhbGxlcixtYWtlRmFrZVN0b3JhZ2UsbXVzdE1hdGNoLE0sbWFrZVNjYWxhckJpZ01hcFN0b3JlLHByZXBhcmVFeG9DbGFzcyxFOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJTdG9yYWdlTm9kZVNoYXBlXCIsIFskaOKAjV9hID0+IChTdG9yYWdlTm9kZVNoYXBlID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXJcIiwgW1tcInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdFwiLCBbJGjigI1fYSA9PiAocHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0ID0gJGjigI1fYSldXV1dLFtcIkBhZ29yaWMvbm90aWZpZXIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzXCIsIFtbXCJtYWtlRmFrZU1hcnNoYWxsZXJcIiwgWyRo4oCNX2EgPT4gKG1ha2VGYWtlTWFyc2hhbGxlciA9ICRo4oCNX2EpXV0sW1wibWFrZUZha2VTdG9yYWdlXCIsIFskaOKAjV9hID0+IChtYWtlRmFrZVN0b3JhZ2UgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaOKAjV9hID0+IChtdXN0TWF0Y2ggPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wiTVwiLCBbJGjigI1fYSA9PiAoTSA9ICRo4oCNX2EpXV0sW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaOKAjV9hID0+IChtYWtlU2NhbGFyQmlnTWFwU3RvcmUgPSAkaOKAjV9hKV1dLFtcInByZXBhcmVFeG9DbGFzc1wiLCBbJGjigI1fYSA9PiAocHJlcGFyZUV4b0NsYXNzID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZVJlY29yZGVyPShiYWdnYWdlLG1hcnNoYWxsZXIpPT57XG5jb25zdCBtYWtlUmVjb3JkZXI9cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbidSZWNvcmRlcicsXG5NLmludGVyZmFjZSgnUmVjb3JkZXInLHtcbmdldFN0b3JhZ2VOb2RlOk0uY2FsbCgpLnJldHVybnMoU3RvcmFnZU5vZGVTaGFwZSksXG5nZXRTdG9yYWdlUGF0aDpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbndyaXRlOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbndyaXRlRmluYWw6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoTS5wcm9taXNlKCkpfSksXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbihcbnB1Ymxpc2hlcixcbnN0b3JhZ2VOb2RlLFxudmFsdWVTaGFwZT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL00uYW55KCkpPT5cbntcbnJldHVybntcbmNsb3NlZDpmYWxzZSxcbnB1Ymxpc2hlcixcbnN0b3JhZ2VOb2RlLFxuc3RvcmFnZVBhdGg6LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovdW5kZWZpbmVkLFxudmFsdWVTaGFwZX07XG5cbiB9LFxue1xuZ2V0U3RvcmFnZU5vZGUoKXtcbnJldHVybiB0aGlzLnN0YXRlLnN0b3JhZ2VOb2RlO1xuIH0sXG4vKlxuXG5cblxuICAgICAgICovXG4gICAgICBhc3luYyBnZXRTdG9yYWdlUGF0aCgpe1xuY29uc3R7c3RvcmFnZVBhdGg6aGVsZFBhdGh9PXRoaXMuc3RhdGU7XG4vL1xuYXdhaXQgbnVsbDtcbmlmKGhlbGRQYXRoIT09dW5kZWZpbmVkKXtcbnJldHVybiBoZWxkUGF0aDtcbiB9XG5jb25zdCBwYXRoPWF3YWl0IEUodGhpcy5zdGF0ZS5zdG9yYWdlTm9kZSkuZ2V0UGF0aCgpO1xudGhpcy5zdGF0ZS5zdG9yYWdlUGF0aD1wYXRoO1xucmV0dXJuIHBhdGg7XG4gfSxcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgd3JpdGUodmFsdWUpe1xuY29uc3R7Y2xvc2VkLHB1Ymxpc2hlcixzdG9yYWdlTm9kZSx2YWx1ZVNoYXBlfT10aGlzLnN0YXRlO1xuIWNsb3NlZHx8RmFpbCBgY2Fubm90IHdyaXRlIHRvIGNsb3NlZCByZWNvcmRlcmA7XG5tdXN0TWF0Y2godmFsdWUsdmFsdWVTaGFwZSk7XG5jb25zdCBlbmNvZGVkPWF3YWl0IEUobWFyc2hhbGxlcikudG9DYXBEYXRhKHZhbHVlKTtcbmNvbnN0IHNlcmlhbGl6ZWQ9SlNPTi5zdHJpbmdpZnkoZW5jb2RlZCk7XG5hd2FpdCBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShzZXJpYWxpemVkKTtcblxuLy9cbnJldHVybiBwdWJsaXNoZXIucHVibGlzaCh2YWx1ZSk7XG4gfSxcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgd3JpdGVGaW5hbCh2YWx1ZSl7XG5jb25zdHtjbG9zZWQscHVibGlzaGVyLHN0b3JhZ2VOb2RlLHZhbHVlU2hhcGV9PXRoaXMuc3RhdGU7XG4hY2xvc2VkfHxGYWlsIGBjYW5ub3Qgd3JpdGUgdG8gY2xvc2VkIHJlY29yZGVyYDtcbm11c3RNYXRjaCh2YWx1ZSx2YWx1ZVNoYXBlKTtcbmNvbnN0IGVuY29kZWQ9YXdhaXQgRShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuY29uc3Qgc2VyaWFsaXplZD1KU09OLnN0cmluZ2lmeShlbmNvZGVkKTtcbmF3YWl0IEUoc3RvcmFnZU5vZGUpLnNldFZhbHVlKHNlcmlhbGl6ZWQpO1xuXG4vL1xudGhpcy5zdGF0ZS5jbG9zZWQ9dHJ1ZTtcbnJldHVybiBwdWJsaXNoZXIuZmluaXNoKHZhbHVlKTtcbiB9fSk7XG5cblxuXG5yZXR1cm4gbWFrZVJlY29yZGVyO1xuIH07JGjigI1fb25jZS5wcmVwYXJlUmVjb3JkZXIocHJlcGFyZVJlY29yZGVyKTtcbmhhcmRlbihwcmVwYXJlUmVjb3JkZXIpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZpbmVSZWNvcmRlcktpdD0oe21ha2VSZWNvcmRlcixtYWtlRHVyYWJsZVB1Ymxpc2hLaXR9KT0+e1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VSZWNvcmRlcktpdD0oc3RvcmFnZU5vZGUsdmFsdWVTaGFwZSk9PntcbmNvbnN0e3N1YnNjcmliZXIscHVibGlzaGVyfT1tYWtlRHVyYWJsZVB1Ymxpc2hLaXQoKTtcbmNvbnN0IHJlY29yZGVyPW1ha2VSZWNvcmRlcihcbnB1Ymxpc2hlcixcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5zdG9yYWdlTm9kZSxcblxudmFsdWVTaGFwZSk7XG5cbnJldHVybiBoYXJkZW4oe3N1YnNjcmliZXIscmVjb3JkZXJ9KTtcbiB9O1xucmV0dXJuIG1ha2VSZWNvcmRlcktpdDtcbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuZGVmaW5lUmVjb3JkZXJLaXQoZGVmaW5lUmVjb3JkZXJLaXQpO1xuY29uc3QgICAgICAgIGRlZmluZUVSZWNvcmRlcktpdD0oe21ha2VSZWNvcmRlcixtYWtlRHVyYWJsZVB1Ymxpc2hLaXR9KT0+e1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VFUmVjb3JkZXJLaXQ9KHN0b3JhZ2VOb2RlUCx2YWx1ZVNoYXBlKT0+e1xuY29uc3R7cHVibGlzaGVyLHN1YnNjcmliZXJ9PW1ha2VEdXJhYmxlUHVibGlzaEtpdCgpO1xuY29uc3QgcmVjb3JkZXJQPUUud2hlbihzdG9yYWdlTm9kZVAsKHN0b3JhZ2VOb2RlKT0+XG5tYWtlUmVjb3JkZXIoXG5wdWJsaXNoZXIsXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9zdG9yYWdlTm9kZSxcbnZhbHVlU2hhcGUpKTtcblxuXG5yZXR1cm57c3Vic2NyaWJlcixyZWNvcmRlclB9O1xuIH07XG5yZXR1cm4gbWFrZUVSZWNvcmRlcktpdDtcbiB9OyRo4oCNX29uY2UuZGVmaW5lRVJlY29yZGVyS2l0KGRlZmluZUVSZWNvcmRlcktpdCk7XG5oYXJkZW4oZGVmaW5lRVJlY29yZGVyS2l0KTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUmVjb3JkZXJLaXQ9KGJhZ2dhZ2UsbWFyc2hhbGxlcik9PntcbmNvbnN0IG1ha2VEdXJhYmxlUHVibGlzaEtpdD1wcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQoXG5iYWdnYWdlLFxuJ0R1cmFibGUgUHVibGlzaCBLaXQnKTtcblxuY29uc3QgbWFrZVJlY29yZGVyPXByZXBhcmVSZWNvcmRlcihiYWdnYWdlLG1hcnNoYWxsZXIpO1xucmV0dXJuIGRlZmluZVJlY29yZGVyS2l0KHttYWtlRHVyYWJsZVB1Ymxpc2hLaXQsbWFrZVJlY29yZGVyfSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UucHJlcGFyZVJlY29yZGVyS2l0KHByZXBhcmVSZWNvcmRlcktpdCk7XG5jb25zdCAgICAgICAgcHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzPShiYWdnYWdlLG1hcnNoYWxsZXIpPT57XG5jb25zdCBtYWtlRHVyYWJsZVB1Ymxpc2hLaXQ9cHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KFxuYmFnZ2FnZSxcbidEdXJhYmxlIFB1Ymxpc2ggS2l0Jyk7XG5cbmNvbnN0IG1ha2VSZWNvcmRlcj1wcmVwYXJlUmVjb3JkZXIoYmFnZ2FnZSxtYXJzaGFsbGVyKTtcblxuY29uc3QgbWFrZVJlY29yZGVyS2l0PWRlZmluZVJlY29yZGVyS2l0KHtcbm1ha2VSZWNvcmRlcixcbm1ha2VEdXJhYmxlUHVibGlzaEtpdH0pO1xuXG5jb25zdCBtYWtlRVJlY29yZGVyS2l0PWRlZmluZUVSZWNvcmRlcktpdCh7XG5tYWtlUmVjb3JkZXIsXG5tYWtlRHVyYWJsZVB1Ymxpc2hLaXR9KTtcblxuXG5yZXR1cm57XG5tYWtlRHVyYWJsZVB1Ymxpc2hLaXQsXG5tYWtlUmVjb3JkZXIsXG5tYWtlUmVjb3JkZXJLaXQsXG5tYWtlRVJlY29yZGVyS2l0fTtcblxuIH07XG5cbi8qXG5cbiAqLyRo4oCNX29uY2UucHJlcGFyZVJlY29yZGVyS2l0TWFrZXJzKHByZXBhcmVSZWNvcmRlcktpdE1ha2Vycyk7XG5jb25zdCAgICAgICAgcHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2Vycz0oKT0+e1xuY29uc3QgYmFnZ2FnZT1tYWtlU2NhbGFyQmlnTWFwU3RvcmUoJ21vY2sgcmVjb3JkZXIgYmFnZ2FnZScpO1xuY29uc3QgbWFyc2hhbGxlcj1tYWtlRmFrZU1hcnNoYWxsZXIoKTtcbnJldHVybntcbi4uLnByZXBhcmVSZWNvcmRlcktpdE1ha2VycyhiYWdnYWdlLG1hcnNoYWxsZXIpLFxuc3RvcmFnZU5vZGU6bWFrZUZha2VTdG9yYWdlKCdtb2NrIHJlY29yZGVyIHN0b3JhZ2UnKX07XG5cbiB9OyRo4oCNX29uY2UucHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2VycyhwcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVSZWNvcmRlciI6WyJwcmVwYXJlUmVjb3JkZXIiXSwiZGVmaW5lUmVjb3JkZXJLaXQiOlsiZGVmaW5lUmVjb3JkZXJLaXQiXSwiZGVmaW5lRVJlY29yZGVyS2l0IjpbImRlZmluZUVSZWNvcmRlcktpdCJdLCJwcmVwYXJlUmVjb3JkZXJLaXQiOlsicHJlcGFyZVJlY29yZGVyS2l0Il0sInByZXBhcmVSZWNvcmRlcktpdE1ha2VycyI6WyJwcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnMiXSwicHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2VycyI6WyJwcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOmzy3yNAQAAjQEAAB4AAABAYWdvcmljL3pvbmUtdjAuMi4yL2R1cmFibGUuanN7ImltcG9ydHMiOlsiLi9zcmMvZHVyYWJsZS5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vc3JjL2R1cmFibGUuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9zcmMvZHVyYWJsZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABqsCUuMhEAADIRAAAiAAAAQGFnb3JpYy96b25lLXYwLjIuMi9zcmMvZHVyYWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBhZ29yaWMvYmFzZS16b25lIl0sImV4cG9ydHMiOlsibWFrZUR1cmFibGVab25lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLEZhcixpc1Bhc3NhYmxlLGNhbkJlRHVyYWJsZSxtYWtlU2NhbGFyTWFwU3RvcmUscHJlcGFyZUV4byxwcmVwYXJlRXhvQ2xhc3MscHJlcGFyZUV4b0NsYXNzS2l0LHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUscHJvdmlkZUR1cmFibGVTZXRTdG9yZSxwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSxwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSx3YXRjaFByb21pc2Usa2V5cyxtYWtlT25jZUtpdDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dLFtcImlzUGFzc2FibGVcIiwgWyRo4oCNX2EgPT4gKGlzUGFzc2FibGUgPSAkaOKAjV9hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wiY2FuQmVEdXJhYmxlXCIsIFskaOKAjV9hID0+IChjYW5CZUR1cmFibGUgPSAkaOKAjV9hKV1dLFtcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjigI1fYSA9PiAobWFrZVNjYWxhck1hcFN0b3JlID0gJGjigI1fYSldXSxbXCJwcmVwYXJlRXhvXCIsIFskaOKAjV9hID0+IChwcmVwYXJlRXhvID0gJGjigI1fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NcIiwgWyRo4oCNX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRo4oCNX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzS2l0XCIsIFskaOKAjV9hID0+IChwcmVwYXJlRXhvQ2xhc3NLaXQgPSAkaOKAjV9hKV1dLFtcInByb3ZpZGVEdXJhYmxlTWFwU3RvcmVcIiwgWyRo4oCNX2EgPT4gKHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUgPSAkaOKAjV9hKV1dLFtcInByb3ZpZGVEdXJhYmxlU2V0U3RvcmVcIiwgWyRo4oCNX2EgPT4gKHByb3ZpZGVEdXJhYmxlU2V0U3RvcmUgPSAkaOKAjV9hKV1dLFtcInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlXCIsIFskaOKAjV9hID0+IChwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSA9ICRo4oCNX2EpXV0sW1wicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmVcIiwgWyRo4oCNX2EgPT4gKHByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlID0gJGjigI1fYSldXSxbXCJ3YXRjaFByb21pc2VcIiwgWyRo4oCNX2EgPT4gKHdhdGNoUHJvbWlzZSA9ICRo4oCNX2EpXV1dXSxbXCJAYWdvcmljL2Jhc2Utem9uZVwiLCBbW1wiYWdvcmljVmF0RGF0YUtleXNcIiwgWyRo4oCNX2EgPT4gKGtleXMgPSAkaOKAjV9hKV1dLFtcIm1ha2VPbmNlS2l0XCIsIFskaOKAjV9hID0+IChtYWtlT25jZUtpdCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgaXNTdG9yYWJsZT0oc3BlY2ltZW4pPT5pc1Bhc3NhYmxlKHNwZWNpbWVuKSYmY2FuQmVEdXJhYmxlKHNwZWNpbWVuKTtcbmhhcmRlbihpc1N0b3JhYmxlKTtcblxuLypcblxuICovXG5jb25zdCBhdHRhY2hEdXJhYmxlU3RvcmVzPShnZXRCYWdnYWdlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWFwU3RvcmU9KGxhYmVsLG9wdGlvbnMpPT57XG5jb25zdCBiYWdnYWdlPWdldEJhZ2dhZ2UoKTtcbmNvbnN0IHJldD1wcm92aWRlRHVyYWJsZU1hcFN0b3JlKGJhZ2dhZ2UsbGFiZWwsb3B0aW9ucyk7XG5yZXR1cm4gcmV0O1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzZXRTdG9yZT0obGFiZWwsb3B0aW9ucyk9PlxucHJvdmlkZUR1cmFibGVTZXRTdG9yZShnZXRCYWdnYWdlKCksbGFiZWwsb3B0aW9ucyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd2Vha1NldFN0b3JlPShsYWJlbCxvcHRpb25zKT0+XG5wcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZShnZXRCYWdnYWdlKCksbGFiZWwsb3B0aW9ucyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd2Vha01hcFN0b3JlPShsYWJlbCxvcHRpb25zKT0+XG5wcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZShnZXRCYWdnYWdlKCksbGFiZWwsb3B0aW9ucyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucmV0dXJuIEZhcignZHVyYWJsZVN0b3Jlcycse1xuLy9cbmRldGFjaGVkOigpPT5kZXRhY2hlZER1cmFibGVTdG9yZXMsXG5pc1N0b3JhYmxlLFxubWFwU3RvcmUsXG5zZXRTdG9yZSxcbndlYWtNYXBTdG9yZSxcbndlYWtTZXRTdG9yZX0pO1xuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZXRhY2hlZER1cmFibGVTdG9yZXM9YXR0YWNoRHVyYWJsZVN0b3JlcygoKT0+XG5tYWtlU2NhbGFyTWFwU3RvcmUoJ2RldGFjaGVkJykpO1xuXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUR1cmFibGVab25lPShiYWdnYWdlLGJhc2VMYWJlbD0nZHVyYWJsZVpvbmUnKT0+e1xuYmFnZ2FnZXx8RmFpbCBgYmFnZ2FnZSByZXF1aXJlZGA7XG5cbmNvbnN0IGF0dGFjaGVkU3RvcmVzPWF0dGFjaER1cmFibGVTdG9yZXMoKCk9PmJhZ2dhZ2UpO1xuXG5jb25zdHttYWtlT25jZSx3cmFwUHJvdmlkZXJ9PW1ha2VPbmNlS2l0KFxuYmFzZUxhYmVsLFxuYXR0YWNoZWRTdG9yZXMsXG5iYWdnYWdlKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBleG9DbGFzcz0oLi4uYXJncyk9PnByZXBhcmVFeG9DbGFzcyhiYWdnYWdlLC4uLmFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8vXG5jb25zdCBleG9DbGFzc0tpdD0oLi4uYXJncyk9PnByZXBhcmVFeG9DbGFzc0tpdChiYWdnYWdlLC4uLmFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGV4bz0oLi4uYXJncyk9PnByZXBhcmVFeG8oYmFnZ2FnZSwuLi5hcmdzKTtcblxuY29uc3Qgc3ViWm9uZVN0b3JlPXdyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy5tYXBTdG9yZSxrZXlzLnpvbmUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN1YlpvbmU9KGxhYmVsLG9wdGlvbnM9e30pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3ViQmFnZ2FnZT1zdWJab25lU3RvcmUobGFiZWwsb3B0aW9ucyk7XG5yZXR1cm4gbWFrZUR1cmFibGVab25lKHN1YkJhZ2dhZ2UsIGAke2Jhc2VMYWJlbH0uJHtsYWJlbH1gKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCdkdXJhYmxlWm9uZScse1xuZXhvOndyYXBQcm92aWRlcihleG8sa2V5cy5leG8pLFxuZXhvQ2xhc3M6d3JhcFByb3ZpZGVyKGV4b0NsYXNzLGtleXMuZXhvQ2xhc3MpLFxuZXhvQ2xhc3NLaXQ6d3JhcFByb3ZpZGVyKGV4b0NsYXNzS2l0LGtleXMuZXhvQ2xhc3NLaXQpLFxuc3ViWm9uZSxcblxubWFrZU9uY2UsXG53YXRjaFByb21pc2UsXG5kZXRhY2hlZDphdHRhY2hlZFN0b3Jlcy5kZXRhY2hlZCxcbmlzU3RvcmFibGU6YXR0YWNoZWRTdG9yZXMuaXNTdG9yYWJsZSxcblxubWFwU3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLm1hcFN0b3JlLGtleXMuc3RvcmUpLFxuc2V0U3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLnNldFN0b3JlLGtleXMuc3RvcmUpLFxud2Vha01hcFN0b3JlOndyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy53ZWFrTWFwU3RvcmUsa2V5cy5zdG9yZSksXG53ZWFrU2V0U3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLndlYWtTZXRTdG9yZSxrZXlzLnN0b3JlKX0pO1xuXG4gfTskaOKAjV9vbmNlLm1ha2VEdXJhYmxlWm9uZShtYWtlRHVyYWJsZVpvbmUpO1xuaGFyZGVuKG1ha2VEdXJhYmxlWm9uZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRHVyYWJsZVpvbmUiOlsibWFrZUR1cmFibGVab25lIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADSQ5KbTBAAA0wQAACsAAABAZW5kby9jb21tb24tdjEuMi41L2FwcGx5LWxhYmVsaW5nLWVycm9yLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9wcm9taXNlLWtpdCIsIi4vdGhyb3ctbGFiZWxlZC5qcyJdLCJleHBvcnRzIjpbImFwcGx5TGFiZWxpbmdFcnJvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxpc1Byb21pc2UsdGhyb3dMYWJlbGVkOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjigI1fYSA9PiAoaXNQcm9taXNlID0gJGjigI1fYSldXV1dLFtcIi4vdGhyb3ctbGFiZWxlZC5qc1wiLCBbW1widGhyb3dMYWJlbGVkXCIsIFskaOKAjV9hID0+ICh0aHJvd0xhYmVsZWQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFwcGx5TGFiZWxpbmdFcnJvcj0oZnVuYyxhcmdzLGxhYmVsPXVuZGVmaW5lZCk9PntcbmlmKGxhYmVsPT09dW5kZWZpbmVkKXtcbnJldHVybiBmdW5jKC4uLmFyZ3MpO1xuIH1cbmxldCByZXN1bHQ7XG50cnl7XG5yZXN1bHQ9ZnVuYyguLi5hcmdzKTtcbiB9Y2F0Y2goZXJyKXtcbnRocm93TGFiZWxlZChlcnIsbGFiZWwpO1xuIH1cbmlmKGlzUHJvbWlzZShyZXN1bHQpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBFLndoZW4ocmVzdWx0LHVuZGVmaW5lZCwocmVhc29uKT0+dGhyb3dMYWJlbGVkKHJlYXNvbixsYWJlbCkpO1xuIH1lbHNle1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfTskaOKAjV9vbmNlLmFwcGx5TGFiZWxpbmdFcnJvcihhcHBseUxhYmVsaW5nRXJyb3IpO1xuaGFyZGVuKGFwcGx5TGFiZWxpbmdFcnJvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhcHBseUxhYmVsaW5nRXJyb3IiOlsiYXBwbHlMYWJlbGluZ0Vycm9yIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALeZC8BmBAAAZgQAACoAAABAZW5kby9jb21tb24tdjEuMi41L2Zyb20tdW5pcXVlLWVudHJpZXMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsiZnJvbVVuaXF1ZUVudHJpZXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGZyb21VbmlxdWVFbnRyaWVzPShhbGxFbnRyaWVzKT0+e1xuY29uc3QgZW50cmllc0FycmF5PVsuLi5hbGxFbnRyaWVzXTtcbmNvbnN0IHJlc3VsdD1oYXJkZW4oZnJvbUVudHJpZXMoZW50cmllc0FycmF5KSk7XG5pZihvd25LZXlzKHJlc3VsdCkubGVuZ3RoPT09ZW50cmllc0FycmF5Lmxlbmd0aCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNvbnN0IG5hbWVzPW5ldyBTZXQoKTtcbmZvcihjb25zdFtuYW1lLF9db2YgZW50cmllc0FycmF5KXtcbmlmKG5hbWVzLmhhcyhuYW1lKSl7XG5GYWlsIGBjb2xsaXNpb24gb24gcHJvcGVydHkgbmFtZSAke3EobmFtZSl9OiAke2VudHJpZXNBcnJheX1gO1xuIH1cbm5hbWVzLmFkZChuYW1lKTtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogZmFpbGVkIHRvIGNyZWF0ZSBvYmplY3QgZnJvbSB1bmlxdWUgZW50cmllc2A7XG4gfTskaOKAjV9vbmNlLmZyb21VbmlxdWVFbnRyaWVzKGZyb21VbmlxdWVFbnRyaWVzKTtcbmhhcmRlbihmcm9tVW5pcXVlRW50cmllcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJmcm9tVW5pcXVlRW50cmllcyI6WyJmcm9tVW5pcXVlRW50cmllcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAKb9UrPQIAAD0CAAAkAAAAQGVuZG8vY29tbW9uLXYxLjIuNS9pZGVudC1jaGVja2VyLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJpZGVudENoZWNrZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLy9cbi8vXG4vL1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlkZW50Q2hlY2tlcj0oY29uZCxfZGV0YWlscyk9PmNvbmQ7JGjigI1fb25jZS5pZGVudENoZWNrZXIoaWRlbnRDaGVja2VyKTtcbmhhcmRlbihpZGVudENoZWNrZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaWRlbnRDaGVja2VyIjpbImlkZW50Q2hlY2tlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC7Q+YXfgIAAH4CAAAmAAAAQGVuZG8vY29tbW9uLXYxLjIuNS9saXN0LWRpZmZlcmVuY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImxpc3REaWZmZXJlbmNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBsaXN0RGlmZmVyZW5jZT0obGVmdExpc3QscmlnaHRMaXN0KT0+e1xuY29uc3QgcmlnaHRTZXQ9bmV3IFNldChyaWdodExpc3QpO1xucmV0dXJuIGxlZnRMaXN0LmZpbHRlcigoZWxlbWVudCk9PiFyaWdodFNldC5oYXMoZWxlbWVudCkpO1xuIH07JGjigI1fb25jZS5saXN0RGlmZmVyZW5jZShsaXN0RGlmZmVyZW5jZSk7XG5oYXJkZW4obGlzdERpZmZlcmVuY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibGlzdERpZmZlcmVuY2UiOlsibGlzdERpZmZlcmVuY2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA8CgiO2UDAABlAwAAKgAAAEBlbmRvL2NvbW1vbi12MS4yLjUvbWFrZS1hcnJheS1pdGVyYXRvci5qc3siaW1wb3J0cyI6WyIuL21ha2UtaXRlcmF0b3IuanMiXSwiZXhwb3J0cyI6WyJtYWtlQXJyYXlJdGVyYXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZUl0ZXJhdG9yOyRo4oCNX2ltcG9ydHMoW1tcIi4vbWFrZS1pdGVyYXRvci5qc1wiLCBbW1wibWFrZUl0ZXJhdG9yXCIsIFskaOKAjV9hID0+IChtYWtlSXRlcmF0b3IgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQXJyYXlJdGVyYXRvcj0oYXJyKT0+e1xuY29uc3R7bGVuZ3RofT1hcnI7XG5sZXQgaT0wO1xucmV0dXJuIG1ha2VJdGVyYXRvcigoKT0+e1xuLyogICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoaTxsZW5ndGgpe1xudmFsdWU9YXJyW2ldO1xuaSs9MTtcbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWV9KTtcbiB9XG4vL1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlfSk7XG4gfSk7XG4gfTskaOKAjV9vbmNlLm1ha2VBcnJheUl0ZXJhdG9yKG1ha2VBcnJheUl0ZXJhdG9yKTtcbmhhcmRlbihtYWtlQXJyYXlJdGVyYXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlQXJyYXlJdGVyYXRvciI6WyJtYWtlQXJyYXlJdGVyYXRvciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADjetlKPwIAAD8CAAAkAAAAQGVuZG8vY29tbW9uLXYxLjIuNS9tYWtlLWl0ZXJhdG9yLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlSXRlcmF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSXRlcmF0b3I9KG5leHQpPT57XG5jb25zdCBpdGVyPWhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+aXRlcixcbm5leHR9KTtcblxucmV0dXJuIGl0ZXI7XG4gfTskaOKAjV9vbmNlLm1ha2VJdGVyYXRvcihtYWtlSXRlcmF0b3IpO1xuaGFyZGVuKG1ha2VJdGVyYXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlSXRlcmF0b3IiOlsibWFrZUl0ZXJhdG9yIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKliUIoIAwAACAMAACEAAABAZW5kby9jb21tb24tdjEuMi41L29iamVjdC1tYXAuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm9iamVjdE1hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICBjb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG9iamVjdE1hcD0ob3JpZ2luYWwsbWFwRm4pPT57XG5jb25zdCBlbnRzPWVudHJpZXMob3JpZ2luYWwpO1xuY29uc3QgbWFwRW50cz1lbnRzLm1hcChcbihbayx2XSk9Pi8qICAgICAgICAgICAgICAgICAgICAgICAqL1trLG1hcEZuKHYsayldKTtcblxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9oYXJkZW4oZnJvbUVudHJpZXMobWFwRW50cykpKTtcbiB9OyRo4oCNX29uY2Uub2JqZWN0TWFwKG9iamVjdE1hcCk7XG5oYXJkZW4ob2JqZWN0TWFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im9iamVjdE1hcCI6WyJvYmplY3RNYXAiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA4XMrTOcDAADnAwAAJgAAAEBlbmRvL2NvbW1vbi12MS4yLjUvb2JqZWN0LW1ldGEtbWFwLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJvYmplY3RNZXRhTWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIGNvbnN0e2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMsY3JlYXRlLGZyb21FbnRyaWVzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG9iamVjdE1ldGFNYXA9KFxub3JpZ2luYWwsXG5tZXRhTWFwRm4sXG5wcm90bz1PYmplY3QucHJvdG90eXBlKT0+XG57XG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKG9yaWdpbmFsKTtcbmNvbnN0IGtleXM9b3duS2V5cyhvcmlnaW5hbCk7XG5cbmNvbnN0IGRlc2NFbnRyaWVzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmtleXMuXG5tYXAoKGtleSk9PltrZXksbWV0YU1hcEZuKGRlc2NzW2tleV0sa2V5KV0pLlxuZmlsdGVyKChbX2tleSxvcHREZXNjXSk9Pm9wdERlc2MhPT11bmRlZmluZWQpO1xuXG5yZXR1cm4gaGFyZGVuKGNyZWF0ZShwcm90byxmcm9tRW50cmllcyhkZXNjRW50cmllcykpKTtcbiB9OyRo4oCNX29uY2Uub2JqZWN0TWV0YU1hcChvYmplY3RNZXRhTWFwKTtcbmhhcmRlbihvYmplY3RNZXRhTWFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im9iamVjdE1ldGFNYXAiOlsib2JqZWN0TWV0YU1hcCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADtPiOx7QMAAO0DAAAkAAAAQGVuZG8vY29tbW9uLXYxLjIuNS90aHJvdy1sYWJlbGVkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbInRocm93TGFiZWxlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgWCxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjigI1fYSA9PiAobWFrZUVycm9yID0gJGjigI1fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaOKAjV9hID0+IChhbm5vdGF0ZUVycm9yID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB0aHJvd0xhYmVsZWQ9KFxuaW5uZXJFcnIsXG5sYWJlbCxcbmVyckNvbnN0cnVjdG9yPXVuZGVmaW5lZCxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG57XG5pZih0eXBlb2YgbGFiZWw9PT0nbnVtYmVyJyl7XG5sYWJlbD0gYFske2xhYmVsfV1gO1xuIH1cbmNvbnN0IG91dGVyRXJyPW1ha2VFcnJvcihcbiBgJHtsYWJlbH06ICR7aW5uZXJFcnIubWVzc2FnZX1gLFxuZXJyQ29uc3RydWN0b3IsXG5vcHRpb25zKTtcblxuYW5ub3RhdGVFcnJvcihvdXRlckVycixYIGBDYXVzZWQgYnkgJHtpbm5lckVycn1gKTtcbnRocm93IG91dGVyRXJyO1xuIH07JGjigI1fb25jZS50aHJvd0xhYmVsZWQodGhyb3dMYWJlbGVkKTtcbmhhcmRlbih0aHJvd0xhYmVsZWQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidGhyb3dMYWJlbGVkIjpbInRocm93TGFiZWxlZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABUnPw8mQEAAJkBAAAhAAAAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2Vudi1vcHRpb25zLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZW52LW9wdGlvbnMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9zcmMvZW52LW9wdGlvbnMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAATeP7/PUNAAD1DQAAKwAAAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuNi9zcmMvZW52LW9wdGlvbnMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiLCJnZXRFbnZpcm9ubWVudE9wdGlvbiIsImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiLCJtYWtlRW52aXJvbm1lbnRDYXB0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLyogICAgICAgICAgICAgICAgICAgKi9cbi8vXG5cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5cbmNvbnN0e2ZyZWV6ZX09T2JqZWN0O1xuY29uc3R7YXBwbHl9PVJlZmxlY3Q7XG5cbi8vXG4vL1xuY29uc3QgdW5jdXJyeVRoaXM9XG4oZm4pPT5cbihyZWNlaXZlciwuLi5hcmdzKT0+XG5hcHBseShmbixyZWNlaXZlcixhcmdzKTtcbmNvbnN0IGFycmF5UHVzaD11bmN1cnJ5VGhpcyhBcnJheS5wcm90b3R5cGUucHVzaCk7XG5jb25zdCBhcnJheUluY2x1ZGVzPXVuY3VycnlUaGlzKEFycmF5LnByb3RvdHlwZS5pbmNsdWRlcyk7XG5jb25zdCBzdHJpbmdTcGxpdD11bmN1cnJ5VGhpcyhTdHJpbmcucHJvdG90eXBlLnNwbGl0KTtcblxuY29uc3QgcT1KU09OLnN0cmluZ2lmeTtcblxuY29uc3QgRmFpbD0obGl0ZXJhbHMsLi4uYXJncyk9PntcbmxldCBtc2c9bGl0ZXJhbHNbMF07XG5mb3IobGV0IGk9MDtpPGFyZ3MubGVuZ3RoO2krPTEpe1xubXNnPSBgJHttc2d9JHthcmdzW2ldfSR7bGl0ZXJhbHNbaSsxXX1gO1xuIH1cbnRocm93IEVycm9yKG1zZyk7XG4gfTtcblxuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbnZpcm9ubWVudENhcHRvcj0oYUdsb2JhbCxkcm9wTmFtZXM9ZmFsc2UpPT57XG5jb25zdCBjYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXM9W107XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGdldEVudmlyb25tZW50T3B0aW9uPShcbm9wdGlvbk5hbWUsXG5kZWZhdWx0U2V0dGluZyxcbm9wdE90aGVyVmFsdWVzPXVuZGVmaW5lZCk9Plxue1xudHlwZW9mIG9wdGlvbk5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBFbnZpcm9ubWVudCBvcHRpb24gbmFtZSAke3Eob3B0aW9uTmFtZSl9IG11c3QgYmUgYSBzdHJpbmcuYDtcbnR5cGVvZiBkZWZhdWx0U2V0dGluZz09PSdzdHJpbmcnfHxcbkZhaWwgYEVudmlyb25tZW50IG9wdGlvbiBkZWZhdWx0IHNldHRpbmcgJHtxKFxuZGVmYXVsdFNldHRpbmcpXG4gfSBtdXN0IGJlIGEgc3RyaW5nLmA7XG5cbi8qICAgICAgICAgICAgICAgICAqL1xubGV0IHNldHRpbmc9ZGVmYXVsdFNldHRpbmc7XG5jb25zdCBnbG9iYWxQcm9jZXNzPWFHbG9iYWwucHJvY2Vzc3x8dW5kZWZpbmVkO1xuY29uc3QgZ2xvYmFsRW52PVxudHlwZW9mIGdsb2JhbFByb2Nlc3M9PT0nb2JqZWN0JyYmZ2xvYmFsUHJvY2Vzcy5lbnZ8fHVuZGVmaW5lZDtcbmlmKHR5cGVvZiBnbG9iYWxFbnY9PT0nb2JqZWN0Jyl7XG5pZihvcHRpb25OYW1lIGluIGdsb2JhbEVudil7XG5pZighZHJvcE5hbWVzKXtcbmFycmF5UHVzaChjYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXMsb3B0aW9uTmFtZSk7XG4gfVxuY29uc3Qgb3B0aW9uVmFsdWU9Z2xvYmFsRW52W29wdGlvbk5hbWVdO1xuLy9cbnR5cGVvZiBvcHRpb25WYWx1ZT09PSdzdHJpbmcnfHxcbkZhaWwgYEVudmlyb25tZW50IG9wdGlvbiBuYW1lZCAke3EoXG5vcHRpb25OYW1lKVxuIH0sIGlmIHByZXNlbnQsIG11c3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgc3RyaW5nIHZhbHVlLCBnb3QgJHtxKFxub3B0aW9uVmFsdWUpXG4gfWA7XG5zZXR0aW5nPW9wdGlvblZhbHVlO1xuIH1cbiB9XG5vcHRPdGhlclZhbHVlcz09PXVuZGVmaW5lZHx8XG5zZXR0aW5nPT09ZGVmYXVsdFNldHRpbmd8fFxuYXJyYXlJbmNsdWRlcyhvcHRPdGhlclZhbHVlcyxzZXR0aW5nKXx8XG5GYWlsIGBVbnJlY29nbml6ZWQgJHtxKG9wdGlvbk5hbWUpfSB2YWx1ZSAke3EoXG5zZXR0aW5nKVxuIH0uIEV4cGVjdGVkIG9uZSBvZiAke3EoW2RlZmF1bHRTZXR0aW5nLC4uLm9wdE90aGVyVmFsdWVzXSl9YDtcbnJldHVybiBzZXR0aW5nO1xuIH07XG5mcmVlemUoZ2V0RW52aXJvbm1lbnRPcHRpb24pO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0PShvcHRpb25OYW1lKT0+e1xuY29uc3Qgb3B0aW9uPWdldEVudmlyb25tZW50T3B0aW9uKG9wdGlvbk5hbWUsJycpO1xucmV0dXJuIGZyZWV6ZShvcHRpb249PT0nJz9bXTpzdHJpbmdTcGxpdChvcHRpb24sJywnKSk7XG4gfTtcbmZyZWV6ZShnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KTtcblxuY29uc3QgZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcz0ob3B0aW9uTmFtZSxlbGVtZW50KT0+XG5hcnJheUluY2x1ZGVzKGdldEVudmlyb25tZW50T3B0aW9uc0xpc3Qob3B0aW9uTmFtZSksZWxlbWVudCk7XG5cbmNvbnN0IGdldENhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcz0oKT0+e1xucmV0dXJuIGZyZWV6ZShbLi4uY2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzXSk7XG4gfTtcbmZyZWV6ZShnZXRDYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXMpO1xuXG5yZXR1cm4gZnJlZXplKHtcbmdldEVudmlyb25tZW50T3B0aW9uLFxuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCxcbmVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMsXG5nZXRDYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXN9KTtcblxuIH07JGjigI1fb25jZS5tYWtlRW52aXJvbm1lbnRDYXB0b3IobWFrZUVudmlyb25tZW50Q2FwdG9yKTtcbmZyZWV6ZShtYWtlRW52aXJvbm1lbnRDYXB0b3IpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAge1xuZ2V0RW52aXJvbm1lbnRPcHRpb24sXG5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0LFxuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhc309XG5tYWtlRW52aXJvbm1lbnRDYXB0b3IoZ2xvYmFsVGhpcyx0cnVlKTskaOKAjV9vbmNlLmdldEVudmlyb25tZW50T3B0aW9uKGdldEVudmlyb25tZW50T3B0aW9uKTskaOKAjV9vbmNlLmdldEVudmlyb25tZW50T3B0aW9uc0xpc3QoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCk7JGjigI1fb25jZS5lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUVudmlyb25tZW50Q2FwdG9yIjpbIm1ha2VFbnZpcm9ubWVudENhcHRvciJdLCJnZXRFbnZpcm9ubWVudE9wdGlvbiI6WyJnZXRFbnZpcm9ubWVudE9wdGlvbiJdLCJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0IjpbImdldEVudmlyb25tZW50T3B0aW9uc0xpc3QiXSwiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyI6WyJlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANfWPgbxBwAA8QcAABwAAABAZW5kby9lcnJvcnMtdjEuMi41L2luZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJGYWlsIiwiWCIsImFubm90YXRlRXJyb3IiLCJhc3NlcnQiLCJiIiwiYmFyZSIsIm1ha2VFcnJvciIsIm5vdGUiLCJxIiwicXVvdGUiLCJyZWRhY3RlZCIsInRocm93UmVkYWN0ZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLyogICAgICAgICAgICAgICAgICAgKi9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cblxuY29uc3QgZ2xvYmFsQXNzZXJ0PWdsb2JhbFRoaXMuYXNzZXJ0O1xuXG5pZihnbG9iYWxBc3NlcnQ9PT11bmRlZmluZWQpe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbml0aWFsaXplIEBlbmRvL2Vycm9ycywgbWlzc2luZyBnbG9iYWxUaGlzLmFzc2VydCwgaW1wb3J0ICdzZXMnIGJlZm9yZSAnQGVuZG8vZXJyb3JzJ2ApO1xuXG4gfVxuXG5jb25zdCBtaXNzaW5nPS8qICAgICAgICAgICAgICAgICovW1xuJ3R5cGVvZicsXG4nZXJyb3InLFxuJ2ZhaWwnLFxuJ2VxdWFsJyxcbidzdHJpbmcnLFxuJ25vdGUnLFxuJ2RldGFpbHMnLFxuJ0ZhaWwnLFxuJ3F1b3RlJyxcbi8vXG4vL1xuLy9cbi8vXG4nbWFrZUFzc2VydCddLlxuZmlsdGVyKChuYW1lKT0+Z2xvYmFsQXNzZXJ0W25hbWVdPT09dW5kZWZpbmVkKTtcbmlmKG1pc3NpbmcubGVuZ3RoPjApe1xudGhyb3cgRXJyb3IoXG4gYENhbm5vdCBpbml0aWFsaXplIEBlbmRvL2Vycm9ycywgbWlzc2luZyBnbG9iYWxUaGlzLmFzc2VydCBtZXRob2RzICR7bWlzc2luZy5qb2luKFxuJywgJylcbiB9YCk7XG5cbiB9XG5cbi8vXG4vL1xuLy9cbmNvbnN0e1xuYmFyZSxcbmRldGFpbHM6cmVkYWN0ZWQsXG5lcnJvcjptYWtlRXJyb3IsXG5GYWlsOnRocm93UmVkYWN0ZWQsXG5tYWtlQXNzZXJ0Ol9vbWl0dGVkTWFrZUFzc2VydCxcbm5vdGUsXG5xdW90ZSxcbi4uLmFzc2VydGlvbnN9PVxuZ2xvYmFsQXNzZXJ0O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuJGjigI1fb25jZS5yZWRhY3RlZChyZWRhY3RlZCk7JGjigI1fb25jZS5tYWtlRXJyb3IobWFrZUVycm9yKTskaOKAjV9vbmNlLnRocm93UmVkYWN0ZWQodGhyb3dSZWRhY3RlZCk7JGjigI1fb25jZS5ub3RlKG5vdGUpOyRo4oCNX29uY2UucXVvdGUocXVvdGUpO2NvbnN0IGFzc2VydD0odmFsdWUsb3B0RGV0YWlscyxlcnJDb250cnVjdG9yLG9wdGlvbnMpPT5cbmdsb2JhbEFzc2VydCh2YWx1ZSxvcHREZXRhaWxzLGVyckNvbnRydWN0b3Isb3B0aW9ucyk7JGjigI1fb25jZS5hc3NlcnQoYXNzZXJ0KTtcbk9iamVjdC5hc3NpZ24oYXNzZXJ0LGFzc2VydGlvbnMpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBiYXJlT3JRdW90ZT1iYXJlfHxxdW90ZTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRo4oCNX29uY2UuYmFyZU9yUXVvdGUoYmFyZU9yUXVvdGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVkYWN0ZWQiOlsicmVkYWN0ZWQiXSwiWCI6WyJyZWRhY3RlZCJdLCJtYWtlRXJyb3IiOlsibWFrZUVycm9yIl0sInRocm93UmVkYWN0ZWQiOlsidGhyb3dSZWRhY3RlZCJdLCJGYWlsIjpbInRocm93UmVkYWN0ZWQiXSwibm90ZSI6WyJub3RlIl0sImFubm90YXRlRXJyb3IiOlsibm90ZSJdLCJxdW90ZSI6WyJxdW90ZSJdLCJxIjpbInF1b3RlIl0sImFzc2VydCI6WyJhc3NlcnQiXSwiYmFyZSI6WyJiYXJlT3JRdW90ZSJdLCJiIjpbImJhcmVPclF1b3RlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMZt/ZukEAAApBAAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvRS5qc3siaW1wb3J0cyI6WyIuL3RyYWNrLXR1cm5zLmpzIiwiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHJhY2tUdXJucyxtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI7JGjigI1faW1wb3J0cyhbW1wiLi90cmFjay10dXJucy5qc1wiLCBbW1widHJhY2tUdXJuc1wiLCBbJGjigI1fYSA9PiAodHJhY2tUdXJucyA9ICRo4oCNX2EpXV1dXSxbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjigI1fYSA9PiAobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuY29uc3R7ZGV0YWlsczpYLHF1b3RlOnEsRmFpbCxlcnJvcjptYWtlRXJyb3J9PWFzc2VydDtcbmNvbnN0e2Fzc2lnbixjcmVhdGV9PU9iamVjdDtcblxuY29uc3Qgb25TZW5kPW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19TRU5EX0JSRUFLUE9JTlRTJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBiYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyPXtcbnNldChfdGFyZ2V0LF9wcm9wLF92YWx1ZSl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbmlzRXh0ZW5zaWJsZShfdGFyZ2V0KXtcbnJldHVybiBmYWxzZTtcbiB9LFxuc2V0UHJvdG90eXBlT2YoX3RhcmdldCxfdmFsdWUpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5kZWxldGVQcm9wZXJ0eShfdGFyZ2V0LF9wcm9wKXtcbnJldHVybiBmYWxzZTtcbiB9fTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFUHJveHlIYW5kbGVyPShyZWNpcGllbnQsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuZ2V0OihfdGFyZ2V0LHByb3BlcnR5S2V5LHJlY2VpdmVyKT0+e1xucmV0dXJuIGhhcmRlbihcbntcbi8vXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbltwcm9wZXJ0eUtleV0oLi4uYXJncyl7XG5pZih0aGlzIT09cmVjZWl2ZXIpe1xuLy9cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5yZWplY3QoXG5tYWtlRXJyb3IoXG5YIGBVbmV4cGVjdGVkIHJlY2VpdmVyIGZvciBcIiR7cShwcm9wZXJ0eUtleSl9XCIgbWV0aG9kIG9mIEUoJHtxKFxucmVjaXBpZW50KVxuIH0pYCkpO1xuXG5cbiB9XG5cbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHByb3BlcnR5S2V5KSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxucmV0dXJuIEhhbmRsZWRQcm9taXNlLmFwcGx5TWV0aG9kKHJlY2lwaWVudCxwcm9wZXJ0eUtleSxhcmdzKTtcbiB9XG4vL1xufVtwcm9wZXJ0eUtleV0pO1xuXG4gfSxcbmFwcGx5OihfdGFyZ2V0LF90aGlzQXJnLGFyZ0FycmF5PVtdKT0+e1xuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsdW5kZWZpbmVkKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbiB9XG5yZXR1cm4gSGFuZGxlZFByb21pc2UuYXBwbHlGdW5jdGlvbihyZWNpcGllbnQsYXJnQXJyYXkpO1xuIH0sXG5oYXM6KF90YXJnZXQsX3ApPT57XG4vL1xucmV0dXJuIHRydWU7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFU2VuZE9ubHlQcm94eUhhbmRsZXI9KHJlY2lwaWVudCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5nZXQ6KF90YXJnZXQscHJvcGVydHlLZXkscmVjZWl2ZXIpPT57XG5yZXR1cm4gaGFyZGVuKFxue1xuLy9cbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bcHJvcGVydHlLZXldKC4uLmFyZ3Mpe1xuLy9cbnRoaXM9PT1yZWNlaXZlcnx8XG5GYWlsIGBVbmV4cGVjdGVkIHJlY2VpdmVyIGZvciBcIiR7cShcbnByb3BlcnR5S2V5KVxuIH1cIiBtZXRob2Qgb2YgRS5zZW5kT25seSgke3EocmVjaXBpZW50KX0pYDtcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHByb3BlcnR5S2V5KSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxuSGFuZGxlZFByb21pc2UuYXBwbHlNZXRob2RTZW5kT25seShyZWNpcGllbnQscHJvcGVydHlLZXksYXJncyk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbi8vXG59W3Byb3BlcnR5S2V5XSk7XG5cbiB9LFxuYXBwbHk6KF90YXJnZXQsX3RoaXNBcmcsYXJnc0FycmF5PVtdKT0+e1xuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsdW5kZWZpbmVkKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbiB9XG5IYW5kbGVkUHJvbWlzZS5hcHBseUZ1bmN0aW9uU2VuZE9ubHkocmVjaXBpZW50LGFyZ3NBcnJheSk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH0sXG5oYXM6KF90YXJnZXQsX3ApPT57XG4vL1xucmV0dXJuIHRydWU7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFR2V0UHJveHlIYW5kbGVyPSh4LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmhhczooX3RhcmdldCxfcHJvcCk9PnRydWUsXG5nZXQ6KF90YXJnZXQscHJvcCk9PkhhbmRsZWRQcm9taXNlLmdldCh4LHByb3ApfSk7XG5cblxuLypcblxuICovXG5jb25zdCBtYWtlRT0oSGFuZGxlZFByb21pc2UpPT57XG5yZXR1cm4gaGFyZGVuKFxuYXNzaWduKFxuLypcblxuXG5cblxuXG5cblxuICAgICAgICovXG4vL1xuKHgpPT5oYXJkZW4obmV3IFByb3h5KCgpPT57IH0sbWFrZUVQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcbntcbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuZ2V0Oih4KT0+XG4vL1xuaGFyZGVuKFxubmV3IFByb3h5KGNyZWF0ZShudWxsKSxtYWtlRUdldFByb3h5SGFuZGxlcih4LEhhbmRsZWRQcm9taXNlKSkpLFxuXG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5yZXNvbHZlOkhhbmRsZWRQcm9taXNlLnJlc29sdmUsXG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5zZW5kT25seTooeCk9PlxuLy9cbmhhcmRlbihcbm5ldyBQcm94eSgoKT0+eyB9LG1ha2VFU2VuZE9ubHlQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpKSxcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xud2hlbjooeCxvbmZ1bGZpbGxlZCxvbnJlamVjdGVkKT0+XG5IYW5kbGVkUHJvbWlzZS5yZXNvbHZlKHgpLnRoZW4oXG4uLi50cmFja1R1cm5zKFtvbmZ1bGZpbGxlZCxvbnJlamVjdGVkXSkpfSkpO1xuXG5cblxuXG4gfTtcblxuY29uc3R7ZGVmYXVsdDokY+KAjV9kZWZhdWx0fT17ZGVmYXVsdDptYWtlRX07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmRlZmF1bHQoJGPigI1fZGVmYXVsdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh5JSp08BAABPAQAAKQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41L3NyYy9leHBvcnRzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAM7iumi1DAAAtQwAACcAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvbG9jYWwuanN7ImltcG9ydHMiOlsiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZ2V0TWV0aG9kTmFtZXMiLCJsb2NhbEFwcGx5RnVuY3Rpb24iLCJsb2NhbEFwcGx5TWV0aG9kIiwibG9jYWxHZXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcjskaOKAjV9pbXBvcnRzKFtbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjigI1fYSA9PiAobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbmNvbnN0e2RldGFpbHM6WCxxdW90ZTpxLEZhaWx9PWFzc2VydDtcblxuY29uc3R7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxnZXRQcm90b3R5cGVPZixmcmVlemV9PU9iamVjdDtcbmNvbnN0e2FwcGx5LG93bktleXN9PVJlZmxlY3Q7XG5cbmNvbnN0IG50eXBlb2Y9KHNwZWNpbWVuKT0+c3BlY2ltZW49PT1udWxsPydudWxsJzp0eXBlb2Ygc3BlY2ltZW47XG5cbmNvbnN0IG9uRGVsaXZlcnk9bWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKCdFTkRPX0RFTElWRVJZX0JSRUFLUE9JTlRTJyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgaXNPYmplY3Q9KHZhbCk9Pk9iamVjdCh2YWwpPT09dmFsO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29tcGFyZVN0cmluZ2lmaWVkPShhLGIpPT57XG5pZih0eXBlb2YgYT09PXR5cGVvZiBiKXtcbmNvbnN0IGxlZnQ9U3RyaW5nKGEpO1xuY29uc3QgcmlnaHQ9U3RyaW5nKGIpO1xuLy9cbnJldHVybiBsZWZ0PHJpZ2h0Py0xOmxlZnQ+cmlnaHQ/MTowO1xuIH1cbmlmKHR5cGVvZiBhPT09J3N5bWJvbCcpe1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N0cmluZycpO1xucmV0dXJuLTE7XG4gfVxuYXNzZXJ0KHR5cGVvZiBhPT09J3N0cmluZycpO1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N5bWJvbCcpO1xucmV0dXJuIDE7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRNZXRob2ROYW1lcz0odmFsKT0+e1xubGV0IGxheWVyPXZhbDtcbmNvbnN0IG5hbWVzPW5ldyBTZXQoKTsvL1xud2hpbGUobGF5ZXIhPT1udWxsJiZsYXllciE9PU9iamVjdC5wcm90b3R5cGUpe1xuLy9cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobGF5ZXIpO1xuZm9yKGNvbnN0IG5hbWUgb2Ygb3duS2V5cyhkZXNjcykpe1xuLy9cbi8vXG5pZih0eXBlb2YgdmFsW25hbWVdPT09J2Z1bmN0aW9uJyl7XG5uYW1lcy5hZGQobmFtZSk7XG4gfVxuIH1cbmlmKCFpc09iamVjdCh2YWwpKXtcbmJyZWFrO1xuIH1cbmxheWVyPWdldFByb3RvdHlwZU9mKGxheWVyKTtcbiB9XG5yZXR1cm4gaGFyZGVuKFsuLi5uYW1lc10uc29ydChjb21wYXJlU3RyaW5naWZpZWQpKTtcbiB9O1xuLy9cbi8vXG4kaOKAjV9vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtmcmVlemUoZ2V0TWV0aG9kTmFtZXMpO1xuXG5jb25zdCAgICAgICAgbG9jYWxBcHBseUZ1bmN0aW9uPShyZWNpcGllbnQsYXJncyk9PntcbnR5cGVvZiByZWNpcGllbnQ9PT0nZnVuY3Rpb24nfHxcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGludm9rZSB0YXJnZXQgYXMgYSBmdW5jdGlvbjsgdHlwZW9mIHRhcmdldCBpcyAke3EoXG5udHlwZW9mKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbmNvbnN0IHJlc3VsdD1hcHBseShyZWNpcGllbnQsdW5kZWZpbmVkLGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRo4oCNX29uY2UubG9jYWxBcHBseUZ1bmN0aW9uKGxvY2FsQXBwbHlGdW5jdGlvbik7XG5cbmNvbnN0ICAgICAgICBsb2NhbEFwcGx5TWV0aG9kPShyZWNpcGllbnQsbWV0aG9kTmFtZSxhcmdzKT0+e1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8bWV0aG9kTmFtZT09PW51bGwpe1xuLy9cbnJldHVybiBsb2NhbEFwcGx5RnVuY3Rpb24ocmVjaXBpZW50LGFyZ3MpO1xuIH1cbmlmKHJlY2lwaWVudD09PXVuZGVmaW5lZHx8cmVjaXBpZW50PT09bnVsbCl7XG5hc3NlcnQuZmFpbChcblggYENhbm5vdCBkZWxpdmVyICR7cShtZXRob2ROYW1lKX0gdG8gdGFyZ2V0OyB0eXBlb2YgdGFyZ2V0IGlzICR7cShcbm50eXBlb2YocmVjaXBpZW50KSlcbiB9YCxcblR5cGVFcnJvcik7XG5cbiB9XG5jb25zdCBmbj1yZWNpcGllbnRbbWV0aG9kTmFtZV07XG5pZihmbj09PXVuZGVmaW5lZCl7XG5hc3NlcnQuZmFpbChcblggYHRhcmdldCBoYXMgbm8gbWV0aG9kICR7cShtZXRob2ROYW1lKX0sIGhhcyAke3EoXG5nZXRNZXRob2ROYW1lcyhyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuIH1cbmNvbnN0IGZ0eXBlPW50eXBlb2YoZm4pO1xudHlwZW9mIGZuPT09J2Z1bmN0aW9uJ3x8XG5GYWlsIGBpbnZva2VkIG1ldGhvZCAke3EobWV0aG9kTmFtZSl9IGlzIG5vdCBhIGZ1bmN0aW9uOyBpdCBpcyBhICR7cShcbmZ0eXBlKVxuIH1gO1xuaWYob25EZWxpdmVyeSYmb25EZWxpdmVyeS5zaG91bGRCcmVha3BvaW50KHJlY2lwaWVudCxtZXRob2ROYW1lKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxuY29uc3QgcmVzdWx0PWFwcGx5KGZuLHJlY2lwaWVudCxhcmdzKTtcbnJldHVybiByZXN1bHQ7XG4gfTskaOKAjV9vbmNlLmxvY2FsQXBwbHlNZXRob2QobG9jYWxBcHBseU1ldGhvZCk7XG5cbmNvbnN0ICAgICAgICBsb2NhbEdldD0odCxrZXkpPT50W2tleV07JGjigI1fb25jZS5sb2NhbEdldChsb2NhbEdldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJsb2NhbEFwcGx5RnVuY3Rpb24iOlsibG9jYWxBcHBseUZ1bmN0aW9uIl0sImxvY2FsQXBwbHlNZXRob2QiOlsibG9jYWxBcHBseU1ldGhvZCJdLCJsb2NhbEdldCI6WyJsb2NhbEdldCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABhurys8QwAAPEMAAA1AAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiXSwiZXhwb3J0cyI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldEVudmlyb25tZW50T3B0aW9uOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJnZXRFbnZpcm9ubWVudE9wdGlvblwiLCBbJGjigI1fYSA9PiAoZ2V0RW52aXJvbm1lbnRPcHRpb24gPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuY29uc3R7cXVvdGU6cSxGYWlsfT1hc3NlcnQ7XG5cbmNvbnN0e2hhc093bixmcmVlemUsZW50cmllc309T2JqZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG4vKlxuXG5cblxuXG5cbiAqL1xuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCBpc0pTT05SZWNvcmQ9KHZhbCk9PlxudHlwZW9mIHZhbD09PSdvYmplY3QnJiZ2YWwhPT1udWxsJiYhQXJyYXkuaXNBcnJheSh2YWwpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzaW1wbGlmeVRhZz0odGFnKT0+e1xuZm9yKGNvbnN0IHByZWZpeCBvZlsnQWxsZWdlZDogJywnRGVidWdOYW1lOiAnXSl7XG5pZih0YWcuc3RhcnRzV2l0aChwcmVmaXgpKXtcbnJldHVybiB0YWcuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gfVxuIH1cbnJldHVybiB0YWc7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI9KG9wdGlvbk5hbWUpPT57XG5sZXQgYnJlYWtwb2ludHM9SlNPTi5wYXJzZShnZXRFbnZpcm9ubWVudE9wdGlvbihvcHRpb25OYW1lLCdudWxsJykpO1xuXG5pZihicmVha3BvaW50cz09PW51bGwpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGJyZWFrcG9pbnRzVGFibGU7XG5cbmNvbnN0IGdldEJyZWFrcG9pbnRzPSgpPT5icmVha3BvaW50cztcbmZyZWV6ZShnZXRCcmVha3BvaW50cyk7XG5cbmNvbnN0IHNldEJyZWFrcG9pbnRzPShuZXdCcmVha3BvaW50cz1icmVha3BvaW50cyk9PntcbmlzSlNPTlJlY29yZChuZXdCcmVha3BvaW50cyl8fFxuRmFpbCBgRXhwZWN0ZWQgJHtxKG9wdGlvbk5hbWUpfSBvcHRpb24gdG8gYmUgYSBKU09OIGJyZWFrcG9pbnRzIHJlY29yZGA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IG5ld0JyZWFrcG9pbnRzVGFibGU9e19fcHJvdG9fXzpudWxsfTtcblxuZm9yKGNvbnN0W3RhZyxtZXRob2RCUHNdb2YgZW50cmllcyhuZXdCcmVha3BvaW50cykpe1xudGFnPT09c2ltcGxpZnlUYWcodGFnKXx8XG5GYWlsIGBKdXN0IHVzZSBzaW1wbGUgdGFnICR7cShzaW1wbGlmeVRhZyh0YWcpKX0gcmF0aGVyIHRoYW4gJHtxKHRhZyl9YDtcbmlzSlNPTlJlY29yZChtZXRob2RCUHMpfHxcbkZhaWwgYEV4cGVjdGVkICR7cShvcHRpb25OYW1lKX0gb3B0aW9uJ3MgJHtxKFxudGFnKVxuIH0gdG8gYmUgYSBKU09OIG1ldGhvZHMgYnJlYWtwb2ludHMgcmVjb3JkYDtcbmZvcihjb25zdFttZXRob2ROYW1lLGNvdW50XW9mIGVudHJpZXMobWV0aG9kQlBzKSl7XG5jb3VudD09PScqJ3x8XG50eXBlb2YgY291bnQ9PT0nbnVtYmVyJyYmXG5OdW1iZXIuaXNTYWZlSW50ZWdlcihjb3VudCkmJlxuY291bnQ+PTB8fFxuRmFpbCBgRXhwZWN0ZWQgJHtxKG9wdGlvbk5hbWUpfSBvcHRpb24ncyAke3EodGFnKX0uJHtxKFxubWV0aG9kTmFtZSlcbiB9IHRvIGJlIFwiKlwiIG9yIGEgbm9uLW5lZ2F0aXZlIGludGVnZXJgO1xuXG5jb25zdCBjbGFzc0JQcz1oYXNPd24obmV3QnJlYWtwb2ludHNUYWJsZSxtZXRob2ROYW1lKT9cbm5ld0JyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV06XG5uZXdCcmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdPXtcbi8vXG5fX3Byb3RvX186bnVsbH07XG5cbmNsYXNzQlBzW3RhZ109Y291bnQ7XG4gfVxuIH1cbmJyZWFrcG9pbnRzPW5ld0JyZWFrcG9pbnRzO1xuYnJlYWtwb2ludHNUYWJsZT1uZXdCcmVha3BvaW50c1RhYmxlO1xuIH07XG5mcmVlemUoc2V0QnJlYWtwb2ludHMpO1xuXG5jb25zdCBzaG91bGRCcmVha3BvaW50PShyZWNpcGllbnQsbWV0aG9kTmFtZSk9PntcbmlmKG1ldGhvZE5hbWU9PT11bmRlZmluZWR8fG1ldGhvZE5hbWU9PT1udWxsKXtcbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgY2xhc3NCUHM9YnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXXx8YnJlYWtwb2ludHNUYWJsZVsnKiddO1xuaWYoY2xhc3NCUHM9PT11bmRlZmluZWQpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmxldCB0YWc9c2ltcGxpZnlUYWcocmVjaXBpZW50W1N5bWJvbC50b1N0cmluZ1RhZ10pO1xubGV0IGNvdW50PWNsYXNzQlBzW3RhZ107XG5pZihjb3VudD09PXVuZGVmaW5lZCl7XG50YWc9JyonO1xuY291bnQ9Y2xhc3NCUHNbdGFnXTtcbmlmKGNvdW50PT09dW5kZWZpbmVkKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxuaWYoY291bnQ9PT0nKicpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYoY291bnQ9PT0wKXtcbnJldHVybiB0cnVlO1xuIH1cbmFzc2VydCh0eXBlb2YgY291bnQ9PT0nbnVtYmVyJyYmY291bnQ+PTEpO1xuY2xhc3NCUHNbdGFnXT1jb3VudC0xO1xucmV0dXJuIGZhbHNlO1xuIH07XG5mcmVlemUoc2hvdWxkQnJlYWtwb2ludCk7XG5cbmNvbnN0IGJyZWFrcG9pbnRUZXN0ZXI9ZnJlZXplKHtcbmdldEJyZWFrcG9pbnRzLFxuc2V0QnJlYWtwb2ludHMsXG5zaG91bGRCcmVha3BvaW50fSk7XG5cbmJyZWFrcG9pbnRUZXN0ZXIuc2V0QnJlYWtwb2ludHMoKTtcbnJldHVybiBicmVha3BvaW50VGVzdGVyO1xuIH07JGjigI1fb25jZS5tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKTtcbmZyZWV6ZShtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIjpbIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACf7/MTPAMAADwDAAApAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUvc3JjL25vLXNoaW0uanN7ImltcG9ydHMiOlsiLi9FLmpzIiwiLi9leHBvcnRzLmpzIl0sImV4cG9ydHMiOlsiRSIsIkhhbmRsZWRQcm9taXNlIl0sInJlZXhwb3J0cyI6WyIuL2V4cG9ydHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VFOyRo4oCNX2ltcG9ydHMoW1tcIi4vRS5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjigI1fYSA9PiAobWFrZUUgPSAkaOKAjV9hKV1dXV0sW1wiLi9leHBvcnRzLmpzXCIsIFtdXV0pOyAgIFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgaHA9SGFuZGxlZFByb21pc2U7JGjigI1fb25jZS5ocChocCk7XG5jb25zdCAgICAgICAgRT1tYWtlRShocCk7JGjigI1fb25jZS5FKEUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiSGFuZGxlZFByb21pc2UiOlsiaHAiXSwiRSI6WyJFIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEYxRkFpCQAAaQkAAC0AAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvdHJhY2stdHVybnMuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiXSwiZXhwb3J0cyI6WyJ0cmFja1R1cm5zIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJnZXRFbnZpcm9ubWVudE9wdGlvblwiLCBbJGjigI1fYSA9PiAoZ2V0RW52aXJvbm1lbnRPcHRpb24gPSAkaOKAjV9hKV1dLFtcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRo4oCNX2EgPT4gKGVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG5sZXQgaGlkZGVuUHJpb3JFcnJvcjtcbmxldCBoaWRkZW5DdXJyZW50VHVybj0wO1xubGV0IGhpZGRlbkN1cnJlbnRFdmVudD0wO1xuXG4vL1xuY29uc3QgVkVSQk9TRT1lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKCdERUJVRycsJ3RyYWNrLXR1cm5zJyk7XG5cbi8vXG4vL1xuY29uc3QgRU5BQkxFRD1cbmdldEVudmlyb25tZW50T3B0aW9uKCdUUkFDS19UVVJOUycsJ2Rpc2FibGVkJyxbJ2VuYWJsZWQnXSk9PT0nZW5hYmxlZCc7XG5cbi8vXG4vL1xuLy9cbi8vXG5cbmNvbnN0IGFkZFJlamVjdGlvbk5vdGU9KGRldGFpbHNOb3RlKT0+KHJlYXNvbik9PntcbmlmKHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yKXtcbmdsb2JhbFRoaXMuYXNzZXJ0Lm5vdGUocmVhc29uLGRldGFpbHNOb3RlKTtcbiB9XG5pZihWRVJCT1NFKXtcbmNvbnNvbGUubG9nKCdSRUpFQ1RFRCBhdCB0b3Agb2YgZXZlbnQgbG9vcCcscmVhc29uKTtcbiB9XG4gfTtcblxuY29uc3Qgd3JhcEZ1bmN0aW9uPVxuKGZ1bmMsc2VuZGluZ0Vycm9yLFgpPT5cbiguLi5hcmdzKT0+e1xuaGlkZGVuUHJpb3JFcnJvcj1zZW5kaW5nRXJyb3I7XG5oaWRkZW5DdXJyZW50VHVybis9MTtcbmhpZGRlbkN1cnJlbnRFdmVudD0wO1xudHJ5e1xubGV0IHJlc3VsdDtcbnRyeXtcbnJlc3VsdD1mdW5jKC4uLmFyZ3MpO1xuIH1jYXRjaChlcnIpe1xuaWYoZXJyIGluc3RhbmNlb2YgRXJyb3Ipe1xuZ2xvYmFsVGhpcy5hc3NlcnQubm90ZShcbmVycixcblggYFRocm93biBmcm9tOiAke2hpZGRlblByaW9yRXJyb3J9OiR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWApO1xuXG4gfVxuaWYoVkVSQk9TRSl7XG5jb25zb2xlLmxvZygnVEhST1dOIHRvIHRvcCBvZiBldmVudCBsb29wJyxlcnIpO1xuIH1cbnRocm93IGVycjtcbiB9XG4vL1xuY29uc3QgZGV0YWlsc05vdGU9WCBgUmVqZWN0aW9uIGZyb206ICR7aGlkZGVuUHJpb3JFcnJvcn06JHtoaWRkZW5DdXJyZW50VHVybn0uJHtoaWRkZW5DdXJyZW50RXZlbnR9YDtcblByb21pc2UucmVzb2x2ZShyZXN1bHQpLmNhdGNoKGFkZFJlamVjdGlvbk5vdGUoZGV0YWlsc05vdGUpKTtcbnJldHVybiByZXN1bHQ7XG4gfWZpbmFsbHl7XG5oaWRkZW5QcmlvckVycm9yPXVuZGVmaW5lZDtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdHJhY2tUdXJucz0oZnVuY3MpPT57XG5pZighRU5BQkxFRHx8dHlwZW9mIGdsb2JhbFRoaXM9PT0ndW5kZWZpbmVkJ3x8IWdsb2JhbFRoaXMuYXNzZXJ0KXtcbnJldHVybiBmdW5jcztcbiB9XG5jb25zdHtkZXRhaWxzOlgsbm90ZTphbm5vdGF0ZUVycm9yfT1nbG9iYWxUaGlzLmFzc2VydDtcblxuaGlkZGVuQ3VycmVudEV2ZW50Kz0xO1xuY29uc3Qgc2VuZGluZ0Vycm9yPUVycm9yKFxuIGBFdmVudDogJHtoaWRkZW5DdXJyZW50VHVybn0uJHtoaWRkZW5DdXJyZW50RXZlbnR9YCk7XG5cbmlmKGhpZGRlblByaW9yRXJyb3IhPT11bmRlZmluZWQpe1xuYW5ub3RhdGVFcnJvcihzZW5kaW5nRXJyb3IsWCBgQ2F1c2VkIGJ5OiAke2hpZGRlblByaW9yRXJyb3J9YCk7XG4gfVxuXG5yZXR1cm4gKC8qICAgICAgICAgICAgKi9cbmZ1bmNzLm1hcCgoZnVuYyk9PmZ1bmMmJndyYXBGdW5jdGlvbihmdW5jLHNlbmRpbmdFcnJvcixYKSkpO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovJGjigI1fb25jZS50cmFja1R1cm5zKHRyYWNrVHVybnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJhY2tUdXJucyI6WyJ0cmFja1R1cm5zIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHvYFwdbAgAAWwIAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS91dGlscy5qc3siaW1wb3J0cyI6WyIuL3NyYy9sb2NhbC5qcyIsIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vc3JjL2xvY2FsLmpzXCIsIFtdXSxbXCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvbG9jYWwuanMiOltbImdldE1ldGhvZE5hbWVzIiwiZ2V0TWV0aG9kTmFtZXMiXV0sIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiOltbIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciIsIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA3BBWdlcCAABXAgAAGQAAAEBlbmRvL2V4by12MS41LjMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvZXhvLW1ha2Vycy5qcyIsIi4vc3JjL3R5cGVzLmpzIiwiLi9zcmMvZ2V0LWludGVyZmFjZS5qcyJdLCJleHBvcnRzIjpbbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy9leG8tbWFrZXJzLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9zcmMvZXhvLW1ha2Vycy5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIi4vc3JjL2dldC1pbnRlcmZhY2UuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9nZXQtaW50ZXJmYWNlLmpzIjpbWyJHRVRfSU5URVJGQUNFX0dVQVJEIiwiR0VUX0lOVEVSRkFDRV9HVUFSRCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAG1aXle4UAADuFAAAIgAAAEBlbmRvL2V4by12MS41LjMvc3JjL2V4by1tYWtlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCJAZW5kby9lbnYtb3B0aW9ucyIsIkBlbmRvL2Vycm9ycyIsIi4vZXhvLXRvb2xzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzc0tpdCIsImluaXRFbXB0eSIsIm1ha2VFeG8iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG9iamVjdE1hcCxlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzLEZhaWwscSxkZWZlbmRQcm90b3R5cGUsZGVmZW5kUHJvdG90eXBlS2l0OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRo4oCNX2EgPT4gKG9iamVjdE1hcCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhc1wiLCBbJGjigI1fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV0sW1wiLi9leG8tdG9vbHMuanNcIiwgW1tcImRlZmVuZFByb3RvdHlwZVwiLCBbJGjigI1fYSA9PiAoZGVmZW5kUHJvdG90eXBlID0gJGjigI1fYSldXSxbXCJkZWZlbmRQcm90b3R5cGVLaXRcIiwgWyRo4oCNX2EgPT4gKGRlZmVuZFByb3RvdHlwZUtpdCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLypcblxuICovXG5cbmNvbnN0e2NyZWF0ZSxzZWFsLGZyZWV6ZSxkZWZpbmVQcm9wZXJ0eSx2YWx1ZXN9PU9iamVjdDtcblxuLy9cbmNvbnN0IExBQkVMX0lOU1RBTkNFUz1lbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKCdERUJVRycsJ2xhYmVsLWluc3RhbmNlcycpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VTZWxmPShwcm90byxpbnN0YW5jZUNvdW50KT0+e1xuY29uc3Qgc2VsZj1jcmVhdGUocHJvdG8pO1xuaWYoTEFCRUxfSU5TVEFOQ0VTKXtcbmRlZmluZVByb3BlcnR5KHNlbGYsU3ltYm9sLnRvU3RyaW5nVGFnLHtcbnZhbHVlOiBgJHtwcm90b1tTeW1ib2wudG9TdHJpbmdUYWddfSMke2luc3RhbmNlQ291bnR9YCxcbndyaXRhYmxlOmZhbHNlLFxuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTpmYWxzZX0pO1xuXG4gfVxucmV0dXJuIGhhcmRlbihzZWxmKTtcbiB9O1xuXG5jb25zdCBlbXB0eVJlY29yZD1oYXJkZW4oe30pO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpbml0RW1wdHk9KCk9PmVtcHR5UmVjb3JkO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqLyRo4oCNX29uY2UuaW5pdEVtcHR5KGluaXRFbXB0eSk7XG5jb25zdCAgICAgICAgZGVmaW5lRXhvQ2xhc3M9KFxudGFnLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnM9e30pPT5cbntcbmhhcmRlbihtZXRob2RzKTtcbmNvbnN0e1xuZmluaXNoPXVuZGVmaW5lZCxcbnJlY2VpdmVBbXBsaWZpZXI9dW5kZWZpbmVkLFxucmVjZWl2ZUluc3RhbmNlVGVzdGVyPXVuZGVmaW5lZH09XG5vcHRpb25zO1xucmVjZWl2ZUFtcGxpZmllcj09PXVuZGVmaW5lZHx8XG5GYWlsIGBPbmx5IGZhY2V0cyBvZiBhbiBleG8gY2xhc3Mga2l0IGNhbiBiZSBhbXBsaWZpZWQgJHtxKHRhZyl9YDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0TWFwPW5ldyBXZWFrTWFwKCk7XG5jb25zdCBwcm90bz1kZWZlbmRQcm90b3R5cGUoXG50YWcsXG4oc2VsZik9Pi8qICAgICAgICAgICAgICAqL2NvbnRleHRNYXAuZ2V0KHNlbGYpLFxubWV0aG9kcyxcbnRydWUsXG5pbnRlcmZhY2VHdWFyZCk7XG5cbmxldCBpbnN0YW5jZUNvdW50PTA7XG4vKlxuXG4gICAqL1xuY29uc3QgbWFrZUluc3RhbmNlPSguLi5hcmdzKT0+e1xuLy9cbmNvbnN0IHN0YXRlPXNlYWwoaW5pdCguLi5hcmdzKSk7XG5pbnN0YW5jZUNvdW50Kz0xO1xuY29uc3Qgc2VsZj1tYWtlU2VsZihwcm90byxpbnN0YW5jZUNvdW50KTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0PWZyZWV6ZSh7c3RhdGUsc2VsZn0pO1xuY29udGV4dE1hcC5zZXQoc2VsZixjb250ZXh0KTtcbmlmKGZpbmlzaCl7XG5maW5pc2goY29udGV4dCk7XG4gfVxucmV0dXJuIHNlbGY7XG4gfTtcblxuaWYocmVjZWl2ZUluc3RhbmNlVGVzdGVyKXtcbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzSW5zdGFuY2U9KGV4byxmYWNldE5hbWU9dW5kZWZpbmVkKT0+e1xuZmFjZXROYW1lPT09dW5kZWZpbmVkfHxcbkZhaWwgYGZhY2V0TmFtZSBjYW4gb25seSBiZSB1c2VkIHdpdGggYW4gZXhvIGNsYXNzIGtpdDogJHtxKFxudGFnKVxuIH0gaGFzIG5vIGZhY2V0ICR7cShmYWNldE5hbWUpfWA7XG5yZXR1cm4gY29udGV4dE1hcC5oYXMoZXhvKTtcbiB9O1xuaGFyZGVuKGlzSW5zdGFuY2UpO1xucmVjZWl2ZUluc3RhbmNlVGVzdGVyKGlzSW5zdGFuY2UpO1xuIH1cblxucmV0dXJuIGhhcmRlbihtYWtlSW5zdGFuY2UpO1xuIH07JGjigI1fb25jZS5kZWZpbmVFeG9DbGFzcyhkZWZpbmVFeG9DbGFzcyk7XG5oYXJkZW4oZGVmaW5lRXhvQ2xhc3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmluZUV4b0NsYXNzS2l0PShcbnRhZyxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbm1ldGhvZHNLaXQsXG5vcHRpb25zPXt9KT0+XG57XG5oYXJkZW4obWV0aG9kc0tpdCk7XG5jb25zdHtcbmZpbmlzaD11bmRlZmluZWQsXG5yZWNlaXZlQW1wbGlmaWVyPXVuZGVmaW5lZCxcbnJlY2VpdmVJbnN0YW5jZVRlc3Rlcj11bmRlZmluZWR9PVxub3B0aW9ucztcbmNvbnN0IGNvbnRleHRNYXBLaXQ9b2JqZWN0TWFwKG1ldGhvZHNLaXQsKCk9Pm5ldyBXZWFrTWFwKCkpO1xuY29uc3QgZ2V0Q29udGV4dEtpdD1vYmplY3RNYXAoXG5jb250ZXh0TWFwS2l0LFxuKGNvbnRleHRNYXApPT4oZmFjZXQpPT5jb250ZXh0TWFwLmdldChmYWNldCkpO1xuXG5jb25zdCBwcm90b3R5cGVLaXQ9ZGVmZW5kUHJvdG90eXBlS2l0KFxudGFnLFxuZ2V0Q29udGV4dEtpdCxcbm1ldGhvZHNLaXQsXG50cnVlLFxuaW50ZXJmYWNlR3VhcmRLaXQpO1xuXG5sZXQgaW5zdGFuY2VDb3VudD0wO1xuLypcblxuICAgKi9cbmNvbnN0IG1ha2VJbnN0YW5jZUtpdD0oLi4uYXJncyk9Pntcbi8vXG5jb25zdCBzdGF0ZT1zZWFsKGluaXQoLi4uYXJncykpO1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbnRleHQ9e3N0YXRlLGZhY2V0czpudWxsfTtcbmluc3RhbmNlQ291bnQrPTE7XG5jb25zdCBmYWNldHM9b2JqZWN0TWFwKHByb3RvdHlwZUtpdCwocHJvdG8sZmFjZXROYW1lKT0+e1xuY29uc3Qgc2VsZj1tYWtlU2VsZihwcm90byxpbnN0YW5jZUNvdW50KTtcbmNvbnRleHRNYXBLaXRbZmFjZXROYW1lXS5zZXQoc2VsZixjb250ZXh0KTtcbnJldHVybiBzZWxmO1xuIH0pO1xuY29udGV4dC5mYWNldHM9ZmFjZXRzO1xuLy9cbmZyZWV6ZShjb250ZXh0KTtcbmlmKGZpbmlzaCl7XG5maW5pc2goY29udGV4dCk7XG4gfVxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICovY29udGV4dC5mYWNldHMpO1xuIH07XG5cbmlmKHJlY2VpdmVBbXBsaWZpZXIpe1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYW1wbGlmeT0oZXhvRmFjZXQpPT57XG5mb3IoY29uc3QgY29udGV4dE1hcCBvZiB2YWx1ZXMoY29udGV4dE1hcEtpdCkpe1xuaWYoY29udGV4dE1hcC5oYXMoZXhvRmFjZXQpKXtcbmNvbnN0e2ZhY2V0c309Y29udGV4dE1hcC5nZXQoZXhvRmFjZXQpO1xucmV0dXJuIGZhY2V0cztcbiB9XG4gfVxudGhyb3cgRmFpbCBgTXVzdCBiZSBhIGZhY2V0IG9mICR7cSh0YWcpfTogJHtleG9GYWNldH1gO1xuIH07XG5oYXJkZW4oYW1wbGlmeSk7XG5yZWNlaXZlQW1wbGlmaWVyKGFtcGxpZnkpO1xuIH1cblxuaWYocmVjZWl2ZUluc3RhbmNlVGVzdGVyKXtcbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzSW5zdGFuY2U9KGV4b0ZhY2V0LGZhY2V0TmFtZT11bmRlZmluZWQpPT57XG5pZihmYWNldE5hbWU9PT11bmRlZmluZWQpe1xucmV0dXJuIHZhbHVlcyhjb250ZXh0TWFwS2l0KS5zb21lKChjb250ZXh0TWFwKT0+XG5jb250ZXh0TWFwLmhhcyhleG9GYWNldCkpO1xuXG4gfVxuYXNzZXJ0LnR5cGVvZihmYWNldE5hbWUsJ3N0cmluZycpO1xuY29uc3QgY29udGV4dE1hcD1jb250ZXh0TWFwS2l0W2ZhY2V0TmFtZV07XG5jb250ZXh0TWFwIT09dW5kZWZpbmVkfHxcbkZhaWwgYGV4byBjbGFzcyBraXQgJHtxKHRhZyl9IGhhcyBubyBmYWNldCBuYW1lZCAke3EoZmFjZXROYW1lKX1gO1xucmV0dXJuIGNvbnRleHRNYXAuaGFzKGV4b0ZhY2V0KTtcbiB9O1xuaGFyZGVuKGlzSW5zdGFuY2UpO1xucmVjZWl2ZUluc3RhbmNlVGVzdGVyKGlzSW5zdGFuY2UpO1xuIH1cblxucmV0dXJuIGhhcmRlbihtYWtlSW5zdGFuY2VLaXQpO1xuIH07JGjigI1fb25jZS5kZWZpbmVFeG9DbGFzc0tpdChkZWZpbmVFeG9DbGFzc0tpdCk7XG5oYXJkZW4oZGVmaW5lRXhvQ2xhc3NLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFeG89KHRhZyxpbnRlcmZhY2VHdWFyZCxtZXRob2RzLG9wdGlvbnM9dW5kZWZpbmVkKT0+e1xuY29uc3QgbWFrZUluc3RhbmNlPWRlZmluZUV4b0NsYXNzKFxudGFnLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0RW1wdHksXG5tZXRob2RzLFxub3B0aW9ucyk7XG5cbnJldHVybiBtYWtlSW5zdGFuY2UoKTtcbiB9OyRo4oCNX29uY2UubWFrZUV4byhtYWtlRXhvKTtcbmhhcmRlbihtYWtlRXhvKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImluaXRFbXB0eSI6WyJpbml0RW1wdHkiXSwiZGVmaW5lRXhvQ2xhc3MiOlsiZGVmaW5lRXhvQ2xhc3MiXSwiZGVmaW5lRXhvQ2xhc3NLaXQiOlsiZGVmaW5lRXhvQ2xhc3NLaXQiXSwibWFrZUV4byI6WyJtYWtlRXhvIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADGqSZYRMAAAETAAACEAAABAZW5kby9leG8tdjEuNS4zL3NyYy9leG8tdG9vbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9mYXIiLCJAZW5kby9wYXR0ZXJucyIsIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vZ2V0LWludGVyZmFjZS5qcyJdLCJleHBvcnRzIjpbImRlZmVuZFByb3RvdHlwZSIsImRlZmVuZFByb3RvdHlwZUtpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0TWV0aG9kTmFtZXMsaGFzT3duUHJvcGVydHlPZix0b1Rocm93YWJsZSxFLEZhcixtdXN0TWF0Y2gsTSxpc0F3YWl0QXJnR3VhcmQsaXNSYXdHdWFyZCxnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCxnZXRNZXRob2RHdWFyZFBheWxvYWQsZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkLGdldENvcHlNYXBFbnRyaWVzLGxpc3REaWZmZXJlbmNlLG9iamVjdE1hcCxxLEZhaWwsR0VUX0lOVEVSRkFDRV9HVUFSRDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjigI1fYSA9PiAoZ2V0TWV0aG9kTmFtZXMgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjigI1fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRo4oCNX2EpXV0sW1widG9UaHJvd2FibGVcIiwgWyRo4oCNX2EgPT4gKHRvVGhyb3dhYmxlID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjigI1fYSA9PiAoRSA9ICRo4oCNX2EpXV0sW1wiRmFyXCIsIFskaOKAjV9hID0+IChGYXIgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjigI1fYSA9PiAobXVzdE1hdGNoID0gJGjigI1fYSldXSxbXCJNXCIsIFskaOKAjV9hID0+IChNID0gJGjigI1fYSldXSxbXCJpc0F3YWl0QXJnR3VhcmRcIiwgWyRo4oCNX2EgPT4gKGlzQXdhaXRBcmdHdWFyZCA9ICRo4oCNX2EpXV0sW1wiaXNSYXdHdWFyZFwiLCBbJGjigI1fYSA9PiAoaXNSYXdHdWFyZCA9ICRo4oCNX2EpXV0sW1wiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWRcIiwgWyRo4oCNX2EgPT4gKGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkID0gJGjigI1fYSldXSxbXCJnZXRNZXRob2RHdWFyZFBheWxvYWRcIiwgWyRo4oCNX2EgPT4gKGdldE1ldGhvZEd1YXJkUGF5bG9hZCA9ICRo4oCNX2EpXV0sW1wiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkXCIsIFskaOKAjV9hID0+IChnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQgPSAkaOKAjV9hKV1dLFtcImdldENvcHlNYXBFbnRyaWVzXCIsIFskaOKAjV9hID0+IChnZXRDb3B5TWFwRW50cmllcyA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzXCIsIFtbXCJsaXN0RGlmZmVyZW5jZVwiLCBbJGjigI1fYSA9PiAobGlzdERpZmZlcmVuY2UgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjigI1fYSA9PiAob2JqZWN0TWFwID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCIuL2dldC1pbnRlcmZhY2UuanNcIiwgW1tcIkdFVF9JTlRFUkZBQ0VfR1VBUkRcIiwgWyRo4oCNX2EgPT4gKEdFVF9JTlRFUkZBQ0VfR1VBUkQgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZGVmaW5lUHJvcGVydGllcyxmcm9tRW50cmllc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgUmF3TWV0aG9kR3VhcmQ9TS5jYWxsKCkucmVzdChNLnJhdygpKS5yZXR1cm5zKE0ucmF3KCkpO1xuXG5jb25zdCBSRURBQ1RFRF9SQVdfQVJHPSc8cmVkYWN0ZWQgcmF3IGFyZz4nO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgUGFzc2FibGVNZXRob2RHdWFyZD1NLmNhbGwoKS5yZXN0KE0uYW55KCkpLnJldHVybnMoTS5hbnkoKSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZGVmZW5kU3luY0FyZ3M9KHN5bmNBcmdzLG1hdGNoQ29uZmlnLGxhYmVsPXVuZGVmaW5lZCk9PntcbmNvbnN0e1xuZGVjbGFyZWRMZW4sXG5oYXNSZXN0QXJnR3VhcmQsXG5yZXN0QXJnR3VhcmRJc1JhdyxcbnBhcmFtc1BhdHRlcm4sXG5yZWRhY3RlZEluZGljZXN9PVxubWF0Y2hDb25maWc7XG5cbi8vXG4vL1xubGV0IG1hdGNoYWJsZUFyZ3M9c3luY0FyZ3M7XG5pZihyZXN0QXJnR3VhcmRJc1JhdyYmc3luY0FyZ3MubGVuZ3RoPmRlY2xhcmVkTGVuKXtcbmNvbnN0IHJlc3RMZW49c3luY0FyZ3MubGVuZ3RoLWRlY2xhcmVkTGVuO1xuY29uc3QgcmVkYWN0ZWRSZXN0PUFycmF5KHJlc3RMZW4pLmZpbGwoUkVEQUNURURfUkFXX0FSRyk7XG5tYXRjaGFibGVBcmdzPVsuLi5zeW5jQXJncy5zbGljZSgwLGRlY2xhcmVkTGVuKSwuLi5yZWRhY3RlZFJlc3RdO1xuIH1lbHNlIGlmKFxucmVkYWN0ZWRJbmRpY2VzLmxlbmd0aD4wJiZcbnJlZGFjdGVkSW5kaWNlc1swXTxzeW5jQXJncy5sZW5ndGgpXG57XG4vL1xuLy9cbm1hdGNoYWJsZUFyZ3M9Wy4uLnN5bmNBcmdzXTtcbiB9XG5cbmZvcihjb25zdCBpIG9mIHJlZGFjdGVkSW5kaWNlcyl7XG5pZihpPj1tYXRjaGFibGVBcmdzLmxlbmd0aCl7XG5icmVhaztcbiB9XG5tYXRjaGFibGVBcmdzW2ldPVJFREFDVEVEX1JBV19BUkc7XG4gfVxuXG5tdXN0TWF0Y2goaGFyZGVuKG1hdGNoYWJsZUFyZ3MpLHBhcmFtc1BhdHRlcm4sbGFiZWwpO1xuXG5pZihoYXNSZXN0QXJnR3VhcmQpe1xucmV0dXJuIHN5bmNBcmdzO1xuIH1cbnN5bmNBcmdzLmxlbmd0aDw9ZGVjbGFyZWRMZW58fFxuRmFpbCBgJHtxKGxhYmVsKX0gYWNjZXB0cyBhdCBtb3N0ICR7cShkZWNsYXJlZExlbil9IGFyZ3VtZW50cywgbm90ICR7cShcbnN5bmNBcmdzLmxlbmd0aClcbiB9OiAke3N5bmNBcmdzfWA7XG5yZXR1cm4gc3luY0FyZ3M7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBidWlsZE1hdGNoQ29uZmlnPShtZXRob2RHdWFyZFBheWxvYWQpPT57XG5jb25zdHtcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkUGF5bG9hZDtcblxuY29uc3QgbWF0Y2hhYmxlQXJnR3VhcmRzPVsuLi5hcmdHdWFyZHMsLi4ub3B0aW9uYWxBcmdHdWFyZHNdO1xuXG5jb25zdCByZWRhY3RlZEluZGljZXM9W107XG5mb3IobGV0IGk9MDtpPG1hdGNoYWJsZUFyZ0d1YXJkcy5sZW5ndGg7aSs9MSl7XG5pZihpc1Jhd0d1YXJkKG1hdGNoYWJsZUFyZ0d1YXJkc1tpXSkpe1xubWF0Y2hhYmxlQXJnR3VhcmRzW2ldPVJFREFDVEVEX1JBV19BUkc7XG5yZWRhY3RlZEluZGljZXMucHVzaChpKTtcbiB9XG4gfVxuXG4vL1xubGV0IG1hdGNoYWJsZVJlc3RBcmdHdWFyZD1yZXN0QXJnR3VhcmQ7XG5pZihpc1Jhd0d1YXJkKG1hdGNoYWJsZVJlc3RBcmdHdWFyZCkpe1xubWF0Y2hhYmxlUmVzdEFyZ0d1YXJkPU0uYXJyYXlPZihSRURBQ1RFRF9SQVdfQVJHKTtcbiB9XG5jb25zdCBtYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQ9aGFyZGVuKHtcbi4uLm1ldGhvZEd1YXJkUGF5bG9hZCxcbmFyZ0d1YXJkczptYXRjaGFibGVBcmdHdWFyZHMuc2xpY2UoMCxhcmdHdWFyZHMubGVuZ3RoKSxcbm9wdGlvbmFsQXJnR3VhcmRzOm1hdGNoYWJsZUFyZ0d1YXJkcy5zbGljZShhcmdHdWFyZHMubGVuZ3RoKSxcbnJlc3RBcmdHdWFyZDptYXRjaGFibGVSZXN0QXJnR3VhcmR9KTtcblxuXG5jb25zdCBwYXJhbXNQYXR0ZXJuPU0uc3BsaXRBcnJheShcbm1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZC5hcmdHdWFyZHMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQub3B0aW9uYWxBcmdHdWFyZHMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQucmVzdEFyZ0d1YXJkKTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmRlY2xhcmVkTGVuOm1hdGNoYWJsZUFyZ0d1YXJkcy5sZW5ndGgsXG5oYXNSZXN0QXJnR3VhcmQ6cmVzdEFyZ0d1YXJkIT09dW5kZWZpbmVkLFxucmVzdEFyZ0d1YXJkSXNSYXc6cmVzdEFyZ0d1YXJkIT09bWF0Y2hhYmxlUmVzdEFyZ0d1YXJkLFxucGFyYW1zUGF0dGVybixcbnJlZGFjdGVkSW5kaWNlcyxcbm1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZH0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZFN5bmNNZXRob2Q9KFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmRQYXlsb2FkLFxubGFiZWwpPT5cbntcbmNvbnN0e3JldHVybkd1YXJkfT1tZXRob2RHdWFyZFBheWxvYWQ7XG5jb25zdCBpc1Jhd1JldHVybj1pc1Jhd0d1YXJkKHJldHVybkd1YXJkKTtcbmNvbnN0IG1hdGNoQ29uZmlnPWJ1aWxkTWF0Y2hDb25maWcobWV0aG9kR3VhcmRQYXlsb2FkKTtcbmNvbnN0e3N5bmNNZXRob2R9PXtcbi8vXG5zeW5jTWV0aG9kKC4uLnN5bmNBcmdzKXtcbnRyeXtcbmNvbnN0IGNvbnRleHQ9Z2V0Q29udGV4dCh0aGlzKTtcbi8vXG5jb25zdCByZWFsQXJncz1kZWZlbmRTeW5jQXJncyhzeW5jQXJncyxtYXRjaENvbmZpZyxsYWJlbCk7XG5jb25zdCByZXN1bHQ9YXBwbHkoYmVoYXZpb3JNZXRob2QsY29udGV4dCxyZWFsQXJncyk7XG5pZighaXNSYXdSZXR1cm4pe1xubXVzdE1hdGNoKGhhcmRlbihyZXN1bHQpLHJldHVybkd1YXJkLCBgJHtsYWJlbH06IHJlc3VsdGApO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfWNhdGNoKHRocm93blRoaW5nKXtcbnRocm93IHRvVGhyb3dhYmxlKHRocm93blRoaW5nKTtcbiB9XG4gfX07XG5cbnJldHVybiBzeW5jTWV0aG9kO1xuIH07XG5cbi8qXG5cbiAqL1xuY29uc3QgZGVzeW5jPShtZXRob2RHdWFyZFBheWxvYWQpPT57XG5jb25zdHtcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkUGF5bG9hZDtcbiFpc0F3YWl0QXJnR3VhcmQocmVzdEFyZ0d1YXJkKXx8XG5GYWlsIGBSZXN0IGFyZ3MgbWF5IG5vdCBiZSBhd2FpdGVkOiAke3Jlc3RBcmdHdWFyZH1gO1xuY29uc3QgcmF3QXJnR3VhcmRzPVsuLi5hcmdHdWFyZHMsLi4ub3B0aW9uYWxBcmdHdWFyZHNdO1xuXG5jb25zdCBhd2FpdEluZGV4ZXM9W107XG5mb3IobGV0IGk9MDtpPHJhd0FyZ0d1YXJkcy5sZW5ndGg7aSs9MSl7XG5jb25zdCBhcmdHdWFyZD1yYXdBcmdHdWFyZHNbaV07XG5pZihpc0F3YWl0QXJnR3VhcmQoYXJnR3VhcmQpKXtcbnJhd0FyZ0d1YXJkc1tpXT1nZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZChhcmdHdWFyZCkuYXJnR3VhcmQ7XG5hd2FpdEluZGV4ZXMucHVzaChpKTtcbiB9XG4gfVxucmV0dXJue1xuYXdhaXRJbmRleGVzLFxucmF3TWV0aG9kR3VhcmRQYXlsb2FkOntcbi4uLm1ldGhvZEd1YXJkUGF5bG9hZCxcbmFyZ0d1YXJkczpyYXdBcmdHdWFyZHMuc2xpY2UoMCxhcmdHdWFyZHMubGVuZ3RoKSxcbm9wdGlvbmFsQXJnR3VhcmRzOnJhd0FyZ0d1YXJkcy5zbGljZShhcmdHdWFyZHMubGVuZ3RoKX19O1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZEFzeW5jTWV0aG9kPShcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKT0+XG57XG5jb25zdHtyZXR1cm5HdWFyZH09bWV0aG9kR3VhcmRQYXlsb2FkO1xuY29uc3QgaXNSYXdSZXR1cm49aXNSYXdHdWFyZChyZXR1cm5HdWFyZCk7XG5cbmNvbnN0e2F3YWl0SW5kZXhlcyxyYXdNZXRob2RHdWFyZFBheWxvYWR9PWRlc3luYyhtZXRob2RHdWFyZFBheWxvYWQpO1xuY29uc3QgbWF0Y2hDb25maWc9YnVpbGRNYXRjaENvbmZpZyhyYXdNZXRob2RHdWFyZFBheWxvYWQpO1xuXG5jb25zdHthc3luY01ldGhvZH09e1xuLy9cbmFzeW5jTWV0aG9kKC4uLmFyZ3Mpe1xuY29uc3QgYXdhaXRMaXN0PVtdO1xuZm9yKGNvbnN0IGkgb2YgYXdhaXRJbmRleGVzKXtcbmlmKGk+PWFyZ3MubGVuZ3RoKXtcbmJyZWFrO1xuIH1cbmF3YWl0TGlzdC5wdXNoKGFyZ3NbaV0pO1xuIH1cbmNvbnN0IHA9UHJvbWlzZS5hbGwoYXdhaXRMaXN0KTtcbmNvbnN0IHN5bmNBcmdzPVsuLi5hcmdzXTtcbmNvbnN0IHJlc3VsdFA9RS53aGVuKFxucCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyhhd2FpdGVkQXJncyk9PntcbmZvcihsZXQgaj0wO2o8YXdhaXRlZEFyZ3MubGVuZ3RoO2orPTEpe1xuc3luY0FyZ3NbYXdhaXRJbmRleGVzW2pdXT1hd2FpdGVkQXJnc1tqXTtcbiB9XG4vL1xuLy9cbmNvbnN0IGNvbnRleHQ9Z2V0Q29udGV4dCh0aGlzKTtcbmNvbnN0IHJlYWxBcmdzPWRlZmVuZFN5bmNBcmdzKHN5bmNBcmdzLG1hdGNoQ29uZmlnLGxhYmVsKTtcbnJldHVybiBhcHBseShiZWhhdmlvck1ldGhvZCxjb250ZXh0LHJlYWxBcmdzKTtcbiB9KTtcblxucmV0dXJuIEUud2hlbihyZXN1bHRQLChmdWxmaWxsbWVudCk9PntcbmlmKCFpc1Jhd1JldHVybil7XG5tdXN0TWF0Y2goaGFyZGVuKGZ1bGZpbGxtZW50KSxyZXR1cm5HdWFyZCwgYCR7bGFiZWx9OiByZXN1bHRgKTtcbiB9XG5yZXR1cm4gZnVsZmlsbG1lbnQ7XG4gfSkuY2F0Y2goKHJlYXNvbik9PlxuLy9cbi8vXG5Qcm9taXNlLnJlamVjdCh0b1Rocm93YWJsZShyZWFzb24pKSk7XG5cbiB9fTtcblxucmV0dXJuIGFzeW5jTWV0aG9kO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRNZXRob2Q9KGdldENvbnRleHQsYmVoYXZpb3JNZXRob2QsbWV0aG9kR3VhcmQsbGFiZWwpPT57XG5jb25zdCBtZXRob2RHdWFyZFBheWxvYWQ9Z2V0TWV0aG9kR3VhcmRQYXlsb2FkKG1ldGhvZEd1YXJkKTtcbmNvbnN0e2NhbGxLaW5kfT1tZXRob2RHdWFyZFBheWxvYWQ7XG5pZihjYWxsS2luZD09PSdzeW5jJyl7XG5yZXR1cm4gZGVmZW5kU3luY01ldGhvZChcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKTtcblxuIH1lbHNle1xuYXNzZXJ0KGNhbGxLaW5kPT09J2FzeW5jJyk7XG5yZXR1cm4gZGVmZW5kQXN5bmNNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBiaW5kTWV0aG9kPShcbm1ldGhvZFRhZyxcbmNvbnRleHRQcm92aWRlcixcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmQpPT5cbntcbmFzc2VydC50eXBlb2YoYmVoYXZpb3JNZXRob2QsJ2Z1bmN0aW9uJyk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGdldENvbnRleHQ9KHJlcHJlc2VudGF0aXZlKT0+e1xucmVwcmVzZW50YXRpdmV8fFxuLy9cbkZhaWwgYE1ldGhvZCAke21ldGhvZFRhZ30gY2FsbGVkIHdpdGhvdXQgJ3RoaXMnIG9iamVjdGA7XG5jb25zdCBjb250ZXh0PWNvbnRleHRQcm92aWRlcihyZXByZXNlbnRhdGl2ZSk7XG5pZihjb250ZXh0PT09dW5kZWZpbmVkKXtcbnRocm93IEZhaWwgYCR7cShcbm1ldGhvZFRhZylcbiB9IG1heSBvbmx5IGJlIGFwcGxpZWQgdG8gYSB2YWxpZCBpbnN0YW5jZTogJHtyZXByZXNlbnRhdGl2ZX1gO1xuIH1cbnJldHVybiBjb250ZXh0O1xuIH07XG5cbmNvbnN0IG1ldGhvZD1kZWZlbmRNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZCxcbm1ldGhvZFRhZyk7XG5cblxuZGVmaW5lUHJvcGVydGllcyhtZXRob2Qse1xubmFtZTp7dmFsdWU6bWV0aG9kVGFnfSxcbmxlbmd0aDp7dmFsdWU6YmVoYXZpb3JNZXRob2QubGVuZ3RofX0pO1xuXG5yZXR1cm4gbWV0aG9kO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZlbmRQcm90b3R5cGU9KFxudGFnLFxuY29udGV4dFByb3ZpZGVyLFxuYmVoYXZpb3JNZXRob2RzLFxudGhpc2Z1bE1ldGhvZHM9ZmFsc2UsXG5pbnRlcmZhY2VHdWFyZD11bmRlZmluZWQpPT5cbntcbmNvbnN0IHByb3RvdHlwZT17fTtcbmNvbnN0IG1ldGhvZE5hbWVzPWdldE1ldGhvZE5hbWVzKGJlaGF2aW9yTWV0aG9kcykuZmlsdGVyKFxuLy9cbi8vXG4oa2V5KT0+e1xuaWYoa2V5IT09J2NvbnN0cnVjdG9yJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCBjb25zdHJ1Y3Rvcj1iZWhhdmlvck1ldGhvZHMuY29uc3RydWN0b3I7XG5yZXR1cm4hKFxuY29uc3RydWN0b3IucHJvdG90eXBlJiZcbmNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj09PWNvbnN0cnVjdG9yKTtcblxuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IG1ldGhvZEd1YXJkcztcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZGVmYXVsdEd1YXJkcztcbmlmKGludGVyZmFjZUd1YXJkKXtcbmNvbnN0e1xuaW50ZXJmYWNlTmFtZSxcbm1ldGhvZEd1YXJkczptZyxcbnN5bWJvbE1ldGhvZEd1YXJkcyxcbnNsb3BweSxcbmRlZmF1bHRHdWFyZHM6ZGc9c2xvcHB5PydwYXNzYWJsZSc6ZGVmYXVsdEd1YXJkc309XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoaW50ZXJmYWNlR3VhcmQpO1xubWV0aG9kR3VhcmRzPWhhcmRlbih7XG4uLi5tZyxcbi4uLihzeW1ib2xNZXRob2RHdWFyZHMmJlxuZnJvbUVudHJpZXMoZ2V0Q29weU1hcEVudHJpZXMoc3ltYm9sTWV0aG9kR3VhcmRzKSkpfSk7XG5cbmRlZmF1bHRHdWFyZHM9ZGc7XG57XG5jb25zdCBtZXRob2RHdWFyZE5hbWVzPW93bktleXMobWV0aG9kR3VhcmRzKTtcbmNvbnN0IHVuaW1wbGVtZW50ZWQ9bGlzdERpZmZlcmVuY2UobWV0aG9kR3VhcmROYW1lcyxtZXRob2ROYW1lcyk7XG51bmltcGxlbWVudGVkLmxlbmd0aD09PTB8fFxuRmFpbCBgbWV0aG9kcyAke3EodW5pbXBsZW1lbnRlZCl9IG5vdCBpbXBsZW1lbnRlZCBieSAke3EodGFnKX1gO1xuaWYoZGVmYXVsdEd1YXJkcz09PXVuZGVmaW5lZCl7XG5jb25zdCB1bmd1YXJkZWQ9bGlzdERpZmZlcmVuY2UobWV0aG9kTmFtZXMsbWV0aG9kR3VhcmROYW1lcyk7XG51bmd1YXJkZWQubGVuZ3RoPT09MHx8XG5GYWlsIGBtZXRob2RzICR7cSh1bmd1YXJkZWQpfSBub3QgZ3VhcmRlZCBieSAke3EoaW50ZXJmYWNlTmFtZSl9YDtcbiB9XG4gfVxuIH1cblxuZm9yKGNvbnN0IHByb3Agb2YgbWV0aG9kTmFtZXMpe1xuY29uc3Qgb3JpZ2luYWxNZXRob2Q9YmVoYXZpb3JNZXRob2RzW3Byb3BdO1xuY29uc3R7c2hpZnRlZE1ldGhvZH09e1xuc2hpZnRlZE1ldGhvZCguLi5hcmdzKXtcbnJldHVybiBvcmlnaW5hbE1ldGhvZCh0aGlzLC4uLmFyZ3MpO1xuIH19O1xuXG5jb25zdCBiZWhhdmlvck1ldGhvZD10aGlzZnVsTWV0aG9kcz9vcmlnaW5hbE1ldGhvZDpzaGlmdGVkTWV0aG9kO1xuLy9cbi8vXG5sZXQgbWV0aG9kR3VhcmQ9bWV0aG9kR3VhcmRzJiZtZXRob2RHdWFyZHNbcHJvcF07XG5pZighbWV0aG9kR3VhcmQpe1xuc3dpdGNoKGRlZmF1bHRHdWFyZHMpe1xuY2FzZSB1bmRlZmluZWQ6e1xuaWYodGhpc2Z1bE1ldGhvZHMpe1xubWV0aG9kR3VhcmQ9UGFzc2FibGVNZXRob2RHdWFyZDtcbiB9ZWxzZXtcbm1ldGhvZEd1YXJkPVJhd01ldGhvZEd1YXJkO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UncGFzc2FibGUnOntcbm1ldGhvZEd1YXJkPVBhc3NhYmxlTWV0aG9kR3VhcmQ7XG5icmVhaztcbiB9XG5jYXNlJ3Jhdyc6e1xubWV0aG9kR3VhcmQ9UmF3TWV0aG9kR3VhcmQ7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYFVucmVjb2duaXplZCBkZWZhdWx0R3VhcmRzICR7cShkZWZhdWx0R3VhcmRzKX1gO1xuIH19XG5cbiB9XG5wcm90b3R5cGVbcHJvcF09YmluZE1ldGhvZChcbiBgSW4gJHtxKHByb3ApfSBtZXRob2Qgb2YgKCR7dGFnfSlgLFxuY29udGV4dFByb3ZpZGVyLFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZCk7XG5cbiB9XG5cbmlmKCFoYXNPd25Qcm9wZXJ0eU9mKHByb3RvdHlwZSxHRVRfSU5URVJGQUNFX0dVQVJEKSl7XG5jb25zdCBnZXRJbnRlcmZhY2VHdWFyZE1ldGhvZD17XG5bR0VUX0lOVEVSRkFDRV9HVUFSRF0oKXtcbi8vXG5yZXR1cm4gaW50ZXJmYWNlR3VhcmQ7XG4gfX1bXG5HRVRfSU5URVJGQUNFX0dVQVJEXTtcbnByb3RvdHlwZVtHRVRfSU5URVJGQUNFX0dVQVJEXT1iaW5kTWV0aG9kKFxuIGBJbiAke3EoR0VUX0lOVEVSRkFDRV9HVUFSRCl9IG1ldGhvZCBvZiAoJHt0YWd9KWAsXG5jb250ZXh0UHJvdmlkZXIsXG5nZXRJbnRlcmZhY2VHdWFyZE1ldGhvZCxcblBhc3NhYmxlTWV0aG9kR3VhcmQpO1xuXG4gfVxuXG5yZXR1cm4gRmFyKFxudGFnLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnByb3RvdHlwZSk7XG5cblxuIH07JGjigI1fb25jZS5kZWZlbmRQcm90b3R5cGUoZGVmZW5kUHJvdG90eXBlKTtcbmhhcmRlbihkZWZlbmRQcm90b3R5cGUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmZW5kUHJvdG90eXBlS2l0PShcbnRhZyxcbmNvbnRleHRQcm92aWRlcktpdCxcbmJlaGF2aW9yTWV0aG9kc0tpdCxcbnRoaXNmdWxNZXRob2RzPWZhbHNlLFxuaW50ZXJmYWNlR3VhcmRLaXQ9dW5kZWZpbmVkKT0+XG57XG5jb25zdCBmYWNldE5hbWVzPW93bktleXMoYmVoYXZpb3JNZXRob2RzS2l0KS5zb3J0KCk7XG5mYWNldE5hbWVzLmxlbmd0aD4xfHxGYWlsIGBBIG11bHRpLWZhY2V0IG9iamVjdCBtdXN0IGhhdmUgbXVsdGlwbGUgZmFjZXRzYDtcbmlmKGludGVyZmFjZUd1YXJkS2l0KXtcbmNvbnN0IGludGVyZmFjZU5hbWVzPW93bktleXMoaW50ZXJmYWNlR3VhcmRLaXQpO1xuY29uc3QgZXh0cmFJbnRlcmZhY2VOYW1lcz1saXN0RGlmZmVyZW5jZShmYWNldE5hbWVzLGludGVyZmFjZU5hbWVzKTtcbmV4dHJhSW50ZXJmYWNlTmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBJbnRlcmZhY2VzICR7cShleHRyYUludGVyZmFjZU5hbWVzKX0gbm90IGltcGxlbWVudGVkIGJ5ICR7cSh0YWcpfWA7XG5jb25zdCBleHRyYUZhY2V0TmFtZXM9bGlzdERpZmZlcmVuY2UoaW50ZXJmYWNlTmFtZXMsZmFjZXROYW1lcyk7XG5leHRyYUZhY2V0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBGYWNldHMgJHtxKGV4dHJhRmFjZXROYW1lcyl9IG9mICR7cSh0YWcpfSBub3QgZ3VhcmRlZCBieSBpbnRlcmZhY2VzYDtcbiB9XG5jb25zdCBjb250ZXh0TWFwTmFtZXM9b3duS2V5cyhjb250ZXh0UHJvdmlkZXJLaXQpO1xuY29uc3QgZXh0cmFDb250ZXh0TmFtZXM9bGlzdERpZmZlcmVuY2UoZmFjZXROYW1lcyxjb250ZXh0TWFwTmFtZXMpO1xuZXh0cmFDb250ZXh0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBDb250ZXh0cyAke3EoZXh0cmFDb250ZXh0TmFtZXMpfSBub3QgaW1wbGVtZW50ZWQgYnkgJHtxKHRhZyl9YDtcbmNvbnN0IGV4dHJhRmFjZXROYW1lcz1saXN0RGlmZmVyZW5jZShjb250ZXh0TWFwTmFtZXMsZmFjZXROYW1lcyk7XG5leHRyYUZhY2V0TmFtZXMubGVuZ3RoPT09MHx8XG5GYWlsIGBGYWNldHMgJHtxKGV4dHJhRmFjZXROYW1lcyl9IG9mICR7cSh0YWcpfSBtaXNzaW5nIGNvbnRleHRzYDtcbmNvbnN0IHByb3RvS2l0PW9iamVjdE1hcChiZWhhdmlvck1ldGhvZHNLaXQsKGJlaGF2aW9yTWV0aG9kcyxmYWNldE5hbWUpPT5cbmRlZmVuZFByb3RvdHlwZShcbiBgJHt0YWd9ICR7U3RyaW5nKGZhY2V0TmFtZSl9YCxcbmNvbnRleHRQcm92aWRlcktpdFtmYWNldE5hbWVdLFxuYmVoYXZpb3JNZXRob2RzLFxudGhpc2Z1bE1ldGhvZHMsXG5pbnRlcmZhY2VHdWFyZEtpdCYmaW50ZXJmYWNlR3VhcmRLaXRbZmFjZXROYW1lXSkpO1xuXG5cbnJldHVybiBwcm90b0tpdDtcbiB9OyRo4oCNX29uY2UuZGVmZW5kUHJvdG90eXBlS2l0KGRlZmVuZFByb3RvdHlwZUtpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZlbmRQcm90b3R5cGUiOlsiZGVmZW5kUHJvdG90eXBlIl0sImRlZmVuZFByb3RvdHlwZUtpdCI6WyJkZWZlbmRQcm90b3R5cGVLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAcrUHzzwCAAA8AgAAJQAAAEBlbmRvL2V4by12MS41LjMvc3JjL2dldC1pbnRlcmZhY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIkdFVF9JTlRFUkZBQ0VfR1VBUkQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBHRVRfSU5URVJGQUNFX0dVQVJEPSdfX2dldEludGVyZmFjZUd1YXJkX18nO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLkdFVF9JTlRFUkZBQ0VfR1VBUkQoR0VUX0lOVEVSRkFDRV9HVUFSRCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJHRVRfSU5URVJGQUNFX0dVQVJEIjpbIkdFVF9JTlRFUkZBQ0VfR1VBUkQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh5JSp08BAABPAQAAHQAAAEBlbmRvL2V4by12MS41LjMvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAA0vIA1bAgAAWwIAAB0AAABAZW5kby9mYXItdjEuMS41L3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vcGFzcy1zdHlsZSJdLCJleHBvcnRzIjpbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiLG51bGxdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtdXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGVuZG8vZXZlbnR1YWwtc2VuZCI6W1siRSIsIkUiXV0sIkBlbmRvL3Bhc3Mtc3R5bGUiOltbIkZhciIsIkZhciJdLFsiZ2V0SW50ZXJmYWNlT2YiLCJnZXRJbnRlcmZhY2VPZiJdLFsicGFzc1N0eWxlT2YiLCJwYXNzU3R5bGVPZiJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAiOBv8nkHAAB5BwAAHQAAAEBlbmRvL21hcnNoYWwtdjEuNS4zL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyIsIi4vc3JjL21hcnNoYWwuanMiLCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyIsIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIiwiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiLCIuL3NyYy9yYW5rT3JkZXIuanMiLCIuL3NyYy90eXBlcy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiXSwiZXhwb3J0cyI6WyJhc3NlcnRSYW5rU29ydGVkIiwiYXNzZXJ0UmFua1NvcnRlZCIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsInBhcnNlIiwicGFyc2UiLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9wYXNzLXN0eWxlIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW1tcIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qc1wiLCBbXV0sW1wiLi9zcmMvbWFyc2hhbC5qc1wiLCBbXV0sW1wiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwtanVzdGluLmpzXCIsIFtdXSxbXCIuL3NyYy9lbmNvZGVQYXNzYWJsZS5qc1wiLCBbXV0sW1wiLi9zcmMvcmFua09yZGVyLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyI6W1siUUNMQVNTIiwiUUNMQVNTIl1dLCIuL3NyYy9tYXJzaGFsLmpzIjpbWyJtYWtlTWFyc2hhbCIsIm1ha2VNYXJzaGFsIl1dLCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyI6W1sic3RyaW5naWZ5Iiwic3RyaW5naWZ5Il0sWyJwYXJzZSIsInBhcnNlIl1dLCIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qcyI6W1siZGVjb2RlVG9KdXN0aW4iLCJkZWNvZGVUb0p1c3RpbiJdXSwiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiOltbIm1ha2VQYXNzYWJsZUtpdCIsIm1ha2VQYXNzYWJsZUtpdCJdLFsibWFrZUVuY29kZVBhc3NhYmxlIiwibWFrZUVuY29kZVBhc3NhYmxlIl0sWyJtYWtlRGVjb2RlUGFzc2FibGUiLCJtYWtlRGVjb2RlUGFzc2FibGUiXSxbImlzRW5jb2RlZFJlbW90YWJsZSIsImlzRW5jb2RlZFJlbW90YWJsZSJdLFsiemVyb1BhZCIsInplcm9QYWQiXSxbInJlY29yZE5hbWVzIiwicmVjb3JkTmFtZXMiXSxbInJlY29yZFZhbHVlcyIsInJlY29yZFZhbHVlcyJdXSwiLi9zcmMvcmFua09yZGVyLmpzIjpbWyJ0cml2aWFsQ29tcGFyYXRvciIsInRyaXZpYWxDb21wYXJhdG9yIl0sWyJhc3NlcnRSYW5rU29ydGVkIiwiYXNzZXJ0UmFua1NvcnRlZCJdLFsiY29tcGFyZVJhbmsiLCJjb21wYXJlUmFuayJdLFsiaXNSYW5rU29ydGVkIiwiaXNSYW5rU29ydGVkIl0sWyJzb3J0QnlSYW5rIiwic29ydEJ5UmFuayJdLFsiY29tcGFyZUFudGlSYW5rIiwiY29tcGFyZUFudGlSYW5rIl0sWyJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCIsIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0Il0sWyJnZXRQYXNzU3R5bGVDb3ZlciIsImdldFBhc3NTdHlsZUNvdmVyIl0sWyJpbnRlcnNlY3RSYW5rQ292ZXJzIiwiaW50ZXJzZWN0UmFua0NvdmVycyJdLFsidW5pb25SYW5rQ292ZXJzIiwidW5pb25SYW5rQ292ZXJzIl1dLCJAZW5kby9wYXNzLXN0eWxlIjpbWyJkZWVwbHlGdWxmaWxsZWQiLCJkZWVwbHlGdWxmaWxsZWQiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHLn8HFuQwAAbkMAACoAAABAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvZW5jb2RlUGFzc2FibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImlzRW5jb2RlZFJlbW90YWJsZSIsIm1ha2VEZWNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VQYXNzYWJsZUtpdCIsInBhc3NTdHlsZVByZWZpeGVzIiwicmVjb3JkTmFtZXMiLCJyZWNvcmRWYWx1ZXMiLCJ6ZXJvUGFkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRUYWcsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixhc3NlcnRSZWNvcmQsaXNFcnJvckxpa2UsbmFtZUZvclBhc3NhYmxlU3ltYm9sLHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxiLHEsRmFpbDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRUYWdcIiwgWyRo4oCNX2EgPT4gKGdldFRhZyA9ICRo4oCNX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjigI1fYSA9PiAobWFrZVRhZ2dlZCA9ICRo4oCNX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJhc3NlcnRSZWNvcmRcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFJlY29yZCA9ICRo4oCNX2EpXV0sW1wiaXNFcnJvckxpa2VcIiwgWyRo4oCNX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjigI1fYSldXSxbXCJuYW1lRm9yUGFzc2FibGVTeW1ib2xcIiwgWyRo4oCNX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRo4oCNX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaOKAjV9hID0+IChwYXNzYWJsZVN5bWJvbEZvck5hbWUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJiXCIsIFskaOKAjV9hID0+IChiID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7ZnJvbUVudHJpZXMsaXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8vXG5jb25zdCByQzA9L1tcXHgwMC1cXHgxRl0vO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGdldFN1ZmZpeD0oc3RyLGluZGV4KT0+aW5kZXg9PT0wP3N0cjpzdHIuc3Vic3RyaW5nKGluZGV4KTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcmVjb3JkTmFtZXM9KHJlY29yZCk9PlxuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4oLyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJlY29yZCkuc29ydCgpLnJldmVyc2UoKSk7JGjigI1fb25jZS5yZWNvcmROYW1lcyhyZWNvcmROYW1lcyk7XG5oYXJkZW4ocmVjb3JkTmFtZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICByZWNvcmRWYWx1ZXM9KHJlY29yZCxuYW1lcyk9PlxuaGFyZGVuKG5hbWVzLm1hcCgobmFtZSk9PnJlY29yZFtuYW1lXSkpOyRo4oCNX29uY2UucmVjb3JkVmFsdWVzKHJlY29yZFZhbHVlcyk7XG5oYXJkZW4ocmVjb3JkVmFsdWVzKTtcblxuY29uc3QgemVyb2VzPUFycmF5KDE2KS5cbmZpbGwodW5kZWZpbmVkKS5cbm1hcCgoXyxpKT0+JzAnLnJlcGVhdChpKSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB6ZXJvUGFkPShuLHNpemUpPT57XG5jb25zdCBuU3RyPSBgJHtufWA7XG5jb25zdCBmaWxsTGVuPXNpemUtblN0ci5sZW5ndGg7XG5pZihmaWxsTGVuPT09MClyZXR1cm4gblN0cjtcbmFzc2VydChmaWxsTGVuPjAmJmZpbGxMZW48emVyb2VzLmxlbmd0aCk7XG5yZXR1cm4gYCR7emVyb2VzW2ZpbGxMZW5dfSR7blN0cn1gO1xuIH07JGjigI1fb25jZS56ZXJvUGFkKHplcm9QYWQpO1xuaGFyZGVuKHplcm9QYWQpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGFzTnVtYmVyPW5ldyBGbG9hdDY0QXJyYXkoMSk7XG5jb25zdCBhc0JpdHM9bmV3IEJpZ1VpbnQ2NEFycmF5KGFzTnVtYmVyLmJ1ZmZlcik7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbmNvbnN0IENhbm9uaWNhbE5hTkJpdHM9J2ZmZjgwMDAwMDAwMDAwMDAnO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQmluYXJ5NjQ9KG4pPT57XG4vL1xuaWYoaXMobiwtMCkpe1xubj0wO1xuIH1lbHNlIGlmKGlzKG4sTmFOKSl7XG5yZXR1cm4gYGYke0Nhbm9uaWNhbE5hTkJpdHN9YDtcbiB9XG5hc051bWJlclswXT1uO1xubGV0IGJpdHM9YXNCaXRzWzBdO1xuaWYobjwwKXtcbmJpdHNePTB4ZmZmZmZmZmZmZmZmZmZmZm47XG4gfWVsc2V7XG5iaXRzXj0weDgwMDAwMDAwMDAwMDAwMDBuO1xuIH1cbnJldHVybiBgZiR7emVyb1BhZChiaXRzLnRvU3RyaW5nKDE2KSwxNil9YDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVCaW5hcnk2ND0oZW5jb2RlZCxza2lwPTApPT57XG5lbmNvZGVkLmNoYXJBdChza2lwKT09PSdmJ3x8RmFpbCBgRW5jb2RlZCBudW1iZXIgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IGJpdHM9QmlnSW50KCBgMHgke2dldFN1ZmZpeChlbmNvZGVkLHNraXArMSl9YCk7XG5pZihlbmNvZGVkLmNoYXJBdChza2lwKzEpPCc4Jyl7XG5iaXRzXj0weGZmZmZmZmZmZmZmZmZmZmZuO1xuIH1lbHNle1xuYml0c149MHg4MDAwMDAwMDAwMDAwMDAwbjtcbiB9XG5hc0JpdHNbMF09Yml0cztcbmNvbnN0IHJlc3VsdD1hc051bWJlclswXTtcbiFpcyhyZXN1bHQsLTApfHxcbkZhaWwgYFVuZXhwZWN0ZWQgbmVnYXRpdmUgemVybzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVCaWdJbnQ9KG4pPT57XG5jb25zdCBhYnM9bjwwbj8tbjpuO1xuY29uc3QgbkRpZ2l0cz1hYnMudG9TdHJpbmcoKS5sZW5ndGg7XG5jb25zdCBsRGlnaXRzPW5EaWdpdHMudG9TdHJpbmcoKS5sZW5ndGg7XG5pZihuPDBuKXtcbnJldHVybiBgbiR7XG4vL1xuLy9cbicjJy5yZXBlYXQobERpZ2l0cy0xKVxuIH0ke1xuLy9cbigxMCoqbERpZ2l0cy1uRGlnaXRzKS50b1N0cmluZygpLnBhZFN0YXJ0KGxEaWdpdHMsJzAnKVxuIH06JHtcbi8vXG4oMTBuKipCaWdJbnQobkRpZ2l0cykrbikudG9TdHJpbmcoKS5wYWRTdGFydChuRGlnaXRzLCcwJylcbiB9YDtcbiB9ZWxzZXtcbnJldHVybiBgcCR7XG4vL1xuLy9cbid+Jy5yZXBlYXQobERpZ2l0cy0xKVxuIH0ke1xuLy9cbm5EaWdpdHNcbiB9OiR7XG4vL1xublxuIH1gO1xuIH1cbiB9O1xuXG5jb25zdCByQmlnSW50UGF5bG9hZD0vKFswLTldKykoOihbMC05XSskfCl8KS9zO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQmlnSW50PShlbmNvZGVkKT0+e1xuY29uc3QgdHlwZVByZWZpeD1lbmNvZGVkLmNoYXJBdCgwKTsvL1xudHlwZVByZWZpeD09PSdwJ3x8XG50eXBlUHJlZml4PT09J24nfHxcbkZhaWwgYEVuY29kZWQgYmlnaW50IGV4cGVjdGVkOiAke2VuY29kZWR9YDtcblxuY29uc3R7XG5pbmRleDpsRGlnaXRzLFxuMTpzbkRpZ2l0cyxcbjI6dGFpbCxcbjM6ZGlnaXRzfT1cbmVuY29kZWQubWF0Y2gockJpZ0ludFBheWxvYWQpfHxGYWlsIGBEaWdpdCBjb3VudCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5cbnNuRGlnaXRzLmxlbmd0aD09PWxEaWdpdHN8fFxuRmFpbCBgVW5hcnktcHJlZml4ZWQgZGVjaW1hbCBkaWdpdCBjb3VudCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5sZXQgbkRpZ2l0cz1wYXJzZUludChzbkRpZ2l0cywxMCk7XG5pZih0eXBlUHJlZml4PT09J24nKXtcbi8vXG4vL1xubkRpZ2l0cz0xMCoqLyogICAgICAgICAgICAgICAgICovbERpZ2l0cy1uRGlnaXRzO1xuIH1cblxudGFpbC5jaGFyQXQoMCk9PT0nOid8fEZhaWwgYFNlcGFyYXRvciBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5kaWdpdHMubGVuZ3RoPT09bkRpZ2l0c3x8XG5GYWlsIGBGaXhlZC1sZW5ndGggZGlnaXQgc2VxdWVuY2UgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IG49QmlnSW50KGRpZ2l0cyk7XG5pZih0eXBlUHJlZml4PT09J24nKXtcbi8vXG4vL1xubj0tKDEwbioqQmlnSW50KG5EaWdpdHMpLW4pO1xuIH1cblxucmV0dXJuIG47XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzdHJpbmdFc2NhcGVzPUFycmF5KDB4MjIpLlxuZmlsbCh1bmRlZmluZWQpLlxubWFwKChfLGNwKT0+e1xuc3dpdGNoKFN0cmluZy5mcm9tQ2hhckNvZGUoY3ApKXtcbmNhc2UnICc6XG5yZXR1cm4nIV8nO1xuY2FzZSchJzpcbnJldHVybichfCc7XG5kZWZhdWx0OlxucmV0dXJuIGAhJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKzB4MjEpfWA7fVxuXG4gfSk7XG5zdHJpbmdFc2NhcGVzWydeJy5jaGFyQ29kZUF0KDApXT0nX0AnO1xuc3RyaW5nRXNjYXBlc1snXycuY2hhckNvZGVBdCgwKV09J19fJztcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeD0oc3RyKT0+XG5zdHIucmVwbGFjZSgvW1xcMC0hXl9dL2csKGNoKT0+c3RyaW5nRXNjYXBlc1tjaC5jaGFyQ29kZUF0KDApXSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUNvbXBhY3RTdHJpbmdTdWZmaXg9KGVuY29kZWQpPT57XG5yZXR1cm4gZW5jb2RlZC5yZXBsYWNlKC8oW1xcMC0hX10pKC58XFxuKT8vZywoZXNjLHByZWZpeCxzdWZmaXgpPT57XG5zd2l0Y2goZXNjKXtcbmNhc2UnIV8nOlxucmV0dXJuJyAnO1xuY2FzZSchfCc6XG5yZXR1cm4nISc7XG5jYXNlJ19AJzpcbnJldHVybideJztcbmNhc2UnX18nOlxucmV0dXJuJ18nO1xuZGVmYXVsdDp7XG5jb25zdCBjaD0vKiAgICAgICAgICAgICAgICAgKi9zdWZmaXg7XG4vL1xuLy9cbnByZWZpeD09PSchJyYmc3VmZml4IT09dW5kZWZpbmVkJiZjaD49JyEnJiZjaDw9J0AnfHxcbkZhaWwgYGludmFsaWQgc3RyaW5nIGVzY2FwZTogJHtxKGVzYyl9YDtcbnJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGNoLmNoYXJDb2RlQXQoMCktMHgyMSk7XG4gfX1cblxuIH0pO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUxlZ2FjeVN0cmluZ1N1ZmZpeD0oc3RyKT0+c3RyO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVMZWdhY3lTdHJpbmdTdWZmaXg9KGVuY29kZWQpPT5lbmNvZGVkO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUNvbXBhY3RBcnJheT0oYXJyYXksZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBjaGFycz1bJ14nXTtcbmZvcihjb25zdCBlbGVtZW50IG9mIGFycmF5KXtcbmNvbnN0IGVuYz1lbmNvZGVQYXNzYWJsZShlbGVtZW50KTtcbmNoYXJzLnB1c2goZW5jLCcgJyk7XG4gfVxucmV0dXJuIGNoYXJzLmpvaW4oJycpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQ29tcGFjdEFycmF5PShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmNvbnN0IGVsZW1lbnRzPVtdO1xubGV0IGRlcHRoPTA7XG4vL1xuLy9cbmxldCBuZXh0SW5kZXg9c2tpcCsxO1xubGV0IGN1cnJlbnRFbGVtZW50U3RhcnQ9c2tpcCsxO1xuZm9yKGNvbnN0ezA6Y2gsaW5kZXg6aX1vZiBlbmNvZGVkLm1hdGNoQWxsKC9bXFxeIF0vZykpe1xuY29uc3QgaW5kZXg9LyogICAgICAgICAgICAgICAgICovaTtcbmlmKGluZGV4PD1za2lwKXtcbmlmKGluZGV4PT09c2tpcCl7XG5jaD09PSdeJ3x8RmFpbCBgRW5jb2RlZCBhcnJheSBleHBlY3RlZDogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuIH1cbiB9ZWxzZSBpZihjaD09PSdeJyl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmRlcHRoKz0xO1xuIH1lbHNle1xuLy9cbmlmKGluZGV4PT09bmV4dEluZGV4KXtcbi8vXG5kZXB0aC09MTtcbmRlcHRoPj0wfHxcbi8vXG5GYWlsIGB1bmV4cGVjdGVkIGFycmF5IGVsZW1lbnQgdGVybWluYXRvcjogJHtlbmNvZGVkLnNsaWNlKHNraXAsaW5kZXgrMil9YDtcbiB9XG5pZihkZXB0aD09PTApe1xuLy9cbmVsZW1lbnRzLnB1c2goXG5kZWNvZGVQYXNzYWJsZShlbmNvZGVkLnNsaWNlKGN1cnJlbnRFbGVtZW50U3RhcnQsaW5kZXgpKSk7XG5cbmN1cnJlbnRFbGVtZW50U3RhcnQ9aW5kZXgrMTtcbiB9XG4gfVxuLy9cbm5leHRJbmRleD1pbmRleCsxO1xuIH1cbmRlcHRoPT09MHx8RmFpbCBgdW50ZXJtaW5hdGVkIGFycmF5OiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5uZXh0SW5kZXg9PT1lbmNvZGVkLmxlbmd0aHx8XG5GYWlsIGB1bnRlcm1pbmF0ZWQgYXJyYXkgZWxlbWVudDogJHtnZXRTdWZmaXgoXG5lbmNvZGVkLFxuY3VycmVudEVsZW1lbnRTdGFydClcbiB9YDtcbnJldHVybiBoYXJkZW4oZWxlbWVudHMpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUxlZ2FjeUFycmF5PShhcnJheSxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IGNoYXJzPVsnWyddO1xuZm9yKGNvbnN0IGVsZW1lbnQgb2YgYXJyYXkpe1xuY29uc3QgZW5jPWVuY29kZVBhc3NhYmxlKGVsZW1lbnQpO1xuZm9yKGNvbnN0IGMgb2YgZW5jKXtcbmlmKGM9PT0nXFx1MDAwMCd8fGM9PT0nXFx1MDAwMScpe1xuY2hhcnMucHVzaCgnXFx1MDAwMScpO1xuIH1cbmNoYXJzLnB1c2goYyk7XG4gfVxuY2hhcnMucHVzaCgnXFx1MDAwMCcpO1xuIH1cbnJldHVybiBjaGFycy5qb2luKCcnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUxlZ2FjeUFycmF5PShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmNvbnN0IGVsZW1lbnRzPVtdO1xuY29uc3QgZWxlbUNoYXJzPVtdO1xuLy9cbi8vXG5sZXQgc3RpbGxUb1NraXA9c2tpcCsxO1xubGV0IGluRXNjYXBlPWZhbHNlO1xuZm9yKGNvbnN0IGMgb2YgZW5jb2RlZCl7XG5pZihzdGlsbFRvU2tpcD4wKXtcbnN0aWxsVG9Ta2lwLT0xO1xuaWYoc3RpbGxUb1NraXA9PT0wKXtcbmM9PT0nWyd8fEZhaWwgYEVuY29kZWQgYXJyYXkgZXhwZWN0ZWQ6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9XG4gfWVsc2UgaWYoaW5Fc2NhcGUpe1xuYz09PSdcXHUwMDAwJ3x8XG5jPT09J1xcdTAwMDEnfHxcbkZhaWwgYFVuZXhwZWN0ZWQgY2hhcmFjdGVyIGFmdGVyIHUwMDAxIGVzY2FwZTogJHtjfWA7XG5lbGVtQ2hhcnMucHVzaChjKTtcbiB9ZWxzZSBpZihjPT09J1xcdTAwMDAnKXtcbmNvbnN0IGVuY29kZWRFbGVtZW50PWVsZW1DaGFycy5qb2luKCcnKTtcbmVsZW1DaGFycy5sZW5ndGg9MDtcbmNvbnN0IGVsZW1lbnQ9ZGVjb2RlUGFzc2FibGUoZW5jb2RlZEVsZW1lbnQpO1xuZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiB9ZWxzZSBpZihjPT09J1xcdTAwMDEnKXtcbmluRXNjYXBlPXRydWU7XG4vL1xuY29udGludWU7XG4gfWVsc2V7XG5lbGVtQ2hhcnMucHVzaChjKTtcbiB9XG5pbkVzY2FwZT1mYWxzZTtcbiB9XG4haW5Fc2NhcGV8fEZhaWwgYHVuZXhwZWN0ZWQgZW5kIG9mIGVuY29kaW5nICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmVsZW1DaGFycy5sZW5ndGg9PT0wfHxcbkZhaWwgYGVuY29kaW5nIHRlcm1pbmF0ZWQgZWFybHk6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbnJldHVybiBoYXJkZW4oZWxlbWVudHMpO1xuIH07XG5cbmNvbnN0IGVuY29kZVJlY29yZD0ocmVjb3JkLGVuY29kZUFycmF5LGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgbmFtZXM9cmVjb3JkTmFtZXMocmVjb3JkKTtcbmNvbnN0IHZhbHVlcz1yZWNvcmRWYWx1ZXMocmVjb3JkLG5hbWVzKTtcbnJldHVybiBgKCR7ZW5jb2RlQXJyYXkoaGFyZGVuKFtuYW1lcyx2YWx1ZXNdKSxlbmNvZGVQYXNzYWJsZSl9YDtcbiB9O1xuXG5jb25zdCBkZWNvZGVSZWNvcmQ9KGVuY29kZWQsZGVjb2RlQXJyYXksZGVjb2RlUGFzc2FibGUsc2tpcD0wKT0+e1xuYXNzZXJ0KGVuY29kZWQuY2hhckF0KHNraXApPT09JygnKTtcbi8vXG4vL1xuY29uc3QgdW56aXBwZWRFbnRyaWVzPWRlY29kZUFycmF5KGVuY29kZWQsZGVjb2RlUGFzc2FibGUsc2tpcCsxKTtcbnVuemlwcGVkRW50cmllcy5sZW5ndGg9PT0yfHxcbkZhaWwgYGV4cGVjdGVkIGtleXMsdmFsdWVzIHBhaXI6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0W2tleXMsdmFsc109dW56aXBwZWRFbnRyaWVzO1xuXG5wYXNzU3R5bGVPZihrZXlzKT09PSdjb3B5QXJyYXknJiZcbnBhc3NTdHlsZU9mKHZhbHMpPT09J2NvcHlBcnJheScmJlxua2V5cy5sZW5ndGg9PT12YWxzLmxlbmd0aCYmXG5rZXlzLmV2ZXJ5KChrZXkpPT50eXBlb2Yga2V5PT09J3N0cmluZycpfHxcbkZhaWwgYG5vdCBhIHZhbGlkIHJlY29yZCBlbmNvZGluZzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuY29uc3QgbWFwRW50cmllcz1rZXlzLm1hcCgoa2V5LGkpPT5ba2V5LHZhbHNbaV1dKTtcbmNvbnN0IHJlY29yZD1oYXJkZW4oZnJvbUVudHJpZXMobWFwRW50cmllcykpO1xuYXNzZXJ0UmVjb3JkKHJlY29yZCwnZGVjb2RlZCByZWNvcmQnKTtcbnJldHVybiByZWNvcmQ7XG4gfTtcblxuY29uc3QgZW5jb2RlVGFnZ2VkPSh0YWdnZWQsZW5jb2RlQXJyYXksZW5jb2RlUGFzc2FibGUpPT5cbiBgOiR7ZW5jb2RlQXJyYXkoaGFyZGVuKFtnZXRUYWcodGFnZ2VkKSx0YWdnZWQucGF5bG9hZF0pLGVuY29kZVBhc3NhYmxlKX1gO1xuXG5jb25zdCBkZWNvZGVUYWdnZWQ9KGVuY29kZWQsZGVjb2RlQXJyYXksZGVjb2RlUGFzc2FibGUsc2tpcD0wKT0+e1xuYXNzZXJ0KGVuY29kZWQuY2hhckF0KHNraXApPT09JzonKTtcbi8vXG4vL1xuY29uc3QgdGFnZ2VkUGF5bG9hZD1kZWNvZGVBcnJheShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXArMSk7XG50YWdnZWRQYXlsb2FkLmxlbmd0aD09PTJ8fFxuRmFpbCBgZXhwZWN0ZWQgdGFnLHBheWxvYWQgcGFpcjogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuY29uc3RbdGFnLHBheWxvYWRdPXRhZ2dlZFBheWxvYWQ7XG5wYXNzU3R5bGVPZih0YWcpPT09J3N0cmluZyd8fFxuRmFpbCBgbm90IGEgdmFsaWQgdGFnZ2VkIGVuY29kaW5nOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcscGF5bG9hZCk7XG4gfTtcblxuY29uc3QgbWFrZUVuY29kZVJlbW90YWJsZT0odW5zYWZlRW5jb2RlUmVtb3RhYmxlLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlPShyLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlUmVtb3RhYmxlKHIsaW5uZXJFbmNvZGUpO1xudHlwZW9mIGVuY29kaW5nPT09J3N0cmluZycmJmVuY29kaW5nLmNoYXJBdCgwKT09PSdyJ3x8XG5GYWlsIGBSZW1vdGFibGUgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiclwiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnUmVtb3RhYmxlJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVSZW1vdGFibGU7XG4gfTtcblxuY29uc3QgbWFrZUVuY29kZVByb21pc2U9KHVuc2FmZUVuY29kZVByb21pc2UsdmVyaWZ5RW5jb2RpbmcpPT57XG5jb25zdCBlbmNvZGVQcm9taXNlPShwLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlUHJvbWlzZShwLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0nPyd8fFxuRmFpbCBgUHJvbWlzZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCI/XCI6ICR7ZW5jb2Rpbmd9YDtcbnZlcmlmeUVuY29kaW5nKGVuY29kaW5nLCdQcm9taXNlJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVQcm9taXNlO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVFcnJvcj0odW5zYWZlRW5jb2RlRXJyb3IsdmVyaWZ5RW5jb2RpbmcpPT57XG5jb25zdCBlbmNvZGVFcnJvcj0oZXJyLGlubmVyRW5jb2RlKT0+e1xuY29uc3QgZW5jb2Rpbmc9dW5zYWZlRW5jb2RlRXJyb3IoZXJyLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0nISd8fFxuRmFpbCBgRXJyb3IgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiIVwiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnRXJyb3InKTtcbnJldHVybiBlbmNvZGluZztcbiB9O1xucmV0dXJuIGVuY29kZUVycm9yO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlubmVyRW5jb2RlPShlbmNvZGVTdHJpbmdTdWZmaXgsZW5jb2RlQXJyYXksb3B0aW9ucyk9PntcbmNvbnN0e1xuZW5jb2RlUmVtb3RhYmxlOnVuc2FmZUVuY29kZVJlbW90YWJsZSxcbmVuY29kZVByb21pc2U6dW5zYWZlRW5jb2RlUHJvbWlzZSxcbmVuY29kZUVycm9yOnVuc2FmZUVuY29kZUVycm9yLFxudmVyaWZ5RW5jb2Rpbmc9KCk9PnsgfX09XG5vcHRpb25zO1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlPW1ha2VFbmNvZGVSZW1vdGFibGUoXG51bnNhZmVFbmNvZGVSZW1vdGFibGUsXG52ZXJpZnlFbmNvZGluZyk7XG5cbmNvbnN0IGVuY29kZVByb21pc2U9bWFrZUVuY29kZVByb21pc2UodW5zYWZlRW5jb2RlUHJvbWlzZSx2ZXJpZnlFbmNvZGluZyk7XG5jb25zdCBlbmNvZGVFcnJvcj1tYWtlRW5jb2RlRXJyb3IodW5zYWZlRW5jb2RlRXJyb3IsdmVyaWZ5RW5jb2RpbmcpO1xuXG5jb25zdCBpbm5lckVuY29kZT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBlbmNvZGVFcnJvcihwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzp7XG5yZXR1cm4ndic7XG4gfVxuY2FzZSd1bmRlZmluZWQnOntcbnJldHVybid6JztcbiB9XG5jYXNlJ251bWJlcic6e1xucmV0dXJuIGVuY29kZUJpbmFyeTY0KHBhc3NhYmxlKTtcbiB9XG5jYXNlJ3N0cmluZyc6e1xucmV0dXJuIGBzJHtlbmNvZGVTdHJpbmdTdWZmaXgocGFzc2FibGUpfWA7XG4gfVxuY2FzZSdib29sZWFuJzp7XG5yZXR1cm4gYGIke3Bhc3NhYmxlfWA7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybiBlbmNvZGVCaWdJbnQocGFzc2FibGUpO1xuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5yZXR1cm4gZW5jb2RlUmVtb3RhYmxlKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5yZXR1cm4gZW5jb2RlRXJyb3IocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGVuY29kZVByb21pc2UocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG4vL1xuY29uc3QgbmFtZT1uYW1lRm9yUGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbnJldHVybiBgeSR7ZW5jb2RlU3RyaW5nU3VmZml4KG5hbWUpfWA7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBlbmNvZGVBcnJheShwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG5yZXR1cm4gZW5jb2RlUmVjb3JkKHBhc3NhYmxlLGVuY29kZUFycmF5LGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xucmV0dXJuIGVuY29kZVRhZ2dlZChwYXNzYWJsZSxlbmNvZGVBcnJheSxpbm5lckVuY29kZSk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBhICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgdXNlZCBhcyBhIGNvbGxlY3Rpb24gcGFzc2FibGVgO1xuIH19XG5cbiB9O1xucmV0dXJuIGlubmVyRW5jb2RlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBsaWJlcmFsRGVjb2RlcnM9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgKi97XG5kZWNvZGVSZW1vdGFibGU6KF9lbmNvZGluZyxfaW5uZXJEZWNvZGUpPT51bmRlZmluZWQsXG5kZWNvZGVQcm9taXNlOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkLFxuZGVjb2RlRXJyb3I6KF9lbmNvZGluZyxfaW5uZXJEZWNvZGUpPT51bmRlZmluZWR9O1xuXG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBtYWtlSW5uZXJEZWNvZGU9KGRlY29kZVN0cmluZ1N1ZmZpeCxkZWNvZGVBcnJheSxvcHRpb25zKT0+e1xuY29uc3R7ZGVjb2RlUmVtb3RhYmxlLGRlY29kZVByb21pc2UsZGVjb2RlRXJyb3J9PW9wdGlvbnM7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5uZXJEZWNvZGU9KGVuY29kZWQsc2tpcD0wKT0+e1xuc3dpdGNoKGVuY29kZWQuY2hhckF0KHNraXApKXtcbmNhc2Undic6e1xucmV0dXJuIG51bGw7XG4gfVxuY2FzZSd6Jzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnZic6e1xucmV0dXJuIGRlY29kZUJpbmFyeTY0KGVuY29kZWQsc2tpcCk7XG4gfVxuY2FzZSdzJzp7XG5yZXR1cm4gZGVjb2RlU3RyaW5nU3VmZml4KGdldFN1ZmZpeChlbmNvZGVkLHNraXArMSkpO1xuIH1cbmNhc2UnYic6e1xuY29uc3Qgc3Vic3RyaW5nPWdldFN1ZmZpeChlbmNvZGVkLHNraXArMSk7XG5pZihzdWJzdHJpbmc9PT0ndHJ1ZScpe1xucmV0dXJuIHRydWU7XG4gfWVsc2UgaWYoc3Vic3RyaW5nPT09J2ZhbHNlJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxudGhyb3cgRmFpbCBgZXhwZWN0ZWQgZW5jb2RlZCBib29sZWFuIHRvIGJlIFwiYnRydWVcIiBvciBcImJmYWxzZVwiOiAke3N1YnN0cmluZ31gO1xuIH1cbmNhc2Unbic6XG5jYXNlJ3AnOntcbnJldHVybiBkZWNvZGVCaWdJbnQoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCkpO1xuIH1cbmNhc2Uncic6e1xucmV0dXJuIGRlY29kZVJlbW90YWJsZShnZXRTdWZmaXgoZW5jb2RlZCxza2lwKSxpbm5lckRlY29kZSk7XG4gfVxuY2FzZSc/Jzp7XG5yZXR1cm4gZGVjb2RlUHJvbWlzZShnZXRTdWZmaXgoZW5jb2RlZCxza2lwKSxpbm5lckRlY29kZSk7XG4gfVxuY2FzZSchJzp7XG5yZXR1cm4gZGVjb2RlRXJyb3IoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UneSc6e1xuLy9cbmNvbnN0IG5hbWU9ZGVjb2RlU3RyaW5nU3VmZml4KGdldFN1ZmZpeChlbmNvZGVkLHNraXArMSkpO1xucmV0dXJuIHBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbiB9XG5jYXNlJ1snOlxuY2FzZSdeJzp7XG4vL1xucmV0dXJuIGRlY29kZUFycmF5KGVuY29kZWQsaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuY2FzZScoJzp7XG5yZXR1cm4gZGVjb2RlUmVjb3JkKGVuY29kZWQsZGVjb2RlQXJyYXksaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuY2FzZSc6Jzp7XG5yZXR1cm4gZGVjb2RlVGFnZ2VkKGVuY29kZWQsZGVjb2RlQXJyYXksaW5uZXJEZWNvZGUsc2tpcCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGRhdGFiYXNlIGtleTogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xuIH19XG5cbiB9O1xucmV0dXJuIGlubmVyRGVjb2RlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlUGFzc2FibGVLaXQ9KG9wdGlvbnM9e30pPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZT0ocixfKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cn1gLFxuZW5jb2RlUHJvbWlzZT0ocCxfKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3B9YCxcbmVuY29kZUVycm9yPShlcnIsXyk9PkZhaWwgYGVycm9yIHVuZXhwZWN0ZWQ6ICR7ZXJyfWAsXG5mb3JtYXQ9J2xlZ2FjeU9yZGVyZWQnLFxuXG5kZWNvZGVSZW1vdGFibGU9KGVuY29kaW5nLF8pPT5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gLFxuZGVjb2RlUHJvbWlzZT0oZW5jb2RpbmcsXyk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gLFxuZGVjb2RlRXJyb3I9KGVuY29kaW5nLF8pPT5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWB9PVxub3B0aW9ucztcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBlbmNvZGVQYXNzYWJsZTtcbmNvbnN0IGVuY29kZU9wdGlvbnM9e2VuY29kZVJlbW90YWJsZSxlbmNvZGVQcm9taXNlLGVuY29kZUVycm9yLGZvcm1hdH07XG5pZihmb3JtYXQ9PT0nY29tcGFjdE9yZGVyZWQnKXtcbmNvbnN0IGxpYmVyYWxEZWNvZGU9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmRlY29kZUNvbXBhY3RBcnJheSxcbmxpYmVyYWxEZWNvZGVycyk7XG5cbi8qXG5cblxuXG4gICAgICovXG5jb25zdCB2ZXJpZnlFbmNvZGluZz0oZW5jb2RpbmcsbGFiZWwpPT57XG4hZW5jb2RpbmcubWF0Y2gockMwKXx8XG5GYWlsIGAke2IoXG5sYWJlbClcbiB9IGVuY29kaW5nIG11c3Qgbm90IGNvbnRhaW4gYSBDMCBjb250cm9sIGNoYXJhY3RlcjogJHtlbmNvZGluZ31gO1xuY29uc3QgZGVjb2RlZD1kZWNvZGVDb21wYWN0QXJyYXkoIGBediAke2VuY29kaW5nfSB2IGAsbGliZXJhbERlY29kZSk7XG5pc0FycmF5KGRlY29kZWQpJiZcbmRlY29kZWQubGVuZ3RoPT09MyYmXG5kZWNvZGVkWzBdPT09bnVsbCYmXG5kZWNvZGVkWzJdPT09bnVsbHx8XG5GYWlsIGAke2IobGFiZWwpfSBlbmNvZGluZyBtdXN0IGJlIGVtYmVkZGFibGU6ICR7ZW5jb2Rpbmd9YDtcbiB9O1xuY29uc3QgZW5jb2RlQ29tcGFjdD1tYWtlSW5uZXJFbmNvZGUoXG5lbmNvZGVDb21wYWN0U3RyaW5nU3VmZml4LFxuZW5jb2RlQ29tcGFjdEFycmF5LFxuey4uLmVuY29kZU9wdGlvbnMsdmVyaWZ5RW5jb2Rpbmd9KTtcblxuZW5jb2RlUGFzc2FibGU9KHBhc3NhYmxlKT0+IGB+JHtlbmNvZGVDb21wYWN0KHBhc3NhYmxlKX1gO1xuIH1lbHNlIGlmKGZvcm1hdD09PSdsZWdhY3lPcmRlcmVkJyl7XG5lbmNvZGVQYXNzYWJsZT1tYWtlSW5uZXJFbmNvZGUoXG5lbmNvZGVMZWdhY3lTdHJpbmdTdWZmaXgsXG5lbmNvZGVMZWdhY3lBcnJheSxcbmVuY29kZU9wdGlvbnMpO1xuXG4gfWVsc2V7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgZm9ybWF0OiAke3EoZm9ybWF0KX1gO1xuIH1cblxuY29uc3QgZGVjb2RlT3B0aW9ucz17ZGVjb2RlUmVtb3RhYmxlLGRlY29kZVByb21pc2UsZGVjb2RlRXJyb3J9O1xuY29uc3QgZGVjb2RlQ29tcGFjdD1tYWtlSW5uZXJEZWNvZGUoXG5kZWNvZGVDb21wYWN0U3RyaW5nU3VmZml4LFxuZGVjb2RlQ29tcGFjdEFycmF5LFxuZGVjb2RlT3B0aW9ucyk7XG5cbmNvbnN0IGRlY29kZUxlZ2FjeT1tYWtlSW5uZXJEZWNvZGUoXG5kZWNvZGVMZWdhY3lTdHJpbmdTdWZmaXgsXG5kZWNvZGVMZWdhY3lBcnJheSxcbmRlY29kZU9wdGlvbnMpO1xuXG5jb25zdCBkZWNvZGVQYXNzYWJsZT0oZW5jb2RlZCk9Pntcbi8vXG4vL1xuLy9cbmlmKGVuY29kZWQuY2hhckF0KDApPT09J34nKXtcbnJldHVybiBkZWNvZGVDb21wYWN0KGVuY29kZWQsMSk7XG4gfVxucmV0dXJuIGRlY29kZUxlZ2FjeShlbmNvZGVkKTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtlbmNvZGVQYXNzYWJsZSxkZWNvZGVQYXNzYWJsZX0pO1xuIH07JGjigI1fb25jZS5tYWtlUGFzc2FibGVLaXQobWFrZVBhc3NhYmxlS2l0KTtcbmhhcmRlbihtYWtlUGFzc2FibGVLaXQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbmNvZGVQYXNzYWJsZT0oZW5jb2RlT3B0aW9ucyk9PntcbmNvbnN0e2VuY29kZVBhc3NhYmxlfT1tYWtlUGFzc2FibGVLaXQoZW5jb2RlT3B0aW9ucyk7XG5yZXR1cm4gZW5jb2RlUGFzc2FibGU7XG4gfTskaOKAjV9vbmNlLm1ha2VFbmNvZGVQYXNzYWJsZShtYWtlRW5jb2RlUGFzc2FibGUpO1xuaGFyZGVuKG1ha2VFbmNvZGVQYXNzYWJsZSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZVBhc3NhYmxlPShkZWNvZGVPcHRpb25zKT0+e1xuY29uc3R7ZGVjb2RlUGFzc2FibGV9PW1ha2VQYXNzYWJsZUtpdChkZWNvZGVPcHRpb25zKTtcbnJldHVybiBkZWNvZGVQYXNzYWJsZTtcbiB9OyRo4oCNX29uY2UubWFrZURlY29kZVBhc3NhYmxlKG1ha2VEZWNvZGVQYXNzYWJsZSk7XG5oYXJkZW4obWFrZURlY29kZVBhc3NhYmxlKTtcblxuY29uc3QgICAgICAgIGlzRW5jb2RlZFJlbW90YWJsZT0oZW5jb2RlZCk9PmVuY29kZWQuY2hhckF0KDApPT09J3InOyRo4oCNX29uY2UuaXNFbmNvZGVkUmVtb3RhYmxlKGlzRW5jb2RlZFJlbW90YWJsZSk7XG5oYXJkZW4oaXNFbmNvZGVkUmVtb3RhYmxlKTtcblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhc3NTdHlsZVByZWZpeGVzPXtcbmVycm9yOichJyxcbmNvcHlSZWNvcmQ6JygnLFxudGFnZ2VkOic6JyxcbnByb21pc2U6Jz8nLFxuY29weUFycmF5OidbXicsXG5ib29sZWFuOidiJyxcbm51bWJlcjonZicsXG5iaWdpbnQ6J25wJyxcbnJlbW90YWJsZToncicsXG5zdHJpbmc6J3MnLFxubnVsbDondicsXG5zeW1ib2w6J3knLFxudW5kZWZpbmVkOid6J307JGjigI1fb25jZS5wYXNzU3R5bGVQcmVmaXhlcyhwYXNzU3R5bGVQcmVmaXhlcyk7XG5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihwYXNzU3R5bGVQcmVmaXhlcyxudWxsKTtcbmhhcmRlbihwYXNzU3R5bGVQcmVmaXhlcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJyZWNvcmROYW1lcyI6WyJyZWNvcmROYW1lcyJdLCJyZWNvcmRWYWx1ZXMiOlsicmVjb3JkVmFsdWVzIl0sInplcm9QYWQiOlsiemVyb1BhZCJdLCJtYWtlUGFzc2FibGVLaXQiOlsibWFrZVBhc3NhYmxlS2l0Il0sIm1ha2VFbmNvZGVQYXNzYWJsZSI6WyJtYWtlRW5jb2RlUGFzc2FibGUiXSwibWFrZURlY29kZVBhc3NhYmxlIjpbIm1ha2VEZWNvZGVQYXNzYWJsZSJdLCJpc0VuY29kZWRSZW1vdGFibGUiOlsiaXNFbmNvZGVkUmVtb3RhYmxlIl0sInBhc3NTdHlsZVByZWZpeGVzIjpbInBhc3NTdHlsZVByZWZpeGVzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADCMdNdyIgAAciIAACsAAABAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJRQ0xBU1MiLCJtYWtlRGVjb2RlRnJvbUNhcERhdGEiLCJtYWtlRW5jb2RlVG9DYXBEYXRhIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGlzT2JqZWN0LGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjigI1fYSA9PiAoaXNFcnJvckxpa2UgPSAkaOKAjV9hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRo4oCNX2EgPT4gKG1ha2VUYWdnZWQgPSAkaOKAjV9hKV1dLFtcImlzT2JqZWN0XCIsIFskaOKAjV9hID0+IChpc09iamVjdCA9ICRo4oCNX2EpXV0sW1wiZ2V0VGFnXCIsIFskaOKAjV9hID0+IChnZXRUYWcgPSAkaOKAjV9hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRo4oCNX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaOKAjV9hKV1dLFtcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXNzYWJsZVN5bWJvbCA9ICRo4oCNX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaOKAjV9hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaOKAjV9hKV1dLFtcInBhc3NhYmxlU3ltYm9sRm9yTmFtZVwiLCBbJGjigI1fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtcbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMsXG5kZWZpbmVQcm9wZXJ0aWVzLFxuaXMsXG5lbnRyaWVzLFxuZnJvbUVudHJpZXMsXG5mcmVlemV9PVxuT2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgUUNMQVNTPSdAcWNsYXNzJzskaOKAjV9vbmNlLlFDTEFTUyhRQ0xBU1MpO1xuXG5cbi8qXG5cblxuICovXG5jb25zdCBoYXNRQ2xhc3M9KGVuY29kZWQpPT5oYXNPd25Qcm9wZXJ0eU9mKGVuY29kZWQsUUNMQVNTKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgcWNsYXNzTWF0Y2hlcz0oZW5jb2RlZCxxY2xhc3MpPT5cbmlzT2JqZWN0KGVuY29kZWQpJiZcbiFpc0FycmF5KGVuY29kZWQpJiZcbmhhc1FDbGFzcyhlbmNvZGVkKSYmXG5lbmNvZGVkW1FDTEFTU109PT1xY2xhc3M7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBkb250RW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhPShyZW0pPT5GYWlsIGByZW1vdGFibGUgdW5leHBlY3RlZDogJHtyZW19YDtcblxuY29uc3QgZG9udEVuY29kZVByb21pc2VUb0NhcERhdGE9KHByb20pPT5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7cHJvbX1gO1xuXG5jb25zdCBkb250RW5jb2RlRXJyb3JUb0NhcERhdGE9KGVycik9PkZhaWwgYGVycm9yIG9iamVjdCB1bmV4cGVjdGVkOiAke2Vycn1gO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbmNvZGVUb0NhcERhdGE9KGVuY29kZU9wdGlvbnM9e30pPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YT1kb250RW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhLFxuZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YT1kb250RW5jb2RlUHJvbWlzZVRvQ2FwRGF0YSxcbmVuY29kZUVycm9yVG9DYXBEYXRhPWRvbnRFbmNvZGVFcnJvclRvQ2FwRGF0YX09XG5lbmNvZGVPcHRpb25zO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZW5jb2RlVG9DYXBEYXRhUmVjdXI9KHBhc3NhYmxlKT0+e1xuLy9cbi8vXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocGFzc2FibGUpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ251bGwnOlxuY2FzZSdib29sZWFuJzpcbmNhc2Unc3RyaW5nJzp7XG4vL1xucmV0dXJuIHBhc3NhYmxlO1xuIH1cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm57W1FDTEFTU106J3VuZGVmaW5lZCd9O1xuIH1cbmNhc2UnbnVtYmVyJzp7XG4vL1xuaWYoTnVtYmVyLmlzTmFOKHBhc3NhYmxlKSl7XG5yZXR1cm57W1FDTEFTU106J05hTid9O1xuIH1lbHNlIGlmKHBhc3NhYmxlPT09SW5maW5pdHkpe1xucmV0dXJue1tRQ0xBU1NdOidJbmZpbml0eSd9O1xuIH1lbHNlIGlmKHBhc3NhYmxlPT09LUluZmluaXR5KXtcbnJldHVybntbUUNMQVNTXTonLUluZmluaXR5J307XG4gfVxuLy9cbnJldHVybiBpcyhwYXNzYWJsZSwtMCk/MDpwYXNzYWJsZTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xucmV0dXJue1xuW1FDTEFTU106J2JpZ2ludCcsXG5kaWdpdHM6U3RyaW5nKHBhc3NhYmxlKX07XG5cbiB9XG5jYXNlJ3N5bWJvbCc6e1xuYXNzZXJ0UGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xuY29uc3QgbmFtZT0vKiAgICAgICAgICAgICAgICAgKi9uYW1lRm9yUGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xucmV0dXJue1xuW1FDTEFTU106J3N5bWJvbCcsXG5uYW1lfTtcblxuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuaWYoaGFzT3duUHJvcGVydHlPZihwYXNzYWJsZSxRQ0xBU1MpKXtcbi8vXG5jb25zdHtbUUNMQVNTXTpxY2xhc3NWYWx1ZSwuLi5yZXN0fT1wYXNzYWJsZTtcbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9e1xuW1FDTEFTU106J2hpbGJlcnQnLFxub3JpZ2luYWw6ZW5jb2RlVG9DYXBEYXRhUmVjdXIocWNsYXNzVmFsdWUpfTtcblxuaWYob3duS2V5cyhyZXN0KS5sZW5ndGg+PTEpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmVzdWx0LnJlc3Q9ZW5jb2RlVG9DYXBEYXRhUmVjdXIoZnJlZXplKHJlc3QpKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IG5hbWVzPW93bktleXMocGFzc2FibGUpLnNvcnQoKTtcbnJldHVybiBmcm9tRW50cmllcyhcbm5hbWVzLm1hcCgobmFtZSk9PltuYW1lLGVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlW25hbWVdKV0pKTtcblxuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5yZXR1cm4gcGFzc2FibGUubWFwKGVuY29kZVRvQ2FwRGF0YVJlY3VyKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xucmV0dXJue1xuW1FDTEFTU106J3RhZ2dlZCcsXG50YWc6Z2V0VGFnKHBhc3NhYmxlKSxcbnBheWxvYWQ6ZW5jb2RlVG9DYXBEYXRhUmVjdXIocGFzc2FibGUucGF5bG9hZCl9O1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IGVuY29kZWQ9ZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhKFxucGFzc2FibGUsXG5lbmNvZGVUb0NhcERhdGFSZWN1cik7XG5cbmlmKHFjbGFzc01hdGNoZXMoZW5jb2RlZCwnc2xvdCcpKXtcbnJldHVybiBlbmNvZGVkO1xuIH1cbi8vXG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUmVtb3RhYmxlIGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggJHtxKFxuUUNMQVNTKVxuIH0gJHtxKCdzbG90Jyl9OiAke2VuY29kZWR9YDtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IGVuY29kZWQ9ZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YShwYXNzYWJsZSxlbmNvZGVUb0NhcERhdGFSZWN1cik7XG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ3Nsb3QnKSl7XG5yZXR1cm4gZW5jb2RlZDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUHJvbWlzZSBlbmNvZGluZyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoICR7cShcblFDTEFTUyxcbidzbG90JylcbiB9OiAke2VuY29kZWR9YDtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZUVycm9yVG9DYXBEYXRhKHBhc3NhYmxlLGVuY29kZVRvQ2FwRGF0YVJlY3VyKTtcbmlmKHFjbGFzc01hdGNoZXMoZW5jb2RlZCwnZXJyb3InKSl7XG5yZXR1cm4gZW5jb2RlZDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogRXJyb3IgZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCAke3EoXG5RQ0xBU1MsXG4nZXJyb3InKVxuIH06ICR7ZW5jb2RlZH1gO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGBpbnRlcm5hbDogVW5yZWNvZ25pemVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9O1xuY29uc3QgZW5jb2RlVG9DYXBEYXRhPShwYXNzYWJsZSk9PntcbmlmKGlzRXJyb3JMaWtlKHBhc3NhYmxlKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGhhcmRlbihlbmNvZGVFcnJvclRvQ2FwRGF0YShwYXNzYWJsZSxlbmNvZGVUb0NhcERhdGFSZWN1cikpO1xuIH1cbnJldHVybiBoYXJkZW4oZW5jb2RlVG9DYXBEYXRhUmVjdXIocGFzc2FibGUpKTtcbiB9O1xucmV0dXJuIGhhcmRlbihlbmNvZGVUb0NhcERhdGEpO1xuIH07JGjigI1fb25jZS5tYWtlRW5jb2RlVG9DYXBEYXRhKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuaGFyZGVuKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShzbG90RW5jb2RpbmcpPT5cbkZhaWwgYHJlbW90YWJsZSBvciBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7c2xvdEVuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0oZXJyb3JFbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlcnJvckVuY29kaW5nfWA7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZUZyb21DYXBEYXRhPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT1kb250RGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE9ZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhLFxuZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT1kb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YX09XG5kZWNvZGVPcHRpb25zO1xuXG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT09PWRlY29kZVByb21pc2VGcm9tQ2FwRGF0YXx8XG5GYWlsIGBBbiBpbXBsZW1lbnRhdGlvbiByZXN0cmljdGlvbiBmb3Igbm93OiBJZiBlaXRoZXIgZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEgb3IgZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhIGlzIHByb3ZpZGVkLCBib3RoIG11c3QgYmUgcHJvdmlkZWQgYW5kIHRoZXkgbXVzdCBiZSB0aGUgc2FtZTogJHtxKFxuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEpXG4gfSB2cyAke3EoZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhKX1gO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGVGcm9tQ2FwRGF0YT0oanNvbkVuY29kZWQpPT57XG5pZighaXNPYmplY3QoanNvbkVuY29kZWQpKXtcbi8vXG5yZXR1cm4ganNvbkVuY29kZWQ7XG4gfVxuaWYoaXNBcnJheShqc29uRW5jb2RlZCkpe1xucmV0dXJuIGpzb25FbmNvZGVkLm1hcCgoZW5jb2RlZFZhbCk9PmRlY29kZUZyb21DYXBEYXRhKGVuY29kZWRWYWwpKTtcbiB9ZWxzZSBpZihoYXNRQ2xhc3MoanNvbkVuY29kZWQpKXtcbmNvbnN0IHFjbGFzcz1qc29uRW5jb2RlZFtRQ0xBU1NdO1xudHlwZW9mIHFjbGFzcz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgJHtxKFFDTEFTUyl9IHR5cGVvZiAke3EodHlwZW9mIHFjbGFzcyl9YDtcbnN3aXRjaChxY2xhc3Mpe1xuLy9cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnTmFOJzp7XG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnSW5maW5pdHknOntcbnJldHVybiBJbmZpbml0eTtcbiB9XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PWpzb25FbmNvZGVkO1xudHlwZW9mIGRpZ2l0cz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZGlnaXRzIHR5cGVvZiAke3EodHlwZW9mIGRpZ2l0cyl9YDtcbnJldHVybiBCaWdJbnQoZGlnaXRzKTtcbiB9XG5jYXNlJ0BAYXN5bmNJdGVyYXRvcic6e1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvcjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09anNvbkVuY29kZWQ7XG5yZXR1cm4gcGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09anNvbkVuY29kZWQ7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcsZGVjb2RlRnJvbUNhcERhdGEocGF5bG9hZCkpO1xuIH1cbmNhc2Unc2xvdCc6e1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlZD1kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YShcbmpzb25FbmNvZGVkLFxuZGVjb2RlRnJvbUNhcERhdGEpO1xuXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGRlY29kZWQ7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZGVjb2RlZD1kZWNvZGVFcnJvckZyb21DYXBEYXRhKFxuanNvbkVuY29kZWQsXG5kZWNvZGVGcm9tQ2FwRGF0YSk7XG5cbmlmKHBhc3NTdHlsZU9mKGRlY29kZWQpPT09J2Vycm9yJyl7XG5yZXR1cm4gZGVjb2RlZDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YSBvcHRpb24gbXVzdCByZXR1cm4gYW4gZXJyb3I6ICR7ZGVjb2RlZH1gO1xuIH1cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09anNvbkVuY29kZWQ7XG5oYXNPd25Qcm9wZXJ0eU9mKGpzb25FbmNvZGVkLCdvcmlnaW5hbCcpfHxcbkZhaWwgYEludmFsaWQgSGlsYmVydCBIb3RlbCBlbmNvZGluZyAke2pzb25FbmNvZGVkfWA7XG4vL1xuY29uc3QgcmVzdWx0PXtbUUNMQVNTXTpkZWNvZGVGcm9tQ2FwRGF0YShvcmlnaW5hbCl9O1xuaWYoaGFzT3duUHJvcGVydHlPZihqc29uRW5jb2RlZCwncmVzdCcpKXtcbmNvbnN0IGlzTm9uRW1wdHlPYmplY3Q9XG50eXBlb2YgcmVzdD09PSdvYmplY3QnJiZcbnJlc3QhPT1udWxsJiZcbm93bktleXMocmVzdCkubGVuZ3RoPj0xO1xuaWYoIWlzTm9uRW1wdHlPYmplY3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyBtdXN0IGJlIGEgbm9uLWVtcHR5IG9iamVjdDogJHtyZXN0fWA7XG4gfVxuY29uc3QgcmVzdE9iaj1kZWNvZGVGcm9tQ2FwRGF0YShyZXN0KTtcbi8vXG4vL1xuLy9cbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RPYmosUUNMQVNTKXx8XG5GYWlsIGBSZXN0IG11c3Qgbm90IGNvbnRhaW4gaXRzIG93biBkZWZpbml0aW9uIG9mICR7cShRQ0xBU1MpfWA7XG5kZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHJlc3RPYmopKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG5jYXNlJ2liaWQnOntcbnRocm93IEZhaWwgYFRoZSBjYXBEYXRhIHByb3RvY29sIG5vIGxvbmdlciBzdXBwb3J0cyAke3EoUUNMQVNTKX0gJHtxKFxucWNsYXNzKVxuIH1gO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1lbHNle1xuYXNzZXJ0KHR5cGVvZiBqc29uRW5jb2RlZD09PSdvYmplY3QnJiZqc29uRW5jb2RlZCE9PW51bGwpO1xuY29uc3QgZGVjb2RlRW50cnk9KFtuYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSAke3EobmFtZSl9IG9mICR7anNvbkVuY29kZWR9IG11c3QgYmUgYSBzdHJpbmdgO1xucmV0dXJuW25hbWUsZGVjb2RlRnJvbUNhcERhdGEoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGpzb25FbmNvZGVkKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG4gfTtcbnJldHVybiBoYXJkZW4oZGVjb2RlRnJvbUNhcERhdGEpO1xuIH07JGjigI1fb25jZS5tYWtlRGVjb2RlRnJvbUNhcERhdGEobWFrZURlY29kZUZyb21DYXBEYXRhKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlFDTEFTUyI6WyJRQ0xBU1MiXSwibWFrZUVuY29kZVRvQ2FwRGF0YSI6WyJtYWtlRW5jb2RlVG9DYXBEYXRhIl0sIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSI6WyJtYWtlRGVjb2RlRnJvbUNhcERhdGEiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAB4SNSUsiAABLIgAALQAAAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsibWFrZURlY29kZUZyb21TbWFsbGNhcHMiLCJtYWtlRW5jb2RlVG9TbWFsbGNhcHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhc3NTdHlsZU9mLGlzRXJyb3JMaWtlLG1ha2VUYWdnZWQsZ2V0VGFnLGhhc093blByb3BlcnR5T2YsYXNzZXJ0UGFzc2FibGVTeW1ib2wsbmFtZUZvclBhc3NhYmxlU3ltYm9sLHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxYLEZhaWwscTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjigI1fYSA9PiAocGFzc1N0eWxlT2YgPSAkaOKAjV9hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaOKAjV9hID0+IChpc0Vycm9yTGlrZSA9ICRo4oCNX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjigI1fYSA9PiAobWFrZVRhZ2dlZCA9ICRo4oCNX2EpXV0sW1wiZ2V0VGFnXCIsIFskaOKAjV9hID0+IChnZXRUYWcgPSAkaOKAjV9hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRo4oCNX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaOKAjV9hKV1dLFtcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXNzYWJsZVN5bWJvbCA9ICRo4oCNX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaOKAjV9hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaOKAjV9hKV1dLFtcInBhc3NhYmxlU3ltYm9sRm9yTmFtZVwiLCBbJGjigI1fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7aXMsZW50cmllcyxmcm9tRW50cmllc309T2JqZWN0O1xuXG5jb25zdCBCQU5HPSchJy5jaGFyQ29kZUF0KDApO1xuY29uc3QgREFTSD0nLScuY2hhckNvZGVBdCgwKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc3RhcnRzU3BlY2lhbD0oZW5jb2RlZFN0cik9PntcbmlmKGVuY29kZWRTdHI9PT0nJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuLy9cbmNvbnN0IGNvZGU9ZW5jb2RlZFN0ci5jaGFyQ29kZUF0KDApO1xuLy9cbnJldHVybiBCQU5HPD1jb2RlJiZjb2RlPD1EQVNIO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBkb250RW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHM9KHJlbSk9PlxuRmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cmVtfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVQcm9taXNlVG9TbWFsbGNhcHM9KHByb20pPT5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7cHJvbX1gO1xuXG5jb25zdCBkb250RW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz0oZXJyKT0+XG5GYWlsIGBlcnJvciBvYmplY3QgdW5leHBlY3RlZDogJHtxKGVycil9YDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW5jb2RlVG9TbWFsbGNhcHM9KGVuY29kZU9wdGlvbnM9e30pPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPWRvbnRFbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyxcbmVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz1kb250RW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzLFxuZW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz1kb250RW5jb2RlRXJyb3JUb1NtYWxsY2Fwc309XG5lbmNvZGVPcHRpb25zO1xuXG5jb25zdCBhc3NlcnRFbmNvZGVkRXJyb3I9KGVuY29kaW5nKT0+e1xudHlwZW9mIGVuY29kaW5nPT09J29iamVjdCcmJmhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyNlcnJvcicpfHxcbkZhaWwgYGludGVybmFsOiBFcnJvciBlbmNvZGluZyBtdXN0IGhhdmUgXCIjZXJyb3JcIiBwcm9wZXJ0eTogJHtxKFxuZW5jb2RpbmcpXG4gfWA7XG4vL1xuY29uc3QgbWVzc2FnZT1lbmNvZGluZ1snI2Vycm9yJ107XG50eXBlb2YgbWVzc2FnZT09PSdzdHJpbmcnJiYoXG4hc3RhcnRzU3BlY2lhbChtZXNzYWdlKXx8bWVzc2FnZS5jaGFyQXQoMCk9PT0nIScpfHxcbkZhaWwgYGludGVybmFsOiBFcnJvciBlbmNvZGluZyBtdXN0IGhhdmUgc3RyaW5nIG1lc3NhZ2U6ICR7cShtZXNzYWdlKX1gO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6e1xuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3N0cmluZyc6e1xuaWYoc3RhcnRzU3BlY2lhbChwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gYCEke3Bhc3NhYmxlfWA7XG4gfVxuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJuJyN1bmRlZmluZWQnO1xuIH1cbmNhc2UnbnVtYmVyJzp7XG4vL1xuaWYoTnVtYmVyLmlzTmFOKHBhc3NhYmxlKSl7XG5yZXR1cm4nI05hTic7XG4gfWVsc2UgaWYocGFzc2FibGU9PT1JbmZpbml0eSl7XG5yZXR1cm4nI0luZmluaXR5JztcbiB9ZWxzZSBpZihwYXNzYWJsZT09PS1JbmZpbml0eSl7XG5yZXR1cm4nIy1JbmZpbml0eSc7XG4gfVxuLy9cbnJldHVybiBpcyhwYXNzYWJsZSwtMCk/MDpwYXNzYWJsZTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3Qgc3RyPVN0cmluZyhwYXNzYWJsZSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAqL3Bhc3NhYmxlPDBuP3N0cjpgKyR7c3RyfWApO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5jb25zdCBuYW1lPS8qICAgICAgICAgICAgICAgICAqL25hbWVGb3JQYXNzYWJsZVN5bWJvbChwYXNzYWJsZSk7XG5yZXR1cm4gYCUke25hbWV9YDtcbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbmNvbnN0IG5hbWVzPW93bktleXMocGFzc2FibGUpLnNvcnQoKTtcbnJldHVybiBmcm9tRW50cmllcyhcbm5hbWVzLm1hcCgobmFtZSk9PltcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIobmFtZSksXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKHBhc3NhYmxlW25hbWVdKV0pKTtcblxuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbnJldHVybiBwYXNzYWJsZS5tYXAoZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybntcbicjdGFnJzplbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKGdldFRhZyhwYXNzYWJsZSkpLFxucGF5bG9hZDplbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKHBhc3NhYmxlLnBheWxvYWQpfTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCByZXN1bHQ9ZW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHMoXG5wYXNzYWJsZSxcbmVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuXG5pZih0eXBlb2YgcmVzdWx0PT09J3N0cmluZycmJnJlc3VsdC5jaGFyQXQoMCk9PT0nJCcpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFJlbW90YWJsZSBlbmNvZGluZyBtdXN0IHN0YXJ0IHdpdGggXCIkXCI6ICR7cmVzdWx0fWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCByZXN1bHQ9ZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzKFxucGFzc2FibGUsXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcblxuaWYodHlwZW9mIHJlc3VsdD09PSdzdHJpbmcnJiZyZXN1bHQuY2hhckF0KDApPT09JyYnKXtcbnJldHVybiByZXN1bHQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFByb21pc2UgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiJlwiOiAke3Jlc3VsdH1gO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IHJlc3VsdD1lbmNvZGVFcnJvclRvU21hbGxjYXBzKHBhc3NhYmxlLGVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuYXNzZXJ0RW5jb2RlZEVycm9yKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGBpbnRlcm5hbDogVW5yZWNvZ25pemVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9O1xuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHM9KHBhc3NhYmxlKT0+e1xuaWYoaXNFcnJvckxpa2UocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCByZXN1bHQ9aGFyZGVuKFxuZW5jb2RlRXJyb3JUb1NtYWxsY2FwcyhwYXNzYWJsZSxlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKSk7XG5cbmFzc2VydEVuY29kZWRFcnJvcihyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvU21hbGxjYXBzUmVjdXIocGFzc2FibGUpKTtcbiB9O1xucmV0dXJuIGhhcmRlbihlbmNvZGVUb1NtYWxsY2Fwcyk7XG4gfTskaOKAjV9vbmNlLm1ha2VFbmNvZGVUb1NtYWxsY2FwcyhtYWtlRW5jb2RlVG9TbWFsbGNhcHMpO1xuaGFyZGVuKG1ha2VFbmNvZGVUb1NtYWxsY2Fwcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBkb250RGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT5cbkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+XG5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IGRvbnREZWNvZGVFcnJvckZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+XG5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke3EoZW5jb2RpbmcpfWA7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZUZyb21TbWFsbGNhcHM9KGRlY29kZU9wdGlvbnM9e30pPT57XG5jb25zdHtcbmRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9ZG9udERlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVQcm9taXNlRnJvbVNtYWxsY2Fwcz1kb250RGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVFcnJvckZyb21TbWFsbGNhcHM9ZG9udERlY29kZUVycm9yRnJvbVNtYWxsY2Fwc309XG5kZWNvZGVPcHRpb25zO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGVGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PntcbnN3aXRjaCh0eXBlb2YgZW5jb2Rpbmcpe1xuY2FzZSdib29sZWFuJzpcbmNhc2UnbnVtYmVyJzp7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmlmKCFzdGFydHNTcGVjaWFsKGVuY29kaW5nKSl7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfVxuY29uc3QgYz1lbmNvZGluZy5jaGFyQXQoMCk7XG5zd2l0Y2goYyl7XG5jYXNlJyEnOntcbi8vXG5yZXR1cm4gZW5jb2Rpbmcuc2xpY2UoMSk7XG4gfVxuY2FzZSclJzp7XG5yZXR1cm4gcGFzc2FibGVTeW1ib2xGb3JOYW1lKGVuY29kaW5nLnNsaWNlKDEpKTtcbiB9XG5jYXNlJyMnOntcbnN3aXRjaChlbmNvZGluZyl7XG5jYXNlJyN1bmRlZmluZWQnOntcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuY2FzZScjTmFOJzp7XG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnI0luZmluaXR5Jzp7XG5yZXR1cm4gSW5maW5pdHk7XG4gfVxuY2FzZScjLUluZmluaXR5Jzp7XG5yZXR1cm4tSW5maW5pdHk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYHVua25vd24gY29uc3RhbnQgXCIke3EoZW5jb2RpbmcpfVwiYCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfVxuY2FzZScrJzpcbmNhc2UnLSc6e1xucmV0dXJuIEJpZ0ludChlbmNvZGluZyk7XG4gfVxuY2FzZSckJzp7XG5jb25zdCByZXN1bHQ9ZGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2FwcyhcbmVuY29kaW5nLFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG5cbi8vXG5pZihwYXNzU3R5bGVPZihyZXN1bHQpIT09J3JlbW90YWJsZScpe1xuRmFpbCBgaW50ZXJuYWw6IGRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMgb3B0aW9uIG11c3QgcmV0dXJuIGEgcmVtb3RhYmxlOiAke3Jlc3VsdH1gO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfVxuY2FzZScmJzp7XG5jb25zdCByZXN1bHQ9ZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG5pZihwYXNzU3R5bGVPZihyZXN1bHQpIT09J3Byb21pc2UnKXtcbkZhaWwgYGludGVybmFsOiBkZWNvZGVQcm9taXNlRnJvbVNtYWxsY2FwcyBvcHRpb24gbXVzdCByZXR1cm4gYSBwcm9taXNlOiAke3Jlc3VsdH1gO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBTcGVjaWFsIGNoYXIgJHtxKFxuYylcbiB9IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlOiAke2VuY29kaW5nfWA7XG4gfX1cblxuIH1cbmNhc2Unb2JqZWN0Jzp7XG5pZihlbmNvZGluZz09PW51bGwpe1xucmV0dXJuIGVuY29kaW5nO1xuIH1cblxuaWYoaXNBcnJheShlbmNvZGluZykpe1xucmV0dXJuIGVuY29kaW5nLm1hcCgodmFsKT0+ZGVjb2RlRnJvbVNtYWxsY2Fwcyh2YWwpKTtcbiB9XG5cbmlmKGhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyN0YWcnKSl7XG5jb25zdHsnI3RhZyc6dGFnLHBheWxvYWQsLi4ucmVzdH09ZW5jb2Rpbmc7XG50eXBlb2YgdGFnPT09J3N0cmluZyd8fFxuRmFpbCBgVmFsdWUgb2YgXCIjdGFnXCIsIHRoZSB0YWcsIG11c3QgYmUgYSBzdHJpbmc6ICR7ZW5jb2Rpbmd9YDtcbm93bktleXMocmVzdCkubGVuZ3RoPT09MHx8XG5GYWlsIGAjdGFnIHJlY29yZCB1bmV4cGVjdGVkIHByb3BlcnRpZXM6ICR7cShvd25LZXlzKHJlc3QpKX1gO1xucmV0dXJuIG1ha2VUYWdnZWQoXG5kZWNvZGVGcm9tU21hbGxjYXBzKHRhZyksXG5kZWNvZGVGcm9tU21hbGxjYXBzKHBheWxvYWQpKTtcblxuIH1cblxuaWYoaGFzT3duUHJvcGVydHlPZihlbmNvZGluZywnI2Vycm9yJykpe1xuY29uc3QgcmVzdWx0PWRlY29kZUVycm9yRnJvbVNtYWxsY2FwcyhcbmVuY29kaW5nLFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG5cbnBhc3NTdHlsZU9mKHJlc3VsdCk9PT0nZXJyb3InfHxcbkZhaWwgYGludGVybmFsOiBkZWNvZGVFcnJvckZyb21TbWFsbGNhcHMgb3B0aW9uIG11c3QgcmV0dXJuIGFuIGVycm9yOiAke3Jlc3VsdH1gO1xucmV0dXJuIHJlc3VsdDtcbiB9XG5cbmNvbnN0IGRlY29kZUVudHJ5PShbZW5jb2RlZE5hbWUsZW5jb2RlZFZhbF0pPT57XG50eXBlb2YgZW5jb2RlZE5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSBuYW1lICR7cShcbmVuY29kZWROYW1lKVxuIH0gb2YgJHtlbmNvZGluZ30gbXVzdCBiZSBhIHN0cmluZ2A7XG5lbmNvZGVkTmFtZS5jaGFyQXQoMCkhPT0nIyd8fFxuRmFpbCBgVW5yZWNvZ25pemVkIHJlY29yZCB0eXBlICR7cShlbmNvZGVkTmFtZSl9OiAke2VuY29kaW5nfWA7XG5jb25zdCBuYW1lPWRlY29kZUZyb21TbWFsbGNhcHMoZW5jb2RlZE5hbWUpO1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBEZWNvZGVkIHByb3BlcnR5IG5hbWUgJHtuYW1lfSBmcm9tICR7ZW5jb2Rpbmd9IG11c3QgYmUgYSBzdHJpbmdgO1xucmV0dXJuW25hbWUsZGVjb2RlRnJvbVNtYWxsY2FwcyhlbmNvZGVkVmFsKV07XG4gfTtcbmNvbnN0IGRlY29kZWRFbnRyaWVzPWVudHJpZXMoZW5jb2RpbmcpLm1hcChkZWNvZGVFbnRyeSk7XG5yZXR1cm4gZnJvbUVudHJpZXMoZGVjb2RlZEVudHJpZXMpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGBpbnRlcm5hbDogdW5yZWNvZ25pemVkIEpTT04gdHlwZW9mICR7cShcbnR5cGVvZiBlbmNvZGluZylcbiB9OiAke2VuY29kaW5nfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH07XG5yZXR1cm4gaGFyZGVuKGRlY29kZUZyb21TbWFsbGNhcHMpO1xuIH07JGjigI1fb25jZS5tYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyhtYWtlRGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRW5jb2RlVG9TbWFsbGNhcHMiOlsibWFrZUVuY29kZVRvU21hbGxjYXBzIl0sIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIjpbIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANwcugAmIwAAJiMAACoAAABAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvbWFyc2hhbC1qdXN0aW4uanN7ImltcG9ydHMiOlsiQGVuZG8vbmF0IiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIi4vZW5jb2RlVG9DYXBEYXRhLmpzIl0sImV4cG9ydHMiOlsiZGVjb2RlVG9KdXN0aW4iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE5hdCxnZXRFcnJvckNvbnN0cnVjdG9yLGlzT2JqZWN0LHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxxLFgsRmFpbCxRQ0xBU1M7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRo4oCNX2EgPT4gKE5hdCA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRFcnJvckNvbnN0cnVjdG9yXCIsIFskaOKAjV9hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjigI1fYSldXSxbXCJpc09iamVjdFwiLCBbJGjigI1fYSA9PiAoaXNPYmplY3QgPSAkaOKAjV9hKV1dLFtcInBhc3NhYmxlU3ltYm9sRm9yTmFtZVwiLCBbJGjigI1fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCIuL2VuY29kZVRvQ2FwRGF0YS5qc1wiLCBbW1wiUUNMQVNTXCIsIFskaOKAjV9hID0+IChRQ0xBU1MgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtzdHJpbmdpZnk6cXVvdGV9PUpTT047XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZVllc0luZGVudGVyPSgpPT57XG5jb25zdCBzdHJpbmdzPVtdO1xubGV0IGxldmVsPTA7XG5sZXQgbmVlZFNwYWNlPWZhbHNlO1xuY29uc3QgbGluZT0oKT0+e1xubmVlZFNwYWNlPWZhbHNlO1xucmV0dXJuIHN0cmluZ3MucHVzaCgnXFxuJywnICAnLnJlcGVhdChsZXZlbCkpO1xuIH07XG5yZXR1cm4gaGFyZGVuKHtcbm9wZW46KG9wZW5CcmFja2V0KT0+e1xubGV2ZWwrPTE7XG5pZihuZWVkU3BhY2Upe1xuc3RyaW5ncy5wdXNoKCcgJyk7XG4gfVxubmVlZFNwYWNlPWZhbHNlO1xucmV0dXJuIHN0cmluZ3MucHVzaChvcGVuQnJhY2tldCk7XG4gfSxcbmxpbmUsXG5uZXh0Oih0b2tlbik9PntcbmlmKG5lZWRTcGFjZSYmdG9rZW4hPT0nLCcpe1xuc3RyaW5ncy5wdXNoKCcgJyk7XG4gfVxubmVlZFNwYWNlPXRydWU7XG5yZXR1cm4gc3RyaW5ncy5wdXNoKHRva2VuKTtcbiB9LFxuY2xvc2U6KGNsb3NlQnJhY2tldCk9PntcbmFzc2VydChsZXZlbD49MSk7XG5sZXZlbC09MTtcbmxpbmUoKTtcbnJldHVybiBzdHJpbmdzLnB1c2goY2xvc2VCcmFja2V0KTtcbiB9LFxuZG9uZTooKT0+e1xuYXNzZXJ0LmVxdWFsKGxldmVsLDApO1xucmV0dXJuIHN0cmluZ3Muam9pbignJyk7XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGJhZFBhaXJQYXR0ZXJuPS9eKD86XFx3XFx3fDw8fD4+fFxcK1xcK3wtLXw8IXwtPikkLztcblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZU5vSW5kZW50ZXI9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdzPVtdO1xucmV0dXJuIGhhcmRlbih7XG5vcGVuOihvcGVuQnJhY2tldCk9PnN0cmluZ3MucHVzaChvcGVuQnJhY2tldCksXG5saW5lOigpPT5zdHJpbmdzLmxlbmd0aCxcbm5leHQ6KHRva2VuKT0+e1xuaWYoc3RyaW5ncy5sZW5ndGg+PTEpe1xuY29uc3QgbGFzdD1zdHJpbmdzW3N0cmluZ3MubGVuZ3RoLTFdO1xuLy9cbmlmKGxhc3QubGVuZ3RoPj0xJiZ0b2tlbi5sZW5ndGg+PTEpe1xuY29uc3QgcGFpcj0gYCR7bGFzdFtsYXN0Lmxlbmd0aC0xXX0ke3Rva2VuWzBdfWA7XG5pZihiYWRQYWlyUGF0dGVybi50ZXN0KHBhaXIpKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbiB9XG4gfVxucmV0dXJuIHN0cmluZ3MucHVzaCh0b2tlbik7XG4gfSxcbmNsb3NlOihjbG9zZUJyYWNrZXQpPT57XG5pZihzdHJpbmdzLmxlbmd0aD49MSYmc3RyaW5nc1tzdHJpbmdzLmxlbmd0aC0xXT09PScsJyl7XG5zdHJpbmdzLnBvcCgpO1xuIH1cbnJldHVybiBzdHJpbmdzLnB1c2goY2xvc2VCcmFja2V0KTtcbiB9LFxuZG9uZTooKT0+c3RyaW5ncy5qb2luKCcnKX0pO1xuXG4gfTtcblxuY29uc3QgaWRlbnRQYXR0ZXJuPS9eW2EtekEtWl1cXHcqJC87XG5oYXJkZW4oaWRlbnRQYXR0ZXJuKTtcbmNvbnN0IEF0QXRQcmVmaXhQYXR0ZXJuPS9eQEAoLiopJC87XG5oYXJkZW4oQXRBdFByZWZpeFBhdHRlcm4pO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZVRvSnVzdGluPShlbmNvZGluZyxzaG91bGRJbmRlbnQ9ZmFsc2Usc2xvdHM9W10pPT57XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZT0ocmF3VHJlZSk9PntcbmlmKCFpc09iamVjdChyYXdUcmVlKSl7XG5yZXR1cm47XG4gfVxuLy9cbmFzc2VydC50eXBlb2YocmF3VHJlZSwnb2JqZWN0Jyk7XG5hc3NlcnQocmF3VHJlZSE9PW51bGwpO1xuaWYoUUNMQVNTIGluIHJhd1RyZWUpe1xuY29uc3QgcWNsYXNzPXJhd1RyZWVbUUNMQVNTXTtcbnR5cGVvZiBxY2xhc3M9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIHFjbGFzcyB0eXBlb2YgJHtxKHR5cGVvZiBxY2xhc3MpfWA7XG5hc3NlcnQoIWlzQXJyYXkocmF3VHJlZSkpO1xuc3dpdGNoKHJhd1RyZWVbJ0BxY2xhc3MnXSl7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ05hTic6XG5jYXNlJ0luZmluaXR5JzpcbmNhc2UnLUluZmluaXR5Jzp7XG5yZXR1cm47XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0e2RpZ2l0c309cmF3VHJlZTtcbnR5cGVvZiBkaWdpdHM9PT0nc3RyaW5nJ3x8XG5GYWlsIGBpbnZhbGlkIGRpZ2l0cyB0eXBlb2YgJHtxKHR5cGVvZiBkaWdpdHMpfWA7XG5yZXR1cm47XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbnJldHVybjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5jb25zdCBzeW09cGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuYXNzZXJ0LnR5cGVvZihzeW0sJ3N5bWJvbCcpO1xucmV0dXJuO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YodGFnLCdzdHJpbmcnKTtcbnByZXBhcmUocGF5bG9hZCk7XG5yZXR1cm47XG4gfVxuY2FzZSdzbG90Jzp7XG5jb25zdHtpbmRleCxpZmFjZX09cmF3VHJlZTtcbmFzc2VydC50eXBlb2YoaW5kZXgsJ251bWJlcicpO1xuTmF0KGluZGV4KTtcbmlmKGlmYWNlIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YoaWZhY2UsJ3N0cmluZycpO1xuIH1cbnJldHVybjtcbiB9XG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PXJhd1RyZWU7XG4nb3JpZ2luYWwnaW4gcmF3VHJlZXx8XG5GYWlsIGBJbnZhbGlkIEhpbGJlcnQgSG90ZWwgZW5jb2RpbmcgJHtyYXdUcmVlfWA7XG5wcmVwYXJlKG9yaWdpbmFsKTtcbmlmKCdyZXN0J2luIHJhd1RyZWUpe1xuaWYodHlwZW9mIHJlc3QhPT0nb2JqZWN0Jyl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3RgO1xuIH1cbmlmKHJlc3Q9PT1udWxsKXtcbnRocm93IEZhaWwgYFJlc3QgJHtyZXN0fSBlbmNvZGluZyBtdXN0IG5vdCBiZSBudWxsYDtcbiB9XG5pZihpc0FycmF5KHJlc3QpKXtcbnRocm93IEZhaWwgYFJlc3QgJHtyZXN0fSBlbmNvZGluZyBtdXN0IG5vdCBiZSBhbiBhcnJheWA7XG4gfVxuaWYoUUNMQVNTIGluIHJlc3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyAke3Jlc3R9IG11c3Qgbm90IGNvbnRhaW4gJHtxKFFDTEFTUyl9YDtcbiB9XG5jb25zdCBuYW1lcz1vd25LZXlzKHJlc3QpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSBuYW1lICR7bmFtZX0gb2YgJHtyYXdUcmVlfSBtdXN0IGJlIGEgc3RyaW5nYDtcbnByZXBhcmUocmVzdFtuYW1lXSk7XG4gfVxuIH1cbnJldHVybjtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdHtuYW1lLG1lc3NhZ2V9PXJhd1RyZWU7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbmFtZSB0eXBlb2YgJHtxKHR5cGVvZiBuYW1lKX1gO1xuIH1cbmdldEVycm9yQ29uc3RydWN0b3IobmFtZSkhPT11bmRlZmluZWR8fFxuRmFpbCBgTXVzdCBiZSB0aGUgbmFtZSBvZiBhbiBFcnJvciBjb25zdHJ1Y3RvciAke25hbWV9YDtcbnR5cGVvZiBtZXNzYWdlPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBlcnJvciBtZXNzYWdlIHR5cGVvZiAke3EodHlwZW9mIG1lc3NhZ2UpfWA7XG5yZXR1cm47XG4gfVxuXG5kZWZhdWx0OntcbmFzc2VydC5mYWlsKFggYHVucmVjb2duaXplZCAke3EoUUNMQVNTKX0gJHtxKHFjbGFzcyl9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9ZWxzZSBpZihpc0FycmF5KHJhd1RyZWUpKXtcbmNvbnN0e2xlbmd0aH09cmF3VHJlZTtcbmZvcihsZXQgaT0wO2k8bGVuZ3RoO2krPTEpe1xucHJlcGFyZShyYXdUcmVlW2ldKTtcbiB9XG4gfWVsc2V7XG5jb25zdCBuYW1lcz1vd25LZXlzKHJhd1RyZWUpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBQcm9wZXJ0eSBuYW1lICR7bmFtZX0gb2YgJHtyYXdUcmVlfSBtdXN0IGJlIGEgc3RyaW5nYDtcbiB9XG5wcmVwYXJlKHJhd1RyZWVbbmFtZV0pO1xuIH1cbiB9XG4gfTtcblxuY29uc3QgbWFrZUluZGVudGVyPXNob3VsZEluZGVudD9tYWtlWWVzSW5kZW50ZXI6bWFrZU5vSW5kZW50ZXI7XG5sZXQgb3V0PW1ha2VJbmRlbnRlcigpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlY29kZT0ocmF3VHJlZSk9Pntcbi8vXG5yZXR1cm4gcmVjdXIocmF3VHJlZSk7XG4gfTtcblxuY29uc3QgZGVjb2RlUHJvcGVydHk9KG5hbWUsdmFsdWUpPT57XG5vdXQubGluZSgpO1xuaWYobmFtZT09PSdfX3Byb3RvX18nKXtcbi8vXG4vL1xuLy9cbi8vXG5vdXQubmV4dCggYFtcIl9fcHJvdG9fX1wiXTpgKTtcbiB9ZWxzZSBpZihpZGVudFBhdHRlcm4udGVzdChuYW1lKSl7XG5vdXQubmV4dCggYCR7bmFtZX06YCk7XG4gfWVsc2V7XG5vdXQubmV4dCggYCR7cXVvdGUobmFtZSl9OmApO1xuIH1cbmRlY29kZSh2YWx1ZSk7XG5vdXQubmV4dCgnLCcpO1xuIH07XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCByZWN1cj0ocmF3VHJlZSk9PntcbmlmKCFpc09iamVjdChyYXdUcmVlKSl7XG4vL1xucmV0dXJuIG91dC5uZXh0KHF1b3RlKHJhd1RyZWUpKTtcbiB9XG4vL1xuYXNzZXJ0LnR5cGVvZihyYXdUcmVlLCdvYmplY3QnKTtcbmFzc2VydChyYXdUcmVlIT09bnVsbCk7XG5pZihRQ0xBU1MgaW4gcmF3VHJlZSl7XG5jb25zdCBxY2xhc3M9cmF3VHJlZVtRQ0xBU1NdO1xuYXNzZXJ0LnR5cGVvZihxY2xhc3MsJ3N0cmluZycpO1xuYXNzZXJ0KCFpc0FycmF5KHJhd1RyZWUpKTtcbi8vXG4vL1xuLy9cbnN3aXRjaChyYXdUcmVlWydAcWNsYXNzJ10pe1xuLy9cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnTmFOJzpcbmNhc2UnSW5maW5pdHknOlxuY2FzZSctSW5maW5pdHknOntcbi8vXG5yZXR1cm4gb3V0Lm5leHQocWNsYXNzKTtcbiB9XG5jYXNlJ2JpZ2ludCc6e1xuY29uc3R7ZGlnaXRzfT1yYXdUcmVlO1xuYXNzZXJ0LnR5cGVvZihkaWdpdHMsJ3N0cmluZycpO1xucmV0dXJuIG91dC5uZXh0KCBgJHtCaWdJbnQoZGlnaXRzKX1uYCk7XG4gfVxuY2FzZSdAQGFzeW5jSXRlcmF0b3InOntcbi8vXG5yZXR1cm4gb3V0Lm5leHQoJ1N5bWJvbC5hc3luY0l0ZXJhdG9yJyk7XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuY29uc3Qgc3ltPXBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbmFzc2VydC50eXBlb2Yoc3ltLCdzeW1ib2wnKTtcbmNvbnN0IHJlZ2lzdGVyZWROYW1lPVN5bWJvbC5rZXlGb3Ioc3ltKTtcbmlmKHJlZ2lzdGVyZWROYW1lPT09dW5kZWZpbmVkKXtcbmNvbnN0IG1hdGNoPUF0QXRQcmVmaXhQYXR0ZXJuLmV4ZWMobmFtZSk7XG5hc3NlcnQobWF0Y2ghPT1udWxsKTtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmFzc2VydChTeW1ib2xbc3VmZml4XT09PXN5bSk7XG5hc3NlcnQoaWRlbnRQYXR0ZXJuLnRlc3Qoc3VmZml4KSk7XG5yZXR1cm4gb3V0Lm5leHQoIGBTeW1ib2wuJHtzdWZmaXh9YCk7XG4gfVxucmV0dXJuIG91dC5uZXh0KCBgU3ltYm9sLmZvcigke3F1b3RlKHJlZ2lzdGVyZWROYW1lKX0pYCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0e3RhZyxwYXlsb2FkfT1yYXdUcmVlO1xub3V0Lm5leHQoIGBtYWtlVGFnZ2VkKCR7cXVvdGUodGFnKX0sYCk7XG5kZWNvZGUocGF5bG9hZCk7XG5yZXR1cm4gb3V0Lm5leHQoJyknKTtcbiB9XG5cbmNhc2Unc2xvdCc6e1xubGV0e2lmYWNlfT1yYXdUcmVlO1xuY29uc3QgaW5kZXg9TnVtYmVyKE5hdChyYXdUcmVlLmluZGV4KSk7XG5jb25zdCBuZXN0ZWRSZW5kZXI9KGFyZyk9PntcbmNvbnN0IG9sZE91dD1vdXQ7XG50cnl7XG5vdXQ9bWFrZU5vSW5kZW50ZXIoKTtcbmRlY29kZShhcmcpO1xucmV0dXJuIG91dC5kb25lKCk7XG4gfWZpbmFsbHl7XG5vdXQ9b2xkT3V0O1xuIH1cbiB9O1xuaWYoaW5kZXg8c2xvdHMubGVuZ3RoKXtcbmNvbnN0IHNsb3Q9bmVzdGVkUmVuZGVyKHNsb3RzW2luZGV4XSk7XG5pZihpZmFjZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gb3V0Lm5leHQoIGBzbG90VG9WYWwoJHtzbG90fSlgKTtcbiB9XG5pZmFjZT1uZXN0ZWRSZW5kZXIoaWZhY2UpO1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdFRvVmFsKCR7c2xvdH0sJHtpZmFjZX0pYCk7XG4gfWVsc2UgaWYoaWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdCgke2luZGV4fSlgKTtcbiB9XG5pZmFjZT1uZXN0ZWRSZW5kZXIoaWZhY2UpO1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdCgke2luZGV4fSwke2lmYWNlfSlgKTtcbiB9XG5cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09cmF3VHJlZTtcbm91dC5vcGVuKCd7Jyk7XG5kZWNvZGVQcm9wZXJ0eShRQ0xBU1Msb3JpZ2luYWwpO1xuaWYoJ3Jlc3QnaW4gcmF3VHJlZSl7XG5hc3NlcnQudHlwZW9mKHJlc3QsJ29iamVjdCcpO1xuYXNzZXJ0KHJlc3QhPT1udWxsKTtcbmNvbnN0IG5hbWVzPW93bktleXMocmVzdCk7XG5mb3IoY29uc3QgbmFtZSBvZiBuYW1lcyl7XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYFByb3BlcnR5IG5hbWUgJHtxKFxubmFtZSlcbiB9IG9mICR7cmVzdH0gbXVzdCBiZSBhIHN0cmluZ2A7XG4gfVxuZGVjb2RlUHJvcGVydHkobmFtZSxyZXN0W25hbWVdKTtcbiB9XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnfScpO1xuIH1cblxuY2FzZSdlcnJvcic6e1xuY29uc3R7XG5uYW1lLFxubWVzc2FnZSxcbmNhdXNlPXVuZGVmaW5lZCxcbmVycm9ycz11bmRlZmluZWR9PVxucmF3VHJlZTtcbmNhdXNlPT09dW5kZWZpbmVkfHxcbkZhaWwgYGVycm9yIGNhdXNlIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWFyc2hhbC1qdXN0aW5gO1xubmFtZSE9PSBgQWdncmVnYXRlRXJyb3JgfHxcbkZhaWwgYEFnZ3JlZ2F0ZUVycm9yIG5vdCB5ZXQgaW1wbGVtZW50ZWQgaW4gbWFyc2hhbC1qdXN0aW5gO1xuZXJyb3JzPT09dW5kZWZpbmVkfHxcbkZhaWwgYGVycm9yIGVycm9ycyBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbnJldHVybiBvdXQubmV4dCggYCR7bmFtZX0oJHtxdW90ZShtZXNzYWdlKX0pYCk7XG4gfVxuXG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgdW5yZWNvZ25pemVkICR7cShRQ0xBU1MpfSAke3EocWNsYXNzKX1gLFxuVHlwZUVycm9yKTtcblxuIH19XG5cbiB9ZWxzZSBpZihpc0FycmF5KHJhd1RyZWUpKXtcbmNvbnN0e2xlbmd0aH09cmF3VHJlZTtcbmlmKGxlbmd0aD09PTApe1xucmV0dXJuIG91dC5uZXh0KCdbXScpO1xuIH1lbHNle1xub3V0Lm9wZW4oJ1snKTtcbmZvcihsZXQgaT0wO2k8bGVuZ3RoO2krPTEpe1xub3V0LmxpbmUoKTtcbmRlY29kZShyYXdUcmVlW2ldKTtcbm91dC5uZXh0KCcsJyk7XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnXScpO1xuIH1cbiB9ZWxzZXtcbi8vXG4vL1xuY29uc3QgbmFtZXM9LyogICAgICAgICAgICAgICAgICAgKi9vd25LZXlzKHJhd1RyZWUpO1xuaWYobmFtZXMubGVuZ3RoPT09MCl7XG5yZXR1cm4gb3V0Lm5leHQoJ3t9Jyk7XG4gfWVsc2V7XG5vdXQub3BlbigneycpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuZGVjb2RlUHJvcGVydHkobmFtZSxyYXdUcmVlW25hbWVdKTtcbiB9XG5yZXR1cm4gb3V0LmNsb3NlKCd9Jyk7XG4gfVxuIH1cbiB9O1xucHJlcGFyZShlbmNvZGluZyk7XG5kZWNvZGUoZW5jb2RpbmcpO1xucmV0dXJuIG91dC5kb25lKCk7XG4gfTskaOKAjV9vbmNlLmRlY29kZVRvSnVzdGluKGRlY29kZVRvSnVzdGluKTtcbmhhcmRlbihkZWNvZGVUb0p1c3Rpbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWNvZGVUb0p1c3RpbiI6WyJkZWNvZGVUb0p1c3RpbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABtyhljZwYAAGcGAAAtAAAAQGVuZG8vbWFyc2hhbC12MS41LjMvc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vbWFyc2hhbC5qcyJdLCJleHBvcnRzIjpbInBhcnNlIiwic3RyaW5naWZ5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLG1ha2VNYXJzaGFsOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCIuL21hcnNoYWwuanNcIiwgW1tcIm1ha2VNYXJzaGFsXCIsIFskaOKAjV9hID0+IChtYWtlTWFyc2hhbCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZG9Ob3RDb252ZXJ0VmFsVG9TbG90PSh2YWwpPT5cbkZhaWwgYE1hcnNoYWwncyBzdHJpbmdpZnkgcmVqZWN0cyBwcmVzZW5jZXMgYW5kIHByb21pc2VzICR7dmFsfWA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZG9Ob3RDb252ZXJ0U2xvdFRvVmFsPShzbG90LF9pZmFjZSk9PlxuRmFpbCBgTWFyc2hhbCdzIHBhcnNlIG11c3Qgbm90IGVuY29kZSBhbnkgc2xvdHMgJHtzbG90fWA7XG5cbmNvbnN0IGJhZEFycmF5SGFuZGxlcj1oYXJkZW4oe1xuZ2V0OihfdGFyZ2V0LG5hbWUsX3JlY2VpdmVyKT0+e1xuaWYobmFtZT09PSdsZW5ndGgnKXtcbnJldHVybiAwO1xuIH1cbi8vXG50aHJvdyBGYWlsIGBNYXJzaGFsJ3MgcGFyc2UgbXVzdCBub3QgZW5jb2RlIGFueSBzbG90IHBvc2l0aW9ucyAke25hbWV9YDtcbiB9fSk7XG5cblxuY29uc3QgYmFkQXJyYXk9aGFyZGVuKG5ldyBQcm94eShoYXJkZW4oW10pLGJhZEFycmF5SGFuZGxlcikpO1xuXG5jb25zdHtzZXJpYWxpemUsdW5zZXJpYWxpemV9PW1ha2VNYXJzaGFsKFxuZG9Ob3RDb252ZXJ0VmFsVG9TbG90LFxuZG9Ob3RDb252ZXJ0U2xvdFRvVmFsLFxue1xuZXJyb3JUYWdnaW5nOidvZmYnLFxuLy9cbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J2NhcGRhdGEnfSk7XG5cblxuXG4vKlxuXG5cbiAqL1xuY29uc3Qgc3RyaW5naWZ5PSh2YWwpPT5zZXJpYWxpemUodmFsKS5ib2R5OyRo4oCNX29uY2Uuc3RyaW5naWZ5KHN0cmluZ2lmeSk7XG5oYXJkZW4oc3RyaW5naWZ5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0IHBhcnNlPShzdHIpPT5cbnVuc2VyaWFsaXplKFxuaGFyZGVuKHtcbmJvZHk6c3RyLFxuc2xvdHM6YmFkQXJyYXl9KSk7JGjigI1fb25jZS5wYXJzZShwYXJzZSk7XG5cblxuaGFyZGVuKHBhcnNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InN0cmluZ2lmeSI6WyJzdHJpbmdpZnkiXSwicGFyc2UiOlsicGFyc2UiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAVxO/11InAABSJwAAIwAAAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9tYXJzaGFsLmpzeyJpbXBvcnRzIjpbIkBlbmRvL25hdCIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIi4vZW5jb2RlVG9DYXBEYXRhLmpzIiwiLi9lbmNvZGVUb1NtYWxsY2Fwcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VNYXJzaGFsIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBOYXQsYXNzZXJ0UGFzc2FibGUsZ2V0SW50ZXJmYWNlT2YsZ2V0RXJyb3JDb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eU9mLHRvUGFzc2FibGVFcnJvcixYLEZhaWwscSxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcixvYmplY3RNYXAsUUNMQVNTLG1ha2VFbmNvZGVUb0NhcERhdGEsbWFrZURlY29kZUZyb21DYXBEYXRhLG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzLG1ha2VFbmNvZGVUb1NtYWxsY2FwczskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjigI1fYSA9PiAoTmF0ID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImFzc2VydFBhc3NhYmxlXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRo4oCNX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRo4oCNX2EgPT4gKGdldEludGVyZmFjZU9mID0gJGjigI1fYSldXSxbXCJnZXRFcnJvckNvbnN0cnVjdG9yXCIsIFskaOKAjV9hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjigI1fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaOKAjV9hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjigI1fYSldXSxbXCJ0b1Bhc3NhYmxlRXJyb3JcIiwgWyRo4oCNX2EgPT4gKHRvUGFzc2FibGVFcnJvciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjigI1fYSA9PiAobWFrZUVycm9yID0gJGjigI1fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaOKAjV9hID0+IChhbm5vdGF0ZUVycm9yID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRo4oCNX2EgPT4gKG9iamVjdE1hcCA9ICRo4oCNX2EpXV1dXSxbXCIuL2VuY29kZVRvQ2FwRGF0YS5qc1wiLCBbW1wiUUNMQVNTXCIsIFskaOKAjV9hID0+IChRQ0xBU1MgPSAkaOKAjV9hKV1dLFtcIm1ha2VFbmNvZGVUb0NhcERhdGFcIiwgWyRo4oCNX2EgPT4gKG1ha2VFbmNvZGVUb0NhcERhdGEgPSAkaOKAjV9hKV1dLFtcIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YVwiLCBbJGjigI1fYSA9PiAobWFrZURlY29kZUZyb21DYXBEYXRhID0gJGjigI1fYSldXV1dLFtcIi4vZW5jb2RlVG9TbWFsbGNhcHMuanNcIiwgW1tcIm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzXCIsIFskaOKAjV9hID0+IChtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyA9ICRo4oCNX2EpXV0sW1wibWFrZUVuY29kZVRvU21hbGxjYXBzXCIsIFskaOKAjV9hID0+IChtYWtlRW5jb2RlVG9TbWFsbGNhcHMgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbmNvbnN0e2RlZmluZVByb3BlcnRpZXN9PU9iamVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0VmFsVG9TbG90Rm49KHgpPT54O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZWZhdWx0U2xvdFRvVmFsRm49KHgsXyk9Png7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VNYXJzaGFsPShcbmNvbnZlcnRWYWxUb1Nsb3Q9ZGVmYXVsdFZhbFRvU2xvdEZuLFxuY29udmVydFNsb3RUb1ZhbD1kZWZhdWx0U2xvdFRvVmFsRm4sXG57XG5lcnJvclRhZ2dpbmc9J29uJyxcbm1hcnNoYWxOYW1lPSdhbm9uLW1hcnNoYWwnLFxuLy9cbi8vXG5lcnJvcklkTnVtPTEwMDAwLFxuLy9cbi8vXG5tYXJzaGFsU2F2ZUVycm9yPShlcnIpPT5cbmNvbnNvbGUubG9nKCdUZW1wb3JhcnkgbG9nZ2luZyBvZiBzZW50IGVycm9yJyxlcnIpLFxuLy9cbi8vXG5zZXJpYWxpemVCb2R5Rm9ybWF0PSdjYXBkYXRhJ309XG57fSk9Plxue1xuYXNzZXJ0LnR5cGVvZihtYXJzaGFsTmFtZSwnc3RyaW5nJyk7XG5lcnJvclRhZ2dpbmc9PT0nb24nfHxcbmVycm9yVGFnZ2luZz09PSdvZmYnfHxcbkZhaWwgYFRoZSBlcnJvclRhZ2dpbmcgb3B0aW9uIGNhbiBvbmx5IGJlIFwib25cIiBvciBcIm9mZlwiICR7ZXJyb3JUYWdnaW5nfWA7XG5jb25zdCBuZXh0RXJyb3JJZD0oKT0+e1xuZXJyb3JJZE51bSs9MTtcbnJldHVybiBgZXJyb3I6JHttYXJzaGFsTmFtZX0jJHtlcnJvcklkTnVtfWA7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IHRvQ2FwRGF0YT0ocm9vdCk9PntcbmNvbnN0IHNsb3RzPVtdO1xuLy9cbmNvbnN0IHNsb3RNYXA9bmV3IE1hcCgpO1xuXG4vKlxuXG5cbiAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RDb21tb249KHBhc3NhYmxlKT0+e1xubGV0IGluZGV4PXNsb3RNYXAuZ2V0KHBhc3NhYmxlKTtcbmlmKGluZGV4IT09dW5kZWZpbmVkKXtcbi8vXG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcbnJldHVybiBoYXJkZW4oe2luZGV4LHJlcGVhdDp0cnVlfSk7XG4gfVxuXG5pbmRleD1zbG90cy5sZW5ndGg7XG5jb25zdCBzbG90PWNvbnZlcnRWYWxUb1Nsb3QocGFzc2FibGUpO1xuc2xvdHMucHVzaChzbG90KTtcbnNsb3RNYXAuc2V0KHBhc3NhYmxlLGluZGV4KTtcbnJldHVybiBoYXJkZW4oe2luZGV4LHJlcGVhdDpmYWxzZX0pO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAqL1xuY29uc3QgZW5jb2RlRXJyb3JDb21tb249KGVycixlbmNvZGVSZWN1cik9PntcbmNvbnN0IG1lc3NhZ2U9ZW5jb2RlUmVjdXIoIGAke2Vyci5tZXNzYWdlfWApO1xuYXNzZXJ0LnR5cGVvZihtZXNzYWdlLCdzdHJpbmcnKTtcbmNvbnN0IG5hbWU9ZW5jb2RlUmVjdXIoIGAke2Vyci5uYW1lfWApO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbi8vXG4vL1xuLy9cbmlmKGVycm9yVGFnZ2luZz09PSdvbicpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGVycm9ySWQ9ZW5jb2RlUmVjdXIobmV4dEVycm9ySWQoKSk7XG5hc3NlcnQudHlwZW9mKGVycm9ySWQsJ3N0cmluZycpO1xuYW5ub3RhdGVFcnJvcihlcnIsWCBgU2VudCBhcyAke2Vycm9ySWR9YCk7XG5tYXJzaGFsU2F2ZUVycm9yKGVycik7XG5yZXR1cm4gaGFyZGVuKHtlcnJvcklkLG1lc3NhZ2UsbmFtZX0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7bWVzc2FnZSxuYW1lfSk7XG4gfVxuIH07XG5cbmlmKHNlcmlhbGl6ZUJvZHlGb3JtYXQ9PT0nY2FwZGF0YScpe1xuLypcblxuXG5cbiAgICAgICAqL1xuY29uc3QgZW5jb2RlU2xvdFRvQ2FwRGF0YT0ocGFzc2FibGUsaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7aW5kZXgscmVwZWF0fT1lbmNvZGVTbG90Q29tbW9uKHBhc3NhYmxlKTtcblxuaWYocmVwZWF0PT09dHJ1ZXx8aWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J3Nsb3QnLGluZGV4fSk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHtbUUNMQVNTXTonc2xvdCcsaWZhY2UsaW5kZXh9KTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9KHZhbCxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb0NhcERhdGEodmFsLGdldEludGVyZmFjZU9mKHZhbCkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBlbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9taXNlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvQ2FwRGF0YShwcm9taXNlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIsZW5jb2RlUmVjdXIpPT57XG5jb25zdCBlcnJEYXRhPWVuY29kZUVycm9yQ29tbW9uKGVycixlbmNvZGVSZWN1cik7XG5yZXR1cm4gaGFyZGVuKHtbUUNMQVNTXTonZXJyb3InLC4uLmVyckRhdGF9KTtcbiB9O1xuXG5jb25zdCBlbmNvZGVUb0NhcERhdGE9bWFrZUVuY29kZVRvQ2FwRGF0YSh7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGEsXG5lbmNvZGVQcm9taXNlVG9DYXBEYXRhLFxuZW5jb2RlRXJyb3JUb0NhcERhdGF9KTtcblxuXG5jb25zdCBlbmNvZGVkPWVuY29kZVRvQ2FwRGF0YShyb290KTtcbmNvbnN0IGJvZHk9SlNPTi5zdHJpbmdpZnkoZW5jb2RlZCk7XG5yZXR1cm4gaGFyZGVuKHtcbmJvZHksXG5zbG90c30pO1xuXG4gfWVsc2UgaWYoc2VyaWFsaXplQm9keUZvcm1hdD09PSdzbWFsbGNhcHMnKXtcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuY29uc3QgZW5jb2RlU2xvdFRvU21hbGxjYXBzPShwcmVmaXgscGFzc2FibGUsaWZhY2U9dW5kZWZpbmVkKT0+e1xuY29uc3R7aW5kZXgscmVwZWF0fT1lbmNvZGVTbG90Q29tbW9uKHBhc3NhYmxlKTtcblxuLy9cbmlmKHJlcGVhdD09PXRydWV8fGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBgJHtwcmVmaXh9JHtpbmRleH1gO1xuIH1cbnJldHVybiBgJHtwcmVmaXh9JHtpbmRleH0uJHtpZmFjZX1gO1xuIH07XG5cbmNvbnN0IGVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPShyZW1vdGFibGUsX2VuY29kZVJlY3VyKT0+XG5lbmNvZGVTbG90VG9TbWFsbGNhcHMoJyQnLHJlbW90YWJsZSxnZXRJbnRlcmZhY2VPZihyZW1vdGFibGUpKTtcblxuY29uc3QgZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPShwcm9taXNlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvU21hbGxjYXBzKCcmJyxwcm9taXNlKTtcblxuY29uc3QgZW5jb2RlRXJyb3JUb1NtYWxsY2Fwcz0oZXJyLGVuY29kZVJlY3VyKT0+e1xuY29uc3QgZXJyRGF0YT1lbmNvZGVFcnJvckNvbW1vbihlcnIsZW5jb2RlUmVjdXIpO1xuY29uc3R7bWVzc2FnZSwuLi5yZXN0fT1lcnJEYXRhO1xucmV0dXJuIGhhcmRlbih7JyNlcnJvcic6bWVzc2FnZSwuLi5yZXN0fSk7XG4gfTtcblxuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHM9bWFrZUVuY29kZVRvU21hbGxjYXBzKHtcbmVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzLFxuZW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzLFxuZW5jb2RlRXJyb3JUb1NtYWxsY2Fwc30pO1xuXG5cbmNvbnN0IGVuY29kZWQ9ZW5jb2RlVG9TbWFsbGNhcHMocm9vdCk7XG5jb25zdCBzbWFsbGNhcHNCb2R5PUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xucmV0dXJuIGhhcmRlbih7XG4vL1xuLy9cbmJvZHk6IGAjJHtzbWFsbGNhcHNCb2R5fWAsXG5zbG90c30pO1xuXG4gfWVsc2V7XG4vL1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIHNlcmlhbGl6ZUJvZHlGb3JtYXQ6ICR7cShzZXJpYWxpemVCb2R5Rm9ybWF0KX1gO1xuIH1cbiB9O1xuXG5jb25zdCBtYWtlRnVsbFJldml2ZT0oc2xvdHMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdmFsTWFwPW5ldyBNYXAoKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBkZWNvZGVTbG90Q29tbW9uPShzbG90RGF0YSk9PntcbmNvbnN0e2lmYWNlPXVuZGVmaW5lZCxpbmRleCwuLi5yZXN0fT1zbG90RGF0YTtcbm93bktleXMocmVzdCkubGVuZ3RoPT09MHx8XG5GYWlsIGB1bmV4cGVjdGVkIGVuY29kZWQgc2xvdCBwcm9wZXJ0aWVzICR7cShvd25LZXlzKHJlc3QpKX1gO1xuY29uc3QgZXh0YW50PXZhbE1hcC5nZXQoaW5kZXgpO1xuaWYoZXh0YW50KXtcbnJldHVybiBleHRhbnQ7XG4gfVxuLy9cbi8vXG5jb25zdCBzbG90PXNsb3RzW051bWJlcihOYXQoaW5kZXgpKV07XG5jb25zdCB2YWw9Y29udmVydFNsb3RUb1ZhbChzbG90LGlmYWNlKTtcbnZhbE1hcC5zZXQoaW5kZXgsdmFsKTtcbnJldHVybiB2YWw7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmNvbnN0IGRlY29kZUVycm9yQ29tbW9uPShlcnJEYXRhLGRlY29kZVJlY3VyKT0+e1xuY29uc3R7XG5lcnJvcklkPXVuZGVmaW5lZCxcbm1lc3NhZ2UsXG5uYW1lLFxuY2F1c2U9dW5kZWZpbmVkLFxuZXJyb3JzPXVuZGVmaW5lZCxcbi4uLnJlc3R9PVxuZXJyRGF0YTtcbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBkTmFtZT1kZWNvZGVSZWN1cihuYW1lKTtcbmNvbnN0IGRNZXNzYWdlPWRlY29kZVJlY3VyKG1lc3NhZ2UpO1xuLy9cbmNvbnN0IGRFcnJvcklkPS8qICAgICAgICAgICAgICAgICAqL2Vycm9ySWQmJmRlY29kZVJlY3VyKGVycm9ySWQpO1xuaWYodHlwZW9mIGROYW1lIT09J3N0cmluZycpe1xudGhyb3cgRmFpbCBgaW52YWxpZCBlcnJvciBuYW1lIHR5cGVvZiAke3EodHlwZW9mIGROYW1lKX1gO1xuIH1cbmlmKHR5cGVvZiBkTWVzc2FnZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbWVzc2FnZSB0eXBlb2YgJHtxKHR5cGVvZiBkTWVzc2FnZSl9YDtcbiB9XG5jb25zdCBlcnJDb25zdHJ1Y3Rvcj1nZXRFcnJvckNvbnN0cnVjdG9yKGROYW1lKXx8RXJyb3I7XG5jb25zdCBlcnJvck5hbWU9XG5kRXJyb3JJZD09PXVuZGVmaW5lZD9cbiBgUmVtb3RlJHtlcnJDb25zdHJ1Y3Rvci5uYW1lfWA6XG4gYFJlbW90ZSR7ZXJyQ29uc3RydWN0b3IubmFtZX0oJHtkRXJyb3JJZH0pYDtcbmNvbnN0IG9wdGlvbnM9e1xuZXJyb3JOYW1lLFxuc2FuaXRpemU6ZmFsc2V9O1xuXG5pZihjYXVzZSl7XG5vcHRpb25zLmNhdXNlPWRlY29kZVJlY3VyKGNhdXNlKTtcbiB9XG5pZihlcnJvcnMpe1xub3B0aW9ucy5lcnJvcnM9ZGVjb2RlUmVjdXIoZXJyb3JzKTtcbiB9XG5jb25zdCByYXdFcnJvcj1tYWtlRXJyb3IoZE1lc3NhZ2UsZXJyQ29uc3RydWN0b3Isb3B0aW9ucyk7XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVzY3M9b2JqZWN0TWFwKHJlc3QsKGRhdGEpPT4oe1xudmFsdWU6ZGVjb2RlUmVjdXIoZGF0YSksXG53cml0YWJsZTpmYWxzZSxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2V9KSk7XG5cbmRlZmluZVByb3BlcnRpZXMocmF3RXJyb3IsZGVzY3MpO1xuaGFyZGVuKHJhd0Vycm9yKTtcbnJldHVybiB0b1Bhc3NhYmxlRXJyb3IocmF3RXJyb3IpO1xuIH07XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGE9KHJhd1RyZWUsX2RlY29kZVJlY3VyKT0+e1xuY29uc3R7W1FDTEFTU106XywuLi5zbG90RGF0YX09cmF3VHJlZTtcbnJldHVybiBkZWNvZGVTbG90Q29tbW9uKHNsb3REYXRhKTtcbiB9O1xuXG5jb25zdCBkZWNvZGVFcnJvckZyb21DYXBEYXRhPShyYXdUcmVlLGRlY29kZVJlY3VyKT0+e1xuY29uc3R7W1FDTEFTU106XywuLi5lcnJEYXRhfT1yYXdUcmVlO1xucmV0dXJuIGRlY29kZUVycm9yQ29tbW9uKGVyckRhdGEsZGVjb2RlUmVjdXIpO1xuIH07XG5cbmNvbnN0IHJldml2ZUZyb21DYXBEYXRhPW1ha2VEZWNvZGVGcm9tQ2FwRGF0YSh7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YTpkZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZVByb21pc2VGcm9tQ2FwRGF0YTpkZWNvZGVSZW1vdGFibGVPclByb21pc2VGcm9tQ2FwRGF0YSxcbmRlY29kZUVycm9yRnJvbUNhcERhdGF9KTtcblxuXG5jb25zdCBtYWtlRGVjb2RlU2xvdEZyb21TbWFsbGNhcHM9KHByZWZpeCk9Pntcbi8qXG5cblxuXG4gICAgICAgKi9cbnJldHVybihzdHJpbmdFbmNvZGluZyxfZGVjb2RlUmVjdXIpPT57XG5hc3NlcnQoc3RyaW5nRW5jb2RpbmcuY2hhckF0KDApPT09cHJlZml4KTtcbi8vXG5jb25zdCBpPXN0cmluZ0VuY29kaW5nLmluZGV4T2YoJy4nKTtcbmNvbnN0IGluZGV4PU51bWJlcihzdHJpbmdFbmNvZGluZy5zbGljZSgxLGk8MD91bmRlZmluZWQ6aSkpO1xuLy9cbmNvbnN0IGlmYWNlPWk8MD91bmRlZmluZWQ6c3RyaW5nRW5jb2Rpbmcuc2xpY2UoaSsxKTtcbnJldHVybiBkZWNvZGVTbG90Q29tbW9uKHtpZmFjZSxpbmRleH0pO1xuIH07XG4gfTtcbmNvbnN0IGRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzKCckJyk7XG5jb25zdCBkZWNvZGVQcm9taXNlRnJvbVNtYWxsY2Fwcz1tYWtlRGVjb2RlU2xvdEZyb21TbWFsbGNhcHMoJyYnKTtcblxuY29uc3QgZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzPShlbmNvZGluZyxkZWNvZGVSZWN1cik9PntcbmNvbnN0eycjZXJyb3InOm1lc3NhZ2UsLi4ucmVzdEVyckRhdGF9PWVuY29kaW5nO1xuIWhhc093blByb3BlcnR5T2YocmVzdEVyckRhdGEsJ21lc3NhZ2UnKXx8XG5GYWlsIGB1bmV4cGVjdGVkIGVuY29kZWQgZXJyb3IgcHJvcGVydHkgJHtxKCdtZXNzYWdlJyl9YDtcbnJldHVybiBkZWNvZGVFcnJvckNvbW1vbih7bWVzc2FnZSwuLi5yZXN0RXJyRGF0YX0sZGVjb2RlUmVjdXIpO1xuIH07XG5cbmNvbnN0IHJldml2ZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZUZyb21TbWFsbGNhcHMoe1xuLy9cbmRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMsXG4vL1xuZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVFcnJvckZyb21TbWFsbGNhcHN9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtyZXZpdmVGcm9tQ2FwRGF0YSxyZXZpdmVGcm9tU21hbGxjYXBzfSk7XG4gfTtcblxuLypcblxuICAgKi9cbmNvbnN0IGZyb21DYXBEYXRhPShkYXRhKT0+e1xuY29uc3R7Ym9keSxzbG90c309ZGF0YTtcbnR5cGVvZiBib2R5PT09J3N0cmluZyd8fFxuRmFpbCBgdW5zZXJpYWxpemUoKSBnaXZlbiBub24tY2FwZGF0YSAoLmJvZHkgaXMgJHtib2R5fSwgbm90IHN0cmluZylgO1xuaXNBcnJheShkYXRhLnNsb3RzKXx8XG5GYWlsIGB1bnNlcmlhbGl6ZSgpIGdpdmVuIG5vbi1jYXBkYXRhICguc2xvdHMgYXJlIG5vdCBBcnJheSlgO1xuY29uc3R7cmV2aXZlRnJvbUNhcERhdGEscmV2aXZlRnJvbVNtYWxsY2Fwc309bWFrZUZ1bGxSZXZpdmUoc2xvdHMpO1xubGV0IHJlc3VsdDtcbi8vXG5pZihib2R5LmNoYXJBdCgwKT09PScjJyl7XG5jb25zdCBzbWFsbGNhcHNCb2R5PWJvZHkuc2xpY2UoMSk7XG5jb25zdCBlbmNvZGluZz1oYXJkZW4oSlNPTi5wYXJzZShzbWFsbGNhcHNCb2R5KSk7XG5yZXN1bHQ9aGFyZGVuKHJldml2ZUZyb21TbWFsbGNhcHMoZW5jb2RpbmcpKTtcbiB9ZWxzZXtcbmNvbnN0IHJhd1RyZWU9aGFyZGVuKEpTT04ucGFyc2UoYm9keSkpO1xucmVzdWx0PWhhcmRlbihyZXZpdmVGcm9tQ2FwRGF0YShyYXdUcmVlKSk7XG4gfVxuLy9cbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUocmVzdWx0KTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICAgKi9yZXN1bHQpO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe1xudG9DYXBEYXRhLFxuZnJvbUNhcERhdGEsXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuc2VyaWFsaXplOnRvQ2FwRGF0YSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnVuc2VyaWFsaXplOmZyb21DYXBEYXRhfSk7XG5cbiB9OyRo4oCNX29uY2UubWFrZU1hcnNoYWwobWFrZU1hcnNoYWwpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1hcnNoYWwiOlsibWFrZU1hcnNoYWwiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAryK5juwlAADsJQAAJQAAAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9yYW5rT3JkZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIi4vZW5jb2RlUGFzc2FibGUuanMiXSwiZXhwb3J0cyI6WyJGdWxsUmFua0NvdmVyIiwiYXNzZXJ0UmFua1NvcnRlZCIsImNvbXBhcmF0b3JNaXJyb3JJbWFnZSIsImNvbXBhcmVBbnRpUmFuayIsImNvbXBhcmVSYW5rIiwiY292ZXJlZEVudHJpZXMiLCJnZXRJbmRleENvdmVyIiwiZ2V0UGFzc1N0eWxlQ292ZXIiLCJpbnRlcnNlY3RSYW5rQ292ZXJzIiwiaXNSYW5rU29ydGVkIiwibWFrZUNvbXBhcmF0b3JLaXQiLCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCIsInNvcnRCeVJhbmsiLCJ0cml2aWFsQ29tcGFyYXRvciIsInVuaW9uUmFua0NvdmVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0VGFnLHBhc3NTdHlsZU9mLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxGYWlsLHEscGFzc1N0eWxlUHJlZml4ZXMscmVjb3JkTmFtZXMscmVjb3JkVmFsdWVzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldFRhZ1wiLCBbJGjigI1fYSA9PiAoZ2V0VGFnID0gJGjigI1fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjigI1fYSA9PiAocGFzc1N0eWxlT2YgPSAkaOKAjV9hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjigI1fYSA9PiAobmFtZUZvclBhc3NhYmxlU3ltYm9sID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCIuL2VuY29kZVBhc3NhYmxlLmpzXCIsIFtbXCJwYXNzU3R5bGVQcmVmaXhlc1wiLCBbJGjigI1fYSA9PiAocGFzc1N0eWxlUHJlZml4ZXMgPSAkaOKAjV9hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaOKAjV9hID0+IChyZWNvcmROYW1lcyA9ICRo4oCNX2EpXV0sW1wicmVjb3JkVmFsdWVzXCIsIFskaOKAjV9hID0+IChyZWNvcmRWYWx1ZXMgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3R7ZW50cmllcyxmcm9tRW50cmllcyxzZXRQcm90b3R5cGVPZixpc309T2JqZWN0O1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzYW1lVmFsdWVaZXJvPSh4LHkpPT54PT09eXx8aXMoeCx5KTtcblxuY29uc3QgICAgICAgIHRyaXZpYWxDb21wYXJhdG9yPShsZWZ0LHJpZ2h0KT0+XG4vL1xubGVmdDxyaWdodD8tMTpsZWZ0PT09cmlnaHQ/MDoxO1xuXG4vKlxuXG4gKi8kaOKAjV9vbmNlLnRyaXZpYWxDb21wYXJhdG9yKHRyaXZpYWxDb21wYXJhdG9yKTtcblxuY29uc3QgcGFzc1N0eWxlUmFua3M9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmZyb21FbnRyaWVzKFxuZW50cmllcyhwYXNzU3R5bGVQcmVmaXhlcylcbi8vXG4uc29ydCgoW19sZWZ0U3R5bGUsbGVmdFByZWZpeGVzXSxbX3JpZ2h0U3R5bGUscmlnaHRQcmVmaXhlc10pPT57XG5yZXR1cm4gdHJpdmlhbENvbXBhcmF0b3IobGVmdFByZWZpeGVzLHJpZ2h0UHJlZml4ZXMpO1xuIH0pLlxubWFwKChbcGFzc1N0eWxlLHByZWZpeGVzXSxpbmRleCk9Pntcbi8vXG4vL1xuLy9cbnByZWZpeGVzPT09Wy4uLnByZWZpeGVzXS5zb3J0KCkuam9pbignJyl8fFxuRmFpbCBgdW5zb3J0ZWQgcHJlZml4ZXMgZm9yIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX06ICR7cShwcmVmaXhlcyl9YDtcbmNvbnN0IGNvdmVyPVtcbnByZWZpeGVzLmNoYXJBdCgwKSxcblN0cmluZy5mcm9tQ2hhckNvZGUocHJlZml4ZXMuY2hhckNvZGVBdChwcmVmaXhlcy5sZW5ndGgtMSkrMSldO1xuXG5yZXR1cm5bcGFzc1N0eWxlLHtpbmRleCxjb3Zlcn1dO1xuIH0pKTtcblxuXG5zZXRQcm90b3R5cGVPZihwYXNzU3R5bGVSYW5rcyxudWxsKTtcbmhhcmRlbihwYXNzU3R5bGVSYW5rcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRQYXNzU3R5bGVDb3Zlcj0ocGFzc1N0eWxlKT0+cGFzc1N0eWxlUmFua3NbcGFzc1N0eWxlXS5jb3ZlcjskaOKAjV9vbmNlLmdldFBhc3NTdHlsZUNvdmVyKGdldFBhc3NTdHlsZUNvdmVyKTtcbmhhcmRlbihnZXRQYXNzU3R5bGVDb3Zlcik7XG5cbi8qXG5cbiAqL1xuY29uc3QgbWVtb09mU29ydGVkPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cbiAqL1xuY29uc3QgY29tcGFyYXRvck1pcnJvckltYWdlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvbXBhcmF0b3JLaXQ9KGNvbXBhcmVSZW1vdGFibGVzPShfeCxfeSk9PjApPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29tcGFyYXRvcj0obGVmdCxyaWdodCk9PntcbmlmKHNhbWVWYWx1ZVplcm8obGVmdCxyaWdodCkpe1xucmV0dXJuIDA7XG4gfVxuY29uc3QgbGVmdFN0eWxlPXBhc3NTdHlsZU9mKGxlZnQpO1xuY29uc3QgcmlnaHRTdHlsZT1wYXNzU3R5bGVPZihyaWdodCk7XG5pZihsZWZ0U3R5bGUhPT1yaWdodFN0eWxlKXtcbnJldHVybiB0cml2aWFsQ29tcGFyYXRvcihcbnBhc3NTdHlsZVJhbmtzW2xlZnRTdHlsZV0uaW5kZXgsXG5wYXNzU3R5bGVSYW5rc1tyaWdodFN0eWxlXS5pbmRleCk7XG5cbiB9XG4vKlxuXG4gICAgICovXG5zd2l0Y2gobGVmdFN0eWxlKXtcbmNhc2UncmVtb3RhYmxlJzp7XG5yZXR1cm4gY29tcGFyZVJlbW90YWJsZXMobGVmdCxyaWdodCk7XG4gfVxuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdudWxsJzpcbmNhc2UnZXJyb3InOlxuY2FzZSdwcm9taXNlJzp7XG4vL1xuLy9cbnJldHVybiAwO1xuIH1cbmNhc2UnYm9vbGVhbic6XG5jYXNlJ2JpZ2ludCc6XG5jYXNlJ3N0cmluZyc6e1xuLy9cbi8vXG5pZihsZWZ0PHJpZ2h0KXtcbnJldHVybi0xO1xuIH1lbHNle1xuYXNzZXJ0KGxlZnQ+cmlnaHQpO1xucmV0dXJuIDE7XG4gfVxuIH1cbmNhc2Unc3ltYm9sJzp7XG5yZXR1cm4gY29tcGFyYXRvcihcbm5hbWVGb3JQYXNzYWJsZVN5bWJvbChsZWZ0KSxcbm5hbWVGb3JQYXNzYWJsZVN5bWJvbChyaWdodCkpO1xuXG4gfVxuY2FzZSdudW1iZXInOntcbi8vXG5pZihOdW1iZXIuaXNOYU4obGVmdCkpe1xuYXNzZXJ0KCFOdW1iZXIuaXNOYU4ocmlnaHQpKTtcbnJldHVybiAxO1xuIH1lbHNlIGlmKE51bWJlci5pc05hTihyaWdodCkpe1xucmV0dXJuLTE7XG4gfVxuLy9cbi8vXG5pZihsZWZ0PHJpZ2h0KXtcbnJldHVybi0xO1xuIH1lbHNle1xuYXNzZXJ0KGxlZnQ+cmlnaHQpO1xucmV0dXJuIDE7XG4gfVxuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgbGVmdE5hbWVzPXJlY29yZE5hbWVzKGxlZnQpO1xuY29uc3QgcmlnaHROYW1lcz1yZWNvcmROYW1lcyhyaWdodCk7XG5cbmNvbnN0IHJlc3VsdD1jb21wYXJhdG9yKGxlZnROYW1lcyxyaWdodE5hbWVzKTtcbmlmKHJlc3VsdCE9PTApe1xucmV0dXJuIHJlc3VsdDtcbiB9XG5yZXR1cm4gY29tcGFyYXRvcihcbnJlY29yZFZhbHVlcyhsZWZ0LGxlZnROYW1lcyksXG5yZWNvcmRWYWx1ZXMocmlnaHQscmlnaHROYW1lcykpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG5jb25zdCBsZW49TWF0aC5taW4obGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xuY29uc3QgcmVzdWx0PWNvbXBhcmF0b3IobGVmdFtpXSxyaWdodFtpXSk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbi8vXG4vL1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuLy9cbmNvbnN0IGxhYmVsQ29tcD1jb21wYXJhdG9yKGdldFRhZyhsZWZ0KSxnZXRUYWcocmlnaHQpKTtcbmlmKGxhYmVsQ29tcCE9PTApe1xucmV0dXJuIGxhYmVsQ29tcDtcbiB9XG5yZXR1cm4gY29tcGFyYXRvcihsZWZ0LnBheWxvYWQscmlnaHQucGF5bG9hZCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgcGFzc1N0eWxlOiAke3EobGVmdFN0eWxlKX1gO1xuIH19XG5cbi8qICAgICAgICAgICAgICAgKi9cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYW50aUNvbXBhcmF0b3I9KHgseSk9PmNvbXBhcmF0b3IoeSx4KTtcblxubWVtb09mU29ydGVkLnNldChjb21wYXJhdG9yLG5ldyBXZWFrU2V0KCkpO1xubWVtb09mU29ydGVkLnNldChhbnRpQ29tcGFyYXRvcixuZXcgV2Vha1NldCgpKTtcbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuc2V0KGNvbXBhcmF0b3IsYW50aUNvbXBhcmF0b3IpO1xuY29tcGFyYXRvck1pcnJvckltYWdlcy5zZXQoYW50aUNvbXBhcmF0b3IsY29tcGFyYXRvcik7XG5cbnJldHVybiBoYXJkZW4oe2NvbXBhcmF0b3IsYW50aUNvbXBhcmF0b3J9KTtcbiB9O1xuLypcblxuXG4gKi8kaOKAjV9vbmNlLm1ha2VDb21wYXJhdG9yS2l0KG1ha2VDb21wYXJhdG9yS2l0KTtcbmNvbnN0ICAgICAgICBjb21wYXJhdG9yTWlycm9ySW1hZ2U9KGNvbXBhcmF0b3IpPT5cbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuZ2V0KGNvbXBhcmF0b3IpO1xuXG4vKlxuXG5cblxuICovJGjigI1fb25jZS5jb21wYXJhdG9yTWlycm9ySW1hZ2UoY29tcGFyYXRvck1pcnJvckltYWdlKTtcbmNvbnN0ICAgICAgICBpc1JhbmtTb3J0ZWQ9KHBhc3NhYmxlcyxjb21wYXJlKT0+e1xuY29uc3Qgc3ViTWVtb09mU29ydGVkPW1lbW9PZlNvcnRlZC5nZXQoY29tcGFyZSk7XG5hc3NlcnQoc3ViTWVtb09mU29ydGVkIT09dW5kZWZpbmVkKTtcbmlmKHN1Yk1lbW9PZlNvcnRlZC5oYXMocGFzc2FibGVzKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5hc3NlcnQocGFzc1N0eWxlT2YocGFzc2FibGVzKT09PSdjb3B5QXJyYXknKTtcbmZvcihsZXQgaT0xO2k8cGFzc2FibGVzLmxlbmd0aDtpKz0xKXtcbmlmKGNvbXBhcmUocGFzc2FibGVzW2ktMV0scGFzc2FibGVzW2ldKT49MSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnN1Yk1lbW9PZlNvcnRlZC5hZGQocGFzc2FibGVzKTtcbnJldHVybiB0cnVlO1xuIH07JGjigI1fb25jZS5pc1JhbmtTb3J0ZWQoaXNSYW5rU29ydGVkKTtcbmhhcmRlbihpc1JhbmtTb3J0ZWQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFJhbmtTb3J0ZWQ9KHNvcnRlZCxjb21wYXJlKT0+XG5pc1JhbmtTb3J0ZWQoc29ydGVkLGNvbXBhcmUpfHxcbi8vXG4vL1xuRmFpbCBgTXVzdCBiZSByYW5rIHNvcnRlZDogJHtzb3J0ZWR9IHZzICR7c29ydEJ5UmFuayhzb3J0ZWQsY29tcGFyZSl9YDskaOKAjV9vbmNlLmFzc2VydFJhbmtTb3J0ZWQoYXNzZXJ0UmFua1NvcnRlZCk7XG5oYXJkZW4oYXNzZXJ0UmFua1NvcnRlZCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNvcnRCeVJhbms9KHBhc3NhYmxlcyxjb21wYXJlKT0+e1xuaWYoQXJyYXkuaXNBcnJheShwYXNzYWJsZXMpKXtcbmhhcmRlbihwYXNzYWJsZXMpO1xuLy9cbi8vXG4vL1xuaWYoaXNSYW5rU29ydGVkKHBhc3NhYmxlcyxjb21wYXJlKSl7XG5yZXR1cm4gcGFzc2FibGVzO1xuIH1cbiB9XG5jb25zdCB1bnNvcnRlZD1bLi4ucGFzc2FibGVzXTtcbnVuc29ydGVkLmZvckVhY2goaGFyZGVuKTtcbmNvbnN0IHNvcnRlZD1oYXJkZW4odW5zb3J0ZWQuc29ydChjb21wYXJlKSk7XG5jb25zdCBzdWJNZW1vT2ZTb3J0ZWQ9bWVtb09mU29ydGVkLmdldChjb21wYXJlKTtcbmFzc2VydChzdWJNZW1vT2ZTb3J0ZWQhPT11bmRlZmluZWQpO1xuc3ViTWVtb09mU29ydGVkLmFkZChzb3J0ZWQpO1xucmV0dXJuIHNvcnRlZDtcbiB9OyRo4oCNX29uY2Uuc29ydEJ5UmFuayhzb3J0QnlSYW5rKTtcbmhhcmRlbihzb3J0QnlSYW5rKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHJhbmtTZWFyY2g9KHNvcnRlZCxjb21wYXJlLGtleSxiaWFzPSdsZWZ0TW9zdCcpPT57XG5hc3NlcnRSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKTtcbmxldCBsZWZ0PTA7XG5sZXQgcmlnaHQ9c29ydGVkLmxlbmd0aDtcbndoaWxlKGxlZnQ8cmlnaHQpe1xuY29uc3QgbT1NYXRoLmZsb29yKChsZWZ0K3JpZ2h0KS8yKTtcbmNvbnN0IGNvbXA9Y29tcGFyZShzb3J0ZWRbbV0sa2V5KTtcbmlmKGNvbXA8PS0xfHxjb21wPT09MCYmYmlhcz09PSdyaWdodE1vc3QnKXtcbmxlZnQ9bSsxO1xuIH1lbHNle1xuYXNzZXJ0KGNvbXA+PTF8fGNvbXA9PT0wJiZiaWFzPT09J2xlZnRNb3N0Jyk7XG5yaWdodD1tO1xuIH1cbiB9XG5yZXR1cm4gYmlhcz09PSdsZWZ0TW9zdCc/bGVmdDpyaWdodC0xO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEluZGV4Q292ZXI9KHNvcnRlZCxjb21wYXJlLFtsZWZ0S2V5LHJpZ2h0S2V5XSk9PntcbmFzc2VydFJhbmtTb3J0ZWQoc29ydGVkLGNvbXBhcmUpO1xuY29uc3QgbGVmdEluZGV4PXJhbmtTZWFyY2goc29ydGVkLGNvbXBhcmUsbGVmdEtleSwnbGVmdE1vc3QnKTtcbmNvbnN0IHJpZ2h0SW5kZXg9cmFua1NlYXJjaChzb3J0ZWQsY29tcGFyZSxyaWdodEtleSwncmlnaHRNb3N0Jyk7XG5yZXR1cm5bbGVmdEluZGV4LHJpZ2h0SW5kZXhdO1xuIH07JGjigI1fb25jZS5nZXRJbmRleENvdmVyKGdldEluZGV4Q292ZXIpO1xuaGFyZGVuKGdldEluZGV4Q292ZXIpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBGdWxsUmFua0NvdmVyPWhhcmRlbihbJycsJ3snXSk7XG5cbi8qXG5cblxuXG4gKi8kaOKAjV9vbmNlLkZ1bGxSYW5rQ292ZXIoRnVsbFJhbmtDb3Zlcik7XG5jb25zdCAgICAgICAgY292ZXJlZEVudHJpZXM9KHNvcnRlZCxbbGVmdEluZGV4LHJpZ2h0SW5kZXhdKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXRlcmFibGU9aGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5sZXQgaT1sZWZ0SW5kZXg7XG5yZXR1cm4gaGFyZGVuKHtcbm5leHQ6KCk9PntcbmlmKGk8PXJpZ2h0SW5kZXgpe1xuY29uc3QgZWxlbWVudD1zb3J0ZWRbaV07XG5pKz0xO1xucmV0dXJuIGhhcmRlbih7dmFsdWU6W2ksZWxlbWVudF0sZG9uZTpmYWxzZX0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7dmFsdWU6dW5kZWZpbmVkLGRvbmU6dHJ1ZX0pO1xuIH1cbiB9fSk7XG5cbiB9fSk7XG5cbnJldHVybiBpdGVyYWJsZTtcbiB9OyRo4oCNX29uY2UuY292ZXJlZEVudHJpZXMoY292ZXJlZEVudHJpZXMpO1xuaGFyZGVuKGNvdmVyZWRFbnRyaWVzKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1heFJhbms9KGNvbXBhcmUsYSxiKT0+Y29tcGFyZShhLGIpPj0wP2E6YjtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1pblJhbms9KGNvbXBhcmUsYSxiKT0+Y29tcGFyZShhLGIpPD0wP2E6YjtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHVuaW9uUmFua0NvdmVycz0oY29tcGFyZSxjb3ZlcnMpPT57XG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHVuaW9uUmFua0NvdmVyUGFpcj0oW2xlZnRBLHJpZ2h0QV0sW2xlZnRCLHJpZ2h0Ql0pPT5bXG5taW5SYW5rKGNvbXBhcmUsbGVmdEEsbGVmdEIpLFxubWF4UmFuayhjb21wYXJlLHJpZ2h0QSxyaWdodEIpXTtcblxucmV0dXJuIGNvdmVycy5yZWR1Y2UodW5pb25SYW5rQ292ZXJQYWlyLFsneycsJyddKTtcbiB9OyRo4oCNX29uY2UudW5pb25SYW5rQ292ZXJzKHVuaW9uUmFua0NvdmVycyk7XG5oYXJkZW4odW5pb25SYW5rQ292ZXJzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGludGVyc2VjdFJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCBpbnRlcnNlY3RSYW5rQ292ZXJQYWlyPShbbGVmdEEscmlnaHRBXSxbbGVmdEIscmlnaHRCXSk9Pltcbm1heFJhbmsoY29tcGFyZSxsZWZ0QSxsZWZ0QiksXG5taW5SYW5rKGNvbXBhcmUscmlnaHRBLHJpZ2h0QildO1xuXG5yZXR1cm4gY292ZXJzLnJlZHVjZShpbnRlcnNlY3RSYW5rQ292ZXJQYWlyLFsnJywneyddKTtcbiB9OyRo4oCNX29uY2UuaW50ZXJzZWN0UmFua0NvdmVycyhpbnRlcnNlY3RSYW5rQ292ZXJzKTtcblxuY29uc3QgICAgICAge2NvbXBhcmF0b3I6Y29tcGFyZVJhbmssYW50aUNvbXBhcmF0b3I6Y29tcGFyZUFudGlSYW5rfT1cbm1ha2VDb21wYXJhdG9yS2l0KCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaOKAjV9vbmNlLmNvbXBhcmVSYW5rKGNvbXBhcmVSYW5rKTskaOKAjV9vbmNlLmNvbXBhcmVBbnRpUmFuayhjb21wYXJlQW50aVJhbmspO1xuY29uc3QgICAgICAgIG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0PShsb25nTGl2ZWQ9ZmFsc2UpPT57XG5sZXQgbnVtU2Vlbj0wO1xuLy9cbi8vXG4vL1xuY29uc3QgTWFwQ29uc3RydWN0b3I9bG9uZ0xpdmVkP1dlYWtNYXA6TWFwO1xuY29uc3Qgc2Vlbj1uZXcgTWFwQ29uc3RydWN0b3IoKTtcbmNvbnN0IHRhZz0ocik9PntcbmlmKHNlZW4uaGFzKHIpKXtcbnJldHVybiBzZWVuLmdldChyKTtcbiB9XG5udW1TZWVuKz0xO1xuc2Vlbi5zZXQocixudW1TZWVuKTtcbnJldHVybiBudW1TZWVuO1xuIH07XG5jb25zdCBjb21wYXJlUmVtb3RhYmxlcz0oeCx5KT0+Y29tcGFyZVJhbmsodGFnKHgpLHRhZyh5KSk7XG5yZXR1cm4gbWFrZUNvbXBhcmF0b3JLaXQoY29tcGFyZVJlbW90YWJsZXMpO1xuIH07JGjigI1fb25jZS5tYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCk7XG5oYXJkZW4obWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJpdmlhbENvbXBhcmF0b3IiOlsidHJpdmlhbENvbXBhcmF0b3IiXSwiZ2V0UGFzc1N0eWxlQ292ZXIiOlsiZ2V0UGFzc1N0eWxlQ292ZXIiXSwibWFrZUNvbXBhcmF0b3JLaXQiOlsibWFrZUNvbXBhcmF0b3JLaXQiXSwiY29tcGFyYXRvck1pcnJvckltYWdlIjpbImNvbXBhcmF0b3JNaXJyb3JJbWFnZSJdLCJpc1JhbmtTb3J0ZWQiOlsiaXNSYW5rU29ydGVkIl0sImFzc2VydFJhbmtTb3J0ZWQiOlsiYXNzZXJ0UmFua1NvcnRlZCJdLCJzb3J0QnlSYW5rIjpbInNvcnRCeVJhbmsiXSwiZ2V0SW5kZXhDb3ZlciI6WyJnZXRJbmRleENvdmVyIl0sIkZ1bGxSYW5rQ292ZXIiOlsiRnVsbFJhbmtDb3ZlciJdLCJjb3ZlcmVkRW50cmllcyI6WyJjb3ZlcmVkRW50cmllcyJdLCJ1bmlvblJhbmtDb3ZlcnMiOlsidW5pb25SYW5rQ292ZXJzIl0sImludGVyc2VjdFJhbmtDb3ZlcnMiOlsiaW50ZXJzZWN0UmFua0NvdmVycyJdLCJjb21wYXJlUmFuayI6WyJjb21wYXJlUmFuayJdLCJjb21wYXJlQW50aVJhbmsiOlsiY29tcGFyZUFudGlSYW5rIl0sIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0IjpbIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAACEAAABAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAsjlNw2AFAABgBQAAHgAAAEBlbmRvL25hdC12NS4wLjEwL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiTmF0IiwiaXNOYXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlzTmF0LCAnbmFtZScsIHt2YWx1ZTogXCJpc05hdFwifSk7JGjigI1fb25jZS5pc05hdChpc05hdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE5hdCwgJ25hbWUnLCB7dmFsdWU6IFwiTmF0XCJ9KTskaOKAjV9vbmNlLk5hdChOYXQpOyAgIC8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBpc05hdChhbGxlZ2VkTnVtKXtcbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J2JpZ2ludCcpe1xucmV0dXJuIGFsbGVnZWROdW0+PTA7XG4gfVxuaWYodHlwZW9mIGFsbGVnZWROdW0hPT0nbnVtYmVyJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5yZXR1cm4gTnVtYmVyLmlzU2FmZUludGVnZXIoYWxsZWdlZE51bSkmJmFsbGVnZWROdW0+PTA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gTmF0KGFsbGVnZWROdW0pe1xuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nYmlnaW50Jyl7XG5pZihhbGxlZ2VkTnVtPDApe1xudGhyb3cgUmFuZ2VFcnJvciggYCR7YWxsZWdlZE51bX0gaXMgbmVnYXRpdmVgKTtcbiB9XG5yZXR1cm4gYWxsZWdlZE51bTtcbiB9XG5cbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J251bWJlcicpe1xuaWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGFsbGVnZWROdW0pKXtcbnRocm93IFJhbmdlRXJyb3IoIGAke2FsbGVnZWROdW19IGlzIG5vdCBhIHNhZmUgaW50ZWdlcmApO1xuIH1cbmlmKGFsbGVnZWROdW08MCl7XG50aHJvdyBSYW5nZUVycm9yKCBgJHthbGxlZ2VkTnVtfSBpcyBuZWdhdGl2ZWApO1xuIH1cbnJldHVybiBCaWdJbnQoYWxsZWdlZE51bSk7XG4gfVxuXG50aHJvdyBUeXBlRXJyb3IoXG4gYCR7YWxsZWdlZE51bX0gaXMgYSAke3R5cGVvZiBhbGxlZ2VkTnVtfSBidXQgbXVzdCBiZSBhIGJpZ2ludCBvciBhIG51bWJlcmApO1xuXG4gfVxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNOYXQiOlsiaXNOYXQiXSwiTmF0IjpbIk5hdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAt4qeYRAoAAEQKAAAgAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvaXRlci1oZWxwZXJzLmpzIiwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3NyYy9lcnJvci5qcyIsIi4vc3JjL3JlbW90YWJsZS5qcyIsIi4vc3JjL3N5bWJvbC5qcyIsIi4vc3JjL3N0cmluZy5qcyIsIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIiwiLi9zcmMvbWFrZVRhZ2dlZC5qcyIsIi4vc3JjL21ha2UtZmFyLmpzIiwiLi9zcmMvdHlwZUd1YXJkcy5qcyIsIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiRmFyIiwiRmFyIiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJmaWx0ZXJJdGVyYWJsZSIsImZpbHRlckl0ZXJhYmxlIiwiaXNFcnJvckxpa2UiLCJpc0Vycm9yTGlrZSIsImlzT2JqZWN0IiwiaXNPYmplY3QiLCJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSIsImlzUGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIixudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9zcmMvaXRlci1oZWxwZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvZXJyb3IuanNcIiwgW11dLFtcIi4vc3JjL3JlbW90YWJsZS5qc1wiLCBbXV0sW1wiLi9zcmMvc3ltYm9sLmpzXCIsIFtdXSxbXCIuL3NyYy9zdHJpbmcuanNcIiwgW11dLFtcIi4vc3JjL3Bhc3NTdHlsZU9mLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlVGFnZ2VkLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlLWZhci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2l0ZXItaGVscGVycy5qcyI6W1sibWFwSXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLFsiZmlsdGVySXRlcmFibGUiLCJmaWx0ZXJJdGVyYWJsZSJdXSwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiOltbIlBBU1NfU1RZTEUiLCJQQVNTX1NUWUxFIl0sWyJpc09iamVjdCIsImlzT2JqZWN0Il0sWyJhc3NlcnRDaGVja2VyIiwiYXNzZXJ0Q2hlY2tlciJdLFsiZ2V0VGFnIiwiZ2V0VGFnIl0sWyJoYXNPd25Qcm9wZXJ0eU9mIiwiaGFzT3duUHJvcGVydHlPZiJdXSwiLi9zcmMvZXJyb3IuanMiOltbImdldEVycm9yQ29uc3RydWN0b3IiLCJnZXRFcnJvckNvbnN0cnVjdG9yIl0sWyJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIl1dLCIuL3NyYy9yZW1vdGFibGUuanMiOltbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXV0sIi4vc3JjL3N5bWJvbC5qcyI6W1siYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLFsiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiXSxbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCIsIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLFsicGFzc2FibGVTeW1ib2xGb3JOYW1lIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl1dLCIuL3NyYy9zdHJpbmcuanMiOltbImlzV2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLFsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0UGFzc2FibGVTdHJpbmciXV0sIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjpbWyJwYXNzU3R5bGVPZiIsInBhc3NTdHlsZU9mIl0sWyJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSJdLFsiYXNzZXJ0UGFzc2FibGUiLCJhc3NlcnRQYXNzYWJsZSJdLFsidG9QYXNzYWJsZUVycm9yIiwidG9QYXNzYWJsZUVycm9yIl0sWyJ0b1Rocm93YWJsZSIsInRvVGhyb3dhYmxlIl1dLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIjpbWyJtYWtlVGFnZ2VkIiwibWFrZVRhZ2dlZCJdXSwiLi9zcmMvbWFrZS1mYXIuanMiOltbIlJlbW90YWJsZSIsIlJlbW90YWJsZSJdLFsiRmFyIiwiRmFyIl0sWyJUb0ZhckZ1bmN0aW9uIiwiVG9GYXJGdW5jdGlvbiJdLFsiR0VUX01FVEhPRF9OQU1FUyIsIkdFVF9NRVRIT0RfTkFNRVMiXV0sIi4vc3JjL3R5cGVHdWFyZHMuanMiOltbImFzc2VydFJlY29yZCIsImFzc2VydFJlY29yZCJdLFsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5Il0sWyJhc3NlcnRSZW1vdGFibGUiLCJhc3NlcnRSZW1vdGFibGUiXSxbImlzUmVtb3RhYmxlIiwiaXNSZW1vdGFibGUiXSxbImlzUmVjb3JkIiwiaXNSZWNvcmQiXSxbImlzQ29weUFycmF5IiwiaXNDb3B5QXJyYXkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAP4Vn+tgBgAAYAYAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvY29weUFycmF5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5QXJyYXlIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsYXNzZXJ0Q2hlY2tlcixnZXRPd25EYXRhRGVzY3JpcHRvcjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRo4oCNX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRo4oCNX2EgPT4gKGdldE93bkRhdGFEZXNjcmlwdG9yID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNvbnN0e2dldFByb3RvdHlwZU9mfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheSxwcm90b3R5cGU6YXJyYXlQcm90b3R5cGV9PUFycmF5O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjYW5CZVZhbGlkPShjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+XG5pc0FycmF5KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmY2hlY2soZmFsc2UsWCBgQXJyYXkgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIENvcHlBcnJheUhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidjb3B5QXJyYXknLFxuXG5jYW5CZVZhbGlkLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jYW5CZVZhbGlkKGNhbmRpZGF0ZSxhc3NlcnRDaGVja2VyKTtcbmdldFByb3RvdHlwZU9mKGNhbmRpZGF0ZSk9PT1hcnJheVByb3RvdHlwZXx8XG5hc3NlcnQuZmFpbChYIGBNYWxmb3JtZWQgYXJyYXk6ICR7Y2FuZGlkYXRlfWAsVHlwZUVycm9yKTtcbi8vXG4vL1xuY29uc3QgbGVuPS8qICAgICAgICAgICAgICAgICAqL1xuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLCdsZW5ndGgnLGZhbHNlLGFzc2VydENoZWNrZXIpLnZhbHVlO1xuXG4vL1xuLy9cbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xucGFzc1N0eWxlT2ZSZWN1cihcbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSxpLHRydWUsYXNzZXJ0Q2hlY2tlcikudmFsdWUpO1xuXG4gfVxuLy9cbm93bktleXMoY2FuZGlkYXRlKS5sZW5ndGg9PT1sZW4rMXx8XG5hc3NlcnQuZmFpbChYIGBBcnJheXMgbXVzdCBub3QgaGF2ZSBub24taW5kZXhlczogJHtjYW5kaWRhdGV9YCxUeXBlRXJyb3IpO1xuIH19KTskaOKAjV9vbmNlLkNvcHlBcnJheUhlbHBlcihDb3B5QXJyYXlIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQ29weUFycmF5SGVscGVyIjpbIkNvcHlBcnJheUhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACkqY3rNwgAADcIAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL2NvcHlSZWNvcmQuanN7ImltcG9ydHMiOlsiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbIkNvcHlSZWNvcmRIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsY2FuQmVNZXRob2QsZ2V0T3duRGF0YURlc2NyaXB0b3IsQ1g7JGjigI1faW1wb3J0cyhbW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRo4oCNX2EpXV0sW1wiY2FuQmVNZXRob2RcIiwgWyRo4oCNX2EgPT4gKGNhbkJlTWV0aG9kID0gJGjigI1fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjigI1fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaOKAjV9hKV1dLFtcIkNYXCIsIFskaOKAjV9hID0+IChDWCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0UHJvdG90eXBlT2YscHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgY2hlY2tPYmplY3RQcm90b3R5cGU9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09b2JqZWN0UHJvdG90eXBlfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBSZWNvcmRzIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBjaGVja1Byb3BlcnR5Q2FuQmVWYWxpZD0oY2FuZGlkYXRlLGtleSx2YWx1ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG4odHlwZW9mIGtleT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUmVjb3JkcyBjYW4gb25seSBoYXZlIHN0cmluZy1uYW1lZCBwcm9wZXJ0aWVzOiAke2NhbmRpZGF0ZX1gKSYmKFxuIWNhbkJlTWV0aG9kKHZhbHVlKXx8XG4hIWNoZWNrJiZcbi8vXG5DWChcbmNoZWNrKVxuIGBSZWNvcmRzIGNhbm5vdCBjb250YWluIG5vbi1mYXIgZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBtYXkgYmUgbWV0aG9kcyBvZiBhbiBpbXBsaWNpdCBSZW1vdGFibGU6ICR7Y2FuZGlkYXRlfWApKTtcblxuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgQ29weVJlY29yZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidjb3B5UmVjb3JkJyxcblxuY2FuQmVWYWxpZDooY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbmNoZWNrT2JqZWN0UHJvdG90eXBlKGNhbmRpZGF0ZSxjaGVjaykmJlxuLy9cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkuZXZlcnkoKGtleSk9PlxuY2hlY2tQcm9wZXJ0eUNhbkJlVmFsaWQoY2FuZGlkYXRlLGtleSxjYW5kaWRhdGVba2V5XSxjaGVjaykpKTtcblxuXG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tPYmplY3RQcm90b3R5cGUoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuLy9cbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoY2FuZGlkYXRlKSl7XG5jb25zdHt2YWx1ZX09Z2V0T3duRGF0YURlc2NyaXB0b3IoXG5jYW5kaWRhdGUsXG5uYW1lLFxudHJ1ZSxcbmFzc2VydENoZWNrZXIpO1xuXG5jaGVja1Byb3BlcnR5Q2FuQmVWYWxpZChjYW5kaWRhdGUsbmFtZSx2YWx1ZSxhc3NlcnRDaGVja2VyKTtcbnBhc3NTdHlsZU9mUmVjdXIodmFsdWUpO1xuIH1cbiB9fSk7JGjigI1fb25jZS5Db3B5UmVjb3JkSGVscGVyKENvcHlSZWNvcmRIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQ29weVJlY29yZEhlbHBlciI6WyJDb3B5UmVjb3JkSGVscGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMZ9Al1sCgAAbAoAAC4AAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9wcm9taXNlLWtpdCIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3Bhc3NTdHlsZU9mLmpzIiwiLi9tYWtlVGFnZ2VkLmpzIl0sImV4cG9ydHMiOlsiZGVlcGx5RnVsZmlsbGVkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRSxpc1Byb21pc2UsZ2V0VGFnLGlzT2JqZWN0LHBhc3NTdHlsZU9mLG1ha2VUYWdnZWQ7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaOKAjV9hID0+IChYID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjigI1fYSA9PiAoaXNQcm9taXNlID0gJGjigI1fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImdldFRhZ1wiLCBbJGjigI1fYSA9PiAoZ2V0VGFnID0gJGjigI1fYSldXSxbXCJpc09iamVjdFwiLCBbJGjigI1fYSA9PiAoaXNPYmplY3QgPSAkaOKAjV9hKV1dXV0sW1wiLi9wYXNzU3R5bGVPZi5qc1wiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXV1dLFtcIi4vbWFrZVRhZ2dlZC5qc1wiLCBbW1wibWFrZVRhZ2dlZFwiLCBbJGjigI1fYSA9PiAobWFrZVRhZ2dlZCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLypcblxuICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtmcm9tRW50cmllc309T2JqZWN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWVwbHlGdWxmaWxsZWQ9YXN5bmModmFsKT0+e1xuLy9cbi8vXG4vL1xuXG5pZighaXNPYmplY3QodmFsKSl7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi92YWwpO1xuIH1cbmlmKGlzUHJvbWlzZSh2YWwpKXtcbnJldHVybiBFLndoZW4odmFsLChub25wKT0+ZGVlcGx5RnVsZmlsbGVkKG5vbnApKTtcbiB9XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdjb3B5UmVjb3JkJzp7XG5jb25zdCByZWM9LyogICAgICAgICAgICAgICAgICAgICAqL3ZhbDtcbmNvbnN0IG5hbWVzPS8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhyZWMpO1xuY29uc3QgdmFsUHM9bmFtZXMubWFwKChuYW1lKT0+ZGVlcGx5RnVsZmlsbGVkKHJlY1tuYW1lXSkpO1xuLy9cbnJldHVybiBFLndoZW4oUHJvbWlzZS5hbGwodmFsUHMpLCh2YWxzKT0+XG5oYXJkZW4oZnJvbUVudHJpZXModmFscy5tYXAoKGMsaSk9PltuYW1lc1tpXSxjXSkpKSk7XG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuY29uc3QgYXJyPS8qICAgICAgICAgICAgICAgICAgICAqL3ZhbDtcbmNvbnN0IHZhbFBzPWFyci5tYXAoKHApPT5kZWVwbHlGdWxmaWxsZWQocCkpO1xuLy9cbnJldHVybiBFLndoZW4oUHJvbWlzZS5hbGwodmFsUHMpLCh2YWxzKT0+aGFyZGVuKHZhbHMpKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGdkPS8qICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCB0YWc9Z2V0VGFnKHRnZCk7XG4vL1xucmV0dXJuIEUud2hlbihkZWVwbHlGdWxmaWxsZWQodGdkLnBheWxvYWQpLChwYXlsb2FkKT0+XG5tYWtlVGFnZ2VkKHRhZyxwYXlsb2FkKSk7XG5cbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xuY29uc3QgcmVtPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL3ZhbDtcbi8vXG5yZXR1cm4gcmVtO1xuIH1cbmNhc2UnZXJyb3InOntcbmNvbnN0IGVycj0vKiAgICAgICAgICAgICAgICAqL3ZhbDtcbi8vXG5yZXR1cm4gZXJyO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xuY29uc3QgcHJvbT0vKiAgICAgICAgICAgICAgICAgICovIC8qICAgICAgICAgICAgICAgICAgKi92YWw7XG5yZXR1cm4gRS53aGVuKHByb20sKG5vbnApPT5kZWVwbHlGdWxmaWxsZWQobm9ucCkpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoWCBgVW5leHBlY3RlZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9OyRo4oCNX29uY2UuZGVlcGx5RnVsZmlsbGVkKGRlZXBseUZ1bGZpbGxlZCk7XG5oYXJkZW4oZGVlcGx5RnVsZmlsbGVkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZXBseUZ1bGZpbGxlZCI6WyJkZWVwbHlGdWxmaWxsZWQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAoHX1XEQSAABEEgAAJAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9lcnJvci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiRXJyb3JIZWxwZXIiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciIsImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciIsImlzRXJyb3JMaWtlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxLGFzc2VydENoZWNrZXIsQ1g7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaOKAjV9hKV1dLFtcIkNYXCIsIFskaOKAjV9hID0+IChDWCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e2dldFByb3RvdHlwZU9mLGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMsaGFzT3duLGVudHJpZXN9PU9iamVjdDtcblxuLy9cbi8vXG5jb25zdCBlcnJvckNvbnN0cnVjdG9ycz1uZXcgTWFwKFxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbltcblsnRXJyb3InLEVycm9yXSxcblsnRXZhbEVycm9yJyxFdmFsRXJyb3JdLFxuWydSYW5nZUVycm9yJyxSYW5nZUVycm9yXSxcblsnUmVmZXJlbmNlRXJyb3InLFJlZmVyZW5jZUVycm9yXSxcblsnU3ludGF4RXJyb3InLFN5bnRheEVycm9yXSxcblsnVHlwZUVycm9yJyxUeXBlRXJyb3JdLFxuWydVUklFcnJvcicsVVJJRXJyb3JdXG5cbi8vXG4vL1xuLy9cbi8vXG5dKTtcblxuXG5pZih0eXBlb2YgQWdncmVnYXRlRXJyb3IhPT0ndW5kZWZpbmVkJyl7XG4vL1xuZXJyb3JDb25zdHJ1Y3RvcnMuc2V0KCdBZ2dyZWdhdGVFcnJvcicsQWdncmVnYXRlRXJyb3IpO1xuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRFcnJvckNvbnN0cnVjdG9yPShuYW1lKT0+ZXJyb3JDb25zdHJ1Y3RvcnMuZ2V0KG5hbWUpOyRo4oCNX29uY2UuZ2V0RXJyb3JDb25zdHJ1Y3RvcihnZXRFcnJvckNvbnN0cnVjdG9yKTtcbmhhcmRlbihnZXRFcnJvckNvbnN0cnVjdG9yKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tFcnJvckxpa2U9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG4vL1xucmV0dXJuKFxuY2FuZGlkYXRlIGluc3RhbmNlb2YgRXJyb3J8fFxuISFjaGVjayYmQ1goY2hlY2spIGBFcnJvciBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCk7XG5cbiB9O1xuaGFyZGVuKGNoZWNrRXJyb3JMaWtlKTtcbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzRXJyb3JMaWtlPShjYW5kaWRhdGUpPT5jaGVja0Vycm9yTGlrZShjYW5kaWRhdGUpOyRo4oCNX29uY2UuaXNFcnJvckxpa2UoaXNFcnJvckxpa2UpO1xuaGFyZGVuKGlzRXJyb3JMaWtlKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0oXG5wcm9wTmFtZSxcbmRlc2MsXG5wYXNzU3R5bGVPZlJlY3VyLFxuY2hlY2s9dW5kZWZpbmVkKT0+XG57XG5pZihkZXNjLmVudW1lcmFibGUpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3Qgbm90IGJlIGVudW1lcmFibGU6ICR7ZGVzY31gKTtcblxuIH1cbmlmKCFoYXNPd24oZGVzYywndmFsdWUnKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIGRhdGEgcHJvcGVydHk6ICR7ZGVzY31gKTtcblxuIH1cbmNvbnN0e3ZhbHVlfT1kZXNjO1xuc3dpdGNoKHByb3BOYW1lKXtcbmNhc2UnbWVzc2FnZSc6XG5jYXNlJ3N0YWNrJzp7XG5yZXR1cm4oXG50eXBlb2YgdmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZzogJHt2YWx1ZX1gKTtcblxuIH1cbmNhc2UnY2F1c2UnOntcbi8vXG5yZXR1cm4gY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IodmFsdWUscGFzc1N0eWxlT2ZSZWN1cixjaGVjayk7XG4gfVxuY2FzZSdlcnJvcnMnOntcbmlmKCFBcnJheS5pc0FycmF5KHZhbHVlKXx8cGFzc1N0eWxlT2ZSZWN1cih2YWx1ZSkhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUGFzc2FibGUgRXJyb3IgJHtxKFxucHJvcE5hbWUpXG4gfSBvd24gcHJvcGVydHkgbXVzdCBiZSBhIGNvcHlBcnJheTogJHt2YWx1ZX1gKTtcblxuIH1cbnJldHVybiB2YWx1ZS5ldmVyeSgoZXJyKT0+XG4vL1xuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoZXJyLHBhc3NTdHlsZU9mUmVjdXIsY2hlY2spKTtcblxuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7XG4gfX1cblxucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yIGhhcyBleHRyYSB1bnBhc3NlZCBwcm9wZXJ0eSAke3EocHJvcE5hbWUpfWApO1xuXG4gfTskaOKAjV9vbmNlLmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKTtcbmhhcmRlbihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yPShcbmNhbmRpZGF0ZSxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaz11bmRlZmluZWQpPT5cbntcbmlmKCFjaGVja0Vycm9yTGlrZShjYW5kaWRhdGUsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCBwcm90bz1nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpO1xuY29uc3R7bmFtZX09cHJvdG87XG5jb25zdCBlcnJDb25zdHJ1Y3Rvcj1nZXRFcnJvckNvbnN0cnVjdG9yKG5hbWUpO1xuaWYoZXJyQ29uc3RydWN0b3I9PT11bmRlZmluZWR8fGVyckNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PXByb3RvKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUGFzc2FibGUgRXJyb3IgbXVzdCBpbmhlcml0IGZyb20gYW4gZXJyb3IgY2xhc3MgLnByb3RvdHlwZTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9XG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGNhbmRpZGF0ZSk7XG5pZighKCdtZXNzYWdlJ2luIGRlc2NzKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFBhc3NhYmxlIEVycm9yIG11c3QgaGF2ZSBhbiBvd24gXCJtZXNzYWdlXCIgc3RyaW5nIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKTtcblxuIH1cblxucmV0dXJuIGVudHJpZXMoZGVzY3MpLmV2ZXJ5KChbcHJvcE5hbWUsZGVzY10pPT5cbmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKFxucHJvcE5hbWUsXG5kZXNjLFxucGFzc1N0eWxlT2ZSZWN1cixcbmNoZWNrKSk7XG5cblxuIH07JGjigI1fb25jZS5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcik7XG5oYXJkZW4oY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBFcnJvckhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidlcnJvcicsXG5cbmNhbkJlVmFsaWQ6Y2hlY2tFcnJvckxpa2UsXG5cbmFzc2VydFZhbGlkOihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cik9PlxuY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IoY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIsYXNzZXJ0Q2hlY2tlcil9KTskaOKAjV9vbmNlLkVycm9ySGVscGVyKEVycm9ySGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldEVycm9yQ29uc3RydWN0b3IiOlsiZ2V0RXJyb3JDb25zdHJ1Y3RvciJdLCJpc0Vycm9yTGlrZSI6WyJpc0Vycm9yTGlrZSJdLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyI6WyJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyJdLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciI6WyJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciJdLCJFcnJvckhlbHBlciI6WyJFcnJvckhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABUGK4pmAUAAJgFAAArAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL2l0ZXItaGVscGVycy5qc3siaW1wb3J0cyI6WyIuL21ha2UtZmFyLmpzIl0sImV4cG9ydHMiOlsiZmlsdGVySXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFyOyRo4oCNX2ltcG9ydHMoW1tcIi4vbWFrZS1mYXIuanNcIiwgW1tcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYXBJdGVyYWJsZT0oYmFzZUl0ZXJhYmxlLGZ1bmMpPT5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5GYXIoJ21hcHBlZCBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmNvbnN0IGJhc2VJdGVyYXRvcj1iYXNlSXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIEZhcignbWFwcGVkIGl0ZXJhdG9yJyx7XG5uZXh0OigpPT57XG5jb25zdHt2YWx1ZTpiYXNlVmFsdWUsZG9uZX09YmFzZUl0ZXJhdG9yLm5leHQoKTtcbmNvbnN0IHZhbHVlPWRvbmU/YmFzZVZhbHVlOmZ1bmMoYmFzZVZhbHVlKTtcbnJldHVybiBoYXJkZW4oe3ZhbHVlLGRvbmV9KTtcbiB9fSk7XG5cbiB9fSk7JGjigI1fb25jZS5tYXBJdGVyYWJsZShtYXBJdGVyYWJsZSk7XG5cbmhhcmRlbihtYXBJdGVyYWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmaWx0ZXJJdGVyYWJsZT0oYmFzZUl0ZXJhYmxlLHByZWQpPT5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5GYXIoJ2ZpbHRlcmVkIGl0ZXJhYmxlJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgYmFzZUl0ZXJhdG9yPWJhc2VJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gRmFyKCdmaWx0ZXJlZCBpdGVyYXRvcicse1xubmV4dDooKT0+e1xuZm9yKDs7KXtcbmNvbnN0IHJlc3VsdD1iYXNlSXRlcmF0b3IubmV4dCgpO1xuY29uc3R7dmFsdWUsZG9uZX09cmVzdWx0O1xuaWYoZG9uZXx8cHJlZCh2YWx1ZSkpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuIH19KTtcblxuIH19KTskaOKAjV9vbmNlLmZpbHRlckl0ZXJhYmxlKGZpbHRlckl0ZXJhYmxlKTtcblxuaGFyZGVuKGZpbHRlckl0ZXJhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1hcEl0ZXJhYmxlIjpbIm1hcEl0ZXJhYmxlIl0sImZpbHRlckl0ZXJhYmxlIjpbImZpbHRlckl0ZXJhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOUGN7laEQAAWhEAACcAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvbWFrZS1mYXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3JlbW90YWJsZS5qcyJdLCJleHBvcnRzIjpbIkZhciIsIkdFVF9NRVRIT0RfTkFNRVMiLCJSZW1vdGFibGUiLCJUb0ZhckZ1bmN0aW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRNZXRob2ROYW1lcyxxLEZhaWwsYXNzZXJ0Q2hlY2tlcixQQVNTX1NUWUxFLGFzc2VydElmYWNlLGdldEludGVyZmFjZU9mLFJlbW90YWJsZUhlbHBlcjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjigI1fYSA9PiAoZ2V0TWV0aG9kTmFtZXMgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaOKAjV9hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRo4oCNX2EgPT4gKFBBU1NfU1RZTEUgPSAkaOKAjV9hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcImFzc2VydElmYWNlXCIsIFskaOKAjV9hID0+IChhc3NlcnRJZmFjZSA9ICRo4oCNX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRo4oCNX2EgPT4gKGdldEludGVyZmFjZU9mID0gJGjigI1fYSldXSxbXCJSZW1vdGFibGVIZWxwZXJcIiwgWyRo4oCNX2EgPT4gKFJlbW90YWJsZUhlbHBlciA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7cHJvdG90eXBlOmZ1bmN0aW9uUHJvdG90eXBlfT1GdW5jdGlvbjtcbmNvbnN0e1xuZ2V0UHJvdG90eXBlT2YsXG5zZXRQcm90b3R5cGVPZixcbmNyZWF0ZSxcbmlzRnJvemVuLFxucHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09XG5PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVJlbW90YWJsZVByb3RvPShyZW1vdGFibGUsaWZhY2UpPT57XG5sZXQgb2xkUHJvdG89Z2V0UHJvdG90eXBlT2YocmVtb3RhYmxlKTtcbmlmKHR5cGVvZiByZW1vdGFibGU9PT0nb2JqZWN0Jyl7XG5pZihvbGRQcm90bz09PW51bGwpe1xub2xkUHJvdG89b2JqZWN0UHJvdG90eXBlO1xuIH1cbm9sZFByb3RvPT09b2JqZWN0UHJvdG90eXBlfHxcbkZhaWwgYEZvciBub3csIHJlbW90YWJsZXMgY2Fubm90IGluaGVyaXQgZnJvbSBhbnl0aGluZyB1bnVzdWFsLCBpbiAke3JlbW90YWJsZX1gO1xuIH1lbHNlIGlmKHR5cGVvZiByZW1vdGFibGU9PT0nZnVuY3Rpb24nKXtcbm9sZFByb3RvIT09bnVsbHx8XG5GYWlsIGBPcmlnaW5hbCBmdW5jdGlvbiBtdXN0IG5vdCBpbmhlcml0IGZyb20gbnVsbDogJHtyZW1vdGFibGV9YDtcbm9sZFByb3RvPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuZ2V0UHJvdG90eXBlT2Yob2xkUHJvdG8pPT09ZnVuY3Rpb25Qcm90b3R5cGV8fFxuRmFpbCBgRmFyIGZ1bmN0aW9ucyBtdXN0IG9yaWdpbmFsbHkgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZSwgaW4gJHtyZW1vdGFibGV9YDtcbiB9ZWxzZXtcbkZhaWwgYHVucmVjb2duaXplZCB0eXBlb2YgJHtyZW1vdGFibGV9YDtcbiB9XG5yZXR1cm4gaGFyZGVuKFxuY3JlYXRlKG9sZFByb3RvLHtcbltQQVNTX1NUWUxFXTp7dmFsdWU6J3JlbW90YWJsZSd9LFxuW1N5bWJvbC50b1N0cmluZ1RhZ106e3ZhbHVlOmlmYWNlfX0pKTtcblxuXG4gfTtcblxuY29uc3QgYXNzZXJ0Q2FuQmVSZW1vdGFibGU9KGNhbmRpZGF0ZSk9PlxuUmVtb3RhYmxlSGVscGVyLmNhbkJlVmFsaWQoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgUmVtb3RhYmxlPShcbi8vXG5pZmFjZT0nUmVtb3RhYmxlJyxcbnByb3BzPXVuZGVmaW5lZCxcbnJlbW90YWJsZT0vKiAgICAgICAgICAgICove30pPT5cbntcbmFzc2VydElmYWNlKGlmYWNlKTtcbmFzc2VydChpZmFjZSk7XG4vL1xuLy9cbnByb3BzPT09dW5kZWZpbmVkfHxGYWlsIGBSZW1vdGFibGUgcHJvcHMgbm90IHlldCBpbXBsZW1lbnRlZCAke3Byb3BzfWA7XG5cbi8vXG5hc3NlcnRDYW5CZVJlbW90YWJsZShyZW1vdGFibGUpO1xuXG4vL1xuIShQQVNTX1NUWUxFIGluIHJlbW90YWJsZSl8fFxuRmFpbCBgUmVtb3RhYmxlICR7cmVtb3RhYmxlfSBpcyBhbHJlYWR5IG1hcmtlZCBhcyBhICR7cShcbnJlbW90YWJsZVtQQVNTX1NUWUxFXSlcbiB9YDtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuaGFyZGVuLmlzRmFrZXx8XG4vL1xuIWlzRnJvemVuKHJlbW90YWJsZSl8fFxuRmFpbCBgUmVtb3RhYmxlICR7cmVtb3RhYmxlfSBpcyBhbHJlYWR5IGZyb3plbmA7XG5jb25zdCByZW1vdGFibGVQcm90bz1tYWtlUmVtb3RhYmxlUHJvdG8ocmVtb3RhYmxlLGlmYWNlKTtcblxuLy9cbi8vXG5jb25zdCBtdXRhdGVIYXJkZW5BbmRDaGVjaz0odGFyZ2V0KT0+e1xuLy9cbnNldFByb3RvdHlwZU9mKHRhcmdldCxyZW1vdGFibGVQcm90byk7XG5oYXJkZW4odGFyZ2V0KTtcbmFzc2VydENhbkJlUmVtb3RhYmxlKHRhcmdldCk7XG4gfTtcblxuLy9cbm11dGF0ZUhhcmRlbkFuZENoZWNrKHt9KTtcblxuLy9cbm11dGF0ZUhhcmRlbkFuZENoZWNrKHJlbW90YWJsZSk7XG5cbi8vXG4vL1xuYXNzZXJ0KGlmYWNlIT09dW5kZWZpbmVkKTsvL1xucmV0dXJuICgvKiAgICAgICAgICAgICAgKi9yZW1vdGFibGUpO1xuIH07JGjigI1fb25jZS5SZW1vdGFibGUoUmVtb3RhYmxlKTtcbmhhcmRlbihSZW1vdGFibGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgR0VUX01FVEhPRF9OQU1FUz0nX19nZXRNZXRob2ROYW1lc19fJztcblxuLypcblxuXG5cblxuICovJGjigI1fb25jZS5HRVRfTUVUSE9EX05BTUVTKEdFVF9NRVRIT0RfTkFNRVMpO1xuY29uc3QgZ2V0TWV0aG9kTmFtZXNNZXRob2Q9aGFyZGVuKHtcbltHRVRfTUVUSE9EX05BTUVTXSgpe1xucmV0dXJuIGdldE1ldGhvZE5hbWVzKHRoaXMpO1xuIH19KVtcbkdFVF9NRVRIT0RfTkFNRVNdO1xuXG5jb25zdCBnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3I9aGFyZGVuKHtcbnZhbHVlOmdldE1ldGhvZE5hbWVzTWV0aG9kLFxuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTpmYWxzZSxcbndyaXRhYmxlOmZhbHNlfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEZhcj0oZmFyTmFtZSxyZW1vdGFibGU9dW5kZWZpbmVkKT0+e1xuY29uc3Qgcj1yZW1vdGFibGU9PT11bmRlZmluZWQ/LyogICAgICAgICAgICAqL3t9OnJlbW90YWJsZTtcbmlmKHR5cGVvZiByPT09J29iamVjdCcmJiEoR0VUX01FVEhPRF9OQU1FUyBpbiByKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsR0VUX01FVEhPRF9OQU1FUyxnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3IpO1xuIH1cbnJldHVybiBSZW1vdGFibGUoIGBBbGxlZ2VkOiAke2Zhck5hbWV9YCx1bmRlZmluZWQscik7XG4gfTskaOKAjV9vbmNlLkZhcihGYXIpO1xuaGFyZGVuKEZhcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBUb0ZhckZ1bmN0aW9uPShmYXJOYW1lLGZ1bmMpPT57XG5pZihnZXRJbnRlcmZhY2VPZihmdW5jKSE9PXVuZGVmaW5lZCl7XG4vL1xucmV0dXJuIGZ1bmM7XG4gfVxuLy9cbnJldHVybiBGYXIoZmFyTmFtZSwoLi4uYXJncyk9PmZ1bmMoLi4uYXJncykpO1xuIH07JGjigI1fb25jZS5Ub0ZhckZ1bmN0aW9uKFRvRmFyRnVuY3Rpb24pO1xuaGFyZGVuKFRvRmFyRnVuY3Rpb24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUmVtb3RhYmxlIjpbIlJlbW90YWJsZSJdLCJHRVRfTUVUSE9EX05BTUVTIjpbIkdFVF9NRVRIT0RfTkFNRVMiXSwiRmFyIjpbIkZhciJdLCJUb0ZhckZ1bmN0aW9uIjpbIlRvRmFyRnVuY3Rpb24iXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAbmPiWYwEAACMBAAAKQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9tYWtlVGFnZ2VkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3Bhc3NTdHlsZU9mLmpzIl0sImV4cG9ydHMiOlsibWFrZVRhZ2dlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxQQVNTX1NUWUxFLGFzc2VydFBhc3NhYmxlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJQQVNTX1NUWUxFXCIsIFskaOKAjV9hID0+IChQQVNTX1NUWUxFID0gJGjigI1fYSldXV1dLFtcIi4vcGFzc1N0eWxlT2YuanNcIiwgW1tcImFzc2VydFBhc3NhYmxlXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXNzYWJsZSA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbmNvbnN0e2NyZWF0ZSxwcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1PYmplY3Q7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVRhZ2dlZD0odGFnLHBheWxvYWQpPT57XG50eXBlb2YgdGFnPT09J3N0cmluZyd8fFxuRmFpbCBgVGhlIHRhZyBvZiBhIHRhZ2dlZCByZWNvcmQgbXVzdCBiZSBhIHN0cmluZzogJHt0YWd9YDtcbmFzc2VydFBhc3NhYmxlKGhhcmRlbihwYXlsb2FkKSk7XG5yZXR1cm4gaGFyZGVuKFxuY3JlYXRlKG9iamVjdFByb3RvdHlwZSx7XG5bUEFTU19TVFlMRV06e3ZhbHVlOid0YWdnZWQnfSxcbltTeW1ib2wudG9TdHJpbmdUYWddOnt2YWx1ZTp0YWd9LFxucGF5bG9hZDp7dmFsdWU6cGF5bG9hZCxlbnVtZXJhYmxlOnRydWV9fSkpO1xuXG5cbiB9OyRo4oCNX29uY2UubWFrZVRhZ2dlZChtYWtlVGFnZ2VkKTtcbmhhcmRlbihtYWtlVGFnZ2VkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VUYWdnZWQiOlsibWFrZVRhZ2dlZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB573NZKRUAACkVAAAwAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIkNYIiwiUEFTU19TVFlMRSIsImFzc2VydENoZWNrZXIiLCJjYW5CZU1ldGhvZCIsImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiLCJjaGVja1Bhc3NTdHlsZSIsImNoZWNrVGFnUmVjb3JkIiwiZ2V0T3duRGF0YURlc2NyaXB0b3IiLCJnZXRUYWciLCJoYXNPd25Qcm9wZXJ0eU9mIiwiaXNPYmplY3QiLCJpc1R5cGVkQXJyYXkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgscTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7cHJvdG90eXBlOmZ1bmN0aW9uUHJvdG90eXBlfT1GdW5jdGlvbjtcbmNvbnN0e1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuZ2V0UHJvdG90eXBlT2YsXG5oYXNPd25Qcm9wZXJ0eTpvYmplY3RIYXNPd25Qcm9wZXJ0eSxcbmlzRnJvemVuLFxucHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09XG5PYmplY3Q7XG5jb25zdHthcHBseX09UmVmbGVjdDtcbmNvbnN0e3RvU3RyaW5nVGFnOnRvU3RyaW5nVGFnU3ltYm9sfT1TeW1ib2w7XG5cbmNvbnN0IHR5cGVkQXJyYXlQcm90b3R5cGU9Z2V0UHJvdG90eXBlT2YoVWludDhBcnJheS5wcm90b3R5cGUpO1xuY29uc3QgdHlwZWRBcnJheVRvU3RyaW5nVGFnRGVzYz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoXG50eXBlZEFycmF5UHJvdG90eXBlLFxudG9TdHJpbmdUYWdTeW1ib2wpO1xuXG5hc3NlcnQodHlwZWRBcnJheVRvU3RyaW5nVGFnRGVzYyk7XG5jb25zdCBnZXRUeXBlZEFycmF5VG9TdHJpbmdUYWc9dHlwZWRBcnJheVRvU3RyaW5nVGFnRGVzYy5nZXQ7XG5hc3NlcnQodHlwZW9mIGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZz09PSdmdW5jdGlvbicpO1xuXG5jb25zdCAgICAgICAgaGFzT3duUHJvcGVydHlPZj0ob2JqLHByb3ApPT5cbmFwcGx5KG9iamVjdEhhc093blByb3BlcnR5LG9iaixbcHJvcF0pOyRo4oCNX29uY2UuaGFzT3duUHJvcGVydHlPZihoYXNPd25Qcm9wZXJ0eU9mKTtcbmhhcmRlbihoYXNPd25Qcm9wZXJ0eU9mKTtcblxuLy9cbmNvbnN0ICAgICAgICBpc09iamVjdD0odmFsKT0+T2JqZWN0KHZhbCk9PT12YWw7JGjigI1fb25jZS5pc09iamVjdChpc09iamVjdCk7XG5oYXJkZW4oaXNPYmplY3QpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNUeXBlZEFycmF5PShvYmplY3QpPT57XG4vL1xuY29uc3QgdGFnPWFwcGx5KGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZyxvYmplY3QsW10pO1xucmV0dXJuIHRhZyE9PXVuZGVmaW5lZDtcbiB9OyRo4oCNX29uY2UuaXNUeXBlZEFycmF5KGlzVHlwZWRBcnJheSk7XG5oYXJkZW4oaXNUeXBlZEFycmF5KTtcblxuY29uc3QgICAgICAgIFBBU1NfU1RZTEU9U3ltYm9sLmZvcigncGFzc1N0eWxlJyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5QQVNTX1NUWUxFKFBBU1NfU1RZTEUpO1xuY29uc3QgICAgICAgIGNhbkJlTWV0aG9kPShmdW5jKT0+XG50eXBlb2YgZnVuYz09PSdmdW5jdGlvbicmJiEoUEFTU19TVFlMRSBpbiBmdW5jKTskaOKAjV9vbmNlLmNhbkJlTWV0aG9kKGNhbkJlTWV0aG9kKTtcbmhhcmRlbihjYW5CZU1ldGhvZCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDaGVja2VyPShjb25kLGRldGFpbHMpPT57XG5hc3NlcnQoY29uZCxkZXRhaWxzKTtcbnJldHVybiB0cnVlO1xuIH07JGjigI1fb25jZS5hc3NlcnRDaGVja2VyKGFzc2VydENoZWNrZXIpO1xuaGFyZGVuKGFzc2VydENoZWNrZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBDWD0oY2hlY2spPT57XG5jb25zdCByZWplY3Q9KFQsLi4uc3Vicyk9PmNoZWNrKGZhbHNlLFgoVCwuLi5zdWJzKSk7XG5yZXR1cm4gcmVqZWN0O1xuIH07JGjigI1fb25jZS5DWChDWCk7XG5oYXJkZW4oQ1gpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE93bkRhdGFEZXNjcmlwdG9yPShcbmNhbmRpZGF0ZSxcbnByb3BOYW1lLFxuc2hvdWxkQmVFbnVtZXJhYmxlLFxuY2hlY2spPT5cbntcbmNvbnN0IGRlc2M9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoY2FuZGlkYXRlLHByb3BOYW1lKTtcblxucmV0dXJuKGRlc2MhPT11bmRlZmluZWR8fFxuISFjaGVjayYmQ1goY2hlY2spIGAke3EocHJvcE5hbWUpfSBwcm9wZXJ0eSBleHBlY3RlZDogJHtjYW5kaWRhdGV9YCkmJihcbmhhc093blByb3BlcnR5T2YoZGVzYywndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGFjY2Vzc29yIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKSYmKFxuc2hvdWxkQmVFbnVtZXJhYmxlP1xuZGVzYy5lbnVtZXJhYmxlfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgJHtxKHByb3BOYW1lKX0gbXVzdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gOlxuIWRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3Qgbm90IGJlIGFuIGVudW1lcmFibGUgcHJvcGVydHk6ICR7Y2FuZGlkYXRlfWApP1xuZGVzYzpcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdW5kZWZpbmVkO1xuIH07JGjigI1fb25jZS5nZXRPd25EYXRhRGVzY3JpcHRvcihnZXRPd25EYXRhRGVzY3JpcHRvcik7XG5oYXJkZW4oZ2V0T3duRGF0YURlc2NyaXB0b3IpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0VGFnPSh0YWdSZWNvcmQpPT50YWdSZWNvcmRbU3ltYm9sLnRvU3RyaW5nVGFnXTskaOKAjV9vbmNlLmdldFRhZyhnZXRUYWcpO1xuaGFyZGVuKGdldFRhZyk7XG5cbmNvbnN0ICAgICAgICBjaGVja1Bhc3NTdHlsZT0ob2JqLHBhc3NTdHlsZSxleHBlY3RlZFBhc3NTdHlsZSxjaGVjayk9PntcbnJldHVybihcbnBhc3NTdHlsZT09PWV4cGVjdGVkUGFzc1N0eWxlfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBFeHBlY3RlZCAke3EoZXhwZWN0ZWRQYXNzU3R5bGUpfSwgbm90ICR7cShwYXNzU3R5bGUpfTogJHtvYmp9YCk7XG5cbiB9OyRo4oCNX29uY2UuY2hlY2tQYXNzU3R5bGUoY2hlY2tQYXNzU3R5bGUpO1xuaGFyZGVuKGNoZWNrUGFzc1N0eWxlKTtcblxuY29uc3QgbWFrZUNoZWNrVGFnUmVjb3JkPShjaGVja1Byb3RvKT0+e1xuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrVGFnUmVjb3JkPSh0YWdSZWNvcmQsZXhwZWN0ZWRQYXNzU3R5bGUsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNPYmplY3QodGFnUmVjb3JkKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgQSBub24tb2JqZWN0IGNhbm5vdCBiZSBhIHRhZ1JlY29yZDogJHt0YWdSZWNvcmR9YCkmJihcbmlzRnJvemVuKHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBIHRhZ1JlY29yZCBtdXN0IGJlIGZyb3plbjogJHt0YWdSZWNvcmR9YCkmJihcbiFpc0FycmF5KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmQ1goY2hlY2spIGBBbiBhcnJheSBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUGFzc1N0eWxlKFxudGFnUmVjb3JkLFxuZ2V0T3duRGF0YURlc2NyaXB0b3IodGFnUmVjb3JkLFBBU1NfU1RZTEUsZmFsc2UsY2hlY2spLnZhbHVlLFxuZXhwZWN0ZWRQYXNzU3R5bGUsXG5jaGVjaykmJihcblxudHlwZW9mIGdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxTeW1ib2wudG9TdHJpbmdUYWcsZmFsc2UsY2hlY2spLlxudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEEgW1N5bWJvbC50b1N0cmluZ1RhZ10tbmFtZWQgcHJvcGVydHkgbXVzdCBiZSBhIHN0cmluZzogJHt0YWdSZWNvcmR9YCkmJlxuY2hlY2tQcm90byh0YWdSZWNvcmQsZ2V0UHJvdG90eXBlT2YodGFnUmVjb3JkKSxjaGVjaykpO1xuXG4gfTtcbnJldHVybiBoYXJkZW4oY2hlY2tUYWdSZWNvcmQpO1xuIH07XG5cbmNvbnN0ICAgICAgICBjaGVja1RhZ1JlY29yZD1tYWtlQ2hlY2tUYWdSZWNvcmQoXG4odmFsLHByb3RvLGNoZWNrKT0+XG5wcm90bz09PW9iamVjdFByb3RvdHlwZXx8XG4hIWNoZWNrJiZcbmNoZWNrKGZhbHNlLFggYEEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7dmFsfWApKTskaOKAjV9vbmNlLmNoZWNrVGFnUmVjb3JkKGNoZWNrVGFnUmVjb3JkKTtcblxuaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcblxuY29uc3QgICAgICAgIGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5wcm90byE9PW51bGwmJmdldFByb3RvdHlwZU9mKHByb3RvKT09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbiEhY2hlY2smJlxuY2hlY2soXG5mYWxzZSxcblggYEZvciBmdW5jdGlvbnMsIGEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZTogJHt2YWx9YCkpOyRo4oCNX29uY2UuY2hlY2tGdW5jdGlvblRhZ1JlY29yZChjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKTtcblxuXG5oYXJkZW4oY2hlY2tGdW5jdGlvblRhZ1JlY29yZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJoYXNPd25Qcm9wZXJ0eU9mIjpbImhhc093blByb3BlcnR5T2YiXSwiaXNPYmplY3QiOlsiaXNPYmplY3QiXSwiaXNUeXBlZEFycmF5IjpbImlzVHlwZWRBcnJheSJdLCJQQVNTX1NUWUxFIjpbIlBBU1NfU1RZTEUiXSwiY2FuQmVNZXRob2QiOlsiY2FuQmVNZXRob2QiXSwiYXNzZXJ0Q2hlY2tlciI6WyJhc3NlcnRDaGVja2VyIl0sIkNYIjpbIkNYIl0sImdldE93bkRhdGFEZXNjcmlwdG9yIjpbImdldE93bkRhdGFEZXNjcmlwdG9yIl0sImdldFRhZyI6WyJnZXRUYWciXSwiY2hlY2tQYXNzU3R5bGUiOlsiY2hlY2tQYXNzU3R5bGUiXSwiY2hlY2tUYWdSZWNvcmQiOlsiY2hlY2tUYWdSZWNvcmQiXSwiY2hlY2tGdW5jdGlvblRhZ1JlY29yZCI6WyJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAD+YiUnlJAAA5SQAACoAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvcGFzc1N0eWxlT2YuanN7ImltcG9ydHMiOlsiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9jb3B5QXJyYXkuanMiLCIuL2NvcHlSZWNvcmQuanMiLCIuL3RhZ2dlZC5qcyIsIi4vZXJyb3IuanMiLCIuL3JlbW90YWJsZS5qcyIsIi4vc3ltYm9sLmpzIiwiLi9zYWZlLXByb21pc2UuanMiLCIuL3N0cmluZy5qcyJdLCJleHBvcnRzIjpbIlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIiwiYXNzZXJ0UGFzc2FibGUiLCJpc1Bhc3NhYmxlIiwicGFzc1N0eWxlT2YiLCJ0b1Bhc3NhYmxlRXJyb3IiLCJ0b1Rocm93YWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLFgsRmFpbCxxLGFubm90YXRlRXJyb3IsbWFrZUVycm9yLGlzT2JqZWN0LGlzVHlwZWRBcnJheSxQQVNTX1NUWUxFLENvcHlBcnJheUhlbHBlcixDb3B5UmVjb3JkSGVscGVyLFRhZ2dlZEhlbHBlcixFcnJvckhlbHBlcixjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyxjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcixnZXRFcnJvckNvbnN0cnVjdG9yLGlzRXJyb3JMaWtlLFJlbW90YWJsZUhlbHBlcixhc3NlcnRQYXNzYWJsZVN5bWJvbCxhc3NlcnRTYWZlUHJvbWlzZSxhc3NlcnRQYXNzYWJsZVN0cmluZzskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaOKAjV9hID0+IChpc1Byb21pc2UgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaOKAjV9hID0+IChYID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXSxbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaOKAjV9hID0+IChhbm5vdGF0ZUVycm9yID0gJGjigI1fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRo4oCNX2EgPT4gKG1ha2VFcnJvciA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJpc09iamVjdFwiLCBbJGjigI1fYSA9PiAoaXNPYmplY3QgPSAkaOKAjV9hKV1dLFtcImlzVHlwZWRBcnJheVwiLCBbJGjigI1fYSA9PiAoaXNUeXBlZEFycmF5ID0gJGjigI1fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaOKAjV9hID0+IChQQVNTX1NUWUxFID0gJGjigI1fYSldXV1dLFtcIi4vY29weUFycmF5LmpzXCIsIFtbXCJDb3B5QXJyYXlIZWxwZXJcIiwgWyRo4oCNX2EgPT4gKENvcHlBcnJheUhlbHBlciA9ICRo4oCNX2EpXV1dXSxbXCIuL2NvcHlSZWNvcmQuanNcIiwgW1tcIkNvcHlSZWNvcmRIZWxwZXJcIiwgWyRo4oCNX2EgPT4gKENvcHlSZWNvcmRIZWxwZXIgPSAkaOKAjV9hKV1dXV0sW1wiLi90YWdnZWQuanNcIiwgW1tcIlRhZ2dlZEhlbHBlclwiLCBbJGjigI1fYSA9PiAoVGFnZ2VkSGVscGVyID0gJGjigI1fYSldXV1dLFtcIi4vZXJyb3IuanNcIiwgW1tcIkVycm9ySGVscGVyXCIsIFskaOKAjV9hID0+IChFcnJvckhlbHBlciA9ICRo4oCNX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2NcIiwgWyRo4oCNX2EgPT4gKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjID0gJGjigI1fYSldXSxbXCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclwiLCBbJGjigI1fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IgPSAkaOKAjV9hKV1dLFtcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRo4oCNX2EgPT4gKGdldEVycm9yQ29uc3RydWN0b3IgPSAkaOKAjV9hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaOKAjV9hID0+IChpc0Vycm9yTGlrZSA9ICRo4oCNX2EpXV1dXSxbXCIuL3JlbW90YWJsZS5qc1wiLCBbW1wiUmVtb3RhYmxlSGVscGVyXCIsIFskaOKAjV9hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaOKAjV9hKV1dXV0sW1wiLi9zeW1ib2wuanNcIiwgW1tcImFzc2VydFBhc3NhYmxlU3ltYm9sXCIsIFskaOKAjV9hID0+IChhc3NlcnRQYXNzYWJsZVN5bWJvbCA9ICRo4oCNX2EpXV1dXSxbXCIuL3NhZmUtcHJvbWlzZS5qc1wiLCBbW1wiYXNzZXJ0U2FmZVByb21pc2VcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFNhZmVQcm9taXNlID0gJGjigI1fYSldXV1dLFtcIi4vc3RyaW5nLmpzXCIsIFtbXCJhc3NlcnRQYXNzYWJsZVN0cmluZ1wiLCBbJGjigI1fYSA9PiAoYXNzZXJ0UGFzc2FibGVTdHJpbmcgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNGcm96ZW4sZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyx2YWx1ZXN9PU9iamVjdDtcblxuLypcblxuXG4gKi9cblxuY29uc3QgbWFrZUhlbHBlclRhYmxlPShwYXNzU3R5bGVIZWxwZXJzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBIZWxwZXJUYWJsZT17XG5fX3Byb3RvX186bnVsbCxcbmNvcHlBcnJheTp1bmRlZmluZWQsXG5jb3B5UmVjb3JkOnVuZGVmaW5lZCxcbnRhZ2dlZDp1bmRlZmluZWQsXG5lcnJvcjp1bmRlZmluZWQsXG5yZW1vdGFibGU6dW5kZWZpbmVkfTtcblxuZm9yKGNvbnN0IGhlbHBlciBvZiBwYXNzU3R5bGVIZWxwZXJzKXtcbmNvbnN0e3N0eWxlTmFtZX09aGVscGVyO1xuc3R5bGVOYW1lIGluIEhlbHBlclRhYmxlfHxGYWlsIGBVbnJlY29nbml6ZWQgaGVscGVyOiAke3Eoc3R5bGVOYW1lKX1gO1xuSGVscGVyVGFibGVbc3R5bGVOYW1lXT09PXVuZGVmaW5lZHx8XG5GYWlsIGBjb25mbGljdGluZyBoZWxwZXJzIGZvciAke3Eoc3R5bGVOYW1lKX1gO1xuSGVscGVyVGFibGVbc3R5bGVOYW1lXT1oZWxwZXI7XG4gfVxuZm9yKGNvbnN0IHN0eWxlTmFtZSBvZiBvd25LZXlzKEhlbHBlclRhYmxlKSl7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdIT09dW5kZWZpbmVkfHxcbkZhaWwgYG1pc3NpbmcgaGVscGVyIGZvciAke3Eoc3R5bGVOYW1lKX1gO1xuIH1cblxucmV0dXJuIGhhcmRlbihIZWxwZXJUYWJsZSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VQYXNzU3R5bGVPZj0ocGFzc1N0eWxlSGVscGVycyk9PntcbmNvbnN0IEhlbHBlclRhYmxlPW1ha2VIZWxwZXJUYWJsZShwYXNzU3R5bGVIZWxwZXJzKTtcbmNvbnN0IHJlbW90YWJsZUhlbHBlcj1IZWxwZXJUYWJsZS5yZW1vdGFibGU7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHBhc3NTdHlsZU1lbW89bmV3IFdlYWtNYXAoKTtcblxuLypcblxuICAgKi9cbi8vXG5jb25zdCBwYXNzU3R5bGVPZj0ocGFzc2FibGUpPT57XG4vL1xuLy9cbi8vXG5jb25zdCBpblByb2dyZXNzPW5ldyBTZXQoKTtcblxuY29uc3QgcGFzc1N0eWxlT2ZSZWN1cj0oaW5uZXIpPT57XG5jb25zdCBpbm5lcklzT2JqZWN0PWlzT2JqZWN0KGlubmVyKTtcbmlmKGlubmVySXNPYmplY3Qpe1xuY29uc3QgaW5uZXJTdHlsZT1wYXNzU3R5bGVNZW1vLmdldChpbm5lcik7XG5pZihpbm5lclN0eWxlKXtcbnJldHVybiBpbm5lclN0eWxlO1xuIH1cbiFpblByb2dyZXNzLmhhcyhpbm5lcil8fFxuRmFpbCBgUGFzcy1ieS1jb3B5IGRhdGEgY2Fubm90IGJlIGN5Y2xpYyAke2lubmVyfWA7XG5pblByb2dyZXNzLmFkZChpbm5lcik7XG4gfVxuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZkludGVybmFsKGlubmVyKTtcbmlmKGlubmVySXNPYmplY3Qpe1xucGFzc1N0eWxlTWVtby5zZXQoaW5uZXIscGFzc1N0eWxlKTtcbmluUHJvZ3Jlc3MuZGVsZXRlKGlubmVyKTtcbiB9XG5yZXR1cm4gcGFzc1N0eWxlO1xuIH07XG5cbmNvbnN0IHBhc3NTdHlsZU9mSW50ZXJuYWw9KGlubmVyKT0+e1xuY29uc3QgdHlwZXN0cj10eXBlb2YgaW5uZXI7XG5zd2l0Y2godHlwZXN0cil7XG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdudW1iZXInOlxuY2FzZSdiaWdpbnQnOntcbnJldHVybiB0eXBlc3RyO1xuIH1cbmNhc2Unc3RyaW5nJzp7XG5hc3NlcnRQYXNzYWJsZVN0cmluZyhpbm5lcik7XG5yZXR1cm4nc3RyaW5nJztcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuYXNzZXJ0UGFzc2FibGVTeW1ib2woaW5uZXIpO1xucmV0dXJuJ3N5bWJvbCc7XG4gfVxuY2FzZSdvYmplY3QnOntcbmlmKGlubmVyPT09bnVsbCl7XG5yZXR1cm4nbnVsbCc7XG4gfVxuaWYoIWlzRnJvemVuKGlubmVyKSl7XG5hc3NlcnQuZmFpbChcbi8vXG4vL1xuaXNUeXBlZEFycmF5KGlubmVyKT9cblggYENhbm5vdCBwYXNzIG11dGFibGUgdHlwZWQgYXJyYXlzIGxpa2UgJHtpbm5lcn0uYDpcblggYENhbm5vdCBwYXNzIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7aW5uZXJ9LiBVc2UgaGFyZGVuKClgKTtcblxuIH1cbmlmKGlzUHJvbWlzZShpbm5lcikpe1xuYXNzZXJ0U2FmZVByb21pc2UoaW5uZXIpO1xucmV0dXJuJ3Byb21pc2UnO1xuIH1cbnR5cGVvZiBpbm5lci50aGVuIT09J2Z1bmN0aW9uJ3x8XG5GYWlsIGBDYW5ub3QgcGFzcyBub24tcHJvbWlzZSB0aGVuYWJsZXNgO1xuY29uc3QgcGFzc1N0eWxlVGFnPWlubmVyW1BBU1NfU1RZTEVdO1xuaWYocGFzc1N0eWxlVGFnIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2YocGFzc1N0eWxlVGFnLCdzdHJpbmcnKTtcbmNvbnN0IGhlbHBlcj1IZWxwZXJUYWJsZVtwYXNzU3R5bGVUYWddO1xuaGVscGVyIT09dW5kZWZpbmVkfHxcbkZhaWwgYFVucmVjb2duaXplZCBQYXNzU3R5bGU6ICR7cShwYXNzU3R5bGVUYWcpfWA7XG5oZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAqL3Bhc3NTdHlsZVRhZyk7XG4gfVxuZm9yKGNvbnN0IGhlbHBlciBvZiBwYXNzU3R5bGVIZWxwZXJzKXtcbmlmKGhlbHBlci5jYW5CZVZhbGlkKGlubmVyKSl7XG5oZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4gaGVscGVyLnN0eWxlTmFtZTtcbiB9XG4gfVxucmVtb3RhYmxlSGVscGVyLmFzc2VydFZhbGlkKGlubmVyLHBhc3NTdHlsZU9mUmVjdXIpO1xucmV0dXJuJ3JlbW90YWJsZSc7XG4gfVxuY2FzZSdmdW5jdGlvbic6e1xuaXNGcm96ZW4oaW5uZXIpfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1mcm96ZW4gb2JqZWN0cyBsaWtlICR7aW5uZXJ9LiBVc2UgaGFyZGVuKClgO1xudHlwZW9mIGlubmVyLnRoZW4hPT0nZnVuY3Rpb24nfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1wcm9taXNlIHRoZW5hYmxlc2A7XG5yZW1vdGFibGVIZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4ncmVtb3RhYmxlJztcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVucmVjb2duaXplZCB0eXBlb2YgJHtxKHR5cGVzdHIpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTtcblxucmV0dXJuIHBhc3NTdHlsZU9mUmVjdXIocGFzc2FibGUpO1xuIH07XG5yZXR1cm4gaGFyZGVuKHBhc3NTdHlsZU9mKTtcbiB9O1xuXG5jb25zdCAgICAgICAgUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2w9U3ltYm9sLmZvcignQGVuZG8gcGFzc1N0eWxlT2YnKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5QYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbChQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCk7XG5jb25zdCAgICAgICAgcGFzc1N0eWxlT2Y9XG5nbG9iYWxUaGlzJiZnbG9iYWxUaGlzW1Bhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sXXx8XG5tYWtlUGFzc1N0eWxlT2YoW1xuQ29weUFycmF5SGVscGVyLFxuQ29weVJlY29yZEhlbHBlcixcblRhZ2dlZEhlbHBlcixcbkVycm9ySGVscGVyLFxuUmVtb3RhYmxlSGVscGVyXSk7JGjigI1fb25jZS5wYXNzU3R5bGVPZihwYXNzU3R5bGVPZik7XG5cblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlPSh2YWwpPT57XG5wYXNzU3R5bGVPZih2YWwpOy8vXG4gfTskaOKAjV9vbmNlLmFzc2VydFBhc3NhYmxlKGFzc2VydFBhc3NhYmxlKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQYXNzYWJsZT0oc3BlY2ltZW4pPT57XG50cnl7XG4vL1xuLy9cbnJldHVybiBwYXNzU3R5bGVPZihzcGVjaW1lbikhPT11bmRlZmluZWQ7XG4gfWNhdGNoKF8pe1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9OyRo4oCNX29uY2UuaXNQYXNzYWJsZShpc1Bhc3NhYmxlKTtcbmhhcmRlbihpc1Bhc3NhYmxlKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjPShuYW1lLGRlc2MpPT5cbmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKG5hbWUsZGVzYyxwYXNzU3R5bGVPZik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdG9QYXNzYWJsZUVycm9yPShlcnIpPT57XG5oYXJkZW4oZXJyKTtcbmlmKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKGVycixwYXNzU3R5bGVPZikpe1xucmV0dXJuIGVycjtcbiB9XG5jb25zdHtuYW1lLG1lc3NhZ2V9PWVycjtcbmNvbnN0e2NhdXNlOmNhdXNlRGVzYyxlcnJvcnM6ZXJyb3JzRGVzY309XG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGVycik7XG5sZXQgY2F1c2U7XG5sZXQgZXJyb3JzO1xuaWYoY2F1c2VEZXNjJiZpc1Bhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MoJ2NhdXNlJyxjYXVzZURlc2MpKXtcbmNhdXNlPWNhdXNlRGVzYy52YWx1ZTtcbiB9XG5pZihlcnJvcnNEZXNjJiZpc1Bhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MoJ2Vycm9ycycsZXJyb3JzRGVzYykpe1xuZXJyb3JzPWVycm9yc0Rlc2MudmFsdWU7XG4gfVxuXG5jb25zdCBlcnJDb25zdHJ1Y3Rvcj1nZXRFcnJvckNvbnN0cnVjdG9yKCBgJHtuYW1lfWApfHxFcnJvcjtcbmNvbnN0IG5ld0Vycm9yPW1ha2VFcnJvciggYCR7bWVzc2FnZX1gLGVyckNvbnN0cnVjdG9yLHtcbi8vXG5jYXVzZSxcbmVycm9yc30pO1xuXG4vL1xuaGFyZGVuKG5ld0Vycm9yKTtcbi8vXG4vL1xuLy9cbmFubm90YXRlRXJyb3IobmV3RXJyb3IsWCBgY29waWVkIGZyb20gZXJyb3IgJHtlcnJ9YCk7XG5wYXNzU3R5bGVPZihuZXdFcnJvcik9PT0nZXJyb3InfHxcbkZhaWwgYEV4cGVjdGVkICR7bmV3RXJyb3J9IHRvIGJlIGEgcGFzc2FibGUgZXJyb3JgO1xucmV0dXJuIG5ld0Vycm9yO1xuIH07JGjigI1fb25jZS50b1Bhc3NhYmxlRXJyb3IodG9QYXNzYWJsZUVycm9yKTtcbmhhcmRlbih0b1Bhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdG9UaHJvd2FibGU9KHNwZWNpbWVuKT0+e1xuaGFyZGVuKHNwZWNpbWVuKTtcbmlmKGlzRXJyb3JMaWtlKHNwZWNpbWVuKSl7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKC8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihzcGVjaW1lbik7XG5pZihpc09iamVjdChzcGVjaW1lbikpe1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuY29uc3QgZWxlbWVudHM9LyogICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cyl7XG5lbGVtZW50PT09dG9UaHJvd2FibGUoZWxlbWVudCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7ZWxlbWVudH1gO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmZvcihjb25zdCB2YWwgb2YgdmFsdWVzKHJlYykpe1xudmFsPT09dG9UaHJvd2FibGUodmFsKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHt2YWx9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGc9LyogICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuY29uc3R7cGF5bG9hZH09dGc7XG5wYXlsb2FkPT09dG9UaHJvd2FibGUocGF5bG9hZCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7cGF5bG9hZH1gO1xuYnJlYWs7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZXI9LyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmVyPT09dG9UaHJvd2FibGUoZXIpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VyfWA7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYEEgJHtxKHBhc3NTdHlsZSl9IGlzIG5vdCB0aHJvd2FibGU6ICR7c3BlY2ltZW59YDtcbiB9fVxuXG4gfVxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbik7XG4gfTskaOKAjV9vbmNlLnRvVGhyb3dhYmxlKHRvVGhyb3dhYmxlKTtcbmhhcmRlbih0b1Rocm93YWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCI6WyJQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbCJdLCJwYXNzU3R5bGVPZiI6WyJwYXNzU3R5bGVPZiJdLCJhc3NlcnRQYXNzYWJsZSI6WyJhc3NlcnRQYXNzYWJsZSJdLCJpc1Bhc3NhYmxlIjpbImlzUGFzc2FibGUiXSwidG9QYXNzYWJsZUVycm9yIjpbInRvUGFzc2FibGVFcnJvciJdLCJ0b1Rocm93YWJsZSI6WyJ0b1Rocm93YWJsZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB30VJ7xBcAAMQXAAAoAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3JlbW90YWJsZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiUmVtb3RhYmxlSGVscGVyIiwiYXNzZXJ0SWZhY2UiLCJnZXRJbnRlcmZhY2VPZiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLGFzc2VydENoZWNrZXIsY2FuQmVNZXRob2QsaGFzT3duUHJvcGVydHlPZixQQVNTX1NUWUxFLGNoZWNrVGFnUmVjb3JkLGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQsaXNPYmplY3QsZ2V0VGFnLENYOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaOKAjV9hID0+IChhc3NlcnRDaGVja2VyID0gJGjigI1fYSldXSxbXCJjYW5CZU1ldGhvZFwiLCBbJGjigI1fYSA9PiAoY2FuQmVNZXRob2QgPSAkaOKAjV9hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRo4oCNX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaOKAjV9hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRo4oCNX2EgPT4gKFBBU1NfU1RZTEUgPSAkaOKAjV9hKV1dLFtcImNoZWNrVGFnUmVjb3JkXCIsIFskaOKAjV9hID0+IChjaGVja1RhZ1JlY29yZCA9ICRo4oCNX2EpXV0sW1wiY2hlY2tGdW5jdGlvblRhZ1JlY29yZFwiLCBbJGjigI1fYSA9PiAoY2hlY2tGdW5jdGlvblRhZ1JlY29yZCA9ICRo4oCNX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRo4oCNX2EgPT4gKGlzT2JqZWN0ID0gJGjigI1fYSldXSxbXCJnZXRUYWdcIiwgWyRo4oCNX2EgPT4gKGdldFRhZyA9ICRo4oCNX2EpXV0sW1wiQ1hcIiwgWyRo4oCNX2EgPT4gKENYID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e1xuZ2V0UHJvdG90eXBlT2YsXG5pc0Zyb3plbixcbnByb3RvdHlwZTpvYmplY3RQcm90b3R5cGUsXG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1cbk9iamVjdDtcblxuLypcblxuXG4gKi9cbmNvbnN0IGNoZWNrSWZhY2U9KGlmYWNlLGNoZWNrKT0+e1xucmV0dXJuKFxuLy9cbih0eXBlb2YgaWZhY2U9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZvciBub3csIGludGVyZmFjZSAke2lmYWNlfSBtdXN0IGJlIGEgc3RyaW5nOyB1bmltcGxlbWVudGVkYCkmJihcbmlmYWNlPT09J1JlbW90YWJsZSd8fFxuaWZhY2Uuc3RhcnRzV2l0aCgnQWxsZWdlZDogJyl8fFxuaWZhY2Uuc3RhcnRzV2l0aCgnRGVidWdOYW1lOiAnKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRm9yIG5vdywgaWZhY2UgJHtxKFxuaWZhY2UpXG4gfSBtdXN0IGJlIFwiUmVtb3RhYmxlXCIgb3IgYmVnaW4gd2l0aCBcIkFsbGVnZWQ6IFwiIG9yIFwiRGVidWdOYW1lOiBcIjsgdW5pbXBsZW1lbnRlZGApKTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0SWZhY2U9KGlmYWNlKT0+Y2hlY2tJZmFjZShpZmFjZSxhc3NlcnRDaGVja2VyKTskaOKAjV9vbmNlLmFzc2VydElmYWNlKGFzc2VydElmYWNlKTtcbmhhcmRlbihhc3NlcnRJZmFjZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUmVtb3RhYmxlUHJvdG9PZj0ob3JpZ2luYWwsY2hlY2spPT57XG5pc09iamVjdChvcmlnaW5hbCl8fFxuRmFpbCBgUmVtb3RhYmxlcyBtdXN0IGJlIG9iamVjdHMgb3IgZnVuY3Rpb25zOiAke29yaWdpbmFsfWA7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgcHJvdG89Z2V0UHJvdG90eXBlT2Yob3JpZ2luYWwpO1xuaWYoXG5wcm90bz09PW9iamVjdFByb3RvdHlwZXx8XG5wcm90bz09PW51bGx8fFxucHJvdG89PT1GdW5jdGlvbi5wcm90b3R5cGUpXG57XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUmVtb3RhYmxlcyBtdXN0IGJlIGV4cGxpY2l0bHkgZGVjbGFyZWQ6ICR7cShvcmlnaW5hbCl9YCk7XG5cbiB9XG5cbmlmKHR5cGVvZiBvcmlnaW5hbD09PSdvYmplY3QnKXtcbmNvbnN0IHByb3RvUHJvdG89Z2V0UHJvdG90eXBlT2YocHJvdG8pO1xuaWYocHJvdG9Qcm90byE9PW9iamVjdFByb3RvdHlwZSYmcHJvdG9Qcm90byE9PW51bGwpe1xuLy9cbnJldHVybiBjaGVja1JlbW90YWJsZShwcm90byxjaGVjayk7XG4gfVxuaWYoIWNoZWNrVGFnUmVjb3JkKHByb3RvLCdyZW1vdGFibGUnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1lbHNlIGlmKHR5cGVvZiBvcmlnaW5hbD09PSdmdW5jdGlvbicpe1xuaWYoIWNoZWNrRnVuY3Rpb25UYWdSZWNvcmQocHJvdG8sJ3JlbW90YWJsZScsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxuXG4vL1xuY29uc3QgcGFzc1N0eWxlS2V5PS8qICAgICAgICAgICAgICAgICAgKi9QQVNTX1NUWUxFO1xuY29uc3QgdGFnS2V5PS8qICAgICAgICAgICAgICAgICAgKi9TeW1ib2wudG9TdHJpbmdUYWc7XG5jb25zdHtcbi8vXG5bLyogICAgICAgICAgICAgICAgICovcGFzc1N0eWxlS2V5XTpfcGFzc1N0eWxlRGVzYyxcblsvKiAgICAgICAgICAgICAgICAgKi90YWdLZXldOnt2YWx1ZTppZmFjZX0sXG4uLi5yZXN0RGVzY3N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhwcm90byk7XG5cbnJldHVybihcbihvd25LZXlzKHJlc3REZXNjcykubGVuZ3RoPT09MHx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFVuZXhwZWN0ZWQgcHJvcGVydGllcyBvbiBSZW1vdGFibGUgUHJvdG8gJHtvd25LZXlzKHJlc3REZXNjcyl9YCkmJlxuY2hlY2tJZmFjZShpZmFjZSxjaGVjaykpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjb25maXJtZWRSZW1vdGFibGVzPW5ldyBXZWFrU2V0KCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUmVtb3RhYmxlPSh2YWwsY2hlY2spPT57XG5pZihjb25maXJtZWRSZW1vdGFibGVzLmhhcyh2YWwpKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKCFpc0Zyb3plbih2YWwpKXtcbnJldHVybihcbiEhY2hlY2smJkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBub24tZnJvemVuIG9iamVjdHMgbGlrZSAke3ZhbH1gKTtcblxuIH1cbi8vXG5pZighUmVtb3RhYmxlSGVscGVyLmNhbkJlVmFsaWQodmFsLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgcmVzdWx0PWNoZWNrUmVtb3RhYmxlUHJvdG9PZih2YWwsY2hlY2spO1xuaWYocmVzdWx0KXtcbmNvbmZpcm1lZFJlbW90YWJsZXMuYWRkKHZhbCk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbnRlcmZhY2VPZj0odmFsKT0+e1xuaWYoXG4haXNPYmplY3QodmFsKXx8XG52YWxbUEFTU19TVFlMRV0hPT0ncmVtb3RhYmxlJ3x8XG4hY2hlY2tSZW1vdGFibGUodmFsKSlcbntcbi8vXG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbi8vXG5yZXR1cm4gZ2V0VGFnKHZhbCk7XG4gfTskaOKAjV9vbmNlLmdldEludGVyZmFjZU9mKGdldEludGVyZmFjZU9mKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VPZik7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgUmVtb3RhYmxlSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3JlbW90YWJsZScsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5jb25zdCB2YWxpZFR5cGU9XG4oaXNPYmplY3QoY2FuZGlkYXRlKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBub24tb2JqZWN0cyBhcyBSZW1vdGFibGUgJHtjYW5kaWRhdGV9YCkmJihcbiFpc0FycmF5KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgYXJyYXlzIGFzIFJlbW90YWJsZSAke2NhbmRpZGF0ZX1gKTtcbmlmKCF2YWxpZFR5cGUpe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xuaWYodHlwZW9mIGNhbmRpZGF0ZT09PSdvYmplY3QnKXtcbi8vXG4vL1xucmV0dXJuIG93bktleXMoZGVzY3MpLmV2ZXJ5KChrZXkpPT57XG5yZXR1cm4oXG4vL1xuKGhhc093blByb3BlcnR5T2YoZGVzY3NbLyogICAgICAgICAgICAgICAgICova2V5XSwndmFsdWUnKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBSZW1vdGFibGVzIHdpdGggYWNjZXNzb3JzIGxpa2UgJHtxKFxuU3RyaW5nKGtleSkpXG4gfSBpbiAke2NhbmRpZGF0ZX1gKSYmKFxua2V5PT09U3ltYm9sLnRvU3RyaW5nVGFnJiZjaGVja0lmYWNlKGNhbmRpZGF0ZVtrZXldLGNoZWNrKXx8XG4oY2FuQmVNZXRob2QoY2FuZGlkYXRlW2tleV0pfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIFJlbW90YWJsZXMgd2l0aCBub24tbWV0aG9kcyBsaWtlICR7cShcblN0cmluZyhrZXkpKVxuIH0gaW4gJHtjYW5kaWRhdGV9YCkmJihcbmtleSE9PVBBU1NfU1RZTEV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgcGFzcy1ieS1yZW1vdGUgY2Fubm90IHNoYWRvdyAke3EoUEFTU19TVFlMRSl9YCkpKTtcblxuIH0pO1xuIH1lbHNlIGlmKHR5cGVvZiBjYW5kaWRhdGU9PT0nZnVuY3Rpb24nKXtcbi8vXG4vL1xuY29uc3R7XG5uYW1lOm5hbWVEZXNjLFxubGVuZ3RoOmxlbmd0aERlc2MsXG4vL1xuW1N5bWJvbC50b1N0cmluZ1RhZ106dG9TdHJpbmdUYWdEZXNjLFxuLi4ucmVzdERlc2NzfT1cbmRlc2NzO1xuY29uc3QgcmVzdEtleXM9b3duS2V5cyhyZXN0RGVzY3MpO1xucmV0dXJuKFxuKG5hbWVEZXNjJiZ0eXBlb2YgbmFtZURlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgRmFyIGZ1bmN0aW9uIG5hbWUgbXVzdCBiZSBhIHN0cmluZywgaW4gJHtjYW5kaWRhdGV9YCkmJihcbmxlbmd0aERlc2MmJnR5cGVvZiBsZW5ndGhEZXNjLnZhbHVlPT09J251bWJlcid8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb24gbGVuZ3RoIG11c3QgYmUgYSBudW1iZXIsIGluICR7Y2FuZGlkYXRlfWApJiYoXG50b1N0cmluZ1RhZ0Rlc2M9PT11bmRlZmluZWR8fFxuKHR5cGVvZiB0b1N0cmluZ1RhZ0Rlc2MudmFsdWU9PT0nc3RyaW5nJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZhciBmdW5jdGlvbiBAQHRvU3RyaW5nVGFnIG11c3QgYmUgYSBzdHJpbmcsIGluICR7Y2FuZGlkYXRlfWApJiZcbmNoZWNrSWZhY2UodG9TdHJpbmdUYWdEZXNjLnZhbHVlLGNoZWNrKSkmJihcbnJlc3RLZXlzLmxlbmd0aD09PTB8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGYXIgZnVuY3Rpb25zIHVuZXhwZWN0ZWQgcHJvcGVydGllcyBiZXNpZGVzIC5uYW1lIGFuZCAubGVuZ3RoICR7cmVzdEtleXN9YCkpO1xuXG4gfVxucmV0dXJuISFjaGVjayYmQ1goY2hlY2spIGB1bnJlY29nbml6ZWQgdHlwZW9mICR7Y2FuZGlkYXRlfWA7XG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSk9PmNoZWNrUmVtb3RhYmxlKGNhbmRpZGF0ZSxhc3NlcnRDaGVja2VyKSxcblxuZXZlcnk6KF9wYXNzYWJsZSxfZm4pPT50cnVlfSk7JGjigI1fb25jZS5SZW1vdGFibGVIZWxwZXIoUmVtb3RhYmxlSGVscGVyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzc2VydElmYWNlIjpbImFzc2VydElmYWNlIl0sImdldEludGVyZmFjZU9mIjpbImdldEludGVyZmFjZU9mIl0sIlJlbW90YWJsZUhlbHBlciI6WyJSZW1vdGFibGVIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAm2gvpJcMAACXDAAAKwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9zYWZlLXByb21pc2UuanN7ImltcG9ydHMiOlsiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0U2FmZVByb21pc2UiLCJpc1NhZmVQcm9taXNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpc1Byb21pc2UscSxhc3NlcnRDaGVja2VyLGhhc093blByb3BlcnR5T2YsQ1g7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjigI1fYSA9PiAoaXNQcm9taXNlID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaOKAjV9hID0+IChhc3NlcnRDaGVja2VyID0gJGjigI1fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaOKAjV9hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjigI1fYSldXSxbXCJDWFwiLCBbJGjigI1fYSA9PiAoQ1ggPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7aXNGcm96ZW4sZ2V0UHJvdG90eXBlT2YsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7dG9TdHJpbmdUYWd9PVN5bWJvbDtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tQcm9taXNlT3duS2V5cz0ocHIsY2hlY2spPT57XG5jb25zdCBrZXlzPW93bktleXMocHIpO1xuXG5pZihrZXlzLmxlbmd0aD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgdW5rbm93bktleXM9a2V5cy5maWx0ZXIoXG4oa2V5KT0+dHlwZW9mIGtleSE9PSdzeW1ib2wnfHwhaGFzT3duUHJvcGVydHlPZihQcm9taXNlLnByb3RvdHlwZSxrZXkpKTtcblxuXG5pZih1bmtub3duS2V5cy5sZW5ndGghPT0wKXtcbnJldHVybiBDWChcbmNoZWNrKVxuIGAke3ByfSAtIE11c3Qgbm90IGhhdmUgYW55IG93biBwcm9wZXJ0aWVzOiAke3EodW5rbm93bktleXMpfWA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tTYWZlT3duS2V5PShrZXkpPT57XG5pZihrZXk9PT10b1N0cmluZ1RhZyl7XG4vL1xuLy9cbmNvbnN0IHRhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByLHRvU3RyaW5nVGFnKTtcbmFzc2VydCh0YWdEZXNjIT09dW5kZWZpbmVkKTtcbnJldHVybihcbihoYXNPd25Qcm9wZXJ0eU9mKHRhZ0Rlc2MsJ3ZhbHVlJyl8fFxuQ1goXG5jaGVjaylcbiBgT3duIEBAdG9TdHJpbmdUYWcgbXVzdCBiZSBhIGRhdGEgcHJvcGVydHksIG5vdCBhbiBhY2Nlc3NvcjogJHtxKHRhZ0Rlc2MpfWApJiYoXG50eXBlb2YgdGFnRGVzYy52YWx1ZT09PSdzdHJpbmcnfHxcbkNYKFxuY2hlY2spXG4gYE93biBAQHRvU3RyaW5nVGFnIHZhbHVlIG11c3QgYmUgYSBzdHJpbmc6ICR7cSh0YWdEZXNjLnZhbHVlKX1gKSYmKFxuIXRhZ0Rlc2MuZW51bWVyYWJsZXx8XG5DWChjaGVjaykgYE93biBAQHRvU3RyaW5nVGFnIG11c3Qgbm90IGJlIGVudW1lcmFibGU6ICR7cSh0YWdEZXNjKX1gKSk7XG5cbiB9XG5jb25zdCB2YWw9cHJba2V5XTtcbmlmKHZhbD09PXVuZGVmaW5lZHx8dHlwZW9mIHZhbD09PSdudW1iZXInKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKFxudHlwZW9mIHZhbD09PSdvYmplY3QnJiZcbnZhbCE9PW51bGwmJlxuaXNGcm96ZW4odmFsKSYmXG5nZXRQcm90b3R5cGVPZih2YWwpPT09T2JqZWN0LnByb3RvdHlwZSlcbntcbmNvbnN0IHN1YktleXM9b3duS2V5cyh2YWwpO1xuaWYoc3ViS2V5cy5sZW5ndGg9PT0wKXtcbnJldHVybiB0cnVlO1xuIH1cblxuaWYoXG5zdWJLZXlzLmxlbmd0aD09PTEmJlxuc3ViS2V5c1swXT09PSdkZXN0cm95ZWQnJiZcbnZhbC5kZXN0cm95ZWQ9PT1mYWxzZSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gQ1goXG5jaGVjaylcbiBgVW5leHBlY3RlZCBOb2RlIGFzeW5jX2hvb2tzIGFkZGl0aW9ucyB0byBwcm9taXNlOiAke3ByfS4ke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGlzICR7dmFsfWA7XG4gfTtcblxucmV0dXJuIGtleXMuZXZlcnkoY2hlY2tTYWZlT3duS2V5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tTYWZlUHJvbWlzZT0ocHIsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNGcm96ZW4ocHIpfHxDWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBiZSBmcm96ZW5gKSYmKFxuaXNQcm9taXNlKHByKXx8Q1goY2hlY2spIGAke3ByfSAtIE11c3QgYmUgYSBwcm9taXNlYCkmJihcbmdldFByb3RvdHlwZU9mKHByKT09PVByb21pc2UucHJvdG90eXBlfHxcbkNYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGluaGVyaXQgZnJvbSBQcm9taXNlLnByb3RvdHlwZTogJHtxKFxuZ2V0UHJvdG90eXBlT2YocHIpKVxuIH1gKSYmXG5jaGVja1Byb21pc2VPd25LZXlzKC8qICAgICAgICAgICAgICAgICAgKi9wcixjaGVjaykpO1xuXG4gfTtcbmhhcmRlbihjaGVja1NhZmVQcm9taXNlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNTYWZlUHJvbWlzZT0ocHIpPT5jaGVja1NhZmVQcm9taXNlKHByLCh4KT0+eCk7JGjigI1fb25jZS5pc1NhZmVQcm9taXNlKGlzU2FmZVByb21pc2UpO1xuaGFyZGVuKGlzU2FmZVByb21pc2UpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0U2FmZVByb21pc2U9KHByKT0+Y2hlY2tTYWZlUHJvbWlzZShwcixhc3NlcnRDaGVja2VyKTskaOKAjV9vbmNlLmFzc2VydFNhZmVQcm9taXNlKGFzc2VydFNhZmVQcm9taXNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzU2FmZVByb21pc2UiOlsiaXNTYWZlUHJvbWlzZSJdLCJhc3NlcnRTYWZlUHJvbWlzZSI6WyJhc3NlcnRTYWZlUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAZCJttvgcAAL4HAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3N0cmluZy5qc3siaW1wb3J0cyI6WyJAZW5kby9lbnYtb3B0aW9ucyIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0RW52aXJvbm1lbnRPcHRpb24sRmFpbDskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lbnYtb3B0aW9uc1wiLCBbW1wiZ2V0RW52aXJvbm1lbnRPcHRpb25cIiwgWyRo4oCNX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cbi8vXG5jb25zdCBoYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kPSEhU3RyaW5nLnByb3RvdHlwZS5pc1dlbGxGb3JtZWQ7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNXZWxsRm9ybWVkU3RyaW5nPWhhc1dlbGxGb3JtZWRTdHJpbmdNZXRob2Q/XG4oc3RyKT0+dHlwZW9mIHN0cj09PSdzdHJpbmcnJiZzdHIuaXNXZWxsRm9ybWVkKCk6XG4oc3RyKT0+e1xuaWYodHlwZW9mIHN0ciE9PSdzdHJpbmcnKXtcbnJldHVybiBmYWxzZTtcbiB9XG5mb3IoY29uc3QgY2ggb2Ygc3RyKXtcbi8vXG4vL1xuLy9cbmNvbnN0IGNwPS8qICAgICAgICAgICAgICAgICAqL2NoLmNvZGVQb2ludEF0KDApO1xuaWYoY3A+PTB4ZDgwMCYmY3A8PTB4ZGZmZil7XG4vL1xuLy9cbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07JGjigI1fb25jZS5pc1dlbGxGb3JtZWRTdHJpbmcoaXNXZWxsRm9ybWVkU3RyaW5nKTtcbmhhcmRlbihpc1dlbGxGb3JtZWRTdHJpbmcpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFdlbGxGb3JtZWRTdHJpbmc9KHN0cik9PntcbmlzV2VsbEZvcm1lZFN0cmluZyhzdHIpfHxGYWlsIGBFeHBlY3RlZCB3ZWxsLWZvcm1lZCB1bmljb2RlIHN0cmluZzogJHtzdHJ9YDtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyhhc3NlcnRXZWxsRm9ybWVkU3RyaW5nKTtcbmhhcmRlbihhc3NlcnRXZWxsRm9ybWVkU3RyaW5nKTtcblxuY29uc3QgT05MWV9XRUxMX0ZPUk1FRF9TVFJJTkdTX1BBU1NBQkxFPVxuZ2V0RW52aXJvbm1lbnRPcHRpb24oJ09OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRScsJ2Rpc2FibGVkJyxbXG4nZW5hYmxlZCddKT09PVxuJ2VuYWJsZWQnO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0UGFzc2FibGVTdHJpbmc9KHN0cik9PntcbnR5cGVvZiBzdHI9PT0nc3RyaW5nJ3x8RmFpbCBgRXhwZWN0ZWQgc3RyaW5nICR7c3RyfWA7XG4hT05MWV9XRUxMX0ZPUk1FRF9TVFJJTkdTX1BBU1NBQkxFfHxhc3NlcnRXZWxsRm9ybWVkU3RyaW5nKHN0cik7XG4gfTskaOKAjV9vbmNlLmFzc2VydFBhc3NhYmxlU3RyaW5nKGFzc2VydFBhc3NhYmxlU3RyaW5nKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1dlbGxGb3JtZWRTdHJpbmciOlsiaXNXZWxsRm9ybWVkU3RyaW5nIl0sImFzc2VydFdlbGxGb3JtZWRTdHJpbmciOlsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRQYXNzYWJsZVN0cmluZyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABB9yNFCQoAAAkKAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3N5bWJvbC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscTskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuICovXG5jb25zdCB3ZWxsS25vd25TeW1ib2xOYW1lcz1uZXcgTWFwKFxub3duS2V5cyhTeW1ib2wpLlxuZmlsdGVyKFxuKG5hbWUpPT50eXBlb2YgbmFtZT09PSdzdHJpbmcnJiZ0eXBlb2YgU3ltYm9sW25hbWVdPT09J3N5bWJvbCcpLlxuXG5maWx0ZXIoKG5hbWUpPT57XG4vL1xuIW5hbWUuc3RhcnRzV2l0aCgnQEAnKXx8XG5GYWlsIGBEaWQgbm90IGV4cGVjdCBTeW1ib2wgdG8gaGF2ZSBhIHN5bWJvbC12YWx1ZWQgcHJvcGVydHkgbmFtZSBzdGFydGluZyB3aXRoIFwiQEBcIiAke3EoXG5uYW1lKVxuIH1gO1xucmV0dXJuIHRydWU7XG4gfSlcbi8vXG4ubWFwKChuYW1lKT0+W1N5bWJvbFtuYW1lXSwgYEBAJHtuYW1lfWBdKSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzUGFzc2FibGVTeW1ib2w9KHN5bSk9PlxudHlwZW9mIHN5bT09PSdzeW1ib2wnJiYoXG50eXBlb2YgU3ltYm9sLmtleUZvcihzeW0pPT09J3N0cmluZyd8fHdlbGxLbm93blN5bWJvbE5hbWVzLmhhcyhzeW0pKTskaOKAjV9vbmNlLmlzUGFzc2FibGVTeW1ib2woaXNQYXNzYWJsZVN5bWJvbCk7XG5oYXJkZW4oaXNQYXNzYWJsZVN5bWJvbCk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRQYXNzYWJsZVN5bWJvbD0oc3ltKT0+XG5pc1Bhc3NhYmxlU3ltYm9sKHN5bSl8fFxuRmFpbCBgT25seSByZWdpc3RlcmVkIHN5bWJvbHMgb3Igd2VsbC1rbm93biBzeW1ib2xzIGFyZSBwYXNzYWJsZTogJHtxKHN5bSl9YDskaOKAjV9vbmNlLmFzc2VydFBhc3NhYmxlU3ltYm9sKGFzc2VydFBhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZVN5bWJvbCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG5hbWVGb3JQYXNzYWJsZVN5bWJvbD0oc3ltKT0+e1xuY29uc3QgbmFtZT1TeW1ib2wua2V5Rm9yKHN5bSk7XG5pZihuYW1lPT09dW5kZWZpbmVkKXtcbnJldHVybiB3ZWxsS25vd25TeW1ib2xOYW1lcy5nZXQoc3ltKTtcbiB9XG5pZihuYW1lLnN0YXJ0c1dpdGgoJ0BAJykpe1xucmV0dXJuIGBAQCR7bmFtZX1gO1xuIH1cbnJldHVybiBuYW1lO1xuIH07JGjigI1fb25jZS5uYW1lRm9yUGFzc2FibGVTeW1ib2wobmFtZUZvclBhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihuYW1lRm9yUGFzc2FibGVTeW1ib2wpO1xuXG5jb25zdCBBdEF0UHJlZml4UGF0dGVybj0vXkBAKC4qKSQvO1xuaGFyZGVuKEF0QXRQcmVmaXhQYXR0ZXJuKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwYXNzYWJsZVN5bWJvbEZvck5hbWU9KG5hbWUpPT57XG5pZih0eXBlb2YgbmFtZSE9PSdzdHJpbmcnKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuY29uc3QgbWF0Y2g9QXRBdFByZWZpeFBhdHRlcm4uZXhlYyhuYW1lKTtcbmlmKG1hdGNoKXtcbmNvbnN0IHN1ZmZpeD1tYXRjaFsxXTtcbmlmKHN1ZmZpeC5zdGFydHNXaXRoKCdAQCcpKXtcbnJldHVybiBTeW1ib2wuZm9yKHN1ZmZpeCk7XG4gfWVsc2V7XG5jb25zdCBzeW09U3ltYm9sW3N1ZmZpeF07XG5pZih0eXBlb2Ygc3ltPT09J3N5bWJvbCcpe1xucmV0dXJuIHN5bTtcbiB9XG5GYWlsIGBSZXNlcnZlZCBmb3Igd2VsbCBrbm93biBzeW1ib2wgJHtxKHN1ZmZpeCl9OiAke3EobmFtZSl9YDtcbiB9XG4gfVxucmV0dXJuIFN5bWJvbC5mb3IobmFtZSk7XG4gfTskaOKAjV9vbmNlLnBhc3NhYmxlU3ltYm9sRm9yTmFtZShwYXNzYWJsZVN5bWJvbEZvck5hbWUpO1xuaGFyZGVuKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Bhc3NhYmxlU3ltYm9sIjpbImlzUGFzc2FibGVTeW1ib2wiXSwiYXNzZXJ0UGFzc2FibGVTeW1ib2wiOlsiYXNzZXJ0UGFzc2FibGVTeW1ib2wiXSwibmFtZUZvclBhc3NhYmxlU3ltYm9sIjpbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiOlsicGFzc2FibGVTeW1ib2xGb3JOYW1lIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAADrK0vUmBwAAJgcAACUAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvdGFnZ2VkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJUYWdnZWRIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsYXNzZXJ0Q2hlY2tlcixjaGVja1RhZ1JlY29yZCxQQVNTX1NUWUxFLGdldE93bkRhdGFEZXNjcmlwdG9yLGNoZWNrUGFzc1N0eWxlOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaOKAjV9hID0+IChhc3NlcnRDaGVja2VyID0gJGjigI1fYSldXSxbXCJjaGVja1RhZ1JlY29yZFwiLCBbJGjigI1fYSA9PiAoY2hlY2tUYWdSZWNvcmQgPSAkaOKAjV9hKV1dLFtcIlBBU1NfU1RZTEVcIiwgWyRo4oCNX2EgPT4gKFBBU1NfU1RZTEUgPSAkaOKAjV9hKV1dLFtcImdldE93bkRhdGFEZXNjcmlwdG9yXCIsIFskaOKAjV9hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRo4oCNX2EpXV0sW1wiY2hlY2tQYXNzU3R5bGVcIiwgWyRo4oCNX2EgPT4gKGNoZWNrUGFzc1N0eWxlID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzfT1PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgVGFnZ2VkSGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J3RhZ2dlZCcsXG5cbmNhbkJlVmFsaWQ6KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT5cbmNoZWNrUGFzc1N0eWxlKGNhbmRpZGF0ZSxjYW5kaWRhdGVbUEFTU19TVFlMRV0sJ3RhZ2dlZCcsY2hlY2spLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jaGVja1RhZ1JlY29yZChjYW5kaWRhdGUsJ3RhZ2dlZCcsYXNzZXJ0Q2hlY2tlcik7XG5cbi8vXG5jb25zdCBwYXNzU3R5bGVLZXk9LyogICAgICAgICAgICAgICAgICAqL1BBU1NfU1RZTEU7XG5jb25zdCB0YWdLZXk9LyogICAgICAgICAgICAgICAgICAqL1N5bWJvbC50b1N0cmluZ1RhZztcbmNvbnN0e1xuLy9cblsvKiAgICAgICAgICAgICAgICAgKi9wYXNzU3R5bGVLZXldOl9wYXNzU3R5bGVEZXNjLFxuWy8qICAgICAgICAgICAgICAgICAqL3RhZ0tleV06X2xhYmVsRGVzYyxcbnBheWxvYWQ6X3BheWxvYWREZXNjLC8vXG4uLi5yZXN0RGVzY3N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhjYW5kaWRhdGUpO1xub3duS2V5cyhyZXN0RGVzY3MpLmxlbmd0aD09PTB8fFxuRmFpbCBgVW5leHBlY3RlZCBwcm9wZXJ0aWVzIG9uIHRhZ2dlZCByZWNvcmQgJHtvd25LZXlzKHJlc3REZXNjcyl9YDtcblxuLy9cbi8vXG5wYXNzU3R5bGVPZlJlY3VyKFxuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLCdwYXlsb2FkJyx0cnVlLGFzc2VydENoZWNrZXIpLnZhbHVlKTtcblxuIH19KTskaOKAjV9vbmNlLlRhZ2dlZEhlbHBlcihUYWdnZWRIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVGFnZ2VkSGVscGVyIjpbIlRhZ2dlZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACx9PL4DwkAAA8JAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbImFzc2VydENvcHlBcnJheSIsImFzc2VydFJlY29yZCIsImFzc2VydFJlbW90YWJsZSIsImlzQ29weUFycmF5IiwiaXNSZWNvcmQiLCJpc1JlbW90YWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLHBhc3NTdHlsZU9mOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjigI1fYSA9PiAocGFzc1N0eWxlT2YgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgaXNDb3B5QXJyYXk9KGFycik9PnBhc3NTdHlsZU9mKGFycik9PT0nY29weUFycmF5JzskaOKAjV9vbmNlLmlzQ29weUFycmF5KGlzQ29weUFycmF5KTtcbmhhcmRlbihpc0NvcHlBcnJheSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBpc1JlY29yZD0ocmVjb3JkKT0+cGFzc1N0eWxlT2YocmVjb3JkKT09PSdjb3B5UmVjb3JkJzskaOKAjV9vbmNlLmlzUmVjb3JkKGlzUmVjb3JkKTtcbmhhcmRlbihpc1JlY29yZCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgaXNSZW1vdGFibGU9KHJlbW90YWJsZSk9PnBhc3NTdHlsZU9mKHJlbW90YWJsZSk9PT0ncmVtb3RhYmxlJzskaOKAjV9vbmNlLmlzUmVtb3RhYmxlKGlzUmVtb3RhYmxlKTtcbmhhcmRlbihpc1JlbW90YWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvcHlBcnJheT0oYXJyYXksb3B0TmFtZU9mQXJyYXk9J0FsbGVnZWQgYXJyYXknKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKGFycmF5KTtcbnBhc3NTdHlsZT09PSdjb3B5QXJyYXknfHxcbkZhaWwgYCR7cShvcHROYW1lT2ZBcnJheSl9ICR7YXJyYXl9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgYXJyYXksIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaOKAjV9vbmNlLmFzc2VydENvcHlBcnJheShhc3NlcnRDb3B5QXJyYXkpO1xuaGFyZGVuKGFzc2VydENvcHlBcnJheSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlY29yZD0ocmVjb3JkLG9wdE5hbWVPZlJlY29yZD0nQWxsZWdlZCByZWNvcmQnKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlY29yZCk7XG5wYXNzU3R5bGU9PT0nY29weVJlY29yZCd8fFxuRmFpbCBgJHtxKG9wdE5hbWVPZlJlY29yZCl9ICR7cmVjb3JkfSBtdXN0IGJlIGEgcGFzcy1ieS1jb3B5IHJlY29yZCwgbm90ICR7cShcbnBhc3NTdHlsZSlcbiB9YDtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0UmVjb3JkKGFzc2VydFJlY29yZCk7XG5oYXJkZW4oYXNzZXJ0UmVjb3JkKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0UmVtb3RhYmxlPShcbnJlbW90YWJsZSxcbm9wdE5hbWVPZlJlbW90YWJsZT0nQWxsZWdlZCByZW1vdGFibGUnKT0+XG57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmVtb3RhYmxlKTtcbnBhc3NTdHlsZT09PSdyZW1vdGFibGUnfHxcbkZhaWwgYCR7cShvcHROYW1lT2ZSZW1vdGFibGUpfSAke3JlbW90YWJsZX0gbXVzdCBiZSBhIHJlbW90YWJsZSwgbm90ICR7cShcbnBhc3NTdHlsZSlcbiB9YDtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0UmVtb3RhYmxlKGFzc2VydFJlbW90YWJsZSk7XG5oYXJkZW4oYXNzZXJ0UmVtb3RhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzQ29weUFycmF5IjpbImlzQ29weUFycmF5Il0sImlzUmVjb3JkIjpbImlzUmVjb3JkIl0sImlzUmVtb3RhYmxlIjpbImlzUmVtb3RhYmxlIl0sImFzc2VydENvcHlBcnJheSI6WyJhc3NlcnRDb3B5QXJyYXkiXSwiYXNzZXJ0UmVjb3JkIjpbImFzc2VydFJlY29yZCJdLCJhc3NlcnRSZW1vdGFibGUiOlsiYXNzZXJ0UmVtb3RhYmxlIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIeSUqdPAQAATwEAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAFVRpDLwOAAC8DgAAHgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzIiwiLi9zcmMva2V5cy9jb3B5U2V0LmpzIiwiLi9zcmMva2V5cy9jb3B5QmFnLmpzIiwiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qcyIsIi4vc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qcyIsIi4vc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qcyIsIi4vc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qcyIsIi4vc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiLCIuL3NyYy90eXBlcy5qcyIsIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyJdLCJleHBvcnRzIjpbImFzc2VydEtleSIsImFzc2VydEtleSIsImJhZ1VuaW9uIiwiYmFnVW5pb24iLCJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzRGlzam9pbnQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRSYW5rQ292ZXIiLCJnZXRSYW5rQ292ZXIiLCJzZXRDb21wYXJlIiwic2V0Q29tcGFyZSIsbnVsbCxudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtbXCIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL2NvcHlTZXQuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvY29weUJhZy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanNcIiwgW11dLFtcIi4vc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMva2V5cy9jaGVja0tleS5qcyI6W1siaXNLZXkiLCJpc0tleSJdLFsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5Il0sWyJhc3NlcnRTY2FsYXJLZXkiLCJhc3NlcnRTY2FsYXJLZXkiXSxbImlzQ29weVNldCIsImlzQ29weVNldCJdLFsiYXNzZXJ0Q29weVNldCIsImFzc2VydENvcHlTZXQiXSxbIm1ha2VDb3B5U2V0IiwibWFrZUNvcHlTZXQiXSxbImdldENvcHlTZXRLZXlzIiwiZ2V0Q29weVNldEtleXMiXSxbImlzQ29weUJhZyIsImlzQ29weUJhZyJdLFsiYXNzZXJ0Q29weUJhZyIsImFzc2VydENvcHlCYWciXSxbIm1ha2VDb3B5QmFnIiwibWFrZUNvcHlCYWciXSxbIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiXSxbImdldENvcHlCYWdFbnRyaWVzIiwiZ2V0Q29weUJhZ0VudHJpZXMiXSxbImlzQ29weU1hcCIsImlzQ29weU1hcCJdLFsiYXNzZXJ0Q29weU1hcCIsImFzc2VydENvcHlNYXAiXSxbIm1ha2VDb3B5TWFwIiwibWFrZUNvcHlNYXAiXSxbImdldENvcHlNYXBFbnRyaWVzIiwiZ2V0Q29weU1hcEVudHJpZXMiXV0sIi4vc3JjL2tleXMvY29weVNldC5qcyI6W1siY29lcmNlVG9FbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiXV0sIi4vc3JjL2tleXMvY29weUJhZy5qcyI6W1siY29lcmNlVG9CYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIl1dLCIuL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzIjpbWyJiYWdDb21wYXJlIiwiYmFnQ29tcGFyZSJdLFsic2V0Q29tcGFyZSIsInNldENvbXBhcmUiXSxbImNvbXBhcmVLZXlzIiwiY29tcGFyZUtleXMiXSxbImtleUxUIiwia2V5TFQiXSxbImtleUxURSIsImtleUxURSJdLFsia2V5RVEiLCJrZXlFUSJdLFsia2V5R1RFIiwia2V5R1RFIl0sWyJrZXlHVCIsImtleUdUIl1dLCIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiOltbImVsZW1lbnRzSXNTdXBlcnNldCIsImVsZW1lbnRzSXNTdXBlcnNldCJdLFsiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50Il0sWyJlbGVtZW50c0NvbXBhcmUiLCJlbGVtZW50c0NvbXBhcmUiXSxbImVsZW1lbnRzVW5pb24iLCJlbGVtZW50c1VuaW9uIl0sWyJlbGVtZW50c0Rpc2pvaW50VW5pb24iLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSxbImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSxbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLFsic2V0SXNTdXBlcnNldCIsInNldElzU3VwZXJzZXQiXSxbInNldElzRGlzam9pbnQiLCJzZXRJc0Rpc2pvaW50Il0sWyJzZXRVbmlvbiIsInNldFVuaW9uIl0sWyJzZXREaXNqb2ludFVuaW9uIiwic2V0RGlzam9pbnRVbmlvbiJdLFsic2V0SW50ZXJzZWN0aW9uIiwic2V0SW50ZXJzZWN0aW9uIl0sWyJzZXREaXNqb2ludFN1YnRyYWN0Iiwic2V0RGlzam9pbnRTdWJ0cmFjdCJdXSwiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIjpbWyJiYWdJc1N1cGVyYmFnIiwiYmFnSXNTdXBlcmJhZyJdLFsiYmFnVW5pb24iLCJiYWdVbmlvbiJdLFsiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSW50ZXJzZWN0aW9uIl0sWyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnRGlzam9pbnRTdWJ0cmFjdCJdXSwiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIjpbWyJNIiwiTSJdLFsiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIl0sWyJpc1BhdHRlcm4iLCJpc1BhdHRlcm4iXSxbImFzc2VydFBhdHRlcm4iLCJhc3NlcnRQYXR0ZXJuIl0sWyJtYXRjaGVzIiwibWF0Y2hlcyJdLFsibXVzdE1hdGNoIiwibXVzdE1hdGNoIl0sWyJpc0F3YWl0QXJnR3VhcmQiLCJpc0F3YWl0QXJnR3VhcmQiXSxbImFzc2VydEF3YWl0QXJnR3VhcmQiLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIl0sWyJpc1Jhd0d1YXJkIiwiaXNSYXdHdWFyZCJdLFsiYXNzZXJ0UmF3R3VhcmQiLCJhc3NlcnRSYXdHdWFyZCJdLFsiYXNzZXJ0TWV0aG9kR3VhcmQiLCJhc3NlcnRNZXRob2RHdWFyZCJdLFsiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCJdLFsia2luZE9mIiwia2luZE9mIl1dLCIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIjpbWyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCIsImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIl0sWyJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiXSxbImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCIsImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCJdLFsiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyIsImdldEludGVyZmFjZU1ldGhvZEtleXMiXV0sIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOltbImxpc3REaWZmZXJlbmNlIiwibGlzdERpZmZlcmVuY2UiXV0sIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjpbWyJvYmplY3RNYXAiLCJvYmplY3RNYXAiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPi/xd+CMgAAgjIAACoAAABAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL2tleXMvY2hlY2tLZXkuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9jb3B5U2V0LmpzIiwiLi9jb3B5QmFnLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29weUJhZyIsImFzc2VydENvcHlNYXAiLCJhc3NlcnRDb3B5U2V0IiwiYXNzZXJ0S2V5IiwiYXNzZXJ0UHJpbWl0aXZlS2V5IiwiYXNzZXJ0U2NhbGFyS2V5IiwiY2hlY2tDb3B5QmFnIiwiY2hlY2tDb3B5TWFwIiwiY2hlY2tDb3B5U2V0IiwiY2hlY2tLZXkiLCJjaGVja1NjYWxhcktleSIsImNvcHlNYXBLZXlTZXQiLCJldmVyeUNvcHlCYWdFbnRyeSIsImV2ZXJ5Q29weU1hcEtleSIsImV2ZXJ5Q29weU1hcFZhbHVlIiwiZXZlcnlDb3B5U2V0S2V5IiwiZ2V0Q29weUJhZ0VudHJpZXMiLCJnZXRDb3B5TWFwRW50cmllcyIsImdldENvcHlNYXBFbnRyeUFycmF5IiwiZ2V0Q29weU1hcEtleXMiLCJnZXRDb3B5TWFwVmFsdWVzIiwiZ2V0Q29weVNldEtleXMiLCJpc0NvcHlCYWciLCJpc0NvcHlNYXAiLCJpc0NvcHlTZXQiLCJpc0tleSIsImlzUHJpbWl0aXZlS2V5IiwiaXNTY2FsYXJLZXkiLCJtYWtlQ29weUJhZyIsIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlNYXAiLCJtYWtlQ29weVNldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixhc3NlcnRQYXNzYWJsZSxGYXIsZ2V0VGFnLGlzT2JqZWN0LG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsY29tcGFyZUFudGlSYW5rLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmssaWRlbnRDaGVja2VyLFgscSxGYWlsLGNoZWNrRWxlbWVudHMsbWFrZVNldE9mRWxlbWVudHMsY2hlY2tCYWdFbnRyaWVzLG1ha2VCYWdPZkVudHJpZXM7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRo4oCNX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjigI1fYSldXSxbXCJGYXJcIiwgWyRo4oCNX2EgPT4gKEZhciA9ICRo4oCNX2EpXV0sW1wiZ2V0VGFnXCIsIFskaOKAjV9hID0+IChnZXRUYWcgPSAkaOKAjV9hKV1dLFtcImlzT2JqZWN0XCIsIFskaOKAjV9hID0+IChpc09iamVjdCA9ICRo4oCNX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjigI1fYSA9PiAobWFrZVRhZ2dlZCA9ICRo4oCNX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRo4oCNX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRo4oCNX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjigI1fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaOKAjV9hID0+IChzb3J0QnlSYW5rID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzXCIsIFtbXCJpZGVudENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGlkZW50Q2hlY2tlciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dLFtcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiLi9jb3B5U2V0LmpzXCIsIFtbXCJjaGVja0VsZW1lbnRzXCIsIFskaOKAjV9hID0+IChjaGVja0VsZW1lbnRzID0gJGjigI1fYSldXSxbXCJtYWtlU2V0T2ZFbGVtZW50c1wiLCBbJGjigI1fYSA9PiAobWFrZVNldE9mRWxlbWVudHMgPSAkaOKAjV9hKV1dXV0sW1wiLi9jb3B5QmFnLmpzXCIsIFtbXCJjaGVja0JhZ0VudHJpZXNcIiwgWyRo4oCNX2EgPT4gKGNoZWNrQmFnRW50cmllcyA9ICRo4oCNX2EpXV0sW1wibWFrZUJhZ09mRW50cmllc1wiLCBbJGjigI1fYSA9PiAobWFrZUJhZ09mRW50cmllcyA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuICovXG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUHJpbWl0aXZlS2V5PSh2YWwsY2hlY2spPT57XG5pZihpc09iamVjdCh2YWwpKXtcbnJldHVybihcbmNoZWNrIT09aWRlbnRDaGVja2VyJiZcbmNoZWNrKGZhbHNlLFggYEEgJHtxKHR5cGVvZiB2YWwpfSBjYW5ub3QgYmUgYSBwcmltaXRpdmU6ICR7dmFsfWApKTtcblxuIH1cbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUodmFsKTtcbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQcmltaXRpdmVLZXk9KHZhbCk9PmNoZWNrUHJpbWl0aXZlS2V5KHZhbCxpZGVudENoZWNrZXIpOyRo4oCNX29uY2UuaXNQcmltaXRpdmVLZXkoaXNQcmltaXRpdmVLZXkpO1xuaGFyZGVuKGlzUHJpbWl0aXZlS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQcmltaXRpdmVLZXk9KHZhbCk9PntcbmNoZWNrUHJpbWl0aXZlS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0UHJpbWl0aXZlS2V5KGFzc2VydFByaW1pdGl2ZUtleSk7XG5oYXJkZW4oYXNzZXJ0UHJpbWl0aXZlS2V5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrU2NhbGFyS2V5PSh2YWwsY2hlY2spPT57XG5pZihpc1ByaW1pdGl2ZUtleSh2YWwpKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZih2YWwpO1xuaWYocGFzc1N0eWxlPT09J3JlbW90YWJsZScpe1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgJHtxKHBhc3NTdHlsZSl9IGNhbm5vdCBiZSBhIHNjYWxhciBrZXk6ICR7dmFsfWApO1xuIH07XG5cbi8qXG5cblxuICovJGjigI1fb25jZS5jaGVja1NjYWxhcktleShjaGVja1NjYWxhcktleSk7XG5jb25zdCAgICAgICAgaXNTY2FsYXJLZXk9KHZhbCk9PmNoZWNrU2NhbGFyS2V5KHZhbCxpZGVudENoZWNrZXIpOyRo4oCNX29uY2UuaXNTY2FsYXJLZXkoaXNTY2FsYXJLZXkpO1xuaGFyZGVuKGlzU2NhbGFyS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRTY2FsYXJLZXk9KHZhbCk9PntcbmNoZWNrU2NhbGFyS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0U2NhbGFyS2V5KGFzc2VydFNjYWxhcktleSk7XG5oYXJkZW4oYXNzZXJ0U2NhbGFyS2V5KTtcblxuLy9cblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGtleU1lbW89bmV3IFdlYWtTZXQoKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrS2V5PSh2YWwsY2hlY2spPT57XG5pZighaXNPYmplY3QodmFsKSl7XG4vL1xuLy9cbmFzc2VydFBhc3NhYmxlKHZhbCk7XG5yZXR1cm4gdHJ1ZTtcbiB9XG4vL1xuaWYoa2V5TWVtby5oYXModmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG4vL1xuY29uc3QgcmVzdWx0PWNoZWNrS2V5SW50ZXJuYWwodmFsLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG4vL1xuLy9cbi8vXG5rZXlNZW1vLmFkZCh2YWwpO1xuIH1cbi8vXG4vL1xucmV0dXJuIHJlc3VsdDtcbiB9OyRo4oCNX29uY2UuY2hlY2tLZXkoY2hlY2tLZXkpO1xuaGFyZGVuKGNoZWNrS2V5KTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNLZXk9KHZhbCk9PmNoZWNrS2V5KHZhbCxpZGVudENoZWNrZXIpOyRo4oCNX29uY2UuaXNLZXkoaXNLZXkpO1xuaGFyZGVuKGlzS2V5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRLZXk9KHZhbCk9PntcbmNoZWNrS2V5KHZhbCxhc3NlcnRDaGVja2VyKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0S2V5KGFzc2VydEtleSk7XG5oYXJkZW4oYXNzZXJ0S2V5KTtcblxuLy9cblxuLy9cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvcHlTZXRNZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja0NvcHlTZXQ9KHMsY2hlY2spPT57XG5pZihjb3B5U2V0TWVtby5oYXMocykpe1xucmV0dXJuIHRydWU7XG4gfVxuY29uc3QgcmVzdWx0PVxuKHBhc3NTdHlsZU9mKHMpPT09J3RhZ2dlZCcmJmdldFRhZyhzKT09PSdjb3B5U2V0J3x8XG5jaGVjayhmYWxzZSxYIGBOb3QgYSBjb3B5U2V0OiAke3N9YCkpJiZcbmNoZWNrRWxlbWVudHMocy5wYXlsb2FkLGNoZWNrKSYmXG5jaGVja0tleShzLnBheWxvYWQsY2hlY2spO1xuaWYocmVzdWx0KXtcbmNvcHlTZXRNZW1vLmFkZChzKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjigI1fb25jZS5jaGVja0NvcHlTZXQoY2hlY2tDb3B5U2V0KTtcbmhhcmRlbihjaGVja0NvcHlTZXQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldD0ocyk9PmNoZWNrQ29weVNldChzLGlkZW50Q2hlY2tlcik7JGjigI1fb25jZS5pc0NvcHlTZXQoaXNDb3B5U2V0KTtcbmhhcmRlbihpc0NvcHlTZXQpO1xuXG4vKlxuXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDb3B5U2V0PShzKT0+e1xuY2hlY2tDb3B5U2V0KHMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaOKAjV9vbmNlLmFzc2VydENvcHlTZXQoYXNzZXJ0Q29weVNldCk7XG5oYXJkZW4oYXNzZXJ0Q29weVNldCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5U2V0S2V5cz0ocyk9PntcbmFzc2VydENvcHlTZXQocyk7XG5yZXR1cm4gcy5wYXlsb2FkO1xuIH07JGjigI1fb25jZS5nZXRDb3B5U2V0S2V5cyhnZXRDb3B5U2V0S2V5cyk7XG5oYXJkZW4oZ2V0Q29weVNldEtleXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVyeUNvcHlTZXRLZXk9KHMsZm4pPT5cbmdldENvcHlTZXRLZXlzKHMpLmV2ZXJ5KChrZXksaW5kZXgpPT5mbihrZXksaW5kZXgpKTskaOKAjV9vbmNlLmV2ZXJ5Q29weVNldEtleShldmVyeUNvcHlTZXRLZXkpO1xuaGFyZGVuKGV2ZXJ5Q29weVNldEtleSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29weVNldD0oZWxlbWVudEl0ZXIpPT57XG5jb25zdCByZXN1bHQ9bWFrZVNldE9mRWxlbWVudHMoZWxlbWVudEl0ZXIpO1xuYXNzZXJ0Q29weVNldChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRo4oCNX29uY2UubWFrZUNvcHlTZXQobWFrZUNvcHlTZXQpO1xuaGFyZGVuKG1ha2VDb3B5U2V0KTtcblxuLy9cblxuLy9cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvcHlCYWdNZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja0NvcHlCYWc9KGIsY2hlY2spPT57XG5pZihjb3B5QmFnTWVtby5oYXMoYikpe1xucmV0dXJuIHRydWU7XG4gfVxuY29uc3QgcmVzdWx0PVxuKHBhc3NTdHlsZU9mKGIpPT09J3RhZ2dlZCcmJmdldFRhZyhiKT09PSdjb3B5QmFnJ3x8XG5jaGVjayhmYWxzZSxYIGBOb3QgYSBjb3B5QmFnOiAke2J9YCkpJiZcbmNoZWNrQmFnRW50cmllcyhiLnBheWxvYWQsY2hlY2spJiZcbmNoZWNrS2V5KGIucGF5bG9hZCxjaGVjayk7XG5pZihyZXN1bHQpe1xuY29weUJhZ01lbW8uYWRkKGIpO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTskaOKAjV9vbmNlLmNoZWNrQ29weUJhZyhjaGVja0NvcHlCYWcpO1xuaGFyZGVuKGNoZWNrQ29weUJhZyk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5QmFnPShiKT0+Y2hlY2tDb3B5QmFnKGIsaWRlbnRDaGVja2VyKTskaOKAjV9vbmNlLmlzQ29weUJhZyhpc0NvcHlCYWcpO1xuaGFyZGVuKGlzQ29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGFzc2VydENvcHlCYWc9KGIpPT57XG5jaGVja0NvcHlCYWcoYixhc3NlcnRDaGVja2VyKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0Q29weUJhZyhhc3NlcnRDb3B5QmFnKTtcbmhhcmRlbihhc3NlcnRDb3B5QmFnKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlCYWdFbnRyaWVzPShiKT0+e1xuYXNzZXJ0Q29weUJhZyhiKTtcbnJldHVybiBiLnBheWxvYWQ7XG4gfTskaOKAjV9vbmNlLmdldENvcHlCYWdFbnRyaWVzKGdldENvcHlCYWdFbnRyaWVzKTtcbmhhcmRlbihnZXRDb3B5QmFnRW50cmllcyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weUJhZ0VudHJ5PShiLGZuKT0+XG5nZXRDb3B5QmFnRW50cmllcyhiKS5ldmVyeSgoZW50cnksaW5kZXgpPT5mbihlbnRyeSxpbmRleCkpOyRo4oCNX29uY2UuZXZlcnlDb3B5QmFnRW50cnkoZXZlcnlDb3B5QmFnRW50cnkpO1xuaGFyZGVuKGV2ZXJ5Q29weUJhZ0VudHJ5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5QmFnPShiYWdFbnRyeUl0ZXIpPT57XG5jb25zdCByZXN1bHQ9bWFrZUJhZ09mRW50cmllcyhiYWdFbnRyeUl0ZXIpO1xuYXNzZXJ0Q29weUJhZyhyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRo4oCNX29uY2UubWFrZUNvcHlCYWcobWFrZUNvcHlCYWcpO1xuaGFyZGVuKG1ha2VDb3B5QmFnKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzPShlbGVtZW50SXRlcik9Pntcbi8vXG4vL1xuY29uc3QgZnVsbENvbXBhcmU9bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcbmNvbnN0IHNvcnRlZD1zb3J0QnlSYW5rKGVsZW1lbnRJdGVyLGZ1bGxDb21wYXJlKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW50cmllcz1bXTtcbmZvcihsZXQgaT0wO2k8c29ydGVkLmxlbmd0aDspe1xuY29uc3Qgaz1zb3J0ZWRbaV07XG5sZXQgaj1pKzE7XG53aGlsZShqPHNvcnRlZC5sZW5ndGgmJmZ1bGxDb21wYXJlKGssc29ydGVkW2pdKT09PTApe1xuais9MTtcbiB9XG5lbnRyaWVzLnB1c2goW2ssQmlnSW50KGotaSldKTtcbmk9ajtcbiB9XG5yZXR1cm4gbWFrZUNvcHlCYWcoZW50cmllcyk7XG4gfTskaOKAjV9vbmNlLm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzKG1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzKTtcbmhhcmRlbihtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5TWFwTWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5TWFwPShtLGNoZWNrKT0+e1xuaWYoY29weU1hcE1lbW8uaGFzKG0pKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKCEocGFzc1N0eWxlT2YobSk9PT0ndGFnZ2VkJyYmZ2V0VGFnKG0pPT09J2NvcHlNYXAnKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgTm90IGEgY29weU1hcDogJHttfWApO1xuIH1cbmNvbnN0e3BheWxvYWR9PW07XG5pZihwYXNzU3R5bGVPZihwYXlsb2FkKSE9PSdjb3B5UmVjb3JkJyl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgQSBjb3B5TWFwJ3MgcGF5bG9hZCBtdXN0IGJlIGEgcmVjb3JkOiAke219YCk7XG4gfVxuY29uc3R7a2V5cyx2YWx1ZXMsLi4ucmVzdH09cGF5bG9hZDtcbmNvbnN0IHJlc3VsdD1cbihvd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuY2hlY2soXG5mYWxzZSxcblggYEEgY29weU1hcCdzIHBheWxvYWQgbXVzdCBvbmx5IGhhdmUgLmtleXMgYW5kIC52YWx1ZXM6ICR7bX1gKSkmJlxuXG5jaGVja0VsZW1lbnRzKGtleXMsY2hlY2spJiZcbmNoZWNrS2V5KGtleXMsY2hlY2spJiYoXG5wYXNzU3R5bGVPZih2YWx1ZXMpPT09J2NvcHlBcnJheSd8fFxuY2hlY2soZmFsc2UsWCBgQSBjb3B5TWFwJ3MgLnZhbHVlcyBtdXN0IGJlIGEgY29weUFycmF5OiAke219YCkpJiYoXG5rZXlzLmxlbmd0aD09PXZhbHVlcy5sZW5ndGh8fFxuY2hlY2soXG5mYWxzZSxcblggYEEgY29weU1hcCBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGtleXMgYW5kIHZhbHVlczogJHttfWApKTtcblxuaWYocmVzdWx0KXtcbmNvcHlNYXBNZW1vLmFkZChtKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjigI1fb25jZS5jaGVja0NvcHlNYXAoY2hlY2tDb3B5TWFwKTtcbmhhcmRlbihjaGVja0NvcHlNYXApO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weU1hcD0obSk9PmNoZWNrQ29weU1hcChtLGlkZW50Q2hlY2tlcik7JGjigI1fb25jZS5pc0NvcHlNYXAoaXNDb3B5TWFwKTtcbmhhcmRlbihpc0NvcHlNYXApO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydENvcHlNYXA9KG0pPT57XG5jaGVja0NvcHlNYXAobSxhc3NlcnRDaGVja2VyKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0Q29weU1hcChhc3NlcnRDb3B5TWFwKTtcbmhhcmRlbihhc3NlcnRDb3B5TWFwKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weU1hcEtleXM9KG0pPT57XG5hc3NlcnRDb3B5TWFwKG0pO1xucmV0dXJuIG0ucGF5bG9hZC5rZXlzO1xuIH07JGjigI1fb25jZS5nZXRDb3B5TWFwS2V5cyhnZXRDb3B5TWFwS2V5cyk7XG5oYXJkZW4oZ2V0Q29weU1hcEtleXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5TWFwVmFsdWVzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbnJldHVybiBtLnBheWxvYWQudmFsdWVzO1xuIH07JGjigI1fb25jZS5nZXRDb3B5TWFwVmFsdWVzKGdldENvcHlNYXBWYWx1ZXMpO1xuaGFyZGVuKGdldENvcHlNYXBWYWx1ZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weU1hcEVudHJ5QXJyYXk9KG0pPT57XG5hc3NlcnRDb3B5TWFwKG0pO1xuY29uc3R7XG5wYXlsb2FkOntrZXlzLHZhbHVlc319PVxubTtcbnJldHVybiBoYXJkZW4oa2V5cy5tYXAoKGtleSxpKT0+W2tleSx2YWx1ZXNbaV1dKSk7XG4gfTskaOKAjV9vbmNlLmdldENvcHlNYXBFbnRyeUFycmF5KGdldENvcHlNYXBFbnRyeUFycmF5KTtcbmhhcmRlbihnZXRDb3B5TWFwRW50cnlBcnJheSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBFbnRyaWVzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbmNvbnN0e1xucGF5bG9hZDp7a2V5cyx2YWx1ZXN9fT1cbm07XG5jb25zdHtsZW5ndGh9PS8qICAgICAgICAgICAgICAgICova2V5cztcbnJldHVybiBGYXIoJ0NvcHlNYXAgZW50cmllcyBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmxldCBpPTA7XG5yZXR1cm4gRmFyKCdDb3B5TWFwIGVudHJpZXMgaXRlcmF0b3InLHtcbm5leHQ6KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmVzdWx0O1xuaWYoaTxsZW5ndGgpe1xucmVzdWx0PWhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTpba2V5c1tpXSx2YWx1ZXNbaV1dfSk7XG5pKz0xO1xucmV0dXJuIHJlc3VsdDtcbiB9ZWxzZXtcbnJlc3VsdD1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH19KTtcblxuIH19KTtcblxuIH07JGjigI1fb25jZS5nZXRDb3B5TWFwRW50cmllcyhnZXRDb3B5TWFwRW50cmllcyk7XG5oYXJkZW4oZ2V0Q29weU1hcEVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weU1hcEtleT0obSxmbik9PlxuZ2V0Q29weU1hcEtleXMobSkuZXZlcnkoKGtleSxpbmRleCk9PmZuKGtleSxpbmRleCkpOyRo4oCNX29uY2UuZXZlcnlDb3B5TWFwS2V5KGV2ZXJ5Q29weU1hcEtleSk7XG5oYXJkZW4oZXZlcnlDb3B5TWFwS2V5KTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVyeUNvcHlNYXBWYWx1ZT0obSxmbik9PlxuZ2V0Q29weU1hcFZhbHVlcyhtKS5ldmVyeSgodmFsdWUsaW5kZXgpPT5mbih2YWx1ZSxpbmRleCkpOyRo4oCNX29uY2UuZXZlcnlDb3B5TWFwVmFsdWUoZXZlcnlDb3B5TWFwVmFsdWUpO1xuaGFyZGVuKGV2ZXJ5Q29weU1hcFZhbHVlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY29weU1hcEtleVNldD0obSk9PlxuLy9cbm1ha2VUYWdnZWQoJ2NvcHlTZXQnLG0ucGF5bG9hZC5rZXlzKTskaOKAjV9vbmNlLmNvcHlNYXBLZXlTZXQoY29weU1hcEtleVNldCk7XG5oYXJkZW4oY29weU1hcEtleVNldCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5TWFwPShlbnRyaWVzKT0+e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBzb3J0ZWRFbnRyaWVzPXNvcnRCeVJhbmsoZW50cmllcyxjb21wYXJlQW50aVJhbmspO1xuY29uc3Qga2V5cz1zb3J0ZWRFbnRyaWVzLm1hcCgoW2ssX3ZdKT0+ayk7XG5jb25zdCB2YWx1ZXM9c29ydGVkRW50cmllcy5tYXAoKFtfayx2XSk9PnYpO1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2NvcHlNYXAnLHtrZXlzLHZhbHVlc30pO1xuYXNzZXJ0Q29weU1hcChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRo4oCNX29uY2UubWFrZUNvcHlNYXAobWFrZUNvcHlNYXApO1xuaGFyZGVuKG1ha2VDb3B5TWFwKTtcblxuLy9cblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tLZXlJbnRlcm5hbD0odmFsLGNoZWNrKT0+e1xuY29uc3QgY2hlY2tJdD0oY2hpbGQpPT5jaGVja0tleShjaGlsZCxjaGVjayk7XG5cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZih2YWwpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG5yZXR1cm4gT2JqZWN0LnZhbHVlcyh2YWwpLmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xucmV0dXJuIHZhbC5ldmVyeShjaGVja0l0KTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGFnPWdldFRhZyh2YWwpO1xuc3dpdGNoKHRhZyl7XG5jYXNlJ2NvcHlTZXQnOntcbnJldHVybiBjaGVja0NvcHlTZXQodmFsLGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlCYWcnOntcbnJldHVybiBjaGVja0NvcHlCYWcodmFsLGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlNYXAnOntcbnJldHVybihcbmNoZWNrQ29weU1hcCh2YWwsY2hlY2spJiZcbi8vXG4vL1xuLy9cbmV2ZXJ5Q29weU1hcFZhbHVlKHZhbCxjaGVja0l0KSk7XG5cbiB9XG5kZWZhdWx0OntcbnJldHVybihcbmNoZWNrIT09aWRlbnRDaGVja2VyJiZcbmNoZWNrKGZhbHNlLFggYEEgcGFzc2FibGUgdGFnZ2VkICR7cSh0YWcpfSBpcyBub3QgYSBrZXk6ICR7dmFsfWApKTtcblxuIH19XG5cbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xuLy9cbnJldHVybiB0cnVlO1xuIH1cbmNhc2UnZXJyb3InOlxuY2FzZSdwcm9taXNlJzp7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgQSAke3EocGFzc1N0eWxlKX0gY2Fubm90IGJlIGEga2V5YCk7XG4gfVxuZGVmYXVsdDp7XG4vL1xuLy9cbnRocm93IEZhaWwgYHVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfTogJHt2YWx9YDtcbiB9fVxuXG4gfTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUHJpbWl0aXZlS2V5IjpbImlzUHJpbWl0aXZlS2V5Il0sImFzc2VydFByaW1pdGl2ZUtleSI6WyJhc3NlcnRQcmltaXRpdmVLZXkiXSwiY2hlY2tTY2FsYXJLZXkiOlsiY2hlY2tTY2FsYXJLZXkiXSwiaXNTY2FsYXJLZXkiOlsiaXNTY2FsYXJLZXkiXSwiYXNzZXJ0U2NhbGFyS2V5IjpbImFzc2VydFNjYWxhcktleSJdLCJjaGVja0tleSI6WyJjaGVja0tleSJdLCJpc0tleSI6WyJpc0tleSJdLCJhc3NlcnRLZXkiOlsiYXNzZXJ0S2V5Il0sImNoZWNrQ29weVNldCI6WyJjaGVja0NvcHlTZXQiXSwiaXNDb3B5U2V0IjpbImlzQ29weVNldCJdLCJhc3NlcnRDb3B5U2V0IjpbImFzc2VydENvcHlTZXQiXSwiZ2V0Q29weVNldEtleXMiOlsiZ2V0Q29weVNldEtleXMiXSwiZXZlcnlDb3B5U2V0S2V5IjpbImV2ZXJ5Q29weVNldEtleSJdLCJtYWtlQ29weVNldCI6WyJtYWtlQ29weVNldCJdLCJjaGVja0NvcHlCYWciOlsiY2hlY2tDb3B5QmFnIl0sImlzQ29weUJhZyI6WyJpc0NvcHlCYWciXSwiYXNzZXJ0Q29weUJhZyI6WyJhc3NlcnRDb3B5QmFnIl0sImdldENvcHlCYWdFbnRyaWVzIjpbImdldENvcHlCYWdFbnRyaWVzIl0sImV2ZXJ5Q29weUJhZ0VudHJ5IjpbImV2ZXJ5Q29weUJhZ0VudHJ5Il0sIm1ha2VDb3B5QmFnIjpbIm1ha2VDb3B5QmFnIl0sIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIjpbIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIl0sImNoZWNrQ29weU1hcCI6WyJjaGVja0NvcHlNYXAiXSwiaXNDb3B5TWFwIjpbImlzQ29weU1hcCJdLCJhc3NlcnRDb3B5TWFwIjpbImFzc2VydENvcHlNYXAiXSwiZ2V0Q29weU1hcEtleXMiOlsiZ2V0Q29weU1hcEtleXMiXSwiZ2V0Q29weU1hcFZhbHVlcyI6WyJnZXRDb3B5TWFwVmFsdWVzIl0sImdldENvcHlNYXBFbnRyeUFycmF5IjpbImdldENvcHlNYXBFbnRyeUFycmF5Il0sImdldENvcHlNYXBFbnRyaWVzIjpbImdldENvcHlNYXBFbnRyaWVzIl0sImV2ZXJ5Q29weU1hcEtleSI6WyJldmVyeUNvcHlNYXBLZXkiXSwiZXZlcnlDb3B5TWFwVmFsdWUiOlsiZXZlcnlDb3B5TWFwVmFsdWUiXSwiY29weU1hcEtleVNldCI6WyJjb3B5TWFwS2V5U2V0Il0sIm1ha2VDb3B5TWFwIjpbIm1ha2VDb3B5TWFwIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANL+vHU6FQAAOhUAAC0AAABAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL2tleXMvY29tcGFyZUtleXMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyIsIi4vY2hlY2tLZXkuanMiLCIuL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzIl0sImV4cG9ydHMiOlsiYmFnQ29tcGFyZSIsImNvbXBhcmVLZXlzIiwia2V5RVEiLCJrZXlHVCIsImtleUdURSIsImtleUxUIiwia2V5TFRFIiwic2V0Q29tcGFyZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcGFzc1N0eWxlT2YsZ2V0VGFnLGNvbXBhcmVSYW5rLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlcyx0cml2aWFsQ29tcGFyYXRvcixxLEZhaWwsYXNzZXJ0S2V5LGdldENvcHlCYWdFbnRyaWVzLGdldENvcHlNYXBFbnRyeUFycmF5LGdldENvcHlTZXRLZXlzLG1ha2VDb21wYXJlQ29sbGVjdGlvbjskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjigI1fYSA9PiAocGFzc1N0eWxlT2YgPSAkaOKAjV9hKV1dLFtcImdldFRhZ1wiLCBbJGjigI1fYSA9PiAoZ2V0VGFnID0gJGjigI1fYSldXSxbXCJjb21wYXJlUmFua1wiLCBbJGjigI1fYSA9PiAoY29tcGFyZVJhbmsgPSAkaOKAjV9hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaOKAjV9hID0+IChyZWNvcmROYW1lcyA9ICRo4oCNX2EpXV0sW1wicmVjb3JkVmFsdWVzXCIsIFskaOKAjV9hID0+IChyZWNvcmRWYWx1ZXMgPSAkaOKAjV9hKV1dLFtcInRyaXZpYWxDb21wYXJhdG9yXCIsIFskaOKAjV9hID0+ICh0cml2aWFsQ29tcGFyYXRvciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRo4oCNX2EgPT4gKHEgPSAkaOKAjV9hKV1dLFtcIkZhaWxcIiwgWyRo4oCNX2EgPT4gKEZhaWwgPSAkaOKAjV9hKV1dXV0sW1wiLi9jaGVja0tleS5qc1wiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaOKAjV9hID0+IChhc3NlcnRLZXkgPSAkaOKAjV9hKV1dLFtcImdldENvcHlCYWdFbnRyaWVzXCIsIFskaOKAjV9hID0+IChnZXRDb3B5QmFnRW50cmllcyA9ICRo4oCNX2EpXV0sW1wiZ2V0Q29weU1hcEVudHJ5QXJyYXlcIiwgWyRo4oCNX2EgPT4gKGdldENvcHlNYXBFbnRyeUFycmF5ID0gJGjigI1fYSldXSxbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjigI1fYSA9PiAoZ2V0Q29weVNldEtleXMgPSAkaOKAjV9hKV1dXV0sW1wiLi9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qc1wiLCBbW1wibWFrZUNvbXBhcmVDb2xsZWN0aW9uXCIsIFskaOKAjV9hID0+IChtYWtlQ29tcGFyZUNvbGxlY3Rpb24gPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNldENvbXBhcmU9bWFrZUNvbXBhcmVDb2xsZWN0aW9uKFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbihzKT0+aGFyZGVuKGdldENvcHlTZXRLZXlzKHMpLm1hcCgoa2V5KT0+W2tleSwxXSkpLFxuXG4wLFxudHJpdmlhbENvbXBhcmF0b3IpOyRo4oCNX29uY2Uuc2V0Q29tcGFyZShzZXRDb21wYXJlKTtcblxuaGFyZGVuKHNldENvbXBhcmUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYmFnQ29tcGFyZT1tYWtlQ29tcGFyZUNvbGxlY3Rpb24oXG5nZXRDb3B5QmFnRW50cmllcyxcbjBuLFxudHJpdmlhbENvbXBhcmF0b3IpOyRo4oCNX29uY2UuYmFnQ29tcGFyZShiYWdDb21wYXJlKTtcblxuaGFyZGVuKGJhZ0NvbXBhcmUpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0IEFCU0VOVD1TeW1ib2woJ2Fic2VudCcpO1xuLypcblxuXG5cblxuXG5cbiAqL1xuLy9cbmNvbnN0IF9tYXBDb21wYXJlPW1ha2VDb21wYXJlQ29sbGVjdGlvbihcbmdldENvcHlNYXBFbnRyeUFycmF5LFxuQUJTRU5ULFxuKGxlZnRWYWx1ZSxyaWdodFZhbHVlKT0+e1xuaWYobGVmdFZhbHVlPT09QUJTRU5UJiZyaWdodFZhbHVlPT09QUJTRU5UKXtcbnRocm93IEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGFic2VudCBlbnRyeSBwYWlyYDtcbiB9ZWxzZSBpZihsZWZ0VmFsdWU9PT1BQlNFTlQpe1xucmV0dXJuLTE7XG4gfWVsc2UgaWYocmlnaHRWYWx1ZT09PUFCU0VOVCl7XG5yZXR1cm4gMTtcbiB9ZWxzZXtcbi8vXG5yZXR1cm4gY29tcGFyZUtleXMobGVmdFZhbHVlLHJpZ2h0VmFsdWUpO1xuIH1cbiB9KTtcblxuaGFyZGVuKF9tYXBDb21wYXJlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGNvbXBhcmVLZXlzPShsZWZ0LHJpZ2h0KT0+e1xuYXNzZXJ0S2V5KGxlZnQpO1xuYXNzZXJ0S2V5KHJpZ2h0KTtcbmNvbnN0IGxlZnRTdHlsZT1wYXNzU3R5bGVPZihsZWZ0KTtcbmNvbnN0IHJpZ2h0U3R5bGU9cGFzc1N0eWxlT2YocmlnaHQpO1xuaWYobGVmdFN0eWxlIT09cmlnaHRTdHlsZSl7XG4vL1xucmV0dXJuIE5hTjtcbiB9XG5zd2l0Y2gobGVmdFN0eWxlKXtcbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOlxuY2FzZSdzeW1ib2wnOntcbi8vXG5yZXR1cm4gY29tcGFyZVJhbmsobGVmdCxyaWdodCk7XG4gfVxuY2FzZSdudW1iZXInOntcbmNvbnN0IHJhbmtDb21wPWNvbXBhcmVSYW5rKGxlZnQscmlnaHQpO1xuaWYocmFua0NvbXA9PT0wKXtcbnJldHVybiAwO1xuIH1cbmlmKE51bWJlci5pc05hTihsZWZ0KXx8TnVtYmVyLmlzTmFOKHJpZ2h0KSl7XG4vL1xuYXNzZXJ0KCFOdW1iZXIuaXNOYU4obGVmdCl8fCFOdW1iZXIuaXNOYU4ocmlnaHQpKTtcbnJldHVybiBOYU47XG4gfVxuLy9cbi8vXG5yZXR1cm4gcmFua0NvbXA7XG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmlmKGxlZnQ9PT1yaWdodCl7XG5yZXR1cm4gMDtcbiB9XG4vL1xuLy9cbnJldHVybiBOYU47XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgbGVuPU1hdGgubWluKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbi8vXG5jb25zdCByZXN1bHQ9Y29tcGFyZUtleXMobGVmdFtpXSxyaWdodFtpXSk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbi8vXG4vL1xuLy9cbnJldHVybiBjb21wYXJlUmFuayhsZWZ0Lmxlbmd0aCxyaWdodC5sZW5ndGgpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG5jb25zdCBsZWZ0TmFtZXM9cmVjb3JkTmFtZXMobGVmdCk7XG4vL1xuY29uc3QgcmlnaHROYW1lcz1yZWNvcmROYW1lcyhyaWdodCk7XG5cbi8vXG5pZigha2V5RVEobGVmdE5hbWVzLHJpZ2h0TmFtZXMpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIE5hTjtcbiB9XG4vL1xuY29uc3QgbGVmdFZhbHVlcz1yZWNvcmRWYWx1ZXMobGVmdCxsZWZ0TmFtZXMpO1xuLy9cbmNvbnN0IHJpZ2h0VmFsdWVzPXJlY29yZFZhbHVlcyhyaWdodCxyaWdodE5hbWVzKTtcbi8vXG4vL1xubGV0IHJlc3VsdD0wO1xuZm9yKGxldCBpPTA7aTxsZWZ0VmFsdWVzLmxlbmd0aDtpKz0xKXtcbmNvbnN0IGNvbXA9Y29tcGFyZUtleXMobGVmdFZhbHVlc1tpXSxyaWdodFZhbHVlc1tpXSk7XG5pZihOdW1iZXIuaXNOYU4oY29tcCkpe1xucmV0dXJuIE5hTjtcbiB9XG5pZihyZXN1bHQhPT1jb21wJiZjb21wIT09MCl7XG5pZihyZXN1bHQ9PT0wKXtcbnJlc3VsdD1jb21wO1xuIH1lbHNle1xuYXNzZXJ0KFxucmVzdWx0PT09LTEmJmNvbXA9PT0xfHxyZXN1bHQ9PT0xJiZjb21wPT09LTEpO1xuXG5yZXR1cm4gTmFOO1xuIH1cbiB9XG4gfVxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiByZXN1bHQ7XG4gfVxuY2FzZSd0YWdnZWQnOntcbi8vXG5jb25zdCBsZWZ0VGFnPWdldFRhZyhsZWZ0KTtcbi8vXG5jb25zdCByaWdodFRhZz1nZXRUYWcocmlnaHQpO1xuaWYobGVmdFRhZyE9PXJpZ2h0VGFnKXtcbi8vXG5yZXR1cm4gTmFOO1xuIH1cbnN3aXRjaChsZWZ0VGFnKXtcbmNhc2UnY29weVNldCc6e1xuLy9cbnJldHVybiBzZXRDb21wYXJlKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UnY29weUJhZyc6e1xuLy9cbnJldHVybiBiYWdDb21wYXJlKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UnY29weU1hcCc6e1xuLy9cbi8vXG50aHJvdyBGYWlsIGBNYXAgY29tcGFyaXNvbiBub3QgeWV0IGltcGxlbWVudGVkOiAke2xlZnR9IHZzICR7cmlnaHR9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYHVuZXhwZWN0ZWQgdGFnICR7cShsZWZ0VGFnKX06ICR7bGVmdH1gO1xuIH19XG5cbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYHVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShsZWZ0U3R5bGUpfTogJHtsZWZ0fWA7XG4gfX1cblxuIH07JGjigI1fb25jZS5jb21wYXJlS2V5cyhjb21wYXJlS2V5cyk7XG5oYXJkZW4oY29tcGFyZUtleXMpO1xuXG5jb25zdCAgICAgICAga2V5TFQ9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KTwwOyRo4oCNX29uY2Uua2V5TFQoa2V5TFQpO1xuaGFyZGVuKGtleUxUKTtcblxuY29uc3QgICAgICAgIGtleUxURT0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPD0wOyRo4oCNX29uY2Uua2V5TFRFKGtleUxURSk7XG5oYXJkZW4oa2V5TFRFKTtcblxuY29uc3QgICAgICAgIGtleUVRPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk9PT0wOyRo4oCNX29uY2Uua2V5RVEoa2V5RVEpO1xuaGFyZGVuKGtleUVRKTtcblxuY29uc3QgICAgICAgIGtleUdURT0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPj0wOyRo4oCNX29uY2Uua2V5R1RFKGtleUdURSk7XG5oYXJkZW4oa2V5R1RFKTtcblxuY29uc3QgICAgICAgIGtleUdUPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk+MDskaOKAjV9vbmNlLmtleUdUKGtleUdUKTtcbmhhcmRlbihrZXlHVCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzZXRDb21wYXJlIjpbInNldENvbXBhcmUiXSwiYmFnQ29tcGFyZSI6WyJiYWdDb21wYXJlIl0sImNvbXBhcmVLZXlzIjpbImNvbXBhcmVLZXlzIl0sImtleUxUIjpbImtleUxUIl0sImtleUxURSI6WyJrZXlMVEUiXSwia2V5RVEiOlsia2V5RVEiXSwia2V5R1RFIjpbImtleUdURSJdLCJrZXlHVCI6WyJrZXlHVCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB9Z1ck4Q0AAOENAAApAAAAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL2NvcHlCYWcuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydEJhZ0VudHJpZXMiLCJhc3NlcnROb0R1cGxpY2F0ZUtleXMiLCJjaGVja0JhZ0VudHJpZXMiLCJjb2VyY2VUb0JhZ0VudHJpZXMiLCJtYWtlQmFnT2ZFbnRyaWVzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsY29tcGFyZUFudGlSYW5rLGlzUmFua1NvcnRlZCxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLFg7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRo4oCNX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjigI1fYSA9PiAobWFrZVRhZ2dlZCA9ICRo4oCNX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRo4oCNX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRo4oCNX2EpXV0sW1wiaXNSYW5rU29ydGVkXCIsIFskaOKAjV9hID0+IChpc1JhbmtTb3J0ZWQgPSAkaOKAjV9hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaOKAjV9hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRo4oCNX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjigI1fYSA9PiAoc29ydEJ5UmFuayA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRo4oCNX2EgPT4gKFggPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja05vRHVwbGljYXRlS2V5cz0oYmFnRW50cmllcyxmdWxsQ29tcGFyZSxjaGVjayk9Pntcbi8vXG4vL1xuLy9cbi8vXG5mdWxsQ29tcGFyZT1mdWxsQ29tcGFyZXx8bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcblxuLy9cbi8vXG4vL1xuYmFnRW50cmllcz1zb3J0QnlSYW5rKGJhZ0VudHJpZXMsZnVsbENvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1iYWdFbnRyaWVzO1xuZm9yKGxldCBpPTE7aTxsZW5ndGg7aSs9MSl7XG5jb25zdCBrMD1iYWdFbnRyaWVzW2ktMV1bMF07XG5jb25zdCBrMT1iYWdFbnRyaWVzW2ldWzBdO1xuaWYoZnVsbENvbXBhcmUoazAsazEpPT09MCl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgdmFsdWUgaGFzIGR1cGxpY2F0ZSBrZXlzOiAke2swfWApO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZUtleXM9KGJhZ0VudHJpZXMsZnVsbENvbXBhcmU9dW5kZWZpbmVkKT0+e1xuY2hlY2tOb0R1cGxpY2F0ZUtleXMoYmFnRW50cmllcyxmdWxsQ29tcGFyZSxhc3NlcnRDaGVja2VyKTtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjigI1fb25jZS5hc3NlcnROb0R1cGxpY2F0ZUtleXMoYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKTtcbmNvbnN0ICAgICAgICBjaGVja0JhZ0VudHJpZXM9KGJhZ0VudHJpZXMsY2hlY2spPT57XG5pZihwYXNzU3R5bGVPZihiYWdFbnRyaWVzKSE9PSdjb3B5QXJyYXknKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGVudHJpZXMgb2YgYSBjb3B5QmFnIG11c3QgYmUgYSBjb3B5QXJyYXk6ICR7YmFnRW50cmllc31gKTtcblxuIH1cbmlmKCFpc1JhbmtTb3J0ZWQoYmFnRW50cmllcyxjb21wYXJlQW50aVJhbmspKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGVudHJpZXMgb2YgYSBjb3B5QmFnIG11c3QgYmUgc29ydGVkIGluIHJldmVyc2UgcmFuayBvcmRlcjogJHtiYWdFbnRyaWVzfWApO1xuXG4gfVxuZm9yKGNvbnN0IGVudHJ5IG9mIGJhZ0VudHJpZXMpe1xuaWYoXG5wYXNzU3R5bGVPZihlbnRyeSkhPT0nY29weUFycmF5J3x8XG5lbnRyeS5sZW5ndGghPT0yfHxcbnR5cGVvZiBlbnRyeVsxXSE9PSdiaWdpbnQnKVxue1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBFYWNoIGVudHJ5IG9mIGEgY29weUJhZyBtdXN0IGJlIHBhaXIgb2YgYSBrZXkgYW5kIGEgYmlnaW50IHJlcHJlc2VudGluZyBhIGNvdW50OiAke2VudHJ5fWApO1xuXG4gfVxuaWYoZW50cnlbMV08MSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYEVhY2ggZW50cnkgb2YgYSBjb3B5QmFnIG11c3QgaGF2ZSBhIHBvc2l0aXZlIGNvdW50OiAke2VudHJ5fWApO1xuXG4gfVxuIH1cbi8vXG5yZXR1cm4gY2hlY2tOb0R1cGxpY2F0ZUtleXMoYmFnRW50cmllcyx1bmRlZmluZWQsY2hlY2spO1xuIH07JGjigI1fb25jZS5jaGVja0JhZ0VudHJpZXMoY2hlY2tCYWdFbnRyaWVzKTtcbmhhcmRlbihjaGVja0JhZ0VudHJpZXMpO1xuXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRCYWdFbnRyaWVzPShiYWdFbnRyaWVzKT0+e1xuY2hlY2tCYWdFbnRyaWVzKGJhZ0VudHJpZXMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaOKAjV9vbmNlLmFzc2VydEJhZ0VudHJpZXMoYXNzZXJ0QmFnRW50cmllcyk7XG5oYXJkZW4oYXNzZXJ0QmFnRW50cmllcyk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgY29lcmNlVG9CYWdFbnRyaWVzPShiYWdFbnRyaWVzTGlzdCk9PntcbmNvbnN0IGJhZ0VudHJpZXM9c29ydEJ5UmFuayhiYWdFbnRyaWVzTGlzdCxjb21wYXJlQW50aVJhbmspO1xuYXNzZXJ0QmFnRW50cmllcyhiYWdFbnRyaWVzKTtcbnJldHVybiBiYWdFbnRyaWVzO1xuIH07JGjigI1fb25jZS5jb2VyY2VUb0JhZ0VudHJpZXMoY29lcmNlVG9CYWdFbnRyaWVzKTtcbmhhcmRlbihjb2VyY2VUb0JhZ0VudHJpZXMpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUJhZ09mRW50cmllcz0oYmFnRW50cnlJdGVyKT0+XG5tYWtlVGFnZ2VkKCdjb3B5QmFnJyxjb2VyY2VUb0JhZ0VudHJpZXMoYmFnRW50cnlJdGVyKSk7JGjigI1fb25jZS5tYWtlQmFnT2ZFbnRyaWVzKG1ha2VCYWdPZkVudHJpZXMpO1xuaGFyZGVuKG1ha2VCYWdPZkVudHJpZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzIjpbImFzc2VydE5vRHVwbGljYXRlS2V5cyJdLCJjaGVja0JhZ0VudHJpZXMiOlsiY2hlY2tCYWdFbnRyaWVzIl0sImFzc2VydEJhZ0VudHJpZXMiOlsiYXNzZXJ0QmFnRW50cmllcyJdLCJjb2VyY2VUb0JhZ0VudHJpZXMiOlsiY29lcmNlVG9CYWdFbnRyaWVzIl0sIm1ha2VCYWdPZkVudHJpZXMiOlsibWFrZUJhZ09mRW50cmllcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACTDHgB6AsAAOgLAAApAAAAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL2NvcHlTZXQuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydEVsZW1lbnRzIiwiYXNzZXJ0Tm9EdXBsaWNhdGVzIiwiY2hlY2tFbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiLCJtYWtlU2V0T2ZFbGVtZW50cyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGNvbXBhcmVBbnRpUmFuayxpc1JhbmtTb3J0ZWQsbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxYOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaOKAjV9hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRo4oCNX2EgPT4gKG1ha2VUYWdnZWQgPSAkaOKAjV9hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaOKAjV9hID0+IChwYXNzU3R5bGVPZiA9ICRo4oCNX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaOKAjV9hID0+IChjb21wYXJlQW50aVJhbmsgPSAkaOKAjV9hKV1dLFtcImlzUmFua1NvcnRlZFwiLCBbJGjigI1fYSA9PiAoaXNSYW5rU29ydGVkID0gJGjigI1fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjigI1fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaOKAjV9hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRo4oCNX2EgPT4gKHNvcnRCeVJhbmsgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaOKAjV9hID0+IChYID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tOb0R1cGxpY2F0ZXM9KGVsZW1lbnRzLGZ1bGxDb21wYXJlLGNoZWNrKT0+e1xuLy9cbi8vXG4vL1xuLy9cbmZ1bGxDb21wYXJlPWZ1bGxDb21wYXJlfHxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG5lbGVtZW50cz1zb3J0QnlSYW5rKGVsZW1lbnRzLGZ1bGxDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09ZWxlbWVudHM7XG5mb3IobGV0IGk9MTtpPGxlbmd0aDtpKz0xKXtcbmNvbnN0IGswPWVsZW1lbnRzW2ktMV07XG5jb25zdCBrMT1lbGVtZW50c1tpXTtcbmlmKGZ1bGxDb21wYXJlKGswLGsxKT09PTApe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYHZhbHVlIGhhcyBkdXBsaWNhdGUga2V5czogJHtrMH1gKTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0Tm9EdXBsaWNhdGVzPShlbGVtZW50cyxmdWxsQ29tcGFyZT11bmRlZmluZWQpPT57XG5jaGVja05vRHVwbGljYXRlcyhlbGVtZW50cyxmdWxsQ29tcGFyZSxhc3NlcnRDaGVja2VyKTtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjigI1fb25jZS5hc3NlcnROb0R1cGxpY2F0ZXMoYXNzZXJ0Tm9EdXBsaWNhdGVzKTtcbmNvbnN0ICAgICAgICBjaGVja0VsZW1lbnRzPShlbGVtZW50cyxjaGVjayk9PntcbmlmKHBhc3NTdHlsZU9mKGVsZW1lbnRzKSE9PSdjb3B5QXJyYXknKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgVGhlIGtleXMgb2YgYSBjb3B5U2V0IG9yIGNvcHlNYXAgbXVzdCBiZSBhIGNvcHlBcnJheTogJHtlbGVtZW50c31gKTtcblxuIH1cbmlmKCFpc1JhbmtTb3J0ZWQoZWxlbWVudHMsY29tcGFyZUFudGlSYW5rKSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBrZXlzIG9mIGEgY29weVNldCBvciBjb3B5TWFwIG11c3QgYmUgc29ydGVkIGluIHJldmVyc2UgcmFuayBvcmRlcjogJHtlbGVtZW50c31gKTtcblxuIH1cbnJldHVybiBjaGVja05vRHVwbGljYXRlcyhlbGVtZW50cyx1bmRlZmluZWQsY2hlY2spO1xuIH07JGjigI1fb25jZS5jaGVja0VsZW1lbnRzKGNoZWNrRWxlbWVudHMpO1xuaGFyZGVuKGNoZWNrRWxlbWVudHMpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0RWxlbWVudHM9KGVsZW1lbnRzKT0+e1xuY2hlY2tFbGVtZW50cyhlbGVtZW50cyxhc3NlcnRDaGVja2VyKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0RWxlbWVudHMoYXNzZXJ0RWxlbWVudHMpO1xuaGFyZGVuKGFzc2VydEVsZW1lbnRzKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBjb2VyY2VUb0VsZW1lbnRzPShlbGVtZW50c0xpc3QpPT57XG5jb25zdCBlbGVtZW50cz1zb3J0QnlSYW5rKGVsZW1lbnRzTGlzdCxjb21wYXJlQW50aVJhbmspO1xuYXNzZXJ0RWxlbWVudHMoZWxlbWVudHMpO1xucmV0dXJuIGVsZW1lbnRzO1xuIH07JGjigI1fb25jZS5jb2VyY2VUb0VsZW1lbnRzKGNvZXJjZVRvRWxlbWVudHMpO1xuaGFyZGVuKGNvZXJjZVRvRWxlbWVudHMpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNldE9mRWxlbWVudHM9KGVsZW1lbnRJdGVyKT0+XG5tYWtlVGFnZ2VkKCdjb3B5U2V0Jyxjb2VyY2VUb0VsZW1lbnRzKGVsZW1lbnRJdGVyKSk7JGjigI1fb25jZS5tYWtlU2V0T2ZFbGVtZW50cyhtYWtlU2V0T2ZFbGVtZW50cyk7XG5oYXJkZW4obWFrZVNldE9mRWxlbWVudHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0Tm9EdXBsaWNhdGVzIjpbImFzc2VydE5vRHVwbGljYXRlcyJdLCJjaGVja0VsZW1lbnRzIjpbImNoZWNrRWxlbWVudHMiXSwiYXNzZXJ0RWxlbWVudHMiOlsiYXNzZXJ0RWxlbWVudHMiXSwiY29lcmNlVG9FbGVtZW50cyI6WyJjb2VyY2VUb0VsZW1lbnRzIl0sIm1ha2VTZXRPZkVsZW1lbnRzIjpbIm1ha2VTZXRPZkVsZW1lbnRzIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGwTKG33EgAA9xIAADkAAABAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIiwiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyIsIm1ha2VDb21wYXJlQ29sbGVjdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UmFua1NvcnRlZCxjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxtYWtlSXRlcmF0b3IsbWFrZUFycmF5SXRlcmF0b3IscSxGYWlsOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJhbmtTb3J0ZWRcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaOKAjV9hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjigI1fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjigI1fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjigI1fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaOKAjV9hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRo4oCNX2EgPT4gKHNvcnRCeVJhbmsgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanNcIiwgW1tcIm1ha2VJdGVyYXRvclwiLCBbJGjigI1fYSA9PiAobWFrZUl0ZXJhdG9yID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzXCIsIFtbXCJtYWtlQXJyYXlJdGVyYXRvclwiLCBbJGjigI1fYSA9PiAobWFrZUFycmF5SXRlcmF0b3IgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXM9KGVudHJpZXMscmFua0NvbXBhcmUsZnVsbENvbXBhcmUpPT57XG4vL1xuYXNzZXJ0UmFua1NvcnRlZChlbnRyaWVzLHJhbmtDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09ZW50cmllcztcbmxldCBpPTA7XG5sZXQgc2FtZVJhbmtJdGVyYXRvcjtcbnJldHVybiBtYWtlSXRlcmF0b3IoKCk9PntcbmlmKHNhbWVSYW5rSXRlcmF0b3Ipe1xuY29uc3QgcmVzdWx0PXNhbWVSYW5rSXRlcmF0b3IubmV4dCgpO1xuaWYoIXJlc3VsdC5kb25lKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuc2FtZVJhbmtJdGVyYXRvcj11bmRlZmluZWQ7XG4gfVxuaWYoaTxsZW5ndGgpe1xuY29uc3QgZW50cnk9ZW50cmllc1tpXTtcbi8vXG5sZXQgaj1pKzE7XG53aGlsZShqPGxlbmd0aCYmcmFua0NvbXBhcmUoZW50cnlbMF0sZW50cmllc1tqXVswXSk9PT0wKXtcbmorPTE7XG4gfVxuaWYoaj09PWkrMSl7XG4vL1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTplbnRyeX0pO1xuIH1cbmNvbnN0IHRpZXM9ZW50cmllcy5zbGljZShpLGopO1xuaT1qO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBzb3J0ZWRUaWVzPXNvcnRCeVJhbmsodGllcyxmdWxsQ29tcGFyZSk7XG5mb3IobGV0IGs9MTtrPHNvcnRlZFRpZXMubGVuZ3RoO2srPTEpe1xuLy9cbmNvbnN0W2tleTBdPXNvcnRlZFRpZXNbay0xXTtcbmNvbnN0W2tleTFdPXNvcnRlZFRpZXNba107XG5NYXRoLnNpZ24oZnVsbENvbXBhcmUoa2V5MCxrZXkxKSl8fFxuRmFpbCBgRHVwbGljYXRlIGVudHJ5IGtleTogJHtrZXkwfWA7XG4gfVxuc2FtZVJhbmtJdGVyYXRvcj1tYWtlQXJyYXlJdGVyYXRvcihzb3J0ZWRUaWVzKTtcbnJldHVybiBzYW1lUmFua0l0ZXJhdG9yLm5leHQoKTtcbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfSk7XG4gfTtcbmhhcmRlbihnZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzPShcbmMxLFxuYzIsXG5nZXRFbnRyaWVzLFxuYWJzZW50VmFsdWUpPT5cbntcbmNvbnN0IGUxPWdldEVudHJpZXMoYzEpO1xuY29uc3QgZTI9Z2V0RW50cmllcyhjMik7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5jb25zdCB4PWdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXMoZTEsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbmNvbnN0IHk9Z2VuZXJhdGVGdWxsU29ydGVkRW50cmllcyhlMixjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xuXG4vL1xuLy9cbmxldCB4RG9uZTtcbmxldCB4S2V5O1xubGV0IHhWYWx1ZTtcbmxldCB5RG9uZTtcbmxldCB5S2V5O1xubGV0IHlWYWx1ZTtcbmNvbnN0IG5vbkVudHJ5PVt1bmRlZmluZWQsdW5kZWZpbmVkXTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBtdXN0IG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbmNvbnN0IHJlc3VsdD14VmFsdWU7XG4oe2RvbmU6eERvbmUsdmFsdWU6W3hLZXkseFZhbHVlXT1ub25FbnRyeX09eC5uZXh0KCkpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xubmV4dFgoKTtcbmNvbnN0IG5leHRZPSgpPT57XG4heURvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WSBtdXN0IG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbmNvbnN0IHJlc3VsdD15VmFsdWU7XG4oe2RvbmU6eURvbmUsdmFsdWU6W3lLZXkseVZhbHVlXT1ub25FbnRyeX09eS5uZXh0KCkpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xubmV4dFkoKTtcbnJldHVybiBtYWtlSXRlcmF0b3IoKCk9PntcbmxldCBkb25lPWZhbHNlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZih4RG9uZSYmeURvbmUpe1xuZG9uZT10cnVlO1xudmFsdWU9W3VuZGVmaW5lZCxhYnNlbnRWYWx1ZSxhYnNlbnRWYWx1ZV07XG4gfWVsc2UgaWYoeERvbmUpe1xudmFsdWU9W3lLZXksYWJzZW50VmFsdWUsbmV4dFkoKV07XG4gfWVsc2UgaWYoeURvbmUpe1xudmFsdWU9W3hLZXksbmV4dFgoKSxhYnNlbnRWYWx1ZV07XG4gfWVsc2V7XG4vL1xuLy9cbmNvbnN0IGNvbXA9ZnVsbENvbXBhcmUoeEtleSx5S2V5KTtcbmlmKGNvbXA9PT0wKXtcbnZhbHVlPVt4S2V5LG5leHRYKCksbmV4dFkoKV07XG4gfWVsc2UgaWYoY29tcDwwKXtcbnZhbHVlPVt4S2V5LG5leHRYKCksYWJzZW50VmFsdWVdO1xuIH1lbHNlIGlmKGNvbXA+MCl7XG52YWx1ZT1beUtleSxhYnNlbnRWYWx1ZSxuZXh0WSgpXTtcbiB9ZWxzZXtcbnRocm93IEZhaWwgYFVuZXhwZWN0ZWQga2V5IGNvbXBhcmlzb24gJHtxKGNvbXApfSBmb3IgJHt4S2V5fSB2cyAke3lLZXl9YDtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZSx2YWx1ZX0pO1xuIH0pO1xuIH07JGjigI1fb25jZS5nZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyhnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyk7XG5oYXJkZW4oZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb21wYXJlQ29sbGVjdGlvbj0oZ2V0RW50cmllcyxhYnNlbnRWYWx1ZSxjb21wYXJlVmFsdWVzKT0+XG5oYXJkZW4oKGxlZnQscmlnaHQpPT57XG5jb25zdCBtZXJnZWQ9Z2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMoXG5sZWZ0LFxucmlnaHQsXG5nZXRFbnRyaWVzLFxuYWJzZW50VmFsdWUpO1xuXG5sZXQgbGVmdElzQmlnZ2VyPWZhbHNlO1xubGV0IHJpZ2h0SXNCaWdnZXI9ZmFsc2U7XG5mb3IoY29uc3RbX2tleSxsZWZ0VmFsdWUscmlnaHRWYWx1ZV1vZiBtZXJnZWQpe1xuY29uc3QgY29tcD1jb21wYXJlVmFsdWVzKGxlZnRWYWx1ZSxyaWdodFZhbHVlKTtcbmlmKGNvbXA9PT0wKXtcbi8vXG5jb250aW51ZTtcbiB9ZWxzZSBpZihjb21wPDApe1xuLy9cbnJpZ2h0SXNCaWdnZXI9dHJ1ZTtcbiB9ZWxzZSBpZihjb21wPjApe1xuLy9cbmxlZnRJc0JpZ2dlcj10cnVlO1xuIH1lbHNle1xuTnVtYmVyLmlzTmFOKGNvbXApfHxcbi8vXG5GYWlsIGBVbmV4cGVjdGVkIHZhbHVlIGNvbXBhcmlzb24gJHtxKGNvbXApfSBmb3IgJHtsZWZ0VmFsdWV9IHZzICR7cmlnaHRWYWx1ZX1gO1xucmV0dXJuIE5hTjtcbiB9XG5pZihsZWZ0SXNCaWdnZXImJnJpZ2h0SXNCaWdnZXIpe1xucmV0dXJuIE5hTjtcbiB9XG4gfVxuLy9cbnJldHVybiBsZWZ0SXNCaWdnZXI/MTpyaWdodElzQmlnZ2VyPy0xOjA7XG4gfSk7JGjigI1fb25jZS5tYWtlQ29tcGFyZUNvbGxlY3Rpb24obWFrZUNvbXBhcmVDb2xsZWN0aW9uKTtcbmhhcmRlbihtYWtlQ29tcGFyZUNvbGxlY3Rpb24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMiOlsiZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMiXSwibWFrZUNvbXBhcmVDb2xsZWN0aW9uIjpbIm1ha2VDb21wYXJlQ29sbGVjdGlvbiJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC+PIcEbBYAAGwWAAA1AAAAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyIsIi4vY29weUJhZy5qcyJdLCJleHBvcnRzIjpbImJhZ0Rpc2pvaW50U3VidHJhY3QiLCJiYWdJbnRlcnNlY3Rpb24iLCJiYWdJc0Rpc2pvaW50IiwiYmFnSXNTdXBlcmJhZyIsImJhZ1VuaW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRSYW5rU29ydGVkLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLHEsRmFpbCxhc3NlcnROb0R1cGxpY2F0ZUtleXMsbWFrZUJhZ09mRW50cmllczskaOKAjV9pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaOKAjV9hID0+IChhc3NlcnRSYW5rU29ydGVkID0gJGjigI1fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRo4oCNX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRo4oCNX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjigI1fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaOKAjV9hID0+IChzb3J0QnlSYW5rID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV1dXSxbXCIuL2NvcHlCYWcuanNcIiwgW1tcImFzc2VydE5vRHVwbGljYXRlS2V5c1wiLCBbJGjigI1fYSA9PiAoYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzID0gJGjigI1fYSldXSxbXCJtYWtlQmFnT2ZFbnRyaWVzXCIsIFskaOKAjV9hID0+IChtYWtlQmFnT2ZFbnRyaWVzID0gJGjigI1fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgYmFnV2luZG93UmVzb3J0PShiYWdFbnRyaWVzLHJhbmtDb21wYXJlLGZ1bGxDb21wYXJlKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChiYWdFbnRyaWVzLHJhbmtDb21wYXJlKTtcbmNvbnN0e2xlbmd0aH09YmFnRW50cmllcztcbmxldCBpPTA7XG5sZXQgb3B0SW5uZXJJdGVyYXRvcjtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PlxuaGFyZGVuKHtcbm5leHQ6KCk9PntcbmlmKG9wdElubmVySXRlcmF0b3Ipe1xuY29uc3QgcmVzdWx0PW9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuaWYocmVzdWx0LmRvbmUpe1xub3B0SW5uZXJJdGVyYXRvcj11bmRlZmluZWQ7XG4vL1xuIH1lbHNle1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuaWYoaTxsZW5ndGgpe1xuY29uc3QgZW50cnk9YmFnRW50cmllc1tpXTtcbmxldCBqPWkrMTtcbndoaWxlKFxuajxsZW5ndGgmJlxucmFua0NvbXBhcmUoZW50cnlbMF0sYmFnRW50cmllc1tqXVswXSk9PT0wKVxue1xuais9MTtcbiB9XG5pZihqPT09aSsxKXtcbmk9ajtcbnJldHVybiBoYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6ZW50cnl9KTtcbiB9XG5jb25zdCBzaW1pbGFyUnVuPWJhZ0VudHJpZXMuc2xpY2UoaSxqKTtcbmk9ajtcbmNvbnN0IHJlc29ydGVkPXNvcnRCeVJhbmsoc2ltaWxhclJ1bixmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG5hc3NlcnROb0R1cGxpY2F0ZUtleXMocmVzb3J0ZWQsZnVsbENvbXBhcmUpO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5vcHRJbm5lckl0ZXJhdG9yPXJlc29ydGVkW1N5bWJvbC5pdGVyYXRvcl0oKTtcbnJldHVybiBvcHRJbm5lckl0ZXJhdG9yLm5leHQoKTtcbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTpbbnVsbCwwbl19KTtcbiB9XG4gfX0pfSk7XG5cblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtZXJnZT0oeGJhZ0VudHJpZXMseWJhZ0VudHJpZXMpPT57XG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbmNvbnN0IHhzPWJhZ1dpbmRvd1Jlc29ydCh4YmFnRW50cmllcyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xuY29uc3QgeXM9YmFnV2luZG93UmVzb3J0KHliYWdFbnRyaWVzLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5yZXR1cm4gaGFyZGVuKHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICovXG5sZXQgeDtcbmxldCB4YztcbmxldCB4RG9uZTtcbi8qICAgICAgICAgICAgKi9cbmxldCB5O1xubGV0IHljO1xubGV0IHlEb25lO1xuXG5jb25zdCB4aT14c1tTeW1ib2wuaXRlcmF0b3JdKCk7XG5jb25zdCBuZXh0WD0oKT0+e1xuIXhEb25lfHxGYWlsIGBJbnRlcm5hbDogbmV4dFggc2hvdWxkIG5vdCBiZSBjYWxsZWQgb25jZSBkb25lYDtcbih7XG5kb25lOnhEb25lLFxudmFsdWU6W3gseGNdfT1cbnhpLm5leHQoKSk7XG4gfTtcbm5leHRYKCk7XG5cbmNvbnN0IHlpPXlzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRZPSgpPT57XG4heURvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WSBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtcbmRvbmU6eURvbmUsXG52YWx1ZTpbeSx5Y119PVxueWkubmV4dCgpKTtcbiB9O1xubmV4dFkoKTtcblxucmV0dXJuIGhhcmRlbih7XG5uZXh0OigpPT57XG4vKiAgICAgICAgICAgICAgICAgICovXG5sZXQgZG9uZT1mYWxzZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZih4RG9uZSYmeURvbmUpe1xuZG9uZT10cnVlO1xuLy9cbnZhbHVlPVtudWxsLDBuLDBuXTtcbiB9ZWxzZSBpZih4RG9uZSl7XG4vL1xudmFsdWU9W3ksMG4seWNdO1xubmV4dFkoKTtcbiB9ZWxzZSBpZih5RG9uZSl7XG4vL1xudmFsdWU9W3gseGMsMG5dO1xubmV4dFgoKTtcbiB9ZWxzZXtcbmNvbnN0IGNvbXA9ZnVsbENvbXBhcmUoeCx5KTtcbmlmKGNvbXA9PT0wKXtcbi8vXG52YWx1ZT1beCx4Yyx5Y107XG5uZXh0WCgpO1xubmV4dFkoKTtcbiB9ZWxzZSBpZihjb21wPDApe1xuLy9cbnZhbHVlPVt4LHhjLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG4vL1xuY29tcD4wfHxGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBjb21wICR7cShjb21wKX1gO1xudmFsdWU9W3ksMG4seWNdO1xubmV4dFkoKTtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZSx2YWx1ZX0pO1xuIH19KTtcblxuIH19KTtcblxuIH07XG5oYXJkZW4obWVyZ2UpO1xuXG4vL1xuLy9cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJJc1N1cGVyYmFnPSh4eWkpPT57XG5mb3IoY29uc3RbX20seGMseWNdb2YgeHlpKXtcbmlmKHhjPHljKXtcbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8vXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlcklzRGlzam9pbnQ9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM+PTFuJiZ5Yz49MW4pe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlclVuaW9uPSh4eWkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5yZXN1bHQucHVzaChbbSx4Yyt5Y10pO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlckludGVyc2VjdGlvbj0oeHlpKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xuY29uc3QgbWM9eGM8PXljP3hjOnljO1xucmVzdWx0LnB1c2goW20sbWNdKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGJhZ0l0ZXJEaXNqb2ludFN1YnRyYWN0PSh4eWkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5jb25zdCBtYz14Yy15Yztcbm1jPj0wbnx8RmFpbCBgcmlnaHQgZWxlbWVudCAke219IHdhcyBub3QgaW4gbGVmdGA7XG5pZihtYz49MW4pe1xuLy9cbnJlc3VsdC5wdXNoKFttLG1jXSk7XG4gfVxuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuY29uc3QgbWVyZ2VpZnk9KGJhZ0l0ZXJPcCk9Pih4YmFnRW50cmllcyx5YmFnRW50cmllcyk9PlxuYmFnSXRlck9wKG1lcmdlKHhiYWdFbnRyaWVzLHliYWdFbnRyaWVzKSk7XG5cbmNvbnN0IGJhZ0VudHJpZXNJc1N1cGVyYmFnPW1lcmdlaWZ5KGJhZ0l0ZXJJc1N1cGVyYmFnKTtcbmNvbnN0IGJhZ0VudHJpZXNJc0Rpc2pvaW50PW1lcmdlaWZ5KGJhZ0l0ZXJJc0Rpc2pvaW50KTtcbmNvbnN0IGJhZ0VudHJpZXNVbmlvbj1tZXJnZWlmeShiYWdJdGVyVW5pb24pO1xuY29uc3QgYmFnRW50cmllc0ludGVyc2VjdGlvbj1tZXJnZWlmeShiYWdJdGVySW50ZXJzZWN0aW9uKTtcbmNvbnN0IGJhZ0VudHJpZXNEaXNqb2ludFN1YnRyYWN0PW1lcmdlaWZ5KGJhZ0l0ZXJEaXNqb2ludFN1YnRyYWN0KTtcblxuY29uc3QgcmF3QmFnaWZ5PShiYWdFbnRyaWVzT3ApPT4oeGJhZyx5YmFnKT0+XG5iYWdFbnRyaWVzT3AoeGJhZy5wYXlsb2FkLHliYWcucGF5bG9hZCk7XG5cbmNvbnN0IGJhZ2lmeT0oYmFnRW50cmllc09wKT0+KHhiYWcseWJhZyk9PlxubWFrZUJhZ09mRW50cmllcyhiYWdFbnRyaWVzT3AoeGJhZy5wYXlsb2FkLHliYWcucGF5bG9hZCkpO1xuXG5jb25zdCAgICAgICAgYmFnSXNTdXBlcmJhZz1yYXdCYWdpZnkoYmFnRW50cmllc0lzU3VwZXJiYWcpOyRo4oCNX29uY2UuYmFnSXNTdXBlcmJhZyhiYWdJc1N1cGVyYmFnKTtcbmNvbnN0ICAgICAgICBiYWdJc0Rpc2pvaW50PXJhd0JhZ2lmeShiYWdFbnRyaWVzSXNEaXNqb2ludCk7JGjigI1fb25jZS5iYWdJc0Rpc2pvaW50KGJhZ0lzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIGJhZ1VuaW9uPWJhZ2lmeShiYWdFbnRyaWVzVW5pb24pOyRo4oCNX29uY2UuYmFnVW5pb24oYmFnVW5pb24pO1xuY29uc3QgICAgICAgIGJhZ0ludGVyc2VjdGlvbj1iYWdpZnkoYmFnRW50cmllc0ludGVyc2VjdGlvbik7JGjigI1fb25jZS5iYWdJbnRlcnNlY3Rpb24oYmFnSW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBiYWdEaXNqb2ludFN1YnRyYWN0PWJhZ2lmeShiYWdFbnRyaWVzRGlzam9pbnRTdWJ0cmFjdCk7JGjigI1fb25jZS5iYWdEaXNqb2ludFN1YnRyYWN0KGJhZ0Rpc2pvaW50U3VidHJhY3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYmFnSXNTdXBlcmJhZyI6WyJiYWdJc1N1cGVyYmFnIl0sImJhZ0lzRGlzam9pbnQiOlsiYmFnSXNEaXNqb2ludCJdLCJiYWdVbmlvbiI6WyJiYWdVbmlvbiJdLCJiYWdJbnRlcnNlY3Rpb24iOlsiYmFnSW50ZXJzZWN0aW9uIl0sImJhZ0Rpc2pvaW50U3VidHJhY3QiOlsiYmFnRGlzam9pbnRTdWJ0cmFjdCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADSDQPJrRwAAK0cAAA1AAAAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyIsIi4vY29weVNldC5qcyJdLCJleHBvcnRzIjpbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNVbmlvbiIsInNldERpc2pvaW50U3VidHJhY3QiLCJzZXREaXNqb2ludFVuaW9uIiwic2V0SW50ZXJzZWN0aW9uIiwic2V0SXNEaXNqb2ludCIsInNldElzU3VwZXJzZXQiLCJzZXRVbmlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UmFua1NvcnRlZCxjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxxLEZhaWwsYXNzZXJ0Tm9EdXBsaWNhdGVzLG1ha2VTZXRPZkVsZW1lbnRzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJhbmtTb3J0ZWRcIiwgWyRo4oCNX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaOKAjV9hKV1dLFtcImNvbXBhcmVBbnRpUmFua1wiLCBbJGjigI1fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjigI1fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjigI1fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaOKAjV9hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRo4oCNX2EgPT4gKHNvcnRCeVJhbmsgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaOKAjV9hID0+IChxID0gJGjigI1fYSldXSxbXCJGYWlsXCIsIFskaOKAjV9hID0+IChGYWlsID0gJGjigI1fYSldXV1dLFtcIi4vY29weVNldC5qc1wiLCBbW1wiYXNzZXJ0Tm9EdXBsaWNhdGVzXCIsIFskaOKAjV9hID0+IChhc3NlcnROb0R1cGxpY2F0ZXMgPSAkaOKAjV9hKV1dLFtcIm1ha2VTZXRPZkVsZW1lbnRzXCIsIFskaOKAjV9hID0+IChtYWtlU2V0T2ZFbGVtZW50cyA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgd2luZG93UmVzb3J0PShlbGVtZW50cyxyYW5rQ29tcGFyZSxmdWxsQ29tcGFyZSk9PntcbmFzc2VydFJhbmtTb3J0ZWQoZWxlbWVudHMscmFua0NvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1lbGVtZW50cztcbmxldCBpPTA7XG5sZXQgb3B0SW5uZXJJdGVyYXRvcjtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PlxuaGFyZGVuKHtcbm5leHQ6KCk9PntcbmlmKG9wdElubmVySXRlcmF0b3Ipe1xuY29uc3QgcmVzdWx0PW9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuaWYocmVzdWx0LmRvbmUpe1xub3B0SW5uZXJJdGVyYXRvcj11bmRlZmluZWQ7XG4vL1xuIH1lbHNle1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxuaWYoaTxsZW5ndGgpe1xuY29uc3QgdmFsdWU9ZWxlbWVudHNbaV07XG5sZXQgaj1pKzE7XG53aGlsZShqPGxlbmd0aCYmcmFua0NvbXBhcmUodmFsdWUsZWxlbWVudHNbal0pPT09MCl7XG5qKz0xO1xuIH1cbmlmKGo9PT1pKzEpe1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH1cbmNvbnN0IHNpbWlsYXJSdW49ZWxlbWVudHMuc2xpY2UoaSxqKTtcbmk9ajtcbmNvbnN0IHJlc29ydGVkPXNvcnRCeVJhbmsoc2ltaWxhclJ1bixmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG5hc3NlcnROb0R1cGxpY2F0ZXMocmVzb3J0ZWQsZnVsbENvbXBhcmUpO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5vcHRJbm5lckl0ZXJhdG9yPXJlc29ydGVkW1N5bWJvbC5pdGVyYXRvcl0oKTtcbnJldHVybiBvcHRJbm5lckl0ZXJhdG9yLm5leHQoKTtcbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTpudWxsfSk7XG4gfVxuIH19KX0pO1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWVyZ2U9KHhlbGVtZW50cyx5ZWxlbWVudHMpPT57XG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbmNvbnN0IHhzPXdpbmRvd1Jlc29ydCh4ZWxlbWVudHMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbmNvbnN0IHlzPXdpbmRvd1Jlc29ydCh5ZWxlbWVudHMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9Pntcbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgKi9cbmxldCB4O1xubGV0IHhEb25lO1xuLyogICAgICAgICAgICAqL1xubGV0IHk7XG5sZXQgeURvbmU7XG5cbmNvbnN0IHhpPXhzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtkb25lOnhEb25lLHZhbHVlOnh9PXhpLm5leHQoKSk7XG4gfTtcbm5leHRYKCk7XG5cbmNvbnN0IHlpPXlzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRZPSgpPT57XG4heURvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WSBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtkb25lOnlEb25lLHZhbHVlOnl9PXlpLm5leHQoKSk7XG4gfTtcbm5leHRZKCk7XG5cbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IGRvbmU9ZmFsc2U7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHZhbHVlO1xuaWYoeERvbmUmJnlEb25lKXtcbmRvbmU9dHJ1ZTtcbi8vXG52YWx1ZT1bbnVsbCwwbiwwbl07XG4gfWVsc2UgaWYoeERvbmUpe1xuLy9cbnZhbHVlPVt5LDBuLDFuXTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoeURvbmUpe1xuLy9cbnZhbHVlPVt4LDFuLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG5jb25zdCBjb21wPWZ1bGxDb21wYXJlKHgseSk7XG5pZihjb21wPT09MCl7XG4vL1xudmFsdWU9W3gsMW4sMW5dO1xubmV4dFgoKTtcbm5leHRZKCk7XG4gfWVsc2UgaWYoY29tcDwwKXtcbi8vXG52YWx1ZT1beCwxbiwwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuLy9cbmNvbXA+MHx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY29tcCAke3EoY29tcCl9YDtcbnZhbHVlPVt5LDBuLDFuXTtcbm5leHRZKCk7XG4gfVxuIH1cbnJldHVybiBoYXJkZW4oe2RvbmUsdmFsdWV9KTtcbiB9fSk7XG5cbiB9fSk7XG5cbiB9O1xuaGFyZGVuKG1lcmdlKTtcblxuY29uc3QgaXRlcklzU3VwZXJzZXQ9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4YyxfeWNdb2YgeHlpKXtcbmlmKHhjPT09MG4pe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlcklzRGlzam9pbnQ9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM+PTFuJiZ5Yz49MW4pe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckNvbXBhcmU9KHh5aSk9PntcbmxldCBsb25lWT1mYWxzZTtcbmxldCBsb25lWD1mYWxzZTtcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM9PT0wbil7XG4vL1xubG9uZVk9dHJ1ZTtcbiB9XG5pZih5Yz09PTBuKXtcbi8vXG5sb25lWD10cnVlO1xuIH1cbmlmKGxvbmVYJiZsb25lWSl7XG5yZXR1cm4gTmFOO1xuIH1cbiB9XG5pZihsb25lWCl7XG5yZXR1cm4gMTtcbiB9ZWxzZSBpZihsb25lWSl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbiFsb25lWCYmIWxvbmVZfHxcbkZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGxvbmUgcGFpciAke3EoW2xvbmVYLGxvbmVZXSl9YDtcbnJldHVybiAwO1xuIH1cbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyVW5pb249KHh5aSk9PntcbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MG4pe1xucmVzdWx0LnB1c2gobSk7XG4gfWVsc2V7XG55Yz49MG58fEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGNvdW50ICR7cSh5Yyl9YDtcbi8vXG4vL1xucmVzdWx0LnB1c2gobSk7XG4gfVxuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckRpc2pvaW50VW5pb249KHh5aSk9PntcbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG54Yz09PTBufHx5Yz09PTBufHxGYWlsIGBTZXRzIG11c3Qgbm90IGhhdmUgY29tbW9uIGVsZW1lbnRzOiAke219YDtcbmlmKHhjPj0xbil7XG5yZXN1bHQucHVzaChtKTtcbiB9ZWxzZXtcbnljPj0xbnx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY291bnQgJHtxKHljKX1gO1xucmVzdWx0LnB1c2gobSk7XG4gfVxuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgaXRlckludGVyc2VjdGlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0xbiYmeWM+PTFuKXtcbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyRGlzam9pbnRTdWJ0cmFjdD0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnhjPj0xbnx8RmFpbCBgcmlnaHQgZWxlbWVudCAke219IHdhcyBub3QgaW4gbGVmdGA7XG5pZih5Yz09PTBuKXtcbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG5jb25zdCBtZXJnZWlmeT0oaXRlck9wKT0+KHhlbGVtZW50cyx5ZWxlbWVudHMpPT5cbml0ZXJPcChtZXJnZSh4ZWxlbWVudHMseWVsZW1lbnRzKSk7XG5cbmNvbnN0ICAgICAgICBlbGVtZW50c0lzU3VwZXJzZXQ9bWVyZ2VpZnkoaXRlcklzU3VwZXJzZXQpOyRo4oCNX29uY2UuZWxlbWVudHNJc1N1cGVyc2V0KGVsZW1lbnRzSXNTdXBlcnNldCk7XG5jb25zdCAgICAgICAgZWxlbWVudHNJc0Rpc2pvaW50PW1lcmdlaWZ5KGl0ZXJJc0Rpc2pvaW50KTskaOKAjV9vbmNlLmVsZW1lbnRzSXNEaXNqb2ludChlbGVtZW50c0lzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzQ29tcGFyZT1tZXJnZWlmeShpdGVyQ29tcGFyZSk7JGjigI1fb25jZS5lbGVtZW50c0NvbXBhcmUoZWxlbWVudHNDb21wYXJlKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c1VuaW9uPW1lcmdlaWZ5KGl0ZXJVbmlvbik7JGjigI1fb25jZS5lbGVtZW50c1VuaW9uKGVsZW1lbnRzVW5pb24pO1xuY29uc3QgICAgICAgIGVsZW1lbnRzRGlzam9pbnRVbmlvbj1tZXJnZWlmeShpdGVyRGlzam9pbnRVbmlvbik7JGjigI1fb25jZS5lbGVtZW50c0Rpc2pvaW50VW5pb24oZWxlbWVudHNEaXNqb2ludFVuaW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0ludGVyc2VjdGlvbj1tZXJnZWlmeShpdGVySW50ZXJzZWN0aW9uKTskaOKAjV9vbmNlLmVsZW1lbnRzSW50ZXJzZWN0aW9uKGVsZW1lbnRzSW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0Rpc2pvaW50U3VidHJhY3Q9bWVyZ2VpZnkoaXRlckRpc2pvaW50U3VidHJhY3QpOyRo4oCNX29uY2UuZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0KGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCk7XG5cbmNvbnN0IHJhd1NldGlmeT0oZWxlbWVudHNPcCk9Pih4c2V0LHlzZXQpPT5cbmVsZW1lbnRzT3AoeHNldC5wYXlsb2FkLHlzZXQucGF5bG9hZCk7XG5cbmNvbnN0IHNldGlmeT0oZWxlbWVudHNPcCk9Pih4c2V0LHlzZXQpPT5cbm1ha2VTZXRPZkVsZW1lbnRzKGVsZW1lbnRzT3AoeHNldC5wYXlsb2FkLHlzZXQucGF5bG9hZCkpO1xuXG5jb25zdCAgICAgICAgc2V0SXNTdXBlcnNldD1yYXdTZXRpZnkoZWxlbWVudHNJc1N1cGVyc2V0KTskaOKAjV9vbmNlLnNldElzU3VwZXJzZXQoc2V0SXNTdXBlcnNldCk7XG5jb25zdCAgICAgICAgc2V0SXNEaXNqb2ludD1yYXdTZXRpZnkoZWxlbWVudHNJc0Rpc2pvaW50KTskaOKAjV9vbmNlLnNldElzRGlzam9pbnQoc2V0SXNEaXNqb2ludCk7XG5jb25zdCAgICAgICAgc2V0VW5pb249c2V0aWZ5KGVsZW1lbnRzVW5pb24pOyRo4oCNX29uY2Uuc2V0VW5pb24oc2V0VW5pb24pO1xuY29uc3QgICAgICAgIHNldERpc2pvaW50VW5pb249c2V0aWZ5KGVsZW1lbnRzRGlzam9pbnRVbmlvbik7JGjigI1fb25jZS5zZXREaXNqb2ludFVuaW9uKHNldERpc2pvaW50VW5pb24pO1xuY29uc3QgICAgICAgIHNldEludGVyc2VjdGlvbj1zZXRpZnkoZWxlbWVudHNJbnRlcnNlY3Rpb24pOyRo4oCNX29uY2Uuc2V0SW50ZXJzZWN0aW9uKHNldEludGVyc2VjdGlvbik7XG5jb25zdCAgICAgICAgc2V0RGlzam9pbnRTdWJ0cmFjdD1zZXRpZnkoZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0KTskaOKAjV9vbmNlLnNldERpc2pvaW50U3VidHJhY3Qoc2V0RGlzam9pbnRTdWJ0cmFjdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJlbGVtZW50c0lzU3VwZXJzZXQiOlsiZWxlbWVudHNJc1N1cGVyc2V0Il0sImVsZW1lbnRzSXNEaXNqb2ludCI6WyJlbGVtZW50c0lzRGlzam9pbnQiXSwiZWxlbWVudHNDb21wYXJlIjpbImVsZW1lbnRzQ29tcGFyZSJdLCJlbGVtZW50c1VuaW9uIjpbImVsZW1lbnRzVW5pb24iXSwiZWxlbWVudHNEaXNqb2ludFVuaW9uIjpbImVsZW1lbnRzRGlzam9pbnRVbmlvbiJdLCJlbGVtZW50c0ludGVyc2VjdGlvbiI6WyJlbGVtZW50c0ludGVyc2VjdGlvbiJdLCJlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QiOlsiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0Il0sInNldElzU3VwZXJzZXQiOlsic2V0SXNTdXBlcnNldCJdLCJzZXRJc0Rpc2pvaW50IjpbInNldElzRGlzam9pbnQiXSwic2V0VW5pb24iOlsic2V0VW5pb24iXSwic2V0RGlzam9pbnRVbmlvbiI6WyJzZXREaXNqb2ludFVuaW9uIl0sInNldEludGVyc2VjdGlvbiI6WyJzZXRJbnRlcnNlY3Rpb24iXSwic2V0RGlzam9pbnRTdWJ0cmFjdCI6WyJzZXREaXNqb2ludFN1YnRyYWN0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALG3kDUWGQAAFhkAADYAAABAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCIuL3BhdHRlcm5NYXRjaGVycy5qcyIsIi4uL2tleXMvY2hlY2tLZXkuanMiXSwiZXhwb3J0cyI6WyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCIsImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCIsImdldEludGVyZmFjZU1ldGhvZEtleXMiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG9iamVjdE1hcCxBcmdHdWFyZExpc3RTaGFwZSxBd2FpdEFyZ0d1YXJkU2hhcGUsSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUsSW50ZXJmYWNlR3VhcmRTaGFwZSxNLE1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLE1ldGhvZEd1YXJkU2hhcGUsUmF3R3VhcmRTaGFwZSxTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxTeW5jVmFsdWVHdWFyZFNoYXBlLGFzc2VydEF3YWl0QXJnR3VhcmQsbWF0Y2hlcyxtdXN0TWF0Y2gsZ2V0Q29weU1hcEtleXMsbWFrZUNvcHlNYXA7JGjigI1faW1wb3J0cyhbW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW1tcIm9iamVjdE1hcFwiLCBbJGjigI1fYSA9PiAob2JqZWN0TWFwID0gJGjigI1fYSldXV1dLFtcIi4vcGF0dGVybk1hdGNoZXJzLmpzXCIsIFtbXCJBcmdHdWFyZExpc3RTaGFwZVwiLCBbJGjigI1fYSA9PiAoQXJnR3VhcmRMaXN0U2hhcGUgPSAkaOKAjV9hKV1dLFtcIkF3YWl0QXJnR3VhcmRTaGFwZVwiLCBbJGjigI1fYSA9PiAoQXdhaXRBcmdHdWFyZFNoYXBlID0gJGjigI1fYSldXSxbXCJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZVwiLCBbJGjigI1fYSA9PiAoSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUgPSAkaOKAjV9hKV1dLFtcIkludGVyZmFjZUd1YXJkU2hhcGVcIiwgWyRo4oCNX2EgPT4gKEludGVyZmFjZUd1YXJkU2hhcGUgPSAkaOKAjV9hKV1dLFtcIk1cIiwgWyRo4oCNX2EgPT4gKE0gPSAkaOKAjV9hKV1dLFtcIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlXCIsIFskaOKAjV9hID0+IChNZXRob2RHdWFyZFBheWxvYWRTaGFwZSA9ICRo4oCNX2EpXV0sW1wiTWV0aG9kR3VhcmRTaGFwZVwiLCBbJGjigI1fYSA9PiAoTWV0aG9kR3VhcmRTaGFwZSA9ICRo4oCNX2EpXV0sW1wiUmF3R3VhcmRTaGFwZVwiLCBbJGjigI1fYSA9PiAoUmF3R3VhcmRTaGFwZSA9ICRo4oCNX2EpXV0sW1wiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGVcIiwgWyRo4oCNX2EgPT4gKFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlID0gJGjigI1fYSldXSxbXCJTeW5jVmFsdWVHdWFyZFNoYXBlXCIsIFskaOKAjV9hID0+IChTeW5jVmFsdWVHdWFyZFNoYXBlID0gJGjigI1fYSldXSxbXCJhc3NlcnRBd2FpdEFyZ0d1YXJkXCIsIFskaOKAjV9hID0+IChhc3NlcnRBd2FpdEFyZ0d1YXJkID0gJGjigI1fYSldXSxbXCJtYXRjaGVzXCIsIFskaOKAjV9hID0+IChtYXRjaGVzID0gJGjigI1fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRo4oCNX2EgPT4gKG11c3RNYXRjaCA9ICRo4oCNX2EpXV1dXSxbXCIuLi9rZXlzL2NoZWNrS2V5LmpzXCIsIFtbXCJnZXRDb3B5TWFwS2V5c1wiLCBbJGjigI1fYSA9PiAoZ2V0Q29weU1hcEtleXMgPSAkaOKAjV9hKV1dLFtcIm1ha2VDb3B5TWFwXCIsIFskaOKAjV9hID0+IChtYWtlQ29weU1hcCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGU9aGFyZGVuKHtcbmtsYXNzOidhd2FpdEFyZycsXG5hcmdHdWFyZDpNLnBhdHRlcm4oKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZD0oYXdhaXRBcmdHdWFyZCk9PntcbmlmKG1hdGNoZXMoYXdhaXRBcmdHdWFyZCxMZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGUpKXtcbi8vXG5jb25zdHtrbGFzczpfLC4uLnBheWxvYWR9PWF3YWl0QXJnR3VhcmQ7XG4vL1xucmV0dXJuIHBheWxvYWQ7XG4gfVxuYXNzZXJ0QXdhaXRBcmdHdWFyZChhd2FpdEFyZ0d1YXJkKTtcbnJldHVybiBhd2FpdEFyZ0d1YXJkLnBheWxvYWQ7XG4gfTskaOKAjV9vbmNlLmdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKTtcbmhhcmRlbihnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeVN5bmNNZXRob2RHdWFyZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5rbGFzczonbWV0aG9kR3VhcmQnLFxuY2FsbEtpbmQ6J3N5bmMnLFxuYXJnR3VhcmRzOlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlLFxucmV0dXJuR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0sXG5cbntcbm9wdGlvbmFsQXJnR3VhcmRzOlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlLFxucmVzdEFyZ0d1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUFyZ0d1YXJkU2hhcGU9TS5vcihcblJhd0d1YXJkU2hhcGUsXG5Bd2FpdEFyZ0d1YXJkU2hhcGUsXG5MZWdhY3lBd2FpdEFyZ0d1YXJkU2hhcGUsXG5NLnBhdHRlcm4oKSk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUFyZ0d1YXJkTGlzdFNoYXBlPU0uYXJyYXlPZihMZWdhY3lBcmdHdWFyZFNoYXBlKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5QXN5bmNNZXRob2RHdWFyZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5rbGFzczonbWV0aG9kR3VhcmQnLFxuY2FsbEtpbmQ6J2FzeW5jJyxcbmFyZ0d1YXJkczpMZWdhY3lBcmdHdWFyZExpc3RTaGFwZSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9LFxuXG57XG5vcHRpb25hbEFyZ0d1YXJkczpBcmdHdWFyZExpc3RTaGFwZSxcbnJlc3RBcmdHdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSk7XG5cblxuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lNZXRob2RHdWFyZFNoYXBlPU0ub3IoXG5MZWdhY3lTeW5jTWV0aG9kR3VhcmRTaGFwZSxcbkxlZ2FjeUFzeW5jTWV0aG9kR3VhcmRTaGFwZSk7XG5cblxuY29uc3QgYWRhcHRMZWdhY3lBcmdHdWFyZD0oYXJnR3VhcmQpPT5cbm1hdGNoZXMoYXJnR3VhcmQsTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlKT9cbk0uYXdhaXQoZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQoYXJnR3VhcmQpLmFyZ0d1YXJkKTpcbmFyZ0d1YXJkO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldE1ldGhvZEd1YXJkUGF5bG9hZD0obWV0aG9kR3VhcmQpPT57XG5pZihtYXRjaGVzKG1ldGhvZEd1YXJkLE1ldGhvZEd1YXJkU2hhcGUpKXtcbnJldHVybiBtZXRob2RHdWFyZC5wYXlsb2FkO1xuIH1cbm11c3RNYXRjaChtZXRob2RHdWFyZCxMZWdhY3lNZXRob2RHdWFyZFNoYXBlLCdsZWdhY3lNZXRob2RHdWFyZCcpO1xuY29uc3R7XG4vL1xua2xhc3M6Xyxcbi8vXG5jYWxsS2luZCxcbi8vXG5yZXR1cm5HdWFyZCxcbi8vXG5yZXN0QXJnR3VhcmR9PVxubWV0aG9kR3VhcmQ7XG5sZXR7XG4vL1xuYXJnR3VhcmRzLFxuLy9cbm9wdGlvbmFsQXJnR3VhcmRzfT1cbm1ldGhvZEd1YXJkO1xuaWYoY2FsbEtpbmQ9PT0nYXN5bmMnKXtcbmFyZ0d1YXJkcz1hcmdHdWFyZHMubWFwKGFkYXB0TGVnYWN5QXJnR3VhcmQpO1xub3B0aW9uYWxBcmdHdWFyZHM9XG5vcHRpb25hbEFyZ0d1YXJkcyYmb3B0aW9uYWxBcmdHdWFyZHMubWFwKGFkYXB0TGVnYWN5QXJnR3VhcmQpO1xuIH1cbmNvbnN0IHBheWxvYWQ9aGFyZGVuKHtcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yZXN0QXJnR3VhcmQsXG5yZXR1cm5HdWFyZH0pO1xuXG4vL1xubXVzdE1hdGNoKHBheWxvYWQsTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUsJ2ludGVybmFsTWV0aG9kR3VhcmRBZGFwdG9yJyk7XG5yZXR1cm4gcGF5bG9hZDtcbiB9OyRo4oCNX29uY2UuZ2V0TWV0aG9kR3VhcmRQYXlsb2FkKGdldE1ldGhvZEd1YXJkUGF5bG9hZCk7XG5oYXJkZW4oZ2V0TWV0aG9kR3VhcmRQYXlsb2FkKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5SW50ZXJmYWNlR3VhcmRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xua2xhc3M6J0ludGVyZmFjZScsXG5pbnRlcmZhY2VOYW1lOk0uc3RyaW5nKCksXG5tZXRob2RHdWFyZHM6TS5yZWNvcmRPZihcbk0uc3RyaW5nKCksXG5NLm9yKE1ldGhvZEd1YXJkU2hhcGUsTGVnYWN5TWV0aG9kR3VhcmRTaGFwZSkpfSxcblxuXG57XG5kZWZhdWx0R3VhcmRzOk0ub3IoTS51bmRlZmluZWQoKSwncGFzc2FibGUnLCdyYXcnKSxcbnNsb3BweTpNLmJvb2xlYW4oKSxcbi8vXG4vL1xuLy9cbnN5bWJvbE1ldGhvZEd1YXJkczpNLm1hcE9mKE0uc3ltYm9sKCksTWV0aG9kR3VhcmRTaGFwZSl9KTtcblxuXG5cbmNvbnN0IGFkYXB0TWV0aG9kR3VhcmQ9KG1ldGhvZEd1YXJkKT0+e1xuaWYobWF0Y2hlcyhtZXRob2RHdWFyZCxMZWdhY3lNZXRob2RHdWFyZFNoYXBlKSl7XG5jb25zdHtcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHM9W10sXG5yZXN0QXJnR3VhcmQ9TS5hbnkoKSxcbnJldHVybkd1YXJkfT1cbmdldE1ldGhvZEd1YXJkUGF5bG9hZChtZXRob2RHdWFyZCk7XG5jb25zdCBtQ2FsbD1jYWxsS2luZD09PSdzeW5jJz9NLmNhbGw6TS5jYWxsV2hlbjtcbnJldHVybiBtQ2FsbCguLi5hcmdHdWFyZHMpLlxub3B0aW9uYWwoLi4ub3B0aW9uYWxBcmdHdWFyZHMpLlxucmVzdChyZXN0QXJnR3VhcmQpLlxucmV0dXJucyhyZXR1cm5HdWFyZCk7XG4gfVxucmV0dXJuIG1ldGhvZEd1YXJkO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQ9KGludGVyZmFjZUd1YXJkKT0+e1xuaWYobWF0Y2hlcyhpbnRlcmZhY2VHdWFyZCxJbnRlcmZhY2VHdWFyZFNoYXBlKSl7XG5yZXR1cm4gaW50ZXJmYWNlR3VhcmQucGF5bG9hZDtcbiB9XG5tdXN0TWF0Y2goaW50ZXJmYWNlR3VhcmQsTGVnYWN5SW50ZXJmYWNlR3VhcmRTaGFwZSwnbGVnYWN5SW50ZXJmYWNlR3VhcmQnKTtcbi8vXG4vL1xubGV0e2tsYXNzOl8saW50ZXJmYWNlTmFtZSxtZXRob2RHdWFyZHMsLi4ucmVzdH09aW50ZXJmYWNlR3VhcmQ7XG5tZXRob2RHdWFyZHM9b2JqZWN0TWFwKG1ldGhvZEd1YXJkcyxhZGFwdE1ldGhvZEd1YXJkKTtcbmNvbnN0IHBheWxvYWQ9aGFyZGVuKHtcbmludGVyZmFjZU5hbWUsXG5tZXRob2RHdWFyZHMsXG4uLi5yZXN0fSk7XG5cbm11c3RNYXRjaChcbnBheWxvYWQsXG5JbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSxcbidpbnRlcm5hbEludGVyZmFjZUd1YXJkQWRhcHRvcicpO1xuXG5yZXR1cm4gcGF5bG9hZDtcbiB9OyRo4oCNX29uY2UuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCk7XG5oYXJkZW4oZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKTtcblxuY29uc3QgZW1wdHlDb3B5TWFwPW1ha2VDb3B5TWFwKFtdKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbnRlcmZhY2VNZXRob2RLZXlzPShpbnRlcmZhY2VHdWFyZCk9PntcbmNvbnN0e21ldGhvZEd1YXJkcyxzeW1ib2xNZXRob2RHdWFyZHM9ZW1wdHlDb3B5TWFwfT1cbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChpbnRlcmZhY2VHdWFyZCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oW1xuLi4uUmVmbGVjdC5vd25LZXlzKG1ldGhvZEd1YXJkcyksXG4uLi5nZXRDb3B5TWFwS2V5cyhzeW1ib2xNZXRob2RHdWFyZHMpXSk7XG5cbiB9OyRo4oCNX29uY2UuZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyhnZXRJbnRlcmZhY2VNZXRob2RLZXlzKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VNZXRob2RLZXlzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIjpbImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIl0sImdldE1ldGhvZEd1YXJkUGF5bG9hZCI6WyJnZXRNZXRob2RHdWFyZFBheWxvYWQiXSwiZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkIjpbImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCJdLCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIjpbImdldEludGVyZmFjZU1ldGhvZEtleXMiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAwGGizzOuAAAzrgAANQAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyIsIkBlbmRvL2NvbW1vbi9hcHBseS1sYWJlbGluZy1lcnJvci5qcyIsIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIiwiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qcyIsIkBlbmRvL2Vycm9ycyIsIi4uL2tleXMvY29tcGFyZUtleXMuanMiLCIuLi9rZXlzL2NoZWNrS2V5LmpzIiwiLi4va2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyJdLCJleHBvcnRzIjpbIkFyZ0d1YXJkTGlzdFNoYXBlIiwiQXdhaXRBcmdHdWFyZFNoYXBlIiwiSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUiLCJJbnRlcmZhY2VHdWFyZFNoYXBlIiwiTSIsIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIiwiTWV0aG9kR3VhcmRTaGFwZSIsIlJhd0d1YXJkU2hhcGUiLCJTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSIsIlN5bmNWYWx1ZUd1YXJkU2hhcGUiLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIiwiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiLCJhc3NlcnRNZXRob2RHdWFyZCIsImFzc2VydFBhdHRlcm4iLCJhc3NlcnRSYXdHdWFyZCIsImNoZWNrTWF0Y2hlcyIsImRlZmF1bHRMaW1pdHMiLCJnZXRSYW5rQ292ZXIiLCJpc0F3YWl0QXJnR3VhcmQiLCJpc1BhdHRlcm4iLCJpc1Jhd0d1YXJkIiwia2luZE9mIiwibWF0Y2hlcyIsIm11c3RNYXRjaCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixGYXIsZ2V0VGFnLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsaGFzT3duUHJvcGVydHlPZixuYW1lRm9yUGFzc2FibGVTeW1ib2wsY29tcGFyZVJhbmssZ2V0UGFzc1N0eWxlQ292ZXIsaW50ZXJzZWN0UmFua0NvdmVycyx1bmlvblJhbmtDb3ZlcnMscmVjb3JkTmFtZXMscmVjb3JkVmFsdWVzLGlkZW50Q2hlY2tlcixhcHBseUxhYmVsaW5nRXJyb3IsZnJvbVVuaXF1ZUVudHJpZXMsbGlzdERpZmZlcmVuY2UscSxiLFgsRmFpbCxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcixrZXlFUSxrZXlHVCxrZXlHVEUsa2V5TFQsa2V5TFRFLGFzc2VydEtleSxjaGVja0tleSxpc0tleSxjaGVja1NjYWxhcktleSxjaGVja0NvcHlTZXQsY2hlY2tDb3B5TWFwLGNvcHlNYXBLZXlTZXQsY2hlY2tDb3B5QmFnLGdldENvcHlNYXBFbnRyeUFycmF5LG1ha2VDb3B5TWFwLGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzOyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaOKAjV9hKV1dLFtcIkZhclwiLCBbJGjigI1fYSA9PiAoRmFyID0gJGjigI1fYSldXSxbXCJnZXRUYWdcIiwgWyRo4oCNX2EgPT4gKGdldFRhZyA9ICRo4oCNX2EpXV0sW1wibWFrZVRhZ2dlZFwiLCBbJGjigI1fYSA9PiAobWFrZVRhZ2dlZCA9ICRo4oCNX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRo4oCNX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjigI1fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaOKAjV9hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjigI1fYSldXSxbXCJuYW1lRm9yUGFzc2FibGVTeW1ib2xcIiwgWyRo4oCNX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRo4oCNX2EpXV0sW1wiY29tcGFyZVJhbmtcIiwgWyRo4oCNX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjigI1fYSldXSxbXCJnZXRQYXNzU3R5bGVDb3ZlclwiLCBbJGjigI1fYSA9PiAoZ2V0UGFzc1N0eWxlQ292ZXIgPSAkaOKAjV9hKV1dLFtcImludGVyc2VjdFJhbmtDb3ZlcnNcIiwgWyRo4oCNX2EgPT4gKGludGVyc2VjdFJhbmtDb3ZlcnMgPSAkaOKAjV9hKV1dLFtcInVuaW9uUmFua0NvdmVyc1wiLCBbJGjigI1fYSA9PiAodW5pb25SYW5rQ292ZXJzID0gJGjigI1fYSldXSxbXCJyZWNvcmROYW1lc1wiLCBbJGjigI1fYSA9PiAocmVjb3JkTmFtZXMgPSAkaOKAjV9hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjigI1fYSA9PiAocmVjb3JkVmFsdWVzID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzXCIsIFtbXCJpZGVudENoZWNrZXJcIiwgWyRo4oCNX2EgPT4gKGlkZW50Q2hlY2tlciA9ICRo4oCNX2EpXV1dXSxbXCJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanNcIiwgW1tcImFwcGx5TGFiZWxpbmdFcnJvclwiLCBbJGjigI1fYSA9PiAoYXBwbHlMYWJlbGluZ0Vycm9yID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzXCIsIFtbXCJmcm9tVW5pcXVlRW50cmllc1wiLCBbJGjigI1fYSA9PiAoZnJvbVVuaXF1ZUVudHJpZXMgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qc1wiLCBbW1wibGlzdERpZmZlcmVuY2VcIiwgWyRo4oCNX2EgPT4gKGxpc3REaWZmZXJlbmNlID0gJGjigI1fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjigI1fYSA9PiAocSA9ICRo4oCNX2EpXV0sW1wiYlwiLCBbJGjigI1fYSA9PiAoYiA9ICRo4oCNX2EpXV0sW1wiWFwiLCBbJGjigI1fYSA9PiAoWCA9ICRo4oCNX2EpXV0sW1wiRmFpbFwiLCBbJGjigI1fYSA9PiAoRmFpbCA9ICRo4oCNX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaOKAjV9hID0+IChtYWtlRXJyb3IgPSAkaOKAjV9hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRo4oCNX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaOKAjV9hKV1dXV0sW1wiLi4va2V5cy9jb21wYXJlS2V5cy5qc1wiLCBbW1wia2V5RVFcIiwgWyRo4oCNX2EgPT4gKGtleUVRID0gJGjigI1fYSldXSxbXCJrZXlHVFwiLCBbJGjigI1fYSA9PiAoa2V5R1QgPSAkaOKAjV9hKV1dLFtcImtleUdURVwiLCBbJGjigI1fYSA9PiAoa2V5R1RFID0gJGjigI1fYSldXSxbXCJrZXlMVFwiLCBbJGjigI1fYSA9PiAoa2V5TFQgPSAkaOKAjV9hKV1dLFtcImtleUxURVwiLCBbJGjigI1fYSA9PiAoa2V5TFRFID0gJGjigI1fYSldXV1dLFtcIi4uL2tleXMvY2hlY2tLZXkuanNcIiwgW1tcImFzc2VydEtleVwiLCBbJGjigI1fYSA9PiAoYXNzZXJ0S2V5ID0gJGjigI1fYSldXSxbXCJjaGVja0tleVwiLCBbJGjigI1fYSA9PiAoY2hlY2tLZXkgPSAkaOKAjV9hKV1dLFtcImlzS2V5XCIsIFskaOKAjV9hID0+IChpc0tleSA9ICRo4oCNX2EpXV0sW1wiY2hlY2tTY2FsYXJLZXlcIiwgWyRo4oCNX2EgPT4gKGNoZWNrU2NhbGFyS2V5ID0gJGjigI1fYSldXSxbXCJjaGVja0NvcHlTZXRcIiwgWyRo4oCNX2EgPT4gKGNoZWNrQ29weVNldCA9ICRo4oCNX2EpXV0sW1wiY2hlY2tDb3B5TWFwXCIsIFskaOKAjV9hID0+IChjaGVja0NvcHlNYXAgPSAkaOKAjV9hKV1dLFtcImNvcHlNYXBLZXlTZXRcIiwgWyRo4oCNX2EgPT4gKGNvcHlNYXBLZXlTZXQgPSAkaOKAjV9hKV1dLFtcImNoZWNrQ29weUJhZ1wiLCBbJGjigI1fYSA9PiAoY2hlY2tDb3B5QmFnID0gJGjigI1fYSldXSxbXCJnZXRDb3B5TWFwRW50cnlBcnJheVwiLCBbJGjigI1fYSA9PiAoZ2V0Q29weU1hcEVudHJ5QXJyYXkgPSAkaOKAjV9hKV1dLFtcIm1ha2VDb3B5TWFwXCIsIFskaOKAjV9hID0+IChtYWtlQ29weU1hcCA9ICRo4oCNX2EpXV1dXSxbXCIuLi9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzXCIsIFtbXCJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllc1wiLCBbJGjigI1fYSA9PiAoZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG5jb25zdHtlbnRyaWVzLHZhbHVlc309T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGF0dGVybk1lbW89bmV3IFdlYWtTZXQoKTtcblxuLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgTU07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmYXVsdExpbWl0cz1oYXJkZW4oe1xuZGVjaW1hbERpZ2l0c0xpbWl0OjEwMCxcbnN0cmluZ0xlbmd0aExpbWl0OjEwMF8wMDAsXG5zeW1ib2xOYW1lTGVuZ3RoTGltaXQ6MTAwLFxubnVtUHJvcGVydGllc0xpbWl0OjgwLFxucHJvcGVydHlOYW1lTGVuZ3RoTGltaXQ6MTAwLFxuYXJyYXlMZW5ndGhMaW1pdDoxMF8wMDAsXG5udW1TZXRFbGVtZW50c0xpbWl0OjEwXzAwMCxcbm51bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQ6MTBfMDAwLFxubnVtTWFwRW50cmllc0xpbWl0OjUwMDB9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovJGjigI1fb25jZS5kZWZhdWx0TGltaXRzKGRlZmF1bHRMaW1pdHMpO1xuY29uc3QgbGltaXQ9KGxpbWl0cz17fSk9PlxuLyogICAgICAgICAgICAgICAgICAgICovaGFyZGVuKHtfX3Byb3RvX186ZGVmYXVsdExpbWl0cywuLi5saW1pdHN9KTtcblxuY29uc3QgY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQ9KFxucGF5bG9hZCxcbm1haW5QYXlsb2FkU2hhcGUsXG5jaGVjayxcbmxhYmVsKT0+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+XG4vL1xubWFrZVJhd0d1YXJkKCl9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmNoZWNrTWF0Y2hlcyxcbm1hdGNoZXMsXG5tdXN0TWF0Y2gsXG5hc3NlcnRQYXR0ZXJuLFxuaXNQYXR0ZXJuLFxuZ2V0UmFua0NvdmVyLFxuTSxcbmtpbmRPZn0pO1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgICAgICAge1xuY2hlY2tNYXRjaGVzLFxubWF0Y2hlcyxcbm11c3RNYXRjaCxcbmFzc2VydFBhdHRlcm4sXG5pc1BhdHRlcm4sXG5nZXRSYW5rQ292ZXIsXG5NLFxua2luZE9mfT1cbm1ha2VQYXR0ZXJuS2l0KCk7JGjigI1fb25jZS5jaGVja01hdGNoZXMoY2hlY2tNYXRjaGVzKTskaOKAjV9vbmNlLm1hdGNoZXMobWF0Y2hlcyk7JGjigI1fb25jZS5tdXN0TWF0Y2gobXVzdE1hdGNoKTskaOKAjV9vbmNlLmFzc2VydFBhdHRlcm4oYXNzZXJ0UGF0dGVybik7JGjigI1fb25jZS5pc1BhdHRlcm4oaXNQYXR0ZXJuKTskaOKAjV9vbmNlLmdldFJhbmtDb3ZlcihnZXRSYW5rQ292ZXIpOyRo4oCNX29uY2UuTShNKTskaOKAjV9vbmNlLmtpbmRPZihraW5kT2YpO1xuXG5NTT1NO1xuXG4vL1xuXG4vL1xuY29uc3QgQXdhaXRBcmdHdWFyZFBheWxvYWRTaGFwZT1oYXJkZW4oe1xuYXJnR3VhcmQ6TS5wYXR0ZXJuKCl9KTtcblxuXG5jb25zdCAgICAgICAgQXdhaXRBcmdHdWFyZFNoYXBlPU0ua2luZCgnZ3VhcmQ6YXdhaXRBcmdHdWFyZCcpO1xuXG4vKlxuXG5cbiAqLyRo4oCNX29uY2UuQXdhaXRBcmdHdWFyZFNoYXBlKEF3YWl0QXJnR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgaXNBd2FpdEFyZ0d1YXJkPShzcGVjaW1lbik9PlxubWF0Y2hlcyhzcGVjaW1lbixBd2FpdEFyZ0d1YXJkU2hhcGUpOyRo4oCNX29uY2UuaXNBd2FpdEFyZ0d1YXJkKGlzQXdhaXRBcmdHdWFyZCk7XG5oYXJkZW4oaXNBd2FpdEFyZ0d1YXJkKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRBd2FpdEFyZ0d1YXJkPShzcGVjaW1lbik9Pntcbm11c3RNYXRjaChzcGVjaW1lbixBd2FpdEFyZ0d1YXJkU2hhcGUsJ2F3YWl0QXJnR3VhcmQnKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0QXdhaXRBcmdHdWFyZChhc3NlcnRBd2FpdEFyZ0d1YXJkKTtcbmhhcmRlbihhc3NlcnRBd2FpdEFyZ0d1YXJkKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1ha2VBd2FpdEFyZ0d1YXJkPShhcmdQYXR0ZXJuKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOmF3YWl0QXJnR3VhcmQnLHtcbmFyZ0d1YXJkOmFyZ1BhdHRlcm59KTtcblxuYXNzZXJ0QXdhaXRBcmdHdWFyZChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vL1xuXG5jb25zdCBSYXdHdWFyZFBheWxvYWRTaGFwZT1NLnJlY29yZCgpO1xuXG5jb25zdCAgICAgICAgUmF3R3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOnJhd0d1YXJkJyk7JGjigI1fb25jZS5SYXdHdWFyZFNoYXBlKFJhd0d1YXJkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgaXNSYXdHdWFyZD0oc3BlY2ltZW4pPT5tYXRjaGVzKHNwZWNpbWVuLFJhd0d1YXJkU2hhcGUpOyRo4oCNX29uY2UuaXNSYXdHdWFyZChpc1Jhd0d1YXJkKTtcblxuY29uc3QgICAgICAgIGFzc2VydFJhd0d1YXJkPShzcGVjaW1lbik9PlxubXVzdE1hdGNoKHNwZWNpbWVuLFJhd0d1YXJkU2hhcGUsJ3Jhd0d1YXJkJyk7XG5cbi8qXG5cbiAqLyRo4oCNX29uY2UuYXNzZXJ0UmF3R3VhcmQoYXNzZXJ0UmF3R3VhcmQpO1xuY29uc3QgbWFrZVJhd0d1YXJkPSgpPT5tYWtlVGFnZ2VkKCdndWFyZDpyYXdHdWFyZCcse30pO1xuXG4vL1xuLy9cblxuY29uc3QgICAgICAgIFN5bmNWYWx1ZUd1YXJkU2hhcGU9TS5vcihSYXdHdWFyZFNoYXBlLE0ucGF0dGVybigpKTskaOKAjV9vbmNlLlN5bmNWYWx1ZUd1YXJkU2hhcGUoU3luY1ZhbHVlR3VhcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBTeW5jVmFsdWVHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoU3luY1ZhbHVlR3VhcmRTaGFwZSk7JGjigI1fb25jZS5TeW5jVmFsdWVHdWFyZExpc3RTaGFwZShTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSk7XG5cbmNvbnN0IEFyZ0d1YXJkU2hhcGU9TS5vcihSYXdHdWFyZFNoYXBlLEF3YWl0QXJnR3VhcmRTaGFwZSxNLnBhdHRlcm4oKSk7XG5jb25zdCAgICAgICAgQXJnR3VhcmRMaXN0U2hhcGU9TS5hcnJheU9mKEFyZ0d1YXJkU2hhcGUpOyRo4oCNX29uY2UuQXJnR3VhcmRMaXN0U2hhcGUoQXJnR3VhcmRMaXN0U2hhcGUpO1xuXG5jb25zdCBTeW5jTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGU9aGFyZGVuKHtcbmNhbGxLaW5kOidzeW5jJyxcbmFyZ0d1YXJkczpTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxcbm9wdGlvbmFsQXJnR3VhcmRzOk0ub3B0KFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKSxcbnJlc3RBcmdHdWFyZDpNLm9wdChTeW5jVmFsdWVHdWFyZFNoYXBlKSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5jb25zdCBBc3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlPWhhcmRlbih7XG5jYWxsS2luZDonYXN5bmMnLFxuYXJnR3VhcmRzOkFyZ0d1YXJkTGlzdFNoYXBlLFxub3B0aW9uYWxBcmdHdWFyZHM6TS5vcHQoQXJnR3VhcmRMaXN0U2hhcGUpLFxucmVzdEFyZ0d1YXJkOk0ub3B0KFN5bmNWYWx1ZUd1YXJkU2hhcGUpLFxucmV0dXJuR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0pO1xuXG5cbmNvbnN0ICAgICAgICBNZXRob2RHdWFyZFBheWxvYWRTaGFwZT1NLm9yKFxuU3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLFxuQXN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZSk7JGjigI1fb25jZS5NZXRob2RHdWFyZFBheWxvYWRTaGFwZShNZXRob2RHdWFyZFBheWxvYWRTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIE1ldGhvZEd1YXJkU2hhcGU9TS5raW5kKCdndWFyZDptZXRob2RHdWFyZCcpO1xuXG4vKlxuXG5cbiAqLyRo4oCNX29uY2UuTWV0aG9kR3VhcmRTaGFwZShNZXRob2RHdWFyZFNoYXBlKTtcbmNvbnN0ICAgICAgICBhc3NlcnRNZXRob2RHdWFyZD0oc3BlY2ltZW4pPT57XG5tdXN0TWF0Y2goc3BlY2ltZW4sTWV0aG9kR3VhcmRTaGFwZSwnbWV0aG9kR3VhcmQnKTtcbiB9OyRo4oCNX29uY2UuYXNzZXJ0TWV0aG9kR3VhcmQoYXNzZXJ0TWV0aG9kR3VhcmQpO1xuaGFyZGVuKGFzc2VydE1ldGhvZEd1YXJkKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VNZXRob2RHdWFyZE1ha2VyPShcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHM9dW5kZWZpbmVkLFxucmVzdEFyZ0d1YXJkPXVuZGVmaW5lZCk9PlxuXG5oYXJkZW4oe1xub3B0aW9uYWw6KC4uLm9wdEFyZ0d1YXJkcyk9Pntcbm9wdGlvbmFsQXJnR3VhcmRzPT09dW5kZWZpbmVkfHxcbkZhaWwgYENhbiBvbmx5IGhhdmUgb25lIHNldCBvZiBvcHRpb25hbCBndWFyZHNgO1xucmVzdEFyZ0d1YXJkPT09dW5kZWZpbmVkfHxcbkZhaWwgYG9wdGlvbmFsIGFyZyBndWFyZHMgbXVzdCBjb21lIGJlZm9yZSByZXN0IGFyZ2A7XG5yZXR1cm4gbWFrZU1ldGhvZEd1YXJkTWFrZXIoY2FsbEtpbmQsYXJnR3VhcmRzLG9wdEFyZ0d1YXJkcyk7XG4gfSxcbnJlc3Q6KHJBcmdHdWFyZCk9PntcbnJlc3RBcmdHdWFyZD09PXVuZGVmaW5lZHx8RmFpbCBgQ2FuIG9ubHkgaGF2ZSBvbmUgcmVzdCBhcmdgO1xucmV0dXJuIG1ha2VNZXRob2RHdWFyZE1ha2VyKFxuY2FsbEtpbmQsXG5hcmdHdWFyZHMsXG5vcHRpb25hbEFyZ0d1YXJkcyxcbnJBcmdHdWFyZCk7XG5cbiB9LFxucmV0dXJuczoocmV0dXJuR3VhcmQ9TS51bmRlZmluZWQoKSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnZ3VhcmQ6bWV0aG9kR3VhcmQnLHtcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yZXN0QXJnR3VhcmQsXG5yZXR1cm5HdWFyZH0pO1xuXG5hc3NlcnRNZXRob2RHdWFyZChyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9fSk7XG5cblxuY29uc3QgICAgICAgIEludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlPU0uc3BsaXRSZWNvcmQoXG57XG5pbnRlcmZhY2VOYW1lOk0uc3RyaW5nKCksXG5tZXRob2RHdWFyZHM6TS5yZWNvcmRPZihNLnN0cmluZygpLE1ldGhvZEd1YXJkU2hhcGUpfSxcblxue1xuZGVmYXVsdEd1YXJkczpNLm9yKE0udW5kZWZpbmVkKCksJ3Bhc3NhYmxlJywncmF3JyksXG5zbG9wcHk6TS5ib29sZWFuKCksXG5zeW1ib2xNZXRob2RHdWFyZHM6TS5tYXBPZihNLnN5bWJvbCgpLE1ldGhvZEd1YXJkU2hhcGUpfSk7JGjigI1fb25jZS5JbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZShJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSk7XG5cblxuXG5jb25zdCAgICAgICAgSW50ZXJmYWNlR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOmludGVyZmFjZUd1YXJkJyk7XG5cbi8qXG5cblxuICovJGjigI1fb25jZS5JbnRlcmZhY2VHdWFyZFNoYXBlKEludGVyZmFjZUd1YXJkU2hhcGUpO1xuY29uc3QgICAgICAgIGFzc2VydEludGVyZmFjZUd1YXJkPShzcGVjaW1lbik9Pntcbm11c3RNYXRjaChzcGVjaW1lbixJbnRlcmZhY2VHdWFyZFNoYXBlLCdpbnRlcmZhY2VHdWFyZCcpO1xuIH07JGjigI1fb25jZS5hc3NlcnRJbnRlcmZhY2VHdWFyZChhc3NlcnRJbnRlcmZhY2VHdWFyZCk7XG5oYXJkZW4oYXNzZXJ0SW50ZXJmYWNlR3VhcmQpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUludGVyZmFjZUd1YXJkPShpbnRlcmZhY2VOYW1lLG1ldGhvZEd1YXJkcyxvcHRpb25zPXt9KT0+e1xuY29uc3R7c2xvcHB5PWZhbHNlLGRlZmF1bHRHdWFyZHM9c2xvcHB5PydwYXNzYWJsZSc6dW5kZWZpbmVkfT1cbm9wdGlvbnM7XG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0cmluZ01ldGhvZEd1YXJkcz17fTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN5bWJvbE1ldGhvZEd1YXJkc0VudHJpZXM9W107XG5mb3IoY29uc3Qga2V5IG9mIG93bktleXMobWV0aG9kR3VhcmRzKSl7XG5jb25zdCB2YWx1ZT1tZXRob2RHdWFyZHNbLyogICAgICAgICAgICAgICAgICova2V5XTtcbmlmKHR5cGVvZiBrZXk9PT0nc3ltYm9sJyl7XG5zeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzLnB1c2goW2tleSx2YWx1ZV0pO1xuIH1lbHNle1xuc3RyaW5nTWV0aG9kR3VhcmRzW2tleV09dmFsdWU7XG4gfVxuIH1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnZ3VhcmQ6aW50ZXJmYWNlR3VhcmQnLHtcbmludGVyZmFjZU5hbWUsXG5tZXRob2RHdWFyZHM6c3RyaW5nTWV0aG9kR3VhcmRzLFxuLi4uKHN5bWJvbE1ldGhvZEd1YXJkc0VudHJpZXMubGVuZ3RoP1xue3N5bWJvbE1ldGhvZEd1YXJkczptYWtlQ29weU1hcChzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzKX06XG57fSksXG5kZWZhdWx0R3VhcmRzfSk7XG5cbmFzc2VydEludGVyZmFjZUd1YXJkKHJlc3VsdCk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovcmVzdWx0KTtcbiB9O1xuXG5jb25zdCBHdWFyZFBheWxvYWRTaGFwZXM9aGFyZGVuKHtcbidndWFyZDphd2FpdEFyZ0d1YXJkJzpBd2FpdEFyZ0d1YXJkUGF5bG9hZFNoYXBlLFxuJ2d1YXJkOnJhd0d1YXJkJzpSYXdHdWFyZFBheWxvYWRTaGFwZSxcbidndWFyZDptZXRob2RHdWFyZCc6TWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUsXG4nZ3VhcmQ6aW50ZXJmYWNlR3VhcmQnOkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlfSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0TGltaXRzIjpbImRlZmF1bHRMaW1pdHMiXSwiY2hlY2tNYXRjaGVzIjpbImNoZWNrTWF0Y2hlcyJdLCJtYXRjaGVzIjpbIm1hdGNoZXMiXSwibXVzdE1hdGNoIjpbIm11c3RNYXRjaCJdLCJhc3NlcnRQYXR0ZXJuIjpbImFzc2VydFBhdHRlcm4iXSwiaXNQYXR0ZXJuIjpbImlzUGF0dGVybiJdLCJnZXRSYW5rQ292ZXIiOlsiZ2V0UmFua0NvdmVyIl0sIk0iOlsiTSJdLCJraW5kT2YiOlsia2luZE9mIl0sIkF3YWl0QXJnR3VhcmRTaGFwZSI6WyJBd2FpdEFyZ0d1YXJkU2hhcGUiXSwiaXNBd2FpdEFyZ0d1YXJkIjpbImlzQXdhaXRBcmdHdWFyZCJdLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIjpbImFzc2VydEF3YWl0QXJnR3VhcmQiXSwiUmF3R3VhcmRTaGFwZSI6WyJSYXdHdWFyZFNoYXBlIl0sImlzUmF3R3VhcmQiOlsiaXNSYXdHdWFyZCJdLCJhc3NlcnRSYXdHdWFyZCI6WyJhc3NlcnRSYXdHdWFyZCJdLCJTeW5jVmFsdWVHdWFyZFNoYXBlIjpbIlN5bmNWYWx1ZUd1YXJkU2hhcGUiXSwiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUiOlsiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUiXSwiQXJnR3VhcmRMaXN0U2hhcGUiOlsiQXJnR3VhcmRMaXN0U2hhcGUiXSwiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUiOlsiTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUiXSwiTWV0aG9kR3VhcmRTaGFwZSI6WyJNZXRob2RHdWFyZFNoYXBlIl0sImFzc2VydE1ldGhvZEd1YXJkIjpbImFzc2VydE1ldGhvZEd1YXJkIl0sIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlIjpbIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlIl0sIkludGVyZmFjZUd1YXJkU2hhcGUiOlsiSW50ZXJmYWNlR3VhcmRTaGFwZSJdLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCI6WyJhc3NlcnRJbnRlcmZhY2VHdWFyZCJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACHklKnTwEAAE8BAAAiAAAAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADkpsWEUQYAAFEGAAAhAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41L2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzIiwiLi9zcmMvbWVtby1yYWNlLmpzIiwiLi9zcmMvaXMtcHJvbWlzZS5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsibWFrZVByb21pc2VLaXQiLCJyYWNlUHJvbWlzZXMiXSwicmVleHBvcnRzIjpbIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0LG1lbW9SYWNlOyRo4oCNX2ltcG9ydHMoW1tcIi4vc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzXCIsIFtbXCJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXRcIiwgWyRo4oCNX2EgPT4gKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCA9ICRo4oCNX2EpXV1dXSxbXCIuL3NyYy9tZW1vLXJhY2UuanNcIiwgW1tcIm1lbW9SYWNlXCIsIFskaOKAjV9hID0+IChtZW1vUmFjZSA9ICRo4oCNX2EpXV1dXSxbXCIuL3NyYy9pcy1wcm9taXNlLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZVByb21pc2VLaXQsICduYW1lJywge3ZhbHVlOiBcIm1ha2VQcm9taXNlS2l0XCJ9KTskaOKAjV9vbmNlLm1ha2VQcm9taXNlS2l0KG1ha2VQcm9taXNlS2l0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocmFjZVByb21pc2VzLCAnbmFtZScsIHt2YWx1ZTogXCJyYWNlUHJvbWlzZXNcIn0pOyRo4oCNX29uY2UucmFjZVByb21pc2VzKHJhY2VQcm9taXNlcyk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZT1nbG9iYWxUaGlzLkhhbmRsZWRQcm9taXNlfHxQcm9taXNlO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZVByb21pc2VLaXQoKXtcbmNvbnN0e3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfT1tYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQoKTtcblxuY29uc3QgcHJvbWlzZT1uZXcgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZShleGVjdXRvcik7XG5cbnJldHVybiBoYXJkZW4oe3Byb21pc2UscmVzb2x2ZSxyZWplY3R9KTtcbiB9XG5oYXJkZW4obWFrZVByb21pc2VLaXQpO1xuXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICByYWNlUHJvbWlzZXModmFsdWVzKXtcbnJldHVybiBoYXJkZW4obWVtb1JhY2UuY2FsbChCZXN0UGlwZWxpbmFibGVQcm9taXNlLHZhbHVlcykpO1xuIH1cbmhhcmRlbihyYWNlUHJvbWlzZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVByb21pc2VLaXQiOlsibWFrZVByb21pc2VLaXQiXSwicmFjZVByb21pc2VzIjpbInJhY2VQcm9taXNlcyJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADAKHnJWwIAAFsCAAAqAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41L3NyYy9pcy1wcm9taXNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJpc1Byb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlzUHJvbWlzZSwgJ25hbWUnLCB7dmFsdWU6IFwiaXNQcm9taXNlXCJ9KTskaOKAjV9vbmNlLmlzUHJvbWlzZShpc1Byb21pc2UpOyAgIC8qXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gICAgICAgIGlzUHJvbWlzZShtYXliZVByb21pc2Upe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShtYXliZVByb21pc2UpPT09bWF5YmVQcm9taXNlO1xuIH1cbmhhcmRlbihpc1Byb21pc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQcm9taXNlIjpbImlzUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABtLwE4ogcAAKIHAAApAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41L3NyYy9tZW1vLXJhY2UuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1lbW9SYWNlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4qL1xuXG5jb25zdCBpc09iamVjdD0odmFsdWUpPT5PYmplY3QodmFsdWUpPT09dmFsdWU7XG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBrbm93blByb21pc2VzPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuICovXG5jb25zdCBtYXJrU2V0dGxlZD0ocmVjb3JkKT0+e1xuaWYoIXJlY29yZHx8cmVjb3JkLnNldHRsZWQpe1xucmV0dXJuIG5ldyBTZXQoKTtcbiB9XG5cbmNvbnN0e2RlZmVycmVkc309cmVjb3JkO1xuT2JqZWN0LmFzc2lnbihyZWNvcmQse1xuZGVmZXJyZWRzOnVuZGVmaW5lZCxcbnNldHRsZWQ6dHJ1ZX0pO1xuXG5PYmplY3QuZnJlZXplKHJlY29yZCk7XG5yZXR1cm4gZGVmZXJyZWRzO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGdldE1lbW9SZWNvcmQ9KHZhbHVlKT0+e1xuaWYoIWlzT2JqZWN0KHZhbHVlKSl7XG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGhhcmRlbih7c2V0dGxlZDp0cnVlfSk7XG4gfVxuXG5sZXQgcmVjb3JkPWtub3duUHJvbWlzZXMuZ2V0KHZhbHVlKTtcblxuaWYoIXJlY29yZCl7XG5yZWNvcmQ9e2RlZmVycmVkczpuZXcgU2V0KCksc2V0dGxlZDpmYWxzZX07XG5rbm93blByb21pc2VzLnNldCh2YWx1ZSxyZWNvcmQpO1xuLy9cblByb21pc2UucmVzb2x2ZSh2YWx1ZSkudGhlbihcbih2YWwpPT57XG5mb3IoY29uc3R7cmVzb2x2ZX1vZiBtYXJrU2V0dGxlZChyZWNvcmQpKXtcbnJlc29sdmUodmFsKTtcbiB9XG4gfSxcbihlcnIpPT57XG5mb3IoY29uc3R7cmVqZWN0fW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVqZWN0KGVycik7XG4gfVxuIH0pO1xuXG4gfVxucmV0dXJuIHJlY29yZDtcbiB9O1xuXG5jb25zdHtyYWNlfT17XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5yYWNlKHZhbHVlcyl7XG5sZXQgZGVmZXJyZWQ7XG4vKiAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBjYWNoZWRWYWx1ZXM9W107XG5jb25zdCBDPXRoaXM7XG5jb25zdCByZXN1bHQ9bmV3IEMoKHJlc29sdmUscmVqZWN0KT0+e1xuZGVmZXJyZWQ9e3Jlc29sdmUscmVqZWN0fTtcbmZvcihjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpe1xuY2FjaGVkVmFsdWVzLnB1c2godmFsdWUpO1xuY29uc3R7c2V0dGxlZCxkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoc2V0dGxlZCl7XG4vL1xuLy9cbkMucmVzb2x2ZSh2YWx1ZSkudGhlbihyZXNvbHZlLHJlamVjdCk7XG4gfWVsc2V7XG5kZWZlcnJlZHMuYWRkKGRlZmVycmVkKTtcbiB9XG4gfVxuIH0pO1xuXG4vL1xuLy9cbnJldHVybiByZXN1bHQuZmluYWxseSgoKT0+e1xuZm9yKGNvbnN0IHZhbHVlIG9mIGNhY2hlZFZhbHVlcyl7XG5jb25zdHtkZWZlcnJlZHN9PWdldE1lbW9SZWNvcmQodmFsdWUpO1xuaWYoZGVmZXJyZWRzKXtcbmRlZmVycmVkcy5kZWxldGUoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG4gfX07JGjigI1fb25jZS5yYWNlKHJhY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWVtb1JhY2UiOlsicmFjZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD4cDHEggUAAIIFAAA0AAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41L3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRo4oCNX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBpbnRlcm5hbFJlc29sdmU7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZWplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXNvbHZlPSh2YWx1ZSk9PntcbmlmKGludGVybmFsUmVzb2x2ZSl7XG5pbnRlcm5hbFJlc29sdmUodmFsdWUpO1xuaW50ZXJuYWxSZXNvbHZlPW51bGw7XG5pbnRlcm5hbFJlamVjdD1udWxsO1xuIH1lbHNle1xuYXNzZXJ0KGludGVybmFsUmVzb2x2ZT09PW51bGwpO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlamVjdD0ocmVhc29uKT0+e1xuaWYoaW50ZXJuYWxSZWplY3Qpe1xuaW50ZXJuYWxSZWplY3QocmVhc29uKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlamVjdD09PW51bGwpO1xuIH1cbiB9O1xuXG5jb25zdCBleGVjdXRvcj0ocmVzLHJlaik9PntcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT11bmRlZmluZWQmJmludGVybmFsUmVqZWN0PT09dW5kZWZpbmVkKTtcbmludGVybmFsUmVzb2x2ZT1yZXM7XG5pbnRlcm5hbFJlamVjdD1yZWo7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7cmVzb2x2ZSxyZWplY3QsZXhlY3V0b3J9KTtcbiB9OyRo4oCNX29uY2UubWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG5oYXJkZW4obWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCI6WyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAh5JSp08BAABPAQAAJQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNS9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAANN+elaARAACgEQAAHAAAAEBlbmRvL3N0cmVhbS12MS4yLjUvaW5kZXguanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0Il0sImV4cG9ydHMiOlsibWFrZVBpcGUiLCJtYWtlUXVldWUiLCJtYWtlU3RyZWFtIiwibWFwUmVhZGVyIiwibWFwV3JpdGVyIiwicHJpbWUiLCJwdW1wIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLG1ha2VQcm9taXNlS2l0OyRo4oCNX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRo4oCNX2EgPT4gKEUgPSAkaOKAjV9hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaOKAjV9hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRo4oCNX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLy9cbi8vXG4vL1xuY29uc3QgZnJlZXplPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9PYmplY3QuZnJlZXplO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VRdWV1ZT0oKT0+e1xubGV0e3Byb21pc2U6dGFpbFByb21pc2UscmVzb2x2ZTp0YWlsUmVzb2x2ZX09bWFrZVByb21pc2VLaXQoKTtcbnJldHVybntcbnB1dCh2YWx1ZSl7XG5jb25zdHtyZXNvbHZlLHByb21pc2V9PW1ha2VQcm9taXNlS2l0KCk7XG50YWlsUmVzb2x2ZShmcmVlemUoe3ZhbHVlLHByb21pc2V9KSk7XG50YWlsUmVzb2x2ZT1yZXNvbHZlO1xuIH0sXG5nZXQoKXtcbmNvbnN0IHByb21pc2U9dGFpbFByb21pc2UudGhlbigobmV4dCk9Pm5leHQudmFsdWUpO1xudGFpbFByb21pc2U9dGFpbFByb21pc2UudGhlbigobmV4dCk9Pm5leHQucHJvbWlzZSk7XG5yZXR1cm4gaGFyZGVuKHByb21pc2UpO1xuIH19O1xuXG4gfTskaOKAjV9vbmNlLm1ha2VRdWV1ZShtYWtlUXVldWUpO1xuaGFyZGVuKG1ha2VRdWV1ZSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3RyZWFtPShhY2tzLGRhdGEpPT57XG5jb25zdCBzdHJlYW09aGFyZGVuKHtcbi8qXG5cbiAgICAgKi9cbm5leHQodmFsdWUpe1xuLy9cbi8vXG5kYXRhLnB1dChmcmVlemUoe3ZhbHVlLGRvbmU6ZmFsc2V9KSk7XG5yZXR1cm4gYWNrcy5nZXQoKTtcbiB9LFxuLypcblxuICAgICAqL1xucmV0dXJuKHZhbHVlKXtcbmRhdGEucHV0KGZyZWV6ZSh7dmFsdWUsZG9uZTp0cnVlfSkpO1xucmV0dXJuIGFja3MuZ2V0KCk7XG4gfSxcbi8qXG5cbiAgICAgKi9cbnRocm93KGVycm9yKXtcbmRhdGEucHV0KGhhcmRlbihQcm9taXNlLnJlamVjdChlcnJvcikpKTtcbnJldHVybiBhY2tzLmdldCgpO1xuIH0sXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7XG5yZXR1cm4gc3RyZWFtO1xuIH19KTtcblxucmV0dXJuIHN0cmVhbTtcbiB9OyRo4oCNX29uY2UubWFrZVN0cmVhbShtYWtlU3RyZWFtKTtcbmhhcmRlbihtYWtlU3RyZWFtKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIG1ha2VQaXBlPSgpPT57XG5jb25zdCBkYXRhPW1ha2VRdWV1ZSgpO1xuY29uc3QgYWNrcz1tYWtlUXVldWUoKTtcbmNvbnN0IHJlYWRlcj1tYWtlU3RyZWFtKGFja3MsZGF0YSk7XG5jb25zdCB3cml0ZXI9bWFrZVN0cmVhbShkYXRhLGFja3MpO1xucmV0dXJuIGhhcmRlbihbd3JpdGVyLHJlYWRlcl0pO1xuIH07JGjigI1fb25jZS5tYWtlUGlwZShtYWtlUGlwZSk7XG5oYXJkZW4obWFrZVBpcGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwdW1wPWFzeW5jKHdyaXRlcixyZWFkZXIscHJpbWVyKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdGljaz0ocHJvbWlzZSk9PlxuRS53aGVuKFxucHJvbWlzZSxcbihyZXN1bHQpPT57XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gd3JpdGVyLnJldHVybihyZXN1bHQudmFsdWUpO1xuIH1lbHNle1xuLy9cbi8vXG5yZXR1cm4gdG9jayh3cml0ZXIubmV4dChyZXN1bHQudmFsdWUpKTtcbiB9XG4gfSxcbigvKiAgICAgICAgICAgICAgICAqL2Vycm9yKT0+e1xucmV0dXJuIHdyaXRlci50aHJvdyhlcnJvcik7XG4gfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdG9jaz0ocHJvbWlzZSk9PlxuRS53aGVuKFxucHJvbWlzZSxcbihyZXN1bHQpPT57XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVhZGVyLnJldHVybihyZXN1bHQudmFsdWUpO1xuIH1lbHNle1xucmV0dXJuIHRpY2socmVhZGVyLm5leHQocmVzdWx0LnZhbHVlKSk7XG4gfVxuIH0sXG4oLyogICAgICAgICAgICAgICAgKi9lcnJvcik9PntcbnJldHVybiByZWFkZXIudGhyb3coZXJyb3IpO1xuIH0pO1xuXG5hd2FpdCB0aWNrKHJlYWRlci5uZXh0KHByaW1lcikpO1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9OyRo4oCNX29uY2UucHVtcChwdW1wKTtcbmhhcmRlbihwdW1wKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmltZT0oZ2VuZXJhdG9yLHByaW1lcik9Pntcbi8vXG5jb25zdCBmaXJzdD1nZW5lcmF0b3IubmV4dChwcmltZXIpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IHJlc3VsdDtcbmNvbnN0IHByaW1lZD1oYXJkZW4oe1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgbmV4dCh2YWx1ZSl7XG5pZihyZXN1bHQ9PT11bmRlZmluZWQpe1xuLy9cbnJlc3VsdD1hd2FpdCBmaXJzdDtcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbnJldHVybiBnZW5lcmF0b3IubmV4dCh2YWx1ZSk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICBhc3luYyByZXR1cm4odmFsdWUpe1xuaWYocmVzdWx0PT09dW5kZWZpbmVkKXtcbi8vXG5yZXN1bHQ9YXdhaXQgZmlyc3Q7XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5yZXR1cm4gZ2VuZXJhdG9yLnJldHVybih2YWx1ZSk7XG4gfSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgdGhyb3coZXJyb3Ipe1xuaWYocmVzdWx0PT09dW5kZWZpbmVkKXtcbi8vXG5yZXN1bHQ9YXdhaXQgZmlyc3Q7XG5pZihyZXN1bHQuZG9uZSl7XG50aHJvdyBlcnJvcjtcbiB9XG4gfVxucmV0dXJuIGdlbmVyYXRvci50aHJvdyhlcnJvcik7XG4gfX0pO1xuXG5yZXR1cm4gcHJpbWVkO1xuIH07JGjigI1fb25jZS5wcmltZShwcmltZSk7XG5oYXJkZW4ocHJpbWUpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcFJlYWRlcj0ocmVhZGVyLHRyYW5zZm9ybSk9PntcbmFzeW5jIGZ1bmN0aW9uKnRyYW5zZm9ybUdlbmVyYXRvcigpe1xuZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIHJlYWRlcil7XG55aWVsZCB0cmFuc2Zvcm0odmFsdWUpO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuaGFyZGVuKHRyYW5zZm9ybUdlbmVyYXRvcik7XG5yZXR1cm4gaGFyZGVuKHRyYW5zZm9ybUdlbmVyYXRvcigpKTtcbiB9OyRo4oCNX29uY2UubWFwUmVhZGVyKG1hcFJlYWRlcik7XG5oYXJkZW4obWFwUmVhZGVyKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYXBXcml0ZXI9KHdyaXRlcix0cmFuc2Zvcm0pPT57XG5jb25zdCB0cmFuc2Zvcm1lZFdyaXRlcj1oYXJkZW4oe1xuLypcblxuICAgICAqL1xuICAgICAgYXN5bmMgbmV4dCh2YWx1ZSl7XG5yZXR1cm4gd3JpdGVyLm5leHQodHJhbnNmb3JtKHZhbHVlKSk7XG4gfSxcbi8qXG5cbiAgICAgKi9cbiAgICAgIGFzeW5jIHRocm93KGVycm9yKXtcbnJldHVybiB3cml0ZXIudGhyb3coZXJyb3IpO1xuIH0sXG4vKlxuXG4gICAgICovXG4gICAgICBhc3luYyByZXR1cm4odmFsdWUpe1xucmV0dXJuIHdyaXRlci5yZXR1cm4odmFsdWUpO1xuIH0sXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7XG5yZXR1cm4gdHJhbnNmb3JtZWRXcml0ZXI7XG4gfX0pO1xuXG5yZXR1cm4gdHJhbnNmb3JtZWRXcml0ZXI7XG4gfTskaOKAjV9vbmNlLm1hcFdyaXRlcihtYXBXcml0ZXIpO1xuaGFyZGVuKG1hcFdyaXRlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUXVldWUiOlsibWFrZVF1ZXVlIl0sIm1ha2VTdHJlYW0iOlsibWFrZVN0cmVhbSJdLCJtYWtlUGlwZSI6WyJtYWtlUGlwZSJdLCJwdW1wIjpbInB1bXAiXSwicHJpbWUiOlsicHJpbWUiXSwibWFwUmVhZGVyIjpbIm1hcFJlYWRlciJdLCJtYXBXcml0ZXIiOlsibWFwV3JpdGVyIl19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAGqjIlDIAQAAyAEAABwAAABqZXNzaWUuanMtdjAuMy40L3NyYy9tYWluLmpzeyJpbXBvcnRzIjpbIi4vcmluZzAvbWFpbi5qcyIsIi4vcmluZzEvbWFpbi5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vcmluZzAvbWFpbi5qcyIsIi4vcmluZzEvbWFpbi5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtbXCIuL3JpbmcwL21haW4uanNcIiwgW11dLFtcIi4vcmluZzEvbWFpbi5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB7GF4ZeAEAAHgBAAAfAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvRS5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyJAZW5kby9mYXIiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALp/out1AgAAdQIAACwAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9hc3luYy1nZW5lcmF0ZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYXN5bmNHZW5lcmF0ZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXN5bmNHZW5lcmF0ZT0obmV4dCk9PntcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+e1xucmV0dXJuIGhhcmRlbih7XG5uZXh0OmFzeW5jKCk9PmhhcmRlbihuZXh0KCkpfSk7XG5cbiB9fSk7XG5cbiB9OyRo4oCNX29uY2UuYXN5bmNHZW5lcmF0ZShhc3luY0dlbmVyYXRlKTtcbmhhcmRlbihhc3luY0dlbmVyYXRlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzeW5jR2VuZXJhdGUiOlsiYXN5bmNHZW5lcmF0ZSJdfSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADoVC976wEAAOsBAAAiAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFpbi5qc3siaW1wb3J0cyI6WyIuL0UuanMiLCIuL21ha2Vycy5qcyIsIi4vYXN5bmMtZ2VuZXJhdGUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL0UuanMiLCIuL2FzeW5jLWdlbmVyYXRlLmpzIiwiLi9tYWtlcnMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9FLmpzXCIsIFtdXSxbXCIuL21ha2Vycy5qc1wiLCBbXV0sW1wiLi9hc3luYy1nZW5lcmF0ZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACXQPPL1gcAANYHAAAkAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFrZXJzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlTWFwIiwibWFrZVByb21pc2UiLCJtYWtlU2V0IiwibWFrZVdlYWtNYXAiLCJtYWtlV2Vha1NldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRo4oCNX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjigI1fbGl2ZSwgICBvbmNlVmFyOiAkaOKAjV9vbmNlLCAgIGltcG9ydE1ldGE6ICRo4oCNX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaOKAjV9pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VQcm9taXNlPShleGVjdXRvcik9PmhhcmRlbihuZXcgUHJvbWlzZShleGVjdXRvcikpOyRo4oCNX29uY2UubWFrZVByb21pc2UobWFrZVByb21pc2UpO1xuaGFyZGVuKG1ha2VQcm9taXNlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VNYXA9KGVudHJpZXNPckl0ZXJhYmxlKT0+aGFyZGVuKG5ldyBNYXAoZW50cmllc09ySXRlcmFibGUpKTskaOKAjV9vbmNlLm1ha2VNYXAobWFrZU1hcCk7XG5oYXJkZW4obWFrZU1hcCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZVNldD0odmFsdWVzKT0+aGFyZGVuKG5ldyBTZXQodmFsdWVzKSk7JGjigI1fb25jZS5tYWtlU2V0KG1ha2VTZXQpO1xuaGFyZGVuKG1ha2VTZXQpO1xuXG4vKlxuXG5cblxuICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtNYXA9KGVudHJpZXMpPT5oYXJkZW4obmV3IFdlYWtNYXAoZW50cmllcykpOyRo4oCNX29uY2UubWFrZVdlYWtNYXAobWFrZVdlYWtNYXApO1xuaGFyZGVuKG1ha2VXZWFrTWFwKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtTZXQ9KHZhbHVlcyk9PmhhcmRlbihuZXcgV2Vha1NldCh2YWx1ZXMpKTskaOKAjV9vbmNlLm1ha2VXZWFrU2V0KG1ha2VXZWFrU2V0KTtcbmhhcmRlbihtYWtlV2Vha1NldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUHJvbWlzZSI6WyJtYWtlUHJvbWlzZSJdLCJtYWtlTWFwIjpbIm1ha2VNYXAiXSwibWFrZVNldCI6WyJtYWtlU2V0Il0sIm1ha2VXZWFrTWFwIjpbIm1ha2VXZWFrTWFwIl0sIm1ha2VXZWFrU2V0IjpbIm1ha2VXZWFrU2V0Il19LCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFrjvzpRAwAAUQMAACkAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9hc3luYy10b29scy5qc3siaW1wb3J0cyI6WyIuLi9yaW5nMC9tYWluLmpzIl0sImV4cG9ydHMiOlsiYXN5bmNEb1doaWxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjigI1faW1wb3J0cywgICBsaXZlVmFyOiAkaOKAjV9saXZlLCAgIG9uY2VWYXI6ICRo4oCNX29uY2UsICAgaW1wb3J0TWV0YTogJGjigI1fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlUHJvbWlzZTskaOKAjV9pbXBvcnRzKFtbXCIuLi9yaW5nMC9tYWluLmpzXCIsIFtbXCJtYWtlUHJvbWlzZVwiLCBbJGjigI1fYSA9PiAobWFrZVByb21pc2UgPSAkaOKAjV9hKV1dXV1dKTsgICBcblxuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXN5bmNEb1doaWxlPShib2R5KT0+e1xucmV0dXJuIG1ha2VQcm9taXNlKChyZXNvbHZlLHJlamVjdCk9PntcbmNvbnN0IGxvb3A9YXN5bmMoKT0+e1xuY29uc3QgZG9Db250aW51ZT1hd2FpdCBib2R5KCk7XG5pZighZG9Db250aW51ZSl7XG4vL1xucmVzb2x2ZSh1bmRlZmluZWQpO1xucmV0dXJuO1xuIH1cblxuLy9cbi8vXG5sb29wKCkuY2F0Y2gocmVqZWN0KTtcbiB9O1xuXG5sb29wKCkuY2F0Y2gocmVqZWN0KTtcbiB9KTtcbiB9OyRo4oCNX29uY2UuYXN5bmNEb1doaWxlKGFzeW5jRG9XaGlsZSk7XG5oYXJkZW4oYXN5bmNEb1doaWxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzeW5jRG9XaGlsZSI6WyJhc3luY0RvV2hpbGUiXX0sIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAWkIhVY0BAACNAQAAIgAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcxL21haW4uanN7ImltcG9ydHMiOlsiLi9hc3luYy10b29scy5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vYXN5bmMtdG9vbHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaOKAjV9pbXBvcnRzLCAgIGxpdmVWYXI6ICRo4oCNX2xpdmUsICAgb25jZVZhcjogJGjigI1fb25jZSwgICBpbXBvcnRNZXRhOiAkaOKAjV9fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjigI1faW1wb3J0cyhbW1wiLi9hc3luYy10b29scy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsBAh4DCgAAAAAAAAAAAIBPfdAt5QEALeUBABQAAAAAAAAAAAAAAKSBAAAAAGNvbXBhcnRtZW50LW1hcC5qc29uUEsBAh4DCgAAAAAAAAAAAKeA7R2EAQAAhAEAACAAAAAAAAAAAAAAAKSBX+UBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9oZWFwLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACcAAAAAAAAAAAAAAKSBIecBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvZXhwb3J0cy5qc1BLAQIeAwoAAAAAAAAAAACbQYZgdwoAAHcKAAAkAAAAAAAAAAAAAACkgbXoAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2hlYXAuanNQSwECHgMKAAAAAAAAAAAAETdOXHACAABwAgAAJQAAAAAAAAAAAAAApIFu8wEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAAqLbT5YAIAAGACAAArAAAAAAAAAAAAAACkgSH2AQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2lzLXBhc3NhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAIafySh7AwAAewMAACQAAAAAAAAAAAAAAKSByvgBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMva2V5cy5qc1BLAQIeAwoAAAAAAAAAAAClfRN+6gYAAOoGAAApAAAAAAAAAAAAAACkgYf8AQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL21ha2Utb25jZS5qc1BLAQIeAwoAAAAAAAAAAABoc8uBbwkAAG8JAAAtAAAAAAAAAAAAAACkgbgDAgBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL3dhdGNoLXByb21pc2UuanNQSwECHgMKAAAAAAAAAAAAnQGtIwUFAAAFBQAAIQAAAAAAAAAAAAAApIFyDQIAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL2NhY2hlLmpzUEsBAh4DCgAAAAAAAAAAAHnwkU4IAgAACAIAACAAAAAAAAAAAAAAAKSBthICAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy9tYWluLmpzUEsBAh4DCgAAAAAAAAAAAAp16cMUBAAAFAQAACEAAAAAAAAAAAAAAKSB/BQCAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy9zdGF0ZS5qc1BLAQIeAwoAAAAAAAAAAAD1t26JnRcAAJ0XAAAhAAAAAAAAAAAAAACkgU8ZAgBAYWdvcmljL2NhY2hlLXYwLjMuMi9zcmMvc3RvcmUuanNQSwECHgMKAAAAAAAAAAAAh5JSp08BAABPAQAAIQAAAAAAAAAAAAAApIErMQIAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAOF8hTvqHAAA6hwAACYAAAAAAAAAAAAAAKSBuTICAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9hbW91bnRNYXRoLmpzUEsBAh4DCgAAAAAAAAAAAOiT/y8jBAAAIwQAACcAAAAAAAAAAAAAAKSB508CAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9hbW91bnRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAADLEMbG0wUAANMFAAAnAAAAAAAAAAAAAACkgU9UAgBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvZGlzcGxheUluZm8uanNQSwECHgMKAAAAAAAAAAAAUfBylgMCAAADAgAAIQAAAAAAAAAAAAAApIFnWgIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAFYNhUWGFgAAhhYAACUAAAAAAAAAAAAAAKSBqVwCAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9pc3N1ZXJLaXQuanNQSwECHgMKAAAAAAAAAAAA72F5q/cFAAD3BQAAOgAAAAAAAAAAAAAApIFycwIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAAATTu0+tQUAALUFAAA6AAAAAAAAAAAAAACkgcF5AgBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAEOT4BZzBAAAcwQAADYAAAAAAAAAAAAAAKSBzn8CAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAAAD8kbKXAYAAFwGAAA2AAAAAAAAAAAAAACkgZWEAgBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAqh1vP4cDAACHAwAAIwAAAAAAAAAAAAAApIFFiwIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3BheW1lbnQuanNQSwECHgMKAAAAAAAAAAAAIfnH9w0gAAANIAAAKQAAAAAAAAAAAAAApIENjwIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3BheW1lbnRMZWRnZXIuanNQSwECHgMKAAAAAAAAAAAA2cc3cfQQAAD0EAAAIQAAAAAAAAAAAAAApIFhrwIAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3B1cnNlLmpzUEsBAh4DCgAAAAAAAAAAALtDDBziBQAA4gUAAC0AAAAAAAAAAAAAAKSBlMACAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy90cmFuc2llbnROb3RpZmllci5qc1BLAQIeAwoAAAAAAAAAAABy3Wqx+BgAAPgYAAAmAAAAAAAAAAAAAACkgcHGAgBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvdHlwZUd1YXJkcy5qc1BLAQIeAwoAAAAAAAAAAAD+/laOBRoAAAUaAAAnAAAAAAAAAAAAAACkgf3fAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvY2FsbGJhY2suanNQSwECHgMKAAAAAAAAAAAAEj5XxRwGAAAcBgAAJQAAAAAAAAAAAAAApIFH+gIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2NvbmZpZy5qc1BLAQIeAwoAAAAAAAAAAADQ365PTgQAAE4EAAAkAAAAAAAAAAAAAACkgaYAAwBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZGVidWcuanNQSwECHgMKAAAAAAAAAAAAJmmVZpYCAACWAgAAJQAAAAAAAAAAAAAApIE2BQMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2Vycm9ycy5qc1BLAQIeAwoAAAAAAAAAAADNeqQpzAQAAMwEAAAkAAAAAAAAAAAAAACkgQ8IAwBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAWCX30OsVAADrFQAALwAAAAAAAAAAAAAApIEdDQMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNQSwECHgMKAAAAAAAAAAAACTqpybAOAACwDgAAJgAAAAAAAAAAAAAApIFVIwMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL21hcnNoYWwuanNQSwECHgMKAAAAAAAAAAAAleyqvXUIAAB1CAAAKwAAAAAAAAAAAAAApIFJMgMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL21ldGhvZC10b29scy5qc1BLAQIeAwoAAAAAAAAAAAACnOVnLx0AAC8dAAAxAAAAAAAAAAAAAACkgQc7AwBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAAC1GjYoBgAAKAYAACwAAAAAAAAAAAAAAKSBhVgDAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90ZXN0aW5nLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAPRK7R4GAwAABgMAACgAAAAAAAAAAAAAAKSB914DAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90eXBlQ2hlY2suanNQSwECHgMKAAAAAAAAAAAArVi+CVcDAABXAwAAKQAAAAAAAAAAAAAApIFDYgMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAAh5JSp08BAABPAQAAKgAAAAAAAAAAAAAApIHhZQMAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVzLWluZGV4LmpzUEsBAh4DCgAAAAAAAAAAABzwdbAfBwAAHwcAACoAAAAAAAAAAAAAAKSBeGcDAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy91cGdyYWRlLWFwaS5qc1BLAQIeAwoAAAAAAAAAAABttfUwKCMAACgjAAAkAAAAAAAAAAAAAACkgd9uAwBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAIJVqyBQIAAAUCAAAMwAAAAAAAAAAAAAApIFJkgMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzUEsBAh4DCgAAAAAAAAAAAOn1AVHiBwAA4gcAACQAAAAAAAAAAAAAAKSBrpoDAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADxQQ7ghBAAAIQQAAAnAAAAAAAAAAAAAACkgdKiAwBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvbm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAAlQRrDE4rAABOKwAAKgAAAAAAAAAAAAAApIGbswMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3B1Ymxpc2gta2l0LmpzUEsBAh4DCgAAAAAAAAAAADQZ89EhCAAAIQgAAC4AAAAAAAAAAAAAAKSBMd8DAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdG9yZWQtbm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAAnY0qkAkWAAAJFgAAJwAAAAAAAAAAAAAApIGe5wMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N0b3Jlc3ViLmpzUEsBAh4DCgAAAAAAAAAAAIM8jbM3EgAANxIAACgAAAAAAAAAAAAAAKSB7P0DAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdWJzY3JpYmUuanNQSwECHgMKAAAAAAAAAAAAEK1p3uIHAADiBwAAKQAAAAAAAAAAAAAApIFpEAQAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3N1YnNjcmliZXIuanNQSwECHgMKAAAAAAAAAAAAX2geNfUDAAD1AwAAJAAAAAAAAAAAAAAApIGSGAQAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL3RvcGljLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACoAAAAAAAAAAAAAAKSByRwEAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy90eXBlcy1pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABTWNDLjQYAAI0GAAAtAAAAAAAAAAAAAACkgWAeBABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi90b29scy90ZXN0U3VwcG9ydHMuanNQSwECHgMKAAAAAAAAAAAAGjl5naMdAACjHQAAMwAAAAAAAAAAAAAApIE4JQQAQGFnb3JpYy9zbWFydC13YWxsZXQtdjAuNS4zL3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzUEsBAh4DCgAAAAAAAAAAAKkp1sCcDQAAnA0AACEAAAAAAAAAAAAAAKSBLEMEAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADXs6x+PwUAAD8FAAAsAAAAAAAAAAAAAACkgQdRBABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qc1BLAQIeAwoAAAAAAAAAAAAyAVX2AQUAAAEFAAAwAAAAAAAAAAAAAACkgZBWBABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanNQSwECHgMKAAAAAAAAAAAAl46XO70QAAC9EAAAMQAAAAAAAAAAAAAApIHfWwQAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAACNSUio6gsAAOoLAAAxAAAAAAAAAAAAAACkgetsBABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAEqRF/XJDQAAyQ0AADUAAAAAAAAAAAAAAKSBJHkEAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAACt5d6eKCgAAigoAADUAAAAAAAAAAAAAAKSBQIcEAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAK1WK+LADgAAwA4AAC4AAAAAAAAAAAAAAKSBHZIEAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAh5JSp08BAABPAQAAIQAAAAAAAAAAAAAApIEpoQQAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAIdAXNyyFgAAshYAACgAAAAAAAAAAAAAAKSBt6IEAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9leG8tdXRpbHMuanNQSwECHgMKAAAAAAAAAAAA3XOiDq0IAACtCAAAJAAAAAAAAAAAAAAApIGvuQQAQGFnb3JpYy92YXQtZGF0YS12MC41LjIvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAGWWpiTKFgAAyhYAADAAAAAAAAAAAAAAAKSBnsIEAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy92YXQtZGF0YS1iaW5kaW5ncy5qc1BLAQIeAwoAAAAAAAAAAAAslRxJRREAAEURAAAfAAAAAAAAAAAAAACkgbbZBABAYWdvcmljL3ZhdHMtdjAuMTUuMS9zcmMvY3JjLmpzUEsBAh4DCgAAAAAAAAAAABQlvW9ZIQAAWSEAACUAAAAAAAAAAAAAAKSBOOsEAEBhZ29yaWMvdmF0cy12MC4xNS4xL3NyYy9saWItYm9hcmQuanNQSwECHgMKAAAAAAAAAAAAAi7Ho8ILAADCCwAALQAAAAAAAAAAAAAApIHUDAUAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9hY3Rpb25zLmpzUEsBAh4DCgAAAAAAAAAAAJzixjyuAgAArgIAADUAAAAAAAAAAAAAAKSB4RgFAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvYmlnaW50U3RyaW5naWZ5LmpzUEsBAh4DCgAAAAAAAAAAADqupTppCQAAaQkAAC4AAAAAAAAAAAAAAKSB4hsFAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvZGF0ZS1ub3cuanNQSwECHgMKAAAAAAAAAAAAmHUVKe0SAADtEgAAOgAAAAAAAAAAAAAApIGXJQUAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9maW5kT3JNYWtlSW52aXRhdGlvbi5qc1BLAQIeAwoAAAAAAAAAAAA8aU7GUAIAAFACAAA0AAAAAAAAAAAAAACkgdw4BQBAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2ludGVybmFsLXR5cGVzLmpzUEsBAh4DCgAAAAAAAAAAABV4Uy+oCAAAqAgAADEAAAAAAAAAAAAAAKSBfjsFAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvaXNzdWVyVGFibGUuanNQSwECHgMKAAAAAAAAAAAAq92NmiweAAAsHgAAMwAAAAAAAAAAAAAApIF1RAUAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9saWItZGVoeWRyYXRlLmpzUEsBAh4DCgAAAAAAAAAAAAND6jeRpQAAkaUAADAAAAAAAAAAAAAAAKSB8mIFAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvbGliLXdhbGxldC5qc1BLAQIeAwoAAAAAAAAAAABT4BLqvwIAAL8CAAAsAAAAAAAAAAAAAACkgdEIBgBAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL3B1YnN1Yi5qc1BLAQIeAwoAAAAAAAAAAAC8xd4fFDUAABQ1AAAsAAAAAAAAAAAAAACkgdoLBgBAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL3dhbGxldC5qc1BLAQIeAwoAAAAAAAAAAADKDpYscBgAAHAYAAAzAAAAAAAAAAAAAACkgThBBgBAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanNQSwECHgMKAAAAAAAAAAAA6bPLfI0BAACNAQAAHgAAAAAAAAAAAAAApIH5WQYAQGFnb3JpYy96b25lLXYwLjIuMi9kdXJhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAGqwJS4yEQAAMhEAACIAAAAAAAAAAAAAAKSBwlsGAEBhZ29yaWMvem9uZS12MC4yLjIvc3JjL2R1cmFibGUuanNQSwECHgMKAAAAAAAAAAAANJDkptMEAADTBAAAKwAAAAAAAAAAAAAApIE0bQYAQGVuZG8vY29tbW9uLXYxLjIuNS9hcHBseS1sYWJlbGluZy1lcnJvci5qc1BLAQIeAwoAAAAAAAAAAAC3mQvAZgQAAGYEAAAqAAAAAAAAAAAAAACkgVByBgBAZW5kby9jb21tb24tdjEuMi41L2Zyb20tdW5pcXVlLWVudHJpZXMuanNQSwECHgMKAAAAAAAAAAAACm/VKz0CAAA9AgAAJAAAAAAAAAAAAAAApIH+dgYAQGVuZG8vY29tbW9uLXYxLjIuNS9pZGVudC1jaGVja2VyLmpzUEsBAh4DCgAAAAAAAAAAALtD5hd+AgAAfgIAACYAAAAAAAAAAAAAAKSBfXkGAEBlbmRvL2NvbW1vbi12MS4yLjUvbGlzdC1kaWZmZXJlbmNlLmpzUEsBAh4DCgAAAAAAAAAAAPAoIjtlAwAAZQMAACoAAAAAAAAAAAAAAKSBP3wGAEBlbmRvL2NvbW1vbi12MS4yLjUvbWFrZS1hcnJheS1pdGVyYXRvci5qc1BLAQIeAwoAAAAAAAAAAADjetlKPwIAAD8CAAAkAAAAAAAAAAAAAACkgex/BgBAZW5kby9jb21tb24tdjEuMi41L21ha2UtaXRlcmF0b3IuanNQSwECHgMKAAAAAAAAAAAAqWJQiggDAAAIAwAAIQAAAAAAAAAAAAAApIFtggYAQGVuZG8vY29tbW9uLXYxLjIuNS9vYmplY3QtbWFwLmpzUEsBAh4DCgAAAAAAAAAAAOFzK0znAwAA5wMAACYAAAAAAAAAAAAAAKSBtIUGAEBlbmRvL2NvbW1vbi12MS4yLjUvb2JqZWN0LW1ldGEtbWFwLmpzUEsBAh4DCgAAAAAAAAAAAO0+I7HtAwAA7QMAACQAAAAAAAAAAAAAAKSB34kGAEBlbmRvL2NvbW1vbi12MS4yLjUvdGhyb3ctbGFiZWxlZC5qc1BLAQIeAwoAAAAAAAAAAABUnPw8mQEAAJkBAAAhAAAAAAAAAAAAAACkgQ6OBgBAZW5kby9lbnYtb3B0aW9ucy12MS4xLjYvaW5kZXguanNQSwECHgMKAAAAAAAAAAAATeP7/PUNAAD1DQAAKwAAAAAAAAAAAAAApIHmjwYAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS42L3NyYy9lbnYtb3B0aW9ucy5qc1BLAQIeAwoAAAAAAAAAAADX1j4G8QcAAPEHAAAcAAAAAAAAAAAAAACkgSSeBgBAZW5kby9lcnJvcnMtdjEuMi41L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAMZt/ZukEAAApBAAACMAAAAAAAAAAAAAAKSBT6YGAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41L3NyYy9FLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACkAAAAAAAAAAAAAAKSBNLcGAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41L3NyYy9leHBvcnRzLmpzUEsBAh4DCgAAAAAAAAAAAM7iumi1DAAAtQwAACcAAAAAAAAAAAAAAKSByrgGAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMi41L3NyYy9sb2NhbC5qc1BLAQIeAwoAAAAAAAAAAABhurys8QwAAPEMAAA1AAAAAAAAAAAAAACkgcTFBgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvbWVzc2FnZS1icmVha3BvaW50cy5qc1BLAQIeAwoAAAAAAAAAAACf7/MTPAMAADwDAAApAAAAAAAAAAAAAACkgQjTBgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvbm8tc2hpbS5qc1BLAQIeAwoAAAAAAAAAAABGMUZBaQkAAGkJAAAtAAAAAAAAAAAAAACkgYvWBgBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjIuNS9zcmMvdHJhY2stdHVybnMuanNQSwECHgMKAAAAAAAAAAAAe9gXB1sCAABbAgAAIwAAAAAAAAAAAAAApIE/4AYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4yLjUvdXRpbHMuanNQSwECHgMKAAAAAAAAAAAA3BBWdlcCAABXAgAAGQAAAAAAAAAAAAAApIHb4gYAQGVuZG8vZXhvLXYxLjUuMy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAAbVpeV7hQAAO4UAAAiAAAAAAAAAAAAAACkgWnlBgBAZW5kby9leG8tdjEuNS4zL3NyYy9leG8tbWFrZXJzLmpzUEsBAh4DCgAAAAAAAAAAADGqSZYRMAAAETAAACEAAAAAAAAAAAAAAKSBl/oGAEBlbmRvL2V4by12MS41LjMvc3JjL2V4by10b29scy5qc1BLAQIeAwoAAAAAAAAAAABytQfPPAIAADwCAAAlAAAAAAAAAAAAAACkgecqBwBAZW5kby9leG8tdjEuNS4zL3NyYy9nZXQtaW50ZXJmYWNlLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAAB0AAAAAAAAAAAAAAKSBZi0HAEBlbmRvL2V4by12MS41LjMvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAA0vIA1bAgAAWwIAAB0AAAAAAAAAAAAAAKSB8C4HAEBlbmRvL2Zhci12MS4xLjUvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAIjgb/J5BwAAeQcAAB0AAAAAAAAAAAAAAKSBhjEHAEBlbmRvL21hcnNoYWwtdjEuNS4zL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAHLn8HFuQwAAbkMAACoAAAAAAAAAAAAAAKSBOjkHAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9lbmNvZGVQYXNzYWJsZS5qc1BLAQIeAwoAAAAAAAAAAAAwjHTXciIAAHIiAAArAAAAAAAAAAAAAACkgfB8BwBAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvZW5jb2RlVG9DYXBEYXRhLmpzUEsBAh4DCgAAAAAAAAAAAAeEjUlLIgAASyIAAC0AAAAAAAAAAAAAAKSBq58HAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qc1BLAQIeAwoAAAAAAAAAAADcHLoAJiMAACYjAAAqAAAAAAAAAAAAAACkgUHCBwBAZW5kby9tYXJzaGFsLXYxLjUuMy9zcmMvbWFyc2hhbC1qdXN0aW4uanNQSwECHgMKAAAAAAAAAAAAbcoZY2cGAABnBgAALQAAAAAAAAAAAAAApIGv5QcAQGVuZG8vbWFyc2hhbC12MS41LjMvc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzUEsBAh4DCgAAAAAAAAAAAFcTv9dSJwAAUicAACMAAAAAAAAAAAAAAKSBYewHAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9tYXJzaGFsLmpzUEsBAh4DCgAAAAAAAAAAAK8iuY7sJQAA7CUAACUAAAAAAAAAAAAAAKSB9BMIAEBlbmRvL21hcnNoYWwtdjEuNS4zL3NyYy9yYW5rT3JkZXIuanNQSwECHgMKAAAAAAAAAAAAh5JSp08BAABPAQAAIQAAAAAAAAAAAAAApIEjOggAQGVuZG8vbWFyc2hhbC12MS41LjMvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAALI5TcNgBQAAYAUAAB4AAAAAAAAAAAAAAKSBsTsIAEBlbmRvL25hdC12NS4wLjEwL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAAt4qeYRAoAAEQKAAAgAAAAAAAAAAAAAACkgU1BCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAAD+FZ/rYAYAAGAGAAAoAAAAAAAAAAAAAACkgc9LCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvY29weUFycmF5LmpzUEsBAh4DCgAAAAAAAAAAAKSpjes3CAAANwgAACkAAAAAAAAAAAAAAKSBdVIIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9jb3B5UmVjb3JkLmpzUEsBAh4DCgAAAAAAAAAAAMZ9Al1sCgAAbAoAAC4AAAAAAAAAAAAAAKSB81oIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9kZWVwbHlGdWxmaWxsZWQuanNQSwECHgMKAAAAAAAAAAAAoHX1XEQSAABEEgAAJAAAAAAAAAAAAAAApIGrZQgAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL2Vycm9yLmpzUEsBAh4DCgAAAAAAAAAAAFQYrimYBQAAmAUAACsAAAAAAAAAAAAAAKSBMXgIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9pdGVyLWhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAA5QY3uVoRAABaEQAAJwAAAAAAAAAAAAAApIESfggAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL21ha2UtZmFyLmpzUEsBAh4DCgAAAAAAAAAAAG5j4lmMBAAAjAQAACkAAAAAAAAAAAAAAKSBsY8IAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9tYWtlVGFnZ2VkLmpzUEsBAh4DCgAAAAAAAAAAAHnvc1kpFQAAKRUAADAAAAAAAAAAAAAAAKSBhJQIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAAA/mIlJ5SQAAOUkAAAqAAAAAAAAAAAAAACkgfupCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvcGFzc1N0eWxlT2YuanNQSwECHgMKAAAAAAAAAAAAd9FSe8QXAADEFwAAKAAAAAAAAAAAAAAApIEozwgAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3JlbW90YWJsZS5qc1BLAQIeAwoAAAAAAAAAAACbaC+klwwAAJcMAAArAAAAAAAAAAAAAACkgTLnCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvc2FmZS1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAABkIm22+BwAAvgcAACUAAAAAAAAAAAAAAKSBEvQIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy9zdHJpbmcuanNQSwECHgMKAAAAAAAAAAAAQfcjRQkKAAAJCgAAJQAAAAAAAAAAAAAApIET/AgAQGVuZG8vcGFzcy1zdHlsZS12MS40LjMvc3JjL3N5bWJvbC5qc1BLAQIeAwoAAAAAAAAAAAA6ytL1JgcAACYHAAAlAAAAAAAAAAAAAACkgV8GCQBAZW5kby9wYXNzLXN0eWxlLXYxLjQuMy9zcmMvdGFnZ2VkLmpzUEsBAh4DCgAAAAAAAAAAALH08vgPCQAADwkAACkAAAAAAAAAAAAAAKSByA0JAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy90eXBlR3VhcmRzLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACQAAAAAAAAAAAAAAKSBHhcJAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC4zL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAAVVGkMvA4AALwOAAAeAAAAAAAAAAAAAACkga8YCQBAZW5kby9wYXR0ZXJucy12MS40LjMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAA+L/F34IyAACCMgAAKgAAAAAAAAAAAAAApIGnJwkAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL2NoZWNrS2V5LmpzUEsBAh4DCgAAAAAAAAAAANL+vHU6FQAAOhUAAC0AAAAAAAAAAAAAAKSBcVoJAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMva2V5cy9jb21wYXJlS2V5cy5qc1BLAQIeAwoAAAAAAAAAAAB9Z1ck4Q0AAOENAAApAAAAAAAAAAAAAACkgfZvCQBAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL2tleXMvY29weUJhZy5qc1BLAQIeAwoAAAAAAAAAAACTDHgB6AsAAOgLAAApAAAAAAAAAAAAAACkgR5+CQBAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL2tleXMvY29weVNldC5qc1BLAQIeAwoAAAAAAAAAAABsEyht9xIAAPcSAAA5AAAAAAAAAAAAAACkgU2KCQBAZW5kby9wYXR0ZXJucy12MS40LjMvc3JjL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAAvjyHBGwWAABsFgAANQAAAAAAAAAAAAAApIGbnQkAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAA0g0Dya0cAACtHAAANQAAAAAAAAAAAAAApIFatAkAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanNQSwECHgMKAAAAAAAAAAAAsbeQNRYZAAAWGQAANgAAAAAAAAAAAAAApIFa0QkAQGVuZG8vcGF0dGVybnMtdjEuNC4zL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzUEsBAh4DCgAAAAAAAAAAAMBhos8zrgAAM64AADUAAAAAAAAAAAAAAKSBxOoJAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACIAAAAAAAAAAAAAAKSBSpkKAEBlbmRvL3BhdHRlcm5zLXYxLjQuMy9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAA5KbFhFEGAABRBgAAIQAAAAAAAAAAAAAApIHZmgoAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS41L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAMAoeclbAgAAWwIAACoAAAAAAAAAAAAAAKSBaaEKAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNS9zcmMvaXMtcHJvbWlzZS5qc1BLAQIeAwoAAAAAAAAAAABtLwE4ogcAAKIHAAApAAAAAAAAAAAAAACkgQykCgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjUvc3JjL21lbW8tcmFjZS5qc1BLAQIeAwoAAAAAAAAAAAD4cDHEggUAAIIFAAA0AAAAAAAAAAAAAACkgfWrCgBAZW5kby9wcm9taXNlLWtpdC12MS4xLjUvc3JjL3Byb21pc2UtZXhlY3V0b3Ita2l0LmpzUEsBAh4DCgAAAAAAAAAAAIeSUqdPAQAATwEAACUAAAAAAAAAAAAAAKSBybEKAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuNS9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAANN+elaARAACgEQAAHAAAAAAAAAAAAAAApIFbswoAQGVuZG8vc3RyZWFtLXYxLjIuNS9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAABqoyJQyAEAAMgBAAAcAAAAAAAAAAAAAACkgTXFCgBqZXNzaWUuanMtdjAuMy40L3NyYy9tYWluLmpzUEsBAh4DCgAAAAAAAAAAAHsYXhl4AQAAeAEAAB8AAAAAAAAAAAAAAKSBN8cKAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL0UuanNQSwECHgMKAAAAAAAAAAAAun+i63UCAAB1AgAALAAAAAAAAAAAAAAApIHsyAoAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanNQSwECHgMKAAAAAAAAAAAA6FQve+sBAADrAQAAIgAAAAAAAAAAAAAApIGrywoAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFpbi5qc1BLAQIeAwoAAAAAAAAAAACXQPPL1gcAANYHAAAkAAAAAAAAAAAAAACkgdbNCgBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9tYWtlcnMuanNQSwECHgMKAAAAAAAAAAAAWuO/OlEDAABRAwAAKQAAAAAAAAAAAAAApIHu1QoAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanNQSwECHgMKAAAAAAAAAAAAWkIhVY0BAACNAQAAIgAAAAAAAAAAAAAApIGG2QoAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvbWFpbi5qc1BLBQYAAAAAngCeAFM1AABT2woAAAA=","endoZipBase64Sha512":"8b337e59e26563070616ea665c7557c01455edcb1c4847f4463e33afb126c4f83c39514e5ea9bebf2f1e5f6f2ecb97914fde939ff77f4b67f5d38550f87018bd"};