@agoric/wallet-backend 0.14.4-dev-b8d96c7.0 → 0.14.4-dev-4a9a6ad.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":"UEsDBAoAAAAAAAAAAADGp8qmZfoAAGX6AAAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zIiwKICAgICJtb2R1bGUiOiAiLi9zcmMvd2FsbGV0LmpzIgogIH0sCiAgImNvbXBhcnRtZW50cyI6IHsKICAgICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvYmFzZS16b25lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjEwIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2hlYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaGVhcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdjNzFiMjc1NzI1YWVjNjg4MzI1ZDZkMzBmMzkzYzg1NDkxMjllNWQxM2FjNTYyMGU0ZTI2MDdmNmQ4YTFjZjExNzNlYTkwNzA5ODc3NzY0MGQyYTUxNjYwZDJmOWRjNDlhNmUyZjQ3N2Q5MjU2M2E3MmQzOTlhMmQ1NWQxNTc3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4cG9ydHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4cG9ydHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYmU2Zjg3MDYwNWM1ZTVlNDJmMzllZDI4MjIzNzhhYjllYWY0ZmE2YmRhNzQwNzBiYWM1OGZmZDEwZTE0YTA3MmNmODA5NmZlOGM2OTg2ODAwYTk5NWUyYzYwNGI4OGNhMjcyMWY5OTFiNTUwNzFhZTZmM2UzZDBlYTNiYWFmOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9oZWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9oZWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNmFjMGZiN2NkMmI2NmJiOTgxMzNkOTQ4YjFkYjFhZmFmZmYzZjdmOWZhMDM2ZTYwMWI3MGYyYTEzZjMyMGYxMWQ0NWQzMTFmZGJhMzlmYmY1NDk1NjY0YmI2MzEzODk5ODYyZTA3MzE5ODFkNzk1YTY0NWJlZWYzZThlNTRiYTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNmJjZTg1ZDkyNzk4MGZmMGJjZGE2ZGZjYjIyNjBjNmQ3ZTdiNGZiYWU0NDlhZGVjY2U0NGUwODQ2Nzc5YmI0NWUyYzQzYmQ2NzgyMzA2YTY5NWY2OTY4OWZiZTAwYmIyNTVmYTViOTlhMWE3N2EwNGI4YzU4NjdjZjc0MDYyNDYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXMtcGFzc2FibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzLXBhc3NhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODlmNWY1NTMzYzBlYTlhYzgyZmQxMDA3ZDc2OGU4ZmEzMjA5ZGM4OWVlZGJjY2I2ZDRhZmIzNWFlMGY3MWZlODA4YmFlYjAyZGY1NmNhZDZhZGIzNjQyODIzOTE5ZWNkMjllMmEwYzg0MzkwODBhMmM5NDkzYjIwNDZiN2U1NDYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjM4MGMwODFjYjMxYmYwN2Y0NDIwNmJmZWY1MTI3ZTAwNGNlMWViODVkMzNhMzgyZWJlNDAzYmMyMjRhYTBmOTc2M2UyZjM2MWJmM2E0MmU0YTNiNTU1MmI5NDhkM2QwNTM3N2Q1ZTEyZDAyZWNlY2FmODM5MGE5M2Y3MDhmN2RhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2Utb25jZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZS1vbmNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmEzNWNjNmJhMWVhZDU0MTFhMGQ4ZWQ2YzhlMWY2ZTYzNjBhMWQzZmU3NzE1MDgyYTg2NDNhOTQ2YzEwM2VjYjVkYzNhZjczNDU4OTljNDNhOWQ2YjNkMjkxM2Y2YzUxYjIwM2JjZDU1YzY4MWVhYjk1YWMwMDM5ODUzZGY2ZTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvd2F0Y2gtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvd2F0Y2gtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImU1ZDU2N2Q2YWY4ODdhNjU4MTY3ZGEyNzEzMzRkYzVmMzRkMTBmYjdjZWNkNzI5YzFiNDBhZmM5NTNmYzNmMmMyZjJiOGZiMzA4MTBiNTZkNTFiNzE0NjlmN2FhNmVkNDlmMTc1MGIxMWFlZTRhMjgyYmZjMzQ2OWQ1M2QwOWUxIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL2NhY2hlLXYwLjMuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9jYWNoZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL2NhY2hlLXYwLjMuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2NhY2hlLXYwLjMuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jYWNoZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY2FjaGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1YWM0MTRkZTk0YWFjZmFkMzJjNmU0M2YzZTZhZTQ5NzJjNmVlNDQyZGVkMjIwYTVkYTExYWM3Y2ZiOTc4ZmIwZmFkMzMzMmE5OTY4OTMwNjFmNDg1YmYwYjE2OTk3MDRmYjVkNWY3ZTcwODY4NjA3YjYwODYwMjk5ZDZiNGI1MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYWluLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWluLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjljNDRkNGRiMmFkN2VjZDA3MTdmMzk5ODdmZWE1NzlhYjY0ZDM4YmJjZmU3M2FjYjc5ZjE0Yjg1OGJiODEyNGU5MGZkZWUwYmMzNWY3OGE2YjE3ODc3Njc3NGZkYjZmMWJlOWIwYTJjZjZlYTkxOTU3NGUwZTc5M2VkMzU1NGYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RhdGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0YXRlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDE3YmY0ZDU0NzRmZWI0ZjNmZGZhMzdmODlkN2UxYWFmZDNlNGFkNTVhMDliZDQzNDQzNmFmZjQxMDA4YmQyNmEwMjA4NjcyMGIwNDgxZTAxODAxNTBkY2EwNWNkMGVlMDRiYzMyNDFmMGE1NzYzNDQ2MDVjYzY3NzA3NzI5NzgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMmEyMjExMjBhMDc5ZDc3ZGMwZTcyYWNhMjQ2MDJlZjRiMTg5ODJiM2I4NjBjNDVkMmQ5Yzk0MzljMjFlMzhkMDI3MDk3ZTA0Y2Q1NTVhOWM0MzdlNzI5NzQwNTkyNTA3OTNiOGNmY2JlZWQxNDI0ODAzNGIwNmIyM2FkMGJlYzYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWJlNmY4NzA2MDVjNWU1ZTQyZjM5ZWQyODIyMzc4YWI5ZWFmNGZhNmJkYTc0MDcwYmFjNThmZmQxMGUxNGEwNzJjZjgwOTZmZThjNjk4NjgwMGE5OTVlMmM2MDRiODhjYTI3MjFmOTkxYjU1MDcxYWU2ZjNlM2QwZWEzYmFhZjgiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvZXJ0cC12MC4xNi4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2VydHAiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2R1cmFibGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZHVyYWJsZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjE0IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Ftb3VudE1hdGguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Ftb3VudE1hdGguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiOTg0MGYwY2U4NzI0MzRhMDI1OTA4OTViYjFhYTRhNDMzMjA3YmYzNmI3N2E0Y2QxMTI4YTRhOTUxNTRiMzQ5ZjhiODk1NTE3ZDdiODZjYzRhMDY0OWVhMDUyNDU0NzU3MGUzZDc0MjMzZTg4ODhjMTRiOTlhMmY5MzM1MzIwZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hbW91bnRTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYW1vdW50U3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2NjQwZDE0MWIzZTkwZWM3MTM4MjA1OWE2ZmZkZGFiZTQ2NmVhOWQ4ZTNlYTVjZmVhM2M1NWViYzU4MzA2ZWUyMWIxYTQzM2I3OGQzZDU5YjFiYzg3NWRiZGE0NDcwMzcyZDE5ODlmZGRiMTI3Zjc0MzdlMGFhNzQ5MDlkYWQ4MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kaXNwbGF5SW5mby5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZGlzcGxheUluZm8uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1Nzk5ZGE2YmM5ZmFiMzAxMjY5YjNkZjYzZGI5MDM5ODQxMzkxMmQ1YzUyMzc1ZDBjYTU1MGJhZWVhMjRiMzk2NDZjNGVjYTFjMTkwYTI2OTk1NTJmNzQ1NTRjZjk0YjkxNDI5NDlhY2QxYmM4M2QyMGNhNDk5ZjY2MGI5ZTRlZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkM2JiODkxNmM0MjQxNTZmYWUzMmI5OGZmZTY0YzhkODUzMDVlZTdmOGU5NjI1ZTJhMjFjOGJmYjViYzM3OGFjZTQ2ZGQ5ZjFjODEzN2YyMTRiYTA1NzQ1MjUzOGI5Y2ViMDk1NWM2YjA3YjEzOTBmYTE4Zjg0MjYyNGUwMDc1OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pc3N1ZXJLaXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzc3VlcktpdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjkwOTlhZGZjNDc2MWI3MzJjMzRiZmEyZWIzNzRiZjM1MTVkNmFmYmJhMjViMDMxMjY2MTViNzdmOTFjMDY1Yjk5ODFkMjI5OWYzNWY2OTQ5OTBlMzQzZTRmZDFkYzE0MTg2YTZkOGIxNjUxNTgxMzZlODk2M2I0MTBjZGY0Y2Y3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTM1MmYzYjE4ZWM4NjJmMjBmM2Y0ZWQ5NzNlMmExZjFmMDUxNTdiODBmZmYwMTdmNzdlNGQxMzJlNWQyNTM4ZmVlZjY0MDJiNzJjZDc5Y2Q0MGRhMWEwY2NkYWMzNTFhYzBkMTZlMTZmM2VjODg4ODYwYmEyM2M2ZjM4YTFlODUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXRoSGVscGVycy9jb3B5U2V0TWF0aEhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxNmIzN2YwYTVmMjY2OGI3NWI4ODkxYjljMGE4ODIxNTliZTc1OWI0ZDMyNWJjZThlOWMzYzExNTFiOWY1Yjk4MzgxNjVhMjU0YmEwMDAxMjBmNjY4M2E1ZThmYjE2ZGQzMTFjM2IyNzhhNjYyNmI3MTE1ODEwMTVhOTc4MDA0OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2YTYxYzcxNTRjOWJkMjVhMmQzYjEyMTczN2ZlY2ZhZGRiNDM1M2EyYzRhMmEzZjNhZGYyMzU5YzU5ZmVkNWE3ZWM2ODlkYmQ1YjNkZTdlM2FiMWQxYWRjNWU1NDkyYTI4YjI5M2U3MTlkMzIyMzhmMjM0NWI0YTU5YmRlMzNhYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzOGU5M2MxOGNhZTRkZmRkOGE0NWJjYjYzMzViZmJhZjI5Nzk2YzZkMjNkYmRmMGQ2YWYzY2FmZGU1NTQwOWExYTA1NTc1ZTIyNTZhMGM2MjI1M2RiNGNmOTk2MDJiMTcyYzVmYzE4YTFlZDMyNTRkNWZmODhmMzI2MTJlNGI1ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXltZW50LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXltZW50LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODQ3YTE3OWRjZjJiM2Y3YWQ3MWY1NWE0ZWZjNmIxMTI2NzgwNzcyZjRiODE0OGUxZTBkYmUxNzMwNDdkMDhkOWQ3ZjQxOGU4ODJmMDNiM2M2M2FiNDViZjYzNWYxMTY1ZDIyNzMzZGI5NjdlODQ0ODY3NTMyMTY3Mjg0NjIwZjYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF5bWVudExlZGdlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGF5bWVudExlZGdlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFhYjVkNmMyMWQxNWIyODE5NWRmZmQ5Zjk2NjBjYTlmMTQ5ODFmNDgwNmNiMGUwYzhhN2Y5ODhlYjZkMThjYzBlMTM4YjIxYjYxZTE1YTZlYmRkZDdjYWMyODkxZjFlZWY4NjI1MzJkZTE4ZWYyZjYwNGJmYzJhMWE1Njg0N2E1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3B1cnNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wdXJzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjg0ZTQ2OGY2YjA0ODUwNTU0MjI3MDE1NDFmNTMwMmNmNDYxZDFmNjk3ZjY5MzA1YzY2Mzc0MGE4Y2I0NTg4Y2YwMmIxMGIzZTg2MTM4NjNhZTA0OWY4MGJmMGYxYjZiYmIwZmI0MDViNDEzOTYzZGM4OGIyOTg1ZTNiMjdkNDAwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RyYW5zaWVudE5vdGlmaWVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90cmFuc2llbnROb3RpZmllci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNjNTQ3MTVkYTQ4YjE1NThjMzdiYzQ4MThlYzBlMmM0ODhlNjFkYjc0OGJkNWExMWQxOWMxZDlkN2Q4MTA1M2NjNDRjZWU0ZTUxMDQ2NTY1MzdmZGNkY2QyMThkZmY2ZjhmYzFmYTZmY2EzMzIzNjFhZjhkZWFmY2I3NGEwY2NkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5ODhkOGUzZGMxN2VjODcwZTdkODQ2NGI2MGU5NDMwMGQ0N2IwNWJmMzQ4NGNmMGZkMjFlOWYzZjhkYjZmNGM0OGZiMjBhMWNlNTQxMGQyMTE1MWJjOWExYzIyMmIyYWFmZGYyYWIzYmI2YmRlM2E3NmZkNjY4NzExNDIxOGYyMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy1pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMtaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYmU2Zjg3MDYwNWM1ZTVlNDJmMzllZDI4MjIzNzhhYjllYWY0ZmE2YmRhNzQwNzBiYWM1OGZmZDEwZTE0YTA3MmNmODA5NmZlOGM2OTg2ODAwYTk5NWUyYzYwNGI4OGNhMjcyMWY5OTFiNTUwNzFhZTZmM2UzZDBlYTNiYWFmOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvaW50ZXJuYWwiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vc3RyZWFtIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3N0cmVhbS12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgImplc3NpZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJqZXNzaWUuanMtdjAuMy40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbWFpbi5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jYWxsYmFjay5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY2FsbGJhY2suanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhYTYzMThkNzFjODRlMjg2MTBlOWQzNWI0NzY1ODU0OGUyMGNmNGVjNDU5YTFkOGI3OWM0YzVjMGE1MDY2YTE4YWJkODczZTU3MGU4ZTM4M2VlMWY1MDViYTY0M2Y3N2U3ZGNjZThhYjgzNzNiMDkwNDgxMWU1ZGVmODdjZjQ0MSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb25maWcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbmZpZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImUzOGQwMmJkYzBjYTA1YmFiZTZkNzJiMzczYTMwN2M3YjRkMjg2NjQ2MzdkMzA3ZmE0M2E3ZmYwMzM4OGJlMTU0ZDdkMWE2ZjE2MjM5Y2VhNjJhMDMxMWNmZDYwZTVhODQ5YmQyNDIzZDM1YTI2ZmU5OTJkODNlZDVjYTY1YmQyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2RlYnVnLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kZWJ1Zy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzYzAwYzk1NmUyZjMwZmRlNTE5YjlmNzUxYmU1MzA4ZTRhMzg0MTI0NGUxNTY1YzZiOWIyMzg3YWU5ZWYwN2VhMWQzODQ2NzA4MzJiZDNlY2QyZGVjMTUxMjNiZTkxZDQ2Y2VhOWVhM2NhNDFjMGJlZjk2M2E5YjUyMDU1M2QwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Vycm9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXJyb3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNzMxM2I5YmE5MDA4YmMwMjYyY2ZkMjIwZmM5NDdkOTIzYzkwYzc0MWU3MDNiMGI3OTVlMDcxYjkxZjkwYTQxZDhhMzA4NzAzNTQ0ZjE5OTYwNjY4OWQwMDlkMzg1MjBkNzQ0MjcyZjg2ZWU3NDk1NzFkZTQ3ZDkyODJkM2E1YjQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWY1YTdjYWUwMzE4NjNjOTZhNjY3NmE4MzI0NWFhZmM5ZjUwOGFjMDc1MzNiZTI2NzcyNzIxZWNhM2E3NTkyYzlkYjIyZGQyYTE4YjIxZDMyYzVhNjE0Nzg1YjFlNTAwOTdlMDQ1ZTUyMDhhZTQ0N2M3MGYxZTAwNGYwZmI3ZWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvanMtdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2pzLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDk4NmY5OTE2ZjFjOWFjN2FhMmE0YzI4NTM3ZGIzNGM2NDU4MmExYThiZDU4ZTdkOTljZDIwMzM4NjA2NDY1YTM4YmYyMzc2MGZiYTFmNjI3MDRlYzQ5OGEyNWJjODg0ZmY1M2I5NDJkZDNmYjhiY2E4ZThmMjYzYzI5ODZlYWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGliLWNoYWluU3RvcmFnZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjc4N2MyMzJmMTJjNTliNzRjZGI1YjM3NzFmYTk5ODUzYzE4MDk4YTU5YzZjMTYwMWE2Mzc5MGEwM2Q2MThiZThiOWNjOTJmZDJjYTk2Y2JjOTcxY2Y3YTM4OWQ3MjBhYmVjZTQzNDkwOGU0Yzk1YmMzM2VjYmJkM2Y1ZWIyMDQyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4NTJlNzc4OGZhOTgxYjJhZDUwN2M5NGI1MjM5YzExZTg1OTc5YzI0ZGMxMzRiZmE2ZDhlNTExZjMwZmFjNzhjMjllMTAwZjRlYzc4ZWQxNjdjYzg3OTYxOTNiYWRlNzllMGY3YTdlNGE3YTljMzYzYWEyNmYzYmY5MThhMzY0MCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZXRob2QtdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ldGhvZC10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQyYTVmNzA3OTE3OWQ3ZDJhNzE2MThjOWY3MWE5NzMxYjdlMDE0MzVjMDIxNjFmMTE3Y2I1NzA2NDAwNWI2YTNlNTkzNTA5ZTE3NjVlNjQ4MzlmMTEyOGI5Yzc5OTA5YzEyNmE0MjJhMTMzODY0Zjg2ZTEyMWZmMDBlYjc0NzAzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Nlcy11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc2VzLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2I1NjU4OTA4YjYxZThiMWFhMmFhMzJhNDQzZTVlOWRiNzA0OGJjNTdlY2I0NWJiOWFmZTVmNDYzZGFhN2YxMDAxZDQ0MDQ3NjBjZjkwMzJiYmI2OTI3YWVmMDg3NGMyNjEwNzdiZTZhNzZmODI4NzUyMjVlNGZjNTcwN2VhNDgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3NTJhMDk0YThlZmExY2QwNDFlZjczNThjZmIwNTZiOTA5YWE3YWYxMjEzNzNjZWJlYjIzMWJmYjBkNzQwZGZmZGJkZjU1ZjAwMGZiNzRiM2VhZDA0YzUxYTNjYzVlYWMyMzA0OWVlN2M5NTk1OGMyNmE3YjZlM2YzMTI0OWZmYyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90ZXN0aW5nLXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90ZXN0aW5nLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZWU4YjU3OWNkN2FiNjE5ZTk2ZWRjMTI0ZGIxMTk3YmE4MjQ3MWUxYzhjYzRlMDk1ZTg3MDUxODRhMTU2ZWUxM2M4NDdlOGUxMjU0ZDhhYzNkNzQyMzExMjE1NTA2YjZmYjYxYzc4NDBiM2UxNGNmN2RiNzJlNjc2NzJiYzgwMTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUNoZWNrLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlQ2hlY2suanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiZjIzNDE5NDlmMDFjNTNmZDljNDRlMWViZGJiYzdkNjU1NWY0YWMwMWZhMTAyZDkxYjZhZjc2NTA2NDIyYTAxOTAyZDM5YzZlN2E2ZGVkMDZmMWU0NjMzZmFjMmVkNDhlMDBmNjc0NzJlODM3Y2NhYjNmYTI2MTIzMjk1YmIzYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMmMwYmNlYWE5NTJkMTNmMjVjMmU3OTU2YjdmMWJhNjk3ZWU1YTExZGMyZDQyNDAzNDIwODA5MjgyZGI2YTI4Y2FmMWJkNjI1NDI4ZmQxOTVjNWIxODhhODJmYTRjMThjZjkxOTcxNDMyNjQ1YThlNTM3OTY2NWY5NjZhNzljN2QiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMtaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLWluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWJlNmY4NzA2MDVjNWU1ZTQyZjM5ZWQyODIyMzc4YWI5ZWFmNGZhNmJkYTc0MDcwYmFjNThmZmQxMGUxNGEwNzJjZjgwOTZmZThjNjk4NjgwMGE5OTVlMmM2MDRiODhjYTI3MjFmOTkxYjU1MDcxYWU2ZjNlM2QwZWEzYmFhZjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdXBncmFkZS1hcGkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3VwZ3JhZGUtYXBpLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjczZmRmNzA3ZWI3YjhkNWE0ZmFlZGJhMzMxM2VmMjAwYWVmMGRlM2Q4YWZmY2EwMzMyOTJiOGM2NjE3NjVhNWQ0NGZjNTk1ZWUyYjgyNWJjMDkzYzkwZjc5MGViNmU0ZTg2YTM2MGE0NDVjMGE5NmQ5ZTA2MWQ1NTMxNjlkNGYiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL25vdGlmaWVyIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsL3NyYy90ZXN0aW5nLXV0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvdGVzdGluZy11dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsL3NyYy91cGdyYWRlLWFwaS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL3VwZ3JhZGUtYXBpLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjEwIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFmNTBjNzFiNzhkZTlkYjY0ZDgyYWRjZTRhYjUwMDA2NGRlOTY3MTkxOWVjMzI4MjhjMmVmMGY0YzVhZTM3MmE2YTk0YmNiZWJiMGM0Mjk0NDNhMDdmZjA0MDUwYWYxNjkwNmQ0YTg1NjQ2MTIzMTBhMTEwMzJhMTIxMWYwOGRmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImMyNWIxZDc5NmIwNzcwYTFhM2I3MjQ2N2Q0OTU1MTE0MGRmNDFmNDVlYzI0MWM1NjkxZDkwNWIzZTMxNDFhODc5ZmU0YjAwNDhiNjlhNzVmZTk1MDBjMTA3MDVmMDA2ZWFhMzE3ZDRhZmJhYWFlZmUwYmEyOTE2OGUwMzllMDYwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL25vdGlmaWVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9ub3RpZmllci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBhZjg3MGVmZjUxODUxZTY1NjVjNjYxNmQ3ZThlYTQxNjc4ZDZmMTA4NDdiNDM0OTJlMTYwNjllYmNkNDU4YWZhY2RiNmI5YTBhOGI3ZGJkZTMwYTRiYWRlNDMyMDc3ZTQ1YWIzNjI4ZTI4Njk3ZTlkYWFiOTI5NzEyYzEwYzkzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3B1Ymxpc2gta2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wdWJsaXNoLWtpdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU1OGFmNDdjODIyNTQyMjgyOWM2NDVjMjUxY2RhMmNlNmMzNzE5MjRiMTczM2MyMTY2ZGEyZmFkNjYwNjU2OGU0ZGRjZThlMTg5NDM3MThiMDVmMTA1ODE0Mzc0ZTlkMmQ5ZDk3NzA4OGMwNGJkYzE0ZWU2Y2ZmNjViZTA3YjQyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3JlZC1ub3RpZmllci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVkLW5vdGlmaWVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjA0YzMyNDRhOGFiNGNhODIyYWY5YzQyODU1ZmY1OWJlYmRiZjU0NTFhZWUyY2VmZWM0MTI4NTQ2MDMxOGJkNTU1NGYzM2MxOWJmNmRiNWIzMmU2ZmNlMTNiYzg1ZDRiOGU0ZjMzYTRkMDQyMTdkNDUxODAyMThjNWUxMjNjZTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzdWIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlc3ViLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODgxZGMxYmQ2OTc3NmM4NjBmM2MwN2QzMDg1MTNjZjE3ZmI1NjNkOTZiOWYzN2Q4NTM0ZjhkOTA3OWYyMGYwOWVjODI1OWRkMzM0MjBhNmY2MDQzODM5Zjg4MWY4MWUwYzRjYjM5ODRjMmViYzgxNzRmMDgyMTMyMWZhZGI2ZTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3Vic2NyaWJlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdWJzY3JpYmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5NTk3ZGIwMTBjMDJlMzZjODZiMzliZDg3NzgzZGRiOWJmYmIwY2M2MTI2NmFiOThmNmE3YzQ2MjhiM2VhYTM2NzY4OWJhN2M4ODk4MGIzNzk0MDM3Y2EyODdlNmFmOGM0MDdhZDFlMDIzMjAwNTM1MzBiNjExNDczMWYyM2NhMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdWJzY3JpYmVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdWJzY3JpYmVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmE0NmNjZjU3MWQxNjZhM2JkYjQ4YzExYzJkZGMwYmY3ZjliYzI3NGJjNzZhZjgwMWZjMzE1ZmM2MTU1YmM2NzY2ZTU5ZTQ2YWE3YmRhNDMzOTc1ZDdkMGI4YWFiMDY0YjM0NTM4ODZkZmEwZGZiODMxYjc0YTliM2EzYjFkYTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdG9waWMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RvcGljLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDYwNjhkNmFlYTJjYjMxZDY4MzJhZTZjZjlmZjVlZTE4ODFkMzJjMDU5NzVjNTM4ZTFmMDEyYTVjZjI0Njk3OTRmNWRlZGE4N2RhYWU5MDUwMGMyNmQ3NzE4NzdjNTVmNGZkMjFmOWVlZWE4YzJmYzhkMmY5ZTUwY2IwM2M4MmMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMtaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLWluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWJlNmY4NzA2MDVjNWU1ZTQyZjM5ZWQyODIyMzc4YWI5ZWFmNGZhNmJkYTc0MDcwYmFjNThmZmQxMGUxNGEwNzJjZjgwOTZmZThjNjk4NjgwMGE5OTVlMmM2MDRiODhjYTI3MjFmOTkxYjU1MDcxYWU2ZjNlM2QwZWEzYmFhZjgiCiAgICAgICAgfSwKICAgICAgICAiLi90b29scy90ZXN0U3VwcG9ydHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAidG9vbHMvdGVzdFN1cHBvcnRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNWRmMzdmNGMyNWU3MDAxNTNkODVjNmMzNjgxZjJkM2U2NWQ0YjFhNDg5ODczN2UyZmJmMzI2ZjQ0NDYzMTQxODE5MmZhMTgyMzM0MzRlMDg1YjRhNWE1MjMxODcxZDZmNTQ4YjI1NDRhYTMwNTI1NTVhNjgyOGU5M2QzZGIxMjgiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMyI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9zbWFydC13YWxsZXQiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9zbWFydC13YWxsZXQtdjAuNS4zIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXRzL3NyYy9saWItYm9hcmQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXRzLXYwLjE1LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9saWItYm9hcmQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwtY29udGV4dHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwtY29udGV4dHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOTYyMjdmMGJlODgxYmM2NGIwMTQ3OTkyZWI4ZThjMDczNDE3NDFiOWJlOGFjNDBlYjZlZWFkNzE1ZmRiNmQ5N2U1ZDVmM2E3MDI0NzhjNWY3NWFhZDg1ZTkwMGVkOTMxMTYyMTdlNDdkNzNjZGNkM2M0ZjZjNDk4YWZhZTdmZSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9zdG9yZS12MC45LjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvc3RvcmUiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjIxNDAwYWU4ZmZjMTlmN2FmNzk1MzU4MWRhM2Y2ZWE5NzAzYTUzOTVkM2RlNDlkYjg0ZTFlYzhhMTc2MDdhNDE0NjU4YWJiMzM5OGJjZDcwMWZiNjIwZTExZTYxM2JiNjdmYzhkMTU5MjA2ZTM1YTA3MWYwMjU0MTg3ZWQzZDg5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xlZ2FjeS9sZWdhY3lNYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xlZ2FjeS9sZWdhY3lNYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkODdkZjAyNGYyNzQ3MDY4MDgyZTQ0NTQ2ZmYwMWU3Y2Q0ZTYyNzUxMDkzOTQ4ZDJkMmQ5ODQ1Y2JmMTA5MTUyMDQ3M2YzNGIwNjJiY2M3OWQ1ZDQyZDRlYTcyNGE3ODliOGY1NmZjMmQwMmYwYzQ4MWQwM2QwOThhNWQwOTgyZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjMmE3YTU2OGQ0MWQ4NzIzZjk2YjA1YWI1ZDNkNTZiYTA4YjQ1MDM3MDY2YmZjZjk1ODg3YzkyZGU4OTU0ZDYyNDRiYWZlOTgzMDRmMGU2ODJkNTc1MmEzNjEyOGExOTllODM4N2Q5NWE5NmEwZDA0MmVhOGMwYTZhNDYxZDFiYiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjc3NTNjNTQ4MjhhZmNkZWM4MjM4NGFmMzdlNGNhMzFkYTZiODk2ZWUyYTdkYWRiMDM3Y2U0MWQzODg5Zjk3YTFiMDE5NGI1ZmY2YmIyNmMyNjgyNThjZjc2NjJiMWJmNDJkYTI5NjkyOGY4YzYzNzg4MjI1MDJlZjMyNzZjNDNiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTEzZDMwYjg4ZmZiN2E4MTg5NWNlNzM0NWEyZWRmNWExYmUwMjlhMzgyYmRlNjZiZDFjMmMxYTE4NDE4MzYyODA5ZTAzMWY0ZjU4ODU3YmI5ZjQ5ODFmZjEwNjAwZmE4OWJkMDdiNTlkMjRhYmU1ZWQ2MTgxMDJhYWM2ZmNjYzYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY0OWRiMDMwMGZlZTM3NmRiOTQwNzUwMzUzZGM1MjczYTNlYmVlNDhjMDA0NDEyM2IwYzExYmNiMDFlOGMzNDYzOTM0NGQyNjZmYjM4ZWFkMWQ0MTlmMjJiY2FkMThlZDdhYjdjM2Y5OTA5YWEzZDQxZGZhZGY1NjNlNDJhZmNkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5Njg5MDcyNzA2MGMyZGFiMWQ2Nzc3NDY2ODRhNzhlNzdmMzVjYzUxYTkzNzQ5ZTk2NDFkZTU5NjVjZjU1ZThhNGYyZDdhYjM2ZmViMWQ3YWI3MjFkNWJkYTM4YTMwYTAzZWQxNWY2Yjc1Zjg2NDMzZDY4NTViMjY0MWE2ZjNjMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zdG9yZS11dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjVmODU0M2ZiZGZlOGMwMTMxMGEyYmM1ZjgyYzQzN2QxNmMxZTdjODY2ZmJjNGFhZTk3NWM2OGM2ZTE1MzcxZTBkM2FlNDE2ZGFlMTZmYWYzYWM5YWIyMzg1OGMwZmY0YmVmYWM4MDRhMTVlYzJjYTUwM2U4ZGFhZTc0NzljMDlmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFiZTZmODcwNjA1YzVlNWU0MmYzOWVkMjgyMjM3OGFiOWVhZjRmYTZiZGE3NDA3MGJhYzU4ZmZkMTBlMTRhMDcyY2Y4MDk2ZmU4YzY5ODY4MDBhOTk1ZTJjNjA0Yjg4Y2EyNzIxZjk5MWI1NTA3MWFlNmYzZTNkMGVhM2JhYWY4IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy92YXQtZGF0YSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4by11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhvLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzNhNmMwYjM3MDk3OTBjYzU3ZDFkODM1MTFhNzg4NDRkZTIxYmUyZjk1Zjg3NzYyODk1ZGNjNDU4Y2Q5YWUxZjdhNjAzMzU2MzFhZDUyYjNlNTJhMWRjOGUwMTVmOGRmZTcyNGE3ZWU5NjlhNmMwMjMzNjgxOTJkOGFmMjYyZTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTU5NTU0YWMyOTU1NjdhY2IzYjY3MjY3ZWYxYjhlNWE4NTRlOWRhYmE2ODNmOWVmNjE0MmYwZjlmMmRmN2Y2ODczODg0ZjE0OTljZjg5OWRkMzNiOGQ0YzMzNzU3MGVkZWExYjEzZTE0YWM1MzMxN2JlZjQ1MDUyYTBiYzhlMTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdmF0LWRhdGEtYmluZGluZ3MuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWU4ODMxOGY1ZDQ3NWZmM2E3NjM4OWNhZGU2ZDU0MDdjMjVlMWNjNzBkMGIxMjY4ZDQxMzk5NmJiMWM2M2FkZmU0YTM1Y2U0MmZjZjI5MDlkMDZiNjZiMmM3OTYyNDkzZGQ3Nzc2YTM4YTlhOTUyMWY4Zjg1YWE1NzNjNzFjODgiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvdmF0cy12MC4xNS4xIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3ZhdHMiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy92YXRzLXYwLjE1LjEiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy92YXRzLXYwLjE1LjEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvZS9zcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9lLXYwLjI2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NyYy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY3JjLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTk0YzZjNGRjOTE1Mzg4OTZlMzg5NGI3MDkyYmNkODI5MWMzMWU5NTI2MjNjNjNlZTdhYzZmNTUyN2FhMWRiYmUwZDI1NDQyMjNjMjk0OTgxZDRhZjc1NzliNjAxNDEyNjM5ZGMzNTdlMDkzOWRmNzFmOWMwYWI0ZmZmNTJlOGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGliLWJvYXJkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9saWItYm9hcmQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3ZjAzYzVkYTZmYTI5ZmMxMzY5MWNhOTBiZTc1OTZiZjllOWQ3ZGU3ZTMwNGQ3MDRmMmZkODZhMmZmMTIzZDA3MWY2YzIxMGNhMjk0NTk0NTc5NmExZTY3ZDc0MDhjNjk4NDc5MDUyMzhkY2YzMzY1YmQ1YjE4NTcxNjJmYTFjNyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3dhbGxldC1iYWNrZW5kIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9jYWNoZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2NhY2hlLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL21haW4uanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9lcnRwIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZXJ0cC12MC4xNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2pzLXV0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvanMtdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbC9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3NtYXJ0LXdhbGxldC9zcmMvbWFyc2hhbC1jb250ZXh0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3NtYXJ0LXdhbGxldC12MC41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYWN0aW9ucy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYWN0aW9ucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ0YmZiMTMyMjJlMzE0NWY5NWIzNDM2ZGRjMmVkZTE4NTI0YWEyYThhNTI5YTU4YmU5Mjk5OGU5NmNhYzU2ZjhhNTk2ZTI2YzEzZTNhNzY5ZGRhYWZmNWE0ZmQ5ODJmYjYzNGNmNGYwNTRjMjM2YjVhMjkxNmNjYjZmZDU4MWJkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2JpZ2ludFN0cmluZ2lmeS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYmlnaW50U3RyaW5naWZ5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzQ2ZWU2N2MxODFjNDBlYWI0YzBhNTFhMTRkYzMzZDM1YWI1MzE3YTBjMjhlM2FlNWM4MDU5ZTM2MDJhMzgzMmQ2M2JjODdkYjliNzVlOGJjOTdhZDUxODAxYTRkZGJiZjA1YmI1Y2I0ZWY4ZWQ0MmQzMWNiZTQzOGM5NzBiZWUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGF0ZS1ub3cuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2RhdGUtbm93LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDViYmM5ODY0N2YxNjY3ODUyYjBiNGU3MDcwMTRiNTcyMDIyYjhjMTRlYjc3Y2EyZDE4MmM2MjEwZTlhOGRlMDZkNmFiYWU2YWFiMmFjM2FjMjA5ZmU2YzE2NTY1ZTExMjY3MGRlYWM5NWUwOThjMTZhNDMxYTFjNDlmMDQwODkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZmluZE9yTWFrZUludml0YXRpb24uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ZpbmRPck1ha2VJbnZpdGF0aW9uLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjJkMDAwMjVhZjI5ZGYzODM1Zjc5OGEzMTk2YWYwYTkyYzAzZThiMDQ1MzNhYTg0ODcyNzlmNGRjNGUwMTgyMjgyZjY2NzIwMzVjNmU2MzAxNWFiMWJmZjUzNzRmMWRiNjQxNTcwNzAxYmI2MTkxODQ0OWJkZDIzMWNlZmUzZWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW50ZXJuYWwtdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ludGVybmFsLXR5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTE0NmUwODNhOTkwMjZjYThlZWQyNjJiYmRhMGZkNTI2YTdkYzRlMGFmZDAxZWQwODgzZjc1YTFhZTg4YTk4NDY5ZDlkOGYzNGY5MzAxODhjOTNmMmQ4YWQ1ZGNlMmQ1NjE5YzUzYjM0N2FlNDIxZDk2MTY0MDkwNjY5NmIyNDIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXNzdWVyVGFibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzc3VlclRhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjA4NTJmZjc2MDhlOGZjYmUwMDgwN2E4ZWQxODFhZGNlNzk0MjVlM2QyZTkwMDRlMDIwODAxY2IwOTIzNGY4ZGQxMjdiMzE2ZWYzOTVjOTBlN2JlNTI1N2M3YjgyMjYxZmJlMjc2M2QzMmU5ZmM2MzcyNjVjY2UzNjQ1YjFhYWEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGliLWRlaHlkcmF0ZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGliLWRlaHlkcmF0ZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhiZmVjYTVlMzllNWNlMGMwNjVlMDUyOTE3Mzk2MDFkN2NkZjg2NzFmODEyYjU5NDllYzU3MDg2OTM1MjQ3ZjUzZDlhZTJjZGNlYzdiZWM4YTY5NDQ3ODYxMWFlYzM5ZDFiNzJjOGM4ZTlmZmQwMWUxMDNlMjljNWE2ZjhmOTM2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xpYi13YWxsZXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xpYi13YWxsZXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0NjcwNmQ5ZjJkNDdkY2UzMTQ4ODRhYjkzNjAyYmFmNTc4YjJmMzViNzI0NmZmYWQzMDA3ODVlMWM1OGJmM2YyYzEzZjcwZTg3MjQwOTg2NjNmMzBiZmYyYTlhZWQ1YWIzZTY1MGFjODljNjdhZmM0MzA1MGI3OTZhZTZmZDVmMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdWJzdWIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3B1YnN1Yi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ4NTBhZmU3NjM4YTQwNjUzYjZiMWFlNzVmYjZkMjhjNzE2YzUwNjgzNDllZjMyNTc4ODk5NGRiODRhOTZhMDlhZDAxNTQ3ZGM2ZmIyNjRjYzFhM2Q5OTFkZTM3NWY3NTNmZjM0NDc3OTg3OTQ4NDZiZWM3YTI0YTg1NjA3MTVkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3dhbGxldC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvd2FsbGV0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGU3YTE2ZTJlNzNiODUzY2JmYTc5YzEyMzkwODA3ZjQ5MmFjMDllMjY1NDNlNTUwNzE5ODkzMGRjZmIzOWMwMjJkYWIwZWVlYjk4Njc1YzQ2MDlhMjBjZjAzODlkYjFmYmY0YjBiOGYzOGRjNTZiNDJkM2MzZTg1MTQzM2JiODAiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvem9lLXYwLjI2LjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvem9lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvem9lLXYwLjI2LjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy96b2UtdjAuMjYuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy90ZXN0U3VwcG9ydHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3OTA5YzNiYWRkZTdjMjlhYWJhNWFhMWQzODY2YzgwNWQ4OWNlMDliYmEyM2RmOWI2ZjFhZmViMmExZWE4MjMzYzkyMmU1YzQxMjNkNmZiYjA4NTczZmRkNTJmOGQzODY1NDM1NWYzNzEzYjIxMGE2ODc0MmUwYWY3ZGE0YjIwZSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy96b25lLXYwLjIuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy96b25lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJkdXJhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmNiYzg5OTQzMjkwY2M3OTQ1ZjcyZjRmNzdhMjEyNDE3YjViZDIyNTEyOWRlMmQyMDgzMDk1NWVjMzMyYjg0NGEwOGE4ZDAxODIwZTI4YzEwNTdmYjQyZjljYjE5NDA3ZjE4MDQ0YWUzM2IxN2IzM2I1OGZhNmU2NGNkMGJjZDciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZHVyYWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImIyNjkwOTVhMGFiYjk3MGNjNzhmOWI4MGE0YTU0ODFmMGU3ODhiYzdlMjViMzJmNmYwMWU2YTViZTQ1MzEyMzk1ODA4ZjIwZDJiMDQyNWU3NGIyMTljMTJkZWQzNzdlYTU1MDhkODAwYWU0YjIyZDRmNWZjYjFhMTBiOTcyNGRlIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9jb21tb24tdjEuMi45IjogewogICAgICAibmFtZSI6ICJAZW5kby9jb21tb24iLAogICAgICAibGFiZWwiOiAiQGVuZG8vY29tbW9uLXYxLjIuOSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9jb21tb24tdjEuMi45IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiYXBwbHktbGFiZWxpbmctZXJyb3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwNWFmNTQyYmU5OTYwMDRmMTA5YmQyM2Q2ZWQ5NTg5MmZkOGVhMGY0NWRmZmI5MWMwZTdjZDUwM2JkMTJhZDRkN2Y0Y2ZiYWEyOTJiMmIzYmUxMmZkNzgzMDhmZTlhZmU1N2NiNGI2ODBjZGQzMGRjMWI3MGMyNmFmOGM1Y2ZlNSIKICAgICAgICB9LAogICAgICAgICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiZnJvbS11bmlxdWUtZW50cmllcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA5ODJmNzgwZmYzYzM4ZGRjOGU0OGQ0MDE3ZGVlMTQ4ZDVhOGE0ZTY2MjA3ZjdiYzVlMTcxMGU5N2FiYjM0Y2FhNzUxZjQ4OWNjMzgwMDU5MmVhNGYwMDk5YTQ0YmQ1NzAwOTg3NzQyMzFiZDk4NzI5MTIxMDQyN2EwMTU3NGMxIgogICAgICAgIH0sCiAgICAgICAgIi4vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpZGVudC1jaGVja2VyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjM5YmMwODIzMTNmNzBkNzI5YTc0NDZlYmI2NzhlMzllNDQ5ZjdlNzY4YmJjOTg0YjAyOGY0YmIzYmY4NDc3ZWU2NzZiODBlYzFjZTY2Yzk1MzFjZDkwOWM5NDRlNDAxMDk3MDgzMjk1N2UyMjE0MjM1NGUyNzk4ZTI2MzZhOGEiCiAgICAgICAgfSwKICAgICAgICAiLi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAibGlzdC1kaWZmZXJlbmNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjY0ODQ5OTRiNjU2ZjEzNmFkNzUyYjBhNTE1Y2M0NWU0NWRjOTEwMGRhNjdjNzRhN2Q2MjU3Y2EyMmE3ZmI1ZWVhNzQ0YjA5MTg1YWY2MTgxMTY3Nzk3OGY5ZWQ1NGU0YTYyMTM2NWM1MTAxNzAxMWI0M2YxMTkwODFjMjk1MTIiCiAgICAgICAgfSwKICAgICAgICAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm1ha2UtYXJyYXktaXRlcmF0b3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZDBmOGZmODhkMmM5ZTc5ZWY4YzI2Mjg0NGU2YmJhNzUyNzY4NTUyODdiOTU1ZTEwMzc3NjYyZTMwNmZhOTQxNDgyMmEwYWFhMjA3ZDBjOGI2NmYyMjJhNzgyYzM5MDc0YWUyOGMyNDM4OTAxYjUwZGIwZmFhZGI4Yzg4NjJiOSIKICAgICAgICB9LAogICAgICAgICIuL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAibWFrZS1pdGVyYXRvci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjRmZjIzNjYzYmM5NzI0ODA5ZmM1ZjVkMzc5MDM5NGU0ZTVjMDA2Mjg0N2JiM2Q0MDY4ZjNiZGU2MWQ0ZTlmNmFiMWI3YTkzYmU0OTA1MWUwMzY1YzlkNzRkYmFiZTg0ZjliNjQ0YjMwZmRiZDE0ZjU5OTA3MTNmNjlmNTBlMjdmIgogICAgICAgIH0sCiAgICAgICAgIi4vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJvYmplY3QtbWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmM5MzM1ODIzYzczNWIyNTZkNzUxNWNhYTUwODlhYjgxNzk4NTRlNmMxYTc1ZWIyNGEyM2U1NDM0MzFiYzQ3ZDFiNzUwYzE3MmY3ZjZkNWQwNzhlMmMxNjMzNjQ4MDdkNmZlZjhhYTgzNzE1ODM5ZjFlYjM3NmUyNjBiNTRiZWQiCiAgICAgICAgfSwKICAgICAgICAiLi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAib2JqZWN0LW1ldGEtbWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZWU0MTVhM2JiZjM5NTc2ZTJmNTQxNzk5YTY1NmI2MTIyZTFiMjk3MDFmZDFhOTY5OTBlZDU0MTRlNzMwNTA3NmU2YzNmNGQyMjE3NTViMGFlMDdjNWU4NTc5MzRkOTgzMWZiN2M2MDcxMDY3NTM2NTBmNTU3ZjU5MzBjNGE3MDgiCiAgICAgICAgfSwKICAgICAgICAiLi90aHJvdy1sYWJlbGVkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInRocm93LWxhYmVsZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYTg1ZDFiMGZiM2FiZDIyNzk1ZGEwNmZlMzE3Yjc2NzZjNzY0N2QzZjI0Mzc0OTc3NmM2MzUwNDg0YjcxMjc2NjJkNTM0M2JkMjRkNTliZTg0M2FiZDlmMzg1NWYwYzY4MTVjNGNjNDNjOWE5MDQ1OWZiNjQxNjU1YTVjOGJkMiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IjogewogICAgICAibmFtZSI6ICJAZW5kby9lbnYtb3B0aW9ucyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMGM4NGZjZTVkMmIzMWNiNzVmZjY5MWE0NDY0N2RlYWM1OWFiY2M4MmJkZjc0ZmUwNGU4ZDNkMjljNzFlODljZGFhZjM0MGIyYzQyMGI2OWU5ZmJjYzMwMDk2YjI3ZDc5YzA1YWRkZjEyMGMzMDgyOGQxMjdlNWM5YTc4YjUzMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbnYtb3B0aW9ucy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW52LW9wdGlvbnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkZjE2ZDgxZTQ5YzliY2RmMGRjYTg5ZjA5MTRmYzk4NGE4N2M3NjkwYjM2MjI5ZjQzNGNhM2YwMDk0M2FhNDdiMTg4YjczYzkwNWRlZTVjNTVhZDEwMmNhMWU0NDViMTYxZTllZGI4MTAxNzE0MjY2OTBkYjg5MmEwZDFmYjI0MyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZXJyb3JzLXYxLjIuOSI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXJyb3JzIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZXJyb3JzLXYxLjIuOSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNzY3ZjRlNDIyNjFjNTZhNmQ4MmFmZGQ3ZWFmMzk3MjA4ZjdiNmRmNTA0MjUwM2VhMjc3YmJiNGY1NzZmMDA4MDEwNGNhZGZjMDAxODUxOTFjYjRkNWM2MWEzOWM1YzE5ZTczMTUyMThiNTYyZDdlYThhNTc1NThjN2MwYzdmMTEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIjogewogICAgICAibmFtZSI6ICJAZW5kby9ldmVudHVhbC1zZW5kIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvRS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvRS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjI4NzBhMjhiNDFkYzA0NzkzMzQ3MTdkYzU4NGU2NTAyMDY0NTAyYjNmYjUwYTA5OWViY2VmYjQ0NDNjZTkyY2ZjN2NlN2RmM2ZjYzMxM2NlMzI1OWVmNWE5Y2I3NDBjZTlkMjI2ZTE1NzdmZTIxMWFkYjE5NGVmZDhkOWRjNWY3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4cG9ydHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4cG9ydHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYmU2Zjg3MDYwNWM1ZTVlNDJmMzllZDI4MjIzNzhhYjllYWY0ZmE2YmRhNzQwNzBiYWM1OGZmZDEwZTE0YTA3MmNmODA5NmZlOGM2OTg2ODAwYTk5NWUyYzYwNGI4OGNhMjcyMWY5OTFiNTUwNzFhZTZmM2UzZDBlYTNiYWFmOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9sb2NhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbG9jYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5MDdlZGNlYTc0OTRjNjYyY2Q5YjJjNjU1MzkxYzY0YWUzNjkxZGEyMTFkYjIzMjQwOGI1ZTQ4ZTZjNmMxNTJhZmY0ZDJhMGE0NWQ1OGU4Y2E1NDViOTZkNmY4YTM2YWRlODc3MDFiYTcxODYwZjRhZjczMTAyOGM2NjY2MTQyMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMTk2MjdmMzNjODUwYWZiOGZjMjZlZjhlNTdlMDhlMWQyNDk4ZmZiN2VkYWE2MTMzNjY4NDRiMDA0Mjk5Mzg4NDYwODlkMDJmZDBmM2Y2NjcxNzg3ZWYxMDhlNWQ1MWY5ZTQ2OTY3YTExZmE5MzFmYjNjZWIzOWIxMGM3YjE3NDkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbm8tc2hpbS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbm8tc2hpbS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJkMzcwNjNmNDdkNzdiM2RkNTAyYjU4MGU2ZWViYjVhNzkyNmQyZTliN2U1MzFiZmZlMmYyODg0OGQxM2ZhYWMyMDE5YjhkYjA3YTE2ZTZhMTNlNzg1MzRiYzA4YzUxOWQzNmZkMWRkMmFhMzExZWU2NTYyN2QwZjQ2NjAwYTZkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RyYWNrLXR1cm5zLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90cmFjay10dXJucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA2ZWQyY2UxZTY5ZmY5MmEzYTQ1ZTBlOTgyY2QwYTYwZmJkZWQ1ZmYyNjc1NTlmZmQ1NTkzOWJlYzljYWMyOGU1MGNhN2MyYTQ0ODgwY2FiZTdjY2E2YzhiMDg4Yzk2YTVlYjE1YWQxYmQ2YjBlOTQzYWIyZTBiZDI3OTQ3Y2E0IgogICAgICAgIH0sCiAgICAgICAgIi4vdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAidXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjYzJhMTgxZjczMzY3ZDMwYjI1ZDBhZjUyMGE1OWUxOWU4ODM3MzZiMzY4N2Y5ZDc1NjU4M2YwNWJhOTkyYzFlNjgwNDU1NGExYmMyMzRlMzVjZjViZDAwYTk4OTQ4NDJmZjdhMjI4NTJkNTQxYmNlYjA0YTM2ZGQ3ODllZTc2NCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZXhvLXYxLjUuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXhvIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2V4by12MS41LjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZXhvLXYxLjUuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjEzNzcxMmIzZWU0MjhmZThjMmNjMDIwZTE4NGI3YTc2Yzk2MWU1NjBmMjM1Njg2NDc5NDIxYTIzOGU3MDJjZGUyYWY1NDg2MWMxZjg1NTA5YjQwY2NmZjAzN2M0YzQ0NzVmNmNhYjU3M2ZiYjdiZGY3Mjc1MTlmMDQ1NjY1NzA1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4by1tYWtlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by1tYWtlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMjFmOTIyNWZiYjMxYzEzYzQ2MGNjZDM5NTlhNjZhMWY0YWJlMDQzMDZhZGQxMWI4MGZkZTE0NmFjY2Y4ODNjYWI4OWQ0NzM2NjEzNTc2NTYzMWE5NTRkOWU5N2Q1N2EwY2I2MGZiNmQxZjdiOTM5Njg5MmZiY2I1Y2VjMzk1NCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leG8tdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgyYTRmZjEyM2M2NDFlY2VhNmQ4N2Q4Mzk2ZTc1OThjZjdjZjRjMzUwMzVmOTZkYzFhMzdjZTdkMDk2MTcxOTk4MWRjNzNkMGI1ODlkMGU4ZjJkNWFlZjYxOWRlZGM1Yjk3ZTljYTBhNTFjMmJiY2I2ZDliZWIwZDdjZTcwNWZlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2dldC1pbnRlcmZhY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2dldC1pbnRlcmZhY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4NjUwZWE1YTFhNzdkZWViMDcwYjM3YzIwN2UwOWU3MWNiNGUwNTI5YmM4N2FhMTFlYjdiMWU1ZTM2MDViNzc1OWU3YTY0YTAyMGI4YWYxOTNhYjQ2Y2VmN2VjMmNkZTkxYmI0ZDdjZjg2ZGEwZmU5YzNhNTkwNDhjODliOTRlOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYmU2Zjg3MDYwNWM1ZTVlNDJmMzllZDI4MjIzNzhhYjllYWY0ZmE2YmRhNzQwNzBiYWM1OGZmZDEwZTE0YTA3MmNmODA5NmZlOGM2OTg2ODAwYTk5NWUyYzYwNGI4OGNhMjcyMWY5OTFiNTUwNzFhZTZmM2UzZDBlYTNiYWFmOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZmFyLXYxLjEuMTAiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2ZhciIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9mYXItdjEuMS4xMCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9mYXItdjEuMS4xMCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leHBvcnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9leHBvcnRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWJlNmY4NzA2MDVjNWU1ZTQyZjM5ZWQyODIyMzc4YWI5ZWFmNGZhNmJkYTc0MDcwYmFjNThmZmQxMGUxNGEwNzJjZjgwOTZmZThjNjk4NjgwMGE5OTVlMmM2MDRiODhjYTI3MjFmOTkxYjU1MDcxYWU2ZjNlM2QwZWEzYmFhZjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMTM4NzMwNWJmMDkyYzg2NjdkMTdhMWFlMGVhMjg3ZWY2Y2IwOGNlMjA2ZWI3MmY4ZWU1YTU2OWI4ZTZjMmUwNzIyMGUxNTNmN2EzNmY0NGVkMTQ3YzQ3MGEyNTc3NWU2MmRhNGViZTRkOTkxYTg5OTZmOWY5NDA4ZjZjNzgxNjIiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL21hcnNoYWwtdjEuNi4zIjogewogICAgICAibmFtZSI6ICJAZW5kby9tYXJzaGFsIiwKICAgICAgImxhYmVsIjogIkBlbmRvL21hcnNoYWwtdjEuNi4zIiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL21hcnNoYWwtdjEuNi4zIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwMjQ5MzM3YjhkMjE0ZTc5NzUyNjZmNmJkODIyZDU0MDg2NmJlZjQ4Yjg4MjMwZjIwYTM0YTkxMGExMjAxODdiMDMyMTQzMTVlNWMwMWE5NTRmMzgzYmZmNDdmM2RkYzQ4NWMzZDI2ZGU0ZGI0MmM3ZGM0NTYzYmM3ZjAwYmIyMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGVQYXNzYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW5jb2RlUGFzc2FibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2MTc2NzE2ZDdiMjFjMDc0MjNjYzk2OGE2OTA5ZGM3YzA4OWM1MTg1NzAwNzdmMTMzZjkzNzI5NjIyMGUxMzRjNjQzZmJmODZlNDcyNzhiYmUyMTU0MTg3N2Q0M2E4M2JmZWY3ODY2OTFmMGEyMjhhYzE5NDBlYjJhYjBiYmQ4OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZVRvQ2FwRGF0YS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImUxZjhkZWRiMjcwZmMyZDdmZGU0MjY1Njk4NDc5MjA5ZWJhMGY0NjdhYWU4NWQ4MmNhNWUxMGU2NDNkZDRkZjNmZTE5MjQ0Mjc5M2I0ODgyNWVkNzBmZTdlNWVhMjZmMzJiNzc3ZGZmYjg3MjY2YzkyZWI3ODM3MjFkOTY2M2ZkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjViMGJkOWI3N2VlOTc2MzVhNmE4YmQ1ZTRlMzNiZTNlZWRhOWQxYzczYzY5MjYyOTlmMjg5YWFlNTBkMTlkM2UyMjgxMTE5YTcwYTBhMjFmYTE0MjY2YzY3MDVjNTA1ZWYxNTczOWRkZTliYmFkNzgzMTk2ZjQ3ZTk3NDM4NWIwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLWp1c3Rpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBiZDY0ZDA5MTU1MDlhYTNkMTdkNmIwOGYwOGYyMzM4ODA3YTVjODg1MjFkNTAxZmJlMTU4ZGMzNmZiYTFjMDhiZWYzZjk3YzRkZGU5ZTViMjI5NTU2NzlhOWQzOWZkZjNiMTY1MDYyOWMxNzMxOTViMjg1ZWYxODk5MDUyNGFlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjE4YjE2NTU2OWE4ZmQ4NTFlNmUyNTQyM2I3NzQyMWM2Mzk2NjQ2NWEzNDU4NDA0MjE0OTFjYzA4NGQ2ZDJjYmFlYTM3MzMzY2U1MWVmNTljNTdhMjMzYzkyNTdhOTY3ZjMyNTBjODdlMzMxYzY4MmM2NDQ0MTMzYTkzOTc3MGUwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3MjIwNWFkY2U3NGY5NWM2YjllMDgwYmU0ZmIwOTJmNDAzMWYwYTI2Y2FmYzIwOTRlNGMyZDQ4N2M4MzI4OWMyOGU4YjY1NzY5OTA3YjYwN2Q0ZDM0MTFiYzQ4ZjljMGEwYzdkNGM3YjM1YmQ0ZGQ4OTg0ZTM1OWIzMjY2OTAxMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yYW5rT3JkZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JhbmtPcmRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImMzZTVlN2E2ZWQ4NzM1MzdkODgyZjhlOWE2MDNhMWNjYzI1ZTc3NTVjMWUxYmZkZTA1MjRiYTE1N2NlYTQ2ZGU4MTc3MDNmMTQwOThhZjRmOTdmNWM3MmQ5Yjc5MDBjNDRiNmU0NDNiYTY3ODBkOTFkOTFmNDkxMGQzYWI3ZTg1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFiZTZmODcwNjA1YzVlNWU0MmYzOWVkMjgyMjM3OGFiOWVhZjRmYTZiZGE3NDA3MGJhYzU4ZmZkMTBlMTRhMDcyY2Y4MDk2ZmU4YzY5ODY4MDBhOTk1ZTJjNjA0Yjg4Y2EyNzIxZjk5MWI1NTA3MWFlNmYzZTNkMGVhM2JhYWY4IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9uYXQtdjUuMC4xNCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vbmF0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL25hdC12NS4wLjE0IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL25hdC12NS4wLjE0IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImYxMDBmOTQwOTQ0YWIzNTQzMmU1YTI2YWRkZDYzMmM0NWMyNGMzZTFhNzA4MDAzYmRjZTg0NTYxYzRlMTBmNjBhYzEzN2NjMWI3YzY4ZDIwNjk1NTNlOTE2NDE0MDYwYzM5YTJmNjY1NmNkZGNjMDJmYjFkYjNjYTNlYmVlZWY2IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcGFzcy1zdHlsZSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmYTc3NjY0NTFlM2NhZjMwYmM3NTExNjU3OTg2NDJjYTQ4M2FlNmQyYzNiYjhlNzc3OTAwNzFiMTdlZmEzNDgxZjNhYjgzMDMzMjc0YTM2NTQzMTU4MWIyNTYxYjA3Y2UxNjQxMWI0YWE0NjA1OWQ1YTVlNDc2YjE2YWYwZmUyOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb3B5QXJyYXkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvcHlBcnJheS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjVlNWQxYjEyZDE1ZTEwMDUyNjNkZmQ0NGY3NWVhNzIyMGEyZjFmMmYyOGQ5MjZiZTgxMGU3NmE3OTRmYjkxYzhlMjJkZWMzYmJhMWQ2ZDE4ODBhMzNmYTMwOWRhNDdiNjgxYjgzMDQxNmExY2I1ODg1ZGUxYTNlMDZiYmMyN2Q0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvcHlSZWNvcmQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvcHlSZWNvcmQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkOTRlZmM5NzVlNjU0MTE3YmEzMWIyNGE1M2EwZGIzNTA1ODUzNDUzMjZmNGQyZmQyZWViOWViMzBkOGY1ODM5N2MwMjhlYzNmMTMwZDAzN2ExMDcyNTJjNDVlM2MyNzNjMzZiOTVmZmJhYzcwYTk0YjdlYmFjYjI4MWFmMmJiNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kZWVwbHlGdWxmaWxsZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2RlZXBseUZ1bGZpbGxlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjAxOWZmM2YwNTFkODE4NTg2YWJmNWEwYzAyOWIzMGQyZTdjZDNiZTRkM2VmM2Q3ZDQwMGYwZmM1NjhjNjllNzQ4Y2EzMjk4MmZiZjVjNDliOTdhYTgxMTA2MTIxZGIzNzMxM2JhMTY0MDlhYTVlMTdmZWIxZWFmNzFhOWNmNDA1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Vycm9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lcnJvci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjIxNDVhYmQ3NmViNTU3YjAxZDA0OGU0NTI2MGMxYTU1OWQ0MDI4Y2JlOWNiMzAwNjI4MmJhMTcwZDQ1NjI4ODY1NTBmNDk4YmU1ODRlZDJiNmZmZmMwYjgwOTExNjdkYjYwOWZiNjk5OTE4MDA0MjFhNWY2ODFkYmRkMzI3YTEzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2l0ZXItaGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXRlci1oZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzA4NGY2ZGQxNTNjY2Q2ZjAxMzFmNTAyNjEzYmQ3ZmNkZTIzZDE4NWI2Nzg0YjI1ZGI1OWIxZWVlNWIyZmJlNjUwNTViOGVjZDVhOWUwMjRhYzFmOTY4MTA4OWQ0ZTRlZTBkYjAzMjdkOTQxMDdhODdiYjU5MjA2YzU2MzkwMmEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZS1mYXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ha2UtZmFyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNmI0OTI3YjAxNTViMjI1YjkzNDIxMWNkNDBhMGYzMGQ0M2Y0ZDcwNzgzOGM2ZmUwYWJjMTBkMWZmZTlkNWQ5NDY1NDMzYWEwMmNlMDU1YWZkNDNkMWUyYTg1ZGIyNGRjOTA1M2RmNTY3NzNkMmNlMjQyZGNmYTA4MjExY2Y2NDIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZVRhZ2dlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZVRhZ2dlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhmZjVjZTQyMzBmZWJiNzUyMDY0YmMzZjA5YWRkMGFmNGE0OTU4YzIwYjNjMjUyM2M5ZDdkMGVmYzNjYTkxMzE3YzcxMThlODU0NWY4ZGEwZjU1NmJiYmRiYWZmODUyYmFlYmE1YTYxZjQyOTY1NGEwMzQzMzUwYWMyOGU3OGQ1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXNzU3R5bGUtaGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImMxOGRkYzg4MWJhNjJhNzM1NGY1ZjA5MTQ2NGFjYjFkM2I3ODBjNDRlZjg3ZjZhNmVlYzliMzk5ODY1MTBiOGRiZGJhYzEyNjgyZjdkNTdiMmNiY2Y0OTNiYmE3NTIyZDJlOWU1NTllZGY5ZTA5MmJiNTg2MWE1NzVkNWUzNzY3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXNzU3R5bGVPZi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImRmYmRmMDE2OGQ4ZTg5OWM5ZDdkZDQwNDdjNzA4YmE1ZDI2MzExYzVkNGIzOGFlZmFhNzk2NjBjYzU2NWU2NmQzZmZkOWMwZTcwN2EwYjBkYzk2YmI3NWI1ZGUxYTJiODNmNDYwZjcxNTc3Yzk1OGIxYzBlZjVjZjcyYTkwNTY0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JlbW90YWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmVtb3RhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzI3NzIwOTViNDc2MWM2OWEzYzBmMmZjZWJmMTk0N2I2NzgwZDMwNzczZGRmZWYxODMyN2JlYTA3NjE0ZTY4ZTcyZWFlMGQxNWVmZmI4OTMxMzFlM2Y4NjM3ODZkOGQyMTc3ZTI5ZmZhMjk4OTNjNGVkMTUwMWRjZWEwYjg5ZjEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc2FmZS1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zYWZlLXByb21pc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjNTQ2YmJhOTkyY2YyMTQwYmFlOTJiMWNjOWQ1OGQ5YzI5ZGNjMDM0NmIxYzAwOWI0NDIzNjBlNzMyNWQyYWRjNjEyN2I5MWYwYmRlNzAyN2M2Y2ZmNWExNjhjMTY5NTkzMjczOTY4OTIwM2E1MmQwZGZhYWFhZDU5MTAwYWVlMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdHJpbmcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0cmluZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImRhOGQ5MTBmNzE1ZmI4N2FmZTdkODI2NjQ5Yjg3YTM5YTZhZWUzYTY0ZDlmODE5NmIyNGM0ZDUyNzU0YTBhZDhmYmZjODIxMDNjOWIyYzBjY2M4NWYyMzQ3MDcwZTcwYzUwMGUyYzlkZTJkMmZlZDBhNTUwZjJlODc4YzcxNTg3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N5bWJvbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3ltYm9sLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTY1MWE0NDA3ZTRmMDVjMjQ1NGE5NmMwNjE3NDJmNjg0OTI5YTUxMWY0YjA3NTkzYmM3ZWE1ODk2M2M3YzVjOTQwZjJhMWE5MWI4YzY1MGI0ZWE4NzQxMDlmOGQ1NjM4ZDYyOGIyY2E3YTZlZjlhYzk3NGM2YWRmYzg2ZDZiZjIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdGFnZ2VkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90YWdnZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YmRiMGE4MTdmZmZjNDhkOGYxMmZiY2EzY2I5NmE2NjQ5OWE2NWZjNmI5ODk2MzkwNjMwZjg0YTcwNWY2MjU3OTFiZjEzY2ZkOTE1NzI0NmMxMzlkOWJjNjE2YTYzYTRkYzE2ZDJkNGYyNDM0MDlmNzM4MTcwOGU5NjNjMjRiMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTcwMTQ0ODc4NTEzMmUzYWU5ODhjYTE0OTBjY2Y1MDRjNGE4ZThkMjVkNGJiZmQzZjkxZjU2NDM3ZWFjYTFjMzlhOTgwOTgxZmE1Mzg3MGU1YTAyMjcxYzBjY2Q5YmZlMTQ5ODc1NTUwYmUxYWQ0OTRmNzNmNGZjODcwMDgzYzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWJlNmY4NzA2MDVjNWU1ZTQyZjM5ZWQyODIyMzc4YWI5ZWFmNGZhNmJkYTc0MDcwYmFjNThmZmQxMGUxNGEwNzJjZjgwOTZmZThjNjk4NjgwMGE5OTVlMmM2MDRiODhjYTI3MjFmOTkxYjU1MDcxYWU2ZjNlM2QwZWEzYmFhZjgiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3BhdHRlcm5zLXYxLjQuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcGF0dGVybnMiLAogICAgICAibGFiZWwiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pZGVudC1jaGVja2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGlzdC1kaWZmZXJlbmNlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzE3YjRiODFlOGE4YzkzNGUyZDQ3YTc5ZTE2MjhlN2VjZDBkYzM0NDhmZjRlNTdkMjQwMDUzMmFlM2JiZTE3Zjc2OTVkZDg2MjcxMDUyZmE0N2Q3ZGFhOTFmMWQ4YTc3MGZkYzIzMDM0MjU4NjE0MjY1MzM1ZTc3OTYwYzQxZmMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jaGVja0tleS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jaGVja0tleS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjliOGYzOTlkMDY0NjllYzE2YWFhYTNlYjc4ZTllMmVmZDczMGRhZTQyNTlmNWMxN2FiMDc2ZTI0NGYzMGU1M2VkMzA5YjFiMmY4ODdhZjFkYzA4YTIxYWRiOTc3ODI3NzQ3MzJhMWViZDRlODBhM2M3NGNmNTc1MWNhYmZkMDNmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29tcGFyZUtleXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvY29tcGFyZUtleXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3M2JhZGExNmRjNGVjN2YwYjFhNzhlMzU3Zjk3ZjJmZGZmOTJhZjBlMzA0YzM4NWMzNjY4OWU2MGY1NGIzNWY0ZjdmMTJjOWE4OWM0NGNjYTg1ZjgyNjFmODYzMjZiNGU2Zjk2ZTZiMTdmMjRiNTBiZGJmYjFiMDc2Yjc1NGIzMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2NvcHlCYWcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvY29weUJhZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA3NzI2YjIwMjEzZjAyNDVlYjg5NmNlYTVjNGVhZWRjMmY0YjQwZTllOTZlNjA1ODE3YWVjMmI0YzhmNjE1NjdlYTQyMmM0MWZmOWNmYWNlNzg5OWE1ZDZkOWRlNmQ5ODQ5OWFhZmJiNGM2NTFjNDA1YWUyNDUwZDFkMGNmNDY2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29weVNldC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb3B5U2V0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNzg2N2JiODE0YjMwNTIwY2ZhYjVjYTE5OTEyMmJhOWZmYjRhMzA3ZmRlYmFiNWQ4NDU1OTgxNWFlNWY5MTlhNDZlZmMzMzE0MTY4NjU1MjlkM2NiZjk5ZTJjODY0Yzk3ZTUwYTIzYjE0ZTEzNTMwODU3NTBjMGQ5ODZjZTNiMGEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk5MDQ1ZGYxZTFlM2NkM2FmNTA1MjAyODQ0ZjQ3NjczYjQzYzEwNmNhN2MyMzcwYzUyYWNjMjc4ZTE2YmIyMTljNWZiOTcwZjQ4YzkzOTNkZmI4NzdlZTU2ZTdkM2RlMTZhYjJiOTk0NTdhN2Q1OWY3MzA3ZjliNThlYTk2ODg5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNWE5Zjc3ZTk2YjQxMDc5MjRjMThmY2FlZmEyOGU4MWQzOTY4NTAwNzY4ZDZkZGUyZjViNjMxMTFiZDM0NGYwYmQyNDI3ZTY0NTJjY2ZlMWRjYzllZjNhNTA5NGUxNDczMTU4NWIwM2E4MTJlNDNjN2U2YzQzNWZmYzFhYTY1YjMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxZWE0ODM4MWFmNDI5M2IyMmQ1Y2ZlM2I4NzQ1ZWM3ZjEwYmZiMGRmM2E3Y2Y1ZGVlZTViMDEzYzBjMWIzYTRjODkxOThkMTkxNTAyMGQyYmU4ZThhMzNlYzc2ZDAzZjdjN2M5YWYwNGQwMjdjZjc2NGU0NjA5NzE0MmYyMjlkMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjY3MTY2MTAwNDlkYTk1ZDdjZTM2NTVhMGY1ZjE5ZGI3YmQwNGM3NzA1ZDdmNzgwZGE2MDY1Y2EyZTU5YjljY2EzMTAxY2QzNGM1MWJhYWEzOTE1MDE0MmZiMjNhMTFlNTdhYTUzZDRiZDViOTNmMzcyMzgwZGJhMzlkYTAxNTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4ZTE4YmI0YzJjMjE5YzRjYmE2MmEzNTVhMDdmYWQ5ZGJlNTdmNzliYWU5YjYwNTk0N2FmYmY4NTg4MDY1ZGQ0ZDIxMzI4Y2U3ZWQ0NjFkNWIyNDcxY2Q1YTg4MDUxMWQ5ZTI4YzYzNmJjMzQxYTA5NDIyODUxZGQxNDNkNDM1MCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYmU2Zjg3MDYwNWM1ZTVlNDJmMzllZDI4MjIzNzhhYjllYWY0ZmE2YmRhNzQwNzBiYWM1OGZmZDEwZTE0YTA3MmNmODA5NmZlOGM2OTg2ODAwYTk5NWUyYzYwNGI4OGNhMjcyMWY5OTFiNTUwNzFhZTZmM2UzZDBlYTNiYWFmOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS45IjogewogICAgICAibmFtZSI6ICJAZW5kby9wcm9taXNlLWtpdCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjkiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS45IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwYzJjOWQ0MmE3MWUyZmRhZGY1MDRlYjUwMzllMGFlOWFiYzM5YzVhZjRhMmY3OGY3YTYzZDAzNTA0YTE4OGQyZDY1ZGNmY2E4NzE2YmUwOTM1NmE2Y2Y5ODNmMTI3YTk2MWRlOGVkNTA2NTZmYmNiZGQwZGFkNDkzY2JkMDAzMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pcy1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pcy1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDQ2ZTlhYjY3NTBjM2ExNTY5MjBiYzEyYWQyMjU0N2I2NmZjNDEyZDZmZDAzZGYxYTQyZjY5NTVhYTZjNjJkNzE0NTY1ZjMyOTE2OWFiNDc2NmZlMGIzZDE1NmQyZWU1ODdkYzY1ZjA3ZGU4MzYzYmI0OGE5OThhMTkzYmViOGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWVtby1yYWNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZW1vLXJhY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMzcxYjA4YjMwMjE5ZDMxMGYzN2U4ZjFjZWMzMDA0ZGEyMDlkN2I3ODljNjA2ZmQ0MGIzODBjNWUwZjg2YWVlMmEwZDg0ZTMzZTExMTA4ZWM1YWFkMGU0OTRmNTQwMGY5NWYwZTMzYTU4NDYyNGViMzExMDQ5MjMwNmZiZjNlNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4Nzc4ZmM2YmE3MTM4ZGNkNzA1Y2FhOWNkMzk4YjkyYzM4NTFhYTJlYmE3ZjM3OWE0OWVkYTU2MzQ1MjMxMzE5ZTZiZTkyOTYzNGQzNjJkYzkxZTQ1NGQ5OTE0NGVlZDE3MTkwMjQ2ZmQ3MjM3ODU3NzFhY2NhYjZiYjYyMWU4OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYmU2Zjg3MDYwNWM1ZTVlNDJmMzllZDI4MjIzNzhhYjllYWY0ZmE2YmRhNzQwNzBiYWM1OGZmZDEwZTE0YTA3MmNmODA5NmZlOGM2OTg2ODAwYTk5NWUyYzYwNGI4OGNhMjcyMWY5OTFiNTUwNzFhZTZmM2UzZDBlYTNiYWFmOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vc3RyZWFtLXYxLjIuOSI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vc3RyZWFtIiwKICAgICAgImxhYmVsIjogIkBlbmRvL3N0cmVhbS12MS4yLjkiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vc3RyZWFtLXYxLjIuOSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzNTY4MTU5YjhmNDVkNjcwMTYwYzk2MDBiMDE1OTQ1ZDQxYzRjMjBhZTdkMThiYTdjYjgyZTI2NzIyYzFjOWU4MzEyOTM0YmNlZTM1ZmZkM2Y3MGZkZWRlNGZmNGY3ZDE5YmE0YTFmMTMyYmJkMjhlZGM0MTBmNjcwMWNhYzVlMSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiamVzc2llLmpzLXYwLjMuNCI6IHsKICAgICAgIm5hbWUiOiAiamVzc2llLmpzIiwKICAgICAgImxhYmVsIjogImplc3NpZS5qcy12MC4zLjQiLAogICAgICAibG9jYXRpb24iOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYWluLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWluLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZWI4ZGYzMzY1YzViMGY0YjBmNmJmNmMxM2Y3ZTI5NmU3NjAzMWQzNjcxYjI4Y2I2ZDJmZGVjNDdmYmI3ZDE3YjBlNjk4NDgxN2FhNDAwOWRkYzY4Y2ExMDlkYjc5MzgyODAyZWUzZWIxMTViZGM0NTU4YjkzNjNhMmM2YmEyOGIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvRS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvRS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdmNDIzNzE1ZWZlZDk0YzBlMWU5NDEwMGY4ZjVlMTYzZjUzMTAzMTk1NWExNmYzNTkwYWMyOTA1OTU3OGM5ZGRjZjg0ZWNlNzczNTAwNDkxYmJkZWNmNWQ0M2E2MDViYjc0NWM1NzA5OTAyM2JjOWIyYWM3YTM2Yzc1YTNjMmJiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcwL2FzeW5jLWdlbmVyYXRlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMC9hc3luYy1nZW5lcmF0ZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFkYTM0ZGNiNmJlN2ExNTMzNTBjNTU1MTUzODE1ODY4ZDEyYzg3MDYxNDU1MTc1NmQxODk0MWNiZTdmMDc1M2E3ODZlMTBmN2M5MjYxZjEyYzFiNTU0NzY1YWMxZWQwY2E3MGU4NzY3N2UwM2JiZGE5OTcwNTgxNGVlZjQ1ODI2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcwL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcwL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkYTEyNWFkYTI2MDdiZDc2YjQzOWY3NTg4YmQzOWZkOGI4MDY4Y2Q4NjI5OWRmMDk2NDdlM2ZhMzVkMDZkMjU1OTkyOGIzNjk4ZGNmZDhhMDI1YjAwMTJhODU3OGU3MDQ1Nzk1NWUwYjFkMTZjMWFjOTI3MjI1NzIxMTRmMzgyMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMC9tYWtlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcwL21ha2Vycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgyYTVkZjFlZDEwNGUzMzM1YzMyNTMzZGQ2MDk0NDE0ZTllYTU3NGQ0YjQ3MzVkMjkzZGFiMWY1NWM0MzI5Y2UwZDc4ODIxNjdkZDIxODAyY2I2ZjJkOThkOTdlODNjNmE3Nzk5Y2E1Yzc5OGI5MmEzN2MzODczNjA4NmI1MWJkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcxL2FzeW5jLXRvb2xzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMS9hc3luYy10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjljNTIyZGQ2NTc5M2QyMjIxNTkwZjYyZmM1MDEwOWI2ZDk1MmJjZDU1ZDI5NWNhNzgyMGQ1NDVhNmQ4NDEzNDMwYjI5ZWU1ZTQ2ZmZiZTZjNWU2ZTA3ZWM4MzQ0ZmRjOTcyOTRlOGE3MjZiMjQ5YmM3OTgwMjNlZDMzMmZlMDYwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcxL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcxL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwOTNlYzRiNGMzNGUxNzY3NWU4MGE5OTNjODcxMjJlZTE5NDRmODk1YTA5ZWExODUzODlmNDE5OThlNjQ1ZmE0OTQ0NWE3N2Q0MTYwODMyODMwYjhhYzgyZjhlMTBiZGZjYjBmYTJjM2E2YjYwZDhhNTIzNTM1MmEwYjMzOWIzZiIKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn1QSwMECgAAAAAAAAAAAOgouyiuAQAArgEAACAAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvaGVhcC5qc3siaW1wb3J0cyI6WyIuL3NyYy9oZWFwLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvaGVhcC5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9oZWFwLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAVESyZ5AQAAeQEAACcAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2V4cG9ydHMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAWxIkmYgKAACICgAAJAAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaGVhcC5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXhvIiwiQGFnb3JpYy9zdG9yZSIsIi4vbWFrZS1vbmNlLmpzIiwiLi9rZXlzLmpzIiwiLi93YXRjaC1wcm9taXNlLmpzIl0sImV4cG9ydHMiOlsibWFrZUhlYXBab25lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFyLGlzUGFzc2FibGUsbWFrZUV4byxkZWZpbmVFeG9DbGFzcyxkZWZpbmVFeG9DbGFzc0tpdCxtYWtlU2NhbGFyTWFwU3RvcmUsbWFrZVNjYWxhclNldFN0b3JlLG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUsbWFrZVNjYWxhcldlYWtTZXRTdG9yZSxtYWtlT25jZUtpdCxrZXlzLHdhdGNoUHJvbWlzZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiaXNQYXNzYWJsZVwiLCBbJGjNj19hID0+IChpc1Bhc3NhYmxlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXhvXCIsIFtbXCJtYWtlRXhvXCIsIFskaM2PX2EgPT4gKG1ha2VFeG8gPSAkaM2PX2EpXV0sW1wiZGVmaW5lRXhvQ2xhc3NcIiwgWyRozY9fYSA9PiAoZGVmaW5lRXhvQ2xhc3MgPSAkaM2PX2EpXV0sW1wiZGVmaW5lRXhvQ2xhc3NLaXRcIiwgWyRozY9fYSA9PiAoZGVmaW5lRXhvQ2xhc3NLaXQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlU2NhbGFyTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhck1hcFN0b3JlID0gJGjNj19hKV1dLFtcIm1ha2VTY2FsYXJTZXRTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyU2V0U3RvcmUgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhcldlYWtNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyV2Vha01hcFN0b3JlID0gJGjNj19hKV1dLFtcIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhcldlYWtTZXRTdG9yZSA9ICRozY9fYSldXV1dLFtcIi4vbWFrZS1vbmNlLmpzXCIsIFtbXCJtYWtlT25jZUtpdFwiLCBbJGjNj19hID0+IChtYWtlT25jZUtpdCA9ICRozY9fYSldXV1dLFtcIi4va2V5cy5qc1wiLCBbW1wiYWdvcmljVmF0RGF0YUtleXNcIiwgWyRozY9fYSA9PiAoa2V5cyA9ICRozY9fYSldXV1dLFtcIi4vd2F0Y2gtcHJvbWlzZS5qc1wiLCBbW1wid2F0Y2hQcm9taXNlXCIsIFskaM2PX2EgPT4gKHdhdGNoUHJvbWlzZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cbmNvbnN0IGRldGFjaGVkSGVhcFN0b3Jlcz1GYXIoJ2hlYXBTdG9yZXMnLHtcbmRldGFjaGVkOigpPT5kZXRhY2hlZEhlYXBTdG9yZXMsXG5pc1N0b3JhYmxlOmlzUGFzc2FibGUsXG5cbnNldFN0b3JlOm1ha2VTY2FsYXJTZXRTdG9yZSxcbm1hcFN0b3JlOm1ha2VTY2FsYXJNYXBTdG9yZSxcbndlYWtNYXBTdG9yZTptYWtlU2NhbGFyV2Vha01hcFN0b3JlLFxud2Vha1NldFN0b3JlOm1ha2VTY2FsYXJXZWFrU2V0U3RvcmV9KTtcblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSGVhcFpvbmU9KGJhc2VMYWJlbD0naGVhcFpvbmUnKT0+e1xuY29uc3R7bWFrZU9uY2Usd3JhcFByb3ZpZGVyfT1tYWtlT25jZUtpdChiYXNlTGFiZWwsZGV0YWNoZWRIZWFwU3RvcmVzKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgbWFrZVN1YlpvbmU9KGxhYmVsLF9vcHRpb25zKT0+XG5tYWtlSGVhcFpvbmUoIGAke2Jhc2VMYWJlbH0uJHtsYWJlbH1gKTtcblxucmV0dXJuIEZhcignaGVhcFpvbmUnLHtcbmV4bzp3cmFwUHJvdmlkZXIobWFrZUV4byxrZXlzLmV4byksXG5leG9DbGFzczp3cmFwUHJvdmlkZXIoZGVmaW5lRXhvQ2xhc3Msa2V5cy5leG9DbGFzcyksXG5leG9DbGFzc0tpdDp3cmFwUHJvdmlkZXIoZGVmaW5lRXhvQ2xhc3NLaXQsa2V5cy5leG9DbGFzc0tpdCksXG5zdWJab25lOndyYXBQcm92aWRlcihtYWtlU3ViWm9uZSksXG5cbm1ha2VPbmNlLFxud2F0Y2hQcm9taXNlLFxuZGV0YWNoZWQ6ZGV0YWNoZWRIZWFwU3RvcmVzLmRldGFjaGVkLFxuaXNTdG9yYWJsZTpkZXRhY2hlZEhlYXBTdG9yZXMuaXNTdG9yYWJsZSxcblxubWFwU3RvcmU6d3JhcFByb3ZpZGVyKGRldGFjaGVkSGVhcFN0b3Jlcy5tYXBTdG9yZSksXG5zZXRTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLnNldFN0b3JlKSxcbndlYWtNYXBTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLndlYWtNYXBTdG9yZSksXG53ZWFrU2V0U3RvcmU6d3JhcFByb3ZpZGVyKGRldGFjaGVkSGVhcFN0b3Jlcy53ZWFrU2V0U3RvcmUpfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlSGVhcFpvbmUobWFrZUhlYXBab25lKTtcbmhhcmRlbihtYWtlSGVhcFpvbmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUhlYXBab25lIjpbIm1ha2VIZWFwWm9uZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADM7NELmgIAAJoCAAAlAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL2V4cG9ydHMuanMiLCIuL21ha2Utb25jZS5qcyIsIi4va2V5cy5qcyIsIi4vaXMtcGFzc2FibGUuanMiLCIuL3dhdGNoLXByb21pc2UuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2V4cG9ydHMuanMiLCIuL2lzLXBhc3NhYmxlLmpzIiwiLi9rZXlzLmpzIiwiLi9tYWtlLW9uY2UuanMiLCIuL3dhdGNoLXByb21pc2UuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9leHBvcnRzLmpzXCIsIFtdXSxbXCIuL21ha2Utb25jZS5qc1wiLCBbXV0sW1wiLi9rZXlzLmpzXCIsIFtdXSxbXCIuL2lzLXBhc3NhYmxlLmpzXCIsIFtdXSxbXCIuL3dhdGNoLXByb21pc2UuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAUdiVg4cCAACHAgAAKwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaXMtcGFzc2FibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSJdLCJleHBvcnRzIjpbImlzUGFzc2FibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCByZWFsSXNQYXNzYWJsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImlzUGFzc2FibGVcIiwgWyRozY9fYSA9PiAocmVhbElzUGFzc2FibGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQYXNzYWJsZT0oc3BlY2ltZW4pPT5yZWFsSXNQYXNzYWJsZShzcGVjaW1lbik7JGjNj19vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Bhc3NhYmxlIjpbImlzUGFzc2FibGUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAfuQVJKQDAACkAwAAJAAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMva2V5cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYWdvcmljVmF0RGF0YUtleXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qga2luZD0obGFiZWwpPT4gYCR7bGFiZWx9X2tpbmRIYW5kbGVgO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzaW5nbGV0b249KGxhYmVsKT0+IGAke2xhYmVsfV9zaW5nbGV0b25gO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgYWdvcmljVmF0RGF0YUtleXM9e1xuZXhvQ2xhc3M6KGxhYmVsKT0+aGFyZGVuKFtraW5kKGxhYmVsKV0pLFxuZXhvQ2xhc3NLaXQ6KGxhYmVsKT0+aGFyZGVuKFtraW5kKGxhYmVsKV0pLFxuZXhvOihsYWJlbCk9PmhhcmRlbihba2luZChsYWJlbCksc2luZ2xldG9uKGxhYmVsKV0pLFxuc3RvcmU6KGxhYmVsKT0+aGFyZGVuKFtsYWJlbF0pLFxuem9uZToobGFiZWwpPT5oYXJkZW4oW2xhYmVsXSl9OyRozY9fb25jZS5hZ29yaWNWYXREYXRhS2V5cyhhZ29yaWNWYXREYXRhS2V5cyk7XG5cbmhhcmRlbihhZ29yaWNWYXREYXRhS2V5cyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhZ29yaWNWYXREYXRhS2V5cyI6WyJhZ29yaWNWYXREYXRhS2V5cyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAJluY9EQcAABEHAAApAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9tYWtlLW9uY2UuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsibWFrZU9uY2VLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRlZmF1bHRMYWJlbFRvS2V5cz0obGFiZWwpPT5oYXJkZW4oW2xhYmVsXSk7XG5oYXJkZW4oZGVmYXVsdExhYmVsVG9LZXlzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VPbmNlS2l0PShkZWJ1Z05hbWUsc3RvcmVzLGJhY2tpbmdTdG9yZT11bmRlZmluZWQpPT57XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHVzZWRLZXlzPXN0b3Jlcy5kZXRhY2hlZCgpLnNldFN0b3JlKCBgJHtkZWJ1Z05hbWV9IHVzZWQga2V5c2ApO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYXNzZXJ0T25seU9uY2U9KGtleSk9PntcbnR5cGVvZiBrZXk9PT0nc3RyaW5nJ3x8RmFpbCBga2V5ICR7a2V5fSBtdXN0IGJlIGEgc3RyaW5nYDtcbiF1c2VkS2V5cy5oYXMoa2V5KXx8XG5GYWlsIGBrZXkgJHtrZXl9IGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpbiB0aGlzIHpvbmUgYW5kIGluY2FybmF0aW9uYDtcblxuLy9cbi8vXG51c2VkS2V5cy5hZGQoa2V5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgd3JhcFByb3ZpZGVyPShwcm92aWRlcixsYWJlbFRvS2V5cz1kZWZhdWx0TGFiZWxUb0tleXMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd3JhcHBlcj0obGFiZWwsLi4ucmVzdCk9PntcbmZvcihjb25zdCBrZXkgb2YgbGFiZWxUb0tleXMobGFiZWwpKXtcbmFzc2VydE9ubHlPbmNlKGtleSk7XG4gfVxucmV0dXJuIHByb3ZpZGVyKGxhYmVsLC4uLnJlc3QpO1xuIH07XG5yZXR1cm4gKC8qICAgICAgICAgICAgKi93cmFwcGVyKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZU9uY2U9KGtleSxtYWtlcik9PntcbmFzc2VydE9ubHlPbmNlKGtleSk7XG5pZihiYWNraW5nU3RvcmUmJmJhY2tpbmdTdG9yZS5oYXMoa2V5KSl7XG5yZXR1cm4gYmFja2luZ1N0b3JlLmdldChrZXkpO1xuIH1cbmNvbnN0IHZhbHVlPW1ha2VyKGtleSk7XG5zdG9yZXMuaXNTdG9yYWJsZSh2YWx1ZSl8fFxuRmFpbCBgbWFrZXIgcmV0dXJuIHZhbHVlICR7dmFsdWV9IGlzIG5vdCBzdG9yYWJsZWA7XG5iYWNraW5nU3RvcmUmJmJhY2tpbmdTdG9yZS5pbml0KGtleSx2YWx1ZSk7XG5yZXR1cm4gdmFsdWU7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7bWFrZU9uY2Usd3JhcFByb3ZpZGVyfSk7XG4gfTskaM2PX29uY2UubWFrZU9uY2VLaXQobWFrZU9uY2VLaXQpO1xuaGFyZGVuKG1ha2VPbmNlS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VPbmNlS2l0IjpbIm1ha2VPbmNlS2l0Il19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAF0ivuOCQAAjgkAAC0AAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL3dhdGNoLXByb21pc2UuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGF0dGVybnMiLCJAZW5kby9mYXIiXSwiZXhwb3J0cyI6WyJQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkiLCJQcm9taXNlV2F0Y2hlckhhbmRsZXIiLCJQcm9taXNlV2F0Y2hlckkiLCJQcm9taXNlV2F0Y2hlclJlamVjdGVkSSIsIndhdGNoUHJvbWlzZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsTSxFOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdHthcHBseX09UmVmbGVjdDtcblxuLypcblxuICovXG5jb25zdCAgICAgICAgUHJvbWlzZVdhdGNoZXJIYW5kbGVyPU0uY2FsbChNLnJhdygpKS5yZXN0KE0ucmF3KCkpLnJldHVybnMoKTtcblxuLypcblxuICovJGjNj19vbmNlLlByb21pc2VXYXRjaGVySGFuZGxlcihQcm9taXNlV2F0Y2hlckhhbmRsZXIpO1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVyST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXInLHtcbm9uRnVsZmlsbGVkOlByb21pc2VXYXRjaGVySGFuZGxlcixcbm9uUmVqZWN0ZWQ6UHJvbWlzZVdhdGNoZXJIYW5kbGVyfSk7XG5cblxuLypcblxuICovJGjNj19vbmNlLlByb21pc2VXYXRjaGVySShQcm9taXNlV2F0Y2hlckkpO1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVyRnVsZmlsbGVkST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWQnLHtcbm9uRnVsZmlsbGVkOlByb21pc2VXYXRjaGVySGFuZGxlcn0pO1xuXG5cbi8qXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkoUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWRJKTtcbmNvbnN0ICAgICAgICBQcm9taXNlV2F0Y2hlclJlamVjdGVkST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXJSZWplY3RlZCcse1xub25SZWplY3RlZDpQcm9taXNlV2F0Y2hlckhhbmRsZXJ9KTtcblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlV2F0Y2hlclJlamVjdGVkSShQcm9taXNlV2F0Y2hlclJlamVjdGVkSSk7XG5jb25zdCBjYWxsTWVNYXliZT0odGhhdCxwcm9wLHBvc3RBcmdzKT0+e1xuY29uc3QgZm49dGhhdFtwcm9wXTtcbmlmKCFmbil7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmFzc2VydC50eXBlb2YoZm4sJ2Z1bmN0aW9uJyk7XG4vKlxuXG4gICAqL1xuY29uc3Qgd3JhcHBlZD0oYXJnKT0+e1xuLy9cbi8vXG5hcHBseShmbix0aGF0LFthcmcsLi4ucG9zdEFyZ3NdKTtcbiB9O1xucmV0dXJuIHdyYXBwZWQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHdhdGNoUHJvbWlzZT0ocCx3YXRjaGVyLC4uLndhdGNoZXJBcmdzKT0+e1xuUHJvbWlzZS5yZXNvbHZlKHApPT09cHx8RmFpbCBgd2F0Y2hQcm9taXNlIG9ubHkgd2F0Y2hlcyBwcm9taXNlc2A7XG5jb25zdCBvbkZ1bGZpbGxlZD1jYWxsTWVNYXliZSh3YXRjaGVyLCdvbkZ1bGZpbGxlZCcsd2F0Y2hlckFyZ3MpO1xuY29uc3Qgb25SZWplY3RlZD1jYWxsTWVNYXliZSh3YXRjaGVyLCdvblJlamVjdGVkJyx3YXRjaGVyQXJncyk7XG5vbkZ1bGZpbGxlZHx8XG5vblJlamVjdGVkfHxcbkZhaWwgYHByb21pc2Ugd2F0Y2hlciBtdXN0IGltcGxlbWVudCBhdCBsZWFzdCBvbmUgaGFuZGxlciBtZXRob2RgO1xudm9pZCBFLndoZW4ocCxvbkZ1bGZpbGxlZCxvblJlamVjdGVkKTtcbiB9OyRozY9fb25jZS53YXRjaFByb21pc2Uod2F0Y2hQcm9taXNlKTtcbmhhcmRlbih3YXRjaFByb21pc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUHJvbWlzZVdhdGNoZXJIYW5kbGVyIjpbIlByb21pc2VXYXRjaGVySGFuZGxlciJdLCJQcm9taXNlV2F0Y2hlckkiOlsiUHJvbWlzZVdhdGNoZXJJIl0sIlByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSI6WyJQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkiXSwiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiOlsiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiXSwid2F0Y2hQcm9taXNlIjpbIndhdGNoUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABI8rnVKAUAACgFAAAhAAAAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL2NhY2hlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIi4vc3RvcmUuanMiXSwiZXhwb3J0cyI6WyJtYWtlQ2FjaGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLEZhcixtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvcjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N0b3JlLmpzXCIsIFtbXCJtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvclwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ2FjaGU9KGNvb3JkaW5hdG9yPW1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yKCkpPT57XG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjYWNoZT0oa2V5LC4uLm9wdFVwZGF0ZUd1YXJkUGF0dGVybik9PntcbmlmKG9wdFVwZGF0ZUd1YXJkUGF0dGVybi5sZW5ndGg9PT0wKXtcbnJldHVybiBFKGNvb3JkaW5hdG9yKS5nZXRSZWNlbnRWYWx1ZShrZXkpO1xuIH1cblxuY29uc3RbdXBkYXRlLGd1YXJkUGF0dGVybl09b3B0VXBkYXRlR3VhcmRQYXR0ZXJuO1xuaWYodHlwZW9mIHVwZGF0ZSE9PSdmdW5jdGlvbicpe1xucmV0dXJuIEUoY29vcmRpbmF0b3IpLnNldENhY2hlVmFsdWUoa2V5LHVwZGF0ZSxndWFyZFBhdHRlcm4pO1xuIH1cblxuY29uc3QgdXBkYXRlcj1GYXIoJ2NhY2hlIHVwZGF0ZXInLHtcbnVwZGF0ZToob2xkVmFsdWUpPT57XG5yZXR1cm4gdXBkYXRlKG9sZFZhbHVlKTtcbiB9fSk7XG5cbnJldHVybiBFKGNvb3JkaW5hdG9yKS51cGRhdGVDYWNoZVZhbHVlKGtleSx1cGRhdGVyLGd1YXJkUGF0dGVybik7XG4gfTtcblxucmV0dXJuIGNhY2hlO1xuIH07JGjNj19vbmNlLm1ha2VDYWNoZShtYWtlQ2FjaGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUNhY2hlIjpbIm1ha2VDYWNoZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAASnwuxMgIAADICAAAgAAAAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL21haW4uanN7ImltcG9ydHMiOlsiLi90eXBlcy5qcyIsIi4vc3RvcmUuanMiLCIuL2NhY2hlLmpzIiwiLi9zdGF0ZS5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vY2FjaGUuanMiLCIuL3N0YXRlLmpzIiwiLi9zdG9yZS5qcyIsIi4vdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi90eXBlcy5qc1wiLCBbXV0sW1wiLi9zdG9yZS5qc1wiLCBbXV0sW1wiLi9jYWNoZS5qc1wiLCBbXV0sW1wiLi9zdGF0ZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACMvBfLOwQAADsEAAAhAAAAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL3N0YXRlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJHUk9VTkRfU1RBVEUiLCJtYWtlU3RhdGUiLCJ3aXRoR3JvdW5kU3RhdGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBHUk9VTkRfU1RBVEU9aGFyZGVuKHtnZW5lcmF0aW9uOjBuLHZhbHVlOnVuZGVmaW5lZH0pO1xuXG4vKlxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5HUk9VTkRfU1RBVEUoR1JPVU5EX1NUQVRFKTtcbmNvbnN0ICAgICAgICBtYWtlU3RhdGU9KHZhbHVlLHByaW9yU3RhdGU9R1JPVU5EX1NUQVRFKT0+XG5oYXJkZW4oe1xuZ2VuZXJhdGlvbjpwcmlvclN0YXRlLmdlbmVyYXRpb24rMW4sXG52YWx1ZX0pO1xuXG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVN0YXRlKG1ha2VTdGF0ZSk7XG5jb25zdCAgICAgICAgd2l0aEdyb3VuZFN0YXRlPShzdGF0ZVN0b3JlKT0+KHtcbi4uLnN0YXRlU3RvcmUsXG5nZXQ6KGtleSk9PntcbmlmKCFzdGF0ZVN0b3JlLmhhcyhrZXkpKXtcbnJldHVybiBHUk9VTkRfU1RBVEU7XG4gfVxucmV0dXJuIHN0YXRlU3RvcmUuZ2V0KGtleSk7XG4gfX0pOyRozY9fb25jZS53aXRoR3JvdW5kU3RhdGUod2l0aEdyb3VuZFN0YXRlKTtcblxuaGFyZGVuKHdpdGhHcm91bmRTdGF0ZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJHUk9VTkRfU1RBVEUiOlsiR1JPVU5EX1NUQVRFIl0sIm1ha2VTdGF0ZSI6WyJtYWtlU3RhdGUiXSwid2l0aEdyb3VuZFN0YXRlIjpbIndpdGhHcm91bmRTdGF0ZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABlF7DQsRcAALEXAAAhAAAAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL3N0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBhZ29yaWMvaW50ZXJuYWwiLCIuL3N0YXRlLmpzIl0sImV4cG9ydHMiOlsibWFrZUNoYWluU3RvcmFnZUNvb3JkaW5hdG9yIiwibWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLEZhcixkZWVwbHlGdWxmaWxsZWQsbWFrZU1hcnNoYWwsbWF0Y2hlcyxtYWtlU2NhbGFyTWFwU3RvcmUsbWFrZVNjYWxhckJpZ01hcFN0b3JlLHVudGlsVHJ1ZSx3aXRoR3JvdW5kU3RhdGUsbWFrZVN0YXRlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImRlZXBseUZ1bGZpbGxlZFwiLCBbJGjNj19hID0+IChkZWVwbHlGdWxmaWxsZWQgPSAkaM2PX2EpXV0sW1wibWFrZU1hcnNoYWxcIiwgWyRozY9fYSA9PiAobWFrZU1hcnNoYWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIm1ha2VTY2FsYXJCaWdNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyQmlnTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJ1bnRpbFRydWVcIiwgWyRozY9fYSA9PiAodW50aWxUcnVlID0gJGjNj19hKV1dXV0sW1wiLi9zdGF0ZS5qc1wiLCBbW1wid2l0aEdyb3VuZFN0YXRlXCIsIFskaM2PX2EgPT4gKHdpdGhHcm91bmRTdGF0ZSA9ICRozY9fYSldXSxbXCJtYWtlU3RhdGVcIiwgWyRozY9fYSA9PiAobWFrZVN0YXRlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlS2V5VG9TdHJpbmc9KHNhbml0aXplPShvYmopPT5vYmopPT57XG5sZXQgbGFzdE5vbmNlPTA7XG5jb25zdCB2YWxUb05vbmNlPW5ldyBXZWFrTWFwKCk7XG5jb25zdCB2YWxUb1Nsb3Q9KHZhbCk9PntcbmxldCBzbG90PXZhbFRvTm9uY2UuZ2V0KHZhbCk7XG5pZighc2xvdCl7XG5sYXN0Tm9uY2UrPTE7XG5zbG90PWxhc3ROb25jZTtcbnZhbFRvTm9uY2Uuc2V0KHZhbCxzbG90KTtcbiB9XG5yZXR1cm4gc2xvdDtcbiB9O1xuXG5jb25zdHt0b0NhcERhdGE6a2V5VG9Kc29uYWJsZX09bWFrZU1hcnNoYWwodmFsVG9TbG90LHVuZGVmaW5lZCx7XG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cbmNvbnN0IGtleVRvU3RyaW5nPWFzeW5jKGtleVApPT57XG5jb25zdCBrZXk9YXdhaXQgc2FuaXRpemUoa2V5UCk7XG5jb25zdCBvYmo9a2V5VG9Kc29uYWJsZShrZXkpO1xucmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XG4gfTtcbnJldHVybiBrZXlUb1N0cmluZztcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgYXBwbHlDYWNoZVRyYW5zYWN0aW9uPWFzeW5jKFxua2V5U3RyLFxudHhuLFxuZ3VhcmRQYXR0ZXJuLFxuc2FuaXRpemUsXG5zdGF0ZVN0b3JlKT0+XG57XG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0VXBkYXRlZFN0YXRlPWFzeW5jKGJhc2lzU3RhdGUpPT57XG5jb25zdHt2YWx1ZX09YmFzaXNTdGF0ZTtcbmlmKCFtYXRjaGVzKHZhbHVlLGd1YXJkUGF0dGVybikpe1xuLy9cbnJldHVybiBudWxsO1xuIH1cblxuY29uc3QgbmV3VmFsdWU9YXdhaXQgc2FuaXRpemUodHhuKHZhbHVlKSk7XG5yZXR1cm4gbWFrZVN0YXRlKG5ld1ZhbHVlLGJhc2lzU3RhdGUpO1xuIH07XG5cbmxldCBiYXNpc1N0YXRlPXN0YXRlU3RvcmUuZ2V0KGtleVN0cik7XG5sZXQgdXBkYXRlZFN0YXRlPWF3YWl0IGdldFVwZGF0ZWRTdGF0ZShiYXNpc1N0YXRlKTtcblxuLy9cblxuLy9cbmJhc2lzU3RhdGU9c3RhdGVTdG9yZS5nZXQoa2V5U3RyKTtcbmNvbnN0IHVudGlsVXBkYXRlU3luY2VkPXVudGlsVHJ1ZShcbigpPT4hdXBkYXRlZFN0YXRlfHx1cGRhdGVkU3RhdGUuZ2VuZXJhdGlvbj5iYXNpc1N0YXRlLmdlbmVyYXRpb24pO1xuXG5mb3IgYXdhaXQoY29uc3QgXyBvZiB1bnRpbFVwZGF0ZVN5bmNlZCl7XG51cGRhdGVkU3RhdGU9YXdhaXQgZ2V0VXBkYXRlZFN0YXRlKGJhc2lzU3RhdGUpO1xuLy9cbmJhc2lzU3RhdGU9c3RhdGVTdG9yZS5nZXQoa2V5U3RyKTtcbiB9XG5cbmlmKCF1cGRhdGVkU3RhdGUpe1xuLy9cbi8vXG5yZXR1cm4gYmFzaXNTdGF0ZS52YWx1ZTtcbiB9XG5cbi8vXG4vL1xuaWYoYmFzaXNTdGF0ZS5nZW5lcmF0aW9uPDFuKXtcbi8vXG5zdGF0ZVN0b3JlLmluaXQoa2V5U3RyLHVwZGF0ZWRTdGF0ZSk7XG4gfWVsc2V7XG5zdGF0ZVN0b3JlLnNldChrZXlTdHIsdXBkYXRlZFN0YXRlKTtcbiB9XG5cbi8vXG5yZXR1cm4gdXBkYXRlZFN0YXRlLnZhbHVlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IHN0cmluZ2lmeVN0YXRlU3RvcmU9YXN5bmMoc3RhdGVTdG9yZSxtYXJzaGFsbGVyKT0+e1xuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9iaj17fTtcbmZvcihjb25zdFtrZXksdmFsdWVdb2Ygc3RhdGVTdG9yZS5lbnRyaWVzKCkpe1xub2JqW2tleV09RShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuIH1cbnJldHVybiBkZWVwbHlGdWxmaWxsZWQoaGFyZGVuKG9iaikpLnRoZW4oKGZ1bGZpbGxlZE9iaik9PlxuSlNPTi5zdHJpbmdpZnkoZnVsZmlsbGVkT2JqKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3I9KFxuc3RhdGVTdG9yZT1tYWtlU2NhbGFyTWFwU3RvcmUoKSxcbnNhbml0aXplPWRlZXBseUZ1bGZpbGxlZCk9Plxue1xuY29uc3Qgc2VyaWFsaXplUGFzc2FibGU9bWFrZUtleVRvU3RyaW5nKHNhbml0aXplKTtcblxuY29uc3QgZGVmYXVsdFN0YXRlU3RvcmU9d2l0aEdyb3VuZFN0YXRlKHN0YXRlU3RvcmUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29vcmQ9RmFyKCdzdG9yZSBjYWNoZSBjb29yZGluYXRvcicse1xuZ2V0UmVjZW50VmFsdWU6YXN5bmMoa2V5KT0+e1xuY29uc3Qga2V5U3RyPWF3YWl0IHNlcmlhbGl6ZVBhc3NhYmxlKGtleSk7XG5yZXR1cm4gZGVmYXVsdFN0YXRlU3RvcmUuZ2V0KGtleVN0cikudmFsdWU7XG4gfSxcbnNldENhY2hlVmFsdWU6YXN5bmMoa2V5LG5ld1ZhbHVlLGd1YXJkUGF0dGVybik9PntcbmNvbnN0IGtleVN0cj1hd2FpdCBzZXJpYWxpemVQYXNzYWJsZShrZXkpO1xucmV0dXJuIGFwcGx5Q2FjaGVUcmFuc2FjdGlvbihcbmtleVN0cixcbigpPT5uZXdWYWx1ZSxcbmd1YXJkUGF0dGVybixcbnNhbml0aXplLFxuZGVmYXVsdFN0YXRlU3RvcmUpO1xuXG4gfSxcbnVwZGF0ZUNhY2hlVmFsdWU6YXN5bmMoa2V5LHVwZGF0ZXIsZ3VhcmRQYXR0ZXJuKT0+e1xuY29uc3Qga2V5U3RyPWF3YWl0IHNlcmlhbGl6ZVBhc3NhYmxlKGtleSk7XG5yZXR1cm4gYXBwbHlDYWNoZVRyYW5zYWN0aW9uKFxua2V5U3RyLFxuKG9sZFZhbHVlKT0+RSh1cGRhdGVyKS51cGRhdGUob2xkVmFsdWUpLFxuZ3VhcmRQYXR0ZXJuLFxuc2FuaXRpemUsXG5kZWZhdWx0U3RhdGVTdG9yZSk7XG5cbiB9fSk7XG5cbnJldHVybiBjb29yZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yKG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yKTtcbmNvbnN0IG1ha2VMYXN0V2luc1VwZGF0ZXI9KHN0YXRlU3RvcmUsbWFyc2hhbGxlcixzdG9yYWdlTm9kZSk9PntcbmxldCBsYXN0UHJlcGFyZVRpY2tldD0wbjtcbmxldCBsYXN0Q29tbWl0VGlja2V0PTBuO1xuXG5yZXR1cm4gYXN5bmMoc3RvcmVkVmFsdWUpPT57XG4vL1xuLy9cbi8vXG5sYXN0UHJlcGFyZVRpY2tldCs9MW47XG5jb25zdCBtYXJzaGFsbFRpY2tldD1sYXN0UHJlcGFyZVRpY2tldDtcbmNvbnN0IHNlcmlhbGl6ZWRTdG9yZT1hd2FpdCBzdHJpbmdpZnlTdGF0ZVN0b3JlKHN0YXRlU3RvcmUsbWFyc2hhbGxlcik7XG5pZihtYXJzaGFsbFRpY2tldDxsYXN0Q29tbWl0VGlja2V0KXtcbi8vXG5yZXR1cm4gc3RvcmVkVmFsdWU7XG4gfVxuYXdhaXQgRShzdG9yYWdlTm9kZSkuc2V0VmFsdWUoc2VyaWFsaXplZFN0b3JlKTtcbmxhc3RDb21taXRUaWNrZXQ9bWFyc2hhbGxUaWNrZXQ7XG5yZXR1cm4gc3RvcmVkVmFsdWU7XG4gfTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDaGFpblN0b3JhZ2VDb29yZGluYXRvcj0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbmNvbnN0IHN0YXRlU3RvcmU9bWFrZVNjYWxhckJpZ01hcFN0b3JlKCdzdGF0ZUtleScpO1xuXG5jb25zdCBzYW5pdGl6ZT1kZWVwbHlGdWxmaWxsZWQ7XG5jb25zdCBzZXJpYWxpemVQYXNzYWJsZT1tYWtlS2V5VG9TdHJpbmcoc2FuaXRpemUpO1xuXG5jb25zdCBkZWZhdWx0U3RhdGVTdG9yZT13aXRoR3JvdW5kU3RhdGUoc3RhdGVTdG9yZSk7XG5cbmNvbnN0IHVwZGF0ZVN0b3JhZ2VOb2RlPW1ha2VMYXN0V2luc1VwZGF0ZXIoXG5kZWZhdWx0U3RhdGVTdG9yZSxcbm1hcnNoYWxsZXIsXG5zdG9yYWdlTm9kZSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvb3JkPUZhcignc3RvcmUgY2FjaGUgY29vcmRpbmF0b3InLHtcbmdldFJlY2VudFZhbHVlOmFzeW5jKGtleSk9PntcbmNvbnN0IGtleVN0cj1hd2FpdCBzZXJpYWxpemVQYXNzYWJsZShrZXkpO1xucmV0dXJuIGRlZmF1bHRTdGF0ZVN0b3JlLmdldChrZXlTdHIpLnZhbHVlO1xuIH0sXG5zZXRDYWNoZVZhbHVlOmFzeW5jKGtleSxuZXdWYWx1ZSxndWFyZFBhdHRlcm4pPT57XG5jb25zdCBrZXlTdHI9YXdhaXQgc2VyaWFsaXplUGFzc2FibGUoa2V5KTtcbmNvbnN0IHN0b3JlZFZhbHVlPWF3YWl0IGFwcGx5Q2FjaGVUcmFuc2FjdGlvbihcbmtleVN0cixcbigpPT5uZXdWYWx1ZSxcbmd1YXJkUGF0dGVybixcbnNhbml0aXplLFxuZGVmYXVsdFN0YXRlU3RvcmUpO1xuXG5yZXR1cm4gdXBkYXRlU3RvcmFnZU5vZGUoc3RvcmVkVmFsdWUpO1xuIH0sXG51cGRhdGVDYWNoZVZhbHVlOmFzeW5jKGtleSx1cGRhdGVyLGd1YXJkUGF0dGVybik9PntcbmNvbnN0IGtleVN0cj1hd2FpdCBzZXJpYWxpemVQYXNzYWJsZShrZXkpO1xuY29uc3Qgc3RvcmVkVmFsdWU9YXdhaXQgYXBwbHlDYWNoZVRyYW5zYWN0aW9uKFxua2V5U3RyLFxuKG9sZFZhbHVlKT0+RSh1cGRhdGVyKS51cGRhdGUob2xkVmFsdWUpLFxuZ3VhcmRQYXR0ZXJuLFxuc2FuaXRpemUsXG5kZWZhdWx0U3RhdGVTdG9yZSk7XG5cbnJldHVybiB1cGRhdGVTdG9yYWdlTm9kZShzdG9yZWRWYWx1ZSk7XG4gfX0pO1xuXG5yZXR1cm4gY29vcmQ7XG4gfTskaM2PX29uY2UubWFrZUNoYWluU3RvcmFnZUNvb3JkaW5hdG9yKG1ha2VDaGFpblN0b3JhZ2VDb29yZGluYXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvciI6WyJtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvciJdLCJtYWtlQ2hhaW5TdG9yYWdlQ29vcmRpbmF0b3IiOlsibWFrZUNoYWluU3RvcmFnZUNvb3JkaW5hdG9yIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAVESyZ5AQAAeQEAACEAAABAYWdvcmljL2NhY2hlLXYwLjMuMi9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAR1HsYi8dAAAvHQAAJgAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9hbW91bnRNYXRoLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3N0b3JlIiwiLi9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanMiLCIuL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiQW1vdW50TWF0aCIsIkFzc2V0S2luZCIsImFzc2VydEFzc2V0S2luZCIsImFzc2VydFZhbHVlR2V0SGVscGVycyIsImdldEFzc2V0S2luZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxwYXNzU3R5bGVPZixhc3NlcnRSZW1vdGFibGUsYXNzZXJ0UmVjb3JkLE0sbWF0Y2hlcyxuYXRNYXRoSGVscGVycyxzZXRNYXRoSGVscGVycyxjb3B5U2V0TWF0aEhlbHBlcnMsY29weUJhZ01hdGhIZWxwZXJzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UmVtb3RhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFJlbW90YWJsZSA9ICRozY9fYSldXSxbXCJhc3NlcnRSZWNvcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVjb3JkID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanNcIiwgW1tcIm5hdE1hdGhIZWxwZXJzXCIsIFskaM2PX2EgPT4gKG5hdE1hdGhIZWxwZXJzID0gJGjNj19hKV1dXV0sW1wiLi9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qc1wiLCBbW1wic2V0TWF0aEhlbHBlcnNcIiwgWyRozY9fYSA9PiAoc2V0TWF0aEhlbHBlcnMgPSAkaM2PX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qc1wiLCBbW1wiY29weVNldE1hdGhIZWxwZXJzXCIsIFskaM2PX2EgPT4gKGNvcHlTZXRNYXRoSGVscGVycyA9ICRozY9fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzXCIsIFtbXCJjb3B5QmFnTWF0aEhlbHBlcnNcIiwgWyRozY9fYSA9PiAoY29weUJhZ01hdGhIZWxwZXJzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEFzc2V0S2luZD0vKiAgICAgICAgICAgICAgICAqL3tcbk5BVDonbmF0JyxcblNFVDonc2V0JyxcbkNPUFlfU0VUOidjb3B5U2V0JyxcbkNPUFlfQkFHOidjb3B5QmFnJ307JGjNj19vbmNlLkFzc2V0S2luZChBc3NldEtpbmQpO1xuXG5oYXJkZW4oQXNzZXRLaW5kKTtcbmNvbnN0IGFzc2V0S2luZE5hbWVzPWhhcmRlbihPYmplY3QudmFsdWVzKEFzc2V0S2luZCkuc29ydCgpKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRBc3NldEtpbmQ9KGFsbGVnZWRBSyk9PntcbmFzc2V0S2luZE5hbWVzLmluY2x1ZGVzKGFsbGVnZWRBSyl8fFxuRmFpbCBgVGhlIGFzc2V0S2luZCAke2FsbGVnZWRBS30gbXVzdCBiZSBvbmUgb2YgJHtxKGFzc2V0S2luZE5hbWVzKX1gO1xuIH07JGjNj19vbmNlLmFzc2VydEFzc2V0S2luZChhc3NlcnRBc3NldEtpbmQpO1xuaGFyZGVuKGFzc2VydEFzc2V0S2luZCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBoZWxwZXJzPXtcbm5hdDpuYXRNYXRoSGVscGVycyxcbnNldDpzZXRNYXRoSGVscGVycyxcbmNvcHlTZXQ6Y29weVNldE1hdGhIZWxwZXJzLFxuY29weUJhZzpjb3B5QmFnTWF0aEhlbHBlcnN9O1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhc3NlcnRWYWx1ZUdldEFzc2V0S2luZD0odmFsdWUpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsdWUpO1xuaWYocGFzc1N0eWxlPT09J2JpZ2ludCcpe1xucmV0dXJuJ25hdCc7XG4gfVxuaWYocGFzc1N0eWxlPT09J2NvcHlBcnJheScpe1xucmV0dXJuJ3NldCc7XG4gfVxuaWYobWF0Y2hlcyh2YWx1ZSxNLnNldCgpKSl7XG5yZXR1cm4nY29weVNldCc7XG4gfVxuaWYobWF0Y2hlcyh2YWx1ZSxNLmJhZygpKSl7XG5yZXR1cm4nY29weUJhZyc7XG4gfVxuLy9cbi8vXG4vL1xuLy9cbi8vXG50aHJvdyBGYWlsIGB2YWx1ZSAke3ZhbHVlfSBtdXN0IGJlIGEgYmlnaW50LCBjb3B5U2V0LCBjb3B5QmFnLCBvciBhbiBhcnJheSwgbm90ICR7cShcbnBhc3NTdHlsZSlcbiB9YDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRWYWx1ZUdldEhlbHBlcnM9KHZhbHVlKT0+XG4vL1xuaGVscGVyc1thc3NlcnRWYWx1ZUdldEFzc2V0S2luZCh2YWx1ZSldO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5hc3NlcnRWYWx1ZUdldEhlbHBlcnMoYXNzZXJ0VmFsdWVHZXRIZWxwZXJzKTtcbmNvbnN0IG9wdGlvbmFsQnJhbmRDaGVjaz0oYWxsZWdlZEJyYW5kLGJyYW5kKT0+e1xuaWYoYnJhbmQhPT11bmRlZmluZWQpe1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuYWxsZWdlZEJyYW5kPT09YnJhbmR8fFxuRmFpbCBgYW1vdW50J3MgYnJhbmQgJHtxKGFsbGVnZWRCcmFuZCl9IGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgYnJhbmQgJHtxKFxuYnJhbmQpXG4gfWA7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja0xSQW5kR2V0SGVscGVycz0obGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5hc3NlcnRSZWNvcmQobGVmdEFtb3VudCwnbGVmdEFtb3VudCcpO1xuYXNzZXJ0UmVjb3JkKHJpZ2h0QW1vdW50LCdyaWdodEFtb3VudCcpO1xuY29uc3R7dmFsdWU6bGVmdFZhbHVlLGJyYW5kOmxlZnRCcmFuZH09bGVmdEFtb3VudDtcbmNvbnN0e3ZhbHVlOnJpZ2h0VmFsdWUsYnJhbmQ6cmlnaHRCcmFuZH09cmlnaHRBbW91bnQ7XG5hc3NlcnRSZW1vdGFibGUobGVmdEJyYW5kLCdsZWZ0QnJhbmQnKTtcbmFzc2VydFJlbW90YWJsZShyaWdodEJyYW5kLCdyaWdodEJyYW5kJyk7XG5vcHRpb25hbEJyYW5kQ2hlY2sobGVmdEJyYW5kLGJyYW5kKTtcbm9wdGlvbmFsQnJhbmRDaGVjayhyaWdodEJyYW5kLGJyYW5kKTtcbmxlZnRCcmFuZD09PXJpZ2h0QnJhbmR8fFxuRmFpbCBgQnJhbmRzIGluIGxlZnQgJHtxKGxlZnRCcmFuZCl9IGFuZCByaWdodCAke3EoXG5yaWdodEJyYW5kKVxuIH0gc2hvdWxkIG1hdGNoIGJ1dCBkbyBub3RgO1xuY29uc3QgbGVmdEhlbHBlcnM9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKGxlZnRWYWx1ZSk7XG5jb25zdCByaWdodEhlbHBlcnM9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKHJpZ2h0VmFsdWUpO1xubGVmdEhlbHBlcnM9PT1yaWdodEhlbHBlcnN8fFxuRmFpbCBgVGhlIGxlZnQgJHtsZWZ0QW1vdW50fSBhbmQgcmlnaHQgYW1vdW50ICR7cmlnaHRBbW91bnR9IGhhZCBkaWZmZXJlbnQgYXNzZXRLaW5kc2A7XG5yZXR1cm4gbGVmdEhlbHBlcnM7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvZXJjZUxSPShoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpPT57XG4vL1xucmV0dXJuW2guZG9Db2VyY2UobGVmdEFtb3VudC52YWx1ZSksaC5kb0NvZXJjZShyaWdodEFtb3VudC52YWx1ZSldO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBpc0dURT0obGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xucmV0dXJuIGguZG9Jc0dURSguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQW1vdW50TWF0aD17XG4vL1xuLy9cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5tYWtlOihicmFuZCxhbGxlZ2VkVmFsdWUpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5jb25zdCBoPWFzc2VydFZhbHVlR2V0SGVscGVycyhhbGxlZ2VkVmFsdWUpO1xuY29uc3QgdmFsdWU9aC5kb0NvZXJjZShhbGxlZ2VkVmFsdWUpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb2VyY2U6KGJyYW5kLGFsbGVnZWRBbW91bnQpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5hc3NlcnRSZWNvcmQoYWxsZWdlZEFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHticmFuZDphbGxlZ2VkQnJhbmQsdmFsdWU6YWxsZWdlZFZhbHVlfT1hbGxlZ2VkQW1vdW50O1xuYnJhbmQ9PT1hbGxlZ2VkQnJhbmR8fFxuRmFpbCBgVGhlIGJyYW5kIGluIHRoZSBhbGxlZ2VkQW1vdW50ICR7YWxsZWdlZEFtb3VudH0gaW4gJ2NvZXJjZScgZGlkbid0IG1hdGNoIHRoZSBzcGVjaWZpZWQgYnJhbmQgJHticmFuZH0uYDtcbi8vXG4vL1xucmV0dXJuIEFtb3VudE1hdGgubWFrZShicmFuZCxhbGxlZ2VkVmFsdWUpO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmdldFZhbHVlOihicmFuZCxhbW91bnQpPT5BbW91bnRNYXRoLmNvZXJjZShicmFuZCxhbW91bnQpLnZhbHVlLFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1ha2VFbXB0eTooYnJhbmQsYXNzZXRLaW5kPS8qICAgICAgICAgICAgICAgICovJ25hdCcpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5hc3NlcnRBc3NldEtpbmQoYXNzZXRLaW5kKTtcbmNvbnN0IHZhbHVlPWhlbHBlcnNbYXNzZXRLaW5kXS5kb01ha2VFbXB0eSgpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG4gICAqL1xubWFrZUVtcHR5RnJvbUFtb3VudDooYW1vdW50KT0+e1xuYXNzZXJ0UmVjb3JkKGFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHticmFuZCx2YWx1ZX09YW1vdW50O1xuY29uc3QgYXNzZXRLaW5kPWFzc2VydFZhbHVlR2V0QXNzZXRLaW5kKHZhbHVlKTtcbi8vXG5yZXR1cm4gQW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcbiB9LFxuLypcblxuXG5cblxuXG4gICAqL1xuaXNFbXB0eTooYW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmFzc2VydFJlY29yZChhbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7YnJhbmQ6YWxsZWdlZEJyYW5kLHZhbHVlfT1hbW91bnQ7XG5hc3NlcnRSZW1vdGFibGUoYWxsZWdlZEJyYW5kLCdicmFuZCcpO1xub3B0aW9uYWxCcmFuZENoZWNrKGFsbGVnZWRCcmFuZCxicmFuZCk7XG5jb25zdCBoPWFzc2VydFZhbHVlR2V0SGVscGVycyh2YWx1ZSk7XG5yZXR1cm4gaC5kb0lzRW1wdHkoaC5kb0NvZXJjZSh2YWx1ZSkpO1xuIH0sXG5pc0dURSxcbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmlzRXF1YWw6KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuY29uc3QgaD1jaGVja0xSQW5kR2V0SGVscGVycyhsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kKTtcbnJldHVybiBoLmRvSXNFcXVhbCguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuYWRkOihsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmNvbnN0IGg9Y2hlY2tMUkFuZEdldEhlbHBlcnMobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZCk7XG5jb25zdCB2YWx1ZT1oLmRvQWRkKC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kOmxlZnRBbW91bnQuYnJhbmQsdmFsdWV9KTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5zdWJ0cmFjdDoobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xuY29uc3QgdmFsdWU9aC5kb1N1YnRyYWN0KC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kOmxlZnRBbW91bnQuYnJhbmQsdmFsdWV9KTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1pbjooeCx5LGJyYW5kPXVuZGVmaW5lZCk9PlxuLy9cbmlzR1RFKHgseSxicmFuZCk/XG55OlxuaXNHVEUoeSx4LGJyYW5kKT9cbng6XG5GYWlsIGAke3h9IGFuZCAke3l9IGFyZSBpbmNvbXBhcmFibGVgLFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1heDooeCx5LGJyYW5kPXVuZGVmaW5lZCk9PlxuLy9cbmlzR1RFKHgseSxicmFuZCk/XG54OlxuaXNHVEUoeSx4KT9cbnk6XG5GYWlsIGAke3h9IGFuZCAke3l9IGFyZSBpbmNvbXBhcmFibGVgfTskaM2PX29uY2UuQW1vdW50TWF0aChBbW91bnRNYXRoKTtcblxuaGFyZGVuKEFtb3VudE1hdGgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGdldEFzc2V0S2luZD0oYW1vdW50KT0+e1xuYXNzZXJ0UmVjb3JkKGFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHt2YWx1ZX09YW1vdW50O1xucmV0dXJuIGFzc2VydFZhbHVlR2V0QXNzZXRLaW5kKHZhbHVlKTtcbiB9OyRozY9fb25jZS5nZXRBc3NldEtpbmQoZ2V0QXNzZXRLaW5kKTtcbmhhcmRlbihnZXRBc3NldEtpbmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQXNzZXRLaW5kIjpbIkFzc2V0S2luZCJdLCJhc3NlcnRBc3NldEtpbmQiOlsiYXNzZXJ0QXNzZXRLaW5kIl0sImFzc2VydFZhbHVlR2V0SGVscGVycyI6WyJhc3NlcnRWYWx1ZUdldEhlbHBlcnMiXSwiQW1vdW50TWF0aCI6WyJBbW91bnRNYXRoIl0sImdldEFzc2V0S2luZCI6WyJnZXRBc3NldEtpbmQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAASpDQfAMEAAADBAAAJwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9hbW91bnRTdG9yZS5qc3siaW1wb3J0cyI6WyIuL2Ftb3VudE1hdGguanMiXSwiZXhwb3J0cyI6WyJtYWtlQW1vdW50U3RvcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBBbW91bnRNYXRoOyRozY9faW1wb3J0cyhbW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VBbW91bnRTdG9yZT0oc3RhdGUsa2V5KT0+e1xucmV0dXJuIGhhcmRlbih7XG5nZXRBbW91bnQ6KCk9PnN0YXRlW2tleV0sXG5pbmNyZW1lbnQ6KGRlbHRhKT0+e1xuc3RhdGVba2V5XT1BbW91bnRNYXRoLmFkZChzdGF0ZVtrZXldLGRlbHRhKTtcbiB9LFxuZGVjcmVtZW50OihkZWx0YSk9PntcbmlmKEFtb3VudE1hdGguaXNHVEUoc3RhdGVba2V5XSxkZWx0YSkpe1xuc3RhdGVba2V5XT1BbW91bnRNYXRoLnN1YnRyYWN0KHN0YXRlW2tleV0sZGVsdGEpO1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGZhbHNlO1xuIH19KTtcblxuIH07JGjNj19vbmNlLm1ha2VBbW91bnRTdG9yZShtYWtlQW1vdW50U3RvcmUpO1xuaGFyZGVuKG1ha2VBbW91bnRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlQW1vdW50U3RvcmUiOlsibWFrZUFtb3VudFN0b3JlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEW1HBr2BQAA9gUAACcAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvZGlzcGxheUluZm8uanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9zdG9yZSIsIi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbImNvZXJjZURpc3BsYXlJbmZvIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtdXN0TWF0Y2gsRGlzcGxheUluZm9TaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiRGlzcGxheUluZm9TaGFwZVwiLCBbJGjNj19hID0+IChEaXNwbGF5SW5mb1NoYXBlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjb2VyY2VEaXNwbGF5SW5mbz0oYWxsZWdlZERpc3BsYXlJbmZvLGFzc2V0S2luZCk9Pntcbm11c3RNYXRjaChhbGxlZ2VkRGlzcGxheUluZm8sRGlzcGxheUluZm9TaGFwZSwnZGlzcGxheUluZm8nKTtcblxuaWYoYWxsZWdlZERpc3BsYXlJbmZvLmFzc2V0S2luZCE9PXVuZGVmaW5lZCl7XG5hbGxlZ2VkRGlzcGxheUluZm8uYXNzZXRLaW5kPT09YXNzZXRLaW5kfHxcbkZhaWwgYGRpc3BsYXlJbmZvLmFzc2V0S2luZCB3YXMgcHJlc2VudCAoJHthbGxlZ2VkRGlzcGxheUluZm8uYXNzZXRLaW5kfSkgYW5kIGRpZCBub3QgbWF0Y2ggdGhlIGFzc2V0S2luZCBhcmd1bWVudCAoJHthc3NldEtpbmR9KWA7XG4gfVxuY29uc3QgZGlzcGxheUluZm89aGFyZGVuKHsuLi5hbGxlZ2VkRGlzcGxheUluZm8sYXNzZXRLaW5kfSk7XG5cbmlmKGRpc3BsYXlJbmZvLmRlY2ltYWxQbGFjZXMhPT11bmRlZmluZWQpe1xuTnVtYmVyLmlzU2FmZUludGVnZXIoZGlzcGxheUluZm8uZGVjaW1hbFBsYWNlcyl8fFxuRmFpbCBgZGVjaW1hbFBsYWNlcyAke2Rpc3BsYXlJbmZvLmRlY2ltYWxQbGFjZXN9IGlzIG5vdCBhIHNhZmUgaW50ZWdlcmA7XG4gfVxuXG5yZXR1cm4gZGlzcGxheUluZm87XG4gfTskaM2PX29uY2UuY29lcmNlRGlzcGxheUluZm8oY29lcmNlRGlzcGxheUluZm8pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY29lcmNlRGlzcGxheUluZm8iOlsiY29lcmNlRGlzcGxheUluZm8iXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAX5aQtm4CAABuAgAAIQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL2Ftb3VudE1hdGguanMiLCIuL2lzc3VlcktpdC5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2Ftb3VudE1hdGguanMiLCIuL2lzc3VlcktpdC5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtdXSxbXCIuL2lzc3VlcktpdC5qc1wiLCBbXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtdXSxbXCIuL3R5cGVzLWluZGV4LmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPADLeUUFgAAFBYAACUAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvaXNzdWVyS2l0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy96b25lL2R1cmFibGUuanMiLCIuL2Ftb3VudE1hdGguanMiLCIuL2Rpc3BsYXlJbmZvLmpzIiwiLi9wYXltZW50TGVkZ2VyLmpzIl0sImV4cG9ydHMiOlsiaGFzSXNzdWVyIiwibWFrZUR1cmFibGVJc3N1ZXJLaXQiLCJtYWtlSXNzdWVyS2l0IiwicHJlcGFyZUlzc3VlcktpdCIsInVwZ3JhZGVJc3N1ZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRmFpbCxhc3NlcnRQYXR0ZXJuLG1ha2VTY2FsYXJCaWdNYXBTdG9yZSxtYWtlRHVyYWJsZVpvbmUsQXNzZXRLaW5kLGFzc2VydEFzc2V0S2luZCxjb2VyY2VEaXNwbGF5SW5mbyxwcmVwYXJlUGF5bWVudExlZGdlcjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaM2PX2EgPT4gKGFzc2VydCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ01hcFN0b3JlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy96b25lL2R1cmFibGUuanNcIiwgW1tcIm1ha2VEdXJhYmxlWm9uZVwiLCBbJGjNj19hID0+IChtYWtlRHVyYWJsZVpvbmUgPSAkaM2PX2EpXV1dXSxbXCIuL2Ftb3VudE1hdGguanNcIiwgW1tcIkFzc2V0S2luZFwiLCBbJGjNj19hID0+IChBc3NldEtpbmQgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0QXNzZXRLaW5kXCIsIFskaM2PX2EgPT4gKGFzc2VydEFzc2V0S2luZCA9ICRozY9fYSldXV1dLFtcIi4vZGlzcGxheUluZm8uanNcIiwgW1tcImNvZXJjZURpc3BsYXlJbmZvXCIsIFskaM2PX2EgPT4gKGNvZXJjZURpc3BsYXlJbmZvID0gJGjNj19hKV1dXV0sW1wiLi9wYXltZW50TGVkZ2VyLmpzXCIsIFtbXCJwcmVwYXJlUGF5bWVudExlZGdlclwiLCBbJGjNj19hID0+IChwcmVwYXJlUGF5bWVudExlZGdlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzZXR1cElzc3VlcktpdD0oXG57bmFtZSxhc3NldEtpbmQsZGlzcGxheUluZm8sZWxlbWVudFNoYXBlfSxcbmlzc3VlclpvbmUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkKT0+XG57XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuYXNzZXJ0QXNzZXRLaW5kKGFzc2V0S2luZCk7XG5cbi8vXG5jb25zdCBjbGVhbkRpc3BsYXlJbmZvPWNvZXJjZURpc3BsYXlJbmZvKGRpc3BsYXlJbmZvLGFzc2V0S2luZCk7XG5pZihvcHRTaHV0ZG93bldpdGhGYWlsdXJlIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2Yob3B0U2h1dGRvd25XaXRoRmFpbHVyZSwnZnVuY3Rpb24nKTtcbiB9XG5cbmlmKGVsZW1lbnRTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGVsZW1lbnRTaGFwZSk7XG4gfVxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0e2lzc3VlcixtaW50LGJyYW5kLG1pbnRSZWNvdmVyeVB1cnNlfT1wcmVwYXJlUGF5bWVudExlZGdlcihcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuY2xlYW5EaXNwbGF5SW5mbyxcbmVsZW1lbnRTaGFwZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5icmFuZCxcbmlzc3Vlcixcbm1pbnQsXG5taW50UmVjb3ZlcnlQdXJzZSxcbmRpc3BsYXlJbmZvOmNsZWFuRGlzcGxheUluZm99KTtcblxuIH07XG5oYXJkZW4oc2V0dXBJc3N1ZXJLaXQpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBJTlNUQU5DRV9LRVk9J2lzc3Vlcic7XG4vKlxuXG5cblxuICovXG5jb25zdCBSRUNPVkVSWV9TRVRTX1NUQVRFPSdyZWNvdmVyeVNldHNTdGF0ZSc7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1cGdyYWRlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbnJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWQpPT5cbntcbmNvbnN0IGlzc3VlclJlY29yZD1pc3N1ZXJCYWdnYWdlLmdldChJTlNUQU5DRV9LRVkpO1xuY29uc3QgaXNzdWVyWm9uZT1tYWtlRHVyYWJsZVpvbmUoaXNzdWVyQmFnZ2FnZSk7XG5jb25zdCBvbGRSZWNvdmVyeVNldHNTdGF0ZT1pc3N1ZXJCYWdnYWdlLmhhcyhSRUNPVkVSWV9TRVRTX1NUQVRFKT9cbmlzc3VlckJhZ2dhZ2UuZ2V0KFJFQ09WRVJZX1NFVFNfU1RBVEUpOlxuJ2hhc1JlY292ZXJ5U2V0cyc7XG5pZihcbm9sZFJlY292ZXJ5U2V0c1N0YXRlPT09J25vUmVjb3ZlcnlTZXRzJyYmXG5yZWNvdmVyeVNldHNPcHRpb249PT0naGFzUmVjb3ZlcnlTZXRzJylcbntcbkZhaWwgYENhbm5vdCAoeWV0PykgdXBncmFkZSBmcm9tICdub1JlY292ZXJ5U2V0cycgdG8gJ2hhc1JlY292ZXJ5U2V0cydgO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHJlY292ZXJ5U2V0c1N0YXRlPXJlY292ZXJ5U2V0c09wdGlvbnx8b2xkUmVjb3ZlcnlTZXRzU3RhdGU7XG5yZXR1cm4gc2V0dXBJc3N1ZXJLaXQoXG5pc3N1ZXJSZWNvcmQsXG5pc3N1ZXJab25lLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKTtcblxuIH07JGjNj19vbmNlLnVwZ3JhZGVJc3N1ZXJLaXQodXBncmFkZUlzc3VlcktpdCk7XG5oYXJkZW4odXBncmFkZUlzc3VlcktpdCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBoYXNJc3N1ZXI9KGJhZ2dhZ2UpPT5iYWdnYWdlLmhhcyhJTlNUQU5DRV9LRVkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaGFzSXNzdWVyKGhhc0lzc3Vlcik7XG5jb25zdCAgICAgICAgbWFrZUR1cmFibGVJc3N1ZXJLaXQ9KFxuaXNzdWVyQmFnZ2FnZSxcbm5hbWUsXG4vL1xuYXNzZXRLaW5kPUFzc2V0S2luZC5OQVQsXG5kaXNwbGF5SW5mbz1oYXJkZW4oe30pLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQsXG57ZWxlbWVudFNoYXBlPXVuZGVmaW5lZCxyZWNvdmVyeVNldHNPcHRpb249dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QgaXNzdWVyRGF0YT1oYXJkZW4oe1xubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxuZWxlbWVudFNoYXBlfSk7XG5cbmlzc3VlckJhZ2dhZ2UuaW5pdChJTlNUQU5DRV9LRVksaXNzdWVyRGF0YSk7XG5jb25zdCBpc3N1ZXJab25lPW1ha2VEdXJhYmxlWm9uZShpc3N1ZXJCYWdnYWdlKTtcbmNvbnN0IHJlY292ZXJ5U2V0c1N0YXRlPXJlY292ZXJ5U2V0c09wdGlvbnx8J2hhc1JlY292ZXJ5U2V0cyc7XG5pc3N1ZXJCYWdnYWdlLmluaXQoUkVDT1ZFUllfU0VUU19TVEFURSxyZWNvdmVyeVNldHNTdGF0ZSk7XG5yZXR1cm4gc2V0dXBJc3N1ZXJLaXQoXG5pc3N1ZXJEYXRhLFxuaXNzdWVyWm9uZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSk7XG5cbiB9OyRozY9fb25jZS5tYWtlRHVyYWJsZUlzc3VlcktpdChtYWtlRHVyYWJsZUlzc3VlcktpdCk7XG5oYXJkZW4obWFrZUR1cmFibGVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5uYW1lLFxuLy9cbmFzc2V0S2luZD1Bc3NldEtpbmQuTkFULFxuZGlzcGxheUluZm89aGFyZGVuKHt9KSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkLFxuLy9cbm9wdGlvbnM9e30pPT5cbntcbmlmKGhhc0lzc3Vlcihpc3N1ZXJCYWdnYWdlKSl7XG5jb25zdHtlbGVtZW50U2hhcGU6Xz11bmRlZmluZWQscmVjb3ZlcnlTZXRzT3B0aW9uPXVuZGVmaW5lZH09XG5vcHRpb25zO1xuY29uc3QgaXNzdWVyS2l0PXVwZ3JhZGVJc3N1ZXJLaXQoXG5pc3N1ZXJCYWdnYWdlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSxcbnJlY292ZXJ5U2V0c09wdGlvbik7XG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG5yZXR1cm4gaXNzdWVyS2l0O1xuIH1lbHNle1xuY29uc3QgaXNzdWVyS2l0PW1ha2VEdXJhYmxlSXNzdWVyS2l0KFxuaXNzdWVyQmFnZ2FnZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUsXG5vcHRpb25zKTtcblxuLy9cbnJldHVybiBpc3N1ZXJLaXQ7XG4gfVxuIH07JGjNj19vbmNlLnByZXBhcmVJc3N1ZXJLaXQocHJlcGFyZUlzc3VlcktpdCk7XG5oYXJkZW4ocHJlcGFyZUlzc3VlcktpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUlzc3VlcktpdD0oXG5uYW1lLFxuLy9cbmFzc2V0S2luZD1Bc3NldEtpbmQuTkFULFxuZGlzcGxheUluZm89aGFyZGVuKHt9KSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkLFxuLy9cbntlbGVtZW50U2hhcGU9dW5kZWZpbmVkLHJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWR9PXt9KT0+XG5cbi8vXG5tYWtlRHVyYWJsZUlzc3VlcktpdChcbm1ha2VTY2FsYXJCaWdNYXBTdG9yZSgnZHJvcHBlZCBpc3N1ZXIga2l0Jyx7ZHVyYWJsZTp0cnVlfSksXG5uYW1lLFxuYXNzZXRLaW5kLFxuZGlzcGxheUluZm8sXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlLFxue2VsZW1lbnRTaGFwZSxyZWNvdmVyeVNldHNPcHRpb259KTskaM2PX29uY2UubWFrZUlzc3VlcktpdChtYWtlSXNzdWVyS2l0KTtcblxuaGFyZGVuKG1ha2VJc3N1ZXJLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidXBncmFkZUlzc3VlcktpdCI6WyJ1cGdyYWRlSXNzdWVyS2l0Il0sImhhc0lzc3VlciI6WyJoYXNJc3N1ZXIiXSwibWFrZUR1cmFibGVJc3N1ZXJLaXQiOlsibWFrZUR1cmFibGVJc3N1ZXJLaXQiXSwicHJlcGFyZUlzc3VlcktpdCI6WyJwcmVwYXJlSXNzdWVyS2l0Il0sIm1ha2VJc3N1ZXJLaXQiOlsibWFrZUlzc3VlcktpdCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADfxm6nEAYAABAGAAA6AAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIl0sImV4cG9ydHMiOlsiY29weUJhZ01hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQga2V5RVEsbWFrZUNvcHlCYWcsbXVzdE1hdGNoLE0sZ2V0Q29weUJhZ0VudHJpZXMsYmFnSXNTdXBlcmJhZyxiYWdVbmlvbixiYWdEaXNqb2ludFN1YnRyYWN0OyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlCYWdcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlCYWcgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiZ2V0Q29weUJhZ0VudHJpZXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weUJhZ0VudHJpZXMgPSAkaM2PX2EpXV0sW1wiYmFnSXNTdXBlcmJhZ1wiLCBbJGjNj19hID0+IChiYWdJc1N1cGVyYmFnID0gJGjNj19hKV1dLFtcImJhZ1VuaW9uXCIsIFskaM2PX2EgPT4gKGJhZ1VuaW9uID0gJGjNj19hKV1dLFtcImJhZ0Rpc2pvaW50U3VidHJhY3RcIiwgWyRozY9fYSA9PiAoYmFnRGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW1wdHk9bWFrZUNvcHlCYWcoW10pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb3B5QmFnTWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihiYWcpPT57XG5tdXN0TWF0Y2goYmFnLE0uYmFnKCksJ2JhZyBvZiBhbW91bnQnKTtcbnJldHVybiBiYWc7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eTooYmFnKT0+Z2V0Q29weUJhZ0VudHJpZXMoYmFnKS5sZW5ndGg9PT0wLFxuZG9Jc0dURTpiYWdJc1N1cGVyYmFnLFxuZG9Jc0VxdWFsOmtleUVRLFxuZG9BZGQ6YmFnVW5pb24sXG5kb1N1YnRyYWN0OmJhZ0Rpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2UuY29weUJhZ01hdGhIZWxwZXJzKGNvcHlCYWdNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb3B5QmFnTWF0aEhlbHBlcnMiOlsiY29weUJhZ01hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAF7BS2/OBQAAzgUAADoAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJjb3B5U2V0TWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBrZXlFUSxtYWtlQ29weVNldCxtdXN0TWF0Y2gsTSxnZXRDb3B5U2V0S2V5cyxzZXRJc1N1cGVyc2V0LHNldERpc2pvaW50VW5pb24sc2V0RGlzam9pbnRTdWJ0cmFjdDskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImtleUVRXCIsIFskaM2PX2EgPT4gKGtleUVRID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5U2V0XCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5U2V0ID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcImdldENvcHlTZXRLZXlzXCIsIFskaM2PX2EgPT4gKGdldENvcHlTZXRLZXlzID0gJGjNj19hKV1dLFtcInNldElzU3VwZXJzZXRcIiwgWyRozY9fYSA9PiAoc2V0SXNTdXBlcnNldCA9ICRozY9fYSldXSxbXCJzZXREaXNqb2ludFVuaW9uXCIsIFskaM2PX2EgPT4gKHNldERpc2pvaW50VW5pb24gPSAkaM2PX2EpXV0sW1wic2V0RGlzam9pbnRTdWJ0cmFjdFwiLCBbJGjNj19hID0+IChzZXREaXNqb2ludFN1YnRyYWN0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PW1ha2VDb3B5U2V0KFtdKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb3B5U2V0TWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihzZXQpPT57XG5tdXN0TWF0Y2goc2V0LE0uc2V0KCksJ3NldCBvZiBhbW91bnQnKTtcbnJldHVybiBzZXQ7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eTooc2V0KT0+Z2V0Q29weVNldEtleXMoc2V0KS5sZW5ndGg9PT0wLFxuZG9Jc0dURTpzZXRJc1N1cGVyc2V0LFxuZG9Jc0VxdWFsOmtleUVRLFxuZG9BZGQ6c2V0RGlzam9pbnRVbmlvbixcbmRvU3VidHJhY3Q6c2V0RGlzam9pbnRTdWJ0cmFjdH0pOyRozY9fb25jZS5jb3B5U2V0TWF0aEhlbHBlcnMoY29weVNldE1hdGhIZWxwZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImNvcHlTZXRNYXRoSGVscGVycyI6WyJjb3B5U2V0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmYWgJpYEAACWBAAANgAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9uYXQiXSwiZXhwb3J0cyI6WyJuYXRNYXRoSGVscGVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsTmF0LGlzTmF0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjNj19hID0+IChOYXQgPSAkaM2PX2EpXV0sW1wiaXNOYXRcIiwgWyRozY9fYSA9PiAoaXNOYXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgZW1wdHk9MG47XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBuYXRNYXRoSGVscGVycz1oYXJkZW4oe1xuZG9Db2VyY2U6KG5hdCk9Pntcbi8vXG5hc3NlcnQudHlwZW9mKG5hdCwnYmlnaW50Jyk7XG5pc05hdChuYXQpfHxGYWlsIGB2YWx1ZSAke25hdH0gbXVzdCBiZSBhIG5hdHVyYWwgbnVtYmVyYDtcbnJldHVybiBOYXQobmF0KTtcbiB9LFxuZG9NYWtlRW1wdHk6KCk9PmVtcHR5LFxuZG9Jc0VtcHR5OihuYXQpPT5uYXQ9PT1lbXB0eSxcbmRvSXNHVEU6KGxlZnQscmlnaHQpPT5sZWZ0Pj1yaWdodCxcbmRvSXNFcXVhbDoobGVmdCxyaWdodCk9PmxlZnQ9PT1yaWdodCxcbi8vXG5kb0FkZDoobGVmdCxyaWdodCk9PmxlZnQrcmlnaHQsXG5kb1N1YnRyYWN0OihsZWZ0LHJpZ2h0KT0+TmF0KGxlZnQtcmlnaHQpfSk7JGjNj19vbmNlLm5hdE1hdGhIZWxwZXJzKG5hdE1hdGhIZWxwZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im5hdE1hdGhIZWxwZXJzIjpbIm5hdE1hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFYLCPF3BgAAdwYAADYAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJzZXRNYXRoSGVscGVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhc3NTdHlsZU9mLGFzc2VydEtleSxlbGVtZW50c0lzU3VwZXJzZXQsZWxlbWVudHNEaXNqb2ludFVuaW9uLGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCxjb2VyY2VUb0VsZW1lbnRzLGVsZW1lbnRzQ29tcGFyZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJlbGVtZW50c0lzU3VwZXJzZXRcIiwgWyRozY9fYSA9PiAoZWxlbWVudHNJc1N1cGVyc2V0ID0gJGjNj19hKV1dLFtcImVsZW1lbnRzRGlzam9pbnRVbmlvblwiLCBbJGjNj19hID0+IChlbGVtZW50c0Rpc2pvaW50VW5pb24gPSAkaM2PX2EpXV0sW1wiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0XCIsIFskaM2PX2EgPT4gKGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXSxbXCJjb2VyY2VUb0VsZW1lbnRzXCIsIFskaM2PX2EgPT4gKGNvZXJjZVRvRWxlbWVudHMgPSAkaM2PX2EpXV0sW1wiZWxlbWVudHNDb21wYXJlXCIsIFskaM2PX2EgPT4gKGVsZW1lbnRzQ29tcGFyZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PWhhcmRlbihbXSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgc2V0TWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihsaXN0KT0+e1xubGlzdD1jb2VyY2VUb0VsZW1lbnRzKGxpc3QpO1xuLy9cbi8vXG4vL1xuLy9cbmFzc2VydEtleShsaXN0KTtcbnJldHVybiBsaXN0O1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KGxpc3QpPT5wYXNzU3R5bGVPZihsaXN0KT09PSdjb3B5QXJyYXknJiZsaXN0Lmxlbmd0aD09PTAsXG5kb0lzR1RFOmVsZW1lbnRzSXNTdXBlcnNldCxcbmRvSXNFcXVhbDooeCx5KT0+ZWxlbWVudHNDb21wYXJlKHgseSk9PT0wLFxuZG9BZGQ6ZWxlbWVudHNEaXNqb2ludFVuaW9uLFxuZG9TdWJ0cmFjdDplbGVtZW50c0Rpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2Uuc2V0TWF0aEhlbHBlcnMoc2V0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2V0TWF0aEhlbHBlcnMiOlsic2V0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAjb9p3rIDAACyAwAAIwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50LmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUGF5bWVudEtpbmQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpbml0RW1wdHk7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJpbml0RW1wdHlcIiwgWyRozY9fYSA9PiAoaW5pdEVtcHR5ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vL1xuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVQYXltZW50S2luZD0oaXNzdWVyWm9uZSxuYW1lLGJyYW5kLFBheW1lbnRJKT0+e1xuY29uc3QgbWFrZVBheW1lbnQ9aXNzdWVyWm9uZS5leG9DbGFzcyhcbiBgJHtuYW1lfSBwYXltZW50YCxcblBheW1lbnRJLFxuaW5pdEVtcHR5LFxue1xuZ2V0QWxsZWdlZEJyYW5kKCl7XG5yZXR1cm4gYnJhbmQ7XG4gfX0pO1xuXG5cbi8vXG5yZXR1cm4gbWFrZVBheW1lbnQ7XG4gfTskaM2PX29uY2UucHJlcGFyZVBheW1lbnRLaW5kKHByZXBhcmVQYXltZW50S2luZCk7XG5oYXJkZW4ocHJlcGFyZVBheW1lbnRLaW5kKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVQYXltZW50S2luZCI6WyJwcmVwYXJlUGF5bWVudEtpbmQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkinqOxogAAAaIAAAKQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50TGVkZ2VyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Byb21pc2Uta2l0IiwiQGFnb3JpYy9zdG9yZSIsIi4vYW1vdW50TWF0aC5qcyIsIi4vcGF5bWVudC5qcyIsIi4vcHVyc2UuanMiLCIuL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUGF5bWVudExlZGdlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgscSxGYWlsLGFubm90YXRlRXJyb3IsaXNQcm9taXNlLG11c3RNYXRjaCxNLGtleUVRLEFtb3VudE1hdGgscHJlcGFyZVBheW1lbnRLaW5kLHByZXBhcmVQdXJzZUtpbmQsQnJhbmRJLG1ha2VJc3N1ZXJJbnRlcmZhY2VzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaM2PX2EgPT4gKGlzUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcImtleUVRXCIsIFskaM2PX2EgPT4gKGtleUVRID0gJGjNj19hKV1dXV0sW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXSxbXCIuL3BheW1lbnQuanNcIiwgW1tcInByZXBhcmVQYXltZW50S2luZFwiLCBbJGjNj19hID0+IChwcmVwYXJlUGF5bWVudEtpbmQgPSAkaM2PX2EpXV1dXSxbXCIuL3B1cnNlLmpzXCIsIFtbXCJwcmVwYXJlUHVyc2VLaW5kXCIsIFskaM2PX2EgPT4gKHByZXBhcmVQdXJzZUtpbmQgPSAkaM2PX2EpXV1dXSxbXCIuL3R5cGVHdWFyZHMuanNcIiwgW1tcIkJyYW5kSVwiLCBbJGjNj19hID0+IChCcmFuZEkgPSAkaM2PX2EpXV0sW1wibWFrZUlzc3VlckludGVyZmFjZXNcIiwgWyRozY9fYSA9PiAobWFrZUlzc3VlckludGVyZmFjZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgYW1vdW50U2hhcGVGcm9tRWxlbWVudFNoYXBlPShicmFuZCxhc3NldEtpbmQsZWxlbWVudFNoYXBlKT0+e1xubGV0IHZhbHVlU2hhcGU7XG5zd2l0Y2goYXNzZXRLaW5kKXtcbmNhc2UnbmF0Jzp7XG52YWx1ZVNoYXBlPU0ubmF0KCk7XG5lbGVtZW50U2hhcGU9PT11bmRlZmluZWR8fFxuRmFpbCBgRnVuZ2libGUgYXNzZXRzIGNhbm5vdCBoYXZlIGFuIGVsZW1lbnRTaGFwZTogJHtxKGVsZW1lbnRTaGFwZSl9YDtcbmJyZWFrO1xuIH1cbmNhc2Unc2V0Jzp7XG5pZihlbGVtZW50U2hhcGU9PT11bmRlZmluZWQpe1xudmFsdWVTaGFwZT1NLmFycmF5T2YoTS5rZXkoKSk7XG4gfWVsc2V7XG52YWx1ZVNoYXBlPU0uYXJyYXlPZihNLmFuZChNLmtleSgpLGVsZW1lbnRTaGFwZSkpO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVNldCc6e1xuaWYoZWxlbWVudFNoYXBlPT09dW5kZWZpbmVkKXtcbnZhbHVlU2hhcGU9TS5zZXQoKTtcbiB9ZWxzZXtcbnZhbHVlU2hhcGU9TS5zZXRPZihlbGVtZW50U2hhcGUpO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weUJhZyc6e1xuaWYoZWxlbWVudFNoYXBlPT09dW5kZWZpbmVkKXtcbnZhbHVlU2hhcGU9TS5iYWcoKTtcbiB9ZWxzZXtcbnZhbHVlU2hhcGU9TS5iYWdPZihlbGVtZW50U2hhcGUpO1xuIH1cbmJyZWFrO1xuIH1cbmRlZmF1bHQ6e1xuRmFpbCBgdW5leHBlY3RlZCBhc3NldCBraW5kICR7cShhc3NldEtpbmQpfWA7XG4gfX1cblxuXG5jb25zdCBhbW91bnRTaGFwZT1oYXJkZW4oe1xuYnJhbmQsLy9cbnZhbHVlOnZhbHVlU2hhcGV9KTtcblxucmV0dXJuIGFtb3VudFNoYXBlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUGF5bWVudExlZGdlcj0oXG5pc3N1ZXJab25lLFxubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxuZWxlbWVudFNoYXBlLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCk9Plxue1xuLyogICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBicmFuZD1pc3N1ZXJab25lLmV4byggYCR7bmFtZX0gYnJhbmRgLEJyYW5kSSx7XG5pc015SXNzdWVyKGFsbGVnZWRJc3N1ZXIpe1xuLy9cbnJldHVybiBhbGxlZ2VkSXNzdWVyPT09aXNzdWVyO1xuIH0sXG5nZXRBbGxlZ2VkTmFtZSgpe1xucmV0dXJuIG5hbWU7XG4gfSxcbi8vXG5nZXREaXNwbGF5SW5mbygpe1xucmV0dXJuIGRpc3BsYXlJbmZvO1xuIH0sXG5nZXRBbW91bnRTaGFwZSgpe1xucmV0dXJuIGFtb3VudFNoYXBlO1xuIH19KTtcblxuXG5jb25zdCBhbW91bnRTaGFwZT1hbW91bnRTaGFwZUZyb21FbGVtZW50U2hhcGUoXG5icmFuZCxcbmFzc2V0S2luZCxcbmVsZW1lbnRTaGFwZSk7XG5cblxuY29uc3R7SXNzdWVySSxNaW50SSxQYXltZW50SSxQdXJzZUlLaXR9PW1ha2VJc3N1ZXJJbnRlcmZhY2VzKFxuYnJhbmQsXG5hc3NldEtpbmQsXG5hbW91bnRTaGFwZSk7XG5cblxuY29uc3QgbWFrZVBheW1lbnQ9cHJlcGFyZVBheW1lbnRLaW5kKGlzc3VlclpvbmUsbmFtZSxicmFuZCxQYXltZW50SSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNodXRkb3duTGVkZ2VyV2l0aEZhaWx1cmU9KHJlYXNvbik9Pntcbi8vXG4vL1xuaWYob3B0U2h1dGRvd25XaXRoRmFpbHVyZSE9PXVuZGVmaW5lZCl7XG50cnl7XG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKHJlYXNvbik7XG4gfWNhdGNoKGVyckluU2h1dGRvd24pe1xuYW5ub3RhdGVFcnJvcihlcnJJblNodXRkb3duLFggYENhdXNlZCBieTogJHtyZWFzb259YCk7XG50aHJvdyBlcnJJblNodXRkb3duO1xuIH1cbiB9XG50aHJvdyByZWFzb247XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBheW1lbnRMZWRnZXI9aXNzdWVyWm9uZS53ZWFrTWFwU3RvcmUoJ3BheW1lbnRMZWRnZXInLHtcbnZhbHVlU2hhcGU6YW1vdW50U2hhcGV9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwYXltZW50UmVjb3ZlcnlTZXRzPWlzc3VlclpvbmUud2Vha01hcFN0b3JlKCdwYXltZW50UmVjb3ZlcnlTZXRzJyk7XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgaW5pdFBheW1lbnQ9KHBheW1lbnQsYW1vdW50LG9wdFJlY292ZXJ5U2V0PXVuZGVmaW5lZCk9PntcbmlmKHJlY292ZXJ5U2V0c1N0YXRlPT09J25vUmVjb3ZlcnlTZXRzJyl7XG5vcHRSZWNvdmVyeVNldD09PXVuZGVmaW5lZHx8XG5GYWlsIGB3aGVuIHJlY292ZXJTZXRzU3RhdGUgPT09ICdub1JlY292ZXJ5U2V0cycsIG9wdFJlY292ZXJ5U2V0IG11c3QgYmUgZW1wdHlgO1xuIH1cbmlmKG9wdFJlY292ZXJ5U2V0IT09dW5kZWZpbmVkJiYhQW1vdW50TWF0aC5pc0VtcHR5KGFtb3VudCkpe1xub3B0UmVjb3ZlcnlTZXQuYWRkKHBheW1lbnQpO1xucGF5bWVudFJlY292ZXJ5U2V0cy5pbml0KHBheW1lbnQsb3B0UmVjb3ZlcnlTZXQpO1xuIH1cbnBheW1lbnRMZWRnZXIuaW5pdChwYXltZW50LGFtb3VudCk7XG4gfTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGRlbGV0ZVBheW1lbnQ9KHBheW1lbnQpPT57XG5wYXltZW50TGVkZ2VyLmRlbGV0ZShwYXltZW50KTtcbmlmKHBheW1lbnRSZWNvdmVyeVNldHMuaGFzKHBheW1lbnQpKXtcbmNvbnN0IHJlY292ZXJ5U2V0PXBheW1lbnRSZWNvdmVyeVNldHMuZ2V0KHBheW1lbnQpO1xucGF5bWVudFJlY292ZXJ5U2V0cy5kZWxldGUocGF5bWVudCk7XG5yZWNvdmVyeVNldC5kZWxldGUocGF5bWVudCk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29lcmNlPShhbGxlZ2VkQW1vdW50KT0+QW1vdW50TWF0aC5jb2VyY2UoYnJhbmQsYWxsZWdlZEFtb3VudCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgYXNzZXJ0QW1vdW50Q29uc2lzdGVudD0ocGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUpPT57XG5pZihvcHRBbW91bnRTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2gocGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUsJ2Ftb3VudCcpO1xuIH1cbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBhc3NlcnRMaXZlUGF5bWVudD0ocGF5bWVudCk9PntcbnBheW1lbnRMZWRnZXIuaGFzKHBheW1lbnQpfHxcbkZhaWwgYCR7cGF5bWVudH0gd2FzIG5vdCBhIGxpdmUgcGF5bWVudCBmb3IgYnJhbmQgJHtxKFxuYnJhbmQpXG4gfS4gSXQgY291bGQgYmUgYSB1c2VkLXVwIHBheW1lbnQsIGEgcGF5bWVudCBmb3IgYW5vdGhlciBicmFuZCwgb3IgaXQgbWlnaHQgbm90IGJlIGEgcGF5bWVudCBhdCBhbGwuYDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlcG9zaXRJbnRlcm5hbD0oXG5iYWxhbmNlU3RvcmUsXG5zcmNQYXltZW50LFxub3B0QW1vdW50U2hhcGU9dW5kZWZpbmVkKT0+XG57XG4haXNQcm9taXNlKHNyY1BheW1lbnQpfHxcbmFzc2VydC5mYWlsKFxuIGBkZXBvc2l0IGRvZXMgbm90IGFjY2VwdCBwcm9taXNlcyBhcyBmaXJzdCBhcmd1bWVudC4gSW5zdGVhZCBvZiBwYXNzaW5nIHRoZSBwcm9taXNlIChkZXBvc2l0KHBheW1lbnRQcm9taXNlKSksIGNvbnNpZGVyIHVud3JhcHBpbmcgdGhlIHByb21pc2UgZmlyc3Q6IEUud2hlbihwYXltZW50UHJvbWlzZSwgKGFjdHVhbFBheW1lbnQgPT4gZGVwb3NpdChhY3R1YWxQYXltZW50KSlgLFxuVHlwZUVycm9yKTtcblxuYXNzZXJ0TGl2ZVBheW1lbnQoc3JjUGF5bWVudCk7XG5jb25zdCBzcmNQYXltZW50QmFsYW5jZT1wYXltZW50TGVkZ2VyLmdldChzcmNQYXltZW50KTtcbmFzc2VydEFtb3VudENvbnNpc3RlbnQoc3JjUGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUpO1xudHJ5e1xuLy9cbi8vXG4vL1xuZGVsZXRlUGF5bWVudChzcmNQYXltZW50KTtcbmJhbGFuY2VTdG9yZS5pbmNyZW1lbnQoc3JjUGF5bWVudEJhbGFuY2UpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbnJldHVybiBzcmNQYXltZW50QmFsYW5jZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHdpdGhkcmF3SW50ZXJuYWw9KGJhbGFuY2VTdG9yZSxhbW91bnQscmVjb3ZlcnlTZXQ9dW5kZWZpbmVkKT0+e1xuYW1vdW50PWNvZXJjZShhbW91bnQpO1xuY29uc3QgcGF5bWVudD1tYWtlUGF5bWVudCgpO1xuLy9cbi8vXG5iYWxhbmNlU3RvcmUuZGVjcmVtZW50KGFtb3VudCl8fFxuRmFpbCBgV2l0aGRyYXdhbCBvZiAke2Ftb3VudH0gZmFpbGVkIGJlY2F1c2UgdGhlIHB1cnNlIG9ubHkgY29udGFpbmVkICR7YmFsYW5jZVN0b3JlLmdldEFtb3VudCgpfWA7XG50cnl7XG5pbml0UGF5bWVudChwYXltZW50LGFtb3VudCxyZWNvdmVyeVNldCk7XG4gfWNhdGNoKGVycil7XG5zaHV0ZG93bkxlZGdlcldpdGhGYWlsdXJlKGVycik7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIHBheW1lbnQ7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBtYWtlRW1wdHlQdXJzZT1wcmVwYXJlUHVyc2VLaW5kKFxuaXNzdWVyWm9uZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5icmFuZCxcblB1cnNlSUtpdCxcbmhhcmRlbih7XG5kZXBvc2l0SW50ZXJuYWwsXG53aXRoZHJhd0ludGVybmFsfSksXG5cbnJlY292ZXJ5U2V0c1N0YXRlLFxucGF5bWVudFJlY292ZXJ5U2V0cyk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgaXNzdWVyPWlzc3VlclpvbmUuZXhvKCBgJHtuYW1lfSBpc3N1ZXJgLElzc3Vlckkse1xuZ2V0QnJhbmQoKXtcbnJldHVybiBicmFuZDtcbiB9LFxuZ2V0QWxsZWdlZE5hbWUoKXtcbnJldHVybiBuYW1lO1xuIH0sXG5nZXRBc3NldEtpbmQoKXtcbnJldHVybiBhc3NldEtpbmQ7XG4gfSxcbmdldERpc3BsYXlJbmZvKCl7XG5yZXR1cm4gZGlzcGxheUluZm87XG4gfSxcbm1ha2VFbXB0eVB1cnNlKCl7XG5yZXR1cm4gbWFrZUVtcHR5UHVyc2UoKTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5pc0xpdmUocGF5bWVudCl7XG4vL1xucmV0dXJuIHBheW1lbnRMZWRnZXIuaGFzKHBheW1lbnQpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldEFtb3VudE9mKHBheW1lbnQpe1xuLy9cbmFzc2VydExpdmVQYXltZW50KHBheW1lbnQpO1xucmV0dXJuIHBheW1lbnRMZWRnZXIuZ2V0KHBheW1lbnQpO1xuIH0sXG4vKlxuXG5cbiAgICAgKi9cbmJ1cm4ocGF5bWVudCxvcHRBbW91bnRTaGFwZT11bmRlZmluZWQpe1xuLy9cbmFzc2VydExpdmVQYXltZW50KHBheW1lbnQpO1xuY29uc3QgcGF5bWVudEJhbGFuY2U9cGF5bWVudExlZGdlci5nZXQocGF5bWVudCk7XG5hc3NlcnRBbW91bnRDb25zaXN0ZW50KHBheW1lbnRCYWxhbmNlLG9wdEFtb3VudFNoYXBlKTtcbnRyeXtcbi8vXG5kZWxldGVQYXltZW50KHBheW1lbnQpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbnJldHVybiBwYXltZW50QmFsYW5jZTtcbiB9fSk7XG5cblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWludFJlY292ZXJ5UHVyc2U9LyogICAgICAgICAgICAgICAgICAgKi9cbmlzc3VlclpvbmUubWFrZU9uY2UoJ21pbnRSZWNvdmVyeVB1cnNlJywoKT0+bWFrZUVtcHR5UHVyc2UoKSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWludD1pc3N1ZXJab25lLmV4byggYCR7bmFtZX0gbWludGAsTWludEkse1xuZ2V0SXNzdWVyKCl7XG5yZXR1cm4gaXNzdWVyO1xuIH0sXG5taW50UGF5bWVudChuZXdBbW91bnQpe1xubmV3QW1vdW50PWNvZXJjZShuZXdBbW91bnQpO1xubXVzdE1hdGNoKG5ld0Ftb3VudCxhbW91bnRTaGFwZSwnbWludGVkIGFtb3VudCcpO1xuLy9cbi8vXG5jb25zdCByYXdQYXltZW50PW1ha2VQYXltZW50KCk7XG5pbml0UGF5bWVudChyYXdQYXltZW50LG5ld0Ftb3VudCx1bmRlZmluZWQpO1xuXG5jb25zdCBtaW50UmVjb3ZlcnlQdXJzZUJlZm9yZT1taW50UmVjb3ZlcnlQdXJzZS5nZXRDdXJyZW50QW1vdW50KCk7XG5taW50UmVjb3ZlcnlQdXJzZS5kZXBvc2l0KHJhd1BheW1lbnQsbmV3QW1vdW50KTtcbmNvbnN0IHBheW1lbnQ9bWludFJlY292ZXJ5UHVyc2Uud2l0aGRyYXcobmV3QW1vdW50KTtcbmNvbnN0IG1pbnRSZWNvdmVyeVB1cnNlQWZ0ZXI9bWludFJlY292ZXJ5UHVyc2UuZ2V0Q3VycmVudEFtb3VudCgpO1xuYXNzZXJ0KGtleUVRKG1pbnRSZWNvdmVyeVB1cnNlQmVmb3JlLG1pbnRSZWNvdmVyeVB1cnNlQWZ0ZXIpKTtcbnJldHVybiBwYXltZW50O1xuIH19KTtcblxuXG5jb25zdCBpc3N1ZXJLaXQ9aGFyZGVuKHtpc3N1ZXIsbWludCxicmFuZCxtaW50UmVjb3ZlcnlQdXJzZX0pO1xucmV0dXJuIGlzc3VlcktpdDtcbiB9OyRozY9fb25jZS5wcmVwYXJlUGF5bWVudExlZGdlcihwcmVwYXJlUGF5bWVudExlZGdlcik7XG5oYXJkZW4ocHJlcGFyZVBheW1lbnRMZWRnZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicHJlcGFyZVBheW1lbnRMZWRnZXIiOlsicHJlcGFyZVBheW1lbnRMZWRnZXIiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAejD3iekQAADpEAAAIQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wdXJzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiLi9hbW91bnRNYXRoLmpzIiwiLi90cmFuc2llbnROb3RpZmllci5qcyIsIi4vYW1vdW50U3RvcmUuanMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUHVyc2VLaW5kIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxNLG1ha2VDb3B5U2V0LEFtb3VudE1hdGgsbWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0LG1ha2VBbW91bnRTdG9yZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5U2V0XCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5U2V0ID0gJGjNj19hKV1dXV0sW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXSxbXCIuL3RyYW5zaWVudE5vdGlmaWVyLmpzXCIsIFtbXCJtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXRcIiwgWyRozY9fYSA9PiAobWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9hbW91bnRTdG9yZS5qc1wiLCBbW1wibWFrZUFtb3VudFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VBbW91bnRTdG9yZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgRU1QVFlfQ09QWV9TRVQ9bWFrZUNvcHlTZXQoW10pO1xuXG4vL1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUHVyc2VLaW5kPShcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuYnJhbmQsXG5QdXJzZUlLaXQsXG5wdXJzZU1ldGhvZHMsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbnBheW1lbnRSZWNvdmVyeVNldHMpPT5cbntcbmNvbnN0IGFtb3VudFNoYXBlPWJyYW5kLmdldEFtb3VudFNoYXBlKCk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0e3Byb3ZpZGVOb3RpZmllcix1cGRhdGU6dXBkYXRlQmFsYW5jZX09bWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZVJlY292ZXJ5U2V0PShzdGF0ZSk9PntcbmNvbnN0e3JlY292ZXJ5U2V0fT1zdGF0ZTtcbmlmKHJlY292ZXJ5U2V0c1N0YXRlPT09J2hhc1JlY292ZXJ5U2V0cycpe1xucmV0dXJuIHJlY292ZXJ5U2V0O1xuIH1lbHNle1xucmVjb3ZlcnlTZXRzU3RhdGU9PT0nbm9SZWNvdmVyeVNldHMnfHxcbkZhaWwgYHJlY292ZXJTZXRzU3RhdGUgbXVzdCBiZSBub1JlY292ZXJ5U2V0cyBpZiBpdCBpc24ndCBoYXNSZWNvdmVyU2V0c2A7XG5wYXltZW50UmVjb3ZlcnlTZXRzIT09dW5kZWZpbmVkfHxcbkZhaWwgYHBheW1lbnRSZWNvdmVyeVNldHMgbXVzdCBhbHdheXMgYmUgZGVmaW5lZGA7XG5yZWNvdmVyeVNldC5nZXRTaXplKCk9PT0wfHxcbkZhaWwgYFdpdGggbm9SZWNvdmVyeVNldHMsIHJlY292ZXJ5U2V0IG11c3QgYmUgZW1wdHlgO1xuXG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdHtkZXBvc2l0SW50ZXJuYWwsd2l0aGRyYXdJbnRlcm5hbH09cHVyc2VNZXRob2RzO1xuY29uc3QgbWFrZVB1cnNlS2l0PWlzc3VlclpvbmUuZXhvQ2xhc3NLaXQoXG4gYCR7bmFtZX0gUHVyc2VgLFxuUHVyc2VJS2l0LFxuKCk9PntcbmNvbnN0IGN1cnJlbnRCYWxhbmNlPUFtb3VudE1hdGgubWFrZUVtcHR5KGJyYW5kLGFzc2V0S2luZCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWNvdmVyeVNldD1pc3N1ZXJab25lLmRldGFjaGVkKCkuc2V0U3RvcmUoJ3JlY292ZXJ5IHNldCcpO1xuXG5yZXR1cm57XG5jdXJyZW50QmFsYW5jZSxcbnJlY292ZXJ5U2V0fTtcblxuIH0sXG57XG5wdXJzZTp7XG5kZXBvc2l0KHNyY1BheW1lbnQsb3B0QW1vdW50U2hhcGU9dW5kZWZpbmVkKXtcbi8vXG4vL1xuY29uc3R7c3RhdGV9PXRoaXM7XG5jb25zdHtwdXJzZX09dGhpcy5mYWNldHM7XG5jb25zdCBiYWxhbmNlU3RvcmU9bWFrZUFtb3VudFN0b3JlKHN0YXRlLCdjdXJyZW50QmFsYW5jZScpO1xuLy9cbmNvbnN0IHNyY1BheW1lbnRCYWxhbmNlPWRlcG9zaXRJbnRlcm5hbChcbmJhbGFuY2VTdG9yZSxcbnNyY1BheW1lbnQsXG5vcHRBbW91bnRTaGFwZSk7XG5cbnVwZGF0ZUJhbGFuY2UocHVyc2UsYmFsYW5jZVN0b3JlLmdldEFtb3VudCgpKTtcbnJldHVybiBzcmNQYXltZW50QmFsYW5jZTtcbiB9LFxud2l0aGRyYXcoYW1vdW50KXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3R7cHVyc2V9PXRoaXMuZmFjZXRzO1xuXG5jb25zdCBvcHRSZWNvdmVyeVNldD1tYXliZVJlY292ZXJ5U2V0KHN0YXRlKTtcbmNvbnN0IGJhbGFuY2VTdG9yZT1tYWtlQW1vdW50U3RvcmUoc3RhdGUsJ2N1cnJlbnRCYWxhbmNlJyk7XG4vL1xuY29uc3QgcGF5bWVudD13aXRoZHJhd0ludGVybmFsKFxuYmFsYW5jZVN0b3JlLFxuYW1vdW50LFxub3B0UmVjb3ZlcnlTZXQpO1xuXG51cGRhdGVCYWxhbmNlKHB1cnNlLGJhbGFuY2VTdG9yZS5nZXRBbW91bnQoKSk7XG5yZXR1cm4gcGF5bWVudDtcbiB9LFxuZ2V0Q3VycmVudEFtb3VudCgpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5jb25zdCBiYWxhbmNlU3RvcmU9bWFrZUFtb3VudFN0b3JlKHN0YXRlLCdjdXJyZW50QmFsYW5jZScpO1xucmV0dXJuIGJhbGFuY2VTdG9yZS5nZXRBbW91bnQoKTtcbiB9LFxuZ2V0Q3VycmVudEFtb3VudE5vdGlmaWVyKCl7XG5yZXR1cm4gcHJvdmlkZU5vdGlmaWVyKHRoaXMuZmFjZXRzLnB1cnNlKTtcbiB9LFxuZ2V0QWxsZWdlZEJyYW5kKCl7XG5yZXR1cm4gYnJhbmQ7XG4gfSxcblxuZ2V0RGVwb3NpdEZhY2V0KCl7XG5yZXR1cm4gdGhpcy5mYWNldHMuZGVwb3NpdEZhY2V0O1xuIH0sXG5cbmdldFJlY292ZXJ5U2V0KCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0IG9wdFJlY292ZXJ5U2V0PW1heWJlUmVjb3ZlcnlTZXQoc3RhdGUpO1xuaWYob3B0UmVjb3ZlcnlTZXQ9PT11bmRlZmluZWQpe1xucmV0dXJuIEVNUFRZX0NPUFlfU0VUO1xuIH1cbnJldHVybiBvcHRSZWNvdmVyeVNldC5zbmFwc2hvdCgpO1xuIH0sXG5yZWNvdmVyQWxsKCl7XG5jb25zdHtzdGF0ZSxmYWNldHN9PXRoaXM7XG5sZXQgYW1vdW50PUFtb3VudE1hdGgubWFrZUVtcHR5KGJyYW5kLGFzc2V0S2luZCk7XG5jb25zdCBvcHRSZWNvdmVyeVNldD1tYXliZVJlY292ZXJ5U2V0KHN0YXRlKTtcbmlmKG9wdFJlY292ZXJ5U2V0PT09dW5kZWZpbmVkKXtcbnJldHVybiBhbW91bnQ7Ly9cbiB9XG5mb3IoY29uc3QgcGF5bWVudCBvZiBvcHRSZWNvdmVyeVNldC5rZXlzKCkpe1xuLy9cbi8vXG5jb25zdCBkZWx0YT1mYWNldHMucHVyc2UuZGVwb3NpdChwYXltZW50KTtcbmFtb3VudD1BbW91bnRNYXRoLmFkZChhbW91bnQsZGVsdGEsYnJhbmQpO1xuIH1cbm9wdFJlY292ZXJ5U2V0LmdldFNpemUoKT09PTB8fFxuRmFpbCBgaW50ZXJuYWw6IFJlbWFpbmluZyB1bnJlY292ZXJlZCBwYXltZW50czogJHtmYWNldHMucHVyc2UuZ2V0UmVjb3ZlcnlTZXQoKX1gO1xucmV0dXJuIGFtb3VudDtcbiB9fSxcblxuZGVwb3NpdEZhY2V0OntcbnJlY2VpdmUoLi4uYXJncyl7XG5yZXR1cm4gdGhpcy5mYWNldHMucHVyc2UuZGVwb3NpdCguLi5hcmdzKTtcbiB9fX0sXG5cblxue1xuc3RhdGVTaGFwZTp7XG5jdXJyZW50QmFsYW5jZTphbW91bnRTaGFwZSxcbnJlY292ZXJ5U2V0Ok0ucmVtb3RhYmxlKCdyZWNvdmVyeVNldCcpfX0pO1xuXG5cblxucmV0dXJuKCk9Pm1ha2VQdXJzZUtpdCgpLnB1cnNlO1xuIH07JGjNj19vbmNlLnByZXBhcmVQdXJzZUtpbmQocHJlcGFyZVB1cnNlS2luZCk7XG5oYXJkZW4ocHJlcGFyZVB1cnNlS2luZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwcmVwYXJlUHVyc2VLaW5kIjpbInByZXBhcmVQdXJzZUtpbmQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAMcOXKwUGAAAFBgAALQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy90cmFuc2llbnROb3RpZmllci5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvbm90aWZpZXIiXSwiZXhwb3J0cyI6WyJtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlLHByb3ZpZGVMYXp5LG1ha2VOb3RpZmllcktpdDskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcInByb3ZpZGVMYXp5XCIsIFskaM2PX2EgPT4gKHByb3ZpZGVMYXp5ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wibWFrZU5vdGlmaWVyS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VOb3RpZmllcktpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLy9cbi8vXG5jb25zdCAgICAgICAgbWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0cmFuc2llbnROb3RpZmVyS2l0cz1tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKFxuJ3RyYW5zaWVudE5vdGlmZXJLaXRzJyk7XG5cblxuY29uc3QgcHJvdmlkZU5vdGlmaWVyS2l0PShrZXkpPT5cbnByb3ZpZGVMYXp5KHRyYW5zaWVudE5vdGlmZXJLaXRzLGtleSwoKT0+XG5tYWtlTm90aWZpZXJLaXQoa2V5LmdldEN1cnJlbnRBbW91bnQoKSkpO1xuXG5cbmNvbnN0IHByb3ZpZGVOb3RpZmllcj0oa2V5KT0+cHJvdmlkZU5vdGlmaWVyS2l0KGtleSkubm90aWZpZXI7XG5jb25zdCB1cGRhdGU9KGtleSxuZXdWYWx1ZSk9PntcbmlmKHRyYW5zaWVudE5vdGlmZXJLaXRzLmhhcyhrZXkpKXtcbmNvbnN0e3VwZGF0ZXJ9PXRyYW5zaWVudE5vdGlmZXJLaXRzLmdldChrZXkpO1xudXBkYXRlci51cGRhdGVTdGF0ZShuZXdWYWx1ZSk7XG4gfVxuIH07XG5cbnJldHVybntwcm92aWRlTm90aWZpZXIsdXBkYXRlfTtcbiB9OyRozY9fb25jZS5tYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQobWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KTtcbmhhcmRlbihtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0IjpbIm1ha2VUcmFuc2llbnROb3RpZmllcktpdCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADB3r+Y+xgAAPsYAAAmAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJBbW91bnRQYXR0ZXJuU2hhcGUiLCJBbW91bnRTaGFwZSIsIkFzc2V0S2luZFNoYXBlIiwiQnJhbmRJIiwiQnJhbmRTaGFwZSIsIkRlcG9zaXRGYWNldFNoYXBlIiwiRGlzcGxheUluZm9TaGFwZSIsIklzc3VlcktpdFNoYXBlIiwiSXNzdWVyU2hhcGUiLCJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiLCJNaW50U2hhcGUiLCJOb3RpZmllclNoYXBlIiwiUGF5bWVudFNoYXBlIiwiUHVyc2VTaGFwZSIsIlJhdGlvU2hhcGUiLCJpc0NvcHlCYWdWYWx1ZSIsImlzQ29weVNldFZhbHVlIiwiaXNOYXRWYWx1ZSIsImlzU2V0VmFsdWUiLCJtYWtlSXNzdWVySW50ZXJmYWNlcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE0sbWF0Y2hlcyxnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXSxbXCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCAgICAgICAgQnJhbmRTaGFwZT1NLnJlbW90YWJsZSgnQnJhbmQnKTskaM2PX29uY2UuQnJhbmRTaGFwZShCcmFuZFNoYXBlKTtcbmNvbnN0ICAgICAgICBJc3N1ZXJTaGFwZT1NLnJlbW90YWJsZSgnSXNzdWVyJyk7JGjNj19vbmNlLklzc3VlclNoYXBlKElzc3VlclNoYXBlKTtcbmNvbnN0ICAgICAgICBQYXltZW50U2hhcGU9TS5yZW1vdGFibGUoJ1BheW1lbnQnKTskaM2PX29uY2UuUGF5bWVudFNoYXBlKFBheW1lbnRTaGFwZSk7XG5jb25zdCAgICAgICAgUHVyc2VTaGFwZT1NLnJlbW90YWJsZSgnUHVyc2UnKTskaM2PX29uY2UuUHVyc2VTaGFwZShQdXJzZVNoYXBlKTtcbmNvbnN0ICAgICAgICBEZXBvc2l0RmFjZXRTaGFwZT1NLnJlbW90YWJsZSgnRGVwb3NpdEZhY2V0Jyk7JGjNj19vbmNlLkRlcG9zaXRGYWNldFNoYXBlKERlcG9zaXRGYWNldFNoYXBlKTtcbmNvbnN0ICAgICAgICBOb3RpZmllclNoYXBlPU0ucmVtb3RhYmxlKCdOb3RpZmllcicpOyRozY9fb25jZS5Ob3RpZmllclNoYXBlKE5vdGlmaWVyU2hhcGUpO1xuY29uc3QgICAgICAgIE1pbnRTaGFwZT1NLnJlbW90YWJsZSgnTWludCcpO1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuTWludFNoYXBlKE1pbnRTaGFwZSk7XG5jb25zdCBOYXRWYWx1ZVNoYXBlPU0ubmF0KCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBDb3B5U2V0VmFsdWVTaGFwZT1NLnNldCgpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgU2V0VmFsdWVTaGFwZT1NLmFycmF5T2YoTS5rZXkoKSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IENvcHlCYWdWYWx1ZVNoYXBlPU0uYmFnKCk7XG5cbmNvbnN0IEFtb3VudFZhbHVlU2hhcGU9TS5vcihcbk5hdFZhbHVlU2hhcGUsXG5Db3B5U2V0VmFsdWVTaGFwZSxcblNldFZhbHVlU2hhcGUsXG5Db3B5QmFnVmFsdWVTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIEFtb3VudFNoYXBlPXticmFuZDpCcmFuZFNoYXBlLHZhbHVlOkFtb3VudFZhbHVlU2hhcGV9OyRozY9fb25jZS5BbW91bnRTaGFwZShBbW91bnRTaGFwZSk7XG5oYXJkZW4oQW1vdW50U2hhcGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQW1vdW50UGF0dGVyblNoYXBlPU0ucGF0dGVybigpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLkFtb3VudFBhdHRlcm5TaGFwZShBbW91bnRQYXR0ZXJuU2hhcGUpO1xuY29uc3QgICAgICAgIFJhdGlvU2hhcGU9e251bWVyYXRvcjpBbW91bnRTaGFwZSxkZW5vbWluYXRvcjpBbW91bnRTaGFwZX07JGjNj19vbmNlLlJhdGlvU2hhcGUoUmF0aW9TaGFwZSk7XG5oYXJkZW4oUmF0aW9TaGFwZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzTmF0VmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxOYXRWYWx1ZVNoYXBlKTskaM2PX29uY2UuaXNOYXRWYWx1ZShpc05hdFZhbHVlKTtcbmhhcmRlbihpc05hdFZhbHVlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5U2V0VmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxDb3B5U2V0VmFsdWVTaGFwZSk7JGjNj19vbmNlLmlzQ29weVNldFZhbHVlKGlzQ29weVNldFZhbHVlKTtcbmhhcmRlbihpc0NvcHlTZXRWYWx1ZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzU2V0VmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxTZXRWYWx1ZVNoYXBlKTskaM2PX29uY2UuaXNTZXRWYWx1ZShpc1NldFZhbHVlKTtcbmhhcmRlbihpc1NldFZhbHVlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5QmFnVmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxDb3B5QmFnVmFsdWVTaGFwZSk7JGjNj19vbmNlLmlzQ29weUJhZ1ZhbHVlKGlzQ29weUJhZ1ZhbHVlKTtcbmhhcmRlbihpc0NvcHlCYWdWYWx1ZSk7XG5cbi8vXG5jb25zdCAgICAgICAgTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTPTEwMDskaM2PX29uY2UuTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTKE1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyk7XG5cbmNvbnN0ICAgICAgICBBc3NldEtpbmRTaGFwZT1NLm9yKCduYXQnLCdzZXQnLCdjb3B5U2V0JywnY29weUJhZycpOyRozY9fb25jZS5Bc3NldEtpbmRTaGFwZShBc3NldEtpbmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBEaXNwbGF5SW5mb1NoYXBlPU0uc3BsaXRSZWNvcmQoXG57fSxcbntcbmRlY2ltYWxQbGFjZXM6TS5hbmQoXG5NLmd0ZSgtTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTKSxcbk0ubHRlKE1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUykpLFxuXG5hc3NldEtpbmQ6QXNzZXRLaW5kU2hhcGV9LFxuXG57XG4vL1xuLy9cbn0pOyRozY9fb25jZS5EaXNwbGF5SW5mb1NoYXBlKERpc3BsYXlJbmZvU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBJc3N1ZXJLaXRTaGFwZT17XG5icmFuZDpCcmFuZFNoYXBlLFxubWludDpNaW50U2hhcGUsXG5taW50UmVjb3ZlcnlQdXJzZTpQdXJzZVNoYXBlLFxuaXNzdWVyOklzc3VlclNoYXBlLFxuZGlzcGxheUluZm86RGlzcGxheUluZm9TaGFwZX07JGjNj19vbmNlLklzc3VlcktpdFNoYXBlKElzc3VlcktpdFNoYXBlKTtcblxuaGFyZGVuKElzc3VlcktpdFNoYXBlKTtcblxuLy9cblxuY29uc3QgICAgICAgIEJyYW5kST1NLmludGVyZmFjZSgnQnJhbmQnLHtcbmlzTXlJc3N1ZXI6TS5jYWxsV2hlbihNLmF3YWl0KElzc3VlclNoYXBlKSkucmV0dXJucyhNLmJvb2xlYW4oKSksXG5nZXRBbGxlZ2VkTmFtZTpNLmNhbGwoKS5yZXR1cm5zKE0uc3RyaW5nKCkpLFxuZ2V0RGlzcGxheUluZm86TS5jYWxsKCkucmV0dXJucyhEaXNwbGF5SW5mb1NoYXBlKSxcbmdldEFtb3VudFNoYXBlOk0uY2FsbCgpLnJldHVybnMoTS5wYXR0ZXJuKCkpfSk7XG5cblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5CcmFuZEkoQnJhbmRJKTtcbmNvbnN0ICAgICAgICBtYWtlSXNzdWVySW50ZXJmYWNlcz0oXG5icmFuZFNoYXBlPUJyYW5kU2hhcGUsXG5hc3NldEtpbmRTaGFwZT1Bc3NldEtpbmRTaGFwZSxcbmFtb3VudFNoYXBlPUFtb3VudFNoYXBlKT0+XG57XG5jb25zdCBJc3N1ZXJJPU0uaW50ZXJmYWNlKCdJc3N1ZXInLHtcbmdldEJyYW5kOk0uY2FsbCgpLnJldHVybnMoYnJhbmRTaGFwZSksXG5nZXRBbGxlZ2VkTmFtZTpNLmNhbGwoKS5yZXR1cm5zKE0uc3RyaW5nKCkpLFxuZ2V0QXNzZXRLaW5kOk0uY2FsbCgpLnJldHVybnMoYXNzZXRLaW5kU2hhcGUpLFxuZ2V0RGlzcGxheUluZm86TS5jYWxsKCkucmV0dXJucyhEaXNwbGF5SW5mb1NoYXBlKSxcbm1ha2VFbXB0eVB1cnNlOk0uY2FsbCgpLnJldHVybnMoUHVyc2VTaGFwZSksXG5cbmlzTGl2ZTpNLmNhbGxXaGVuKE0uYXdhaXQoUGF5bWVudFNoYXBlKSkucmV0dXJucyhNLmJvb2xlYW4oKSksXG5nZXRBbW91bnRPZjpNLmNhbGxXaGVuKE0uYXdhaXQoUGF5bWVudFNoYXBlKSkucmV0dXJucyhhbW91bnRTaGFwZSksXG5idXJuOk0uY2FsbFdoZW4oTS5hd2FpdChQYXltZW50U2hhcGUpKS5cbm9wdGlvbmFsKEFtb3VudFBhdHRlcm5TaGFwZSkuXG5yZXR1cm5zKGFtb3VudFNoYXBlKX0pO1xuXG5cbmNvbnN0IE1pbnRJPU0uaW50ZXJmYWNlKCdNaW50Jyx7XG5nZXRJc3N1ZXI6TS5jYWxsKCkucmV0dXJucyhJc3N1ZXJTaGFwZSksXG5taW50UGF5bWVudDpNLmNhbGwoYW1vdW50U2hhcGUpLnJldHVybnMoUGF5bWVudFNoYXBlKX0pO1xuXG5cbmNvbnN0IFBheW1lbnRJPU0uaW50ZXJmYWNlKCdQYXltZW50Jyx7XG5nZXRBbGxlZ2VkQnJhbmQ6TS5jYWxsKCkucmV0dXJucyhicmFuZFNoYXBlKX0pO1xuXG5cbmNvbnN0IFB1cnNlST1NLmludGVyZmFjZSgnUHVyc2UnLHtcbmdldEFsbGVnZWRCcmFuZDpNLmNhbGwoKS5yZXR1cm5zKGJyYW5kU2hhcGUpLFxuZ2V0Q3VycmVudEFtb3VudDpNLmNhbGwoKS5yZXR1cm5zKGFtb3VudFNoYXBlKSxcbmdldEN1cnJlbnRBbW91bnROb3RpZmllcjpNLmNhbGwoKS5yZXR1cm5zKE5vdGlmaWVyU2hhcGUpLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmRlcG9zaXQ6TS5jYWxsKFBheW1lbnRTaGFwZSkuXG5vcHRpb25hbChBbW91bnRQYXR0ZXJuU2hhcGUpLlxucmV0dXJucyhhbW91bnRTaGFwZSksXG5nZXREZXBvc2l0RmFjZXQ6TS5jYWxsKCkucmV0dXJucyhEZXBvc2l0RmFjZXRTaGFwZSksXG53aXRoZHJhdzpNLmNhbGwoYW1vdW50U2hhcGUpLnJldHVybnMoUGF5bWVudFNoYXBlKSxcbmdldFJlY292ZXJ5U2V0Ok0uY2FsbCgpLnJldHVybnMoTS5zZXRPZihQYXltZW50U2hhcGUpKSxcbnJlY292ZXJBbGw6TS5jYWxsKCkucmV0dXJucyhhbW91bnRTaGFwZSl9KTtcblxuXG5jb25zdCBEZXBvc2l0RmFjZXRJPU0uaW50ZXJmYWNlKCdEZXBvc2l0RmFjZXQnLHtcbnJlY2VpdmU6Z2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKFB1cnNlSSkubWV0aG9kR3VhcmRzLmRlcG9zaXR9KTtcblxuXG5jb25zdCBQdXJzZUlLaXQ9e1xucHVyc2U6UHVyc2VJLFxuZGVwb3NpdEZhY2V0OkRlcG9zaXRGYWNldEl9O1xuXG5oYXJkZW4oUHVyc2VJS2l0KTtcblxucmV0dXJuIGhhcmRlbih7XG5Jc3N1ZXJJLFxuTWludEksXG5QYXltZW50SSxcblB1cnNlSUtpdH0pO1xuXG4gfTskaM2PX29uY2UubWFrZUlzc3VlckludGVyZmFjZXMobWFrZUlzc3VlckludGVyZmFjZXMpO1xuaGFyZGVuKG1ha2VJc3N1ZXJJbnRlcmZhY2VzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkJyYW5kU2hhcGUiOlsiQnJhbmRTaGFwZSJdLCJJc3N1ZXJTaGFwZSI6WyJJc3N1ZXJTaGFwZSJdLCJQYXltZW50U2hhcGUiOlsiUGF5bWVudFNoYXBlIl0sIlB1cnNlU2hhcGUiOlsiUHVyc2VTaGFwZSJdLCJEZXBvc2l0RmFjZXRTaGFwZSI6WyJEZXBvc2l0RmFjZXRTaGFwZSJdLCJOb3RpZmllclNoYXBlIjpbIk5vdGlmaWVyU2hhcGUiXSwiTWludFNoYXBlIjpbIk1pbnRTaGFwZSJdLCJBbW91bnRTaGFwZSI6WyJBbW91bnRTaGFwZSJdLCJBbW91bnRQYXR0ZXJuU2hhcGUiOlsiQW1vdW50UGF0dGVyblNoYXBlIl0sIlJhdGlvU2hhcGUiOlsiUmF0aW9TaGFwZSJdLCJpc05hdFZhbHVlIjpbImlzTmF0VmFsdWUiXSwiaXNDb3B5U2V0VmFsdWUiOlsiaXNDb3B5U2V0VmFsdWUiXSwiaXNTZXRWYWx1ZSI6WyJpc1NldFZhbHVlIl0sImlzQ29weUJhZ1ZhbHVlIjpbImlzQ29weUJhZ1ZhbHVlIl0sIk1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyI6WyJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiXSwiQXNzZXRLaW5kU2hhcGUiOlsiQXNzZXRLaW5kU2hhcGUiXSwiRGlzcGxheUluZm9TaGFwZSI6WyJEaXNwbGF5SW5mb1NoYXBlIl0sIklzc3VlcktpdFNoYXBlIjpbIklzc3VlcktpdFNoYXBlIl0sIkJyYW5kSSI6WyJCcmFuZEkiXSwibWFrZUlzc3VlckludGVyZmFjZXMiOlsibWFrZUlzc3VlckludGVyZmFjZXMiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABURLJnkBAAB5AQAAJwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy90eXBlcy1pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACdrdzfGBoAABgaAAAnAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2NhbGxiYWNrLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbImNhbGxFIiwiY2FsbFN5bmMiLCJpc0NhbGxiYWNrIiwibWFrZUZ1bmN0aW9uQ2FsbGJhY2siLCJtYWtlTWV0aG9kQ2FsbGJhY2siLCJtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2siLCJtYWtlU3luY01ldGhvZENhbGxiYWNrIiwicHJlcGFyZUF0dGVudWF0b3IiLCJwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLG1ha2VFcnJvcixxLEUsaXNPYmplY3QsaXNQYXNzYWJsZVN5bWJvbCxnZXRJbnRlcmZhY2VNZXRob2RLZXlzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImlzUGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoaXNQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZU1ldGhvZEtleXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuY29uc3R7b3duS2V5czpyYXdPd25LZXlzfT1SZWZsZWN0O1xuY29uc3Qgb3duS2V5cz1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yYXdPd25LZXlzO1xuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpc1Byb3BlcnR5S2V5PShrZXkpPT57XG5zd2l0Y2godHlwZW9mIGtleSl7XG5jYXNlJ3N0cmluZyc6XG5jYXNlJ251bWJlcic6XG5jYXNlJ3N5bWJvbCc6XG5yZXR1cm4gdHJ1ZTtcbmRlZmF1bHQ6XG5yZXR1cm4gZmFsc2U7fVxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNhbGxTeW5jPShjYWxsYmFjaywuLi5hcmdzKT0+e1xuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdGFyZ2V0KC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH1cbnJldHVybiB0YXJnZXRbbWV0aG9kTmFtZV0oLi4uYm91bmQsLi4uYXJncyk7XG4gfTskaM2PX29uY2UuY2FsbFN5bmMoY2FsbFN5bmMpO1xuaGFyZGVuKGNhbGxTeW5jKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNhbGxFPShjYWxsYmFjaywuLi5hcmdzKT0+e1xuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gRSh0YXJnZXQpKC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH1cbnJldHVybiBFKHRhcmdldClbbWV0aG9kTmFtZV0oLi4uYm91bmQsLi4uYXJncyk7XG4gfTskaM2PX29uY2UuY2FsbEUoY2FsbEUpO1xuaGFyZGVuKGNhbGxFKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2s9KHRhcmdldCwuLi5ib3VuZCk9PntcbnR5cGVvZiB0YXJnZXQ9PT0nZnVuY3Rpb24nfHxcbkZhaWwgYHN5bmMgZnVuY3Rpb24gY2FsbGJhY2sgdGFyZ2V0IG11c3QgYmUgYSBmdW5jdGlvbjogJHt0YXJnZXR9YDtcbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNiPWhhcmRlbih7dGFyZ2V0LGJvdW5kLGlzU3luYzp0cnVlfSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2sobWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrKTtcbmhhcmRlbihtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VGdW5jdGlvbkNhbGxiYWNrPSh0YXJnZXQsLi4uYm91bmQpPT57XG5pc09iamVjdCh0YXJnZXQpfHxcbkZhaWwgYGZ1bmN0aW9uIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGEgZnVuY3Rpb24gcHJlc2VuY2U6ICR7dGFyZ2V0fWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxib3VuZH0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlRnVuY3Rpb25DYWxsYmFjayhtYWtlRnVuY3Rpb25DYWxsYmFjayk7XG5oYXJkZW4obWFrZUZ1bmN0aW9uQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN5bmNNZXRob2RDYWxsYmFjaz0odGFyZ2V0LG1ldGhvZE5hbWUsLi4uYm91bmQpPT57XG5pc09iamVjdCh0YXJnZXQpfHxcbkZhaWwgYHN5bmMgbWV0aG9kIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGFuIG9iamVjdDogJHt0YXJnZXR9YDtcbnR5cGVvZiBtZXRob2ROYW1lPT09J3N0cmluZyd8fFxuaXNQYXNzYWJsZVN5bWJvbChtZXRob2ROYW1lKXx8XG5GYWlsIGBtZXRob2QgbmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIHBhc3NhYmxlIHN5bWJvbDogJHttZXRob2ROYW1lfWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxtZXRob2ROYW1lLGJvdW5kLGlzU3luYzp0cnVlfSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlU3luY01ldGhvZENhbGxiYWNrKG1ha2VTeW5jTWV0aG9kQ2FsbGJhY2spO1xuaGFyZGVuKG1ha2VTeW5jTWV0aG9kQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1ldGhvZENhbGxiYWNrPSh0YXJnZXQsbWV0aG9kTmFtZSwuLi5ib3VuZCk9PntcbmlzT2JqZWN0KHRhcmdldCl8fEZhaWwgYG1ldGhvZCBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3Q6ICR7dGFyZ2V0fWA7XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSl8fFxuRmFpbCBgbWV0aG9kIG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBwYXNzYWJsZSBzeW1ib2w6ICR7bWV0aG9kTmFtZX1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsbWV0aG9kTmFtZSxib3VuZH0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlTWV0aG9kQ2FsbGJhY2sobWFrZU1ldGhvZENhbGxiYWNrKTtcbmhhcmRlbihtYWtlTWV0aG9kQ2FsbGJhY2spO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ2FsbGJhY2s9KGNhbGxiYWNrKT0+e1xuaWYoIWlzT2JqZWN0KGNhbGxiYWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xucmV0dXJuKFxuaXNPYmplY3QodGFyZ2V0KSYmKFxubWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSkpJiZcbkFycmF5LmlzQXJyYXkoYm91bmQpKTtcblxuIH07JGjNj19vbmNlLmlzQ2FsbGJhY2soaXNDYWxsYmFjayk7XG5oYXJkZW4oaXNDYWxsYmFjayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlQXR0ZW51YXRvcj0oXG56b25lLFxubWV0aG9kTmFtZXMsXG57aW50ZXJmYWNlR3VhcmQsdGFnPSdBdHRlbnVhdG9yJ309e30pPT5cbntcbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ldGhvZHM9LyogICAgICAgICAgICAgICAgICAqL1xuZnJvbUVudHJpZXMoXG5tZXRob2ROYW1lcy5tYXAoKGtleSk9Pntcbi8vXG5pZighaXNQcm9wZXJ0eUtleShrZXkpKXtcbnRocm93IEZhaWwgYGtleSAke3Eoa2V5KX0gaXMgbm90IGEgUHJvcGVydHlLZXlgO1xuIH1cblxuY29uc3QgbT0vKiAgICAgICAgICAgICAgICAgICove1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgKi9cbltrZXldKC4uLmFyZ3Mpe1xuLy9cbmNvbnN0IGNiPXRoaXMuc3RhdGUuY2JzW2tleV07XG5pZighY2Ipe1xuY29uc3QgZXJyPW1ha2VFcnJvciggYHVuaW1wbGVtZW50ZWQgJHtxKHRhZyl9IG1ldGhvZCAke3Eoa2V5KX1gKTtcbmlmKHRoaXMuc3RhdGUuaXNTeW5jKXtcbnRocm93IGVycjtcbiB9XG5yZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiB9XG5pZihjYi5pc1N5bmMpe1xucmV0dXJuIGNhbGxTeW5jKGNiLC4uLmFyZ3MpO1xuIH1cbnJldHVybiBjYWxsRShjYiwuLi5hcmdzKTtcbiB9fVtcbmtleV07XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICovW2tleSxtXSk7XG4gfSkpO1xuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZUF0dGVudWF0b3I9em9uZS5leG9DbGFzcyhcbnRhZyxcbmludGVyZmFjZUd1YXJkLFxuLypcblxuXG5cblxuICAgICAqL1xuKHtcbnRhcmdldD1udWxsLFxuaXNTeW5jPWZhbHNlLFxub3ZlcnJpZGVzPS8qICAgICAgICAgICAgICAgICAgICAqL3t9fSk9Plxue1xuY29uc3QgY2JzPS8qICAgICAgICAgICAgICAgICAgICAqL3t9O1xuXG5jb25zdCByZW1haW5pbmc9bmV3IFNldChtZXRob2ROYW1lcyk7XG5mb3IoY29uc3Qga2V5IG9mIG93bktleXMob3ZlcnJpZGVzKSl7XG5yZW1haW5pbmcuaGFzKGtleSl8fFxuRmFpbCBgJHtxKHRhZyl9IG92ZXJyaWRlc1ske3Eoa2V5KX1dIG5vdCBhbGxvd2VkIGJ5IG1ldGhvZE5hbWVzYDtcblxucmVtYWluaW5nLmRlbGV0ZShrZXkpO1xuY29uc3QgY2I9b3ZlcnJpZGVzW2tleV07XG5jYj09bnVsbHx8XG5pc0NhbGxiYWNrKGNiKXx8XG5GYWlsIGAke3EodGFnKX0gb3ZlcnJpZGVzWyR7cShrZXkpfV0gaXMgbm90IGEgY2FsbGJhY2s7IGdvdCAke2NifWA7XG5jYnNba2V5XT1jYjtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIHJlbWFpbmluZyl7XG5pZihpc1N5bmMpe1xuY2JzW2tleV09bWFrZVN5bmNNZXRob2RDYWxsYmFjayh0YXJnZXQsa2V5KTtcbiB9ZWxzZXtcbmNic1trZXldPW1ha2VNZXRob2RDYWxsYmFjayh0YXJnZXQsa2V5KTtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7Y2JzLGlzU3luY30pO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICovbWV0aG9kcyk7XG5cbnJldHVybiBtYWtlQXR0ZW51YXRvcjtcbiB9OyRozY9fb25jZS5wcmVwYXJlQXR0ZW51YXRvcihwcmVwYXJlQXR0ZW51YXRvcik7XG5oYXJkZW4ocHJlcGFyZUF0dGVudWF0b3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3I9KHpvbmUsaW50ZXJmYWNlR3VhcmQsb3B0cz17fSk9PntcbmNvbnN0IG1ldGhvZE5hbWVzPWdldEludGVyZmFjZU1ldGhvZEtleXMoaW50ZXJmYWNlR3VhcmQpO1xuY29uc3QgbWFrZUF0dGVudWF0b3I9cHJlcGFyZUF0dGVudWF0b3Ioem9uZSxtZXRob2ROYW1lcyx7XG4uLi5vcHRzLFxuaW50ZXJmYWNlR3VhcmR9KTtcblxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZUF0dGVudWF0b3IpO1xuIH07JGjNj19vbmNlLnByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcihwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IpO1xuaGFyZGVuKHByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjYWxsU3luYyI6WyJjYWxsU3luYyJdLCJjYWxsRSI6WyJjYWxsRSJdLCJtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2siOlsibWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrIl0sIm1ha2VGdW5jdGlvbkNhbGxiYWNrIjpbIm1ha2VGdW5jdGlvbkNhbGxiYWNrIl0sIm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2siOlsibWFrZVN5bmNNZXRob2RDYWxsYmFjayJdLCJtYWtlTWV0aG9kQ2FsbGJhY2siOlsibWFrZU1ldGhvZENhbGxiYWNrIl0sImlzQ2FsbGJhY2siOlsiaXNDYWxsYmFjayJdLCJwcmVwYXJlQXR0ZW51YXRvciI6WyJwcmVwYXJlQXR0ZW51YXRvciJdLCJwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IiOlsicHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHPQXuH8BQAA/AUAACUAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvY29uZmlnLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJCcmlkZ2VJZCIsIkNvc21vc0luaXRLZXlUb0JyaWRnZUlkIiwiVkJhbmtBY2NvdW50IiwiV2FsbGV0TmFtZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgQnJpZGdlSWQ9LyogICAgICAgICAgICAgICAgKi97XG5CQU5LOidiYW5rJyxcbkNPUkU6J2NvcmUnLFxuRElCQzonZGliYycsXG5TVE9SQUdFOidzdG9yYWdlJyxcblBST1ZJU0lPTjoncHJvdmlzaW9uJyxcblBST1ZJU0lPTl9TTUFSVF9XQUxMRVQ6J3Byb3Zpc2lvbldhbGxldCcsXG5WTE9DQUxDSEFJTjondmxvY2FsY2hhaW4nLFxuVlRSQU5TRkVSOid2dHJhbnNmZXInLFxuV0FMTEVUOid3YWxsZXQnfTskaM2PX29uY2UuQnJpZGdlSWQoQnJpZGdlSWQpO1xuXG5oYXJkZW4oQnJpZGdlSWQpO1xuXG5jb25zdCAgICAgICAgQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQ9e1xudmJhbmtQb3J0OkJyaWRnZUlkLkJBTkssXG52aWJjUG9ydDpCcmlkZ2VJZC5ESUJDfTskaM2PX29uY2UuQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQoQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQpO1xuXG5cbmNvbnN0ICAgICAgICBXYWxsZXROYW1lPS8qICAgICAgICAgICAgICAgICove1xuZGVwb3NpdEZhY2V0OidkZXBvc2l0RmFjZXQnfTskaM2PX29uY2UuV2FsbGV0TmFtZShXYWxsZXROYW1lKTtcblxuaGFyZGVuKFdhbGxldE5hbWUpO1xuXG4vL1xuY29uc3QgICAgICAgIFZCYW5rQWNjb3VudD0vKiAgICAgICAgICAgICAgICAqL3tcbnJlc2VydmU6e1xubW9kdWxlOid2YmFuay9yZXNlcnZlJyxcbmFkZHJlc3M6J2Fnb3JpYzFhZTBsbXR6bGdyY25sYTl4amtwYWFycTVkNWRmZXo2M2gzbnVjbCd9LFxuXG5wcm92aXNpb246e1xubW9kdWxlOid2YmFuay9wcm92aXNpb24nLFxuYWRkcmVzczonYWdvcmljMW1lZ3p5dGc2NWN5cmd6czZmdnp4Z3JjcXZ3d2w3dWdwdDYyMzQ2J319OyRozY9fb25jZS5WQmFua0FjY291bnQoVkJhbmtBY2NvdW50KTtcblxuXG5oYXJkZW4oVkJhbmtBY2NvdW50KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkJyaWRnZUlkIjpbIkJyaWRnZUlkIl0sIkNvc21vc0luaXRLZXlUb0JyaWRnZUlkIjpbIkNvc21vc0luaXRLZXlUb0JyaWRnZUlkIl0sIldhbGxldE5hbWUiOlsiV2FsbGV0TmFtZSJdLCJWQmFua0FjY291bnQiOlsiVkJhbmtBY2NvdW50Il19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAF+DFqp3BAAAdwQAACQAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZGVidWcuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VUcmFjZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxubGV0IGRlYnVnSW5zdGFuY2U9MTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlVHJhY2VyPShuYW1lLGVuYWJsZT10cnVlKT0+e1xuZGVidWdJbnN0YW5jZSs9MTtcbmxldCBkZWJ1Z0NvdW50PTE7XG5jb25zdCBrZXk9IGAtLS0tLSAke25hbWV9LiR7ZGVidWdJbnN0YW5jZX0gYDtcbi8vXG5zd2l0Y2goZW5hYmxlKXtcbmNhc2UgZmFsc2U6e1xuY29uc3QgbG9nRGlzYWJsZWQ9KC4uLl9hcmdzKT0+eyB9O1xucmV0dXJuIGxvZ0Rpc2FibGVkO1xuIH1cbmNhc2UndmVyYm9zZSc6e1xuY29uc3QgaW5mb1RpY2s9KG9wdExvZywuLi5hcmdzKT0+e1xuaWYob3B0TG9nLmxvZyl7XG5jb25zb2xlLmluZm8oa2V5LGRlYnVnQ291bnQrPTEsLi4uYXJncyk7XG4gfWVsc2V7XG5jb25zb2xlLmluZm8oa2V5LGRlYnVnQ291bnQrPTEsb3B0TG9nLC4uLmFyZ3MpO1xuIH1cbiB9O1xucmV0dXJuIGluZm9UaWNrO1xuIH1cbmRlZmF1bHQ6e1xuY29uc3QgZGVidWdUaWNrPShvcHRMb2csLi4uYXJncyk9PntcbmlmKG9wdExvZy5sb2cpe1xub3B0TG9nLmxvZyhrZXksZGVidWdDb3VudCs9MSwuLi5hcmdzKTtcbiB9ZWxzZXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSxvcHRMb2csLi4uYXJncyk7XG4gfVxuIH07XG5yZXR1cm4gZGVidWdUaWNrO1xuIH19XG5cbiB9OyRozY9fb25jZS5tYWtlVHJhY2VyKG1ha2VUcmFjZXIpO1xuaGFyZGVuKG1ha2VUcmFjZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYWNlciI6WyJtYWtlVHJhY2VyIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANOJob+9AgAAvQIAACUAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZXJyb3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIk5vbk51bGxpc2giXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBOb25OdWxsaXNoPSh2YWwsb3B0RGV0YWlscz0gYHVuZXhwZWN0ZWQgJHtxKHZhbCl9YCk9PntcbmlmKHZhbCE9bnVsbCl7XG4vL1xucmV0dXJuIHZhbDtcbiB9XG5hc3NlcnQuZmFpbChvcHREZXRhaWxzKTtcbiB9OyRozY9fb25jZS5Ob25OdWxsaXNoKE5vbk51bGxpc2gpO1xuaGFyZGVuKE5vbk51bGxpc2gpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiTm9uTnVsbGlzaCI6WyJOb25OdWxsaXNoIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACHQpXKiBQAAogUAACQAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9jb25maWcuanMiLCIuL2RlYnVnLmpzIiwiLi9lcnJvcnMuanMiLCIuL2pzLXV0aWxzLmpzIiwiLi9tYXJzaGFsLmpzIiwiLi9tZXRob2QtdG9vbHMuanMiLCIuL3Nlcy11dGlscy5qcyIsIi4vdHlwZUNoZWNrLmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi90eXBlcy1pbmRleC5qcyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyIsIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIl0sImV4cG9ydHMiOltudWxsLG51bGwsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vY29uZmlnLmpzIiwiLi9kZWJ1Zy5qcyIsIi4vZXJyb3JzLmpzIiwiLi9qcy11dGlscy5qcyIsIi4vbWV0aG9kLXRvb2xzLmpzIiwiLi9zZXMtdXRpbHMuanMiLCIuL3R5cGVDaGVjay5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9jb25maWcuanNcIiwgW11dLFtcIi4vZGVidWcuanNcIiwgW11dLFtcIi4vZXJyb3JzLmpzXCIsIFtdXSxbXCIuL2pzLXV0aWxzLmpzXCIsIFtdXSxbXCIuL21hcnNoYWwuanNcIiwgW11dLFtcIi4vbWV0aG9kLXRvb2xzLmpzXCIsIFtdXSxbXCIuL3Nlcy11dGlscy5qc1wiLCBbXV0sW1wiLi90eXBlQ2hlY2suanNcIiwgW11dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi90eXBlcy1pbmRleC5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9tYXJzaGFsLmpzIjpbWyJwdXJlRGF0YU1hcnNoYWxsZXIiLCJwdXJlRGF0YU1hcnNoYWxsZXIiXV0sIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjpbWyJvYmplY3RNYXAiLCJvYmplY3RNYXAiXV0sIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOltbIm9iamVjdE1ldGFNYXAiLCJvYmplY3RNZXRhTWFwIl1dLCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6W1siZnJvbVVuaXF1ZUVudHJpZXMiLCJmcm9tVW5pcXVlRW50cmllcyJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA6I5nQE4HAABOBwAAJwAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9qcy11dGlscy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZGVlcENvcHlKc29uYWJsZSIsImRlZXBNYXBPYmplY3QiLCJtYWtlTWVhc3VyZVNlY29uZHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8vXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWVwQ29weUpzb25hYmxlPSh2YWx1ZSk9PkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVlcENvcHlKc29uYWJsZShkZWVwQ29weUpzb25hYmxlKTtcbmNvbnN0IGRlZXBNYXBPYmplY3RJbnRlcm5hbD0odmFsdWUsbmFtZSxjb250YWluZXIsbWFwcGVyKT0+e1xuaWYoY29udGFpbmVyJiZ0eXBlb2YgbmFtZT09PSdzdHJpbmcnKXtcbmNvbnN0IG1hcHBlZD1tYXBwZXIodmFsdWUsbmFtZSxjb250YWluZXIpO1xuaWYobWFwcGVkIT09dmFsdWUpe1xucmV0dXJuIG1hcHBlZDtcbiB9XG4gfVxuXG5pZih0eXBlb2YgdmFsdWUhPT0nb2JqZWN0J3x8IXZhbHVlKXtcbnJldHVybiB2YWx1ZTtcbiB9XG5cbmxldCB3YXNNYXBwZWQ9ZmFsc2U7XG5jb25zdCBtYXBwZWRFbnRyaWVzPU9iamVjdC5lbnRyaWVzKHZhbHVlKS5tYXAoKFtpbm5lck5hbWUsaW5uZXJWYWx1ZV0pPT57XG5jb25zdCBtYXBwZWRJbm5lclZhbHVlPWRlZXBNYXBPYmplY3RJbnRlcm5hbChcbmlubmVyVmFsdWUsXG5pbm5lck5hbWUsXG52YWx1ZSxcbm1hcHBlcik7XG5cbndhc01hcHBlZHx8PW1hcHBlZElubmVyVmFsdWUhPT1pbm5lclZhbHVlO1xucmV0dXJuW2lubmVyTmFtZSxtYXBwZWRJbm5lclZhbHVlXTtcbiB9KTtcblxucmV0dXJuIHdhc01hcHBlZD9PYmplY3QuZnJvbUVudHJpZXMobWFwcGVkRW50cmllcyk6dmFsdWU7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWVwTWFwT2JqZWN0PShvYmosbWFwcGVyKT0+XG5kZWVwTWFwT2JqZWN0SW50ZXJuYWwob2JqLHVuZGVmaW5lZCx1bmRlZmluZWQsbWFwcGVyKTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVlcE1hcE9iamVjdChkZWVwTWFwT2JqZWN0KTtcbmNvbnN0ICAgICAgICBtYWtlTWVhc3VyZVNlY29uZHM9KGN1cnJlbnRUaW1lTWlsbGlzZWMpPT57XG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IG1lYXN1cmVTZWNvbmRzPWFzeW5jKGZuKT0+e1xuY29uc3QgdDA9Y3VycmVudFRpbWVNaWxsaXNlYygpO1xuY29uc3QgcmVzdWx0PWF3YWl0IGZuKCk7XG5jb25zdCBkdXJhdGlvbk1pbGxpc2VjPWN1cnJlbnRUaW1lTWlsbGlzZWMoKS10MDtcbnJldHVybntyZXN1bHQsZHVyYXRpb246ZHVyYXRpb25NaWxsaXNlYy8xMDAwfTtcbiB9O1xucmV0dXJuIG1lYXN1cmVTZWNvbmRzO1xuIH07JGjNj19vbmNlLm1ha2VNZWFzdXJlU2Vjb25kcyhtYWtlTWVhc3VyZVNlY29uZHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVlcENvcHlKc29uYWJsZSI6WyJkZWVwQ29weUpzb25hYmxlIl0sImRlZXBNYXBPYmplY3QiOlsiZGVlcE1hcE9iamVjdCJdLCJtYWtlTWVhc3VyZVNlY29uZHMiOlsibWFrZU1lYXN1cmVTZWNvbmRzIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAB8JSuECFgAAAhYAAC8AAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvbGliLWNoYWluU3RvcmFnZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9wYXR0ZXJucyIsIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiLCIuL2NhbGxiYWNrLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q2FwRGF0YSIsImFzc2VydFBhdGhTZWdtZW50IiwiaXNTdHJlYW1DZWxsIiwibWFrZUNoYWluU3RvcmFnZVJvb3QiLCJtYWtlU2VyaWFsaXplVG9TdG9yYWdlIiwibWFrZVN0b3JhZ2VOb2RlQ2hpbGQiLCJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRSxGYXIsTSxtYWtlSGVhcFpvbmUsY2I7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qc1wiLCBbW1wibWFrZUhlYXBab25lXCIsIFskaM2PX2EgPT4gKG1ha2VIZWFwWm9uZSA9ICRozY9fYSldXV1dLFtcIi4vY2FsbGJhY2suanNcIiwgW1tcIipcIiwgWyRozY9fYSA9PiAoY2IgPSAkaM2PX2EpXV1dXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlQ2hhaW5TdG9yYWdlUm9vdCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZUNoYWluU3RvcmFnZVJvb3RcIn0pOyRozY9fb25jZS5tYWtlQ2hhaW5TdG9yYWdlUm9vdChtYWtlQ2hhaW5TdG9yYWdlUm9vdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VTdG9yYWdlTm9kZUNoaWxkLCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlU3RvcmFnZU5vZGVDaGlsZFwifSk7JGjNj19vbmNlLm1ha2VTdG9yYWdlTm9kZUNoaWxkKG1ha2VTdG9yYWdlTm9kZUNoaWxkKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBDaGFpblN0b3JhZ2VOb2RlST1NLmludGVyZmFjZSgnU3RvcmFnZU5vZGUnLHtcbnNldFZhbHVlOk0uY2FsbFdoZW4oTS5zdHJpbmcoKSkucmV0dXJucygpLFxuZ2V0UGF0aDpNLmNhbGwoKS5yZXR1cm5zKE0uc3RyaW5nKCkpLFxuZ2V0U3RvcmVLZXk6TS5jYWxsV2hlbigpLnJldHVybnMoTS5yZWNvcmQoKSksXG5tYWtlQ2hpbGROb2RlOk0uY2FsbChNLnN0cmluZygpKS5cbm9wdGlvbmFsKE0uc3BsaXRSZWNvcmQoe30se3NlcXVlbmNlOk0uYm9vbGVhbigpfSx7fSkpLlxucmV0dXJucyhNLnJlbW90YWJsZSgnU3RvcmFnZU5vZGUnKSl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNTdHJlYW1DZWxsPShjZWxsKT0+XG5jZWxsJiZcbnR5cGVvZiBjZWxsPT09J29iamVjdCcmJlxuQXJyYXkuaXNBcnJheShjZWxsLnZhbHVlcykmJlxudHlwZW9mIGNlbGwuYmxvY2tIZWlnaHQ9PT0nc3RyaW5nJyYmXG4vXjAkfF5bMS05XVswLTldKiQvLnRlc3QoY2VsbC5ibG9ja0hlaWdodCk7JGjNj19vbmNlLmlzU3RyZWFtQ2VsbChpc1N0cmVhbUNlbGwpO1xuaGFyZGVuKGlzU3RyZWFtQ2VsbCk7XG5cbi8vXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDYXBEYXRhPShkYXRhKT0+e1xuYXNzZXJ0LnR5cGVvZihkYXRhLCdvYmplY3QnKTtcbmFzc2VydChkYXRhKTtcbmFzc2VydC50eXBlb2YoZGF0YS5ib2R5LCdzdHJpbmcnKTtcbmFzc2VydChBcnJheS5pc0FycmF5KGRhdGEuc2xvdHMpKTtcbi8vXG4gfTskaM2PX29uY2UuYXNzZXJ0Q2FwRGF0YShhc3NlcnRDYXBEYXRhKTtcbmhhcmRlbihhc3NlcnRDYXBEYXRhKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHBhdGhTZWdtZW50UGF0dGVybj0vXlthLXpBLVowLTlfLV17MSwxMDB9JC87XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQYXRoU2VnbWVudD0obmFtZSk9PntcbnBhdGhTZWdtZW50UGF0dGVybi50ZXN0KG5hbWUpfHxcbkZhaWwgYFBhdGggc2VnbWVudCBuYW1lcyBtdXN0IGNvbnNpc3Qgb2YgMSB0byAxMDAgY2hhcmFjdGVycyBsaW1pdGVkIHRvIEFTQ0lJIGFscGhhbnVtZXJpY3MsIHVuZGVyc2NvcmVzLCBhbmQvb3IgZGFzaGVzOiAke25hbWV9YDtcbiB9OyRozY9fb25jZS5hc3NlcnRQYXRoU2VnbWVudChhc3NlcnRQYXRoU2VnbWVudCk7XG5oYXJkZW4oYXNzZXJ0UGF0aFNlZ21lbnQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZT0oem9uZSk9Pntcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VDaGFpblN0b3JhZ2VOb2RlPXpvbmUuZXhvQ2xhc3MoXG4nQ2hhaW5TdG9yYWdlTm9kZScsXG5DaGFpblN0b3JhZ2VOb2RlSSxcbi8qXG5cblxuXG5cblxuXG4gICAgICovXG4obWVzc2VuZ2VyLHBhdGgse3NlcXVlbmNlPWZhbHNlfT17fSk9PntcbmFzc2VydC50eXBlb2YocGF0aCwnc3RyaW5nJyk7XG5hc3NlcnQudHlwZW9mKHNlcXVlbmNlLCdib29sZWFuJyk7XG5yZXR1cm4gaGFyZGVuKHtwYXRoLG1lc3NlbmdlcixzZXF1ZW5jZX0pO1xuIH0sXG57XG5nZXRQYXRoKCl7XG5yZXR1cm4gdGhpcy5zdGF0ZS5wYXRoO1xuIH0sXG4vKlxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgZ2V0U3RvcmVLZXkoKXtcbmNvbnN0e3BhdGgsbWVzc2VuZ2VyfT10aGlzLnN0YXRlO1xucmV0dXJuIGNiLmNhbGxFKG1lc3Nlbmdlcix7XG5tZXRob2Q6J2dldFN0b3JlS2V5JyxcbmFyZ3M6W3BhdGhdfSk7XG5cbiB9LFxuLypcblxuXG5cblxuICAgICAgICovXG5tYWtlQ2hpbGROb2RlKG5hbWUsY2hpbGROb2RlT3B0aW9ucz17fSl7XG5jb25zdHtzZXF1ZW5jZSxwYXRoLG1lc3Nlbmdlcn09dGhpcy5zdGF0ZTtcbmFzc2VydFBhdGhTZWdtZW50KG5hbWUpO1xuY29uc3QgbWVyZ2VkT3B0aW9ucz17c2VxdWVuY2UsLi4uY2hpbGROb2RlT3B0aW9uc307XG5yZXR1cm4gbWFrZUNoYWluU3RvcmFnZU5vZGUoXG5tZXNzZW5nZXIsXG4gYCR7cGF0aH0uJHtuYW1lfWAsXG5tZXJnZWRPcHRpb25zKTtcblxuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgc2V0VmFsdWUodmFsdWUpe1xuY29uc3R7c2VxdWVuY2UscGF0aCxtZXNzZW5nZXJ9PXRoaXMuc3RhdGU7XG5hc3NlcnQudHlwZW9mKHZhbHVlLCdzdHJpbmcnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGVudHJ5O1xuaWYoIXNlcXVlbmNlJiYhdmFsdWUpe1xuZW50cnk9W3BhdGhdO1xuIH1lbHNle1xuZW50cnk9W3BhdGgsdmFsdWVdO1xuIH1cbmF3YWl0IGNiLmNhbGxFKG1lc3Nlbmdlcix7XG5tZXRob2Q6c2VxdWVuY2U/J2FwcGVuZCc6J3NldCcsXG5hcmdzOltlbnRyeV19KTtcblxuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG59KTtcblxucmV0dXJuIG1ha2VDaGFpblN0b3JhZ2VOb2RlO1xuIH07JGjNj19vbmNlLnByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKHByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKTtcblxuY29uc3QgbWFrZUhlYXBDaGFpblN0b3JhZ2VOb2RlPXByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKG1ha2VIZWFwWm9uZSgpKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBtYWtlQ2hhaW5TdG9yYWdlUm9vdChcbmhhbmRsZVN0b3JhZ2VNZXNzYWdlLFxucm9vdFBhdGgsXG5yb290T3B0aW9ucz17fSlcbntcbmNvbnN0IG1lc3Nlbmdlcj1jYi5tYWtlRnVuY3Rpb25DYWxsYmFjayhoYW5kbGVTdG9yYWdlTWVzc2FnZSk7XG5cbi8vXG5jb25zdCByb290Tm9kZT1tYWtlSGVhcENoYWluU3RvcmFnZU5vZGUobWVzc2VuZ2VyLHJvb3RQYXRoLHJvb3RPcHRpb25zKTtcbnJldHVybiByb290Tm9kZTtcbiB9XG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlTnVsbFN0b3JhZ2VOb2RlPSgpPT57XG4vL1xucmV0dXJuIG1ha2VDaGFpblN0b3JhZ2VSb290KFxuRmFyKCdOdWxsTWVzc2VuZ2VyJywoKT0+bnVsbCksXG4nbnVsbCcpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5hc3luYyBmdW5jdGlvbiAgICAgICAgbWFrZVN0b3JhZ2VOb2RlQ2hpbGQoc3RvcmFnZU5vZGVSZWYsY2hpbGROYW1lKXtcbmNvbnN0IGV4aXN0aW5nU3RvcmFnZU5vZGU9YXdhaXQgc3RvcmFnZU5vZGVSZWY7XG5jb25zdCBzdG9yYWdlTm9kZT1leGlzdGluZ1N0b3JhZ2VOb2RlfHxtYWtlTnVsbFN0b3JhZ2VOb2RlKCk7XG5yZXR1cm4gRShzdG9yYWdlTm9kZSkubWFrZUNoaWxkTm9kZShjaGlsZE5hbWUpO1xuIH1cbmhhcmRlbihtYWtlU3RvcmFnZU5vZGVDaGlsZCk7XG5cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNlcmlhbGl6ZVRvU3RvcmFnZT0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbnJldHVybiBhc3luYyh2YWx1ZSk9PntcbmNvbnN0IG1hcnNoYWxsZWQ9YXdhaXQgRShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuY29uc3Qgc2VyaWFsaXplZD1KU09OLnN0cmluZ2lmeShtYXJzaGFsbGVkKTtcbnJldHVybiBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShzZXJpYWxpemVkKTtcbiB9O1xuIH07JGjNj19vbmNlLm1ha2VTZXJpYWxpemVUb1N0b3JhZ2UobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1N0cmVhbUNlbGwiOlsiaXNTdHJlYW1DZWxsIl0sImFzc2VydENhcERhdGEiOlsiYXNzZXJ0Q2FwRGF0YSJdLCJhc3NlcnRQYXRoU2VnbWVudCI6WyJhc3NlcnRQYXRoU2VnbWVudCJdLCJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSI6WyJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSJdLCJtYWtlQ2hhaW5TdG9yYWdlUm9vdCI6WyJtYWtlQ2hhaW5TdG9yYWdlUm9vdCJdLCJtYWtlU3RvcmFnZU5vZGVDaGlsZCI6WyJtYWtlU3RvcmFnZU5vZGVDaGlsZCJdLCJtYWtlU2VyaWFsaXplVG9TdG9yYWdlIjpbIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2UiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAwmKKfUAQAABAEAAAJgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9tYXJzaGFsLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCIuL2xpYi1jaGFpblN0b3JhZ2UuanMiXSwiZXhwb3J0cyI6WyJib2FyZFNsb3R0aW5nTWFyc2hhbGxlciIsIm1ha2VCb2FyZFJlbW90ZSIsIm1ha2VIaXN0b3J5UmV2aXZlciIsInB1cmVEYXRhTWFyc2hhbGxlciIsInNsb3RUb0JvYXJkUmVtb3RlIiwidW5tYXJzaGFsRnJvbVZzdG9yYWdlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxGYXIsbWFrZU1hcnNoYWwsaXNTdHJlYW1DZWxsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXV1dLFtcIi4vbGliLWNoYWluU3RvcmFnZS5qc1wiLCBbW1wiaXNTdHJlYW1DZWxsXCIsIFskaM2PX2EgPT4gKGlzU3RyZWFtQ2VsbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUJvYXJkUmVtb3RlPSh7Ym9hcmRJZCxpZmFjZX0pPT57XG5jb25zdCBub25hbGxlZ2VkPWlmYWNlP2lmYWNlLnJlcGxhY2UoL15BbGxlZ2VkOiAvLCcnKTonJztcbnJldHVybiBGYXIoIGBCb2FyZFJlbW90ZSR7bm9uYWxsZWdlZH1gLHtnZXRCb2FyZElkOigpPT5ib2FyZElkfSk7XG4gfTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UubWFrZUJvYXJkUmVtb3RlKG1ha2VCb2FyZFJlbW90ZSk7XG5jb25zdCAgICAgICAgc2xvdFRvQm9hcmRSZW1vdGU9KGJvYXJkSWQsaWZhY2UpPT5cbm1ha2VCb2FyZFJlbW90ZSh7Ym9hcmRJZCxpZmFjZX0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLnNsb3RUb0JvYXJkUmVtb3RlKHNsb3RUb0JvYXJkUmVtb3RlKTtcbmNvbnN0IGJvYXJkVmFsVG9TbG90PSh2YWwpPT57XG5pZignZ2V0Qm9hcmRJZCdpbiB2YWwpe1xucmV0dXJuIHZhbC5nZXRCb2FyZElkKCk7XG4gfVxudGhyb3cgRmFpbCBgdW5rbm93biBvYmogaW4gYm9hcmRTbG90dGluZ01hcnNoYWxsZXIudmFsVG9TbG90ICR7dmFsfWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyPShzbG90VG9WYWw9dW5kZWZpbmVkKT0+e1xucmV0dXJuIG1ha2VNYXJzaGFsKGJvYXJkVmFsVG9TbG90LHNsb3RUb1ZhbCx7XG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cbiB9O1xuXG4vL1xuLy9cbi8qXG5cblxuICovJGjNj19vbmNlLmJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyKGJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyKTtcbmNvbnN0IGFzc2VydENhcERhdGE9KGRhdGEpPT57XG5hc3NlcnQudHlwZW9mKGRhdGEsJ29iamVjdCcpO1xuYXNzZXJ0KGRhdGEpO1xuYXNzZXJ0LnR5cGVvZihkYXRhLmJvZHksJ3N0cmluZycpO1xuYXNzZXJ0KEFycmF5LmlzQXJyYXkoZGF0YS5zbG90cykpO1xuLy9cbiB9O1xuaGFyZGVuKGFzc2VydENhcERhdGEpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1bm1hcnNoYWxGcm9tVnN0b3JhZ2U9KGRhdGEsa2V5LGZyb21DYXBEYXRhLGluZGV4KT0+e1xuY29uc3Qgc2VyaWFsaXplZD1kYXRhLmdldChrZXkpfHxGYWlsIGBubyBkYXRhIGZvciAke2tleX1gO1xuYXNzZXJ0LnR5cGVvZihzZXJpYWxpemVkLCdzdHJpbmcnKTtcbmFzc2VydC50eXBlb2YoaW5kZXgsJ251bWJlcicpO1xuXG5jb25zdCBzdHJlYW1DZWxsPUpTT04ucGFyc2Uoc2VyaWFsaXplZCk7XG5pZighaXNTdHJlYW1DZWxsKHN0cmVhbUNlbGwpKXtcbnRocm93IEZhaWwgYG5vdCBhIFN0cmVhbUNlbGw6ICR7c3RyZWFtQ2VsbH1gO1xuIH1cblxuY29uc3R7dmFsdWVzfT1zdHJlYW1DZWxsO1xudmFsdWVzLmxlbmd0aD4wfHxGYWlsIGBubyBTdHJlYW1DZWxsIHZhbHVlczogJHtzdHJlYW1DZWxsfWA7XG5cbmNvbnN0IG1hcnNoYWxsZWQ9dmFsdWVzLmF0KGluZGV4KTtcbmFzc2VydC50eXBlb2YobWFyc2hhbGxlZCwnc3RyaW5nJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2FwRGF0YT1oYXJkZW4oSlNPTi5wYXJzZShtYXJzaGFsbGVkKSk7XG5hc3NlcnRDYXBEYXRhKGNhcERhdGEpO1xuXG5jb25zdCB1bm1hcnNoYWxsZWQ9ZnJvbUNhcERhdGEoY2FwRGF0YSk7XG5yZXR1cm4gdW5tYXJzaGFsbGVkO1xuIH07JGjNj19vbmNlLnVubWFyc2hhbEZyb21Wc3RvcmFnZSh1bm1hcnNoYWxGcm9tVnN0b3JhZ2UpO1xuaGFyZGVuKHVubWFyc2hhbEZyb21Wc3RvcmFnZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VIaXN0b3J5UmV2aXZlcj0oZW50cmllcyxzbG90VG9WYWw9dW5kZWZpbmVkKT0+e1xuY29uc3QgYm9hcmQ9Ym9hcmRTbG90dGluZ01hcnNoYWxsZXIoc2xvdFRvVmFsKTtcbmNvbnN0IHZzTWFwPW5ldyBNYXAoZW50cmllcyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGZyb21DYXBEYXRhPSguLi5hcmdzKT0+XG5SZWZsZWN0LmFwcGx5KGJvYXJkLmZyb21DYXBEYXRhLGJvYXJkLGFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2V0SXRlbT0oa2V5KT0+dW5tYXJzaGFsRnJvbVZzdG9yYWdlKHZzTWFwLGtleSxmcm9tQ2FwRGF0YSwtMSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjaGlsZHJlbj0ocHJlZml4KT0+e1xucHJlZml4LmVuZHNXaXRoKCcuJyl8fEZhaWwgYHByZWZpeCBtdXN0IGVuZCB3aXRoICcuJ2A7XG5yZXR1cm4gaGFyZGVuKFtcbi4uLm5ldyBTZXQoXG5lbnRyaWVzLlxubWFwKChbayxfXSk9PmspLlxuZmlsdGVyKChrKT0+ay5zdGFydHNXaXRoKHByZWZpeCkpLlxubWFwKChrKT0+ay5zbGljZShwcmVmaXgubGVuZ3RoKS5zcGxpdCgnLicpWzBdKSldKTtcblxuXG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBoYXM9KGspPT52c01hcC5nZXQoaykhPT11bmRlZmluZWQ7XG5cbnJldHVybiBoYXJkZW4oe2dldEl0ZW0sY2hpbGRyZW4saGFzfSk7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLm1ha2VIaXN0b3J5UmV2aXZlcihtYWtlSGlzdG9yeVJldml2ZXIpO1xuY29uc3QgcmVqZWN0T0NhcD0oY2FwKT0+RmFpbCBgJHtjYXB9IGlzIG5vdCBwdXJlIGRhdGFgO1xuY29uc3QgICAgICAgIHB1cmVEYXRhTWFyc2hhbGxlcj1tYWtlTWFyc2hhbChyZWplY3RPQ2FwLHJlamVjdE9DYXAse1xuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pOyRozY9fb25jZS5wdXJlRGF0YU1hcnNoYWxsZXIocHVyZURhdGFNYXJzaGFsbGVyKTtcblxuaGFyZGVuKHB1cmVEYXRhTWFyc2hhbGxlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlQm9hcmRSZW1vdGUiOlsibWFrZUJvYXJkUmVtb3RlIl0sInNsb3RUb0JvYXJkUmVtb3RlIjpbInNsb3RUb0JvYXJkUmVtb3RlIl0sImJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyIjpbImJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyIl0sInVubWFyc2hhbEZyb21Wc3RvcmFnZSI6WyJ1bm1hcnNoYWxGcm9tVnN0b3JhZ2UiXSwibWFrZUhpc3RvcnlSZXZpdmVyIjpbIm1ha2VIaXN0b3J5UmV2aXZlciJdLCJwdXJlRGF0YU1hcnNoYWxsZXIiOlsicHVyZURhdGFNYXJzaGFsbGVyIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANdpkCmaCAAAmggAACsAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvbWV0aG9kLXRvb2xzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiXSwiZXhwb3J0cyI6WyJiaW5kQWxsTWV0aG9kcyIsImdldE1ldGhvZE5hbWVzIiwiZ2V0U3RyaW5nTWV0aG9kTmFtZXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpc09iamVjdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHtnZXRQcm90b3R5cGVPZixjcmVhdGUsZnJvbUVudHJpZXMsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309XG5PYmplY3Q7XG5jb25zdHtvd25LZXlzLGFwcGx5fT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29tcGFyZVN0cmluZ2lmaWVkPShhLGIpPT57XG5pZih0eXBlb2YgYT09PXR5cGVvZiBiKXtcbmNvbnN0IGxlZnQ9U3RyaW5nKGEpO1xuY29uc3QgcmlnaHQ9U3RyaW5nKGIpO1xuLy9cbnJldHVybiBsZWZ0PHJpZ2h0Py0xOmxlZnQ+cmlnaHQ/MTowO1xuIH1cbmlmKHR5cGVvZiBhPT09J3N5bWJvbCcpe1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N0cmluZycpO1xucmV0dXJuLTE7XG4gfVxuYXNzZXJ0KHR5cGVvZiBhPT09J3N0cmluZycpO1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N5bWJvbCcpO1xucmV0dXJuIDE7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRNZXRob2ROYW1lcz0odmFsKT0+e1xubGV0IGxheWVyPXZhbDtcbmNvbnN0IG5hbWVzPW5ldyBTZXQoKTsvL1xud2hpbGUobGF5ZXIhPT1udWxsJiZsYXllciE9PU9iamVjdC5wcm90b3R5cGUpe1xuLy9cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobGF5ZXIpO1xuY29uc3Qgb3duTmFtZXM9LyogICAgICAgICAgICAgICovb3duS2V5cyhkZXNjcyk7XG5mb3IoY29uc3QgbmFtZSBvZiBvd25OYW1lcyl7XG4vL1xuLy9cbmlmKHR5cGVvZiB2YWxbbmFtZV09PT0nZnVuY3Rpb24nKXtcbm5hbWVzLmFkZChuYW1lKTtcbiB9XG4gfVxuaWYoIWlzT2JqZWN0KHZhbCkpe1xuYnJlYWs7XG4gfVxubGF5ZXI9Z2V0UHJvdG90eXBlT2YobGF5ZXIpO1xuIH1cbnJldHVybiBoYXJkZW4oWy4uLm5hbWVzXS5zb3J0KGNvbXBhcmVTdHJpbmdpZmllZCkpO1xuIH07JGjNj19vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtcbmhhcmRlbihnZXRNZXRob2ROYW1lcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0U3RyaW5nTWV0aG9kTmFtZXM9KHZhbCk9PlxuLyogICAgICAgICAgICAgICAgICAgKi9cbmdldE1ldGhvZE5hbWVzKHZhbCkuZmlsdGVyKChuYW1lKT0+dHlwZW9mIG5hbWU9PT0nc3RyaW5nJyk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5nZXRTdHJpbmdNZXRob2ROYW1lcyhnZXRTdHJpbmdNZXRob2ROYW1lcyk7XG5jb25zdCAgICAgICAgYmluZEFsbE1ldGhvZHM9KG9iaik9PlxuaGFyZGVuKFxuY3JlYXRlKFxub2JqLFxuZnJvbUVudHJpZXMoXG5nZXRNZXRob2ROYW1lcyhvYmopLm1hcCgobmFtZSk9Pltcbm5hbWUsXG57XG52YWx1ZTooLyogICAgICAgICAgICAgICAgICAgICovLi4uYXJncyk9PlxuYXBwbHkob2JqW25hbWVdLG9iaixhcmdzKSxcbmVudW1lcmFibGU6dHJ1ZX1dKSkpKTskaM2PX29uY2UuYmluZEFsbE1ldGhvZHMoYmluZEFsbE1ldGhvZHMpO1xuXG5cblxuXG5cbmhhcmRlbihiaW5kQWxsTWV0aG9kcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJnZXRTdHJpbmdNZXRob2ROYW1lcyI6WyJnZXRTdHJpbmdNZXRob2ROYW1lcyJdLCJiaW5kQWxsTWV0aG9kcyI6WyJiaW5kQWxsTWV0aG9kcyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAANUHkNtR0AALUdAAAoAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3Nlcy11dGlscy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9zdHJlYW0iLCJqZXNzaWUuanMiXSwiZXhwb3J0cyI6WyJQcm9taXNlQWxsT3JFcnJvcnMiLCJhZ2dyZWdhdGVUcnlGaW5hbGx5IiwiYWxsVmFsdWVzIiwiYXNzZXJ0QWxsRGVmaW5lZCIsImRlZXBseUZ1bGZpbGxlZE9iamVjdCIsImZvcmV2ZXIiLCJzeW5jaHJvbml6ZWRUZWUiLCJ1bnRpbFRydWUiLCJ3aGlsZVRydWUiLCJ3aXRoRGVmZXJyZWRDbGVhbnVwIiwiemlwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLFgsZGVlcGx5RnVsZmlsbGVkLGlzT2JqZWN0LG1ha2VQcm9taXNlS2l0LG1ha2VRdWV1ZSxhc3luY0dlbmVyYXRlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dLFtcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImRlZXBseUZ1bGZpbGxlZFwiLCBbJGjNj19hID0+IChkZWVwbHlGdWxmaWxsZWQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9zdHJlYW1cIiwgW1tcIm1ha2VRdWV1ZVwiLCBbJGjNj19hID0+IChtYWtlUXVldWUgPSAkaM2PX2EpXV1dXSxbXCJqZXNzaWUuanNcIiwgW1tcImFzeW5jR2VuZXJhdGVcIiwgWyRozY9fYSA9PiAoYXN5bmNHZW5lcmF0ZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtmcm9tRW50cmllcyxrZXlzLHZhbHVlc309T2JqZWN0O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcGx5RnVsZmlsbGVkT2JqZWN0PWFzeW5jKG9iaik9PntcbmlzT2JqZWN0KG9iail8fEZhaWwgYHBhcmFtIG11c3QgYmUgYW4gb2JqZWN0YDtcbnJldHVybiBkZWVwbHlGdWxmaWxsZWQob2JqKTtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmRlZXBseUZ1bGZpbGxlZE9iamVjdChkZWVwbHlGdWxmaWxsZWRPYmplY3QpO1xuY29uc3QgbWFrZUFnZ3JlZ2F0ZUVycm9yPVxudHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPT09J2Z1bmN0aW9uJz9cbihlcnJvcnMsbWVzc2FnZSxvcHRpb25zKT0+QWdncmVnYXRlRXJyb3IoZXJyb3JzLG1lc3NhZ2Usb3B0aW9ucyk6XG4oZXJyb3JzLG1lc3NhZ2Usb3B0aW9ucyk9PntcbnJldHVybiBtYWtlRXJyb3IobWVzc2FnZT8/J211bHRpcGxlIGVycm9ycycsdW5kZWZpbmVkLHtcbi4uLm9wdGlvbnMsXG5lcnJvcnN9KTtcblxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBQcm9taXNlQWxsT3JFcnJvcnM9YXN5bmMoaXRlbXMpPT57XG5yZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGl0ZW1zKS50aGVuKChyZXN1bHRzKT0+e1xuY29uc3QgZXJyb3JzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZXN1bHRzLmZpbHRlcigoe3N0YXR1c30pPT5zdGF0dXM9PT0ncmVqZWN0ZWQnKS5cbm1hcCgocmVzdWx0KT0+cmVzdWx0LnJlYXNvbik7XG5pZighZXJyb3JzLmxlbmd0aCl7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3Jlc3VsdHMubWFwKFxuKHJlc3VsdCk9PnJlc3VsdC52YWx1ZSkpO1xuXG4gfWVsc2UgaWYoZXJyb3JzLmxlbmd0aD09PTEpe1xudGhyb3cgZXJyb3JzWzBdO1xuIH1lbHNle1xudGhyb3cgbWFrZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gfVxuIH0pO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlQWxsT3JFcnJvcnMoUHJvbWlzZUFsbE9yRXJyb3JzKTtcbmNvbnN0ICAgICAgICBhZ2dyZWdhdGVUcnlGaW5hbGx5PWFzeW5jKHRyaWVyLGZpbmFsaXplcik9PlxudHJpZXIoKS50aGVuKFxuYXN5bmMocmVzdWx0KT0+ZmluYWxpemVyKCkudGhlbigoKT0+cmVzdWx0KSxcbmFzeW5jKHRyeUVycm9yKT0+XG5maW5hbGl6ZXIodHJ5RXJyb3IpLlxudGhlbihcbigpPT50cnlFcnJvcixcbihmaW5hbGl6ZUVycm9yKT0+bWFrZUFnZ3JlZ2F0ZUVycm9yKFt0cnlFcnJvcixmaW5hbGl6ZUVycm9yXSkpLlxuXG50aGVuKChlcnJvcik9PlByb21pc2UucmVqZWN0KGVycm9yKSkpO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hZ2dyZWdhdGVUcnlGaW5hbGx5KGFnZ3JlZ2F0ZVRyeUZpbmFsbHkpO1xuY29uc3QgICAgICAgIHdpdGhEZWZlcnJlZENsZWFudXA9YXN5bmMoZm4pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNsZWFudXBzTElGTz1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWRkQ2xlYW51cD0oY2xlYW51cCk9PntcbmNsZWFudXBzTElGTy51bnNoaWZ0KGNsZWFudXApO1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZmluYWxpemVyPWFzeW5jKGVycik9Pntcbi8vXG5jb25zdCBjbGVhbnVwUmVzdWx0cz1jbGVhbnVwc0xJRk8ubWFwKGFzeW5jKGNsZWFudXApPT57XG5hd2FpdCBudWxsO1xucmV0dXJuIGNsZWFudXAoZXJyKTtcbiB9KTtcbmF3YWl0IFByb21pc2VBbGxPckVycm9ycyhjbGVhbnVwUmVzdWx0cyk7XG4gfTtcbnJldHVybiBhZ2dyZWdhdGVUcnlGaW5hbGx5KCgpPT5mbihhZGRDbGVhbnVwKSxmaW5hbGl6ZXIpO1xuIH07XG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS53aXRoRGVmZXJyZWRDbGVhbnVwKHdpdGhEZWZlcnJlZENsZWFudXApO1xuY29uc3QgICAgICAgIGFzc2VydEFsbERlZmluZWQ9KG9iaik9PntcbmNvbnN0IG1pc3Npbmc9W107XG5mb3IoY29uc3Rba2V5LHZhbF1vZiBPYmplY3QuZW50cmllcyhvYmopKXtcbmlmKHZhbD09PXVuZGVmaW5lZCl7XG5taXNzaW5nLnB1c2goa2V5KTtcbiB9XG4gfVxuaWYobWlzc2luZy5sZW5ndGg+MCl7XG5GYWlsIGBtaXNzaW5nICR7cShtaXNzaW5nKX1gO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5hc3NlcnRBbGxEZWZpbmVkKGFzc2VydEFsbERlZmluZWQpO1xuY29uc3Qgbm90RG9uZT1oYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6dW5kZWZpbmVkfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWx3YXlzRG9uZT1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcblxuY29uc3QgICAgICAgIGZvcmV2ZXI9YXN5bmNHZW5lcmF0ZSgoKT0+bm90RG9uZSk7XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLmZvcmV2ZXIoZm9yZXZlcik7XG5jb25zdCAgICAgICAgd2hpbGVUcnVlPShwcm9kdWNlKT0+XG5hc3luY0dlbmVyYXRlKGFzeW5jKCk9PntcbmNvbnN0IHZhbHVlPWF3YWl0IHByb2R1Y2UoKTtcbmlmKCF2YWx1ZSl7XG5yZXR1cm4gYWx3YXlzRG9uZTtcbiB9XG5yZXR1cm4gaGFyZGVuKHtcbmRvbmU6ZmFsc2UsXG52YWx1ZX0pO1xuXG4gfSk7XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLndoaWxlVHJ1ZSh3aGlsZVRydWUpO1xuY29uc3QgICAgICAgIHVudGlsVHJ1ZT0ocHJvZHVjZSk9PlxuYXN5bmNHZW5lcmF0ZShhc3luYygpPT57XG5jb25zdCB2YWx1ZT1hd2FpdCBwcm9kdWNlKCk7XG5pZih2YWx1ZSl7XG5yZXR1cm4gaGFyZGVuKHtcbmRvbmU6dHJ1ZSxcbnZhbHVlfSk7XG5cbiB9XG5yZXR1cm4gaGFyZGVuKHtcbmRvbmU6ZmFsc2UsXG52YWx1ZX0pO1xuXG4gfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS51bnRpbFRydWUodW50aWxUcnVlKTtcbmNvbnN0ICAgICAgICB6aXA9KHhzLHlzKT0+aGFyZGVuKHhzLm1hcCgoeCxpKT0+W3gseXNbK2ldXSkpO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLnppcCh6aXApO1xuY29uc3QgICAgICAgIGFsbFZhbHVlcz1hc3luYyhvYmopPT57XG5jb25zdCByZXNvbHZlZD1hd2FpdCBQcm9taXNlLmFsbCh2YWx1ZXMob2JqKSk7XG4vL1xucmV0dXJuIGhhcmRlbihmcm9tRW50cmllcyh6aXAoa2V5cyhvYmopLHJlc29sdmVkKSkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hbGxWYWx1ZXMoYWxsVmFsdWVzKTtcbmNvbnN0ICAgICAgICBzeW5jaHJvbml6ZWRUZWU9KHNvdXJjZVN0cmVhbSxyZWFkZXJDb3VudCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZG9uZVJlc3VsdDtcblxuLypcblxuXG5cbiAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBxdWV1ZXM9W107XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1bGxOZXh0PWFzeW5jKCk9PntcbmNvbnN0IHJlcXVlc3RzPWF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChxdWV1ZXMubWFwKChxdWV1ZSk9PnF1ZXVlLmdldCgpKSk7XG5jb25zdCByZWplY3Rpb25zPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXNvbHZlcnM9W107XG5sZXQgZG9uZT1mYWxzZTtcbmZvcihjb25zdCBzZXR0bGVkUmVzdWx0IG9mIHJlcXVlc3RzKXtcbmlmKHNldHRsZWRSZXN1bHQuc3RhdHVzPT09J3JlamVjdGVkJyl7XG5yZWplY3Rpb25zLnB1c2goc2V0dGxlZFJlc3VsdC5yZWFzb24pO1xuIH1lbHNle1xuZG9uZXx8PSEhc2V0dGxlZFJlc3VsdC52YWx1ZS5kb25lO1xucmVzb2x2ZXJzLnB1c2goc2V0dGxlZFJlc3VsdC52YWx1ZS52YWx1ZSk7XG4gfVxuIH1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmVzdWx0O1xuaWYoZG9uZVJlc3VsdCl7XG5yZXN1bHQ9UHJvbWlzZS5yZXNvbHZlKGRvbmVSZXN1bHQpO1xuIH1lbHNlIGlmKHJlamVjdGlvbnMubGVuZ3RoKXtcbmNvbnN0IGVycm9yPW1ha2VFcnJvcihYIGBUZWVkIHN0cmVhbSB0aHJld2ApO1xuYW5ub3RhdGVFcnJvcihlcnJvcixYIGBUZWVkIHJlamVjdGlvbnM6ICR7cmVqZWN0aW9uc31gKTtcbnJlc3VsdD1cbnNvdXJjZVN0cmVhbS50aHJvdz8uKGVycm9yKXx8XG5Qcm9taXNlLnJlc29sdmUoc291cmNlU3RyZWFtLnJldHVybj8uKCkpLnRoZW4oKCk9PlxuUHJvbWlzZS5yZWplY3QoZXJyb3IpKTtcblxuIH1lbHNlIGlmKGRvbmUpe1xucmVzdWx0PVxuc291cmNlU3RyZWFtLnJldHVybj8uKCl8fFxuUHJvbWlzZS5yZXNvbHZlKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfWVsc2V7XG5yZXN1bHQ9c291cmNlU3RyZWFtLm5leHQoKTtcbiB9XG5yZXN1bHQudGhlbihcbihyKT0+e1xuaWYoci5kb25lKXtcbmRvbmVSZXN1bHQ9cjtcbiB9XG4gfSxcbigpPT57XG5kb25lUmVzdWx0PXtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfTtcbiB9KTtcblxuZm9yKGNvbnN0IHJlc29sdmUgb2YgcmVzb2x2ZXJzKXtcbnJlc29sdmUocmVzdWx0KTtcbiB9XG5yZXR1cm4gcHVsbE5leHQoKTtcbiB9O1xuXG5jb25zdCByZWFkZXJzPUFycmF5LmZyb20oe2xlbmd0aDpyZWFkZXJDb3VudH0pLm1hcCgoKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHF1ZXVlPW1ha2VRdWV1ZSgpO1xucXVldWVzLnB1c2gocXVldWUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVhZGVyPWhhcmRlbih7XG4gICAgICBhc3luYyBuZXh0KCl7XG4vKlxuXG5cblxuICAgICAgICAgKi9cbmNvbnN0e3Byb21pc2UscmVzb2x2ZX09bWFrZVByb21pc2VLaXQoKTtcbnF1ZXVlLnB1dCh7dmFsdWU6cmVzb2x2ZSxkb25lOmZhbHNlfSk7XG5yZXR1cm4gcHJvbWlzZTtcbiB9LFxuICAgICAgYXN5bmMgcmV0dXJuKCl7XG4vKlxuXG5cblxuICAgICAgICAgKi9cbmNvbnN0e3Byb21pc2UscmVzb2x2ZX09bWFrZVByb21pc2VLaXQoKTtcbnF1ZXVlLnB1dCh7dmFsdWU6cmVzb2x2ZSxkb25lOnRydWV9KTtcbnJldHVybiBwcm9taXNlO1xuIH0sXG4gICAgICBhc3luYyB0aHJvdyhyZWFzb24pe1xuY29uc3QgcmVqZWN0aW9uPVByb21pc2UucmVqZWN0KHJlYXNvbik7XG5xdWV1ZS5wdXQocmVqZWN0aW9uKTtcbnJldHVybiByZWplY3Rpb247XG4gfSxcbi8vXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7XG5yZXR1cm4gcmVhZGVyO1xuIH0sXG4vL1xuICAgICAgYXN5bmNbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKXtcbmF3YWl0IHJlYWRlci5yZXR1cm4oKTtcbiB9fSk7XG5cbnJldHVybiByZWFkZXI7XG4gfSk7XG5cbnZvaWQgcHVsbE5leHQoKTtcbnJldHVybiByZWFkZXJzO1xuIH07JGjNj19vbmNlLnN5bmNocm9uaXplZFRlZShzeW5jaHJvbml6ZWRUZWUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVlcGx5RnVsZmlsbGVkT2JqZWN0IjpbImRlZXBseUZ1bGZpbGxlZE9iamVjdCJdLCJQcm9taXNlQWxsT3JFcnJvcnMiOlsiUHJvbWlzZUFsbE9yRXJyb3JzIl0sImFnZ3JlZ2F0ZVRyeUZpbmFsbHkiOlsiYWdncmVnYXRlVHJ5RmluYWxseSJdLCJ3aXRoRGVmZXJyZWRDbGVhbnVwIjpbIndpdGhEZWZlcnJlZENsZWFudXAiXSwiYXNzZXJ0QWxsRGVmaW5lZCI6WyJhc3NlcnRBbGxEZWZpbmVkIl0sImZvcmV2ZXIiOlsiZm9yZXZlciJdLCJ3aGlsZVRydWUiOlsid2hpbGVUcnVlIl0sInVudGlsVHJ1ZSI6WyJ1bnRpbFRydWUiXSwiemlwIjpbInppcCJdLCJhbGxWYWx1ZXMiOlsiYWxsVmFsdWVzIl0sInN5bmNocm9uaXplZFRlZSI6WyJzeW5jaHJvbml6ZWRUZWUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA0Rx36boiAAC6IgAAMQAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIi4vZGVidWcuanMiLCIuL2Vycm9ycy5qcyIsIi4vbGliLWNoYWluU3RvcmFnZS5qcyIsIi4vbWFyc2hhbC5qcyIsIi4vbWV0aG9kLXRvb2xzLmpzIiwiLi90ZXN0aW5nLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdE1hcnNoYWxsZXIiLCJkZWZhdWx0U2VyaWFsaXplciIsImRvY3VtZW50U3RvcmFnZVNjaGVtYSIsIm1ha2VGYWtlU3RvcmFnZUtpdCIsIm1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdCIsInNsb3RTdHJpbmdVbnNlcmlhbGl6ZSIsInNsb3RUb1JlbW90YWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRmFyLG1ha2VNYXJzaGFsLFJlbW90YWJsZSxtYWtlVHJhY2VyLE5vbk51bGxpc2gsaXNTdHJlYW1DZWxsLG1ha2VDaGFpblN0b3JhZ2VSb290LHVubWFyc2hhbEZyb21Wc3RvcmFnZSxiaW5kQWxsTWV0aG9kcyxldmVudExvb3BJdGVyYXRpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dLFtcIlJlbW90YWJsZVwiLCBbJGjNj19hID0+IChSZW1vdGFibGUgPSAkaM2PX2EpXV1dXSxbXCIuL2RlYnVnLmpzXCIsIFtbXCJtYWtlVHJhY2VyXCIsIFskaM2PX2EgPT4gKG1ha2VUcmFjZXIgPSAkaM2PX2EpXV1dXSxbXCIuL2Vycm9ycy5qc1wiLCBbW1wiTm9uTnVsbGlzaFwiLCBbJGjNj19hID0+IChOb25OdWxsaXNoID0gJGjNj19hKV1dXV0sW1wiLi9saWItY2hhaW5TdG9yYWdlLmpzXCIsIFtbXCJpc1N0cmVhbUNlbGxcIiwgWyRozY9fYSA9PiAoaXNTdHJlYW1DZWxsID0gJGjNj19hKV1dLFtcIm1ha2VDaGFpblN0b3JhZ2VSb290XCIsIFskaM2PX2EgPT4gKG1ha2VDaGFpblN0b3JhZ2VSb290ID0gJGjNj19hKV1dXV0sW1wiLi9tYXJzaGFsLmpzXCIsIFtbXCJ1bm1hcnNoYWxGcm9tVnN0b3JhZ2VcIiwgWyRozY9fYSA9PiAodW5tYXJzaGFsRnJvbVZzdG9yYWdlID0gJGjNj19hKV1dXV0sW1wiLi9tZXRob2QtdG9vbHMuanNcIiwgW1tcImJpbmRBbGxNZXRob2RzXCIsIFskaM2PX2EgPT4gKGJpbmRBbGxNZXRob2RzID0gJGjNj19hKV1dXV0sW1wiLi90ZXN0aW5nLXV0aWxzLmpzXCIsIFtbXCJldmVudExvb3BJdGVyYXRpb25cIiwgWyRozY9fYSA9PiAoZXZlbnRMb29wSXRlcmF0aW9uID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3QgdHJhY2U9bWFrZVRyYWNlcignU3RvclRVJyxmYWxzZSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc2xvdFRvUmVtb3RhYmxlPShfc2xvdElkLGlmYWNlPSdSZW1vdGFibGUnKT0+XG5SZW1vdGFibGUoaWZhY2UpO1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5zbG90VG9SZW1vdGFibGUoc2xvdFRvUmVtb3RhYmxlKTtcbmNvbnN0ICAgICAgICBkZWZhdWx0TWFyc2hhbGxlcj1tYWtlTWFyc2hhbCh1bmRlZmluZWQsc2xvdFRvUmVtb3RhYmxlLHtcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KTtcblxuXG4vKlxuXG4gKi8kaM2PX29uY2UuZGVmYXVsdE1hcnNoYWxsZXIoZGVmYXVsdE1hcnNoYWxsZXIpO1xuY29uc3QgICAgICAgIGRlZmF1bHRTZXJpYWxpemVyPXtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnBhcnNlOih0eHQpPT5kZWZhdWx0TWFyc2hhbGxlci5mcm9tQ2FwRGF0YShKU09OLnBhcnNlKHR4dCkpLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnN0cmluZ2lmeToob2JqKT0+SlNPTi5zdHJpbmdpZnkoZGVmYXVsdE1hcnNoYWxsZXIudG9DYXBEYXRhKG9iaikpfTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZWZhdWx0U2VyaWFsaXplcihkZWZhdWx0U2VyaWFsaXplcik7XG5jb25zdCBtYWtlU2xvdFN0cmluZ1Vuc2VyaWFsaXplPSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlkZW50aXR5U2xvdFRvVmFsRm49KHNsb3QsXyk9PkZhcigndW5rJyx7dG9KU09OOigpPT5zbG90fSk7XG5jb25zdHtmcm9tQ2FwRGF0YX09bWFrZU1hcnNoYWwodW5kZWZpbmVkLGlkZW50aXR5U2xvdFRvVmFsRm4pO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZT0oY2FwRGF0YSk9PlxuSlNPTi5wYXJzZShcbkpTT04uc3RyaW5naWZ5KGZyb21DYXBEYXRhKGNhcERhdGEpLChfLHZhbCk9PntcbmlmKHR5cGVvZiB2YWw9PT0nYmlnaW50Jyl7XG4vL1xuLy9cbnJldHVybiBgQGVuY3JvbXVsYXRlOiR7dmFsfWA7XG4gfWVsc2V7XG5yZXR1cm4gdmFsO1xuIH1cbiB9KSxcbihfa2V5LHZhbCk9PntcbmlmKHR5cGVvZiB2YWw9PT0nc3RyaW5nJyYmdmFsLnN0YXJ0c1dpdGgoJ0BlbmNyb211bGF0ZScpKXtcbnJldHVybiBCaWdJbnQodmFsLnNwbGl0KCc6JylbMV0pO1xuIH1lbHNle1xucmV0dXJuIHZhbDtcbiB9XG4gfSk7XG5cbnJldHVybiBoYXJkZW4odW5zZXJpYWxpemUpO1xuIH07XG5jb25zdCAgICAgICAgc2xvdFN0cmluZ1Vuc2VyaWFsaXplPW1ha2VTbG90U3RyaW5nVW5zZXJpYWxpemUoKTtcblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5zbG90U3RyaW5nVW5zZXJpYWxpemUoc2xvdFN0cmluZ1Vuc2VyaWFsaXplKTtcbmNvbnN0ICAgICAgICBtYWtlRmFrZVN0b3JhZ2VLaXQ9KHJvb3RQYXRoLHJvb3RPcHRpb25zKT0+e1xuY29uc3QgcmVzb2x2ZWRPcHRpb25zPXtzZXF1ZW5jZTp0cnVlLC4uLnJvb3RPcHRpb25zfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGF0YT1uZXcgTWFwKCk7XG5sZXQgY3VycmVudEJsb2NrSGVpZ2h0PTA7XG5cbmNvbnN0IHVwZGF0ZU5ld0NlbGxCbG9ja0hlaWdodD0oYmxvY2tIZWlnaHQ9Y3VycmVudEJsb2NrSGVpZ2h0KzEpPT57XG5ibG9ja0hlaWdodD5jdXJyZW50QmxvY2tIZWlnaHR8fFxuRmFpbCBgYmxvY2tIZWlnaHQgJHtibG9ja0hlaWdodH0gbXVzdCBiZSBncmVhdGVyIHRoYW4gJHtjdXJyZW50QmxvY2tIZWlnaHR9YDtcbmN1cnJlbnRCbG9ja0hlaWdodD1ibG9ja0hlaWdodDtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2V0Q2hpbGRFbnRyaWVzPShwcmVmaXgpPT57XG5hc3NlcnQocHJlZml4LmVuZHNXaXRoKCcuJykpO1xuY29uc3QgY2hpbGRFbnRyaWVzPW5ldyBNYXAoKTtcbmZvcihjb25zdFtwYXRoLHZhbHVlXW9mIGRhdGEuZW50cmllcygpKXtcbmlmKCFwYXRoLnN0YXJ0c1dpdGgocHJlZml4KSl7XG5jb250aW51ZTtcbiB9XG5jb25zdFtzZWdtZW50LC4uLnN1ZmZpeF09cGF0aC5zbGljZShwcmVmaXgubGVuZ3RoKS5zcGxpdCgnLicpO1xuaWYoc3VmZml4Lmxlbmd0aD09PTApe1xuY2hpbGRFbnRyaWVzLnNldChzZWdtZW50LHZhbHVlKTtcbiB9ZWxzZSBpZighY2hpbGRFbnRyaWVzLmhhcyhzZWdtZW50KSl7XG5jaGlsZEVudHJpZXMuc2V0KHNlZ21lbnQsbnVsbCk7XG4gfVxuIH1cbnJldHVybiBjaGlsZEVudHJpZXM7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1lc3NhZ2VzPVtdO1xuXG5jb25zdCB0b1N0b3JhZ2U9RmFyKFxuJ1RvU3RvcmFnZScsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuKG1lc3NhZ2UpPT57XG5tZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuc3dpdGNoKG1lc3NhZ2UubWV0aG9kKXtcbmNhc2UnZ2V0U3RvcmVLZXknOntcbmNvbnN0W2tleV09bWVzc2FnZS5hcmdzO1xucmV0dXJue3N0b3JlTmFtZTonc3dpbmdzZXQnLHN0b3JlU3Via2V5OiBgZmFrZToke2tleX1gfTtcbiB9XG5jYXNlJ2dldCc6e1xuY29uc3Rba2V5XT1tZXNzYWdlLmFyZ3M7XG5yZXR1cm4gZGF0YS5oYXMoa2V5KT9kYXRhLmdldChrZXkpOm51bGw7XG4gfVxuY2FzZSdjaGlsZHJlbic6e1xuY29uc3Rba2V5XT1tZXNzYWdlLmFyZ3M7XG5jb25zdCBjaGlsZEVudHJpZXM9Z2V0Q2hpbGRFbnRyaWVzKCBgJHtrZXl9LmApO1xucmV0dXJuWy4uLmNoaWxkRW50cmllcy5rZXlzKCldO1xuIH1cbmNhc2UnZW50cmllcyc6e1xuY29uc3Rba2V5XT1tZXNzYWdlLmFyZ3M7XG5jb25zdCBjaGlsZEVudHJpZXM9Z2V0Q2hpbGRFbnRyaWVzKCBgJHtrZXl9LmApO1xucmV0dXJuWy4uLmNoaWxkRW50cmllcy5lbnRyaWVzKCldLm1hcCgoZW50cnkpPT5cbmVudHJ5WzFdIT1udWxsP2VudHJ5OltlbnRyeVswXV0pO1xuXG4gfVxuY2FzZSdzZXQnOlxuY2FzZSdzZXRXaXRob3V0Tm90aWZ5Jzp7XG50cmFjZSgndG9TdG9yYWdlIHNldCcsbWVzc2FnZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbmV3RW50cmllcz1tZXNzYWdlLmFyZ3M7XG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mIG5ld0VudHJpZXMpe1xuaWYodmFsdWUhPW51bGwpe1xuZGF0YS5zZXQoa2V5LHZhbHVlKTtcbiB9ZWxzZXtcbmRhdGEuZGVsZXRlKGtleSk7XG4gfVxuIH1cbmJyZWFrO1xuIH1cbmNhc2UnYXBwZW5kJzp7XG50cmFjZSgndG9TdG9yYWdlIGFwcGVuZCcsbWVzc2FnZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbmV3RW50cmllcz1tZXNzYWdlLmFyZ3M7XG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mIG5ld0VudHJpZXMpe1xudmFsdWUhPW51bGx8fEZhaWwgYGF0dGVtcHQgdG8gYXBwZW5kIHdpdGggbm8gdmFsdWVgO1xuLy9cbmNvbnN0IG9sZFZhbD1kYXRhLmdldChrZXkpO1xubGV0IHN0cmVhbUNlbGw7XG5pZihvbGRWYWwhPW51bGwpe1xudHJ5e1xuc3RyZWFtQ2VsbD1KU09OLnBhcnNlKG9sZFZhbCk7XG5hc3NlcnQoaXNTdHJlYW1DZWxsKHN0cmVhbUNlbGwpKTtcbiB9Y2F0Y2goX2Vycil7XG5zdHJlYW1DZWxsPXVuZGVmaW5lZDtcbiB9XG4gfVxuaWYoXG5zdHJlYW1DZWxsPT09dW5kZWZpbmVkfHxcbk51bWJlcihzdHJlYW1DZWxsLmJsb2NrSGVpZ2h0KSE9PWN1cnJlbnRCbG9ja0hlaWdodClcbntcbnN0cmVhbUNlbGw9e1xuYmxvY2tIZWlnaHQ6U3RyaW5nKGN1cnJlbnRCbG9ja0hlaWdodCksXG52YWx1ZXM6IXN0cmVhbUNlbGwmJm9sZFZhbCE9bnVsbD9bb2xkVmFsXTpbXX07XG5cbiB9XG5zdHJlYW1DZWxsLnZhbHVlcy5wdXNoKHZhbHVlKTtcbmRhdGEuc2V0KGtleSxKU09OLnN0cmluZ2lmeShzdHJlYW1DZWxsKSk7XG4gfVxuYnJlYWs7XG4gfVxuY2FzZSdzaXplJzpcbi8vXG4vL1xucmV0dXJuWy4uLmRhdGEua2V5cygpXS5maWx0ZXIoKGspPT5cbmsuc3RhcnRzV2l0aCggYCR7bWVzc2FnZS5hcmdzWzBdfS5gKSkuXG5sZW5ndGg7XG5kZWZhdWx0OlxudGhyb3cgRXJyb3IoIGB1bnN1cHBvcnRlZCBtZXRob2Q6ICR7bWVzc2FnZS5tZXRob2R9YCk7fVxuXG4gfSk7XG5cbmNvbnN0IHJvb3ROb2RlPW1ha2VDaGFpblN0b3JhZ2VSb290KHRvU3RvcmFnZSxyb290UGF0aCxyZXNvbHZlZE9wdGlvbnMpO1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0VmFsdWVzPShwYXRoKT0+e1xuYXNzZXJ0KHJlc29sdmVkT3B0aW9ucy5zZXF1ZW5jZSk7XG5jb25zdCBub2RlRGF0YT1kYXRhLmdldChwYXRoKTtcbmFzc2VydChub2RlRGF0YSwgYG5vIGRhdGEgYXQgcGF0aCAke3BhdGh9YCk7XG5jb25zdCB3cmFwcGVyPUpTT04ucGFyc2Uobm9kZURhdGEpO1xucmV0dXJuIHdyYXBwZXIudmFsdWVzO1xuIH07XG5cbnJldHVybntcbnJvb3ROb2RlLFxuLy9cbmRhdGE6LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL2RhdGEsXG51cGRhdGVOZXdDZWxsQmxvY2tIZWlnaHQsXG5nZXRWYWx1ZXMsXG5tZXNzYWdlcyxcbnRvU3RvcmFnZX07XG5cbiB9OyRozY9fb25jZS5tYWtlRmFrZVN0b3JhZ2VLaXQobWFrZUZha2VTdG9yYWdlS2l0KTtcbmhhcmRlbihtYWtlRmFrZVN0b3JhZ2VLaXQpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlTW9ja0NoYWluU3RvcmFnZVJvb3Q9KCk9PntcbmNvbnN0e3Jvb3ROb2RlLGRhdGF9PW1ha2VGYWtlU3RvcmFnZUtpdCgnbW9ja0NoYWluU3RvcmFnZVJvb3QnKTtcbnJldHVybiBGYXIoJ21vY2tDaGFpblN0b3JhZ2UnLHtcbi4uLmJpbmRBbGxNZXRob2RzKHJvb3ROb2RlKSxcbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAgICovXG5nZXRCb2R5OihwYXRoLG1hcnNoYWxsZXI9ZGVmYXVsdE1hcnNoYWxsZXIsaW5kZXg9LTEpPT57XG5kYXRhLnNpemV8fEZhaWwgYG5vIGRhdGEgaW4gc3RvcmFnZWA7XG4vKlxuXG5cblxuICAgICAgICovXG5jb25zdCBmcm9tQ2FwRGF0YT0oLi4uYXJncyk9PlxuUmVmbGVjdC5hcHBseShtYXJzaGFsbGVyLmZyb21DYXBEYXRhLG1hcnNoYWxsZXIsYXJncyk7XG5yZXR1cm4gdW5tYXJzaGFsRnJvbVZzdG9yYWdlKGRhdGEscGF0aCxmcm9tQ2FwRGF0YSxpbmRleCk7XG4gfSxcbmtleXM6KCk9PlsuLi5kYXRhLmtleXMoKV19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZU1vY2tDaGFpblN0b3JhZ2VSb290KG1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdCk7XG5jb25zdCAgICAgICAgZG9jdW1lbnRTdG9yYWdlU2NoZW1hPWFzeW5jKHQsc3RvcmFnZSxvcHRzKT0+e1xuLy9cbmF3YWl0IGV2ZW50TG9vcEl0ZXJhdGlvbigpO1xuXG5jb25zdCBnZXRMYXN0PSgvKiAgICAgICAgICAgICAgICAgKi9jZWxsKT0+XG5KU09OLnBhcnNlKGNlbGwpLnZhbHVlcy5hdCgtMSl8fGFzc2VydC5mYWlsKCk7XG5jb25zdHtzaG93VmFsdWU9KHMpPT5zfT1vcHRzO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2V0Qm9keURlZmF1bHQ9KGQsayk9PnNob3dWYWx1ZShnZXRMYXN0KE5vbk51bGxpc2goZC5nZXQoaykpKSk7XG5cbmNvbnN0W2tleXMsZ2V0Qm9keV09XG4na2V5cydpbiBzdG9yYWdlP1xuW3N0b3JhZ2Uua2V5cygpLCgvKiAgICAgICAgICAgICAgICAgKi9rKT0+c3RvcmFnZS5nZXRCb2R5KGspXTpcbltcbnN0b3JhZ2UuZGF0YS5rZXlzKCksXG4oLyogICAgICAgICAgICAgICAgICovayk9PmdldEJvZHlEZWZhdWx0KHN0b3JhZ2UuZGF0YSxrKV07XG5cblxuY29uc3R7cGF0dGVybixyZXBsYWNlbWVudH09XG4ncGF0dGVybidpbiBvcHRzP1xub3B0czpcbntwYXR0ZXJuOidtb2NrQ2hhaW5TdG9yYWdlUm9vdC4nLHJlcGxhY2VtZW50OidwdWJsaXNoZWQuJ307XG5cbmNvbnN0IHBydW5lZD1bLi4ua2V5c10uXG5zb3J0KCkuXG5maWx0ZXIoXG4nbm9kZSdpbiBvcHRzP1xuKGtleSk9Plxua2V5LlxucmVwbGFjZShwYXR0ZXJuLHJlcGxhY2VtZW50KS5cbnN0YXJ0c1dpdGgoIGBwdWJsaXNoZWQuJHtvcHRzLm5vZGV9YCk6XG4oX2VudHJ5KT0+dHJ1ZSk7XG5cblxuY29uc3QgaWxsdXN0cmF0aW9uPXBydW5lZC5tYXAoXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuKGtleSk9PltrZXkucmVwbGFjZShwYXR0ZXJuLHJlcGxhY2VtZW50KSxnZXRCb2R5KGtleSldKTtcblxuXG5jb25zdCBub3RlPVxuJ25vdGUnaW4gb3B0cz9cbm9wdHMubm90ZTpcbiBgVW5kZXIgXCJwdWJsaXNoZWRcIiwgdGhlIFwiJHtvcHRzLm5vZGV9XCIgbm9kZSBpcyBkZWxlZ2F0ZWQgdG8gJHtvcHRzLm93bmVyfS5gO1xuY29uc3QgYm9pbGVycGxhdGU9IGBcblRoZSBleGFtcGxlIGJlbG93IGlsbHVzdHJhdGVzIHRoZSBzY2hlbWEgb2YgdGhlIGRhdGEgcHVibGlzaGVkIHRoZXJlLlxuXG5TZWUgYWxzbyBib2FyZCBtYXJzaGFsbGluZyBjb252ZW50aW9ucyAoX3RvIGFwcGVhcl8pLmA7XG50LnNuYXBzaG90KGlsbHVzdHJhdGlvbixub3RlK2JvaWxlcnBsYXRlKTtcbiB9OyRozY9fb25jZS5kb2N1bWVudFN0b3JhZ2VTY2hlbWEoZG9jdW1lbnRTdG9yYWdlU2NoZW1hKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InNsb3RUb1JlbW90YWJsZSI6WyJzbG90VG9SZW1vdGFibGUiXSwiZGVmYXVsdE1hcnNoYWxsZXIiOlsiZGVmYXVsdE1hcnNoYWxsZXIiXSwiZGVmYXVsdFNlcmlhbGl6ZXIiOlsiZGVmYXVsdFNlcmlhbGl6ZXIiXSwic2xvdFN0cmluZ1Vuc2VyaWFsaXplIjpbInNsb3RTdHJpbmdVbnNlcmlhbGl6ZSJdLCJtYWtlRmFrZVN0b3JhZ2VLaXQiOlsibWFrZUZha2VTdG9yYWdlS2l0Il0sIm1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdCI6WyJtYWtlTW9ja0NoYWluU3RvcmFnZVJvb3QiXSwiZG9jdW1lbnRTdG9yYWdlU2NoZW1hIjpbImRvY3VtZW50U3RvcmFnZVNjaGVtYSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADrGI4BUAYAAFAGAAAsAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3Rlc3RpbmctdXRpbHMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImV2ZW50TG9vcEl0ZXJhdGlvbiIsImluc3BlY3RNYXBTdG9yZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLypcblxuXG4gKi9cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlbnRMb29wSXRlcmF0aW9uPWFzeW5jKCk9PlxubmV3IFByb21pc2UoKHJlc29sdmUpPT5zZXRJbW1lZGlhdGUocmVzb2x2ZSkpOyRozY9fb25jZS5ldmVudExvb3BJdGVyYXRpb24oZXZlbnRMb29wSXRlcmF0aW9uKTtcbmhhcmRlbihldmVudExvb3BJdGVyYXRpb24pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdPclRhZz0odmFsdWUpPT57XG5pZih0eXBlb2YgdmFsdWU9PT0nc3RyaW5nJyl7XG5yZXR1cm4gdmFsdWU7XG4gfWVsc2UgaWYodHlwZW9mIHZhbHVlPT09J29iamVjdCcmJlN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZSl7XG5yZXR1cm4gdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiB9XG5yZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiB9O1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpbnNwZWN0TWFwU3RvcmU9KHN0b3JlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9iaj17fTtcbmZvcihjb25zdCBrZXkgb2Ygc3RvcmUua2V5cygpKXtcbmNvbnN0IHZhbHVlPXN0b3JlLmdldChrZXkpO1xuY29uc3QgaGFzS2V5cz10eXBlb2YgdmFsdWU9PT0nb2JqZWN0JyYmJ2tleXMnaW4gdmFsdWU7XG5jb25zdCBpbmRleD1zdHJpbmdPclRhZyhrZXkpO1xuaWYoaGFzS2V5cyYmJ2dldCdpbiB2YWx1ZSl7XG5vYmpbaW5kZXhdPWluc3BlY3RNYXBTdG9yZSh2YWx1ZSk7XG4gfWVsc2UgaWYoaGFzS2V5cyl7XG5vYmpbaW5kZXhdPUFycmF5LmZyb20odmFsdWUua2V5cygpKTtcbiB9ZWxzZXtcbm9ialtpbmRleF09XG52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCYmU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlP1xudmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXTpcbnZhbHVlO1xuIH1cbiB9XG5yZXR1cm4gb2JqO1xuIH07JGjNj19vbmNlLmluc3BlY3RNYXBTdG9yZShpbnNwZWN0TWFwU3RvcmUpO1xuaGFyZGVuKGluc3BlY3RNYXBTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJldmVudExvb3BJdGVyYXRpb24iOlsiZXZlbnRMb29wSXRlcmF0aW9uIl0sImluc3BlY3RNYXBTdG9yZSI6WyJpbnNwZWN0TWFwU3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGERIDiwDAAAsAwAAKAAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90eXBlQ2hlY2suanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJjYXN0IiwibXVzdE1hdGNoIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHlwZWxlc3NNdXN0TWF0Y2g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKHR5cGVsZXNzTXVzdE1hdGNoID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKlxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbXVzdE1hdGNoPXR5cGVsZXNzTXVzdE1hdGNoO1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UubXVzdE1hdGNoKG11c3RNYXRjaCk7XG5jb25zdCAgICAgICAgY2FzdD0oc3BlY2ltZW4scGF0dCk9Pntcbi8vXG4vL1xuLy9cbm11c3RNYXRjaChzcGVjaW1lbixwYXR0KTtcbnJldHVybiBzcGVjaW1lbjtcbiB9OyRozY9fb25jZS5jYXN0KGNhc3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibXVzdE1hdGNoIjpbIm11c3RNYXRjaCJdLCJjYXN0IjpbImNhc3QiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAApNcQNH0DAAB9AwAAKQAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90eXBlR3VhcmRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiU3RvcmFnZU5vZGVTaGFwZSIsIlVuZ3VhcmRlZEhlbHBlckkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBNOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5jb25zdCAgICAgICAgU3RvcmFnZU5vZGVTaGFwZT1NLnJlbW90YWJsZSgnU3RvcmFnZU5vZGUnKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLlN0b3JhZ2VOb2RlU2hhcGUoU3RvcmFnZU5vZGVTaGFwZSk7XG5jb25zdCAgICAgICAgVW5ndWFyZGVkSGVscGVyST1NLmludGVyZmFjZShcbidoZWxwZXInLFxue30sXG4vL1xue3Nsb3BweTp0cnVlfSk7JGjNj19vbmNlLlVuZ3VhcmRlZEhlbHBlckkoVW5ndWFyZGVkSGVscGVySSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJTdG9yYWdlTm9kZVNoYXBlIjpbIlN0b3JhZ2VOb2RlU2hhcGUiXSwiVW5ndWFyZGVkSGVscGVySSI6WyJVbmd1YXJkZWRIZWxwZXJJIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAVESyZ5AQAAeQEAACoAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdHlwZXMtaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA03qr5UEHAABBBwAAKgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy91cGdyYWRlLWFwaS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUiLCJpc0FiYW5kb25lZEVycm9yIiwiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiIsIm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE0sbWF0Y2hlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuY29uc3R7aXNGcm96ZW59PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgICAgICAgIFVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGU9aGFyZGVuKHtcbm5hbWU6J3ZhdFVwZ3JhZGVkJyxcbnVwZ3JhZGVNZXNzYWdlOk0uc3RyaW5nKCksXG5pbmNhcm5hdGlvbk51bWJlcjpNLm51bWJlcigpfSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5VcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlKFVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUpO1xuY29uc3QgICAgICAgIG1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbj0odXBncmFkZU1lc3NhZ2UsdG9JbmNhcm5hdGlvbk51bWJlcik9PlxuaGFyZGVuKHtcbm5hbWU6J3ZhdFVwZ3JhZGVkJyxcbnVwZ3JhZGVNZXNzYWdlLFxuaW5jYXJuYXRpb25OdW1iZXI6dG9JbmNhcm5hdGlvbk51bWJlcn0pOyRozY9fb25jZS5tYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24obWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uKTtcblxuaGFyZGVuKG1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzVXBncmFkZURpc2Nvbm5lY3Rpb249KHJlYXNvbik9PlxucmVhc29uIT1udWxsJiYvL1xuaXNGcm96ZW4ocmVhc29uKSYmXG5tYXRjaGVzKHJlYXNvbixVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlKTskaM2PX29uY2UuaXNVcGdyYWRlRGlzY29ubmVjdGlvbihpc1VwZ3JhZGVEaXNjb25uZWN0aW9uKTtcbmhhcmRlbihpc1VwZ3JhZGVEaXNjb25uZWN0aW9uKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0FiYW5kb25lZEVycm9yPShyZWFzb24pPT5cbnJlYXNvbiE9bnVsbCYmLy9cbmlzRnJvemVuKHJlYXNvbikmJlxubWF0Y2hlcyhyZWFzb24sTS5lcnJvcigpKSYmXG4vL1xuLy9cbnJlYXNvbi5tZXNzYWdlPT09J3ZhdCB0ZXJtaW5hdGVkJzskaM2PX29uY2UuaXNBYmFuZG9uZWRFcnJvcihpc0FiYW5kb25lZEVycm9yKTtcbmhhcmRlbihpc0FiYW5kb25lZEVycm9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUiOlsiVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSJdLCJtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24iOlsibWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uIl0sImlzVXBncmFkZURpc2Nvbm5lY3Rpb24iOlsiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiJdLCJpc0FiYW5kb25lZEVycm9yIjpbImlzQWJhbmRvbmVkRXJyb3IiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAEo7iXzYIAAA2CAAAMwAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIiwib2JzZXJ2ZUl0ZXJhdGlvbiIsIm9ic2VydmVJdGVyYXRvciIsIm9ic2VydmVOb3RpZmllciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsc3Vic2NyaWJlTGF0ZXN0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlTGF0ZXN0XCIsIFskaM2PX2EgPT4gKHN1YnNjcmliZUxhdGVzdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXI9c3Vic2NyaWJlTGF0ZXN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyKG1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyKTtcbmNvbnN0ICAgICAgICBvYnNlcnZlSXRlcmF0b3I9KGFzeW5jSXRlcmF0b3JQLGl0ZXJhdGlvbk9ic2VydmVyKT0+e1xucmV0dXJuIG5ldyBQcm9taXNlKChhY2ssb2JzZXJ2ZXJFcnJvcik9PntcbmNvbnN0IHJlY3VyPSgpPT57XG5FLndoZW4oXG5FKGFzeW5jSXRlcmF0b3JQKS5uZXh0KCksXG4oe3ZhbHVlLGRvbmV9KT0+e1xuaWYoZG9uZSl7XG5pdGVyYXRpb25PYnNlcnZlci5maW5pc2gmJml0ZXJhdGlvbk9ic2VydmVyLmZpbmlzaCh2YWx1ZSk7XG5hY2sodW5kZWZpbmVkKTtcbiB9ZWxzZXtcbml0ZXJhdGlvbk9ic2VydmVyLnVwZGF0ZVN0YXRlJiZcbml0ZXJhdGlvbk9ic2VydmVyLnVwZGF0ZVN0YXRlKHZhbHVlKTtcbnJlY3VyKCk7XG4gfVxuIH0sXG4ocmVhc29uKT0+e1xuaXRlcmF0aW9uT2JzZXJ2ZXIuZmFpbCYmaXRlcmF0aW9uT2JzZXJ2ZXIuZmFpbChyZWFzb24pO1xuYWNrKHVuZGVmaW5lZCk7XG4gfSkuXG5jYXRjaChvYnNlcnZlckVycm9yKTtcbiB9O1xucmVjdXIoKTtcbiB9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm9ic2VydmVJdGVyYXRvcihvYnNlcnZlSXRlcmF0b3IpO1xuY29uc3QgICAgICAgIG9ic2VydmVJdGVyYXRpb249KGFzeW5jSXRlcmFibGVQLGl0ZXJhdGlvbk9ic2VydmVyKT0+e1xuY29uc3QgaXRlcmF0b3JQPUUoYXN5bmNJdGVyYWJsZVApW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xucmV0dXJuIG9ic2VydmVJdGVyYXRvcihpdGVyYXRvclAsaXRlcmF0aW9uT2JzZXJ2ZXIpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2Uub2JzZXJ2ZUl0ZXJhdGlvbihvYnNlcnZlSXRlcmF0aW9uKTtcbmNvbnN0ICAgICAgICBvYnNlcnZlTm90aWZpZXI9KG5vdGlmaWVyUCxpdGVyYXRpb25PYnNlcnZlcik9Plxub2JzZXJ2ZUl0ZXJhdGlvbihzdWJzY3JpYmVMYXRlc3Qobm90aWZpZXJQKSxpdGVyYXRpb25PYnNlcnZlcik7JGjNj19vbmNlLm9ic2VydmVOb3RpZmllcihvYnNlcnZlTm90aWZpZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiOlsibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiXSwib2JzZXJ2ZUl0ZXJhdG9yIjpbIm9ic2VydmVJdGVyYXRvciJdLCJvYnNlcnZlSXRlcmF0aW9uIjpbIm9ic2VydmVJdGVyYXRpb24iXSwib2JzZXJ2ZU5vdGlmaWVyIjpbIm9ic2VydmVOb3RpZmllciJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACgC8uyDAgAAAwIAAAkAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vcHVibGlzaC1raXQuanMiLCIuL3N1YnNjcmliZS5qcyIsIi4vbm90aWZpZXIuanMiLCIuL3N1YnNjcmliZXIuanMiLCIuL3RvcGljLmpzIiwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyIsIi4vc3RvcmVzdWIuanMiLCIuL3N0b3JlZC1ub3RpZmllci5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiZXhwb3J0cyI6WyJtYWtlTm90aWZpZXJLaXQiLCJtYWtlTm90aWZpZXJLaXQiLCJtYWtlU3Vic2NyaXB0aW9uS2l0IiwibWFrZVN1YnNjcmlwdGlvbktpdCIsIm9ic2VydmVJdGVyYXRvciIsIm9ic2VydmVJdGVyYXRvciIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInN1YnNjcmliZUxhdGVzdCIsInN1YnNjcmliZUxhdGVzdCIsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3N0b3JlZC1ub3RpZmllci5qcyIsIi4vc3RvcmVzdWIuanMiLCIuL3R5cGVzLWluZGV4LmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vcHVibGlzaC1raXQuanNcIiwgW11dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtdXSxbXCIuL25vdGlmaWVyLmpzXCIsIFtdXSxbXCIuL3N1YnNjcmliZXIuanNcIiwgW11dLFtcIi4vdG9waWMuanNcIiwgW11dLFtcIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanNcIiwgW11dLFtcIi4vc3RvcmVzdWIuanNcIiwgW11dLFtcIi4vc3RvcmVkLW5vdGlmaWVyLmpzXCIsIFtdXSxbXCIuL3R5cGVzLWluZGV4LmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9wdWJsaXNoLWtpdC5qcyI6W1sibWFrZVB1Ymxpc2hLaXQiLCJtYWtlUHVibGlzaEtpdCJdLFsicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0IiwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0Il0sWyJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIiwiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSJdLFsiSXRlcmFibGVFYWNoVG9waWNJIiwiSXRlcmFibGVFYWNoVG9waWNJIl0sWyJJdGVyYWJsZUxhdGVzdFRvcGljSSIsIkl0ZXJhYmxlTGF0ZXN0VG9waWNJIl0sWyJTdWJzY3JpYmVyU2hhcGUiLCJTdWJzY3JpYmVyU2hhcGUiXV0sIi4vc3Vic2NyaWJlLmpzIjpbWyJzdWJzY3JpYmVFYWNoIiwic3Vic2NyaWJlRWFjaCJdLFsic3Vic2NyaWJlTGF0ZXN0Iiwic3Vic2NyaWJlTGF0ZXN0Il1dLCIuL25vdGlmaWVyLmpzIjpbWyJtYWtlTm90aWZpZXIiLCJtYWtlTm90aWZpZXIiXSxbIm1ha2VOb3RpZmllcktpdCIsIm1ha2VOb3RpZmllcktpdCJdLFsibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiLCJtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSJdLFsibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiLCJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciJdXSwiLi9zdWJzY3JpYmVyLmpzIjpbWyJtYWtlU3Vic2NyaXB0aW9uIiwibWFrZVN1YnNjcmlwdGlvbiJdLFsibWFrZVN1YnNjcmlwdGlvbktpdCIsIm1ha2VTdWJzY3JpcHRpb25LaXQiXV0sIi4vdG9waWMuanMiOltbIm1ha2VQaW5uZWRIaXN0b3J5VG9waWMiLCJtYWtlUGlubmVkSGlzdG9yeVRvcGljIl1dLCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIjpbWyJvYnNlcnZlTm90aWZpZXIiLCJvYnNlcnZlTm90aWZpZXIiXSxbIm9ic2VydmVJdGVyYXRvciIsIm9ic2VydmVJdGVyYXRvciJdLFsib2JzZXJ2ZUl0ZXJhdGlvbiIsIm9ic2VydmVJdGVyYXRpb24iXSxbIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIiwibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPOeblugEAAAoBAAACcAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvbm90aWZpZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiLi9wdWJsaXNoLWtpdC5qcyIsIi4vc3Vic2NyaWJlLmpzIl0sImV4cG9ydHMiOlsibWFrZU5vdGlmaWVyIiwibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiLCJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciIsIm1ha2VOb3RpZmllcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxFLEZhcixtYWtlUHVibGlzaEtpdCxzdWJzY3JpYmVMYXRlc3Q7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiLi9wdWJsaXNoLWtpdC5qc1wiLCBbW1wibWFrZVB1Ymxpc2hLaXRcIiwgWyRozY9fYSA9PiAobWFrZVB1Ymxpc2hLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlTGF0ZXN0XCIsIFskaM2PX2EgPT4gKHN1YnNjcmliZUxhdGVzdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTm90aWZpZXI9KHNoYXJhYmxlSW50ZXJuYWxzUCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBub3RpZmllcj1GYXIoJ25vdGlmaWVyJyx7XG4uLi5zdWJzY3JpYmVMYXRlc3Qoc2hhcmFibGVJbnRlcm5hbHNQKSxcbmdldFVwZGF0ZVNpbmNlOmFzeW5jKHVwZGF0ZUNvdW50KT0+XG5FKHNoYXJhYmxlSW50ZXJuYWxzUCkuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpLFxuXG4vKlxuXG5cblxuXG4gICAgICovXG5nZXRTaGFyYWJsZU5vdGlmaWVySW50ZXJuYWxzOmFzeW5jKCk9PnNoYXJhYmxlSW50ZXJuYWxzUCxcbi8qXG5cblxuXG4gICAgICovXG5nZXRTdG9yZUtleTooKT0+aGFyZGVuKHtub3RpZmllcn0pfSk7XG5cbnJldHVybiBub3RpZmllcjtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLm1ha2VOb3RpZmllcihtYWtlTm90aWZpZXIpO1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyPShzdWJzY3JpYmVyKT0+e1xuLypcblxuICAgKi9cbmNvbnN0IGJhc2VOb3RpZmllcj1oYXJkZW4oe1xuZ2V0VXBkYXRlU2luY2U6KHVwZGF0ZUNvdW50PXVuZGVmaW5lZCk9PlxuRShzdWJzY3JpYmVyKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgbm90aWZpZXI9RmFyKCdub3RpZmllcicse1xuLi4ubWFrZU5vdGlmaWVyKGJhc2VOb3RpZmllciksXG4uLi5iYXNlTm90aWZpZXJ9KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH07JGjNj19vbmNlLm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyKG1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyKTtcbmhhcmRlbihtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTm90aWZpZXJLaXQ9KC4uLmluaXRpYWxTdGF0ZUFycik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0e3B1Ymxpc2hlcixzdWJzY3JpYmVyfT1tYWtlUHVibGlzaEtpdCgpO1xuXG5jb25zdCBub3RpZmllcj1tYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcihzdWJzY3JpYmVyKTtcblxuY29uc3QgdXBkYXRlcj1GYXIoJ3VwZGF0ZXInLHtcbnVwZGF0ZVN0YXRlOihzdGF0ZSk9PnB1Ymxpc2hlci5wdWJsaXNoKHN0YXRlKSxcbmZpbmlzaDooY29tcGxldGlvbik9PnB1Ymxpc2hlci5maW5pc2goY29tcGxldGlvbiksXG5mYWlsOihyZWFzb24pPT5wdWJsaXNoZXIuZmFpbChyZWFzb24pfSk7XG5cblxuYXNzZXJ0KGluaXRpYWxTdGF0ZUFyci5sZW5ndGg8PTEsJ3RvbyBtYW55IGFyZ3VtZW50cycpO1xuaWYoaW5pdGlhbFN0YXRlQXJyLmxlbmd0aD09PTEpe1xudXBkYXRlci51cGRhdGVTdGF0ZShpbml0aWFsU3RhdGVBcnJbMF0pO1xuIH1cblxuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKHtub3RpZmllcix1cGRhdGVyfSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VOb3RpZmllcktpdChtYWtlTm90aWZpZXJLaXQpO1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlPShhc3luY0l0ZXJhYmxlUCk9PntcbmNvbnN0IGl0ZXJhdG9yUD1FKGFzeW5jSXRlcmFibGVQKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IG9wdE5leHRQcm9taXNlO1xubGV0IGN1cnJlbnRVcGRhdGVDb3VudD0wbjtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBjdXJyZW50UmVzcG9uc2U7XG5sZXQgZmluYWw9ZmFsc2U7XG5cbi8qXG5cbiAgICovXG5jb25zdCBiYXNlTm90aWZpZXI9RmFyKCdiYXNlTm90aWZpZXInLHtcbmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50PS0xbil7XG5pZih1cGRhdGVDb3VudDxjdXJyZW50VXBkYXRlQ291bnQpe1xuaWYoY3VycmVudFJlc3BvbnNlKXtcbnJldHVybiBQcm9taXNlLnJlc29sdmUoY3VycmVudFJlc3BvbnNlKTtcbiB9XG4gfWVsc2UgaWYodXBkYXRlQ291bnQhPT1jdXJyZW50VXBkYXRlQ291bnQpe1xudGhyb3cgRXJyb3IoXG4nZ2V0VXBkYXRlU2luY2UgYXJndW1lbnQgbXVzdCBiZSBhIHByZXZpb3VzbHktaXNzdWVkIHVwZGF0ZUNvdW50LicpO1xuXG4gfVxuXG4vL1xuaWYoZmluYWwpe1xuYXNzZXJ0KGN1cnJlbnRSZXNwb25zZSE9PXVuZGVmaW5lZCk7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGN1cnJlbnRSZXNwb25zZSk7XG4gfVxuaWYoIW9wdE5leHRQcm9taXNlKXtcbmNvbnN0IG5leHRJdGVyUmVzdWx0UD1FKGl0ZXJhdG9yUCkubmV4dCgpO1xub3B0TmV4dFByb21pc2U9RS53aGVuKFxubmV4dEl0ZXJSZXN1bHRQLFxuKHtkb25lLHZhbHVlfSk9PntcbmFzc2VydCghZmluYWwpO1xuaWYoZG9uZSl7XG5maW5hbD10cnVlO1xuIH1cbmN1cnJlbnRVcGRhdGVDb3VudCs9MW47XG5jdXJyZW50UmVzcG9uc2U9aGFyZGVuKHtcbnZhbHVlLFxudXBkYXRlQ291bnQ6ZG9uZT91bmRlZmluZWQ6Y3VycmVudFVwZGF0ZUNvdW50fSk7XG5cbm9wdE5leHRQcm9taXNlPXVuZGVmaW5lZDtcbnJldHVybiBjdXJyZW50UmVzcG9uc2U7XG4gfSxcbihfcmVhc29uKT0+e1xuZmluYWw9dHJ1ZTtcbmN1cnJlbnRSZXNwb25zZT1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubmV4dEl0ZXJSZXN1bHRQO1xub3B0TmV4dFByb21pc2U9dW5kZWZpbmVkO1xucmV0dXJuIGN1cnJlbnRSZXNwb25zZTtcbiB9KTtcblxuIH1cbnJldHVybiBvcHROZXh0UHJvbWlzZTtcbiB9fSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5vdGlmaWVyPUZhcignbm90aWZpZXInLHtcbi8vXG4vL1xuLi4ubWFrZU5vdGlmaWVyKGJhc2VOb3RpZmllciksXG4uLi5iYXNlTm90aWZpZXJ9KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH07JGjNj19vbmNlLm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlKG1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlKTtcbmhhcmRlbihtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTm90aWZpZXIiOlsibWFrZU5vdGlmaWVyIl0sIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIjpbIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIl0sIm1ha2VOb3RpZmllcktpdCI6WyJtYWtlTm90aWZpZXJLaXQiXSwibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiOlsibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAADBRsiFwrAABcKwAAKgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9wdWJsaXNoLWtpdC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL3BhdHRlcm5zIiwiQGFnb3JpYy92YXQtZGF0YSJdLCJleHBvcnRzIjpbIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiLCJJdGVyYWJsZUVhY2hUb3BpY0kiLCJJdGVyYWJsZUxhdGVzdFRvcGljSSIsIlB1Ymxpc2hlckkiLCJTdWJzY3JpYmVySSIsIlN1YnNjcmliZXJTaGFwZSIsIlVwZGF0ZUNvdW50U2hhcGUiLCJtYWtlUHVibGlzaEtpdCIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInB1Ymxpc2hLaXRJS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEUsRmFyLG1ha2VQcm9taXNlS2l0LE0sZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkLGNhbkJlRHVyYWJsZSxwcmVwYXJlRXhvQ2xhc3NLaXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VQcm9taXNlS2l0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wiY2FuQmVEdXJhYmxlXCIsIFskaM2PX2EgPT4gKGNhbkJlRHVyYWJsZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzS2l0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3Qgc2luaz0oKT0+eyB9O1xuY29uc3QgbWFrZVF1aWV0UmVqZWN0aW9uPShyZWFzb24pPT57XG5jb25zdCByZWplY3Rpb249aGFyZGVuKFByb21pc2UucmVqZWN0KHJlYXNvbikpO1xudm9pZCBFLndoZW4ocmVqZWN0aW9uLHNpbmssc2luayk7XG5yZXR1cm4gcmVqZWN0aW9uO1xuIH07XG5jb25zdCB0b29GYXJSZWplY3Rpb249bWFrZVF1aWV0UmVqZWN0aW9uKFxuaGFyZGVuKEVycm9yKCdDYW5ub3QgcmVhZCBwYXN0IGVuZCBvZiBpdGVyYXRpb24uJykpKTtcblxuXG5jb25zdCAgICAgICAgUHVibGlzaGVyST1NLmludGVyZmFjZSgnUHVibGlzaGVyJyx7XG5wdWJsaXNoOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCksXG5maW5pc2g6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoKSxcbmZhaWw6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoKX0pO1xuXG5cbi8vXG4kaM2PX29uY2UuUHVibGlzaGVySShQdWJsaXNoZXJJKTtjb25zdCBVcGRhdGVDb3VudFNoYXBlPU0ub3IoTS5iaWdpbnQoKSxNLm51bWJlcigpKTskaM2PX29uY2UuVXBkYXRlQ291bnRTaGFwZShVcGRhdGVDb3VudFNoYXBlKTtcbmNvbnN0ICAgICAgICBTdWJzY3JpYmVyST1NLmludGVyZmFjZSgnU3Vic2NyaWJlcicse1xuc3Vic2NyaWJlQWZ0ZXI6TS5jYWxsKCkub3B0aW9uYWwoTS5iaWdpbnQoKSkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRVcGRhdGVTaW5jZTpNLmNhbGwoKS5vcHRpb25hbChVcGRhdGVDb3VudFNoYXBlKS5yZXR1cm5zKE0ucHJvbWlzZSgpKX0pOyRozY9fb25jZS5TdWJzY3JpYmVySShTdWJzY3JpYmVySSk7XG5cbmNvbnN0ICAgICAgICBwdWJsaXNoS2l0SUtpdD1oYXJkZW4oe1xucHVibGlzaGVyOlB1Ymxpc2hlckksXG5zdWJzY3JpYmVyOlN1YnNjcmliZXJJfSk7JGjNj19vbmNlLnB1Ymxpc2hLaXRJS2l0KHB1Ymxpc2hLaXRJS2l0KTtcblxuXG5jb25zdCAgICAgICAgRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZT1NLmludGVyZmFjZShcbidGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvcicsXG57XG5mb3JrOk0uY2FsbCgpLnJldHVybnMoTS5hbnkoKSksXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOk0uY2FsbCgpLnJldHVybnMoTS5hbnkoKSksLy9cbm5leHQ6TS5jYWxsV2hlbigpLnJldHVybnMoTS5hbnkoKSl9KTskaM2PX29uY2UuRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZShGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlKTtcblxuXG5cbmNvbnN0ICAgICAgICBJdGVyYWJsZUVhY2hUb3BpY0k9TS5pbnRlcmZhY2UoJ0l0ZXJhYmxlRWFjaFRvcGljJyx7XG5zdWJzY3JpYmVBZnRlcjpcbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChTdWJzY3JpYmVySSkubWV0aG9kR3VhcmRzLnN1YnNjcmliZUFmdGVyLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTpNLmNhbGwoKS5yZXR1cm5zKFxuTS5yZW1vdGFibGUoJ0ZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJykpfSk7JGjNj19vbmNlLkl0ZXJhYmxlRWFjaFRvcGljSShJdGVyYWJsZUVhY2hUb3BpY0kpO1xuXG5cblxuY29uc3QgICAgICAgIEl0ZXJhYmxlTGF0ZXN0VG9waWNJPU0uaW50ZXJmYWNlKCdJdGVyYWJsZUxhdGVzdFRvcGljJyx7XG5nZXRVcGRhdGVTaW5jZTpcbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChTdWJzY3JpYmVySSkubWV0aG9kR3VhcmRzLmdldFVwZGF0ZVNpbmNlLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTpNLmNhbGwoKS5yZXR1cm5zKFxuTS5yZW1vdGFibGUoJ0ZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJykpfSk7XG5cblxuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuSXRlcmFibGVMYXRlc3RUb3BpY0koSXRlcmFibGVMYXRlc3RUb3BpY0kpO1xuY29uc3Qgd2Vha01lbW9pemVVbmFyeT0oZm4pPT57XG5jb25zdCBjYWNoZT1uZXcgV2Vha01hcCgpO1xucmV0dXJuKGFyZyk9Pntcbi8qICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgb2FyZz1hcmc7XG5pZihjYWNoZS5oYXMob2FyZykpe1xucmV0dXJuIGNhY2hlLmdldChvYXJnKTtcbiB9XG5jb25zdCByZXN1bHQ9Zm4oYXJnKTtcbmNhY2hlLnNldChvYXJnLHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZVVwZGF0ZVJlY29yZEZyb21QdWJsaWNhdGlvblJlY29yZD0ocmVjb3JkKT0+e1xuY29uc3R7XG5oZWFkOnt2YWx1ZSxkb25lfSxcbnB1Ymxpc2hDb3VudH09XG5yZWNvcmQ7XG5pZihkb25lKXtcbi8vXG5yZXR1cm4gaGFyZGVuKHt2YWx1ZSx1cGRhdGVDb3VudDp1bmRlZmluZWR9KTtcbiB9XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZSx1cGRhdGVDb3VudDpwdWJsaXNoQ291bnR9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVB1Ymxpc2hLaXQ9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdGFpbFA7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB0YWlsUjtcbih7cHJvbWlzZTp0YWlsUCxyZXNvbHZlOnRhaWxSfT1tYWtlUHJvbWlzZUtpdCgpKTtcblxubGV0IGN1cnJlbnRQdWJsaXNoQ291bnQ9MG47XG5sZXQgY3VycmVudFA9dGFpbFA7XG5jb25zdCBhZHZhbmNlQ3VycmVudD0oZG9uZSx2YWx1ZSxyZWplY3Rpb24pPT57XG5pZih0YWlsUj09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcignQ2Fubm90IHVwZGF0ZSBzdGF0ZSBhZnRlciB0ZXJtaW5hdGlvbi4nKTtcbiB9XG5cbmN1cnJlbnRQdWJsaXNoQ291bnQrPTFuO1xuY3VycmVudFA9dGFpbFA7XG5jb25zdCByZXNvbHZlQ3VycmVudD10YWlsUjtcblxuaWYoZG9uZSl7XG50YWlsUD10b29GYXJSZWplY3Rpb247XG50YWlsUj11bmRlZmluZWQ7XG4gfWVsc2V7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG4gfVxuXG5pZihyZWplY3Rpb24pe1xucmVzb2x2ZUN1cnJlbnQocmVqZWN0aW9uKTtcbiB9ZWxzZXtcbnJlc29sdmVDdXJyZW50KFxuaGFyZGVuKHtcbmhlYWQ6e3ZhbHVlLGRvbmV9LFxucHVibGlzaENvdW50OmN1cnJlbnRQdWJsaXNoQ291bnQsXG50YWlsOnRhaWxQfSkpO1xuXG5cbiB9XG4gfTtcblxuY29uc3QgbWFrZU1lbW9pemVkVXBkYXRlUmVjb3JkPXdlYWtNZW1vaXplVW5hcnkoXG5tYWtlVXBkYXRlUmVjb3JkRnJvbVB1YmxpY2F0aW9uUmVjb3JkKTtcblxuXG4vKlxuXG5cbiAgICovXG5jb25zdCBzdWJzY3JpYmVyPUZhcignU3Vic2NyaWJlcicse1xuc3Vic2NyaWJlQWZ0ZXI6KHB1Ymxpc2hDb3VudD0tMW4pPT57XG5hc3NlcnQudHlwZW9mKHB1Ymxpc2hDb3VudCwnYmlnaW50Jyk7XG5pZihwdWJsaXNoQ291bnQ9PT1jdXJyZW50UHVibGlzaENvdW50KXtcbnJldHVybiB0YWlsUDtcbiB9ZWxzZSBpZihwdWJsaXNoQ291bnQ8Y3VycmVudFB1Ymxpc2hDb3VudCl7XG5yZXR1cm4gY3VycmVudFA7XG4gfWVsc2V7XG50aHJvdyBFcnJvcihcbidzdWJzY3JpYmVBZnRlciBhcmd1bWVudCBtdXN0IGJlIGEgcHJldmlvdXNseS1pc3N1ZWQgcHVibGlzaENvdW50LicpO1xuXG4gfVxuIH0sXG5nZXRVcGRhdGVTaW5jZToodXBkYXRlQ291bnQpPT57XG5pZih1cGRhdGVDb3VudD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gc3Vic2NyaWJlci5zdWJzY3JpYmVBZnRlcigpLnRoZW4obWFrZU1lbW9pemVkVXBkYXRlUmVjb3JkKTtcbiB9XG51cGRhdGVDb3VudD1CaWdJbnQodXBkYXRlQ291bnQpO1xucmV0dXJuKFxuc3Vic2NyaWJlclxuLy9cbi8vXG4vL1xuLnN1YnNjcmliZUFmdGVyKHVwZGF0ZUNvdW50KVxuLy9cbi8vXG4udGhlbigoKT0+c3Vic2NyaWJlci5nZXRVcGRhdGVTaW5jZSgpKSk7XG5cbiB9fSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdWJsaXNoZXI9RmFyKCdQdWJsaXNoZXInLHtcbnB1Ymxpc2g6KHZhbHVlKT0+e1xuYWR2YW5jZUN1cnJlbnQoZmFsc2UsdmFsdWUpO1xuIH0sXG5maW5pc2g6KGZpbmFsVmFsdWUpPT57XG5hZHZhbmNlQ3VycmVudCh0cnVlLGZpbmFsVmFsdWUpO1xuIH0sXG5mYWlsOihyZWFzb24pPT57XG5hZHZhbmNlQ3VycmVudCh0cnVlLHVuZGVmaW5lZCxtYWtlUXVpZXRSZWplY3Rpb24ocmVhc29uKSk7XG4gfX0pO1xuXG5yZXR1cm4gaGFyZGVuKHtwdWJsaXNoZXIsc3Vic2NyaWJlcn0pO1xuIH07JGjNj19vbmNlLm1ha2VQdWJsaXNoS2l0KG1ha2VQdWJsaXNoS2l0KTtcbmhhcmRlbihtYWtlUHVibGlzaEtpdCk7XG5cbmNvbnN0IER1cmFibGVQdWJsaXNoS2l0U3RhdGVTaGFwZT1oYXJkZW4oe1xudmFsdWVEdXJhYmlsaXR5Ok0uYW55KCksXG5wdWJsaXNoQ291bnQ6TS5hbnkoKSxcbnN0YXR1czpNLmFueSgpLFxuaGFzVmFsdWU6TS5hbnkoKSxcbnZhbHVlOk0uYW55KCl9KTtcblxuXG4vL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpbml0RHVyYWJsZVB1Ymxpc2hLaXRTdGF0ZT0ob3B0aW9ucz17fSk9PntcbmNvbnN0e3ZhbHVlRHVyYWJpbGl0eT0nbWFuZGF0b3J5J309b3B0aW9ucztcbmFzc2VydC5lcXVhbCh2YWx1ZUR1cmFiaWxpdHksJ21hbmRhdG9yeScpO1xucmV0dXJue1xuLy9cbnZhbHVlRHVyYWJpbGl0eSxcblxuLy9cbnB1Ymxpc2hDb3VudDowbixcbnN0YXR1czonbGl2ZScsLy9cblxuLy9cbi8vXG4vL1xuaGFzVmFsdWU6ZmFsc2UsXG52YWx1ZTp1bmRlZmluZWR9O1xuXG4gfTtcblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qXG5cblxuICovXG5jb25zdCBnZXRFcGhlbWVyYWxLZXk9KGZhY2V0cyk9PmZhY2V0cy5wdWJsaXNoZXI7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBwcm92aWRlQ3VycmVudFA9KHN0YXRlLGZhY2V0cyx0YWlsKT0+e1xuY29uc3QgZXBoZW1lcmFsS2V5PWdldEVwaGVtZXJhbEtleShmYWNldHMpO1xuY29uc3QgZm91bmREYXRhPWR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YS5nZXQoZXBoZW1lcmFsS2V5KTtcbmNvbnN0IGN1cnJlbnRQPWZvdW5kRGF0YSYmZm91bmREYXRhLmN1cnJlbnRQO1xuaWYoY3VycmVudFApe1xucmV0dXJuIGN1cnJlbnRQO1xuIH1cblxuY29uc3R7cHVibGlzaENvdW50LHN0YXR1cyxoYXNWYWx1ZSx2YWx1ZX09c3RhdGU7XG5pZighaGFzVmFsdWUpe1xuYXNzZXJ0KHN0YXR1cz09PSdsaXZlJyk7XG5yZXR1cm4gdGFpbDtcbiB9XG5pZihzdGF0dXM9PT0nbGl2ZSd8fHN0YXR1cz09PSdmaW5pc2hlZCcpe1xuY29uc3QgY2VsbD1oYXJkZW4oe1xuaGVhZDp7dmFsdWUsZG9uZTpzdGF0dXMhPT0nbGl2ZSd9LFxucHVibGlzaENvdW50LFxudGFpbH0pO1xuXG5yZXR1cm4gRS5yZXNvbHZlKGNlbGwpO1xuIH1lbHNlIGlmKHN0YXR1cz09PSdmYWlsZWQnKXtcbnJldHVybiBtYWtlUXVpZXRSZWplY3Rpb24odmFsdWUpO1xuIH1lbHNle1xudGhyb3cgRmFpbCBgSW52YWxpZCBkdXJhYmxlIHByb21pc2Uga2l0IHN0YXR1czogJHtxKHN0YXR1cyl9YDtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGE9KHN0YXRlLGZhY2V0cyk9PntcbmNvbnN0IGVwaGVtZXJhbEtleT1nZXRFcGhlbWVyYWxLZXkoZmFjZXRzKTtcbmNvbnN0IGZvdW5kRGF0YT1kdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEuZ2V0KGVwaGVtZXJhbEtleSk7XG5pZihmb3VuZERhdGEpe1xucmV0dXJuIGZvdW5kRGF0YTtcbiB9XG5cbmNvbnN0e3N0YXR1c309c3RhdGU7XG5sZXQgdGFpbFA7XG5sZXQgdGFpbFI7XG5pZihzdGF0dXM9PT0nbGl2ZScpe1xuKHtwcm9taXNlOnRhaWxQLHJlc29sdmU6dGFpbFJ9PW1ha2VQcm9taXNlS2l0KCkpO1xudm9pZCBFLndoZW4odGFpbFAsc2luayxzaW5rKTtcbiB9ZWxzZSBpZihzdGF0dXM9PT0nZmluaXNoZWQnfHxzdGF0dXM9PT0nZmFpbGVkJyl7XG50YWlsUD10b29GYXJSZWplY3Rpb247XG4gfWVsc2V7XG50aHJvdyBGYWlsIGBJbnZhbGlkIGR1cmFibGUgcHJvbWlzZSBraXQgc3RhdHVzOiAke3Eoc3RhdHVzKX1gO1xuIH1cbi8vXG5jb25zdCBvYmo9aGFyZGVuKHtjdXJyZW50UDp1bmRlZmluZWQsdGFpbFAsdGFpbFJ9KTtcbmR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YS5zZXQoZXBoZW1lcmFsS2V5LG9iaik7XG5yZXR1cm4gb2JqO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBhZHZhbmNlRHVyYWJsZVB1Ymxpc2hLaXQ9KGNvbnRleHQsdmFsdWUsdGFyZ2V0U3RhdHVzPSdsaXZlJyk9PntcbmNvbnN0e3N0YXRlLGZhY2V0c309Y29udGV4dDtcbmNvbnN0e3ZhbHVlRHVyYWJpbGl0eSxzdGF0dXN9PXN0YXRlO1xuaWYoc3RhdHVzIT09J2xpdmUnKXtcbnRocm93IEVycm9yKCdDYW5ub3QgdXBkYXRlIHN0YXRlIGFmdGVyIHRlcm1pbmF0aW9uLicpO1xuIH1cbmNvbnN0IGRvbmU9dGFyZ2V0U3RhdHVzIT09J2xpdmUnO1xuaWYoZG9uZXx8dmFsdWVEdXJhYmlsaXR5PT09J21hbmRhdG9yeScpe1xuY2FuQmVEdXJhYmxlKHZhbHVlKXx8RmFpbCBgQ2Fubm90IGFjY2VwdCBub24tZHVyYWJsZSB2YWx1ZTogJHt2YWx1ZX1gO1xuIH1cbmNvbnN0e3RhaWxQOm9sZFRhaWxQLHRhaWxSOnJlc29sdmVPbGRUYWlsfT1cbnByb3ZpZGVEdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEoc3RhdGUsZmFjZXRzKTtcbmFzc2VydC50eXBlb2YocmVzb2x2ZU9sZFRhaWwsJ2Z1bmN0aW9uJyk7XG5cbmNvbnN0IHB1Ymxpc2hDb3VudD1zdGF0ZS5wdWJsaXNoQ291bnQrMW47XG5zdGF0ZS5wdWJsaXNoQ291bnQ9cHVibGlzaENvdW50O1xuXG5sZXQgdGFpbFA7XG5sZXQgdGFpbFI7XG5pZihkb25lKXtcbnN0YXRlLnN0YXR1cz10YXJnZXRTdGF0dXM7XG50YWlsUD10b29GYXJSZWplY3Rpb247XG50YWlsUj11bmRlZmluZWQ7XG4gfWVsc2V7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG52b2lkIEUud2hlbih0YWlsUCxzaW5rLHNpbmspO1xuIH1cblxubGV0IGN1cnJlbnRQO1xuaWYodGFyZ2V0U3RhdHVzPT09J2ZhaWxlZCcpe1xuc3RhdGUuaGFzVmFsdWU9dHJ1ZTtcbnN0YXRlLnZhbHVlPXZhbHVlO1xuY29uc3QgcmVqZWN0aW9uPW1ha2VRdWlldFJlamVjdGlvbih2YWx1ZSk7XG5yZXNvbHZlT2xkVGFpbChyZWplY3Rpb24pO1xuIH1lbHNle1xuLy9cbi8vXG5pZihkb25lfHx2YWx1ZUR1cmFiaWxpdHkhPT0naWdub3JlZCcmJmNhbkJlRHVyYWJsZSh2YWx1ZSkpe1xuc3RhdGUuaGFzVmFsdWU9dHJ1ZTtcbnN0YXRlLnZhbHVlPXZhbHVlO1xuIH1lbHNle1xuc3RhdGUuaGFzVmFsdWU9ZmFsc2U7XG5zdGF0ZS52YWx1ZT11bmRlZmluZWQ7XG4vL1xuY3VycmVudFA9b2xkVGFpbFA7XG4gfVxuXG5yZXNvbHZlT2xkVGFpbChcbmhhcmRlbih7XG5oZWFkOnt2YWx1ZSxkb25lfSxcbnB1Ymxpc2hDb3VudCxcbnRhaWw6dGFpbFB9KSk7XG5cblxuIH1cblxuZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhLnNldChcbmdldEVwaGVtZXJhbEtleShmYWNldHMpLFxuaGFyZGVuKHtjdXJyZW50UCx0YWlsUCx0YWlsUn0pKTtcblxuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0PShiYWdnYWdlLGtpbmROYW1lKT0+e1xuLy9cbi8vXG5jb25zdCBtYWtlTWVtb2l6ZWRVcGRhdGVSZWNvcmQ9bWFrZVVwZGF0ZVJlY29yZEZyb21QdWJsaWNhdGlvblJlY29yZDtcblxuLypcblxuICAgKi9cbnJldHVybiBwcmVwYXJlRXhvQ2xhc3NLaXQoXG5iYWdnYWdlLFxua2luZE5hbWUsXG5wdWJsaXNoS2l0SUtpdCxcbmluaXREdXJhYmxlUHVibGlzaEtpdFN0YXRlLFxue1xuLy9cbi8vXG5wdWJsaXNoZXI6e1xucHVibGlzaCh2YWx1ZSl7XG5hZHZhbmNlRHVyYWJsZVB1Ymxpc2hLaXQodGhpcyx2YWx1ZSk7XG4gfSxcbmZpbmlzaChmaW5hbFZhbHVlKXtcbmFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdCh0aGlzLGZpbmFsVmFsdWUsJ2ZpbmlzaGVkJyk7XG4gfSxcbmZhaWwocmVhc29uKXtcbmFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdCh0aGlzLHJlYXNvbiwnZmFpbGVkJyk7XG4gfX0sXG5cblxuLy9cbi8vXG5zdWJzY3JpYmVyOntcbnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudD0tMW4pe1xuY29uc3R7c3RhdGUsZmFjZXRzfT10aGlzO1xuY29uc3R7cHVibGlzaENvdW50OmN1cnJlbnRQdWJsaXNoQ291bnR9PXN0YXRlO1xuY29uc3R7Y3VycmVudFAsdGFpbFB9PXByb3ZpZGVEdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEoXG5zdGF0ZSxcbmZhY2V0cyk7XG5cbmlmKHB1Ymxpc2hDb3VudD09PWN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIHRhaWxQO1xuIH1lbHNlIGlmKHB1Ymxpc2hDb3VudDxjdXJyZW50UHVibGlzaENvdW50KXtcbnJldHVybiBjdXJyZW50UHx8cHJvdmlkZUN1cnJlbnRQKHN0YXRlLGZhY2V0cyx0YWlsUCk7XG4gfWVsc2V7XG50aHJvdyBFcnJvcihcbidzdWJzY3JpYmVBZnRlciBhcmd1bWVudCBtdXN0IGJlIGEgcHJldmlvdXNseS1pc3N1ZWQgcHVibGlzaENvdW50LicpO1xuXG4gfVxuIH0sXG5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCl7XG5jb25zdHtcbmZhY2V0czp7c3Vic2NyaWJlcn19PVxudGhpcztcbmlmKHVwZGF0ZUNvdW50PT09dW5kZWZpbmVkKXtcbnJldHVybiBzdWJzY3JpYmVyLnN1YnNjcmliZUFmdGVyKCkudGhlbihtYWtlTWVtb2l6ZWRVcGRhdGVSZWNvcmQpO1xuIH1cbnVwZGF0ZUNvdW50PUJpZ0ludCh1cGRhdGVDb3VudCk7XG5yZXR1cm4oXG5zdWJzY3JpYmVyXG4vL1xuLy9cbi8vXG4uc3Vic2NyaWJlQWZ0ZXIodXBkYXRlQ291bnQpXG4vL1xuLy9cbi50aGVuKCgpPT5zdWJzY3JpYmVyLmdldFVwZGF0ZVNpbmNlKCkpKTtcblxuIH19fSxcblxuXG57XG5zdGF0ZVNoYXBlOkR1cmFibGVQdWJsaXNoS2l0U3RhdGVTaGFwZX0pO1xuXG5cbiB9OyRozY9fb25jZS5wcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQocHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KTtcbmhhcmRlbihwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQpO1xuXG5jb25zdCAgICAgICAgU3Vic2NyaWJlclNoYXBlPU0ucmVtb3RhYmxlKCdTdWJzY3JpYmVyJyk7JGjNj19vbmNlLlN1YnNjcmliZXJTaGFwZShTdWJzY3JpYmVyU2hhcGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUHVibGlzaGVySSI6WyJQdWJsaXNoZXJJIl0sIlVwZGF0ZUNvdW50U2hhcGUiOlsiVXBkYXRlQ291bnRTaGFwZSJdLCJTdWJzY3JpYmVySSI6WyJTdWJzY3JpYmVySSJdLCJwdWJsaXNoS2l0SUtpdCI6WyJwdWJsaXNoS2l0SUtpdCJdLCJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIjpbIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiXSwiSXRlcmFibGVFYWNoVG9waWNJIjpbIkl0ZXJhYmxlRWFjaFRvcGljSSJdLCJJdGVyYWJsZUxhdGVzdFRvcGljSSI6WyJJdGVyYWJsZUxhdGVzdFRvcGljSSJdLCJtYWtlUHVibGlzaEtpdCI6WyJtYWtlUHVibGlzaEtpdCJdLCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiOlsicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0Il0sIlN1YnNjcmliZXJTaGFwZSI6WyJTdWJzY3JpYmVyU2hhcGUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAMa5OCkAIAABACAAALgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdG9yZWQtbm90aWZpZXIuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9pbnRlcm5hbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiLCJAZW5kby9mYXIiLCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIl0sImV4cG9ydHMiOlsibWFrZVN0b3JlZE5vdGlmaWVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0QWxsRGVmaW5lZCxtYWtlU2VyaWFsaXplVG9TdG9yYWdlLEUsRmFyLG9ic2VydmVOb3RpZmllcjskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcImFzc2VydEFsbERlZmluZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0QWxsRGVmaW5lZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNcIiwgW1tcIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2VcIiwgWyRozY9fYSA9PiAobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzXCIsIFtbXCJvYnNlcnZlTm90aWZpZXJcIiwgWyRozY9fYSA9PiAob2JzZXJ2ZU5vdGlmaWVyID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkTm90aWZpZXI9KG5vdGlmaWVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5hc3NlcnRBbGxEZWZpbmVkKHtub3RpZmllcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyfSk7XG5cbmNvbnN0IG1hcnNoYWxsVG9TdG9yYWdlPW1ha2VTZXJpYWxpemVUb1N0b3JhZ2Uoc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik7XG5cbm9ic2VydmVOb3RpZmllcihub3RpZmllcix7XG51cGRhdGVTdGF0ZSh2YWx1ZSl7XG5tYXJzaGFsbFRvU3RvcmFnZSh2YWx1ZSkuY2F0Y2goKHJlYXNvbik9PlxuY29uc29sZS5lcnJvcignU3RvcmVkTm90aWZpZXIgZmFpbGVkIHRvIHVwZGF0ZVN0YXRlJyxyZWFzb24pKTtcblxuIH0sXG5mYWlsKHJlYXNvbil7XG5jb25zb2xlLmVycm9yKCdTdG9yZWROb3RpZmllciBmYWlsZWQgdG8gaXRlcmF0ZScscmVhc29uKTtcbiB9fSkuXG5jYXRjaCgocmVhc29uKT0+e1xuY29uc29sZS5lcnJvcignU3RvcmVkTm90aWZpZXIgaGFsdGVkIGl0ZXJhdGlvbicscmVhc29uKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZXI9RmFyKCd1bnNlcmlhbGl6ZXInLHtcbmZyb21DYXBEYXRhOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKSxcbnVuc2VyaWFsaXplOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdG9yZWROb3RpZmllcj1GYXIoJ1N0b3JlZE5vdGlmaWVyJyx7XG5nZXRVcGRhdGVTaW5jZToodXBkYXRlQ291bnQpPT5FKG5vdGlmaWVyKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCksXG5nZXRQYXRoOigpPT5FKHN0b3JhZ2VOb2RlKS5nZXRQYXRoKCksXG5nZXRVbnNlcmlhbGl6ZXI6KCk9PnVuc2VyaWFsaXplcn0pO1xuXG5yZXR1cm4gc3RvcmVkTm90aWZpZXI7XG4gfTskaM2PX29uY2UubWFrZVN0b3JlZE5vdGlmaWVyKG1ha2VTdG9yZWROb3RpZmllcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU3RvcmVkTm90aWZpZXIiOlsibWFrZVN0b3JlZE5vdGlmaWVyIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACqIP9wcFgAAHBYAACcAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3RvcmVzdWIuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwiLCJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIiwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyIsIi4vcHVibGlzaC1raXQuanMiLCIuL3N1YnNjcmliZXIuanMiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbImZvckVhY2hQdWJsaWNhdGlvblJlY29yZCIsIm1ha2VTdG9yZWRQdWJsaXNoS2l0IiwibWFrZVN0b3JlZFB1Ymxpc2hlcktpdCIsIm1ha2VTdG9yZWRTdWJzY3JpYmVyIiwibWFrZVN0b3JlZFN1YnNjcmlwdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLG1ha2VNYXJzaGFsLGFzc2VydEFsbERlZmluZWQsbWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSxvYnNlcnZlSXRlcmF0aW9uLG1ha2VQdWJsaXNoS2l0LG1ha2VTdWJzY3JpcHRpb25LaXQsc3Vic2NyaWJlRWFjaDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcImFzc2VydEFsbERlZmluZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0QWxsRGVmaW5lZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNcIiwgW1tcIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2VcIiwgWyRozY9fYSA9PiAobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSA9ICRozY9fYSldXV1dLFtcIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanNcIiwgW1tcIm9ic2VydmVJdGVyYXRpb25cIiwgWyRozY9fYSA9PiAob2JzZXJ2ZUl0ZXJhdGlvbiA9ICRozY9fYSldXV1dLFtcIi4vcHVibGlzaC1raXQuanNcIiwgW1tcIm1ha2VQdWJsaXNoS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VQdWJsaXNoS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9zdWJzY3JpYmVyLmpzXCIsIFtbXCJtYWtlU3Vic2NyaXB0aW9uS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VTdWJzY3JpcHRpb25LaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlRWFjaFwiLCBbJGjNj19hID0+IChzdWJzY3JpYmVFYWNoID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmb3JFYWNoUHVibGljYXRpb25SZWNvcmQ9YXN5bmMoc3Vic2NyaWJlcixjb25zdW1lVmFsdWUpPT57XG4vL1xuLy9cbmNvbnN0IGl0ZXJhdG9yPXN1YnNjcmliZUVhY2goc3Vic2NyaWJlcilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5cbmxldCBmaW5pc2hlZD1mYWxzZTtcbmF3YWl0IG51bGw7XG53aGlsZSghZmluaXNoZWQpe1xuY29uc3R7dmFsdWUsZG9uZX09YXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuYXdhaXQgY29uc3VtZVZhbHVlKHZhbHVlKTtcbmZpbmlzaGVkPSEhZG9uZTtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmZvckVhY2hQdWJsaWNhdGlvblJlY29yZChmb3JFYWNoUHVibGljYXRpb25SZWNvcmQpO1xuY29uc3QgICAgICAgIG1ha2VTdG9yZWRTdWJzY3JpYmVyPShzdWJzY3JpYmVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5hc3NlcnRBbGxEZWZpbmVkKHtzdWJzY3JpYmVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXJ9KTtcblxuY29uc3QgbWFyc2hhbGxUb1N0b3JhZ2U9bWFrZVNlcmlhbGl6ZVRvU3RvcmFnZShzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKTtcblxuLy9cbmZvckVhY2hQdWJsaWNhdGlvblJlY29yZChzdWJzY3JpYmVyLG1hcnNoYWxsVG9TdG9yYWdlKS5jYXRjaCgoZXJyKT0+e1xuLy9cbi8vXG5jb25zb2xlLmVycm9yKCdTdG9yZWRTdWJzY3JpYmVyIGZhaWxlZCB0byBpdGVyYXRlJyxlcnIpO1xuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHVuc2VyaWFsaXplcj1GYXIoJ3Vuc2VyaWFsaXplcicse1xuZnJvbUNhcERhdGE6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpLFxudW5zZXJpYWxpemU6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RvcmVzdWI9RmFyKCdTdG9yZWRTdWJzY3JpYmVyJyx7XG5zdWJzY3JpYmVBZnRlcjoocHVibGlzaENvdW50KT0+c3Vic2NyaWJlci5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQpLFxuZ2V0VXBkYXRlU2luY2U6KHVwZGF0ZUNvdW50KT0+c3Vic2NyaWJlci5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCksXG5nZXRQYXRoOigpPT5FKHN0b3JhZ2VOb2RlKS5nZXRQYXRoKCksXG5nZXRTdG9yZUtleTooKT0+RShzdG9yYWdlTm9kZSkuZ2V0U3RvcmVLZXkoKSxcbmdldFVuc2VyaWFsaXplcjooKT0+dW5zZXJpYWxpemVyfSk7XG5cbnJldHVybiBzdG9yZXN1YjtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlU3RvcmVkU3Vic2NyaWJlcihtYWtlU3RvcmVkU3Vic2NyaWJlcik7XG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFN1YnNjcmlwdGlvbj0oXG5zdWJzY3JpcHRpb24sXG5zdG9yYWdlTm9kZSxcbm1hcnNoYWxsZXI9bWFrZU1hcnNoYWwodW5kZWZpbmVkLHVuZGVmaW5lZCx7XG5tYXJzaGFsU2F2ZUVycm9yOigpPT57IH0sXG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSkpPT5cblxue1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZXI9RmFyKCd1bnNlcmlhbGl6ZXInLHtcbmZyb21DYXBEYXRhOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKSxcbnVuc2VyaWFsaXplOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKX0pO1xuXG5cbi8vXG5sZXQgcHVibGlzaEZhaWxlZD1mYWxzZTtcbmxldCBwdWJsaXNoRXhjZXB0aW9uO1xuXG5jb25zdCBmYWlsPShlcnIpPT57XG5wdWJsaXNoRmFpbGVkPXRydWU7XG5wdWJsaXNoRXhjZXB0aW9uPWVycjtcbiB9O1xuXG4vL1xuLy9cbmNvbnN0IHB1Ymxpc2hWYWx1ZT0ob2JqKT0+e1xuYXNzZXJ0KHN0b3JhZ2VOb2RlKTtcbmlmKHB1Ymxpc2hGYWlsZWQpe1xuLy9cbnRocm93IHB1Ymxpc2hFeGNlcHRpb247XG4gfVxuXG4vL1xuRShtYXJzaGFsbGVyKS5cbnRvQ2FwRGF0YShvYmopLlxudGhlbigoc2VyaWFsaXplZCk9PntcbmNvbnN0IGVuY29kZWQ9SlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZCk7XG5yZXR1cm4gRShzdG9yYWdlTm9kZSkuc2V0VmFsdWUoZW5jb2RlZCk7XG4gfSkuXG5jYXRjaChmYWlsKTtcbiB9O1xuXG5pZihzdG9yYWdlTm9kZSl7XG4vL1xub2JzZXJ2ZUl0ZXJhdGlvbihzdWJzY3JpcHRpb24se1xudXBkYXRlU3RhdGU6cHVibGlzaFZhbHVlLFxuZmluaXNoOnB1Ymxpc2hWYWx1ZX0pLlxuY2F0Y2goZmFpbCk7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3Jlc3ViPUZhcignU3RvcmVkU3Vic2NyaXB0aW9uJyx7XG4vL1xuZ2V0U3RvcmVLZXk6YXN5bmMoKT0+e1xuaWYoIXN0b3JhZ2VOb2RlKXtcbnJldHVybiBoYXJkZW4oe3N1YnNjcmlwdGlvbn0pO1xuIH1cbmNvbnN0IHN0b3JlS2V5PWF3YWl0IEUoc3RvcmFnZU5vZGUpLmdldFN0b3JlS2V5KCk7XG5yZXR1cm4gaGFyZGVuKHsuLi5zdG9yZUtleSxzdWJzY3JpcHRpb259KTtcbiB9LFxuZ2V0VW5zZXJpYWxpemVyOigpPT51bnNlcmlhbGl6ZXIsXG5nZXRTaGFyYWJsZVN1YnNjcmlwdGlvbkludGVybmFsczooKT0+XG5zdWJzY3JpcHRpb24uZ2V0U2hhcmFibGVTdWJzY3JpcHRpb25JbnRlcm5hbHMoKSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnN1YnNjcmlwdGlvbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSxcbnN1YnNjcmliZUFmdGVyOihwdWJsaXNoQ291bnQpPT5zdWJzY3JpcHRpb24uc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KX0pO1xuXG5yZXR1cm4gc3RvcmVzdWI7XG4gfTskaM2PX29uY2UubWFrZVN0b3JlZFN1YnNjcmlwdGlvbihtYWtlU3RvcmVkU3Vic2NyaXB0aW9uKTtcbmhhcmRlbihtYWtlU3RvcmVkU3Vic2NyaXB0aW9uKTtcblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFB1Ymxpc2hlcktpdD0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcixjaGlsZFBhdGgpPT57XG5jb25zdHtwdWJsaWNhdGlvbixzdWJzY3JpcHRpb259PW1ha2VTdWJzY3JpcHRpb25LaXQoKTtcblxuaWYoc3RvcmFnZU5vZGUmJmNoaWxkUGF0aCl7XG5zdG9yYWdlTm9kZT1FKHN0b3JhZ2VOb2RlKS5tYWtlQ2hpbGROb2RlKGNoaWxkUGF0aCk7XG4gfVxuXG4vL1xuY29uc3Qgc3Vic2NyaWJlcj1tYWtlU3RvcmVkU3Vic2NyaXB0aW9uKFxuc3Vic2NyaXB0aW9uLFxuc3RvcmFnZU5vZGUsXG5tYXJzaGFsbGVyKTtcblxuXG5yZXR1cm57XG5wdWJsaXNoZXI6cHVibGljYXRpb24sXG5zdWJzY3JpYmVyfTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVN0b3JlZFB1Ymxpc2hlcktpdChtYWtlU3RvcmVkUHVibGlzaGVyS2l0KTtcbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkUHVibGlzaEtpdD0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbmNvbnN0e3B1Ymxpc2hlcixzdWJzY3JpYmVyfT1tYWtlUHVibGlzaEtpdCgpO1xuXG5yZXR1cm57XG5wdWJsaXNoZXIsXG4vL1xuc3Vic2NyaWJlcjptYWtlU3RvcmVkU3Vic2NyaWJlcihzdWJzY3JpYmVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpfTtcblxuIH07JGjNj19vbmNlLm1ha2VTdG9yZWRQdWJsaXNoS2l0KG1ha2VTdG9yZWRQdWJsaXNoS2l0KTtcbmhhcmRlbihtYWtlU3RvcmVkUHVibGlzaEtpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJmb3JFYWNoUHVibGljYXRpb25SZWNvcmQiOlsiZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkIl0sIm1ha2VTdG9yZWRTdWJzY3JpYmVyIjpbIm1ha2VTdG9yZWRTdWJzY3JpYmVyIl0sIm1ha2VTdG9yZWRTdWJzY3JpcHRpb24iOlsibWFrZVN0b3JlZFN1YnNjcmlwdGlvbiJdLCJtYWtlU3RvcmVkUHVibGlzaGVyS2l0IjpbIm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQiXSwibWFrZVN0b3JlZFB1Ymxpc2hLaXQiOlsibWFrZVN0b3JlZFB1Ymxpc2hLaXQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAqVd8cFASAABQEgAAKAAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdWJzY3JpYmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3VwZ3JhZGUtYXBpLmpzIl0sImV4cG9ydHMiOlsic3Vic2NyaWJlIiwic3Vic2NyaWJlRWFjaCIsInN1YnNjcmliZUxhdGVzdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsRmFpbCxhbm5vdGF0ZUVycm9yLEUsRmFyLGlzT2JqZWN0LGlzVXBncmFkZURpc2Nvbm5lY3Rpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdXBncmFkZS1hcGkuanNcIiwgW1tcImlzVXBncmFkZURpc2Nvbm5lY3Rpb25cIiwgWyRozY9fYSA9PiAoaXNVcGdyYWRlRGlzY29ubmVjdGlvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0IHNpbms9KCk9PnsgfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCByZWNvbm5lY3RBc05lZWRlZD1hc3luYyhnZXR0ZXIsc2VlZD1bXSk9PntcbmxldCBkaXNjb25uZWN0aW9uO1xubGV0IGxhc3RWZXJzaW9uPS1JbmZpbml0eTtcbi8vXG5hd2FpdCBudWxsO1xuZm9yKGxldCBpPTA7O2krPTEpe1xudHJ5e1xuY29uc3QgcmVzdWx0UD1pPHNlZWQubGVuZ3RoP3NlZWRbaV06Z2V0dGVyKCk7XG5jb25zdCByZXN1bHQ9YXdhaXQgcmVzdWx0UDtcbnJldHVybiByZXN1bHQ7XG4gfWNhdGNoKGVycil7XG5pZihpc1VwZ3JhZGVEaXNjb25uZWN0aW9uKGVycikpe1xuaWYoIWRpc2Nvbm5lY3Rpb24pe1xuZGlzY29ubmVjdGlvbj1lcnI7XG4gfVxuY29uc3R7aW5jYXJuYXRpb25OdW1iZXI6dmVyc2lvbn09ZXJyO1xuaWYodmVyc2lvbj5sYXN0VmVyc2lvbil7XG4vL1xuLy9cbi8vXG5sYXN0VmVyc2lvbj12ZXJzaW9uO1xuY29udGludWU7XG4gfVxuIH1cbi8vXG4vL1xuLy9cbmlmKGlzT2JqZWN0KGVycikmJmRpc2Nvbm5lY3Rpb24mJmRpc2Nvbm5lY3Rpb24hPT1lcnIpe1xudHJ5e1xuYW5ub3RhdGVFcnJvcihcbmVycixcblggYEF0dGVtcHRpbmcgdG8gcmVjb3ZlciBmcm9tIGRpc2Nvbm5lY3Rpb246ICR7ZGlzY29ubmVjdGlvbn1gKTtcblxuIH1jYXRjaChfZXJyKXtcbi8vXG4gfVxuIH1cbnRocm93IGVycjtcbiB9XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHN1YnNjcmliZT0oaXRQKT0+XG5GYXIoJ0FzeW5jSXRlcmFibGUnLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PntcbmNvbnN0IGl0PUUoaXRQKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbmNvbnN0IHNlbGY9RmFyKCdBc3luY0l0ZXJhYmxlSXRlcmF0b3InLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnNlbGYsXG5uZXh0OmFzeW5jKCk9PkUoaXQpLm5leHQoKX0pO1xuXG5yZXR1cm4gc2VsZjtcbiB9fSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5zdWJzY3JpYmUoc3Vic2NyaWJlKTtcbmNvbnN0IG1ha2VFYWNoSXRlcmF0b3I9KHRvcGljLG5leHRDZWxsUCk9Pntcbi8vXG4vL1xuY29uc3Qgc2VsZj1GYXIoJ0VhY2hJdGVyYXRvcicse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+c2VsZixcbm5leHQ6KCk9PntcbmNvbnN0e1xuaGVhZDpyZXN1bHRQLFxucHVibGlzaENvdW50OnB1Ymxpc2hDb3VudFAsXG50YWlsOnRhaWxQfT1cbkUuZ2V0KG5leHRDZWxsUCk7XG5cbi8vXG4vL1xuY29uc3QgZ2V0U3VjY2Vzc29yPWFzeW5jKCk9PntcbmNvbnN0IHB1Ymxpc2hDb3VudD1hd2FpdCBwdWJsaXNoQ291bnRQO1xuYXNzZXJ0LnR5cGVvZihwdWJsaXNoQ291bnQsJ2JpZ2ludCcpO1xuY29uc3Qgc3VjY2Vzc29yPWF3YWl0IEUodG9waWMpLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCk7XG5jb25zdCBuZXdQdWJsaXNoQ291bnQ9c3VjY2Vzc29yLnB1Ymxpc2hDb3VudDtcbmlmKG5ld1B1Ymxpc2hDb3VudCE9PXB1Ymxpc2hDb3VudCsxbil7XG5GYWlsIGBlYWNoSXRlcmF0b3IgYnJva2VuIGJ5IGdhcCBmcm9tIHB1Ymxpc2hDb3VudCAke3B1Ymxpc2hDb3VudH0gdG8gJHtuZXdQdWJsaXNoQ291bnR9YDtcbiB9XG5yZXR1cm4gc3VjY2Vzc29yO1xuIH07XG5cbi8vXG4vL1xubmV4dENlbGxQPXJlY29ubmVjdEFzTmVlZGVkKGdldFN1Y2Nlc3NvcixbdGFpbFBdKTtcblxuLy9cbi8vXG4vL1xuLy9cbnZvaWQgRS53aGVuKHB1Ymxpc2hDb3VudFAsc2luayxzaW5rKTtcbnZvaWQgRS53aGVuKG5leHRDZWxsUCxzaW5rLHNpbmspO1xucmV0dXJuIHJlc3VsdFA7XG4gfSxcbmZvcms6KCk9Pm1ha2VFYWNoSXRlcmF0b3IodG9waWMsbmV4dENlbGxQKX0pO1xuXG5yZXR1cm4gc2VsZjtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHN1YnNjcmliZUVhY2g9KHRvcGljKT0+e1xuY29uc3QgaXRlcmFibGU9RmFyKCdFYWNoSXRlcmFibGUnLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PntcbmNvbnN0IGZpcnN0Q2VsbFA9cmVjb25uZWN0QXNOZWVkZWQoKCk9PkUodG9waWMpLnN1YnNjcmliZUFmdGVyKCkpO1xucmV0dXJuIG1ha2VFYWNoSXRlcmF0b3IodG9waWMsZmlyc3RDZWxsUCk7XG4gfX0pO1xuXG5yZXR1cm4gaXRlcmFibGU7XG4gfTskaM2PX29uY2Uuc3Vic2NyaWJlRWFjaChzdWJzY3JpYmVFYWNoKTtcbmhhcmRlbihzdWJzY3JpYmVFYWNoKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNsb25lTGF0ZXN0SXRlcmF0b3I9KHRvcGljLGxvY2FsVXBkYXRlQ291bnQsdGVybWluYWxSZXN1bHQpPT57XG5sZXQgbXV0ZXg9UHJvbWlzZS5yZXNvbHZlKCk7XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZVJlcXVlc3ROZXh0UmVzdWx0PWFzeW5jKCk9PntcbmlmKHRlcm1pbmFsUmVzdWx0KXtcbi8vXG4vL1xucmV0dXJuIHRlcm1pbmFsUmVzdWx0O1xuIH1cblxuLy9cbi8vXG5jb25zdHt2YWx1ZSx1cGRhdGVDb3VudH09YXdhaXQgcmVjb25uZWN0QXNOZWVkZWQoKCk9PlxuRSh0b3BpYykuZ2V0VXBkYXRlU2luY2UobG9jYWxVcGRhdGVDb3VudCkpO1xuXG4vL1xubG9jYWxVcGRhdGVDb3VudD11cGRhdGVDb3VudDtcblxuLy9cbmlmKHVwZGF0ZUNvdW50PT09dW5kZWZpbmVkKXtcbnRlcm1pbmFsUmVzdWx0PWhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlfSk7XG5yZXR1cm4gdGVybWluYWxSZXN1bHQ7XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH07XG5cbmNvbnN0IHNlbGY9RmFyKCdMYXRlc3RJdGVyYXRvcicse1xuZm9yazooKT0+Y2xvbmVMYXRlc3RJdGVyYXRvcih0b3BpYyxsb2NhbFVwZGF0ZUNvdW50LHRlcm1pbmFsUmVzdWx0KSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnNlbGYsXG5uZXh0OmFzeW5jKCk9Pntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuaWYodGVybWluYWxSZXN1bHQpe1xuLy9cbi8vXG5yZXR1cm4gdGVybWluYWxSZXN1bHQ7XG4gfVxuXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgbmV4dFJlc3VsdD1tdXRleC50aGVuKG1heWJlUmVxdWVzdE5leHRSZXN1bHQpO1xubXV0ZXg9bmV4dFJlc3VsdC50aGVuKHNpbmssc2luayk7XG4vL1xuXG5yZXR1cm4gbmV4dFJlc3VsdDtcbiB9fSk7XG5cbnJldHVybiBzZWxmO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VMYXRlc3RJdGVyYXRvcj0odG9waWMpPT5jbG9uZUxhdGVzdEl0ZXJhdG9yKHRvcGljKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzdWJzY3JpYmVMYXRlc3Q9KHRvcGljKT0+e1xuY29uc3QgaXRlcmFibGU9RmFyKCdMYXRlc3RJdGVyYWJsZScse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+bWFrZUxhdGVzdEl0ZXJhdG9yKHRvcGljKX0pO1xuXG5yZXR1cm4gaXRlcmFibGU7XG4gfTskaM2PX29uY2Uuc3Vic2NyaWJlTGF0ZXN0KHN1YnNjcmliZUxhdGVzdCk7XG5oYXJkZW4oc3Vic2NyaWJlTGF0ZXN0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InN1YnNjcmliZSI6WyJzdWJzY3JpYmUiXSwic3Vic2NyaWJlRWFjaCI6WyJzdWJzY3JpYmVFYWNoIl0sInN1YnNjcmliZUxhdGVzdCI6WyJzdWJzY3JpYmVMYXRlc3QiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAl+K/4gAIAAAACAAAKQAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdWJzY3JpYmVyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIi4vc3Vic2NyaWJlLmpzIiwiLi9wdWJsaXNoLWtpdC5qcyIsIi4vdG9waWMuanMiXSwiZXhwb3J0cyI6WyJtYWtlU3Vic2NyaXB0aW9uIiwibWFrZVN1YnNjcmlwdGlvbktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLHN1YnNjcmliZUVhY2gsbWFrZVB1Ymxpc2hLaXQsbWFrZVBpbm5lZEhpc3RvcnlUb3BpYzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlRWFjaFwiLCBbJGjNj19hID0+IChzdWJzY3JpYmVFYWNoID0gJGjNj19hKV1dXV0sW1wiLi9wdWJsaXNoLWtpdC5qc1wiLCBbW1wibWFrZVB1Ymxpc2hLaXRcIiwgWyRozY9fYSA9PiAobWFrZVB1Ymxpc2hLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3RvcGljLmpzXCIsIFtbXCJtYWtlUGlubmVkSGlzdG9yeVRvcGljXCIsIFskaM2PX2EgPT4gKG1ha2VQaW5uZWRIaXN0b3J5VG9waWMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VTdWJzY3JpcHRpb249KHRvcGljKT0+e1xuY29uc3Qgc3Vic2NyaXB0aW9uPUZhcignU3Vic2NyaXB0aW9uJyx7XG4uLi5zdWJzY3JpYmVFYWNoKHRvcGljKSxcbnN1YnNjcmliZUFmdGVyOmFzeW5jKHB1Ymxpc2hDb3VudCk9PkUodG9waWMpLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCksXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbmdldFNoYXJhYmxlU3Vic2NyaXB0aW9uSW50ZXJuYWxzOmFzeW5jKCk9PnRvcGljLFxuXG5nZXRTdG9yZUtleTooKT0+aGFyZGVuKHtzdWJzY3JpcHRpb259KX0pO1xuXG5yZXR1cm4gc3Vic2NyaXB0aW9uO1xuIH07JGjNj19vbmNlLm1ha2VTdWJzY3JpcHRpb24obWFrZVN1YnNjcmlwdGlvbik7XG5oYXJkZW4obWFrZVN1YnNjcmlwdGlvbik7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlU3Vic2NyaXB0aW9uS2l0PSgpPT57XG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxuLy9cbi8vXG5cbmNvbnN0IHBpbm5lZEhpc3RvcnlUb3BpYz1tYWtlUGlubmVkSGlzdG9yeVRvcGljKHN1YnNjcmliZXIpO1xuY29uc3Qgc3Vic2NyaXB0aW9uPW1ha2VTdWJzY3JpcHRpb24ocGlubmVkSGlzdG9yeVRvcGljKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1YmxpY2F0aW9uPUZhcigncHVibGljYXRpb24nLHtcbnVwZGF0ZVN0YXRlOihub25GaW5hbFZhbHVlKT0+cHVibGlzaGVyLnB1Ymxpc2gobm9uRmluYWxWYWx1ZSksXG5maW5pc2g6KGNvbXBsZXRpb24pPT5wdWJsaXNoZXIuZmluaXNoKGNvbXBsZXRpb24pLFxuZmFpbDoocmVhc29uKT0+cHVibGlzaGVyLmZhaWwocmVhc29uKX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe3B1YmxpY2F0aW9uLHN1YnNjcmlwdGlvbn0pO1xuIH07JGjNj19vbmNlLm1ha2VTdWJzY3JpcHRpb25LaXQobWFrZVN1YnNjcmlwdGlvbktpdCk7XG5oYXJkZW4obWFrZVN1YnNjcmlwdGlvbktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU3Vic2NyaXB0aW9uIjpbIm1ha2VTdWJzY3JpcHRpb24iXSwibWFrZVN1YnNjcmlwdGlvbktpdCI6WyJtYWtlU3Vic2NyaXB0aW9uS2l0Il19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAC7X44scBAAAHAQAACQAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvdG9waWMuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIl0sImV4cG9ydHMiOlsibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVBpbm5lZEhpc3RvcnlUb3BpYz0odG9waWMpPT57XG4vL1xuXG4vL1xuY29uc3QgcGlubmVkUHViTGlzdD10b3BpYy5zdWJzY3JpYmVBZnRlcigpO1xuXG5yZXR1cm4gRmFyKCdQaW5uZWRIaXN0b3J5VG9waWMnLHtcbnN1YnNjcmliZUFmdGVyOmFzeW5jKHB1Ymxpc2hDb3VudD0tMW4pPT57XG5pZihwdWJsaXNoQ291bnQ9PT0tMW4pe1xucmV0dXJuIHBpbm5lZFB1Ykxpc3Q7XG4gfVxucmV0dXJuIHRvcGljLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCk7XG4gfSxcbmdldFVwZGF0ZVNpbmNlOmFzeW5jKHVwZGF0ZUNvdW50PXVuZGVmaW5lZCk9Pntcbi8vXG5yZXR1cm4gdG9waWMuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpO1xuIH19KTtcblxuIH07JGjNj19vbmNlLm1ha2VQaW5uZWRIaXN0b3J5VG9waWMobWFrZVBpbm5lZEhpc3RvcnlUb3BpYyk7XG5oYXJkZW4obWFrZVBpbm5lZEhpc3RvcnlUb3BpYyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUGlubmVkSGlzdG9yeVRvcGljIjpbIm1ha2VQaW5uZWRIaXN0b3J5VG9waWMiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABURLJnkBAAB5AQAAKgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy90eXBlcy1pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADTLMiAsQYAALEGAAAtAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL2ludGVybmFsL3NyYy90ZXN0aW5nLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsibWFrZUZha2VNYXJzaGFsbGVyIiwibWFrZUZha2VTdG9yYWdlIixudWxsXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXIsbWFrZU1hcnNoYWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdGVzdGluZy11dGlscy5qc1wiLCBbXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VGYWtlU3RvcmFnZT0ocGF0aCxwdWJsaWNhdGlvbik9PntcbmxldCBzZXRWYWx1ZUNhbGxzPTA7XG5jb25zdCBmdWxsUGF0aD0gYHB1Ymxpc2guJHtwYXRofWA7XG5jb25zdCBzdG9yZUtleT1oYXJkZW4oe1xuc3RvcmVOYW1lOidzd2luZ3NldCcsXG5zdG9yZVN1YmtleTogYHN3aW5nc2V0L2RhdGE6JHtmdWxsUGF0aH1gLFxuZGF0YVByZWZpeEJ5dGVzOicnfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3JhZ2U9RmFyKCdTdG9yYWdlTm9kZScse1xuZ2V0UGF0aDooKT0+cGF0aCxcbmdldFN0b3JlS2V5OmFzeW5jKCk9PnN0b3JlS2V5LFxuc2V0VmFsdWU6YXN5bmModmFsdWUpPT57XG5zZXRWYWx1ZUNhbGxzKz0xO1xuYXNzZXJ0LnR5cGVvZih2YWx1ZSwnc3RyaW5nJyk7XG5pZihwdWJsaWNhdGlvbil7XG5wdWJsaWNhdGlvbi51cGRhdGVTdGF0ZSh2YWx1ZSk7XG4gfVxuIH0sXG5tYWtlQ2hpbGROb2RlOigpPT5zdG9yYWdlLFxuY291bnRTZXRWYWx1ZUNhbGxzOigpPT5zZXRWYWx1ZUNhbGxzfSk7XG5cbnJldHVybiBzdG9yYWdlO1xuIH07JGjNj19vbmNlLm1ha2VGYWtlU3RvcmFnZShtYWtlRmFrZVN0b3JhZ2UpO1xuaGFyZGVuKG1ha2VGYWtlU3RvcmFnZSk7XG5cbmNvbnN0ICAgICAgICBtYWtlRmFrZU1hcnNoYWxsZXI9KCk9PlxubWFrZU1hcnNoYWwodW5kZWZpbmVkLHVuZGVmaW5lZCx7XG5tYXJzaGFsU2F2ZUVycm9yOigpPT57IH19KTskaM2PX29uY2UubWFrZUZha2VNYXJzaGFsbGVyKG1ha2VGYWtlTWFyc2hhbGxlcik7XG5cbmhhcmRlbihtYWtlRmFrZU1hcnNoYWxsZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdGVzdGluZy11dGlscy5qcyI6W1siZXZlbnRMb29wSXRlcmF0aW9uIiwiZXZlbnRMb29wSXRlcmF0aW9uIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VGYWtlU3RvcmFnZSI6WyJtYWtlRmFrZVN0b3JhZ2UiXSwibWFrZUZha2VNYXJzaGFsbGVyIjpbIm1ha2VGYWtlTWFyc2hhbGxlciJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAACq/PJvB0AALwdAAAzAAAAQGFnb3JpYy9zbWFydC13YWxsZXQtdjAuNS4zL3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAYWdvcmljL3N0b3JlIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvdmF0cy9zcmMvbGliLWJvYXJkLmpzIl0sImV4cG9ydHMiOlsibWFrZUV4cG9ydENvbnRleHQiLCJtYWtlSW1wb3J0Q29udGV4dCIsIm1ha2VMb2dnaW5nUHJlc2VuY2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsSGFuZGxlZFByb21pc2UsbWFrZVNjYWxhck1hcFN0b3JlLEZhcixtYWtlTWFyc2hhbCxSZW1vdGFibGUsREVGQVVMVF9QUkVGSVg7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJIYW5kbGVkUHJvbWlzZVwiLCBbJGjNj19hID0+IChIYW5kbGVkUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dLFtcIlJlbW90YWJsZVwiLCBbJGjNj19hID0+IChSZW1vdGFibGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdHMvc3JjL2xpYi1ib2FyZC5qc1wiLCBbW1wiREVGQVVMVF9QUkVGSVhcIiwgWyRozY9fYSA9PiAoREVGQVVMVF9QUkVGSVggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCBpc0RlZmF1bHRCb2FyZElkPShzcGVjaW1lbik9PntcbnJldHVybiB0eXBlb2Ygc3BlY2ltZW49PT0nc3RyaW5nJyYmc3BlY2ltZW4uc3RhcnRzV2l0aChERUZBVUxUX1BSRUZJWCk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVdhbGxldFNsb3Q9KF90YWJsZXMsa2luZCxpZCk9PntcbmNvbnN0IGRpZ2l0cz0vKiAgICAgICAgICAgICAgICAgKi8gYCR7aWR9YDtcbnJldHVybiBgJHtraW5kfToke2RpZ2l0c31gO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZmluZEtleT0ocmVjb3JkLHByZWRpY2F0ZSk9PntcbmNvbnN0IGtleT1PYmplY3Qua2V5cyhyZWNvcmQpLmZpbmQocHJlZGljYXRlKTtcbnJldHVybiBrZXk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBwYXJzZVdhbGxldFNsb3Q9KHRhYmxlcyxzbG90KT0+e1xuY29uc3Qga2luZD1maW5kS2V5KHRhYmxlcywoayk9PnNsb3Quc3RhcnRzV2l0aCggYCR7a306YCkpO1xuY29uc3QgaWQ9a2luZD9OdW1iZXIoc2xvdC5zbGljZShraW5kLmxlbmd0aCsxKSk6TmFOO1xucmV0dXJue2tpbmQsaWR9O1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBpbml0U2xvdFZhbD0odGFibGUsc2xvdCx2YWwpPT57XG50YWJsZS5ieVNsb3QuaW5pdChzbG90LHZhbCk7XG50YWJsZS5ieVZhbC5pbml0KHZhbCxzbG90KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFeHBvcnRDb250ZXh0PSgpPT57XG5jb25zdCB3YWxsZXRPYmplY3RzPXtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnB1cnNlOntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfSxcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wYXltZW50OntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfSxcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnVua25vd246e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9fTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYm9hcmRPYmplY3RzPXtcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgc2xvdFRvVmFsPShzbG90LF9pZmFjZSk9PntcbmlmKGlzRGVmYXVsdEJvYXJkSWQoc2xvdCkmJmJvYXJkT2JqZWN0cy5ieVNsb3QuaGFzKHNsb3QpKXtcbnJldHVybiBib2FyZE9iamVjdHMuYnlTbG90LmdldChzbG90KTtcbiB9XG5jb25zdHtraW5kLGlkfT1wYXJzZVdhbGxldFNsb3Qod2FsbGV0T2JqZWN0cyxzbG90KTtcbmtpbmR8fEZhaWwgYGJhZCBzbG90IGtpbmQ6ICR7c2xvdH1gO1xuY29uc3QgdmFsPXdhbGxldE9iamVjdHNba2luZF0uYnlTbG90LmdldChpZCk7Ly9cbnJldHVybiB2YWw7XG4gfTtcblxubGV0IHVua25vd25Ob25jZT0wO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCB2YWxUb1Nsb3Q9KHZhbCk9PntcbmlmKGJvYXJkT2JqZWN0cy5ieVZhbC5oYXModmFsKSl7XG5yZXR1cm4gYm9hcmRPYmplY3RzLmJ5VmFsLmdldCh2YWwpO1xuIH1cbmNvbnN0IGtpbmQ9ZmluZEtleSh3YWxsZXRPYmplY3RzLChrKT0+d2FsbGV0T2JqZWN0c1trXS5ieVZhbC5oYXModmFsKSk7XG5pZihraW5kKXtcbi8vXG5jb25zdCBpZD13YWxsZXRPYmplY3RzW2tpbmRdLmJ5VmFsLmdldCh2YWwpO1xucmV0dXJuIG1ha2VXYWxsZXRTbG90KHdhbGxldE9iamVjdHMsa2luZCxpZCk7XG4gfVxudW5rbm93bk5vbmNlKz0xO1xuY29uc3Qgc2xvdD1tYWtlV2FsbGV0U2xvdCh3YWxsZXRPYmplY3RzLCd1bmtub3duJyx1bmtub3duTm9uY2UpO1xuaW5pdFNsb3RWYWwod2FsbGV0T2JqZWN0cy51bmtub3duLHVua25vd25Ob25jZSx2YWwpO1xucmV0dXJuIHNsb3Q7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBtYWtlU2F2ZXI9KGtpbmQsdGFibGUpPT57XG5sZXQgbm9uY2U9MDtcbi8qICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2F2ZXI9KHZhbCk9Pntcbm5vbmNlKz0xO1xuaW5pdFNsb3RWYWwodGFibGUsbm9uY2UsdmFsKTtcbiB9O1xucmV0dXJuIHNhdmVyO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe1xuc2F2ZVB1cnNlQWN0aW9uczptYWtlU2F2ZXIoJ3B1cnNlJyx3YWxsZXRPYmplY3RzLnB1cnNlKSxcbnNhdmVQYXltZW50QWN0aW9uczptYWtlU2F2ZXIoJ3BheW1lbnQnLHdhbGxldE9iamVjdHMucGF5bWVudCksXG4vKlxuXG5cbiAgICAgKi9cbmluaXRQdXJzZUlkOihpZCxwdXJzZSk9PntcbmluaXRTbG90VmFsKHdhbGxldE9iamVjdHMucHVyc2UsaWQscHVyc2UpO1xuIH0sXG5wdXJzZUVudHJpZXM6d2FsbGV0T2JqZWN0cy5wdXJzZS5ieVNsb3QuZW50cmllcyxcbi8qXG5cblxuICAgICAqL1xuaW5pdEJvYXJkSWQ6KGlkLHZhbCk9PntcbmluaXRTbG90VmFsKGJvYXJkT2JqZWN0cyxpZCx2YWwpO1xuIH0sXG4vKlxuXG5cbiAgICAgKi9cbmVuc3VyZUJvYXJkSWQ6KGlkLHZhbCk9PntcbmlmKGJvYXJkT2JqZWN0cy5ieVZhbC5oYXModmFsKSl7XG5hc3NlcnQuZXF1YWwoYm9hcmRPYmplY3RzLmJ5VmFsLmdldCh2YWwpLGlkKTtcbnJldHVybjtcbiB9XG5pbml0U2xvdFZhbChib2FyZE9iamVjdHMsaWQsdmFsKTtcbiB9LFxuLi4ubWFrZU1hcnNoYWwodmFsVG9TbG90LHNsb3RUb1ZhbCx7c2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pfSk7XG5cbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UubWFrZUV4cG9ydENvbnRleHQobWFrZUV4cG9ydENvbnRleHQpO1xuXG5jb25zdCBkZWZhdWx0TWFrZVByZXNlbmNlPShpZmFjZSk9PntcbmNvbnN0IHNldmVyZWQ9IGBTRVZFUkVEOiAke2lmYWNlLnJlcGxhY2UoL15BbGxlZ2VkOiAvLCcnKX1gO1xucmV0dXJuIEZhcihzZXZlcmVkLHt9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSW1wb3J0Q29udGV4dD0obWFrZVByZXNlbmNlPWRlZmF1bHRNYWtlUHJlc2VuY2UpPT57XG5jb25zdCB3YWxsZXRPYmplY3RzPXtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnB1cnNlOntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfSxcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucGF5bWVudDp7XG5ieVNsb3Q6bWFrZVNjYWxhck1hcFN0b3JlKCksXG5ieVZhbDptYWtlU2NhbGFyTWFwU3RvcmUoKX0sXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnVua25vd246e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9fTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYm9hcmRPYmplY3RzPXtcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfTtcblxuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlVmFsPSh0YWJsZSxzbG90LGlmYWNlKT0+e1xuaWYodGFibGUuYnlTbG90LmhhcyhzbG90KSl7XG5yZXR1cm4gdGFibGUuYnlTbG90LmdldChzbG90KTtcbiB9XG5jb25zdCB2YWw9bWFrZVByZXNlbmNlKGlmYWNlKTtcbmluaXRTbG90VmFsKHRhYmxlLHNsb3QsdmFsKTtcbnJldHVybiB2YWw7XG4gfTtcblxuY29uc3Qgc2xvdFRvVmFsPXtcbi8qXG5cblxuICAgICAqL1xuZnJvbUJvYXJkOihzbG90LGlmYWNlKT0+e1xuaXNEZWZhdWx0Qm9hcmRJZChzbG90KXx8RmFpbCBgYmFkIGJvYXJkIHNsb3QgJHtxKHNsb3QpfWA7XG5yZXR1cm4gcHJvdmlkZVZhbChib2FyZE9iamVjdHMsc2xvdCxpZmFjZSk7XG4gfSxcblxuLypcblxuXG4gICAgICovXG5mcm9tTXlXYWxsZXQ6KHNsb3QsaWZhY2UpPT57XG5pZighc2xvdCl7XG4vL1xucmV0dXJuIG1ha2VQcmVzZW5jZSggYCR7c2xvdH1gKTtcbiB9XG5jb25zdHtraW5kLGlkfT1wYXJzZVdhbGxldFNsb3Qod2FsbGV0T2JqZWN0cyxzbG90KTtcbnJldHVybiBraW5kP1xucHJvdmlkZVZhbCh3YWxsZXRPYmplY3RzW2tpbmRdLGlkLGlmYWNlKTpcbnNsb3RUb1ZhbC5mcm9tQm9hcmQoc2xvdCxpZmFjZSk7XG4gfX07XG5cblxuY29uc3QgdmFsVG9TbG90PXtcbmZyb21Cb2FyZDoodmFsKT0+Ym9hcmRPYmplY3RzLmJ5VmFsLmdldCh2YWwpLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnJvbU15V2FsbGV0Oih2YWwpPT57XG5jb25zdCBraW5kPWZpbmRLZXkod2FsbGV0T2JqZWN0cywoayk9PndhbGxldE9iamVjdHNba10uYnlWYWwuaGFzKHZhbCkpO1xuaWYoa2luZD09PXVuZGVmaW5lZCl7XG50aHJvdyBGYWlsIGBjYW5ub3Qgc2VyaWFsaXplIHVucmVnaXN0ZXJlZCAke3ZhbH1gO1xuIH1cblxuY29uc3QgaWQ9d2FsbGV0T2JqZWN0c1traW5kXS5ieVZhbC5nZXQodmFsKTtcbnJldHVybiBtYWtlV2FsbGV0U2xvdCh3YWxsZXRPYmplY3RzLGtpbmQsaWQpO1xuIH19O1xuXG5cbmNvbnN0IG1hcnNoYWw9e1xuZnJvbUJvYXJkOm1ha2VNYXJzaGFsKHZhbFRvU2xvdC5mcm9tQm9hcmQsc2xvdFRvVmFsLmZyb21Cb2FyZCx7XG5tYXJzaGFsTmFtZTonZnJvbUJvYXJkJyxcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KSxcblxuZnJvbU15V2FsbGV0Om1ha2VNYXJzaGFsKHZhbFRvU2xvdC5mcm9tTXlXYWxsZXQsc2xvdFRvVmFsLmZyb21NeVdhbGxldCx7XG5tYXJzaGFsTmFtZTonZnJvbU15V2FsbGV0JyxcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KX07XG5cblxuXG5yZXR1cm4gaGFyZGVuKHtcbi8qXG5cblxuICAgICAqL1xuaW5pdEJvYXJkSWQ6KGlkLHZhbCk9PntcbmluaXRTbG90VmFsKGJvYXJkT2JqZWN0cyxpZCx2YWwpO1xuIH0sXG4vKlxuXG5cbiAgICAgKi9cbmVuc3VyZUJvYXJkSWQ6KGlkLHZhbCk9PntcbmlmKGJvYXJkT2JqZWN0cy5ieVZhbC5oYXModmFsKSl7XG5hc3NlcnQuZXF1YWwoYm9hcmRPYmplY3RzLmJ5VmFsLmdldCh2YWwpLGlkKTtcbnJldHVybjtcbiB9XG5pbml0U2xvdFZhbChib2FyZE9iamVjdHMsaWQsdmFsKTtcbiB9LFxuZnJvbU15V2FsbGV0OkZhcignd2FsbGV0IG1hcnNoYWxsZXInLHsuLi5tYXJzaGFsLmZyb21NeVdhbGxldH0pLFxuZnJvbUJvYXJkOkZhcignYm9hcmQgbWFyc2hhbGxlcicsey4uLm1hcnNoYWwuZnJvbUJvYXJkfSl9KTtcblxuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VJbXBvcnRDb250ZXh0KG1ha2VJbXBvcnRDb250ZXh0KTtcbmNvbnN0IG1ha2VQcmVzZW5jZT0oaWZhY2UsaGFuZGxlcik9PntcbmxldCBvYmo7XG5cbnZvaWQgbmV3IEhhbmRsZWRQcm9taXNlKChyZXNvbHZlLHJlamVjdCxyZXNvbHZlV2l0aFByZXNlbmNlKT0+e1xub2JqPXJlc29sdmVXaXRoUHJlc2VuY2UoaGFuZGxlcik7XG4gfSk7XG5hc3NlcnQob2JqKTtcbnJldHVybiBSZW1vdGFibGUoaWZhY2UsdW5kZWZpbmVkLG9iaik7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTG9nZ2luZ1ByZXNlbmNlPShpZmFjZSxsb2cpPT57XG4vKiAgICAgICAgICAgICAgKi8gLy9cbmNvbnN0IGl0PW1ha2VQcmVzZW5jZShpZmFjZSx7XG5hcHBseU1ldGhvZDoodGFyZ2V0LG1ldGhvZCxhcmdzKT0+e1xubG9nKGhhcmRlbihbJ2FwcGx5TWV0aG9kJyx0YXJnZXQsbWV0aG9kLGFyZ3NdKSk7XG4gfSxcbmFwcGx5RnVuY3Rpb246KHRhcmdldCxhcmdzKT0+e1xubG9nKGhhcmRlbihbJ2FwcGx5RnVuY3Rpb24nLHRhcmdldCxhcmdzXSkpO1xuIH19KTtcblxucmV0dXJuIGl0O1xuIH07JGjNj19vbmNlLm1ha2VMb2dnaW5nUHJlc2VuY2UobWFrZUxvZ2dpbmdQcmVzZW5jZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRXhwb3J0Q29udGV4dCI6WyJtYWtlRXhwb3J0Q29udGV4dCJdLCJtYWtlSW1wb3J0Q29udGV4dCI6WyJtYWtlSW1wb3J0Q29udGV4dCJdLCJtYWtlTG9nZ2luZ1ByZXNlbmNlIjpbIm1ha2VMb2dnaW5nUHJlc2VuY2UiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAoar9L8MNAADDDQAAIQAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyIsIi4vc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsIi4vc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiLCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qcyIsIkBlbmRvL2V4byIsIi4vbGVnYWN5L2xlZ2FjeU1hcC5qcyIsIi4vbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiLCIuL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5IiwiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzcyIsIm11c3RNYXRjaCIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHlwZWxlc3NNdXN0TWF0Y2g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKHR5cGVsZXNzTXVzdE1hdGNoID0gJGjNj19hKV1dXV0sW1wiLi9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc3RvcmUtdXRpbHMuanNcIiwgW11dLFtcIkBlbmRvL2V4b1wiLCBbXV0sW1wiLi9sZWdhY3kvbGVnYWN5TWFwLmpzXCIsIFtdXSxbXCIuL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzXCIsIFtdXSxbXCIuL3R5cGVzLmpzXCIsIFtdXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG11c3RNYXRjaD10eXBlbGVzc011c3RNYXRjaDskaM2PX29uY2UubXVzdE1hdGNoKG11c3RNYXRjaCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiOltbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qcyI6W1sibWFrZVNjYWxhclNldFN0b3JlIiwibWFrZVNjYWxhclNldFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanMiOltbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyI6W1sibWFrZVNjYWxhck1hcFN0b3JlIiwibWFrZVNjYWxhck1hcFN0b3JlIl1dLCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qcyI6W1sicHJvdmlkZUxhenkiLCJwcm92aWRlTGF6eSJdXSwiQGVuZG8vcGF0dGVybnMiOltbImlzS2V5IiwiaXNLZXkiXSxbImFzc2VydEtleSIsImFzc2VydEtleSJdLFsiYXNzZXJ0U2NhbGFyS2V5IiwiYXNzZXJ0U2NhbGFyS2V5Il0sWyJtYWtlQ29weVNldCIsIm1ha2VDb3B5U2V0Il0sWyJnZXRDb3B5U2V0S2V5cyIsImdldENvcHlTZXRLZXlzIl0sWyJtYWtlQ29weUJhZyIsIm1ha2VDb3B5QmFnIl0sWyJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyIsIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIl0sWyJnZXRDb3B5QmFnRW50cmllcyIsImdldENvcHlCYWdFbnRyaWVzIl0sWyJtYWtlQ29weU1hcCIsIm1ha2VDb3B5TWFwIl0sWyJnZXRDb3B5TWFwRW50cmllcyIsImdldENvcHlNYXBFbnRyaWVzIl0sWyJjb2VyY2VUb0VsZW1lbnRzIiwiY29lcmNlVG9FbGVtZW50cyJdLFsiY29lcmNlVG9CYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIl0sWyJjb21wYXJlS2V5cyIsImNvbXBhcmVLZXlzIl0sWyJrZXlMVCIsImtleUxUIl0sWyJrZXlMVEUiLCJrZXlMVEUiXSxbImtleUVRIiwia2V5RVEiXSxbImtleUdURSIsImtleUdURSJdLFsia2V5R1QiLCJrZXlHVCJdLFsiZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNJc1N1cGVyc2V0Il0sWyJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzRGlzam9pbnQiXSxbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzQ29tcGFyZSJdLFsiZWxlbWVudHNVbmlvbiIsImVsZW1lbnRzVW5pb24iXSxbImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiJdLFsiZWxlbWVudHNJbnRlcnNlY3Rpb24iLCJlbGVtZW50c0ludGVyc2VjdGlvbiJdLFsiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IiwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0Il0sWyJzZXRJc1N1cGVyc2V0Iiwic2V0SXNTdXBlcnNldCJdLFsic2V0SXNEaXNqb2ludCIsInNldElzRGlzam9pbnQiXSxbInNldENvbXBhcmUiLCJzZXRDb21wYXJlIl0sWyJzZXRVbmlvbiIsInNldFVuaW9uIl0sWyJzZXREaXNqb2ludFVuaW9uIiwic2V0RGlzam9pbnRVbmlvbiJdLFsic2V0SW50ZXJzZWN0aW9uIiwic2V0SW50ZXJzZWN0aW9uIl0sWyJzZXREaXNqb2ludFN1YnRyYWN0Iiwic2V0RGlzam9pbnRTdWJ0cmFjdCJdLFsiYmFnSXNTdXBlcmJhZyIsImJhZ0lzU3VwZXJiYWciXSxbImJhZ0NvbXBhcmUiLCJiYWdDb21wYXJlIl0sWyJiYWdVbmlvbiIsImJhZ1VuaW9uIl0sWyJiYWdJbnRlcnNlY3Rpb24iLCJiYWdJbnRlcnNlY3Rpb24iXSxbImJhZ0Rpc2pvaW50U3VidHJhY3QiLCJiYWdEaXNqb2ludFN1YnRyYWN0Il0sWyJNIiwiTSJdLFsiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIl0sWyJpc1BhdHRlcm4iLCJpc1BhdHRlcm4iXSxbImFzc2VydFBhdHRlcm4iLCJhc3NlcnRQYXR0ZXJuIl0sWyJtYXRjaGVzIiwibWF0Y2hlcyJdLFsiaXNDb3B5U2V0IiwiaXNDb3B5U2V0Il0sWyJpc0NvcHlNYXAiLCJpc0NvcHlNYXAiXV0sIkBlbmRvL2V4byI6W1siaW5pdEVtcHR5IiwiaW5pdEVtcHR5Il0sWyJkZWZpbmVFeG9DbGFzcyIsImRlZmluZUV4b0NsYXNzIl0sWyJkZWZpbmVFeG9DbGFzc0tpdCIsImRlZmluZUV4b0NsYXNzS2l0Il0sWyJtYWtlRXhvIiwibWFrZUV4byJdXSwiLi9sZWdhY3kvbGVnYWN5TWFwLmpzIjpbWyJtYWtlTGVnYWN5TWFwIiwibWFrZUxlZ2FjeU1hcCJdXSwiLi9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyI6W1sibWFrZUxlZ2FjeVdlYWtNYXAiLCJtYWtlTGVnYWN5V2Vha01hcCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtdXN0TWF0Y2giOlsibXVzdE1hdGNoIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAM7ll0hkBQAAZAUAACwAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlTGVnYWN5TWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUxlZ2FjeU1hcD0odGFnPSdrZXknKT0+e1xuY29uc3QgbT1uZXcgTWFwKCk7XG5jb25zdCBhc3NlcnRLZXlEb2VzTm90RXhpc3Q9KGtleSk9PlxuIW0uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7a2V5fWA7XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9PlxubS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IG5vdCBmb3VuZDogJHtrZXl9YDtcbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4gbS5oYXMoa2V5KTtcbiB9LFxuaW5pdDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RG9lc05vdEV4aXN0KGtleSk7XG5tLnNldChrZXksdmFsdWUpO1xuIH0sXG5nZXQ6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xucmV0dXJuIG0uZ2V0KGtleSk7XG4gfSxcbnNldDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5tLnNldChrZXksdmFsdWUpO1xuIH0sXG5kZWxldGU6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xubS5kZWxldGUoa2V5KTtcbiB9LFxua2V5czooKT0+bS5rZXlzKCksXG52YWx1ZXM6KCk9Pm0udmFsdWVzKCksXG5lbnRyaWVzOigpPT5tLmVudHJpZXMoKSxcbmdldFNpemU6KCk9Pm0uc2l6ZSxcbmNsZWFyOigpPT5tLmNsZWFyKCl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VMZWdhY3lNYXAobWFrZUxlZ2FjeU1hcCk7XG5oYXJkZW4obWFrZUxlZ2FjeU1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTGVnYWN5TWFwIjpbIm1ha2VMZWdhY3lNYXAiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAbfFZIyYFAAAmBQAAMAAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlTGVnYWN5V2Vha01hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTGVnYWN5V2Vha01hcD0odGFnPSdrZXknKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd209bmV3IFdlYWtNYXAoKTtcbmNvbnN0IGFzc2VydEtleURvZXNOb3RFeGlzdD0oa2V5KT0+XG4hd20uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7a2V5fWA7XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9Plxud20uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIHdtLmhhcyhrZXkpO1xuIH0sXG5pbml0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlEb2VzTm90RXhpc3Qoa2V5KTtcbndtLnNldChrZXksdmFsdWUpO1xuIH0sXG5nZXQ6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuLy9cbnJldHVybiAoLyogICAgICAgICAgICAqL3dtLmdldChrZXkpKTtcbiB9LFxuc2V0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbndtLnNldChrZXksdmFsdWUpO1xuIH0sXG5kZWxldGU6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xud20uZGVsZXRlKGtleSk7XG4gfX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUxlZ2FjeVdlYWtNYXAobWFrZUxlZ2FjeVdlYWtNYXApO1xuaGFyZGVuKG1ha2VMZWdhY3lXZWFrTWFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VMZWdhY3lXZWFrTWFwIjpbIm1ha2VMZWdhY3lXZWFrTWFwIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIWebmbLEAAAyxAAADEAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiLCIuL3NjYWxhcldlYWtNYXBTdG9yZS5qcyIsIi4vc3RvcmUtdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlTWFwU3RvcmVNZXRob2RzIiwibWFrZVNjYWxhck1hcFN0b3JlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYXIsYXNzZXJ0UGFzc2FibGUsZmlsdGVySXRlcmFibGUsbWFwSXRlcmFibGUsY29tcGFyZVJhbmssYXNzZXJ0U2NhbGFyS2V5LG1ha2VDb3B5TWFwLG1hdGNoZXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4sbWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMsbWFrZUN1cnJlbnRLZXlzS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcImZpbHRlckl0ZXJhYmxlXCIsIFskaM2PX2EgPT4gKGZpbHRlckl0ZXJhYmxlID0gJGjNj19hKV1dLFtcIm1hcEl0ZXJhYmxlXCIsIFskaM2PX2EgPT4gKG1hcEl0ZXJhYmxlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiY29tcGFyZVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiYXNzZXJ0U2NhbGFyS2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydFNjYWxhcktleSA9ICRozY9fYSldXSxbXCJtYWtlQ29weU1hcFwiLCBbJGjNj19hID0+IChtYWtlQ29weU1hcCA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV1dXSxbXCIuL3NjYWxhcldlYWtNYXBTdG9yZS5qc1wiLCBbW1wibWFrZVdlYWtNYXBTdG9yZU1ldGhvZHNcIiwgWyRozY9fYSA9PiAobWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMgPSAkaM2PX2EpXV1dXSxbXCIuL3N0b3JlLXV0aWxzLmpzXCIsIFtbXCJtYWtlQ3VycmVudEtleXNLaXRcIiwgWyRozY9fYSA9PiAobWFrZUN1cnJlbnRLZXlzS2l0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1hcFN0b3JlTWV0aG9kcz0oXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydEtleU9rVG9EZWxldGU9dW5kZWZpbmVkLFxudGFnPSdrZXknKT0+XG57XG5jb25zdHthc3NlcnRVcGRhdGVPbkFkZCxhc3NlcnRVcGRhdGVPbkRlbGV0ZSxpdGVyYWJsZUtleXN9PVxubWFrZUN1cnJlbnRLZXlzS2l0KFxuKCk9PmpzbWFwLmtleXMoKSxcbihrKT0+anNtYXAuaGFzKGspLFxuY29tcGFyZVJhbmssXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlLFxudGFnKTtcblxuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IGtleXM9KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGl0ZXJhYmxlS2V5cztcbiB9XG5jb25zdCBmaWx0ZXI9KGspPT57XG5pZihrZXlQYXR0IT09dW5kZWZpbmVkJiYhbWF0Y2hlcyhrLGtleVBhdHQpKXtcbnJldHVybiBmYWxzZTtcbiB9XG4vL1xuaWYodmFsdWVQYXR0IT09dW5kZWZpbmVkJiYhbWF0Y2hlcyhqc21hcC5nZXQoayksdmFsdWVQYXR0KSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcbnJldHVybiBmaWx0ZXJJdGVyYWJsZShpdGVyYWJsZUtleXMsZmlsdGVyKTtcbiB9O1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHZhbHVlcz0oa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PlxubWFwSXRlcmFibGUoa2V5cyhrZXlQYXR0LHZhbHVlUGF0dCksKGspPT4vKiAgICAgICAgICAgICovanNtYXAuZ2V0KGspKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBlbnRyaWVzPShrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5tYXBJdGVyYWJsZShrZXlzKGtleVBhdHQsdmFsdWVQYXR0KSwoayk9PltcbmssXG4vKiAgICAgICAgICAgICovanNtYXAuZ2V0KGspXSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG4uLi5tYWtlV2Vha01hcFN0b3JlTWV0aG9kcyhcbmpzbWFwLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxudGFnKSxcblxua2V5cyxcbnZhbHVlcyxcbmVudHJpZXMsXG5cbnNuYXBzaG90OihrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5tYWtlQ29weU1hcChlbnRyaWVzKGtleVBhdHQsdmFsdWVQYXR0KSksXG5cbmdldFNpemU6KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQmJnZhbHVlUGF0dD09PXVuZGVmaW5lZD9cbmpzbWFwLnNpemU6XG5bLi4ua2V5cyhrZXlQYXR0LHZhbHVlUGF0dCldLmxlbmd0aCxcblxuY2xlYXI6KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQpe1xuanNtYXAuY2xlYXIoKTtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIGtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpKXtcbmpzbWFwLmRlbGV0ZShrZXkpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZU1hcFN0b3JlTWV0aG9kcyhtYWtlTWFwU3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyTWFwU3RvcmU9KFxudGFnPSdrZXknLFxue2tleVNoYXBlPXVuZGVmaW5lZCx2YWx1ZVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzbWFwPW5ldyBNYXAoKTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4oa2V5U2hhcGUpO1xuIH1cbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybih2YWx1ZVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtWT2tUb1NldD0oX2tleSx2YWx1ZSk9Pntcbi8vXG4vL1xuaGFyZGVuKHZhbHVlKTtcblxuYXNzZXJ0UGFzc2FibGUodmFsdWUpO1xuaWYodmFsdWVTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2godmFsdWUsdmFsdWVTaGFwZSwnbWFwU3RvcmUgdmFsdWUnKTtcbiB9XG4gfTtcblxuY29uc3QgYXNzZXJ0S1ZPa1RvQWRkPShrZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xuXG5hc3NlcnRTY2FsYXJLZXkoa2V5KTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ21hcFN0b3JlIGtleScpO1xuIH1cbmFzc2VydEtWT2tUb1NldChrZXksdmFsdWUpO1xuIH07XG5cbnJldHVybiBGYXIoIGBzY2FsYXIgTWFwU3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlTWFwU3RvcmVNZXRob2RzKFxuanNtYXAsXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG51bmRlZmluZWQsXG50YWcpfSk7XG5cblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJNYXBTdG9yZShtYWtlU2NhbGFyTWFwU3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJNYXBTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWFwU3RvcmVNZXRob2RzIjpbIm1ha2VNYXBTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhck1hcFN0b3JlIjpbIm1ha2VTY2FsYXJNYXBTdG9yZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABCTH0e/AsAAPwLAAAxAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIiwiLi9zY2FsYXJXZWFrU2V0U3RvcmUuanMiLCIuL3N0b3JlLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsibWFrZVNjYWxhclNldFN0b3JlIiwibWFrZVNldFN0b3JlTWV0aG9kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFyLGZpbHRlckl0ZXJhYmxlLGNvbXBhcmVSYW5rLGFzc2VydFNjYWxhcktleSxtYWtlQ29weVNldCxtYXRjaGVzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzLG1ha2VDdXJyZW50S2V5c0tpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJmaWx0ZXJJdGVyYWJsZVwiLCBbJGjNj19hID0+IChmaWx0ZXJJdGVyYWJsZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImNvbXBhcmVSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImFzc2VydFNjYWxhcktleVwiLCBbJGjNj19hID0+IChhc3NlcnRTY2FsYXJLZXkgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlTZXRcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlTZXQgPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dXV0sW1wiLi9zY2FsYXJXZWFrU2V0U3RvcmUuanNcIiwgW1tcIm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzXCIsIFskaM2PX2EgPT4gKG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzID0gJGjNj19hKV1dXV0sW1wiLi9zdG9yZS11dGlscy5qc1wiLCBbW1wibWFrZUN1cnJlbnRLZXlzS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VDdXJyZW50S2V5c0tpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNldFN0b3JlTWV0aG9kcz0oXG5qc3NldCxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmNvbnN0e2Fzc2VydFVwZGF0ZU9uQWRkLGFzc2VydFVwZGF0ZU9uRGVsZXRlLGl0ZXJhYmxlS2V5c309XG5tYWtlQ3VycmVudEtleXNLaXQoXG4oKT0+anNzZXQua2V5cygpLFxuKGspPT5qc3NldC5oYXMoayksXG5jb21wYXJlUmFuayxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlLFxua2V5TmFtZSk7XG5cblxuLypcblxuXG4gICAqL1xuY29uc3Qga2V5cz0oa2V5UGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQ/XG5pdGVyYWJsZUtleXM6XG5maWx0ZXJJdGVyYWJsZShpdGVyYWJsZUtleXMsKGspPT5tYXRjaGVzKGssa2V5UGF0dCkpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbi4uLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKFxuanNzZXQsXG5hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxua2V5TmFtZSksXG5cblxua2V5cyxcblxudmFsdWVzOmtleXMsXG5cbnNuYXBzaG90OihrZXlQYXR0PXVuZGVmaW5lZCk9Pm1ha2VDb3B5U2V0KGtleXMoa2V5UGF0dCkpLFxuXG5nZXRTaXplOihrZXlQYXR0PXVuZGVmaW5lZCk9Plxua2V5UGF0dD09PXVuZGVmaW5lZD9qc3NldC5zaXplOlsuLi5rZXlzKGtleVBhdHQpXS5sZW5ndGgsXG5cbmNsZWFyOihrZXlQYXR0PXVuZGVmaW5lZCk9PntcbmlmKGtleVBhdHQ9PT11bmRlZmluZWQpe1xuanNzZXQuY2xlYXIoKTtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIGtleXMoa2V5UGF0dCkpe1xuanNzZXQuZGVsZXRlKGtleSk7XG4gfVxuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VTZXRTdG9yZU1ldGhvZHMobWFrZVNldFN0b3JlTWV0aG9kcyk7XG5jb25zdCAgICAgICAgbWFrZVNjYWxhclNldFN0b3JlPShcbnRhZz0na2V5JyxcbntrZXlTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc3NldD1uZXcgU2V0KCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtleU9rVG9BZGQ9KGtleSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5cbmFzc2VydFNjYWxhcktleShrZXkpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnc2V0U3RvcmUga2V5Jyk7XG4gfVxuIH07XG5cbnJldHVybiBGYXIoIGBzY2FsYXIgU2V0U3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlU2V0U3RvcmVNZXRob2RzKGpzc2V0LGFzc2VydEtleU9rVG9BZGQsdW5kZWZpbmVkLHRhZyl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJTZXRTdG9yZShtYWtlU2NhbGFyU2V0U3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU2V0U3RvcmVNZXRob2RzIjpbIm1ha2VTZXRTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhclNldFN0b3JlIjpbIm1ha2VTY2FsYXJTZXRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADG/C1l3w0AAN8NAAA1AAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSIsIm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLEZhcixhc3NlcnRQYXNzYWJsZSxwYXNzU3R5bGVPZixnZXRDb3B5TWFwRW50cmllcyxtdXN0TWF0Y2gsYXNzZXJ0UGF0dGVybixpc0NvcHlNYXA7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImdldENvcHlNYXBFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdldENvcHlNYXBFbnRyaWVzID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dLFtcImlzQ29weU1hcFwiLCBbJGjNj19hID0+IChpc0NvcHlNYXAgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlV2Vha01hcFN0b3JlTWV0aG9kcz0oXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydEtleU9rVG9EZWxldGU9dW5kZWZpbmVkLFxua2V5TmFtZT0na2V5Jyk9Plxue1xuY29uc3QgYXNzZXJ0S2V5RG9lc05vdEV4aXN0PShrZXkpPT5cbiFqc21hcC5oYXMoa2V5KXx8RmFpbCBgJHtxKGtleU5hbWUpfSBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7a2V5fWA7XG5cbmNvbnN0IGFzc2VydEtleUV4aXN0cz0oa2V5KT0+XG5qc21hcC5oYXMoa2V5KXx8RmFpbCBgJHtxKGtleU5hbWUpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5cbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4ganNtYXAuaGFzKGtleSk7XG4gfSxcbmdldDooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG4vL1xucmV0dXJuICgvKiAgICAgICAgICAgICovanNtYXAuZ2V0KGtleSkpO1xuIH0sXG5cbmluaXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleURvZXNOb3RFeGlzdChrZXkpO1xuYXNzZXJ0S1ZPa1RvQWRkKGtleSx2YWx1ZSk7XG5qc21hcC5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuc2V0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbmFzc2VydEtWT2tUb1NldChrZXksdmFsdWUpO1xuanNtYXAuc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5pZihhc3NlcnRLZXlPa1RvRGVsZXRlIT09dW5kZWZpbmVkKXtcbmFzc2VydEtleU9rVG9EZWxldGUoa2V5KTtcbiB9XG5qc21hcC5kZWxldGUoa2V5KTtcbiB9LFxuXG5hZGRBbGw6KGVudHJpZXMpPT57XG5pZih0eXBlb2YgZW50cmllc1tTeW1ib2wuaXRlcmF0b3JdIT09J2Z1bmN0aW9uJyl7XG5pZihPYmplY3QuaXNGcm96ZW4oZW50cmllcykmJmlzQ29weU1hcChlbnRyaWVzKSl7XG4vL1xuZW50cmllcz1nZXRDb3B5TWFwRW50cmllcyhlbnRyaWVzKTtcbiB9ZWxzZXtcbkZhaWwgYHByb3ZpZGVkIGRhdGEgc291cmNlIGlzIG5vdCBpdGVyYWJsZTogJHtlbnRyaWVzfWA7XG4gfVxuIH1cbmZvcihjb25zdFtrZXksdmFsdWVdb2YvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovZW50cmllcyl7XG4vL1xuYXNzZXJ0S1ZPa1RvQWRkKGtleSx2YWx1ZSk7XG5qc21hcC5zZXQoa2V5LHZhbHVlKTtcbiB9XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyV2Vha01hcFN0b3JlPShcbnRhZz0na2V5Jyxcbntsb25nTGl2ZWQ9dHJ1ZSxrZXlTaGFwZT11bmRlZmluZWQsdmFsdWVTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc21hcD1uZXcobG9uZ0xpdmVkP1dlYWtNYXA6TWFwKSgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuaWYodmFsdWVTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKHZhbHVlU2hhcGUpO1xuIH1cblxuY29uc3QgYXNzZXJ0S1ZPa1RvU2V0PShfa2V5LHZhbHVlKT0+e1xuLy9cbi8vXG5oYXJkZW4odmFsdWUpO1xuXG5hc3NlcnRQYXNzYWJsZSh2YWx1ZSk7XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaCh2YWx1ZSx2YWx1ZVNoYXBlLCd3ZWFrTWFwU3RvcmUgdmFsdWUnKTtcbiB9XG4gfTtcblxuY29uc3QgYXNzZXJ0S1ZPa1RvQWRkPShrZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xucGFzc1N0eWxlT2Yoa2V5KT09PSdyZW1vdGFibGUnfHxcbkZhaWwgYE9ubHkgcmVtb3RhYmxlcyBjYW4gYmUga2V5cyBvZiBzY2FsYXIgV2Vha01hcFN0b3JlczogJHtrZXl9YDtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ3dlYWtNYXBTdG9yZSBrZXknKTtcbiB9XG5hc3NlcnRLVk9rVG9TZXQoa2V5LHZhbHVlKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFdlYWtNYXBTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKFxuanNtYXAsXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG51bmRlZmluZWQsXG50YWcpfSk7XG5cblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUobWFrZVNjYWxhcldlYWtNYXBTdG9yZSk7XG5oYXJkZW4obWFrZVNjYWxhcldlYWtNYXBTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlV2Vha01hcFN0b3JlTWV0aG9kcyI6WyJtYWtlV2Vha01hcFN0b3JlTWV0aG9kcyJdLCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIjpbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAhi++xKIKAACiCgAANQAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxGYXIscGFzc1N0eWxlT2YsZ2V0Q29weVNldEtleXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4saXNDb3B5U2V0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjNj19hID0+IChnZXRDb3B5U2V0S2V5cyA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcImFzc2VydFBhdHRlcm5cIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRozY9fYSldXSxbXCJpc0NvcHlTZXRcIiwgWyRozY9fYSA9PiAoaXNDb3B5U2V0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtTZXRTdG9yZU1ldGhvZHM9KFxuanNzZXQsXG5hc3NlcnRLZXlPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9PlxuanNzZXQuaGFzKGtleSl8fEZhaWwgYCR7cShrZXlOYW1lKX0gbm90IGZvdW5kOiAke2tleX1gO1xuXG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIGpzc2V0LmhhcyhrZXkpO1xuIH0sXG5cbmFkZDooa2V5KT0+e1xuYXNzZXJ0S2V5T2tUb0FkZChrZXkpO1xuanNzZXQuYWRkKGtleSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5pZihhc3NlcnRLZXlPa1RvRGVsZXRlIT09dW5kZWZpbmVkKXtcbmFzc2VydEtleU9rVG9EZWxldGUoa2V5KTtcbiB9XG5qc3NldC5kZWxldGUoa2V5KTtcbiB9LFxuXG5hZGRBbGw6KGtleXMpPT57XG5pZih0eXBlb2Yga2V5c1tTeW1ib2wuaXRlcmF0b3JdIT09J2Z1bmN0aW9uJyl7XG5pZihPYmplY3QuaXNGcm96ZW4oa2V5cykmJmlzQ29weVNldChrZXlzKSl7XG4vL1xua2V5cz1nZXRDb3B5U2V0S2V5cyhrZXlzKTtcbiB9ZWxzZXtcbkZhaWwgYHByb3ZpZGVkIGRhdGEgc291cmNlIGlzIG5vdCBpdGVyYWJsZTogJHtrZXlzfWA7XG4gfVxuIH1cbmZvcihjb25zdCBrZXkgb2YvKiAgICAgICAgICAgICAgICAgICAgICAqL2tleXMpe1xuYXNzZXJ0S2V5T2tUb0FkZChrZXkpO1xuanNzZXQuYWRkKGtleSk7XG4gfVxuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMobWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJXZWFrU2V0U3RvcmU9KFxudGFnPSdrZXknLFxue2xvbmdMaXZlZD10cnVlLGtleVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzc2V0PW5ldyhsb25nTGl2ZWQ/V2Vha1NldDpTZXQpKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtleU9rVG9BZGQ9KGtleSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5wYXNzU3R5bGVPZihrZXkpPT09J3JlbW90YWJsZSd8fFxuRmFpbCBgT25seSByZW1vdGFibGVzIGNhbiBiZSBrZXlzIG9mIHNjYWxhciBXZWFrU3RvcmVzOiAke2tleX1gO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnd2Vha1NldFN0b3JlIGtleScpO1xuIH1cbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFdlYWtTZXRTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKGpzc2V0LGFzc2VydEtleU9rVG9BZGQsdW5kZWZpbmVkLHRhZyl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUobWFrZVNjYWxhcldlYWtTZXRTdG9yZSk7XG5oYXJkZW4obWFrZVNjYWxhcldlYWtTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyI6WyJtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyJdLCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIjpbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAxQKMM9oOAADaDgAALgAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiYXBwZW5kVG9TdG9yZWRBcnJheSIsImlzQ29weU1hcCIsImlzQ29weVNldCIsIm1ha2VBdG9taWNQcm92aWRlciIsIm1ha2VDdXJyZW50S2V5c0tpdCIsInByb3ZpZGVMYXp5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEZhcixNLG1hdGNoZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuICovXG5cbi8vXG4vL1xuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldD0ocyk9Pm1hdGNoZXMocyxNLnNldCgpKTtcblxuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmlzQ29weVNldChpc0NvcHlTZXQpO1xuY29uc3QgICAgICAgIGlzQ29weU1hcD0obSk9Pm1hdGNoZXMobSxNLm1hcCgpKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmlzQ29weU1hcChpc0NvcHlNYXApO1xuY29uc3QgICAgICAgIG1ha2VDdXJyZW50S2V5c0tpdD0oXG5nZXRSYXdLZXlzLFxuY2hlY2tIYXMsXG5jb21wYXJlLFxuYXNzZXJ0T2tUb0FkZCxcbmFzc2VydE9rVG9EZWxldGU9dW5kZWZpbmVkLFxua2V5TmFtZT0na2V5Jyk9Plxue1xubGV0IHVwZGF0ZUNvdW50PTA7XG5sZXQgc29ydGVkS2V5c01lbW87XG5cbmNvbnN0IGFzc2VydFVwZGF0ZU9uQWRkPShrLHY9dW5kZWZpbmVkKT0+e1xuYXNzZXJ0T2tUb0FkZChrLHYpO1xudXBkYXRlQ291bnQrPTE7XG5zb3J0ZWRLZXlzTWVtbz11bmRlZmluZWQ7XG4gfTtcblxuY29uc3QgYXNzZXJ0VXBkYXRlT25EZWxldGU9KGspPT5hc3NlcnRPa1RvRGVsZXRlJiZhc3NlcnRPa1RvRGVsZXRlKGspO1xuXG5jb25zdCBnZXRTb3J0ZWRLZXlzPSgpPT57XG5pZihzb3J0ZWRLZXlzTWVtbz09PXVuZGVmaW5lZCl7XG5zb3J0ZWRLZXlzTWVtbz1oYXJkZW4oWy4uLmdldFJhd0tleXMoKV0uc29ydChjb21wYXJlKSk7XG4gfVxucmV0dXJuIHNvcnRlZEtleXNNZW1vO1xuIH07XG5cbmNvbnN0IGl0ZXJhYmxlS2V5cz1GYXIoJ0l0ZXJhYmxlIG9mIGtleXMnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5jb25zdCBnZW5lcmF0aW9uPXVwZGF0ZUNvdW50O1xuZ2V0U29ydGVkS2V5cygpO1xuY29uc3QgbGVuPXNvcnRlZEtleXNNZW1vLmxlbmd0aDtcbmxldCBpPTA7XG5yZXR1cm4gRmFyKCdJdGVyYXRvciBvZiBrZXlzJyx7XG5uZXh0OigpPT57XG5nZW5lcmF0aW9uPT09dXBkYXRlQ291bnR8fEZhaWwgYFN0b3JlICR7cShrZXlOYW1lKX0gY3Vyc29yIHN0YWxlYDtcbi8vXG4vL1xuZm9yKDs7KXtcbmlmKGk8bGVuKXtcbmNvbnN0IHZhbHVlPXNvcnRlZEtleXNNZW1vW2ldO1xuaSs9MTtcbmlmKGNoZWNrSGFzKHZhbHVlKSl7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfVxuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuIH1cbiB9XG4gfX0pO1xuXG4gfX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuYXNzZXJ0VXBkYXRlT25BZGQsXG5hc3NlcnRVcGRhdGVPbkRlbGV0ZSxcbml0ZXJhYmxlS2V5c30pO1xuXG4gfTskaM2PX29uY2UubWFrZUN1cnJlbnRLZXlzS2l0KG1ha2VDdXJyZW50S2V5c0tpdCk7XG5oYXJkZW4obWFrZUN1cnJlbnRLZXlzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJvdmlkZUxhenk9KG1hcFN0b3JlLGtleSxtYWtlVmFsdWUpPT57XG5pZighbWFwU3RvcmUuaGFzKGtleSkpe1xubWFwU3RvcmUuaW5pdChrZXksbWFrZVZhbHVlKGtleSkpO1xuIH1cbnJldHVybiBtYXBTdG9yZS5nZXQoa2V5KTtcbiB9OyRozY9fb25jZS5wcm92aWRlTGF6eShwcm92aWRlTGF6eSk7XG5oYXJkZW4ocHJvdmlkZUxhenkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQXRvbWljUHJvdmlkZXI9KHN0b3JlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwZW5kaW5nPW5ldyBNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUFzeW5jPShrZXksbWFrZVZhbHVlLGZpbmlzaFZhbHVlKT0+e1xuaWYoc3RvcmUuaGFzKGtleSkpe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShzdG9yZS5nZXQoa2V5KSk7XG4gfVxuaWYoIXBlbmRpbmcuaGFzKGtleSkpe1xuY29uc3QgdmFsUD1tYWtlVmFsdWUoa2V5KS5cbnRoZW4oKHYpPT57XG5zdG9yZS5pbml0KGtleSx2KTtcbnJldHVybiB2O1xuIH0pLlxudGhlbigodik9PntcbmlmKGZpbmlzaFZhbHVlKXtcbnJldHVybiBmaW5pc2hWYWx1ZShrZXksdikudGhlbigoKT0+dik7XG4gfVxucmV0dXJuIHY7XG4gfSkuXG5maW5hbGx5KCgpPT57XG5wZW5kaW5nLmRlbGV0ZShrZXkpO1xuIH0pO1xucGVuZGluZy5zZXQoa2V5LHZhbFApO1xuIH1cbmNvbnN0IHZhbFA9cGVuZGluZy5nZXQoa2V5KTtcbmFzc2VydCh2YWxQKTtcbnJldHVybiB2YWxQO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe3Byb3ZpZGVBc3luY30pO1xuIH07JGjNj19vbmNlLm1ha2VBdG9taWNQcm92aWRlcihtYWtlQXRvbWljUHJvdmlkZXIpO1xuaGFyZGVuKG1ha2VBdG9taWNQcm92aWRlcik7XG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXBwZW5kVG9TdG9yZWRBcnJheT0obWFwU3RvcmUsa2V5LGl0ZW0pPT57XG5pZihtYXBTdG9yZS5oYXMoa2V5KSl7XG5jb25zdCBleHRhbnQ9bWFwU3RvcmUuZ2V0KGtleSk7XG5tYXBTdG9yZS5zZXQoa2V5LGhhcmRlbihbLi4uZXh0YW50LGl0ZW1dKSk7XG4gfWVsc2V7XG5tYXBTdG9yZS5pbml0KGtleSxoYXJkZW4oW2l0ZW1dKSk7XG4gfVxuIH07JGjNj19vbmNlLmFwcGVuZFRvU3RvcmVkQXJyYXkoYXBwZW5kVG9TdG9yZWRBcnJheSk7XG5oYXJkZW4oYXBwZW5kVG9TdG9yZWRBcnJheSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc0NvcHlTZXQiOlsiaXNDb3B5U2V0Il0sImlzQ29weU1hcCI6WyJpc0NvcHlNYXAiXSwibWFrZUN1cnJlbnRLZXlzS2l0IjpbIm1ha2VDdXJyZW50S2V5c0tpdCJdLCJwcm92aWRlTGF6eSI6WyJwcm92aWRlTGF6eSJdLCJtYWtlQXRvbWljUHJvdmlkZXIiOlsibWFrZUF0b21pY1Byb3ZpZGVyIl0sImFwcGVuZFRvU3RvcmVkQXJyYXkiOlsiYXBwZW5kVG9TdG9yZWRBcnJheSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAFREsmeQEAAHkBAAAhAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAG8blIzPFgAAzxYAACgAAABAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvZXhvLXV0aWxzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiLCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lRHVyYWJsZUV4b0NsYXNzIiwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiaWdub3JlQ29udGV4dCIsIm1ha2VFeG9VdGlscyIsInByZXBhcmVFeG8iLCJwcmVwYXJlRXhvQ2xhc3MiLCJwcmVwYXJlRXhvQ2xhc3NLaXQiLCJwcmVwYXJlS2luZCIsInByZXBhcmVLaW5kTXVsdGkiLCJwcmVwYXJlU2luZ2xldG9uIiwicHJvdmlkZUtpbmRIYW5kbGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpbml0RW1wdHkscHJvdmlkZSxnbG9iYWxWYXREYXRhOyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiaW5pdEVtcHR5XCIsIFskaM2PX2EgPT4gKGluaXRFbXB0eSA9ICRozY9fYSldXV1dLFtcIi4vdmF0LWRhdGEtYmluZGluZ3MuanNcIiwgW1tcInByb3ZpZGVcIiwgWyRozY9fYSA9PiAocHJvdmlkZSA9ICRozY9fYSldXSxbXCJWYXREYXRhXCIsIFskaM2PX2EgPT4gKGdsb2JhbFZhdERhdGEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cbi8qXG5cbiAqL1xuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlnbm9yZUNvbnRleHQ9XG4oZm4pPT5cbihfY29udGV4dCwuLi5hcmdzKT0+XG5mbiguLi5hcmdzKTskaM2PX29uY2UuaWdub3JlQ29udGV4dChpZ25vcmVDb250ZXh0KTtcbmhhcmRlbihpZ25vcmVDb250ZXh0KTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZUV4b1V0aWxzPShWYXREYXRhKT0+e1xuY29uc3R7XG5kZWZpbmVLaW5kLFxuZGVmaW5lS2luZE11bHRpLFxuZGVmaW5lRHVyYWJsZUtpbmQsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpLFxubWFrZUtpbmRIYW5kbGV9PVxuVmF0RGF0YTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVLaW5kSGFuZGxlPShiYWdnYWdlLGtpbmROYW1lKT0+XG5wcm92aWRlKGJhZ2dhZ2UsIGAke2tpbmROYW1lfV9raW5kSGFuZGxlYCwoKT0+bWFrZUtpbmRIYW5kbGUoa2luZE5hbWUpKTtcbmhhcmRlbihwcm92aWRlS2luZEhhbmRsZSk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVLaW5kPShcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmluaXQsXG5iZWhhdmlvcixcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVLaW5kKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVLaW5kKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZUtpbmRNdWx0aT0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVLaW5kTXVsdGkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZVZpcnR1YWxFeG9DbGFzcz0odGFnLGludGVyZmFjZUd1YXJkLGluaXQsbWV0aG9kcyxvcHRpb25zKT0+XG4vL1xuZGVmaW5lS2luZCh0YWcsaW5pdCxtZXRob2RzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmR9KTtcblxuaGFyZGVuKGRlZmluZVZpcnR1YWxFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0PShcbnRhZyxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpPT5cblxuLy9cbmRlZmluZUtpbmRNdWx0aSh0YWcsaW5pdCxmYWNldHMse1xuLi4ub3B0aW9ucyxcbnRoaXNmdWxNZXRob2RzOnRydWUsXG5pbnRlcmZhY2VHdWFyZEtpdH0pO1xuXG5oYXJkZW4oZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWZpbmVEdXJhYmxlRXhvQ2xhc3M9KFxua2luZEhhbmRsZSxcbmludGVyZmFjZUd1YXJkLFxuaW5pdCxcbm1ldGhvZHMsXG5vcHRpb25zKT0+XG5cbi8vXG5kZWZpbmVEdXJhYmxlS2luZChraW5kSGFuZGxlLGluaXQsbWV0aG9kcyx7XG4uLi5vcHRpb25zLFxudGhpc2Z1bE1ldGhvZHM6dHJ1ZSxcbmludGVyZmFjZUd1YXJkfSk7XG5cbmhhcmRlbihkZWZpbmVEdXJhYmxlRXhvQ2xhc3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdD0oXG5raW5kSGFuZGxlLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxuZmFjZXRzLFxub3B0aW9ucyk9PlxuXG4vL1xuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aShraW5kSGFuZGxlLGluaXQsZmFjZXRzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmRLaXR9KTtcblxuaGFyZGVuKGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlRXhvQ2xhc3M9KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVFeG9DbGFzcyhcbnByb3ZpZGVLaW5kSGFuZGxlKGJhZ2dhZ2Usa2luZE5hbWUpLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUV4b0NsYXNzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG9DbGFzc0tpdD0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5mYWNldHMsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQoXG5wcm92aWRlS2luZEhhbmRsZShiYWdnYWdlLGtpbmROYW1lKSxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG89KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5tZXRob2RzLFxub3B0aW9ucz11bmRlZmluZWQpPT5cbntcbmNvbnN0IG1ha2VTaW5nbGV0b249cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0RW1wdHksXG5tZXRob2RzLFxub3B0aW9ucyk7XG5cblxucmV0dXJuIHByb3ZpZGUoYmFnZ2FnZSwgYCR7a2luZE5hbWV9X3NpbmdsZXRvbmAsKCk9Pm1ha2VTaW5nbGV0b24oKSk7XG4gfTtcbmhhcmRlbihwcmVwYXJlRXhvKTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVTaW5nbGV0b249KGJhZ2dhZ2Usa2luZE5hbWUsbWV0aG9kcyxvcHRpb25zPXVuZGVmaW5lZCk9PlxucHJlcGFyZUV4byhiYWdnYWdlLGtpbmROYW1lLHVuZGVmaW5lZCxtZXRob2RzLG9wdGlvbnMpO1xuaGFyZGVuKHByZXBhcmVTaW5nbGV0b24pO1xuXG5yZXR1cm4gaGFyZGVuKHtcbmRlZmluZVZpcnR1YWxFeG9DbGFzcyxcbmRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCxcbmRlZmluZUR1cmFibGVFeG9DbGFzcyxcbmRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG9DbGFzcyxcbnByZXBhcmVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG8sXG5cbnByZXBhcmVTaW5nbGV0b24sXG5wcm92aWRlS2luZEhhbmRsZSxcbnByZXBhcmVLaW5kLFxucHJlcGFyZUtpbmRNdWx0aX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUV4b1V0aWxzKG1ha2VFeG9VdGlscyk7XG5cbmNvbnN0IGdsb2JhbEV4b1V0aWxzPW1ha2VFeG9VdGlscyhnbG9iYWxWYXREYXRhKTtcblxuY29uc3QgICAgICAge1xuZGVmaW5lVmlydHVhbEV4b0NsYXNzLFxuZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0LFxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzLFxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0LFxucHJlcGFyZUV4b0NsYXNzLFxucHJlcGFyZUV4b0NsYXNzS2l0LFxucHJlcGFyZUV4byxcbnByZXBhcmVTaW5nbGV0b259PVxuZ2xvYmFsRXhvVXRpbHM7XG5cbi8qXG5cbiAqLyRozY9fb25jZS5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3MoZGVmaW5lVmlydHVhbEV4b0NsYXNzKTskaM2PX29uY2UuZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KGRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCk7JGjNj19vbmNlLmRlZmluZUR1cmFibGVFeG9DbGFzcyhkZWZpbmVEdXJhYmxlRXhvQ2xhc3MpOyRozY9fb25jZS5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQoZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0KTskaM2PX29uY2UucHJlcGFyZUV4b0NsYXNzKHByZXBhcmVFeG9DbGFzcyk7JGjNj19vbmNlLnByZXBhcmVFeG9DbGFzc0tpdChwcmVwYXJlRXhvQ2xhc3NLaXQpOyRozY9fb25jZS5wcmVwYXJlRXhvKHByZXBhcmVFeG8pOyRozY9fb25jZS5wcmVwYXJlU2luZ2xldG9uKHByZXBhcmVTaW5nbGV0b24pO1xuY29uc3QgICAgICAge3Byb3ZpZGVLaW5kSGFuZGxlLHByZXBhcmVLaW5kLHByZXBhcmVLaW5kTXVsdGl9PVxuZ2xvYmFsRXhvVXRpbHM7JGjNj19vbmNlLnByb3ZpZGVLaW5kSGFuZGxlKHByb3ZpZGVLaW5kSGFuZGxlKTskaM2PX29uY2UucHJlcGFyZUtpbmQocHJlcGFyZUtpbmQpOyRozY9fb25jZS5wcmVwYXJlS2luZE11bHRpKHByZXBhcmVLaW5kTXVsdGkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaWdub3JlQ29udGV4dCI6WyJpZ25vcmVDb250ZXh0Il0sIm1ha2VFeG9VdGlscyI6WyJtYWtlRXhvVXRpbHMiXSwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIjpbImRlZmluZVZpcnR1YWxFeG9DbGFzcyJdLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0Il0sImRlZmluZUR1cmFibGVFeG9DbGFzcyI6WyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiXSwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IjpbImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCJdLCJwcmVwYXJlRXhvQ2xhc3MiOlsicHJlcGFyZUV4b0NsYXNzIl0sInByZXBhcmVFeG9DbGFzc0tpdCI6WyJwcmVwYXJlRXhvQ2xhc3NLaXQiXSwicHJlcGFyZUV4byI6WyJwcmVwYXJlRXhvIl0sInByZXBhcmVTaW5nbGV0b24iOlsicHJlcGFyZVNpbmdsZXRvbiJdLCJwcm92aWRlS2luZEhhbmRsZSI6WyJwcm92aWRlS2luZEhhbmRsZSJdLCJwcmVwYXJlS2luZCI6WyJwcmVwYXJlS2luZCJdLCJwcmVwYXJlS2luZE11bHRpIjpbInByZXBhcmVLaW5kTXVsdGkiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA5yjUjNcIAADXCAAAJAAAAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIiwiLi92YXQtZGF0YS1iaW5kaW5ncy5qcyIsIi4vZXhvLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwibWFrZVNjYWxhck1hcFN0b3JlIiwibWFrZVNjYWxhck1hcFN0b3JlIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW11dLFtcIi4vdmF0LWRhdGEtYmluZGluZ3MuanNcIiwgW11dLFtcIi4vZXhvLXV0aWxzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGFnb3JpYy9zdG9yZSI6W1siTSIsIk0iXSxbIm1ha2VTY2FsYXJNYXBTdG9yZSIsIm1ha2VTY2FsYXJNYXBTdG9yZSJdLFsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSIsIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJTZXRTdG9yZSIsIm1ha2VTY2FsYXJTZXRTdG9yZSJdLFsibWFrZVNjYWxhcldlYWtTZXRTdG9yZSIsIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiXV0sIi4vdmF0LWRhdGEtYmluZGluZ3MuanMiOltbIm1ha2VLaW5kSGFuZGxlIiwibWFrZUtpbmRIYW5kbGUiXSxbInByb3ZpZGVQcm9taXNlV2F0Y2hlciIsInByb3ZpZGVQcm9taXNlV2F0Y2hlciJdLFsid2F0Y2hQcm9taXNlIiwid2F0Y2hQcm9taXNlIl0sWyJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIl0sWyJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiXSxbIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIl0sWyJjYW5CZUR1cmFibGUiLCJjYW5CZUR1cmFibGUiXSxbInBpY2tGYWNldCIsInBpY2tGYWNldCJdLFsicGFydGlhbEFzc2lnbiIsInBhcnRpYWxBc3NpZ24iXSxbInByb3ZpZGUiLCJwcm92aWRlIl0sWyJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVNYXBTdG9yZSJdLFsicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiLCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSJdLFsicHJvdmlkZUR1cmFibGVTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiXSxbInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiXSxbImRlZmluZUtpbmQiLCJkZWZpbmVLaW5kIl0sWyJkZWZpbmVLaW5kTXVsdGkiLCJkZWZpbmVLaW5kTXVsdGkiXSxbImRlZmluZUR1cmFibGVLaW5kIiwiZGVmaW5lRHVyYWJsZUtpbmQiXSxbImRlZmluZUR1cmFibGVLaW5kTXVsdGkiLCJkZWZpbmVEdXJhYmxlS2luZE11bHRpIl1dLCIuL2V4by11dGlscy5qcyI6W1siZGVmaW5lVmlydHVhbEV4b0NsYXNzIiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIl0sWyJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiXSxbImRlZmluZUR1cmFibGVFeG9DbGFzcyIsImRlZmluZUR1cmFibGVFeG9DbGFzcyJdLFsiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IiwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0Il0sWyJwcmVwYXJlRXhvQ2xhc3MiLCJwcmVwYXJlRXhvQ2xhc3MiXSxbInByZXBhcmVFeG9DbGFzc0tpdCIsInByZXBhcmVFeG9DbGFzc0tpdCJdLFsicHJlcGFyZUV4byIsInByZXBhcmVFeG8iXSxbInByZXBhcmVTaW5nbGV0b24iLCJwcmVwYXJlU2luZ2xldG9uIl0sWyJpZ25vcmVDb250ZXh0IiwiaWdub3JlQ29udGV4dCJdLFsicHJvdmlkZUtpbmRIYW5kbGUiLCJwcm92aWRlS2luZEhhbmRsZSJdLFsicHJlcGFyZUtpbmQiLCJwcmVwYXJlS2luZCJdLFsicHJlcGFyZUtpbmRNdWx0aSIsInByZXBhcmVLaW5kTXVsdGkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAN4ZagPbFgAA2xYAADAAAABAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvdmF0LWRhdGEtYmluZGluZ3MuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbIlZhdERhdGEiLCJjYW5CZUR1cmFibGUiLCJkZWZpbmVEdXJhYmxlS2luZCIsImRlZmluZUR1cmFibGVLaW5kTXVsdGkiLCJkZWZpbmVLaW5kIiwiZGVmaW5lS2luZE11bHRpIiwibWFrZUtpbmRIYW5kbGUiLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSIsIm1ha2VTdG9yZVV0aWxzIiwicGFydGlhbEFzc2lnbiIsInBpY2tGYWNldCIsInByb3ZpZGUiLCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiLCJ3YXRjaFByb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHByb3ZpZGVMYXp5OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJwcm92aWRlTGF6eVwiLCBbJGjNj19hID0+IChwcm92aWRlTGF6eSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICovXG5sZXQgVmF0RGF0YUdsb2JhbDtcbmlmKCdWYXREYXRhJ2luIGdsb2JhbFRoaXMpe1xuZ2xvYmFsVGhpcy5WYXREYXRhfHxGYWlsIGBWYXREYXRhIGRlZmluZWQgaW4gZ2xvYmFsIGFzIG51bGwgb3IgdW5kZWZpbmVkYDtcbi8vXG5WYXREYXRhR2xvYmFsPS8qICAgICAgICAgICAgICAqL2dsb2JhbFRoaXMuVmF0RGF0YTtcbiB9ZWxzZXtcbi8vXG4vL1xuLy9cbmNvbnN0IHVuYXZhaWxhYmxlPSgpPT5GYWlsIGBWYXREYXRhIHVuYXZhaWxhYmxlYDtcblZhdERhdGFHbG9iYWw9e1xuZGVmaW5lS2luZDp1bmF2YWlsYWJsZSxcbmRlZmluZUtpbmRNdWx0aTp1bmF2YWlsYWJsZSxcbmRlZmluZUR1cmFibGVLaW5kOnVuYXZhaWxhYmxlLFxuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aTp1bmF2YWlsYWJsZSxcbm1ha2VLaW5kSGFuZGxlOnVuYXZhaWxhYmxlLFxucHJvdmlkZVByb21pc2VXYXRjaGVyOnVuYXZhaWxhYmxlLFxud2F0Y2hQcm9taXNlOnVuYXZhaWxhYmxlLFxubWFrZVNjYWxhckJpZ01hcFN0b3JlOnVuYXZhaWxhYmxlLFxubWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZTp1bmF2YWlsYWJsZSxcbm1ha2VTY2FsYXJCaWdTZXRTdG9yZTp1bmF2YWlsYWJsZSxcbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmU6dW5hdmFpbGFibGUsXG5jYW5CZUR1cmFibGU6dW5hdmFpbGFibGV9O1xuXG4gfVxuXG5jb25zdCBWYXREYXRhRXhwb3J0PVZhdERhdGFHbG9iYWw7JGjNj19vbmNlLlZhdERhdGFFeHBvcnQoVmF0RGF0YUV4cG9ydCk7XG5cblxuLypcblxuICovXG5jb25zdCAgICAgICB7XG5kZWZpbmVLaW5kLFxuZGVmaW5lS2luZE11bHRpLFxuZGVmaW5lRHVyYWJsZUtpbmQsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpfT1cblZhdERhdGFHbG9iYWw7JGjNj19vbmNlLmRlZmluZUtpbmQoZGVmaW5lS2luZCk7JGjNj19vbmNlLmRlZmluZUtpbmRNdWx0aShkZWZpbmVLaW5kTXVsdGkpOyRozY9fb25jZS5kZWZpbmVEdXJhYmxlS2luZChkZWZpbmVEdXJhYmxlS2luZCk7JGjNj19vbmNlLmRlZmluZUR1cmFibGVLaW5kTXVsdGkoZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSk7XG5cbmNvbnN0ICAgICAgIHtcbm1ha2VLaW5kSGFuZGxlLFxucHJvdmlkZVByb21pc2VXYXRjaGVyLFxud2F0Y2hQcm9taXNlLFxubWFrZVNjYWxhckJpZ01hcFN0b3JlLFxubWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSxcbm1ha2VTY2FsYXJCaWdTZXRTdG9yZSxcbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUsXG5jYW5CZUR1cmFibGV9PVxuVmF0RGF0YUdsb2JhbDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VLaW5kSGFuZGxlKG1ha2VLaW5kSGFuZGxlKTskaM2PX29uY2UucHJvdmlkZVByb21pc2VXYXRjaGVyKHByb3ZpZGVQcm9taXNlV2F0Y2hlcik7JGjNj19vbmNlLndhdGNoUHJvbWlzZSh3YXRjaFByb21pc2UpOyRozY9fb25jZS5tYWtlU2NhbGFyQmlnTWFwU3RvcmUobWFrZVNjYWxhckJpZ01hcFN0b3JlKTskaM2PX29uY2UubWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZShtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKTskaM2PX29uY2UubWFrZVNjYWxhckJpZ1NldFN0b3JlKG1ha2VTY2FsYXJCaWdTZXRTdG9yZSk7JGjNj19vbmNlLm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUobWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSk7JGjNj19vbmNlLmNhbkJlRHVyYWJsZShjYW5CZUR1cmFibGUpO1xuY29uc3QgICAgICAgIHBpY2tGYWNldD1cbihtYWtlcixmYWNldE5hbWUpPT5cbiguLi5hcmdzKT0+XG5tYWtlciguLi5hcmdzKVtmYWNldE5hbWVdOyRozY9fb25jZS5waWNrRmFjZXQocGlja0ZhY2V0KTtcbmhhcmRlbihwaWNrRmFjZXQpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFydGlhbEFzc2lnbj0odGFyZ2V0LHNvdXJjZSk9Pntcbk9iamVjdC5hc3NpZ24odGFyZ2V0LHNvdXJjZSk7XG4gfTskaM2PX29uY2UucGFydGlhbEFzc2lnbihwYXJ0aWFsQXNzaWduKTtcbmhhcmRlbihwYXJ0aWFsQXNzaWduKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBwcm92aWRlPVxuLy9cbi8qXG5cblxuXG5cblxuICAgKi9wcm92aWRlTGF6eTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UucHJvdmlkZShwcm92aWRlKTtcbmNvbnN0ICAgICAgICBtYWtlU3RvcmVVdGlscz0oVmF0RGF0YSk9PntcbmNvbnN0e1xuLy9cbm1ha2VTY2FsYXJCaWdNYXBTdG9yZSxcbi8vXG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdTZXRTdG9yZSxcbi8vXG5tYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlfT1cblZhdERhdGE7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVNYXBTdG9yZT0oYmFnZ2FnZSxuYW1lLG9wdGlvbnM9e30pPT5cbnByb3ZpZGUoYmFnZ2FnZSxuYW1lLCgpPT5cbm1ha2VTY2FsYXJCaWdNYXBTdG9yZShuYW1lLHtkdXJhYmxlOnRydWUsLi4ub3B0aW9uc30pKTtcblxuaGFyZGVuKHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUpO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlPShiYWdnYWdlLG5hbWUsb3B0aW9ucz17fSk9PlxucHJvdmlkZShiYWdnYWdlLG5hbWUsKCk9PlxubWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZShuYW1lLHtkdXJhYmxlOnRydWUsLi4ub3B0aW9uc30pKTtcblxuaGFyZGVuKHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZVNldFN0b3JlPShiYWdnYWdlLG5hbWUsb3B0aW9ucz17fSk9PlxucHJvdmlkZShiYWdnYWdlLG5hbWUsKCk9PlxubWFrZVNjYWxhckJpZ1NldFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVTZXRTdG9yZSk7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbnByb3ZpZGVEdXJhYmxlTWFwU3RvcmUsXG5wcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlU2V0U3RvcmUsXG5wcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZX0pO1xuXG4gfTskaM2PX29uY2UubWFrZVN0b3JlVXRpbHMobWFrZVN0b3JlVXRpbHMpO1xuXG5jb25zdCBnbG9iYWxTdG9yZVV0aWxzPW1ha2VTdG9yZVV0aWxzKFZhdERhdGFHbG9iYWwpO1xuY29uc3QgICAgICAge1xucHJvdmlkZUR1cmFibGVNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVTZXRTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlfT1cbmdsb2JhbFN0b3JlVXRpbHM7JGjNj19vbmNlLnByb3ZpZGVEdXJhYmxlTWFwU3RvcmUocHJvdmlkZUR1cmFibGVNYXBTdG9yZSk7JGjNj19vbmNlLnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKTskaM2PX29uY2UucHJvdmlkZUR1cmFibGVTZXRTdG9yZShwcm92aWRlRHVyYWJsZVNldFN0b3JlKTskaM2PX29uY2UucHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUocHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVmF0RGF0YSI6WyJWYXREYXRhRXhwb3J0Il0sImRlZmluZUtpbmQiOlsiZGVmaW5lS2luZCJdLCJkZWZpbmVLaW5kTXVsdGkiOlsiZGVmaW5lS2luZE11bHRpIl0sImRlZmluZUR1cmFibGVLaW5kIjpbImRlZmluZUR1cmFibGVLaW5kIl0sImRlZmluZUR1cmFibGVLaW5kTXVsdGkiOlsiZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSJdLCJtYWtlS2luZEhhbmRsZSI6WyJtYWtlS2luZEhhbmRsZSJdLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiOlsicHJvdmlkZVByb21pc2VXYXRjaGVyIl0sIndhdGNoUHJvbWlzZSI6WyJ3YXRjaFByb21pc2UiXSwibWFrZVNjYWxhckJpZ01hcFN0b3JlIjpbIm1ha2VTY2FsYXJCaWdNYXBTdG9yZSJdLCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIjpbIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUiXSwibWFrZVNjYWxhckJpZ1NldFN0b3JlIjpbIm1ha2VTY2FsYXJCaWdTZXRTdG9yZSJdLCJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIjpbIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiXSwiY2FuQmVEdXJhYmxlIjpbImNhbkJlRHVyYWJsZSJdLCJwaWNrRmFjZXQiOlsicGlja0ZhY2V0Il0sInBhcnRpYWxBc3NpZ24iOlsicGFydGlhbEFzc2lnbiJdLCJwcm92aWRlIjpbInByb3ZpZGUiXSwibWFrZVN0b3JlVXRpbHMiOlsibWFrZVN0b3JlVXRpbHMiXSwicHJvdmlkZUR1cmFibGVNYXBTdG9yZSI6WyJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIl0sInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlIl0sInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiOlsicHJvdmlkZUR1cmFibGVTZXRTdG9yZSJdLCJwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSI6WyJwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABzeL2uZREAAGURAAAfAAAAQGFnb3JpYy92YXRzLXYwLjE1LjEvc3JjL2NyYy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiQ1JDIiwiY3JjMSIsImNyYzEwIiwiY3JjMTYiLCJjcmMyNCIsImNyYzMyIiwiY3JjMzJjIiwiY3JjNiIsImNyYzgiLCJtb2RlbHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cbiAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBlbmNvZGVyPW5ldyBUZXh0RW5jb2RlcigpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICovXG5mdW5jdGlvbiBjb252ZXJ0KGRhdGEpe1xuaWYodHlwZW9mIGRhdGE9PT0nbnVtYmVyJyl7XG5jb25zdCBieXRlcz1bXTtcbi8vXG4vL1xud2hpbGUoZGF0YT4wfHxieXRlcy5sZW5ndGg8NCl7XG5ieXRlcy51bnNoaWZ0KGRhdGElMjU2KTtcbmRhdGE9TWF0aC5mbG9vcihkYXRhLzI1Nik7XG4gfVxucmV0dXJuIG5ldyBVaW50OEFycmF5KGJ5dGVzKTtcbiB9ZWxzZSBpZih0eXBlb2YgZGF0YT09PSdzdHJpbmcnKXtcbnJldHVybiBlbmNvZGVyLmVuY29kZShkYXRhKTtcbiB9ZWxzZSBpZihBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkpe1xucmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyLGRhdGEuYnl0ZU9mZnNldCxkYXRhLmJ5dGVMZW5ndGgpO1xuIH1lbHNlIGlmKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7XG5yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gfVxudGhyb3cgVHlwZUVycm9yKFxuIGBjcmMgcmVxdWlyZXMgMzIgYml0IG51bWJlciwgYSBzdHJpbmcgb3IgVHlwZWRBcnJheSBmb3IgaW5wdXRgKTtcblxuIH1cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIG1pcnJvcihkYXRhLHdpZHRoKXtcbmxldCByZXM9MDtcbmZvcihsZXQgaT0wO2k8d2lkdGg7aSs9MSl7XG5yZXM9cmVzPDwxfGRhdGEmMTtcbmRhdGE+Pj0xO1xuIH1cbnJldHVybiByZXM7XG4gfVxuXG5jbGFzcyAgICAgICAgQ1JDe1xuLypcblxuXG5cblxuXG4gICAqL1xuICAgICAgICAgICBjb25zdHJ1Y3Rvcih3aWR0aCxwb2x5LHhvckluLHhvck91dCxyZWZsZWN0KXtcbnRoaXMud2lkdGg9d2lkdGg7XG50aGlzLnBvbHk9cG9seTtcbnRoaXMueG9ySW49eG9ySW47XG50aGlzLnJlZmxlY3RlZFhvckluPW1pcnJvcih4b3JJbix3aWR0aCk7XG50aGlzLnhvck91dD14b3JPdXQ7XG50aGlzLnJlZmxlY3Q9cmVmbGVjdDtcbnRoaXMubXNiTWFzaz0xPDx0aGlzLndpZHRoLTE7XG50aGlzLm1hc2s9dGhpcy5tc2JNYXNrLTE8PDF8MTtcbnRoaXMuY3JjU2hpZnQ9dGhpcy53aWR0aDw4PzgtdGhpcy53aWR0aDowO1xudGhpcy5zaGlmdGVkWG9ySW49dGhpcy54b3JJbjw8dGhpcy5jcmNTaGlmdDtcblxuY29uc3QgdGFibGU9dGhpcy5nZW5UYWJsZSgpO1xudGhpcy50YWJsZT10YWJsZTtcblxuaWYodGhpcy53aWR0aD09PTgmJiF0aGlzLnhvckluJiYhdGhpcy54b3JPdXQmJiF0aGlzLnJlZmxlY3Qpe1xuLyogICAgICAgICAgICAgICAgICAgICAqL1xudGhpcy5jYWxjdWxhdGU9ZnVuY3Rpb24gY2FsY3VsYXRlKGRhdGEpe1xuY29uc3QgYnVmZmVyPWNvbnZlcnQoZGF0YSk7XG5sZXQgY3JjPTA7XG5mb3IobGV0IGk9MDtpPGJ1ZmZlci5sZW5ndGg7aSs9MSl7XG5jcmM9dGFibGVbY3JjXmJ1ZmZlcltpXV07XG4gfVxucmV0dXJuIGNyYztcbiB9O1xuIH1cbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgIGNhbGN1bGF0ZShkYXRhKXtcbmNvbnN0IGJ1ZmZlcj1jb252ZXJ0KGRhdGEpO1xubGV0IGNyYztcbmNvbnN0e3RhYmxlLHdpZHRoLGNyY1NoaWZ0LG1hc2t9PXRoaXM7XG5pZih0aGlzLnJlZmxlY3Qpe1xuY3JjPXRoaXMucmVmbGVjdGVkWG9ySW47XG5mb3IobGV0IGk9MDtpPGJ1ZmZlci5sZW5ndGg7aSs9MSl7XG5jb25zdCBieXRlPWJ1ZmZlcltpXTtcbmNyYz0odGFibGVbKGNyY15ieXRlKSYweGZmXV5jcmM+Pj44KSZtYXNrO1xuIH1cbiB9ZWxzZXtcbmNyYz10aGlzLnNoaWZ0ZWRYb3JJbjtcbmZvcihsZXQgaT0wO2k8YnVmZmVyLmxlbmd0aDtpKz0xKXtcbmNyYz1cbnRhYmxlWyhjcmM+PndpZHRoLTgrY3JjU2hpZnReYnVmZmVyW2ldKSYweGZmXTw8XG5jcmNTaGlmdF5cbmNyYzw8OC1jcmNTaGlmdCZtYXNrPDxjcmNTaGlmdDtcbiB9XG5jcmM+Pj1jcmNTaGlmdDtcbiB9XG5jcmNePXRoaXMueG9yT3V0O1xucmV0dXJuIGNyYz4+PjA7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlTm9UYWJsZShkYXRhKXtcbmNvbnN0IGJ1ZmZlcj1jb252ZXJ0KGRhdGEpO1xubGV0IGNyYz10aGlzLnhvckluO1xuZm9yKGxldCBpPTA7aTxidWZmZXIubGVuZ3RoO2krPTEpe1xubGV0IG9jdGV0PWJ1ZmZlcltpXTtcbmlmKHRoaXMucmVmbGVjdClvY3RldD1taXJyb3Iob2N0ZXQsOCk7XG5mb3IobGV0IGo9MDtqPDg7ais9MSl7XG5sZXQgdG9wYml0PWNyYyZ0aGlzLm1zYk1hc2s7XG5pZihvY3RldCYweDgwPj5qKXRvcGJpdF49dGhpcy5tc2JNYXNrO1xuY3JjPDw9MTtcbmlmKHRvcGJpdCljcmNePXRoaXMucG9seTtcbiB9XG5jcmMmPXRoaXMubWFzaztcbiB9XG5pZih0aGlzLnJlZmxlY3QpY3JjPW1pcnJvcihjcmMsdGhpcy53aWR0aCk7XG5jcmNePXRoaXMueG9yT3V0O1xucmV0dXJuIGNyYz4+PjA7XG4gfVxuXG4gICAgICAgIGdlblRhYmxlKCl7XG5jb25zdCB0YWJsZUxlbmd0aD0yNTY7XG5jb25zdCB0YWJsZT1bXTtcbmZvcihsZXQgaT0wO2k8dGFibGVMZW5ndGg7aSs9MSl7XG5sZXQgcmVnPWk7XG5pZih0aGlzLnJlZmxlY3QpcmVnPW1pcnJvcihyZWcsOCk7XG5yZWc8PD10aGlzLndpZHRoLTgrdGhpcy5jcmNTaGlmdDtcbmZvcihsZXQgaj0wO2o8ODtqKz0xKXtcbmlmKChyZWcmdGhpcy5tc2JNYXNrPDx0aGlzLmNyY1NoaWZ0KSE9PTApe1xucmVnPDw9MTtcbnJlZ149dGhpcy5wb2x5PDx0aGlzLmNyY1NoaWZ0O1xuIH1lbHNle1xucmVnPDw9MTtcbiB9XG4gfVxuaWYodGhpcy5yZWZsZWN0KVxucmVnPW1pcnJvcihyZWc+PnRoaXMuY3JjU2hpZnQsdGhpcy53aWR0aCk8PHRoaXMuY3JjU2hpZnQ7XG5yZWc9cmVnPj50aGlzLmNyY1NoaWZ0JnRoaXMubWFzaztcbnRhYmxlW2ldPXJlZz4+PjA7XG4gfVxucmV0dXJuIG5ldyBJbnQzMkFycmF5KHRhYmxlKTtcbiB9fSRozY9fb25jZS4gQ1JDKENSQyk7XG5cblxuY29uc3QgICAgICAgIGNyYzE9bmV3IENSQygxLDB4MDEsMHgwMCwweDAwLGZhbHNlKTskaM2PX29uY2UuY3JjMShjcmMxKTtcbmNvbnN0ICAgICAgICBjcmM2PW5ldyBDUkMoNiwweDJmLDB4MDAsMHgwMCxmYWxzZSk7JGjNj19vbmNlLmNyYzYoY3JjNik7XG5jb25zdCAgICAgICAgY3JjOD1uZXcgQ1JDKDgsMHgwNywweDAwLDB4MDAsZmFsc2UpOyRozY9fb25jZS5jcmM4KGNyYzgpO1xuY29uc3QgICAgICAgIGNyYzEwPW5ldyBDUkMoMTAsMHgyMzMsMHgwMDAwLDB4MDAwMCxmYWxzZSk7JGjNj19vbmNlLmNyYzEwKGNyYzEwKTtcbmNvbnN0ICAgICAgICBjcmMxNj1uZXcgQ1JDKDE2LDB4ODAwNSwweDAwMDAsMHgwMDAwLHRydWUpOyRozY9fb25jZS5jcmMxNihjcmMxNik7XG5jb25zdCAgICAgICAgY3JjMjQ9bmV3IENSQygyNCwweDg2NGNmYiwweGI3MDRjZSwweDAwMDAwMCxmYWxzZSk7JGjNj19vbmNlLmNyYzI0KGNyYzI0KTtcbmNvbnN0ICAgICAgICBjcmMzMj1uZXcgQ1JDKDMyLDB4MDRjMTFkYjcsMHhmZmZmZmZmZiwweGZmZmZmZmZmLHRydWUpOyRozY9fb25jZS5jcmMzMihjcmMzMik7XG5jb25zdCAgICAgICAgY3JjMzJjPW5ldyBDUkMoMzIsMHgxZWRjNmY0MSwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsdHJ1ZSk7JGjNj19vbmNlLmNyYzMyYyhjcmMzMmMpO1xuXG5jb25zdCAgICAgICAgbW9kZWxzPXtjcmMxLGNyYzYsY3JjOCxjcmMxMCxjcmMxNixjcmMyNCxjcmMzMixjcmMzMmN9OyRozY9fb25jZS5tb2RlbHMobW9kZWxzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNSQyI6WyJDUkMiXSwiY3JjMSI6WyJjcmMxIl0sImNyYzYiOlsiY3JjNiJdLCJjcmM4IjpbImNyYzgiXSwiY3JjMTAiOlsiY3JjMTAiXSwiY3JjMTYiOlsiY3JjMTYiXSwiY3JjMjQiOlsiY3JjMjQiXSwiY3JjMzIiOlsiY3JjMzIiXSwiY3JjMzJjIjpbImNyYzMyYyJdLCJtb2RlbHMiOlsibW9kZWxzIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJILW25jIQAAYyEAACUAAABAYWdvcmljL3ZhdHMtdjAuMTUuMS9zcmMvbGliLWJvYXJkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvbm90aWZpZXIiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy96b2Uvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCIuL2NyYy5qcyJdLCJleHBvcnRzIjpbIkRFRkFVTFRfQ1JDX0RJR0lUUyIsIkRFRkFVTFRfUFJFRklYIiwicHJlcGFyZUJvYXJkS2l0IiwicHJlcGFyZVJlY29yZGVyRmFjdG9yeSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxGYWlsLHEscHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0LE0sbWFrZVNjYWxhckJpZ01hcFN0b3JlLHByZXBhcmVFeG9DbGFzc0tpdCxkZWZpbmVSZWNvcmRlcktpdCxwcmVwYXJlUmVjb3JkZXIsRSxGYXIsaXNSZW1vdGFibGUsbWFrZU1hcnNoYWwsY3JjNjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaM2PX2EgPT4gKGFzc2VydCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0XCIsIFskaM2PX2EgPT4gKHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ01hcFN0b3JlID0gJGjNj19hKV1dLFtcInByZXBhcmVFeG9DbGFzc0tpdFwiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvQ2xhc3NLaXQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3pvZS9zcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzXCIsIFtbXCJkZWZpbmVSZWNvcmRlcktpdFwiLCBbJGjNj19hID0+IChkZWZpbmVSZWNvcmRlcktpdCA9ICRozY9fYSldXSxbXCJwcmVwYXJlUmVjb3JkZXJcIiwgWyRozY9fYSA9PiAocHJlcGFyZVJlY29yZGVyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzUmVtb3RhYmxlXCIsIFskaM2PX2EgPT4gKGlzUmVtb3RhYmxlID0gJGjNj19hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dXV0sW1wiLi9jcmMuanNcIiwgW1tcImNyYzZcIiwgWyRozY9fYSA9PiAoY3JjNiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBERUZBVUxUX0NSQ19ESUdJVFM9MjskaM2PX29uY2UuREVGQVVMVF9DUkNfRElHSVRTKERFRkFVTFRfQ1JDX0RJR0lUUyk7XG5jb25zdCAgICAgICAgREVGQVVMVF9QUkVGSVg9J2JvYXJkMCc7XG5cbi8vXG4vL1xuJGjNj19vbmNlLkRFRkFVTFRfUFJFRklYKERFRkFVTFRfUFJFRklYKTtjb25zdCBDYXBEYXRhU2hhcGU9e2JvZHk6TS5zdHJpbmcoKSxzbG90czpNLmFycmF5KCl9O1xuY29uc3QgTWFyc2hhbEk9TS5pbnRlcmZhY2UoJ01hcnNoYWxsZXInLHtcbnRvQ2FwRGF0YTpNLmNhbGwoTS5hbnkoKSkucmV0dXJucyhDYXBEYXRhU2hhcGUpLFxuc2VyaWFsaXplOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKENhcERhdGFTaGFwZSksXG5mcm9tQ2FwRGF0YTpNLmNhbGwoQ2FwRGF0YVNoYXBlKS5yZXR1cm5zKE0uYW55KCkpLFxudW5zZXJpYWxpemU6TS5jYWxsKENhcERhdGFTaGFwZSkucmV0dXJucyhNLmFueSgpKX0pO1xuXG5cbmNvbnN0IElkU2hhcGU9TS5zdHJpbmcoKTtcbmNvbnN0IFZhbFNoYXBlPU0uc2NhbGFyKCk7XG5jb25zdCBCb2FyZEtpdElLaXQ9e1xuYm9hcmQ6TS5pbnRlcmZhY2UoJ0JvYXJkJyx7XG5oYXM6TS5jYWxsKFZhbFNoYXBlKS5yZXR1cm5zKE0uYm9vbGVhbigpKSxcbmdldFZhbHVlOk0uY2FsbChJZFNoYXBlKS5yZXR1cm5zKFZhbFNoYXBlKSxcbmxvb2t1cDpNLmNhbGwoKS5yZXN0KE0uYXJyYXlPZihJZFNoYXBlKSkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRJZDpNLmNhbGwoVmFsU2hhcGUpLnJldHVybnMoSWRTaGFwZSksXG5pZHM6TS5jYWxsKCkucmV0dXJucyhNLmFycmF5T2YoSWRTaGFwZSkpLFxuZ2V0UHVibGlzaGluZ01hcnNoYWxsZXI6TS5jYWxsKCkucmV0dXJucyhNLnJlbW90YWJsZSgpKSxcbmdldFJlYWRvbmx5TWFyc2hhbGxlcjpNLmNhbGwoKS5yZXR1cm5zKE0ucmVtb3RhYmxlKCkpfSksXG5cbnB1Ymxpc2hpbmdNYXJzaGFsbGVyOk1hcnNoYWxJLFxucmVhZG9ubHlNYXJzaGFsbGVyOk1hcnNoYWxJfTtcblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGNhbGNDcmM9KGRhdGEsY3JjRGlnaXRzKT0+e1xuLy9cbi8vXG5jb25zdCBjcmM9Y3JjNi5jYWxjdWxhdGUoZGF0YSkrMTtcbmNvbnN0IGNyY1N0cj1jcmMudG9TdHJpbmcoKS5wYWRTdGFydChjcmNEaWdpdHMsJzAnKTtcbmFzc2VydChjcmNTdHIubGVuZ3RoPD1jcmNEaWdpdHMsIGBDUkMgdG9vIGJpZyBmb3IgaXRzIGJyaXRjaGVzICR7Y3JjU3RyfWApO1xucmV0dXJuIGNyY1N0cjtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuXG4vL1xuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBpbml0RHVyYWJsZUJvYXJkU3RhdGU9KFxuaW5pdFNlcXVlbmNlPTAsXG57cHJlZml4PURFRkFVTFRfUFJFRklYLGNyY0RpZ2l0cz1ERUZBVUxUX0NSQ19ESUdJVFN9PXt9KT0+XG57XG5jb25zdCBpbW11dGFibGU9e3ByZWZpeCxjcmNEaWdpdHN9O1xuXG5jb25zdCBsYXN0U2VxdWVuY2U9QmlnSW50KGluaXRTZXF1ZW5jZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpZFRvVmFsPW1ha2VTY2FsYXJCaWdNYXBTdG9yZSgnaWRUb1ZhbCcse1xuZHVyYWJsZTp0cnVlLFxua2V5U2hhcGU6SWRTaGFwZSxcbnZhbHVlU2hhcGU6VmFsU2hhcGV9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdmFsVG9JZD1tYWtlU2NhbGFyQmlnTWFwU3RvcmUoJ3ZhbFRvSWQnLHtcbmR1cmFibGU6dHJ1ZSxcbmtleVNoYXBlOlZhbFNoYXBlLFxudmFsdWVTaGFwZTpJZFNoYXBlfSk7XG5cblxuY29uc3QgbXV0YWJsZT17bGFzdFNlcXVlbmNlLGlkVG9WYWwsdmFsVG9JZH07XG5cbnJldHVybntcbi4uLmltbXV0YWJsZSxcbi4uLm11dGFibGV9O1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuICovXG5jb25zdCBnZXRJZD0odmFsdWUsc3RhdGUpPT57XG5jb25zdHtpZFRvVmFsLHZhbFRvSWQscHJlZml4LGNyY0RpZ2l0c309c3RhdGU7XG5pZighaXNSZW1vdGFibGUodmFsdWUpKXtcbkZhaWwgYEJvYXJkIGNhbm5vdCBjcmVhdGUgaWQgZm9yIG5vbi1yZW1vdGFibGVgO1xuIH1cblxuaWYodmFsVG9JZC5oYXModmFsdWUpKXtcbnJldHVybiB2YWxUb0lkLmdldCh2YWx1ZSk7XG4gfVxuXG5zdGF0ZS5sYXN0U2VxdWVuY2UrPTFuO1xuY29uc3Qgc2VxPXN0YXRlLmxhc3RTZXF1ZW5jZTtcblxuY29uc3QgY3JjSW5wdXQ9IGAke3ByZWZpeH0ke3NlcX1gO1xuY29uc3QgY3JjPWNhbGNDcmMoY3JjSW5wdXQsY3JjRGlnaXRzKTtcblxuY29uc3QgaWQ9IGAke3ByZWZpeH0ke2NyY30ke3NlcX1gO1xuXG52YWxUb0lkLmluaXQodmFsdWUsaWQpO1xuaWRUb1ZhbC5pbml0KGlkLHZhbHVlKTtcbnJldHVybiBpZDtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZ2V0VmFsdWU9KGlkLHtwcmVmaXgsY3JjRGlnaXRzLGlkVG9WYWx9KT0+e1xuaWQuc3RhcnRzV2l0aChwcmVmaXgpfHxGYWlsIGBpZCBtdXN0IHN0YXJ0IHdpdGggJHtxKHByZWZpeCl9OiAke2lkfWA7XG5jb25zdCBkaWdpdHM9aWQuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4vL1xuY29uc3QgRElHSVRTX1JFR0VYUD1uZXcgUmVnRXhwKCBgXlswLTldeyR7Y3JjRGlnaXRzKzF9LH0kYCk7XG5ESUdJVFNfUkVHRVhQLnRlc3QoZGlnaXRzKXx8XG5GYWlsIGBpZCBtdXN0IGVuZCBpbiBhdCBsZWFzdCAke3EoY3JjRGlnaXRzKzEpfSBkaWdpdHM6ICR7aWR9YDtcblxuaWYoaWRUb1ZhbC5oYXMoaWQpKXtcbnJldHVybiBpZFRvVmFsLmdldChpZCk7XG4gfVxuXG5jb25zdCBhbGxlZ2VkQ3JjPWRpZ2l0cy5zbGljZSgwLGNyY0RpZ2l0cyk7XG5cbmNvbnN0IHNlcT1kaWdpdHMuc2xpY2UoY3JjRGlnaXRzKTtcbmNvbnN0IGNyY0lucHV0PSBgJHtwcmVmaXh9JHtzZXF9YDtcbmNvbnN0IGNyYz1jYWxjQ3JjKGNyY0lucHV0LGNyY0RpZ2l0cyk7XG5cbmFsbGVnZWRDcmM9PT1jcmN8fEZhaWwgYGlkIGlzIHByb2JhYmx5IGEgdHlwbywgY2Fubm90IHZlcmlmeSBDUkM6ICR7aWR9YDtcbi8vXG50aHJvdyBGYWlsIGBib2FyZCBkb2VzIG5vdCBoYXZlIGlkOiAke2lkfWA7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1ha2VTbG90VG9WYWw9KHN0YXRlKT0+e1xuY29uc3QgaWZhY2VBbGxlZ2VkUHJlZml4PSdBbGxlZ2VkOiAnO1xuY29uc3QgaWZhY2VJbmFjY2Vzc2libGVQcmVmaXg9J1NFVkVSRUQ6ICc7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3Qgc2xvdFRvVmFsPShzbG90LGlmYWNlKT0+e1xuaWYoc2xvdCE9PW51bGwpe1xucmV0dXJuIGdldFZhbHVlKHNsb3Qsc3RhdGUpO1xuIH1cblxuLy9cbmlmKHR5cGVvZiBpZmFjZT09PSdzdHJpbmcnJiZpZmFjZS5zdGFydHNXaXRoKGlmYWNlQWxsZWdlZFByZWZpeCkpe1xuaWZhY2U9aWZhY2Uuc2xpY2UoaWZhY2VBbGxlZ2VkUHJlZml4Lmxlbmd0aCk7XG4gfVxucmV0dXJuIEZhciggYCR7aWZhY2VJbmFjY2Vzc2libGVQcmVmaXh9JHtpZmFjZX1gLHt9KTtcbiB9O1xucmV0dXJuIHNsb3RUb1ZhbDtcbiB9O1xuXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0IG1ha2VSZWFkb25seU1hcnNoYWxsZXI9KHN0YXRlKT0+e1xuY29uc3R7dmFsVG9JZH09c3RhdGU7XG5jb25zdCBzbG90VG9WYWw9bWFrZVNsb3RUb1ZhbChzdGF0ZSk7XG5jb25zdCB2YWxUb1Nsb3Q9KHZhbCk9PntcbmlmKCF2YWxUb0lkLmhhcyh2YWwpKXtcbi8vXG5yZXR1cm4gbnVsbDtcbiB9XG5cbi8vXG5yZXR1cm4gdmFsVG9JZC5nZXQodmFsKTtcbiB9O1xucmV0dXJuIG1ha2VNYXJzaGFsKHZhbFRvU2xvdCxzbG90VG9WYWwse1xuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pO1xuXG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1ha2VQdWJsaXNoaW5nTWFyc2hhbGxlcj0oc3RhdGUpPT57XG5jb25zdCBzbG90VG9WYWw9bWFrZVNsb3RUb1ZhbChzdGF0ZSk7XG4vL1xuY29uc3QgdmFsVG9TbG90PSh2YWwpPT5nZXRJZCh2YWwsc3RhdGUpO1xucmV0dXJuIG1ha2VNYXJzaGFsKHZhbFRvU2xvdCxzbG90VG9WYWwse1xuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pO1xuXG4gfTtcbi8vXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlQm9hcmRLaXQ9KGJhZ2dhZ2UpPT57XG5yZXR1cm4gcHJlcGFyZUV4b0NsYXNzS2l0KFxuYmFnZ2FnZSxcbidCb2FyZCcsXG5Cb2FyZEtpdElLaXQsXG5pbml0RHVyYWJsZUJvYXJkU3RhdGUsXG57XG5ib2FyZDp7XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5nZXRJZCh2YWx1ZSl7XG5yZXR1cm4gZ2V0SWQodmFsdWUsdGhpcy5zdGF0ZSk7XG4gfSxcbi8qXG5cblxuICAgICAgICAgKi9cbmdldFZhbHVlKGlkKXtcbnJldHVybiBnZXRWYWx1ZShpZCx0aGlzLnN0YXRlKTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuICAgICAgYXN5bmMgbG9va3VwKC4uLnBhdGgpe1xuY29uc3R7XG5mYWNldHM6e2JvYXJkfX09XG50aGlzO1xuaWYocGF0aC5sZW5ndGg9PT0wKXtcbnJldHVybiBib2FyZDtcbiB9XG5jb25zdFtmaXJzdCwuLi5yZXN0XT1wYXRoO1xuLyogICAgICAgICAgICAgICovXG5jb25zdCBmaXJzdFZhbHVlPWJvYXJkLmdldFZhbHVlKC8qICAgICAgICAgICAgICAgICAgKi9maXJzdCk7XG5pZihyZXN0Lmxlbmd0aD09PTApe1xucmV0dXJuIGZpcnN0VmFsdWU7XG4gfVxucmV0dXJuIEUoZmlyc3RWYWx1ZSkubG9va3VwKC4uLnJlc3QpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuaGFzKHZhbCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS52YWxUb0lkLmhhcyh2YWwpO1xuIH0sXG5pZHMoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIGhhcmRlbihbLi4uc3RhdGUuaWRUb1ZhbC5rZXlzKCldKTtcbiB9LFxuLypcblxuXG4gICAgICAgICAqL1xuZ2V0UHVibGlzaGluZ01hcnNoYWxsZXIoKXtcbnJldHVybiB0aGlzLmZhY2V0cy5wdWJsaXNoaW5nTWFyc2hhbGxlcjtcbiB9LFxuLypcblxuXG5cblxuXG5cbiAgICAgICAgICovXG5nZXRSZWFkb25seU1hcnNoYWxsZXIoKXtcbnJldHVybiB0aGlzLmZhY2V0cy5yZWFkb25seU1hcnNoYWxsZXI7XG4gfX0sXG5cbnJlYWRvbmx5TWFyc2hhbGxlcjp7XG50b0NhcERhdGEodmFsKXtcbmNvbnN0IHJlYWRvbmx5PW1ha2VSZWFkb25seU1hcnNoYWxsZXIodGhpcy5zdGF0ZSk7XG5yZXR1cm4gcmVhZG9ubHkudG9DYXBEYXRhKHZhbCk7XG4gfSxcbmZyb21DYXBEYXRhKGRhdGEpe1xuY29uc3QgcmVhZG9ubHk9bWFrZVJlYWRvbmx5TWFyc2hhbGxlcih0aGlzLnN0YXRlKTtcbnJldHVybiByZWFkb25seS5mcm9tQ2FwRGF0YShkYXRhKTtcbiB9LFxuc2VyaWFsaXplKGRhdGEpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnJlYWRvbmx5TWFyc2hhbGxlci50b0NhcERhdGEoZGF0YSk7XG4gfSxcbnVuc2VyaWFsaXplKGRhdGEpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnJlYWRvbmx5TWFyc2hhbGxlci5mcm9tQ2FwRGF0YShkYXRhKTtcbiB9fSxcblxucHVibGlzaGluZ01hcnNoYWxsZXI6e1xudG9DYXBEYXRhKHZhbCl7XG5jb25zdCBwdWJsaXNoaW5nPW1ha2VQdWJsaXNoaW5nTWFyc2hhbGxlcih0aGlzLnN0YXRlKTtcbnJldHVybiBwdWJsaXNoaW5nLnRvQ2FwRGF0YSh2YWwpO1xuIH0sXG5mcm9tQ2FwRGF0YShkYXRhKXtcbmNvbnN0IHB1Ymxpc2hpbmc9bWFrZVB1Ymxpc2hpbmdNYXJzaGFsbGVyKHRoaXMuc3RhdGUpO1xucmV0dXJuIHB1Ymxpc2hpbmcuZnJvbUNhcERhdGEoZGF0YSk7XG4gfSxcbnNlcmlhbGl6ZShkYXRhKXtcbnJldHVybiB0aGlzLmZhY2V0cy5wdWJsaXNoaW5nTWFyc2hhbGxlci50b0NhcERhdGEoZGF0YSk7XG4gfSxcbnVuc2VyaWFsaXplKGRhdGEpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnB1Ymxpc2hpbmdNYXJzaGFsbGVyLmZyb21DYXBEYXRhKGRhdGEpO1xuIH19fSk7XG5cblxuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLnByZXBhcmVCb2FyZEtpdChwcmVwYXJlQm9hcmRLaXQpO1xuY29uc3QgICAgICAgIHByZXBhcmVSZWNvcmRlckZhY3Rvcnk9KHpvbmUpPT57XG5jb25zdCBiYWdnYWdlPXpvbmUubWFwU3RvcmUoIGBSZWNvcmRlciBCYWdnYWdlYCk7XG5jb25zdCBtYWtlRHVyYWJsZVB1Ymxpc2hLaXQ9cHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KFxuYmFnZ2FnZSxcbidEdXJhYmxlUHVibGlzaEtpdCcpO1xuXG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVSZWNvcmRlcktpdD0obGFiZWwsbWFyc2hhbGxlcik9PntcbmNvbnN0IG15Wm9uZT16b25lLnN1YlpvbmUobGFiZWwpO1xuY29uc3QgbWFrZVJlY29yZGVyPXByZXBhcmVSZWNvcmRlcihcbm15Wm9uZS5tYXBTdG9yZSggYFJlY29yZGVyIEJhZ2dhZ2U6ICR7bGFiZWx9YCksXG5tYXJzaGFsbGVyKTtcblxucmV0dXJuIGRlZmluZVJlY29yZGVyS2l0KHttYWtlUmVjb3JkZXIsbWFrZUR1cmFibGVQdWJsaXNoS2l0fSk7XG4gfTtcblxucmV0dXJuIHByZXBhcmVSZWNvcmRlcktpdDtcbiB9OyRozY9fb25jZS5wcmVwYXJlUmVjb3JkZXJGYWN0b3J5KHByZXBhcmVSZWNvcmRlckZhY3RvcnkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiREVGQVVMVF9DUkNfRElHSVRTIjpbIkRFRkFVTFRfQ1JDX0RJR0lUUyJdLCJERUZBVUxUX1BSRUZJWCI6WyJERUZBVUxUX1BSRUZJWCJdLCJwcmVwYXJlQm9hcmRLaXQiOlsicHJlcGFyZUJvYXJkS2l0Il0sInByZXBhcmVSZWNvcmRlckZhY3RvcnkiOlsicHJlcGFyZVJlY29yZGVyRmFjdG9yeSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAfT6jC5QsAAOULAAAtAAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9hY3Rpb25zLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiXSwiZXhwb3J0cyI6WyJtYWtlUGF5bWVudEFjdGlvbnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlUHJvbWlzZUtpdCxGYXIsRTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbmNvbnN0ICAgICAgICBtYWtlUGF5bWVudEFjdGlvbnM9KHtcbmdldEJyYW5kUmVjb3JkLFxuZ2V0UHVyc2VCeVBldG5hbWUsXG5nZXRSZWNvcmQsXG51cGRhdGVSZWNvcmQsXG5nZXRBdXRvRGVwb3NpdFB1cnNlLFxuZ2V0SXNzdWVyQm9hcmRJZH0pPT5cbntcbmNvbnN0IGRlcG9zaXRlZFBLPW1ha2VQcm9taXNlS2l0KCk7XG5cbnJldHVybiBGYXIoJ3BheW1lbnQgYWN0aW9ucycse1xuZGVwb3NpdDphc3luYyhwdXJzZU9yUGV0bmFtZT11bmRlZmluZWQpPT57XG5jb25zdCBvbGRQYXltZW50UmVjb3JkPWdldFJlY29yZCgpO1xuY29uc3R7YnJhbmQscGF5bWVudH09b2xkUGF5bWVudFJlY29yZDtcbmFzc2VydChwYXltZW50KTtcblxuLyogICAgICAgICAgICAgICAgKi9cbmxldCBwdXJzZTtcbmlmKHB1cnNlT3JQZXRuYW1lPT09dW5kZWZpbmVkKXtcbmNvbnN0IGF1dG9EZXBvc2l0UHVyc2U9Z2V0QXV0b0RlcG9zaXRQdXJzZShicmFuZCk7XG5pZighYXV0b0RlcG9zaXRQdXJzZSl7XG4vL1xucmV0dXJuIGRlcG9zaXRlZFBLLnByb21pc2U7XG4gfVxuLy9cbnB1cnNlPWdldEF1dG9EZXBvc2l0UHVyc2UoYnJhbmQpO1xuIH1lbHNlIGlmKFxuQXJyYXkuaXNBcnJheShwdXJzZU9yUGV0bmFtZSl8fFxudHlwZW9mIHB1cnNlT3JQZXRuYW1lPT09J3N0cmluZycpXG57XG5wdXJzZT1nZXRQdXJzZUJ5UGV0bmFtZShwdXJzZU9yUGV0bmFtZSk7XG4gfWVsc2V7XG5wdXJzZT1wdXJzZU9yUGV0bmFtZTtcbiB9XG5jb25zdCBicmFuZFJlY29yZD1nZXRCcmFuZFJlY29yZChicmFuZCk7XG51cGRhdGVSZWNvcmQoey4uLm9sZFBheW1lbnRSZWNvcmQsc3RhdHVzOidwZW5kaW5nJ30sYnJhbmRSZWNvcmQpO1xuLy9cbkUocHVyc2UpLlxuZGVwb3NpdChwYXltZW50KS5cbnRoZW4oXG4oZGVwb3NpdGVkQW1vdW50KT0+e1xudXBkYXRlUmVjb3JkKFxue1xuLi4uZ2V0UmVjb3JkKCksXG4vL1xucGF5bWVudDp1bmRlZmluZWQsXG5zdGF0dXM6J2RlcG9zaXRlZCcsXG5kZXBvc2l0ZWRBbW91bnR9LFxuXG5icmFuZFJlY29yZCk7XG5cbmRlcG9zaXRlZFBLLnJlc29sdmUoZGVwb3NpdGVkQW1vdW50KTtcbiB9LFxuKGUpPT57XG5jb25zb2xlLmVycm9yKFxuJ0Vycm9yIGRlcG9zaXRpbmcgcGF5bWVudCBpbicsXG5wdXJzZU9yUGV0bmFtZXx8J2RlZmF1bHQgcHVyc2UnLFxuZSk7XG5cbmlmKHB1cnNlT3JQZXRuYW1lPT09dW5kZWZpbmVkKXtcbi8vXG4vL1xudXBkYXRlUmVjb3JkKHtcbi4uLmdldFJlY29yZCgpLFxuc3RhdHVzOnVuZGVmaW5lZH0pO1xuXG5kZXBvc2l0ZWRQSy5yZWplY3QoZSk7XG4gfWVsc2V7XG4vL1xuLy9cbmRlcG9zaXRlZFBLLnJlc29sdmUoZ2V0UmVjb3JkKCkuYWN0aW9ucy5kZXBvc2l0KHVuZGVmaW5lZCkpO1xuIH1cbiB9KTtcblxucmV0dXJuIGRlcG9zaXRlZFBLLnByb21pc2U7XG4gfSxcbnJlZnJlc2g6YXN5bmMoKT0+e1xuY29uc3Qgb2xkUGF5bWVudFJlY29yZD1nZXRSZWNvcmQoKTtcbmNvbnN0e2JyYW5kLGlzc3VlcixwYXltZW50fT1vbGRQYXltZW50UmVjb3JkO1xuY29uc3QgYnJhbmRSZWNvcmQ9Z2V0QnJhbmRSZWNvcmQoYnJhbmQpO1xuaWYoIWJyYW5kUmVjb3JkKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbmlmKCFpc3N1ZXIpe1xudXBkYXRlUmVjb3JkKFxue1xuLi4ub2xkUGF5bWVudFJlY29yZCxcbmlzc3VlckJvYXJkSWQ6Z2V0SXNzdWVyQm9hcmRJZChicmFuZFJlY29yZC5pc3N1ZXIpfSxcblxuYnJhbmRSZWNvcmQpO1xuXG5yZXR1cm4gdHJ1ZTtcbiB9XG5cbmlmKCFwYXltZW50KXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbmNvbnN0IGlzTGl2ZT1hd2FpdCBFKGlzc3VlcikuaXNMaXZlKHBheW1lbnQpO1xuaWYoaXNMaXZlKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbnVwZGF0ZVJlY29yZCh7XG4uLi5vbGRQYXltZW50UmVjb3JkLFxuLy9cbnBheW1lbnQ6dW5kZWZpbmVkLFxuc3RhdHVzOidleHBpcmVkJ30pO1xuXG5yZXR1cm4gdHJ1ZTtcbiB9LFxuZ2V0QW1vdW50T2Y6YXN5bmMoKT0+e1xuY29uc3Qgb2xkUGF5bWVudFJlY29yZD1nZXRSZWNvcmQoKTtcbmNvbnN0e2lzc3VlcixwYXltZW50fT1vbGRQYXltZW50UmVjb3JkO1xuYXNzZXJ0KGlzc3Vlcik7XG5hc3NlcnQocGF5bWVudCk7XG5cbi8vXG5jb25zdCBsYXN0QW1vdW50PWF3YWl0IEUoaXNzdWVyKS5nZXRBbW91bnRPZihwYXltZW50KTtcblxudXBkYXRlUmVjb3JkKHtcbi4uLm9sZFBheW1lbnRSZWNvcmQsXG5sYXN0QW1vdW50fSk7XG5cbnJldHVybiB0cnVlO1xuIH19KTtcblxuIH07JGjNj19vbmNlLm1ha2VQYXltZW50QWN0aW9ucyhtYWtlUGF5bWVudEFjdGlvbnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVBheW1lbnRBY3Rpb25zIjpbIm1ha2VQYXltZW50QWN0aW9ucyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABTChau1wIAANcCAAA1AAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9iaWdpbnRTdHJpbmdpZnkuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImJpZ2ludFN0cmluZ2lmeSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIGJpZ2ludFN0cmluZ2lmeT0oeCk9PlxuSlNPTi5zdHJpbmdpZnkoeCwoX2tleSx2YWx1ZSk9PntcbmlmKHR5cGVvZiB2YWx1ZSE9PSdiaWdpbnQnKXtcbi8vXG5yZXR1cm4gdmFsdWU7XG4gfVxuaWYodmFsdWU8PUJpZ0ludChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpe1xuLy9cbnJldHVybiBOdW1iZXIodmFsdWUpO1xuIH1cbi8vXG4vL1xucmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gfSk7JGjNj19vbmNlLmJpZ2ludFN0cmluZ2lmeShiaWdpbnRTdHJpbmdpZnkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYmlnaW50U3RyaW5naWZ5IjpbImJpZ2ludFN0cmluZ2lmeSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABZFOv2iQkAAIkJAAAuAAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9kYXRlLW5vdy5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGFnb3JpYy9ub3RpZmllciIsIkBlbmRvL3Byb21pc2Uta2l0Il0sImV4cG9ydHMiOlsiREVGQVVMVF9USU1FUl9ERVZJQ0VfU0NBTEUiLCJERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCIsIm1ha2VUaW1lckRldmljZURhdGVOb3ciLCJtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsb2JzZXJ2ZU5vdGlmaWVyLG1ha2VQcm9taXNlS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wib2JzZXJ2ZU5vdGlmaWVyXCIsIFskaM2PX2EgPT4gKG9ic2VydmVOb3RpZmllciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5jb25zdCAgICAgICAgREVGQVVMVF9USU1FUl9TRVJWSUNFX1BPTExfSU5URVJWQUw9NjBfMDAwbjskaM2PX29uY2UuREVGQVVMVF9USU1FUl9TRVJWSUNFX1BPTExfSU5URVJWQUwoREVGQVVMVF9USU1FUl9TRVJWSUNFX1BPTExfSU5URVJWQUwpO1xuY29uc3QgICAgICAgIERFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFPTE7XG5cbi8vXG4vL1xuJGjNj19vbmNlLkRFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFKERFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFKTtjb25zdCBtYWtlVGltZXJEZXZpY2VEYXRlTm93PVxuKEQsdGltZXJEZXZpY2UsdGltZXJEZXZpY2VTY2FsZT1ERUZBVUxUX1RJTUVSX0RFVklDRV9TQ0FMRSk9PlxuKCk9PntcbmNvbnN0IHN0YW1wPUQodGltZXJEZXZpY2UpLmdldExhc3RQb2xsZWQoKTtcbmNvbnN0IGxhc3RQb2xsZWRTdGFtcD1wYXJzZUludCggYCR7c3RhbXB9YCwxMCkqdGltZXJEZXZpY2VTY2FsZTtcbnJldHVybiBsYXN0UG9sbGVkU3RhbXA7XG4gfTtcblxuLy9cbi8vXG4kaM2PX29uY2UubWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyhtYWtlVGltZXJEZXZpY2VEYXRlTm93KTtjb25zdCBtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdz0oXG50aW1lclNlcnZpY2UsXG50aW1lclBvbGxJbnRlcnZhbD1ERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCk9Plxue1xubGV0IGxhc3RQb2xsZWRTdGFtcD1OYU47XG5jb25zdCBkYXRlTm93PSgpPT5sYXN0UG9sbGVkU3RhbXA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkYXRlTm93UEs9bWFrZVByb21pc2VLaXQoKTtcblxuLy9cbmNvbnN0IG9ic2VydmVUaW1lcj1hc3luYygpPT57XG5jb25zdCBvYnNlcnZlcj17XG51cGRhdGVTdGF0ZShzdGFtcCl7XG5sYXN0UG9sbGVkU3RhbXA9cGFyc2VJbnQoIGAke3N0YW1wfWAsMTApO1xuZGF0ZU5vd1BLLnJlc29sdmUoZGF0ZU5vdyk7XG4gfX07XG5cblxuLy9cbmNvbnN0IHN0YW1wPWF3YWl0IEUodGltZXJTZXJ2aWNlKS5nZXRDdXJyZW50VGltZXN0YW1wKCk7XG5vYnNlcnZlci51cGRhdGVTdGF0ZShzdGFtcCk7XG5cbi8vXG4vL1xuY29uc3QgdGltZXJOb3RpZmllcj1FKHRpbWVyU2VydmljZSkubWFrZU5vdGlmaWVyKDBuLHRpbWVyUG9sbEludGVydmFsKTtcblxuLy9cbmF3YWl0IG9ic2VydmVOb3RpZmllcih0aW1lck5vdGlmaWVyLG9ic2VydmVyKTtcbiB9O1xuXG5vYnNlcnZlVGltZXIoKS5jYXRjaCgoZSk9PmRhdGVOb3dQSy5yZWplY3QoZSkpO1xuXG4vL1xucmV0dXJuIGRhdGVOb3dQSy5wcm9taXNlO1xuIH07JGjNj19vbmNlLm1ha2VUaW1lclNlcnZpY2VEYXRlTm93KG1ha2VUaW1lclNlcnZpY2VEYXRlTm93KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkRFRkFVTFRfVElNRVJfU0VSVklDRV9QT0xMX0lOVEVSVkFMIjpbIkRFRkFVTFRfVElNRVJfU0VSVklDRV9QT0xMX0lOVEVSVkFMIl0sIkRFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFIjpbIkRFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFIl0sIm1ha2VUaW1lckRldmljZURhdGVOb3ciOlsibWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyJdLCJtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyI6WyJtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADAr+p1CRMAAAkTAAA6AAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9maW5kT3JNYWtlSW52aXRhdGlvbi5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvZXJ0cCJdLCJleHBvcnRzIjpbImZpbmRPck1ha2VJbnZpdGF0aW9uIiwibWFrZUlkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEZhaWwscSxFLHBhc3NTdHlsZU9mLEFtb3VudE1hdGg7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdCAgICAgICAgbWFrZUlkPShkYXBwT3JpZ2luLHJhd0lkKT0+IGAke2RhcHBPcmlnaW59IyR7cmF3SWR9YDskaM2PX29uY2UubWFrZUlkKG1ha2VJZCk7XG5cbmNvbnN0IGFzc2VydEZpcnN0Q2FwQVNDSUk9KHN0cik9PntcbmFzc2VydC50eXBlb2Yoc3RyLCdzdHJpbmcnKTtcbmNvbnN0IGZpcnN0Q2FwQVNDSUk9L15bQS1aXVthLXpBLVowLTlfJF0qJC87XG5maXJzdENhcEFTQ0lJLnRlc3Qoc3RyKXx8XG5GYWlsIGBUaGUgc3RyaW5nICR7cShcbnN0cilcbiB9IG11c3QgYmUgYW4gYXNjaWkgaWRlbnRpZmllciBzdGFydGluZyB3aXRoIHVwcGVyIGNhc2UuYDtcbnN0ciE9PSdOYU4nJiZzdHIhPT0nSW5maW5pdHknfHxcbkZhaWwgYGtleXdvcmQgJHtxKHN0cil9IG11c3Qgbm90IGJlIGEgbnVtYmVyJ3MgbmFtZWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgZmluZEJ5Qm9hcmRJZD1hc3luYyhpbnZpdGF0aW9uUHVyc2VCYWxhbmNlLHtib2FyZCxib2FyZElkfSk9PntcbmFzc2VydC50eXBlb2YoYm9hcmRJZCwnc3RyaW5nJyk7XG5jb25zdCBpbnZpdGF0aW9uSGFuZGxlPWF3YWl0IEUoYm9hcmQpLmdldFZhbHVlKGJvYXJkSWQpO1xuY29uc3QgbWF0Y2g9KGVsZW1lbnQpPT5lbGVtZW50LmhhbmRsZT09PWludml0YXRpb25IYW5kbGU7XG5jb25zdCBtYXRjaGluZ1ZhbHVlPWludml0YXRpb25QdXJzZUJhbGFuY2UudmFsdWUuZmluZChtYXRjaCk7XG5tYXRjaGluZ1ZhbHVlfHxGYWlsIGBDYW5ub3QgZmluZCBpbnZpdGF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gJHtxKGJvYXJkSWQpfWA7XG5cbnJldHVybiBoYXJkZW4oW21hdGNoaW5nVmFsdWVdKTtcbiB9O1xuXG4vL1xuLy9cbi8qXG5cblxuICovXG5jb25zdCBmaW5kQnlLZXlWYWx1ZVBhaXJzPWFzeW5jKGludml0YXRpb25QdXJzZUJhbGFuY2Usa3ZzKT0+e1xuLy9cbi8vXG4vL1xuY29uc3QgbWF0Y2hlcz0oaW52aXRhdGlvbkRldGFpbCk9PlxuT2JqZWN0LmVudHJpZXMoa3ZzKS5ldmVyeShcbihba2V5LHZhbHVlXSk9Pmludml0YXRpb25EZXRhaWxba2V5XT09PXZhbHVlKTtcblxuXG5jb25zdCBtYXRjaGluZ1ZhbHVlPWludml0YXRpb25QdXJzZUJhbGFuY2UudmFsdWUuZmluZChtYXRjaGVzKTtcbm1hdGNoaW5nVmFsdWV8fEZhaWwgYENhbm5vdCBmaW5kIGludml0YXRpb24gY29ycmVzcG9uZGluZyB0byAke3Eoa3ZzKX1gO1xucmV0dXJuIGhhcmRlbihbbWF0Y2hpbmdWYWx1ZV0pO1xuIH07XG5cbmNvbnN0IG1ha2VGaW5kSW52aXRhdGlvbj0oaW52aXRhdGlvblB1cnNlLGludml0YXRpb25CcmFuZCk9PntcbmNvbnN0IGZpbmRJbnZpdGF0aW9uPWFzeW5jKHF1ZXJ5Rm4scXVlcnlQYXJhbXMpPT57XG5jb25zdCBwdXJzZUJhbGFuY2U9YXdhaXQgRShpbnZpdGF0aW9uUHVyc2UpLmdldEN1cnJlbnRBbW91bnQoKTtcbmNvbnN0IHZhbHVlPWF3YWl0IHF1ZXJ5Rm4ocHVyc2VCYWxhbmNlLHF1ZXJ5UGFyYW1zKTtcbmNvbnN0IGludml0YXRpb25BbW91bnQ9QW1vdW50TWF0aC5tYWtlKGludml0YXRpb25CcmFuZCx2YWx1ZSk7XG5jb25zdCBpbnZpdGF0aW9uUD1FKGludml0YXRpb25QdXJzZSkud2l0aGRyYXcoaW52aXRhdGlvbkFtb3VudCk7XG5yZXR1cm4gaW52aXRhdGlvblA7XG4gfTtcbnJldHVybiBmaW5kSW52aXRhdGlvbjtcbiB9O1xuXG5jb25zdCBtYWtlQ29udGludWluZ0ludml0YXRpb249YXN5bmMoXG5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LFxuZGFwcE9yaWdpbixcbntwcmlvck9mZmVySWQ6cmF3UHJpb3JPZmZlcklkLGRlc2NyaXB0aW9ufSk9Plxue1xuYXNzZXJ0Rmlyc3RDYXBBU0NJSShkZXNjcmlwdGlvbik7XG5cbmNvbnN0IHByaW9yT2ZmZXJJZD1tYWtlSWQoZGFwcE9yaWdpbixyYXdQcmlvck9mZmVySWQpO1xuY29uc3Qgb2ZmZXJSZXN1bHQ9YXdhaXQgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQocHJpb3JPZmZlcklkKS5wcm9taXNlO1xuYXNzZXJ0KFxucGFzc1N0eWxlT2Yob2ZmZXJSZXN1bHQpPT09J2NvcHlSZWNvcmQnLFxuIGBvZmZlclJlc3VsdCBtdXN0IGJlIGEgcmVjb3JkIHRvIGhhdmUgYW4gaW52aXRhdGlvbk1ha2VycyBwcm9wZXJ0eWApO1xuXG5hc3NlcnQoXG5vZmZlclJlc3VsdC5pbnZpdGF0aW9uTWFrZXJzLFxuIGBvZmZlclJlc3VsdCBkb2VzIG5vdCBoYXZlIGFuIGludml0YXRpb25NYWtlcnMgcHJvcGVydHlgKTtcblxuXG5jb25zdCBpbnZpdGF0aW9uUD1FKG9mZmVyUmVzdWx0Lmludml0YXRpb25NYWtlcnMpW2Rlc2NyaXB0aW9uXSgpO1xucmV0dXJuIGludml0YXRpb25QO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbnZpdGF0aW9uPWFzeW5jKFxuaW52aXRhdGlvbk1ha2VyLFxuaW5zdGFuY2VIYW5kbGVCb2FyZElkLFxuYm9hcmQsXG56b2UpPT5cbntcbmNvbnN0IGluc3RhbmNlPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5FKGJvYXJkKS5nZXRWYWx1ZShpbnN0YW5jZUhhbmRsZUJvYXJkSWQpO1xuXG5jb25zdCBwdWJsaWNGYWNldD1FKHpvZSkuZ2V0UHVibGljRmFjZXQoaW5zdGFuY2UpO1xuY29uc3R7bWV0aG9kLGFyZ3M9W119PWludml0YXRpb25NYWtlcjtcblxucmV0dXJuIEUocHVibGljRmFjZXQpW21ldGhvZF0oLi4uYXJncyk7XG4gfTtcblxuY29uc3QgICAgICAgIGZpbmRPck1ha2VJbnZpdGF0aW9uPWFzeW5jKFxuaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdCxcbmJvYXJkLFxuem9lLFxuaW52aXRhdGlvblB1cnNlLFxuaW52aXRhdGlvbkJyYW5kLFxub2ZmZXIpPT5cbntcbmlmKG9mZmVyLmludml0YXRpb24pe1xuLy9cbnJldHVybiBvZmZlci5pbnZpdGF0aW9uO1xuIH1cblxuY29uc3QgZmluZEludml0YXRpb249bWFrZUZpbmRJbnZpdGF0aW9uKGludml0YXRpb25QdXJzZSxpbnZpdGF0aW9uQnJhbmQpO1xuXG4vL1xuaWYob2ZmZXIuaW52aXRlSGFuZGxlQm9hcmRJZCl7XG5jb25zdCBxdWVyeVBhcmFtcz17XG5ib2FyZCxcbmJvYXJkSWQ6b2ZmZXIuaW52aXRlSGFuZGxlQm9hcmRJZH07XG5cbnJldHVybiBmaW5kSW52aXRhdGlvbihmaW5kQnlCb2FyZElkLHF1ZXJ5UGFyYW1zKTtcbiB9XG5cbi8vXG5pZihvZmZlci5pbnZpdGF0aW9uSGFuZGxlQm9hcmRJZCl7XG5jb25zdCBxdWVyeVBhcmFtcz17XG5ib2FyZCxcbmJvYXJkSWQ6b2ZmZXIuaW52aXRhdGlvbkhhbmRsZUJvYXJkSWR9O1xuXG5yZXR1cm4gZmluZEludml0YXRpb24oZmluZEJ5Qm9hcmRJZCxxdWVyeVBhcmFtcyk7XG4gfVxuXG5pZihvZmZlci5pbnZpdGF0aW9uTWFrZXIpe1xucmV0dXJuIG1ha2VJbnZpdGF0aW9uKFxub2ZmZXIuaW52aXRhdGlvbk1ha2VyLFxub2ZmZXIuaW5zdGFuY2VIYW5kbGVCb2FyZElkLFxuYm9hcmQsXG56b2UpO1xuXG4gfVxuXG5pZihvZmZlci5pbnZpdGF0aW9uUXVlcnkpe1xucmV0dXJuIGZpbmRJbnZpdGF0aW9uKGZpbmRCeUtleVZhbHVlUGFpcnMsb2ZmZXIuaW52aXRhdGlvblF1ZXJ5KTtcbiB9XG5cbmlmKG9mZmVyLmNvbnRpbnVpbmdJbnZpdGF0aW9uKXtcbmNvbnN0IGRhcHBPcmlnaW49XG5vZmZlci5yZXF1ZXN0Q29udGV4dCYmb2ZmZXIucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbj9cbm9mZmVyLnJlcXVlc3RDb250ZXh0LmRhcHBPcmlnaW46XG4gYHVua25vd25gO1xucmV0dXJuIG1ha2VDb250aW51aW5nSW52aXRhdGlvbihcbmlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQsXG5kYXBwT3JpZ2luLFxub2ZmZXIuY29udGludWluZ0ludml0YXRpb24pO1xuXG4gfVxuXG50aHJvdyBGYWlsIGBubyBpbnZpdGF0aW9uIHdhcyBmb3VuZCBvciBtYWRlIGZvciB0aGlzIG9mZmVyICR7b2ZmZXIuaWR9YDtcbiB9OyRozY9fb25jZS5maW5kT3JNYWtlSW52aXRhdGlvbihmaW5kT3JNYWtlSW52aXRhdGlvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlSWQiOlsibWFrZUlkIl0sImZpbmRPck1ha2VJbnZpdGF0aW9uIjpbImZpbmRPck1ha2VJbnZpdGF0aW9uIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFRqpSl6AgAAegIAADQAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2ludGVybmFsLXR5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA8ZgIBMsIAADLCAAAMQAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvaXNzdWVyVGFibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBhZ29yaWMvc3RvcmUiLCIuL2ludGVybmFsLXR5cGVzLmpzIl0sImV4cG9ydHMiOlsibWFrZUlzc3VlclRhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEUsbWFrZVNjYWxhcldlYWtNYXBTdG9yZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaM2PX2EgPT4gKGFzc2VydCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhcldlYWtNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlSXNzdWVyVGFibGU9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBicmFuZFRvSXNzdWVyUmVjb3JkPW1ha2VTY2FsYXJXZWFrTWFwU3RvcmUoJ2JyYW5kJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3VlclRvSXNzdWVyUmVjb3JkPW1ha2VTY2FsYXJXZWFrTWFwU3RvcmUoJ2lzc3VlcicpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNzdWVyVGFibGU9e1xuaGFzQnlCcmFuZDpicmFuZFRvSXNzdWVyUmVjb3JkLmhhcyxcbmdldEJ5QnJhbmQ6YnJhbmRUb0lzc3VlclJlY29yZC5nZXQsXG5oYXNCeUlzc3Vlcjppc3N1ZXJUb0lzc3VlclJlY29yZC5oYXMsXG5nZXRCeUlzc3Vlcjppc3N1ZXJUb0lzc3VlclJlY29yZC5nZXQsXG4vL1xuLy9cbmluaXRJc3N1ZXI6YXN5bmMoaXNzdWVyUCxhZGRNZXRhPSh4KT0+eCk9PntcbmNvbnN0IGJyYW5kUD1FKGlzc3VlclApLmdldEJyYW5kKCk7XG5jb25zdCBicmFuZElzc3Vlck1hdGNoUD1FKGJyYW5kUCkuaXNNeUlzc3Vlcihpc3N1ZXJQKTtcbmNvbnN0IGRpc3BsYXlJbmZvUD1FKGJyYW5kUCkuZ2V0RGlzcGxheUluZm8oKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0W2lzc3VlcixicmFuZCxicmFuZElzc3Vlck1hdGNoLGRpc3BsYXlJbmZvXT1hd2FpdCBQcm9taXNlLmFsbChbXG5pc3N1ZXJQLFxuYnJhbmRQLFxuYnJhbmRJc3N1ZXJNYXRjaFAsXG5kaXNwbGF5SW5mb1BdKTtcblxuLy9cblxuaWYoaXNzdWVyVG9Jc3N1ZXJSZWNvcmQuaGFzKGlzc3Vlcikpe1xucmV0dXJuIGlzc3VlclRvSXNzdWVyUmVjb3JkLmdldChpc3N1ZXIpO1xuIH1cbmFzc2VydChcbmJyYW5kSXNzdWVyTWF0Y2gsXG4gYGlzc3VlciB3YXMgdXNpbmcgYSBicmFuZCB3aGljaCB3YXMgbm90IGl0cyBvd25gKTtcblxuaXNzdWVyVGFibGUuaW5pdElzc3VlckJ5UmVjb3JkKFxuYWRkTWV0YSh7XG5icmFuZCxcbmlzc3VlcixcbmFzc2V0S2luZDpkaXNwbGF5SW5mby5hc3NldEtpbmQsXG5kaXNwbGF5SW5mb30pKTtcblxuXG5yZXR1cm4gaXNzdWVyVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG4gfSxcbmluaXRJc3N1ZXJCeVJlY29yZDooaXNzdWVyUmVjb3JkKT0+e1xuY29uc3R7YnJhbmQsaXNzdWVyfT1pc3N1ZXJSZWNvcmQ7XG5icmFuZFRvSXNzdWVyUmVjb3JkLmluaXQoYnJhbmQsaXNzdWVyUmVjb3JkKTtcbmlzc3VlclRvSXNzdWVyUmVjb3JkLmluaXQoaXNzdWVyLGlzc3VlclJlY29yZCk7XG4gfX07XG5cblxucmV0dXJuIGlzc3VlclRhYmxlO1xuIH07JGjNj19vbmNlLm1ha2VJc3N1ZXJUYWJsZShtYWtlSXNzdWVyVGFibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUlzc3VlclRhYmxlIjpbIm1ha2VJc3N1ZXJUYWJsZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACAbAFkNB4AADQeAAAzAAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9saWItZGVoeWRyYXRlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3N0b3JlIl0sImV4cG9ydHMiOlsiaXNQYXRoIiwibWFrZURlaHlkcmF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRmFpbCxxLG1ha2VNYXJzaGFsLG1hcEl0ZXJhYmxlLG1ha2VMZWdhY3lNYXAsbWFrZVNjYWxhck1hcFN0b3JlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhc3NlcnRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0ID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXSxbXCJtYXBJdGVyYWJsZVwiLCBbJGjNj19hID0+IChtYXBJdGVyYWJsZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm1ha2VMZWdhY3lNYXBcIiwgWyRozY9fYSA9PiAobWFrZUxlZ2FjeU1hcCA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhck1hcFN0b3JlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1BhdGg9KHgpPT57XG5pZighQXJyYXkuaXNBcnJheSh4KSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxueC5sZW5ndGg+MHx8RmFpbCBgUGF0aCAke3EoeCl9IG11c3Qgbm90IGJlIGVtcHR5YDtcbmZvcihjb25zdCBuYW1lIG9mIHgpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmlzUGF0aChpc1BhdGgpO1xuXG5jb25zdCBJTVBMT0RFX1BSRUZJWD0nSUU6JztcblxuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIG1ha2VEZWh5ZHJhdG9yPShpbml0aWFsVW5uYW1lZENvdW50PTApPT57XG5sZXQgdW5uYW1lZENvdW50PWluaXRpYWxVbm5hbWVkQ291bnQ7XG5cbi8vXG5jb25zdCBwZXRuYW1lS2luZFRvTWFwcGluZz1tYWtlTGVnYWN5TWFwKCdwZXRuYW1lS2luZCcpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2VhcmNoT3JkZXI9W107XG5cbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdmFsVG9QYXRocz1tYWtlU2NhbGFyTWFwU3RvcmUoJ3ZhbHVlJyk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGV4cGxvZGU9KGRhdGEpPT57XG5kYXRhLnN0YXJ0c1dpdGgoSU1QTE9ERV9QUkVGSVgpfHxcbkZhaWwgYGV4cGxvZGVkIHN0cmluZyAke2RhdGF9IG11c3Qgc3RhcnQgd2l0aCAke3EoSU1QTE9ERV9QUkVGSVgpfWA7XG5jb25zdCBzdHJvbmduYW1lPUpTT04ucGFyc2UoZGF0YS5zbGljZShJTVBMT0RFX1BSRUZJWC5sZW5ndGgpKTtcbmlmKCFpc1BhdGgoc3Ryb25nbmFtZSkpe1xucmV0dXJuIHN0cm9uZ25hbWU7XG4gfVxuY29uc3R7dmFsVG9QZXRuYW1lOnJvb3RUb1BldG5hbWV9PWVkZ2VNYXBwaW5nO1xuY29uc3QgcGV0bmFtZT1yb290VG9QZXRuYW1lLmdldChzdHJvbmduYW1lWzBdKTtcbmFzc2VydCghaXNQYXRoKHBldG5hbWUpKTtcbnN0cm9uZ25hbWVbMF09cGV0bmFtZTtcbnJldHVybiBoYXJkZW4oc3Ryb25nbmFtZSk7XG4gfTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgaW1wbG9kZT0oc3Ryb25nbmFtZSk9PntcbmlmKCFpc1BhdGgoc3Ryb25nbmFtZSkpe1xucmV0dXJuIGAke0lNUExPREVfUFJFRklYfSR7SlNPTi5zdHJpbmdpZnkoc3Ryb25nbmFtZSl9YDtcbiB9XG5cbi8vXG5jb25zdCBwYXRoPVsuLi5zdHJvbmduYW1lXTtcbmNvbnN0e3BldG5hbWVUb1ZhbDpwZXRuYW1lVG9Sb290fT1lZGdlTWFwcGluZztcbmlmKCFwZXRuYW1lVG9Sb290LmhhcyhwYXRoWzBdKSl7XG4vL1xuRmFpbCBgRWRnZW5hbWUgZm9yICR7cShwYXRoWzBdKX0gcGV0bmFtZSBub3QgZm91bmRgO1xuIH1cbmNvbnN0IHJvb3Q9cGV0bmFtZVRvUm9vdC5nZXQocGF0aFswXSk7XG5wYXRoWzBdPXJvb3Q7XG5cbnJldHVybiBgJHtJTVBMT0RFX1BSRUZJWH0ke0pTT04uc3RyaW5naWZ5KHBhdGgpfWA7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBtYWtlTWFwcGluZz0oa2luZCx7dXNlTGVnYWN5TWFwPWZhbHNlfT17fSk9PntcbnR5cGVvZiBraW5kPT09J3N0cmluZyd8fCBga2luZCAke2tpbmR9IG11c3QgYmUgYSBzdHJpbmdgO1xuY29uc3QgbWFrZU1hcD11c2VMZWdhY3lNYXA/bWFrZUxlZ2FjeU1hcDptYWtlU2NhbGFyTWFwU3RvcmU7XG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByYXdWYWxUb1BldG5hbWU9bWFrZU1hcCgndmFsdWUnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB2YWxUb1BldG5hbWU9e1xuLi4ucmF3VmFsVG9QZXRuYW1lLFxuc2V0KGtleSx2YWwpe1xucmF3VmFsVG9QZXRuYW1lLnNldChrZXksaW1wbG9kZSh2YWwpKTtcbiB9LFxuaW5pdChrZXksdmFsKXtcbnJhd1ZhbFRvUGV0bmFtZS5pbml0KGtleSxpbXBsb2RlKHZhbCkpO1xuIH0sXG5nZXQoa2V5KXtcbnJldHVybiBleHBsb2RlKHJhd1ZhbFRvUGV0bmFtZS5nZXQoa2V5KSk7XG4gfSxcbmVudHJpZXMoKXtcbnJldHVybiBtYXBJdGVyYWJsZShyYXdWYWxUb1BldG5hbWUuZW50cmllcygpLChba2V5LHZhbF0pPT5bXG5rZXksXG5leHBsb2RlKHZhbCldKTtcblxuIH0sXG52YWx1ZXMoKXtcbnJldHVybiBtYXBJdGVyYWJsZShyYXdWYWxUb1BldG5hbWUudmFsdWVzKCksKHZhbCk9PmV4cGxvZGUodmFsKSk7XG4gfX07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmF3UGV0bmFtZVRvVmFsPW1ha2VTY2FsYXJNYXBTdG9yZSgncGV0bmFtZScpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGV0bmFtZVRvVmFsPXtcbi4uLnJhd1BldG5hbWVUb1ZhbCxcbmluaXQoa2V5LHZhbCl7XG5yZXR1cm4gcmF3UGV0bmFtZVRvVmFsLmluaXQoaW1wbG9kZShrZXkpLHZhbCk7XG4gfSxcbnNldChrZXksdmFsKXtcbnJldHVybiByYXdQZXRuYW1lVG9WYWwuc2V0KGltcGxvZGUoa2V5KSx2YWwpO1xuIH0sXG5oYXMoa2V5KXtcbnRyeXtcbnJldHVybiByYXdQZXRuYW1lVG9WYWwuaGFzKGltcGxvZGUoa2V5KSk7XG4gfWNhdGNoKGUpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfSxcbmdldChrZXkpe1xucmV0dXJuIHJhd1BldG5hbWVUb1ZhbC5nZXQoaW1wbG9kZShrZXkpKTtcbiB9LFxuZGVsZXRlKGtleSl7XG5yZXR1cm4gcmF3UGV0bmFtZVRvVmFsLmRlbGV0ZShpbXBsb2RlKGtleSkpO1xuIH0sXG5rZXlzKCl7XG5yZXR1cm4gbWFwSXRlcmFibGUocmF3UGV0bmFtZVRvVmFsLmtleXMoKSwoa2V5KT0+ZXhwbG9kZShrZXkpKTtcbiB9LFxuZW50cmllcygpe1xucmV0dXJuIG1hcEl0ZXJhYmxlKHJhd1BldG5hbWVUb1ZhbC5lbnRyaWVzKCksKFtrZXksdmFsXSk9PltcbmV4cGxvZGUoa2V5KSxcbnZhbF0pO1xuXG4gfX07XG5cblxuLypcblxuXG4gICAgICovXG5jb25zdCBhZGRQYXRoPShwYXRoLHZhbCk9PntcbmlzUGF0aChwYXRoKXx8RmFpbCBgcGF0aCAke3EocGF0aCl9IG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nc2A7XG5cbmlmKCF2YWxUb1BldG5hbWUuaGFzKHZhbCkmJmVkZ2VNYXBwaW5nLnZhbFRvUGV0bmFtZS5oYXMocGF0aFswXSkpe1xuLy9cbi8vXG52YWxUb1BldG5hbWUuaW5pdCh2YWwscGF0aCk7XG4gfVxuXG4vL1xuaWYoIXZhbFRvUGF0aHMuaGFzKHZhbCkpe1xudmFsVG9QYXRocy5pbml0KHZhbCxoYXJkZW4oW3BhdGhdKSk7XG5yZXR1cm47XG4gfVxuY29uc3QgcGF0aHM9dmFsVG9QYXRocy5nZXQodmFsKTtcblxuLy9cbmNvbnN0IGZvdW5kPXBhdGhzLmZpbmQoKGVuYW1lKT0+e1xuaWYoZW5hbWUubGVuZ3RoIT09cGF0aC5sZW5ndGgpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmZvcihsZXQgaT0wO2k8ZW5hbWUubGVuZ3RoO2krPTEpe1xuaWYoZW5hbWVbaV0hPT1wYXRoW2ldKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfSk7XG5cbi8vXG5pZighZm91bmQpe1xudmFsVG9QYXRocy5zZXQodmFsLGhhcmRlbihbLi4ucGF0aHMscGF0aF0pKTtcbiB9XG4gfTtcblxuY29uc3QgYWRkUGV0bmFtZT0ocGV0bmFtZSx2YWwpPT57XG5pZihwZXRuYW1lVG9WYWwuaGFzKHBldG5hbWUpJiZwZXRuYW1lVG9WYWwuZ2V0KHBldG5hbWUpPT09dmFsKXtcbnJldHVybjtcbiB9XG4hcGV0bmFtZVRvVmFsLmhhcyhwZXRuYW1lKXx8RmFpbCBgcGV0bmFtZSAke3BldG5hbWV9IGlzIGFscmVhZHkgaW4gdXNlYDtcbiF2YWxUb1BldG5hbWUuaGFzKHZhbCl8fEZhaWwgYHZhbCAke3ZhbH0gYWxyZWFkeSBoYXMgYSBwZXRuYW1lYDtcbnBldG5hbWVUb1ZhbC5pbml0KHBldG5hbWUsdmFsKTtcbnZhbFRvUGV0bmFtZS5pbml0KHZhbCxwZXRuYW1lKTtcblxuaWYoaXNQYXRoKHBldG5hbWUpKXtcbmFkZFBhdGgocGV0bmFtZSx2YWwpO1xuIH1cbiB9O1xuXG5jb25zdCByZW5hbWVQZXRuYW1lPShwZXRuYW1lLHZhbCk9PntcbnZhbFRvUGV0bmFtZS5oYXModmFsKXx8XG5GYWlsIGB2YWwgJHt2YWx9IGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IG5hbWVkLCB3b3VsZCB5b3UgbGlrZSB0byBhZGQgaXQgaW5zdGVhZD9gO1xuIXBldG5hbWVUb1ZhbC5oYXMocGV0bmFtZSl8fEZhaWwgYHBldG5hbWUgJHtwZXRuYW1lfSBpcyBhbHJlYWR5IGluIHVzZWA7XG4vL1xuY29uc3Qgb2xkUGV0bmFtZT12YWxUb1BldG5hbWUuZ2V0KHZhbCk7XG5wZXRuYW1lVG9WYWwuZGVsZXRlKG9sZFBldG5hbWUpO1xudmFsVG9QZXRuYW1lLmRlbGV0ZSh2YWwpO1xuXG4vL1xucGV0bmFtZVRvVmFsLmluaXQocGV0bmFtZSx2YWwpO1xudmFsVG9QZXRuYW1lLmluaXQodmFsLHBldG5hbWUpO1xuIH07XG5cbi8qXG5cblxuXG4gICAgICovXG5jb25zdCBzdWdnZXN0UGV0bmFtZT0ocGV0bmFtZSx2YWwpPT57XG5pZih2YWxUb1BldG5hbWUuaGFzKHZhbCkpe1xuLy9cbnJldHVybiB2YWxUb1BldG5hbWUuZ2V0KHZhbCk7XG4gfVxuXG4vL1xubGV0IHVuaXF1ZVBhdGg9cGV0bmFtZTtcbmxldCBub25jZT0yO1xud2hpbGUocGV0bmFtZVRvVmFsLmhhcyh1bmlxdWVQYXRoKSl7XG4vL1xuaWYoaXNQYXRoKHBldG5hbWUpKXtcbnVuaXF1ZVBhdGg9Wy4uLnBldG5hbWUsIGAke25vbmNlfWBdO1xuIH1lbHNle1xudW5pcXVlUGF0aD0gYCR7cGV0bmFtZX0ke25vbmNlfWA7XG4gfVxubm9uY2UrPTE7XG4gfVxuXG4vL1xuLy9cbi8vXG5hZGRQZXRuYW1lKHVuaXF1ZVBhdGgsdmFsKTtcbnJldHVybiB1bmlxdWVQYXRoO1xuIH07XG5cbmNvbnN0IGRlbGV0ZVBldG5hbWU9KHBldG5hbWUpPT57XG5wZXRuYW1lVG9WYWwuaGFzKHBldG5hbWUpfHxcbkZhaWwgYHBldG5hbWUgJHtxKFxucGV0bmFtZSlcbiB9IGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IG5hbWVkLCB3b3VsZCB5b3UgbGlrZSB0byBhZGQgaXQgaW5zdGVhZD9gO1xuXG4vL1xuY29uc3QgdmFsPXBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSk7XG5wZXRuYW1lVG9WYWwuZGVsZXRlKHBldG5hbWUpO1xudmFsVG9QZXRuYW1lLmRlbGV0ZSh2YWwpO1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hcHBpbmc9aGFyZGVuKHtcbmltcGxvZGUsXG5leHBsb2RlLFxudmFsVG9QZXRuYW1lLFxudmFsVG9QYXRocyxcbnBldG5hbWVUb1ZhbCxcbmFkZFBldG5hbWUsXG5hZGRQYXRoLFxucmVuYW1lUGV0bmFtZSxcbmRlbGV0ZVBldG5hbWUsXG5zdWdnZXN0UGV0bmFtZSxcbmtpbmR9KTtcblxucGV0bmFtZUtpbmRUb01hcHBpbmcuaW5pdChraW5kLG1hcHBpbmcpO1xucmV0dXJuIG1hcHBpbmc7XG4gfTtcblxuY29uc3QgZWRnZU1hcHBpbmc9bWFrZU1hcHBpbmcoJ2VkZ2UnKTtcbmNvbnN0IHVubmFtZWRNYXBwaW5nPW1ha2VNYXBwaW5nKCd1bm5hbWVkJyk7XG5cbmNvbnN0IGFkZFRvVW5uYW1lZD0odmFsKT0+e1xudW5uYW1lZENvdW50Kz0xO1xuY29uc3QgcGxhY2Vob2xkZXI9IGB1bm5hbWVkLSR7dW5uYW1lZENvdW50fWA7XG51bm5hbWVkTWFwcGluZy5hZGRQZXRuYW1lKHBsYWNlaG9sZGVyLHZhbCk7XG5jb25zdCBwbGFjZWhvbGRlck5hbWU9aGFyZGVuKHtcbmtpbmQ6J3VubmFtZWQnLFxucGV0bmFtZTpwbGFjZWhvbGRlcn0pO1xuXG5yZXR1cm4gcGxhY2Vob2xkZXJOYW1lO1xuIH07XG5cbi8vXG4vL1xuY29uc3QgY29udmVydFZhbFRvTmFtZT0odmFsKT0+e1xuZm9yKGxldCBpPTA7aTxzZWFyY2hPcmRlci5sZW5ndGg7aSs9MSl7XG5jb25zdCBraW5kPXNlYXJjaE9yZGVyW2ldO1xuY29uc3R7dmFsVG9QZXRuYW1lfT1wZXRuYW1lS2luZFRvTWFwcGluZy5nZXQoa2luZCk7XG5pZih2YWxUb1BldG5hbWUuaGFzKHZhbCkpe1xucmV0dXJuIGhhcmRlbih7XG5raW5kLFxucGV0bmFtZTp2YWxUb1BldG5hbWUuZ2V0KHZhbCl9KTtcblxuIH1cbiB9XG4vL1xuLy9cbmlmKHVubmFtZWRNYXBwaW5nLnZhbFRvUGV0bmFtZS5oYXModmFsKSl7XG5yZXR1cm4gaGFyZGVuKHtcbmtpbmQ6J3VubmFtZWQnLFxucGV0bmFtZTp1bm5hbWVkTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KHZhbCl9KTtcblxuIH1cbi8vXG5jb25zdCBwbGFjZWhvbGRlck5hbWU9YWRkVG9Vbm5hbWVkKHZhbCk7XG5yZXR1cm4gcGxhY2Vob2xkZXJOYW1lO1xuIH07XG5cbmNvbnN0IGNvbnZlcnROYW1lVG9WYWw9KHtraW5kLHBldG5hbWV9LF9pZmFjZT11bmRlZmluZWQpPT57XG5jb25zdHtwZXRuYW1lVG9WYWx9PXBldG5hbWVLaW5kVG9NYXBwaW5nLmdldChraW5kKTtcbnJldHVybiBwZXRuYW1lVG9WYWwuZ2V0KHBldG5hbWUpO1xuIH07XG5cbmNvbnN0e3RvQ2FwRGF0YTpkZWh5ZHJhdGUsZnJvbUNhcERhdGE6aHlkcmF0ZX09bWFrZU1hcnNoYWwoXG5jb252ZXJ0VmFsVG9OYW1lLFxuY29udmVydE5hbWVUb1ZhbCxcbntcbm1hcnNoYWxOYW1lOidoeWRyYXRpb24nLFxuLy9cbi8vXG5lcnJvcklkTnVtOjMwXzAwMCxcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmh5ZHJhdGUsXG5kZWh5ZHJhdGUsXG5lZGdlTWFwcGluZyxcbi8qXG5cblxuXG5cbiAgICAgKi9cbm1ha2VNYXBwaW5nOihraW5kLGxlZ2FjeU9wdGlvbnM9dW5kZWZpbmVkKT0+e1xuY29uc3QgbWFwcGluZz1tYWtlTWFwcGluZyhraW5kLGxlZ2FjeU9wdGlvbnMpO1xuc2VhcmNoT3JkZXIucHVzaChraW5kKTtcbnJldHVybiBtYXBwaW5nO1xuIH19KTtcblxuIH07JGjNj19vbmNlLm1ha2VEZWh5ZHJhdG9yKG1ha2VEZWh5ZHJhdG9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUGF0aCI6WyJpc1BhdGgiXSwibWFrZURlaHlkcmF0b3IiOlsibWFrZURlaHlkcmF0b3IiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA7z/q6F6lAABepQAAMAAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvbGliLXdhbGxldC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL2NhY2hlIiwiQGFnb3JpYy9pbnRlcm5hbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qcyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy9lcnRwIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9uYXQiLCJAYWdvcmljL25vdGlmaWVyIiwiQGVuZG8vcHJvbWlzZS1raXQiLCJAYWdvcmljL3NtYXJ0LXdhbGxldC9zcmMvbWFyc2hhbC1jb250ZXh0cy5qcyIsIi4vaXNzdWVyVGFibGUuanMiLCIuL2xpYi1kZWh5ZHJhdGUuanMiLCIuL2ZpbmRPck1ha2VJbnZpdGF0aW9uLmpzIiwiLi9iaWdpbnRTdHJpbmdpZnkuanMiLCIuL2FjdGlvbnMuanMiLCIuL2ludGVybmFsLXR5cGVzLmpzIl0sImV4cG9ydHMiOlsibWFrZVdhbGxldFJvb3QiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQscSxGYWlsLG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yLG9iamVjdE1hcCxXYWxsZXROYW1lLHNsb3RTdHJpbmdVbnNlcmlhbGl6ZSxtYWtlTGVnYWN5TWFwLG1ha2VTY2FsYXJNYXBTdG9yZSxtYWtlU2NhbGFyV2Vha01hcFN0b3JlLG1ha2VTY2FsYXJCaWdNYXBTdG9yZSxBbW91bnRNYXRoLEUscGFzc1N0eWxlT2YsRmFyLG1hcEl0ZXJhYmxlLE5hdCxtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcixtYWtlTm90aWZpZXJLaXQsb2JzZXJ2ZUl0ZXJhdGlvbixvYnNlcnZlTm90aWZpZXIsc3Vic2NyaWJlRWFjaCxtYWtlUHJvbWlzZUtpdCxtYWtlRXhwb3J0Q29udGV4dCxtYWtlSXNzdWVyVGFibGUsbWFrZURlaHlkcmF0b3IsbWFrZUlkLGZpbmRPck1ha2VJbnZpdGF0aW9uLGJpZ2ludFN0cmluZ2lmeSxtYWtlUGF5bWVudEFjdGlvbnM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvY2FjaGVcIiwgW1tcIm1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXSxbXCJXYWxsZXROYW1lXCIsIFskaM2PX2EgPT4gKFdhbGxldE5hbWUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanNcIiwgW1tcInNsb3RTdHJpbmdVbnNlcmlhbGl6ZVwiLCBbJGjNj19hID0+IChzbG90U3RyaW5nVW5zZXJpYWxpemUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlTGVnYWN5TWFwXCIsIFskaM2PX2EgPT4gKG1ha2VMZWdhY3lNYXAgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ01hcFN0b3JlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcIm1hcEl0ZXJhYmxlXCIsIFskaM2PX2EgPT4gKG1hcEl0ZXJhYmxlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRozY9fYSA9PiAoTmF0ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXJcIiwgWyRozY9fYSA9PiAobWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIgPSAkaM2PX2EpXV0sW1wibWFrZU5vdGlmaWVyS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VOb3RpZmllcktpdCA9ICRozY9fYSldXSxbXCJvYnNlcnZlSXRlcmF0aW9uXCIsIFskaM2PX2EgPT4gKG9ic2VydmVJdGVyYXRpb24gPSAkaM2PX2EpXV0sW1wib2JzZXJ2ZU5vdGlmaWVyXCIsIFskaM2PX2EgPT4gKG9ic2VydmVOb3RpZmllciA9ICRozY9fYSldXSxbXCJzdWJzY3JpYmVFYWNoXCIsIFskaM2PX2EgPT4gKHN1YnNjcmliZUVhY2ggPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3NtYXJ0LXdhbGxldC9zcmMvbWFyc2hhbC1jb250ZXh0cy5qc1wiLCBbW1wibWFrZUV4cG9ydENvbnRleHRcIiwgWyRozY9fYSA9PiAobWFrZUV4cG9ydENvbnRleHQgPSAkaM2PX2EpXV1dXSxbXCIuL2lzc3VlclRhYmxlLmpzXCIsIFtbXCJtYWtlSXNzdWVyVGFibGVcIiwgWyRozY9fYSA9PiAobWFrZUlzc3VlclRhYmxlID0gJGjNj19hKV1dXV0sW1wiLi9saWItZGVoeWRyYXRlLmpzXCIsIFtbXCJtYWtlRGVoeWRyYXRvclwiLCBbJGjNj19hID0+IChtYWtlRGVoeWRyYXRvciA9ICRozY9fYSldXV1dLFtcIi4vZmluZE9yTWFrZUludml0YXRpb24uanNcIiwgW1tcIm1ha2VJZFwiLCBbJGjNj19hID0+IChtYWtlSWQgPSAkaM2PX2EpXV0sW1wiZmluZE9yTWFrZUludml0YXRpb25cIiwgWyRozY9fYSA9PiAoZmluZE9yTWFrZUludml0YXRpb24gPSAkaM2PX2EpXV1dXSxbXCIuL2JpZ2ludFN0cmluZ2lmeS5qc1wiLCBbW1wiYmlnaW50U3RyaW5naWZ5XCIsIFskaM2PX2EgPT4gKGJpZ2ludFN0cmluZ2lmeSA9ICRozY9fYSldXV1dLFtcIi4vYWN0aW9ucy5qc1wiLCBbW1wibWFrZVBheW1lbnRBY3Rpb25zXCIsIFskaM2PX2EgPT4gKG1ha2VQYXltZW50QWN0aW9ucyA9ICRozY9fYSldXV1dLFtcIi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VXYWxsZXRSb290LCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlV2FsbGV0Um9vdFwifSk7JGjNj19vbmNlLm1ha2VXYWxsZXRSb290KG1ha2VXYWxsZXRSb290KTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG5jb25zdCBub0FjdGlvblN0YXRlQ2hhbmdlSGFuZGxlcj0oX25ld1N0YXRlKT0+eyB9O1xuXG5jb25zdCBjbXA9KGEsYik9PntcbmlmKGE+Yil7XG5yZXR1cm4gMTtcbiB9XG5pZihhPT09Yil7XG5yZXR1cm4gMDtcbiB9XG5yZXR1cm4tMTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZVdhbGxldFJvb3Qoe1xuem9lLFxuYm9hcmQsXG5hZ29yaWNOYW1lcyxcbm5hbWVzQnlBZGRyZXNzLFxubXlBZGRyZXNzTmFtZUFkbWluLFxucHVyc2VzU3RhdGVDaGFuZ2VIYW5kbGVyPW5vQWN0aW9uU3RhdGVDaGFuZ2VIYW5kbGVyLFxuaW5ib3hTdGF0ZUNoYW5nZUhhbmRsZXI9bm9BY3Rpb25TdGF0ZUNoYW5nZUhhbmRsZXIsXG5kYXRlTm93PXVuZGVmaW5lZH0pXG57XG5hc3NlcnQobXlBZGRyZXNzTmFtZUFkbWluLCdtaXNzaW5nIG15QWRkcmVzc05hbWVBZG1pbicpO1xuXG5sZXQgbGFzdElkPTA7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhZGRNZXRhPShyZWNvcmQpPT57XG5jb25zdHttZXRhOm9sZE1ldGE9e319PXJlY29yZDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1ldGE9ey4uLm9sZE1ldGF9O1xuaWYoIW1ldGEuaWQpe1xuLy9cbmxhc3RJZCs9MTtcbm1ldGEuaWQ9bGFzdElkO1xuIH1cbmlmKGRhdGVOb3cpe1xuY29uc3Qgbm93U3RhbXA9ZGF0ZU5vdygpO1xuaWYoIW1ldGEuY3JlYXRpb25TdGFtcCl7XG4vL1xubWV0YS5jcmVhdGlvblN0YW1wPW5vd1N0YW1wO1xuIH1cbm1ldGEudXBkYXRlZFN0YW1wPW5vd1N0YW1wO1xuIH1cbnJldHVybnsuLi5yZWNvcmQsbWV0YX07XG4gfTtcblxuY29uc3QgY29udGV4dD1tYWtlRXhwb3J0Q29udGV4dCgpO1xuXG4vL1xuLy9cbmNvbnN0e21ha2VNYXBwaW5nLGRlaHlkcmF0ZSxlZGdlTWFwcGluZ309bWFrZURlaHlkcmF0b3IoKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZU1hcHBpbmc9bWFrZU1hcHBpbmcoJ3B1cnNlJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRNYXBwaW5nPW1ha2VNYXBwaW5nKCdicmFuZCcpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29udGFjdE1hcHBpbmc9bWFrZU1hcHBpbmcoXG4nY29udGFjdCcsXG57dXNlTGVnYWN5TWFwOnRydWV9Ly9cbik7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5zdGFuY2VNYXBwaW5nPW1ha2VNYXBwaW5nKCdpbnN0YW5jZScpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnN0YWxsYXRpb25NYXBwaW5nPW1ha2VNYXBwaW5nKCdpbnN0YWxsYXRpb24nKTtcblxuY29uc3QgYnJhbmRUYWJsZT1tYWtlSXNzdWVyVGFibGUoKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3VlclRvQm9hcmRJZD1tYWtlU2NhbGFyV2Vha01hcFN0b3JlKCdpc3N1ZXInKTtcblxuLy9cbmNvbnN0IGluaXRJc3N1ZXJUb0JvYXJkSWQ9YXN5bmMoaXNzdWVyLGJyYW5kKT0+e1xuaWYoaXNzdWVyVG9Cb2FyZElkLmhhcyhpc3N1ZXIpKXtcbi8vXG5yZXR1cm4gaXNzdWVyVG9Cb2FyZElkLmdldChpc3N1ZXIpO1xuIH1cblxuLy9cbmNvbnN0W2lzc3VlckJvYXJkSWQsYnJhbmRCb2FyZElkXT1hd2FpdCBQcm9taXNlLmFsbChbXG5FKGJvYXJkKS5nZXRJZChpc3N1ZXIpLFxuRShib2FyZCkuZ2V0SWQoYnJhbmQpXSk7XG5cbmlmKGlzc3VlclRvQm9hcmRJZC5oYXMoaXNzdWVyKSl7XG4vL1xucmV0dXJuIGlzc3VlclRvQm9hcmRJZC5nZXQoaXNzdWVyKTtcbiB9XG5cbi8vXG4vL1xuY29udGV4dC5lbnN1cmVCb2FyZElkKGlzc3VlckJvYXJkSWQsaXNzdWVyKTtcbmNvbnRleHQuaW5pdEJvYXJkSWQoYnJhbmRCb2FyZElkLGJyYW5kKTtcblxuLy9cbmlzc3VlclRvQm9hcmRJZC5pbml0KGlzc3Vlcixpc3N1ZXJCb2FyZElkKTtcbnJldHVybiBpc3N1ZXJCb2FyZElkO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZVRvQnJhbmQ9bWFrZVNjYWxhcldlYWtNYXBTdG9yZSgncHVyc2UnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBicmFuZFRvRGVwb3NpdEZhY2V0SWQ9bWFrZVNjYWxhck1hcFN0b3JlKCdicmFuZCcpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2U9bWFrZVNjYWxhck1hcFN0b3JlKCdicmFuZCcpO1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpZFRvT2ZmZXI9bWFrZVNjYWxhck1hcFN0b3JlKCdvZmZlcklkJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdD1tYWtlTGVnYWN5TWFwKCdpZCcpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGludml0YXRpb25IYW5kbGVUb09mZmVyUmVzdWx0PVxubWFrZVNjYWxhcldlYWtNYXBTdG9yZSgnaW52aXRhdGlvbkhhbmRsZScpO1xuXG4vL1xuY29uc3QgaWRUb0NvbXBpbGVkT2ZmZXJQPW5ldyBNYXAoKTtcbmNvbnN0IGlkVG9Db21wbGV0ZT1uZXcgTWFwKCk7XG5jb25zdCBpZFRvU2VhdD1uZXcgTWFwKCk7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZXNTdGF0ZT1uZXcgTWFwKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVyc2VzRnVsbFN0YXRlPW5ldyBNYXAoKTtcbmNvbnN0IGluYm94U3RhdGU9bmV3IE1hcCgpO1xuXG4vKlxuXG5cblxuICAgKi9cbmxldCB6b2VJbnZpdGVQdXJzZTtcblxuY29uc3QgWk9FX0lOVklURV9CUkFORF9QRVROQU1FPSd6b2UgaW52aXRlJztcblxuZnVuY3Rpb24gZ2V0U29ydGVkVmFsdWVzKG1hcCl7XG5jb25zdCBlbnRyaWVzPVsuLi5tYXAuZW50cmllcygpXTtcbi8vXG5jb25zdCB2YWx1ZXM9ZW50cmllcy5cbnNvcnQoKFtpZDFdLFtpZDJdKT0+Y21wKGlkMSxpZDIpKS5cbm1hcCgoW19pZCx2YWx1ZV0pPT52YWx1ZSk7XG5cbnJldHVybiBiaWdpbnRTdHJpbmdpZnkoaGFyZGVuKHZhbHVlcykpO1xuIH1cblxuZnVuY3Rpb24gZ2V0UHVyc2VzU3RhdGUoKXtcbnJldHVybiBnZXRTb3J0ZWRWYWx1ZXMocHVyc2VzU3RhdGUpO1xuIH1cblxuZnVuY3Rpb24gZ2V0SW5ib3hTdGF0ZSgpe1xucmV0dXJuIGdldFNvcnRlZFZhbHVlcyhpbmJveFN0YXRlKTtcbiB9XG5cbi8vXG4vL1xuLy9cbmNvbnN0IGZpbGxJblNsb3RzPXNsb3RTdHJpbmdVbnNlcmlhbGl6ZTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3R7bm90aWZpZXI6b2ZmZXJzTm90aWZpZXIsdXBkYXRlcjpvZmZlcnNVcGRhdGVyfT1tYWtlTm90aWZpZXJLaXQoXG5bXSk7XG5cblxuY29uc3R7cHVyc2VzTm90aWZpZXIsYXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyLHB1cnNlc1VwZGF0ZXJ9PSgoKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdHtub3RpZmllcjppcG4sdXBkYXRlcjppcHV9PW1ha2VOb3RpZmllcktpdChbXSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0e25vdGlmaWVyOmFwbix1cGRhdGVyOmFwdX09bWFrZU5vdGlmaWVyS2l0KFtdKTtcbi8vXG4vKlxuXG5cbiAgICAgKi9cbmNvbnN0IGlubmVyRmlsdGVyPSh7XG5icmFuZCxcbmJyYW5kQm9hcmRJZCxcbmRlcG9zaXRCb2FyZElkLFxuYnJhbmRQZXRuYW1lLFxucHVyc2VQZXRuYW1lLFxuZGlzcGxheUluZm8sXG52YWx1ZSxcbmN1cnJlbnRBbW91bnRTbG90cyxcbmN1cnJlbnRBbW91bnR9KT0+XG5cbmhhcmRlbih7XG5icmFuZCxcbmJyYW5kQm9hcmRJZCxcbi4uLihkZXBvc2l0Qm9hcmRJZCYme2RlcG9zaXRCb2FyZElkfSksXG5icmFuZFBldG5hbWUsXG5wdXJzZVBldG5hbWUsXG4uLi4oZGlzcGxheUluZm8mJntkaXNwbGF5SW5mb30pLFxudmFsdWUsXG5jdXJyZW50QW1vdW50U2xvdHMsXG5jdXJyZW50QW1vdW50fSk7XG5cbmNvbnN0IGZpbHRlcj0oc3RhdGUpPT5zdGF0ZS5tYXAoaW5uZXJGaWx0ZXIpO1xuY29uc3QgcHU9RmFyKCdwdXJzZXNVcGRhdGVyJyx7XG51cGRhdGVTdGF0ZToobmV3U3RhdGUpPT57XG5pcHUudXBkYXRlU3RhdGUobmV3U3RhdGUpO1xuYXB1LnVwZGF0ZVN0YXRlKGZpbHRlcihuZXdTdGF0ZSkpO1xuIH0sXG5maW5pc2g6KGZpbmFsU3RhdGUpPT57XG5pcHUuZmluaXNoKGZpbmFsU3RhdGUpO1xuYXB1LmZpbmlzaChmaWx0ZXIoZmluYWxTdGF0ZSkpO1xuIH0sXG5mYWlsOihyZWFzb24pPT57XG5pcHUuZmFpbChyZWFzb24pO1xuYXB1LmZhaWwocmVhc29uKTtcbiB9fSk7XG5cbnJldHVybiBoYXJkZW4oe1xucHVyc2VzTm90aWZpZXI6aXBuLFxuYXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyOmFwbixcbnB1cnNlc1VwZGF0ZXI6cHV9KTtcblxuIH0pKCk7XG5cbi8qXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVB1cnNlc1N0YXRlKHB1cnNlUGV0bmFtZSxwdXJzZSl7XG5jb25zdCBwdXJzZUtleT1wdXJzZU1hcHBpbmcuaW1wbG9kZShwdXJzZVBldG5hbWUpO1xuZm9yKGNvbnN0IGtleSBvZiBwdXJzZXNTdGF0ZS5rZXlzKCkpe1xuaWYoIXB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuaGFzKHB1cnNlTWFwcGluZy5leHBsb2RlKGtleSkpKXtcbnB1cnNlc1N0YXRlLmRlbGV0ZShrZXkpO1xuIH1cbiB9XG5jb25zdCBjdXJyZW50QW1vdW50PWF3YWl0IEUocHVyc2UpLmdldEN1cnJlbnRBbW91bnQoKTtcbmNvbnN0e3ZhbHVlLGJyYW5kfT1jdXJyZW50QW1vdW50O1xuY29uc3QgYnJhbmRQZXRuYW1lPWJyYW5kTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KGJyYW5kKTtcbmNvbnN0IGRlaHlkcmF0ZWRDdXJyZW50QW1vdW50PWRlaHlkcmF0ZShjdXJyZW50QW1vdW50KTtcbmNvbnN0IGJyYW5kQm9hcmRJZD1hd2FpdCBFKGJvYXJkKS5nZXRJZChicmFuZCk7XG5cbmxldCBkZXBvc2l0Qm9hcmRJZDtcbmlmKFxuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaGFzKGJyYW5kKSYmXG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5nZXQoYnJhbmQpPT09cHVyc2UmJlxuYnJhbmRUb0RlcG9zaXRGYWNldElkLmhhcyhicmFuZCkpXG57XG4vL1xuZGVwb3NpdEJvYXJkSWQ9YnJhbmRUb0RlcG9zaXRGYWNldElkLmdldChicmFuZCk7XG4gfVxuXG5jb25zdCBpc3N1ZXJSZWNvcmQ9XG5icmFuZFRhYmxlLmhhc0J5QnJhbmQoYnJhbmQpJiZicmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xuLypcblxuICAgICAqL1xuY29uc3QganN0YXRlPWFkZE1ldGEoe1xuLi4ucHVyc2VzU3RhdGUuZ2V0KHB1cnNlS2V5KSxcbmJyYW5kLFxuYnJhbmRCb2FyZElkLFxuLi4uKGRlcG9zaXRCb2FyZElkJiZ7ZGVwb3NpdEJvYXJkSWR9KSxcbmJyYW5kUGV0bmFtZSxcbnB1cnNlUGV0bmFtZSxcbmRpc3BsYXlJbmZvOmlzc3VlclJlY29yZCYmaXNzdWVyUmVjb3JkLmRpc3BsYXlJbmZvLFxudmFsdWUsXG5jdXJyZW50QW1vdW50U2xvdHM6ZGVoeWRyYXRlZEN1cnJlbnRBbW91bnQsXG5jdXJyZW50QW1vdW50OmZpbGxJblNsb3RzKGRlaHlkcmF0ZWRDdXJyZW50QW1vdW50KX0pO1xuXG5wdXJzZXNTdGF0ZS5zZXQocHVyc2VLZXksanN0YXRlKTtcblxucHVyc2VzRnVsbFN0YXRlLnNldChcbnB1cnNlLFxuaGFyZGVuKHtcbi4uLmpzdGF0ZSxcbnB1cnNlLFxuYnJhbmQsXG5hY3Rpb25zOkZhcigncHVyc2UuYWN0aW9ucycse1xuLy9cbiAgICAgIGFzeW5jIHNlbmQocmVjZWl2ZXJQLHNlbmRWYWx1ZSl7XG5jb25zdCBhbW91bnQ9QW1vdW50TWF0aC5tYWtlKGJyYW5kLHNlbmRWYWx1ZSk7XG5jb25zdCBwYXltZW50PWF3YWl0IEUocHVyc2UpLndpdGhkcmF3KGFtb3VudCk7XG50cnl7XG5hd2FpdCBFKHJlY2VpdmVyUCkucmVjZWl2ZShwYXltZW50KTtcbiB9Y2F0Y2goZSl7XG4vL1xuYXdhaXQgRShwdXJzZSkuZGVwb3NpdChwYXltZW50KTtcbnRocm93IGU7XG4gfVxuIH0sXG4gICAgICBhc3luYyByZWNlaXZlKHBheW1lbnRQKXtcbmNvbnN0IHBheW1lbnQ9YXdhaXQgcGF5bWVudFA7XG5yZXR1cm4gRShwdXJzZSkuZGVwb3NpdChwYXltZW50KTtcbiB9LFxuZGVwb3NpdChwYXltZW50LGFtb3VudD11bmRlZmluZWQpe1xucmV0dXJuIEUocHVyc2UpLmRlcG9zaXQocGF5bWVudCxhbW91bnQpO1xuIH19KX0pKTtcblxuXG5cbnB1cnNlc1VwZGF0ZXIudXBkYXRlU3RhdGUoWy4uLnB1cnNlc0Z1bGxTdGF0ZS52YWx1ZXMoKV0pO1xucHVyc2VzU3RhdGVDaGFuZ2VIYW5kbGVyKGdldFB1cnNlc1N0YXRlKCkpO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWxsUHVyc2VTdGF0ZSgpe1xucmV0dXJuIFByb21pc2UuYWxsKFxubWFwSXRlcmFibGUocHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCksKFtwZXRuYW1lLHB1cnNlXSk9PlxudXBkYXRlUHVyc2VzU3RhdGUocGV0bmFtZSxwdXJzZSkpKTtcblxuXG4gfVxuXG5jb25zdCBkaXNwbGF5PSh2YWx1ZSk9PmZpbGxJblNsb3RzKGRlaHlkcmF0ZShoYXJkZW4odmFsdWUpKSk7XG5cbmNvbnN0IGV4cGFuZEludml0YXRpb25CcmFuZHM9YXN5bmMoaW52aXRhdGlvbkRldGFpbHMpPT57XG4vL1xuY29uc3R7ZmVlfT1pbnZpdGF0aW9uRGV0YWlscztcbmlmKCFmZWUpe1xucmV0dXJuIGludml0YXRpb25EZXRhaWxzO1xuIH1cblxuLy9cbmNvbnN0IGRpc3BsYXlJbmZvPWF3YWl0IEUoRSh6b2UpLmdldEZlZUlzc3VlcigpKS5nZXREaXNwbGF5SW5mbygpO1xuY29uc3QgYXVnbWVudGVkRGV0YWlscz17XG4uLi5pbnZpdGF0aW9uRGV0YWlscyxcbmZlZTp7Li4uZmVlLGRpc3BsYXlJbmZvfX07XG5cbnJldHVybiBkaXNwbGF5KGF1Z21lbnRlZERldGFpbHMpO1xuIH07XG5cbmNvbnN0IGRpc3BsYXlQcm9wb3NhbD0ocHJvcG9zYWxUZW1wbGF0ZSk9PntcbmNvbnN0e1xud2FudCxcbmdpdmUsXG5leGl0PXtvbkRlbWFuZDpudWxsfSxcbmFyZ3VtZW50czphcmdzfT1cbnByb3Bvc2FsVGVtcGxhdGU7XG5jb25zdCBkaXNwbGF5UmVjb3JkPShwdXJzZVBldG5hbWVWYWx1ZUtleXdvcmRSZWNvcmQpPT57XG5pZihwdXJzZVBldG5hbWVWYWx1ZUtleXdvcmRSZWNvcmQ9PT11bmRlZmluZWQpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5yZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuT2JqZWN0LmVudHJpZXMocHVyc2VQZXRuYW1lVmFsdWVLZXl3b3JkUmVjb3JkKS5tYXAoXG4oW2tleXdvcmQse3B1cnNlUGV0bmFtZSx2YWx1ZSxhbW91bnQscHVyc2V9XSk9PntcbmlmKCFhbW91bnQpe1xucHVyc2U9Z2V0UHVyc2UocHVyc2VQZXRuYW1lKTtcbmFtb3VudD17dmFsdWV9O1xuIH1lbHNle1xucHVyc2VQZXRuYW1lPXB1cnNlTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KHB1cnNlKTtcbiB9XG5cbmNvbnN0IGJyYW5kPXB1cnNlVG9CcmFuZC5nZXQocHVyc2UpO1xuY29uc3QgaXNzdWVyUmVjb3JkPVxuYnJhbmRUYWJsZS5oYXNCeUJyYW5kKGJyYW5kKSYmYnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcbmFtb3VudD1oYXJkZW4oe1xuLi4uYW1vdW50LFxuYnJhbmQsXG5kaXNwbGF5SW5mbzppc3N1ZXJSZWNvcmQmJmlzc3VlclJlY29yZC5kaXNwbGF5SW5mb30pO1xuXG5jb25zdCBkaXNwbGF5QW1vdW50PWRpc3BsYXkoYW1vdW50KTtcbnJldHVybltcbmtleXdvcmQsXG57XG5wdXJzZVBldG5hbWUsXG5wdXJzZSxcbmFtb3VudDpkaXNwbGF5QW1vdW50fV07XG5cblxuIH0pKTtcblxuXG4gfTtcbmNvbnN0IHByb3Bvc2FsRm9yRGlzcGxheT17XG53YW50OmRpc3BsYXlSZWNvcmQod2FudCksXG5naXZlOmRpc3BsYXlSZWNvcmQoZ2l2ZSksXG5leGl0fTtcblxuaWYoYXJncyE9PXVuZGVmaW5lZCl7XG5wcm9wb3NhbEZvckRpc3BsYXkuYXJndW1lbnRzPWRpc3BsYXkoYXJncyk7XG4gfVxucmV0dXJuIHByb3Bvc2FsRm9yRGlzcGxheTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcnVuZU9mZmVyV2hlbkluYWN0aXZlPShpZCk9PntcbmFzc2VydChpbmJveFN0YXRlLmhhcyhpZCkpO1xuY29uc3Qgb2ZmZXI9aW5ib3hTdGF0ZS5nZXQoaWQpO1xuY29uc3R7c3RhdHVzfT1vZmZlcjtcblxuc3dpdGNoKHN0YXR1cyl7XG5jYXNlJ2RlY2xpbmUnOlxuY2FzZSdjYW5jZWwnOlxuY2FzZSdyZWplY3RlZCc6XG5pbmJveFN0YXRlLmRlbGV0ZShpZCk7XG5yZXR1cm47XG5jYXNlJ2FjY2VwdCc6XG5hc3NlcnQoaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5oYXMoaWQpKTtcbnZvaWQgRS53aGVuKGlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQuZ2V0KGlkKS5wcm9taXNlLChyZXN1bHQpPT57XG5jb25zdCBzdHlsZT1wYXNzU3R5bGVPZihyZXN1bHQpO1xuY29uc3QgYWN0aXZlPVxuc3R5bGU9PT0ncmVtb3RhYmxlJ3x8XG5zdHlsZT09PSdjb3B5UmVjb3JkJyYmJ2ludml0YXRpb25NYWtlcnMnaW4gcmVzdWx0O1xuaWYoIWFjdGl2ZSl7XG5pbmJveFN0YXRlLmRlbGV0ZShpZCk7XG4gfVxuIH0pO1xuYnJlYWs7XG5jYXNlJ3BlbmRpbmcnOlxuY2FzZSdjb21wbGV0ZSc6XG5kZWZhdWx0On1cblxuIH07XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUluYm94U3RhdGUoaWQsb2ZmZXIsZG9QdXNoPXRydWUpe1xuLy9cbmNvbnN0e3Byb3Bvc2FsVGVtcGxhdGV9PW9mZmVyO1xuY29uc3R7aW5zdGFuY2UsaW5zdGFsbGF0aW9uLGludml0YXRpb25EZXRhaWxzfT1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmlmKCFpbnN0YW5jZXx8IWluc3RhbGxhdGlvbil7XG4vL1xuLy9cbnJldHVybjtcbiB9XG5jb25zdCBpbnN0YW5jZURpc3BsYXk9ZGlzcGxheShpbnN0YW5jZSk7XG5jb25zdCBpbnN0YWxsYXRpb25EaXNwbGF5PWRpc3BsYXkoaW5zdGFsbGF0aW9uKTtcbmNvbnN0IGFscmVhZHlEaXNwbGF5ZWQ9XG5pbmJveFN0YXRlLmhhcyhpZCkmJmluYm94U3RhdGUuZ2V0KGlkKS5wcm9wb3NhbEZvckRpc3BsYXk7XG5cbmNvbnN0IGF1Z21lbnRlZEludml0YXRpb25EZXRhaWxzPVxuYXdhaXQgZXhwYW5kSW52aXRhdGlvbkJyYW5kcyhpbnZpdGF0aW9uRGV0YWlscyk7XG5cbmNvbnN0IG9mZmVyRm9yRGlzcGxheT17XG4uLi5vZmZlcixcbi8vXG4vL1xuLy9cbmFjdGlvbnM6dW5kZWZpbmVkLFxuaW5zdGFsbGF0aW9uOnVuZGVmaW5lZCxcbmluc3RhbmNlOnVuZGVmaW5lZCxcbnByb3Bvc2FsVGVtcGxhdGUsXG5pbnZpdGF0aW9uRGV0YWlsczpkaXNwbGF5KGF1Z21lbnRlZEludml0YXRpb25EZXRhaWxzKSxcbmluc3RhbmNlUGV0bmFtZTppbnN0YW5jZURpc3BsYXkucGV0bmFtZSxcbmluc3RhbGxhdGlvblBldG5hbWU6aW5zdGFsbGF0aW9uRGlzcGxheS5wZXRuYW1lLFxucHJvcG9zYWxGb3JEaXNwbGF5OmRpc3BsYXlQcm9wb3NhbChhbHJlYWR5RGlzcGxheWVkfHxwcm9wb3NhbFRlbXBsYXRlKX07XG5cblxuaW5ib3hTdGF0ZS5zZXQoaWQsb2ZmZXJGb3JEaXNwbGF5KTtcbmlmKGRvUHVzaCl7XG4vL1xub2ZmZXJzVXBkYXRlci51cGRhdGVTdGF0ZShbb2ZmZXJGb3JEaXNwbGF5XSk7XG5pbmJveFN0YXRlQ2hhbmdlSGFuZGxlcihnZXRJbmJveFN0YXRlKCkpO1xuIH1cbnBydW5lT2ZmZXJXaGVuSW5hY3RpdmUoaWQpO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWxsSW5ib3hTdGF0ZSgpe1xuYXdhaXQgUHJvbWlzZS5hbGwoXG5BcnJheS5mcm9tKGluYm94U3RhdGUuZW50cmllcygpKS5tYXAoKFtpZCxvZmZlcl0pPT5cbi8vXG51cGRhdGVJbmJveFN0YXRlKGlkLG9mZmVyLGZhbHNlKSkpO1xuXG5cbi8vXG5vZmZlcnNVcGRhdGVyLnVwZGF0ZVN0YXRlKFsuLi5pbmJveFN0YXRlLnZhbHVlcygpXSk7XG5pbmJveFN0YXRlQ2hhbmdlSGFuZGxlcihnZXRJbmJveFN0YXRlKCkpO1xuIH1cblxuY29uc3R7dXBkYXRlcjppc3N1ZXJzVXBkYXRlcixub3RpZmllcjppc3N1ZXJzTm90aWZpZXJ9PVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5tYWtlTm90aWZpZXJLaXQoW10pO1xuXG5cbmZ1bmN0aW9uIHVwZGF0ZUFsbElzc3VlcnNTdGF0ZSgpe1xuaXNzdWVyc1VwZGF0ZXIudXBkYXRlU3RhdGUoXG5bLi4uYnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCldLm1hcCgoW3BldG5hbWUsYnJhbmRdKT0+e1xuY29uc3QgaXNzdWVyUmVjb3JkPWJyYW5kVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG5yZXR1cm5bXG5wZXRuYW1lLFxue1xuLi4uaXNzdWVyUmVjb3JkLFxuaXNzdWVyQm9hcmRJZDppc3N1ZXJUb0JvYXJkSWQuZ2V0KGlzc3VlclJlY29yZC5pc3N1ZXIpfV07XG5cblxuIH0pKTtcblxuIH1cblxuLy9cbi8vXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVBbGxTdGF0ZSgpe1xudXBkYXRlQWxsSXNzdWVyc1N0YXRlKCk7XG5hd2FpdCB1cGRhdGVBbGxQdXJzZVN0YXRlKCk7XG5hd2FpdCB1cGRhdGVBbGxJbmJveFN0YXRlKCk7XG4gfVxuXG4vL1xuLy9cbmZ1bmN0aW9uIHVwZGF0ZU9yUmVzdWJzY3JpYmUoaWQsc2VhdCx1cGRhdGUpe1xuY29uc3R7dXBkYXRlQ291bnR9PXVwZGF0ZTtcbmFzc2VydCh1cGRhdGVDb3VudD09PXVuZGVmaW5lZCk7XG5pZFRvU2VhdC5kZWxldGUoaWQpO1xuXG5jb25zdCBvZmZlcj1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmNvbnN0IGNvbXBsZXRlZE9mZmVyPWFkZE1ldGEoe1xuLi4ub2ZmZXIsXG5zdGF0dXM6J2NvbXBsZXRlJ30pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLGNvbXBsZXRlZE9mZmVyKTtcbnZvaWQgdXBkYXRlSW5ib3hTdGF0ZShpZCxjb21wbGV0ZWRPZmZlcik7XG4gfVxuXG4vKlxuXG5cblxuXG4gICAqL1xuZnVuY3Rpb24gc3Vic2NyaWJlVG9VcGRhdGVzKGlkLHNlYXQpe1xucmV0dXJuIEUoRShzZWF0KS5nZXRFeGl0U3Vic2NyaWJlcigpKS5cbnN1YnNjcmliZUFmdGVyKCkuXG50aGVuKCh1cGRhdGUpPT51cGRhdGVPclJlc3Vic2NyaWJlKGlkLHNlYXQsdXBkYXRlKSk7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlT2ZmZXIoY29tcGlsZWRPZmZlclApe1xuLy9cbi8vXG4vL1xuY29uc3R7XG5pbnZpdGVQLFxucHVyc2VLZXl3b3JkUmVjb3JkLFxucHJvcG9zYWwsXG5hcmd1bWVudHM6YXJnc309XG5hd2FpdCBjb21waWxlZE9mZmVyUDtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBheW1lbnRUb1B1cnNlPW5ldyBNYXAoKTtcblxuLy9cbi8vXG5jb25zdCBrZXl3b3JkUGF5bWVudFBzPU9iamVjdC5lbnRyaWVzKHByb3Bvc2FsLmdpdmV8fGhhcmRlbih7fSkpLm1hcChcbmFzeW5jKFtrZXl3b3JkLGFtb3VudF0pPT57XG5jb25zdCBwdXJzZT1wdXJzZUtleXdvcmRSZWNvcmRba2V5d29yZF07XG5wdXJzZSE9PXVuZGVmaW5lZHx8XG5GYWlsIGBwdXJzZSB3YXMgbm90IGZvdW5kIGZvciBrZXl3b3JkICR7cShrZXl3b3JkKX1gO1xuXG5jb25zdCBwYXltZW50PWF3YWl0IEUocHVyc2UpLndpdGhkcmF3KGFtb3VudCk7XG5wYXltZW50VG9QdXJzZS5zZXQocGF5bWVudCxwdXJzZSk7XG5yZXR1cm5ba2V5d29yZCxwYXltZW50XTtcbiB9KTtcblxuXG4vL1xuLy9cbmNvbnN0IHRyeVJlY2xhaW1pbmdXaXRoZHJhd25QYXltZW50cz0oKT0+XG4vL1xuLy9cblByb21pc2UuYWxsU2V0dGxlZChcbmtleXdvcmRQYXltZW50UHMubWFwKGFzeW5jKGtleXdvcmRQYXltZW50UCk9Pntcbi8vXG4vL1xuY29uc3RbX2tleXdvcmQscGF5bWVudF09YXdhaXQga2V5d29yZFBheW1lbnRQO1xuXG4vL1xuY29uc3QgcHVyc2U9cGF5bWVudFRvUHVyc2UuZ2V0KHBheW1lbnQpO1xuaWYocHVyc2U9PT11bmRlZmluZWQpe1xuLy9cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuXG4vL1xudHJ5e1xucmV0dXJuIGFkZFBheW1lbnQocGF5bWVudCxwdXJzZSk7XG4gfWZpbmFsbHl7XG4vL1xucGF5bWVudFRvUHVyc2UuZGVsZXRlKHBheW1lbnQpO1xuIH1cbiB9KSk7XG5cblxuLy9cbi8vXG5jb25zdCB3aXRoZHJhd0FsbFBheW1lbnRzPVByb21pc2UuYWxsKGtleXdvcmRQYXltZW50UHMpO1xud2l0aGRyYXdBbGxQYXltZW50cy5jYXRjaCh0cnlSZWNsYWltaW5nV2l0aGRyYXduUGF5bWVudHMpO1xuXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbmNvbnN0IHBheW1lbnRLZXl3b3Jkcz1hd2FpdCB3aXRoZHJhd0FsbFBheW1lbnRzO1xuXG5jb25zdCBwYXltZW50S2V5d29yZFJlY29yZD1oYXJkZW4oT2JqZWN0LmZyb21FbnRyaWVzKHBheW1lbnRLZXl3b3JkcykpO1xuXG5jb25zdCBzZWF0PUUoem9lKS5vZmZlcihcbmludml0ZVAsXG5oYXJkZW4ocHJvcG9zYWwpLFxucGF5bWVudEtleXdvcmRSZWNvcmQsXG5hcmdzKTtcblxuLy9cbi8vXG52b2lkIHNlYXQuZmluYWxseSh0cnlSZWNsYWltaW5nV2l0aGRyYXduUGF5bWVudHMpO1xuXG4vL1xuLy9cbmNvbnN0IGRlcG9zaXRlZFA9RShzZWF0KS5cbmdldFBheW91dHMoKS5cbnRoZW4oKHBheW91dE9iaik9PntcbnJldHVybiBQcm9taXNlLmFsbChcbk9iamVjdC5lbnRyaWVzKHBheW91dE9iaikubWFwKChba2V5d29yZCxwYXlvdXRQXSk9Pntcbi8vXG4vL1xuY29uc3QgcHVyc2VPclVuZGVmaW5lZD1wdXJzZUtleXdvcmRSZWNvcmRba2V5d29yZF07XG5cbnJldHVybiBhZGRQYXltZW50KHBheW91dFAscHVyc2VPclVuZGVmaW5lZCk7XG4gfSkpO1xuXG4gfSk7XG5cbi8vXG4vL1xuLy9cbnZvaWQgZGVwb3NpdGVkUC5maW5hbGx5KHRyeVJlY2xhaW1pbmdXaXRoZHJhd25QYXltZW50cyk7XG5cbi8vXG4vL1xucmV0dXJue2RlcG9zaXRlZFAsc2VhdH07XG4gfVxuXG4vL1xuXG5jb25zdCBhZGRJc3N1ZXI9YXN5bmMocGV0bmFtZUZvckJyYW5kLGlzc3VlclAsbWFrZVB1cnNlPWZhbHNlKT0+e1xuY29uc3QgaXNzdWVyPWF3YWl0IGlzc3VlclA7XG5jb25zdCByZWNQPWJyYW5kVGFibGUuaGFzQnlJc3N1ZXIoaXNzdWVyKT9cbmJyYW5kVGFibGUuZ2V0QnlJc3N1ZXIoaXNzdWVyKTpcbmJyYW5kVGFibGUuaW5pdElzc3Vlcihpc3N1ZXIsYWRkTWV0YSk7XG5jb25zdHticmFuZH09YXdhaXQgcmVjUDtcbmF3YWl0IGluaXRJc3N1ZXJUb0JvYXJkSWQoaXNzdWVyLGJyYW5kKTtcbmNvbnN0IGFkZEJyYW5kUGV0bmFtZT0oKT0+e1xubGV0IHA7XG5jb25zdCBhbHJlYWR5PWJyYW5kTWFwcGluZy52YWxUb1BldG5hbWUuaGFzKGJyYW5kKTtcbnBldG5hbWVGb3JCcmFuZD1icmFuZE1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZUZvckJyYW5kLGJyYW5kKTtcbmlmKCFhbHJlYWR5JiZtYWtlUHVyc2Upe1xucD1tYWtlRW1wdHlQdXJzZShwZXRuYW1lRm9yQnJhbmQscGV0bmFtZUZvckJyYW5kLHRydWUpO1xuIH1lbHNle1xucD1Qcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiB9XG5yZXR1cm4gRS53aGVuKHAsKF8pPT5wZXRuYW1lRm9yQnJhbmQpO1xuIH07XG5yZXR1cm4gYWRkQnJhbmRQZXRuYW1lKCkudGhlbihhc3luYyhicmFuZE5hbWUpPT57XG5hd2FpdCB1cGRhdGVBbGxJc3N1ZXJzU3RhdGUoKTtcbnJldHVybiBicmFuZE5hbWU7XG4gfSk7XG4gfTtcblxuY29uc3QgcHVibGlzaElzc3Vlcj1hc3luYyhicmFuZCk9PntcbmNvbnN0e2lzc3Vlcn09YnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcbmNvbnN0IGlzc3VlckJvYXJkSWQ9YXdhaXQgaW5pdElzc3VlclRvQm9hcmRJZChpc3N1ZXIsYnJhbmQpO1xudXBkYXRlQWxsSXNzdWVyc1N0YXRlKCk7XG5yZXR1cm4gaXNzdWVyQm9hcmRJZDtcbiB9O1xuXG5jb25zdHt1cGRhdGVyOmNvbnRhY3RzVXBkYXRlcixub3RpZmllcjpjb250YWN0c05vdGlmaWVyfT1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5tYWtlTm90aWZpZXJLaXQoW10pO1xuXG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgYWRkQ29udGFjdD1hc3luYyhwZXRuYW1lLGFjdGlvbnMsYWRkcmVzcz11bmRlZmluZWQpPT57XG4vL1xuY29uc3QgYWxyZWFkeT1hd2FpdCBFKGJvYXJkKS5oYXMoYWN0aW9ucyk7XG4vKiAgICAgICAgICAgICAgKi9cbmxldCBkZXBvc2l0RmFjZXQ7XG5pZihhbHJlYWR5KXtcbmRlcG9zaXRGYWNldD1hY3Rpb25zO1xuIH1lbHNle1xuZGVwb3NpdEZhY2V0PUZhcihXYWxsZXROYW1lLmRlcG9zaXRGYWNldCx7XG5yZWNlaXZlKHBheW1lbnRQKXtcbnJldHVybiBFKGFjdGlvbnMpLnJlY2VpdmUocGF5bWVudFApO1xuIH19KTtcblxuIH1cbmNvbnN0IGRlcG9zaXRCb2FyZElkPWF3YWl0IEUoYm9hcmQpLmdldElkKGRlcG9zaXRGYWNldCk7XG5jb25zdCBmb3VuZD1bLi4uY29udGFjdE1hcHBpbmcucGV0bmFtZVRvVmFsLmVudHJpZXMoKV0uZmluZChcbihbX3BuLHtkZXBvc2l0Qm9hcmRJZDpkYmlkfV0pPT5kZXBvc2l0Qm9hcmRJZD09PWRiaWQpO1xuXG4hZm91bmR8fFxuRmFpbCBgJHtxKGZvdW5kJiZmb3VuZFswXSl9IGlzIGFscmVhZHkgdGhlIHBldG5hbWUgZm9yIGJvYXJkIElEICR7cShcbmRlcG9zaXRCb2FyZElkKVxuIH1gO1xuXG5jb25zdCBjb250YWN0PWhhcmRlbihcbmFkZE1ldGEoe1xuYWN0aW9ucyxcbmFkZHJlc3MsXG5kZXBvc2l0Qm9hcmRJZH0pKTtcblxuXG5cbmNvbnRhY3RNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKHBldG5hbWUsY29udGFjdCk7XG5jb250YWN0c1VwZGF0ZXIudXBkYXRlU3RhdGUoWy4uLmNvbnRhY3RNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCldKTtcbnJldHVybiBjb250YWN0O1xuIH07XG5cbmNvbnN0IGFkZEluc3RhbmNlPShwZXRuYW1lLGluc3RhbmNlSGFuZGxlKT0+e1xuLy9cbi8vXG4vL1xucGV0bmFtZT1pbnN0YW5jZU1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZSxpbnN0YW5jZUhhbmRsZSk7XG4vL1xudm9pZCB1cGRhdGVBbGxTdGF0ZSgpO1xucmV0dXJuIGBpbnN0YW5jZSAke3EocGV0bmFtZSl9IHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB3YWxsZXRgO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBpbnRlcm5hbFVuc2FmZUltcG9ydFB1cnNlPWFzeW5jKFxuYnJhbmRQZXRuYW1lLFxucGV0bmFtZUZvclB1cnNlLFxuZGVmYXVsdEF1dG9EZXBvc2l0LFxucHVyc2VUb0ltcG9ydCk9Plxue1xuY29uc3QgYnJhbmQ9YnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQoYnJhbmRQZXRuYW1lKTtcbmNvbnN0e2lzc3Vlcn09YnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcblxuLyogICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1cnNlPWF3YWl0KHB1cnNlVG9JbXBvcnR8fEUoaXNzdWVyKS5tYWtlRW1wdHlQdXJzZSgpKTtcblxucHVyc2VUb0JyYW5kLmluaXQocHVyc2UsYnJhbmQpO1xucGV0bmFtZUZvclB1cnNlPXB1cnNlTWFwcGluZy5zdWdnZXN0UGV0bmFtZShwZXRuYW1lRm9yUHVyc2UscHVyc2UpO1xuXG5pZihkZWZhdWx0QXV0b0RlcG9zaXQmJiFicmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5oYXMoYnJhbmQpKXtcbi8vXG4vL1xuYXdhaXQgZG9FbmFibGVBdXRvRGVwb3NpdChwZXRuYW1lRm9yUHVyc2UsZmFsc2UpO1xuIH1cblxuYXdhaXQgdXBkYXRlUHVyc2VzU3RhdGUocGV0bmFtZUZvclB1cnNlLHB1cnNlKTtcblxuLy9cbnZvaWQgb2JzZXJ2ZU5vdGlmaWVyKEUocHVyc2UpLmdldEN1cnJlbnRBbW91bnROb3RpZmllcigpLHtcbnVwZGF0ZVN0YXRlKF9iYWxhbmNlKXtcbnVwZGF0ZVB1cnNlc1N0YXRlKHB1cnNlTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KHB1cnNlKSxwdXJzZSkuY2F0Y2goXG4oZSk9PmNvbnNvbGUuZXJyb3IoJ2Nhbm5vdCB1cGRhdGVTdGF0ZScsZSkpO1xuXG4gfSxcbmZhaWwocmVhc29uKXtcbmNvbnNvbGUuZXJyb3IoIGBmYWlsZWQgdXBkYXRlU3RhdGUgb2JzZXJ2ZXJgLHJlYXNvbik7XG4gfX0pO1xuXG5cbnJldHVybiBwZXRuYW1lRm9yUHVyc2U7XG4gfTtcblxuLy9cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZUVtcHR5UHVyc2U9KFxuYnJhbmRQZXRuYW1lLFxucGV0bmFtZUZvclB1cnNlLFxuZGVmYXVsdEF1dG9EZXBvc2l0PXRydWUpPT5cblxuaW50ZXJuYWxVbnNhZmVJbXBvcnRQdXJzZShcbmJyYW5kUGV0bmFtZSxcbnBldG5hbWVGb3JQdXJzZSxcbmRlZmF1bHRBdXRvRGVwb3NpdCxcbnVuZGVmaW5lZCk7XG5cblxuLypcblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gZGVwb3NpdChwdXJzZVBldG5hbWUscGF5bWVudCl7XG5jb25zdCBwdXJzZT1wdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldChwdXJzZVBldG5hbWUpO1xucmV0dXJuIEUocHVyc2UpLmRlcG9zaXQocGF5bWVudCk7XG4gfVxuXG5mdW5jdGlvbiBnZXRQdXJzZXMoKXtcbnJldHVyblsuLi5wdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmVudHJpZXMoKV07XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmZ1bmN0aW9uIGdldFB1cnNlKHB1cnNlUGV0bmFtZSl7XG5yZXR1cm4gcHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocHVyc2VQZXRuYW1lKTtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnVuY3Rpb24gZ2V0UHVyc2VJc3N1ZXIocHVyc2VQZXRuYW1lKXtcbmNvbnN0IHB1cnNlPXB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHB1cnNlUGV0bmFtZSk7XG5jb25zdCBicmFuZD1wdXJzZVRvQnJhbmQuZ2V0KHB1cnNlKTtcbmNvbnN0e2lzc3Vlcn09YnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcbnJldHVybiBpc3N1ZXI7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnVuY3Rpb24gZ2V0T2ZmZXJzKHtvcmlnaW49bnVsbH09e30pe1xuLy9cbnJldHVyblsuLi5pZFRvT2ZmZXIuZW50cmllcygpXS5cbmZpbHRlcihcbihbX2lkLG9mZmVyXSk9Plxub3JpZ2luPT09bnVsbHx8XG5vZmZlci5yZXF1ZXN0Q29udGV4dCYmb2ZmZXIucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbj09PW9yaWdpbikuXG5cbnNvcnQoKFtpZDFdLFtpZDJdKT0+Y21wKGlkMSxpZDIpKS5cbm1hcCgoW19pZCxvZmZlcl0pPT5oYXJkZW4ob2ZmZXIpKTtcbiB9XG5cbmNvbnN0IGNvbXBpbGVQcm9wb3NhbD0ocHJvcG9zYWxUZW1wbGF0ZSk9PntcbmNvbnN0e1xud2FudD1oYXJkZW4oe30pLFxuZ2l2ZT1oYXJkZW4oe30pLFxuZXhpdD17b25EZW1hbmQ6bnVsbH0sXG5hcmd1bWVudHM6YXJnc309XG5wcm9wb3NhbFRlbXBsYXRlO1xuXG5jb25zdCBwdXJzZUtleXdvcmRSZWNvcmQ9e307XG5cbmNvbnN0IGNvbXBpbGU9KGFtb3VudEtleXdvcmRSZWNvcmQpPT57XG5yZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuT2JqZWN0LmVudHJpZXMoYW1vdW50S2V5d29yZFJlY29yZCkubWFwKFxuKFtrZXl3b3JkLHtwdXJzZVBldG5hbWUsdmFsdWV9XSk9Pntcbi8vXG5pZih0eXBlb2YgdmFsdWU9PT0nbnVtYmVyJyl7XG52YWx1ZT1OYXQodmFsdWUpO1xuIH1cbmNvbnN0IHB1cnNlPWdldFB1cnNlKHB1cnNlUGV0bmFtZSk7XG5wdXJzZUtleXdvcmRSZWNvcmRba2V5d29yZF09cHVyc2U7XG5jb25zdCBicmFuZD1wdXJzZVRvQnJhbmQuZ2V0KHB1cnNlKTtcblxucmV0dXJuW2tleXdvcmQse2JyYW5kLHZhbHVlfV07XG4gfSkpO1xuXG5cbiB9O1xuXG5jb25zdCBwcm9wb3NhbD17XG53YW50OmNvbXBpbGUod2FudCksXG5naXZlOmNvbXBpbGUoZ2l2ZSksXG5leGl0fTtcblxuXG5yZXR1cm57cHJvcG9zYWwsYXJndW1lbnRzOmFyZ3MscHVyc2VLZXl3b3JkUmVjb3JkfTtcbiB9O1xuXG5jb25zdCBjb21waWxlT2ZmZXI9YXN5bmMob2ZmZXIpPT57XG5jb25zdHtcbnByb3Bvc2FsLFxucHVyc2VLZXl3b3JkUmVjb3JkLFxuYXJndW1lbnRzOmFyZ3N9PVxuY29tcGlsZVByb3Bvc2FsKG9mZmVyLnByb3Bvc2FsVGVtcGxhdGUpO1xuXG5jb25zdCB6b2VJc3N1ZXI9aXNzdWVyTWFuYWdlci5nZXQoWk9FX0lOVklURV9CUkFORF9QRVROQU1FKTtcbmNvbnN0e2JyYW5kOmludml0YXRpb25CcmFuZH09YnJhbmRUYWJsZS5nZXRCeUlzc3Vlcih6b2VJc3N1ZXIpO1xuY29uc3QgaW52aXRhdGlvblA9ZmluZE9yTWFrZUludml0YXRpb24oXG5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LFxuYm9hcmQsXG56b2UsXG56b2VJbnZpdGVQdXJzZSxcbmludml0YXRpb25CcmFuZCxcbm9mZmVyKTtcblxuXG5jb25zdCBpbnZpdGF0aW9uRGV0YWlscz1hd2FpdCBFKHpvZSkuZ2V0SW52aXRhdGlvbkRldGFpbHMoaW52aXRhdGlvblApO1xuY29uc3R7aW5zdGFsbGF0aW9uLGluc3RhbmNlfT1pbnZpdGF0aW9uRGV0YWlscztcblxuY29uc3QgY29tcGlsZWQ9e1xuYXJndW1lbnRzOmFyZ3MsXG5wcm9wb3NhbCxcbmludml0ZVA6aW52aXRhdGlvblAsXG5wdXJzZUtleXdvcmRSZWNvcmQsXG5pbnZpdGF0aW9uRGV0YWlscyxcbmluc3RhbGxhdGlvbixcbmluc3RhbmNlfTtcblxucmV0dXJuIGNvbXBpbGVkO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRhcHBPcmlnaW5zPW1ha2VTY2FsYXJNYXBTdG9yZSgnZGFwcE9yaWdpbicpO1xuY29uc3R7bm90aWZpZXI6ZGFwcHNOb3RpZmllcix1cGRhdGVyOmRhcHBzVXBkYXRlcn09XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZU5vdGlmaWVyS2l0KFtdKTtcblxuY29uc3QgdXBkYXRlRGFwcD0oZGFwcFJlY29yZCk9PntcbmhhcmRlbihhZGRNZXRhKGRhcHBSZWNvcmQpKTtcbmRhcHBPcmlnaW5zLnNldChkYXBwUmVjb3JkLm9yaWdpbixkYXBwUmVjb3JkKTtcbmRhcHBzVXBkYXRlci51cGRhdGVTdGF0ZShbLi4uZGFwcE9yaWdpbnMudmFsdWVzKCldKTtcbiB9O1xuXG5jb25zdCBkZWxldGVEYXBwPSh7b3JpZ2lufSk9PntcbmRhcHBPcmlnaW5zLmRlbGV0ZShvcmlnaW4pO1xuZGFwcHNVcGRhdGVyLnVwZGF0ZVN0YXRlKFsuLi5kYXBwT3JpZ2lucy52YWx1ZXMoKV0pO1xuIH07XG5cbmNvbnN0IHNoYXJlZENhY2hlQ29vcmRpbmF0b3I9bWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3IoXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmUoIGBzaGFyZWQgY2FjaGVgKSk7XG5cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckRhcHBBcHByb3ZhbChcbnN1Z2dlc3RlZFBldG5hbWUsXG5vcmlnaW4sXG5ub3RZZXRFbmFibGVkPSgpPT57IH0pXG57XG5sZXQgZGFwcFJlY29yZDtcbmlmKGRhcHBPcmlnaW5zLmhhcyhvcmlnaW4pKXtcbmRhcHBSZWNvcmQ9ZGFwcE9yaWdpbnMuZ2V0KG9yaWdpbik7XG4gfWVsc2V7XG5sZXQgcmVzb2x2ZTtcbmxldCByZWplY3Q7XG5sZXQgYXBwcm92YWxQO1xuXG5jb25zdCBjYWNoZUNvb3JkaW5hdG9yPW1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yKFxubWFrZVNjYWxhckJpZ01hcFN0b3JlKCBgb3JpZ2luICR7b3JpZ2lufSBjYWNoZWApKTtcblxuZGFwcFJlY29yZD1hZGRNZXRhKHtcbnN1Z2dlc3RlZFBldG5hbWUsXG5wZXRuYW1lOnN1Z2dlc3RlZFBldG5hbWUsXG5vcmlnaW4sXG5jYWNoZUNvb3JkaW5hdG9yLFxuYXBwcm92YWxQLFxuZW5hYmxlOmZhbHNlLFxuYWN0aW9uczpGYXIoJ2RhcHAuYWN0aW9ucycse1xuc2V0UGV0bmFtZShwZXRuYW1lKXtcbmlmKGRhcHBSZWNvcmQucGV0bmFtZT09PXBldG5hbWUpe1xucmV0dXJuIGRhcHBSZWNvcmQuYWN0aW9ucztcbiB9XG5pZihlZGdlTWFwcGluZy52YWxUb1BldG5hbWUuaGFzKG9yaWdpbikpe1xuZWRnZU1hcHBpbmcucmVuYW1lUGV0bmFtZShwZXRuYW1lLG9yaWdpbik7XG4gfWVsc2V7XG5wZXRuYW1lPWVkZ2VNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKHBldG5hbWUsb3JpZ2luKTtcbiB9XG5kYXBwUmVjb3JkPWFkZE1ldGEoe1xuLi4uZGFwcFJlY29yZCxcbnBldG5hbWV9KTtcblxudXBkYXRlRGFwcChkYXBwUmVjb3JkKTtcbnZvaWQgdXBkYXRlQWxsU3RhdGUoKTtcbnJldHVybiBkYXBwUmVjb3JkLmFjdGlvbnM7XG4gfSxcbmVuYWJsZSgpe1xuLy9cbmRhcHBSZWNvcmQ9YWRkTWV0YSh7XG4uLi5kYXBwUmVjb3JkLFxuZW5hYmxlOnRydWV9KTtcblxuZWRnZU1hcHBpbmcuc3VnZ2VzdFBldG5hbWUoZGFwcFJlY29yZC5wZXRuYW1lLG9yaWdpbik7XG51cGRhdGVEYXBwKGRhcHBSZWNvcmQpO1xuXG4vL1xucmVzb2x2ZSgpO1xucmV0dXJuIGRhcHBSZWNvcmQuYWN0aW9ucztcbiB9LFxuZGlzYWJsZShyZWFzb249dW5kZWZpbmVkKXtcbi8vXG5pZihyZWplY3Qpe1xucmVqZWN0KHJlYXNvbik7XG4gfVxuLy9cbih7cmVzb2x2ZSxyZWplY3QscHJvbWlzZTphcHByb3ZhbFB9PW1ha2VQcm9taXNlS2l0KCkpO1xuZGFwcFJlY29yZD1hZGRNZXRhKHtcbi4uLmRhcHBSZWNvcmQsXG5lbmFibGU6ZmFsc2UsXG5hcHByb3ZhbFB9KTtcblxudXBkYXRlRGFwcChkYXBwUmVjb3JkKTtcbnJldHVybiBkYXBwUmVjb3JkLmFjdGlvbnM7XG4gfSxcbmRlbGV0ZSgpe1xuaWYocmVqZWN0KXtcbnJlamVjdCgnRGFwcCBkZWxldGVkJyk7XG4gfVxuZGVsZXRlRGFwcChkYXBwUmVjb3JkKTtcbiB9fSl9KTtcblxuXG5cbi8vXG5kYXBwT3JpZ2lucy5pbml0KG9yaWdpbixkYXBwUmVjb3JkKTtcblxuLy9cbmRhcHBSZWNvcmQuYWN0aW9ucy5kaXNhYmxlKCk7XG4gfVxuXG5pZighZGFwcFJlY29yZC5lbmFibGUpe1xubm90WWV0RW5hYmxlZCgpO1xuIH1cbmF3YWl0IGRhcHBSZWNvcmQuYXBwcm92YWxQO1xuLy9cbi8vXG5yZXR1cm4gZGFwcE9yaWdpbnMuZ2V0KG9yaWdpbik7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBhZGRPZmZlcihyYXdPZmZlcixyZXF1ZXN0Q29udGV4dD17fSl7XG5jb25zdCBkYXBwT3JpZ2luPVxucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbnx8cmVxdWVzdENvbnRleHQub3JpZ2lufHwndW5rbm93bic7XG5jb25zdHtpZDpyYXdJZH09cmF3T2ZmZXI7XG5jb25zdCBpZD1tYWtlSWQoZGFwcE9yaWdpbixyYXdJZCk7XG5jb25zdCBvZmZlcj1oYXJkZW4oXG5hZGRNZXRhKHtcbi4uLnJhd09mZmVyLFxucmF3SWQsXG5pZCxcbnJlcXVlc3RDb250ZXh0OnsuLi5yZXF1ZXN0Q29udGV4dCxkYXBwT3JpZ2lufSxcbnN0YXR1czp1bmRlZmluZWR9KSk7XG5cblxuaWRUb09mZmVyLmluaXQoaWQsb2ZmZXIpO1xuaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5pbml0KGlkLG1ha2VQcm9taXNlS2l0KCkpO1xuYXdhaXQgdXBkYXRlSW5ib3hTdGF0ZShpZCxvZmZlcik7XG5cbi8vXG5jb25zdCBjb21waWxlZE9mZmVyUD1jb21waWxlT2ZmZXIob2ZmZXIpO1xuaWRUb0NvbXBpbGVkT2ZmZXJQLnNldChpZCxjb21waWxlZE9mZmVyUCk7XG5cbi8vXG5hd2FpdCB1cGRhdGVJbmJveFN0YXRlKGlkLGlkVG9PZmZlci5nZXQoaWQpKTtcbmNvbnN0e2luc3RhbGxhdGlvbixpbnN0YW5jZSxpbnZpdGF0aW9uRGV0YWlsc309YXdhaXQgY29tcGlsZWRPZmZlclA7XG5cbmlmKCFpZFRvT2ZmZXIuaGFzKGlkKSl7XG5yZXR1cm4gcmF3SWQ7XG4gfVxuaWRUb09mZmVyLnNldChcbmlkLFxuaGFyZGVuKFxuYWRkTWV0YSh7XG4uLi5pZFRvT2ZmZXIuZ2V0KGlkKSxcbmluc3RhbGxhdGlvbixcbmluc3RhbmNlLFxuaW52aXRhdGlvbkRldGFpbHN9KSkpO1xuXG5cblxuYXdhaXQgdXBkYXRlSW5ib3hTdGF0ZShpZCxpZFRvT2ZmZXIuZ2V0KGlkKSk7XG5yZXR1cm4gcmF3SWQ7XG4gfVxuXG5mdW5jdGlvbiBjb25zdW1tYXRlZChvZmZlcil7XG5pZihvZmZlci5zdGF0dXMhPT11bmRlZmluZWQpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYob2ZmZXIuYWN0aW9ucyl7XG5FKG9mZmVyLmFjdGlvbnMpLmhhbmRsZWQob2ZmZXIpO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGRlY2xpbmVPZmZlcihpZCl7XG5jb25zdCBvZmZlcj1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmlmKGNvbnN1bW1hdGVkKG9mZmVyKSl7XG5yZXR1cm47XG4gfVxuXG4vL1xuY29uc3QgZGVjbGluZWRPZmZlcj1hZGRNZXRhKHtcbi4uLm9mZmVyLFxuc3RhdHVzOidkZWNsaW5lJ30pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLGRlY2xpbmVkT2ZmZXIpO1xudm9pZCB1cGRhdGVJbmJveFN0YXRlKGlkLGRlY2xpbmVkT2ZmZXIpO1xuXG4vL1xuY29uc3QgY29tcGlsZWRPZmZlclA9aWRUb0NvbXBpbGVkT2ZmZXJQLmdldChpZCk7XG5pZighY29tcGlsZWRPZmZlclApe1xucmV0dXJuO1xuIH1cblxuYXdhaXQgYWRkUGF5bWVudChFLmdldChjb21waWxlZE9mZmVyUCkuaW52aXRlUCkuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBjYW5jZWxPZmZlcihpZCl7XG5jb25zdCBjb21wbGV0ZUZuPWlkVG9Db21wbGV0ZS5nZXQoaWQpO1xuaWYoIWNvbXBsZXRlRm4pe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuY29tcGxldGVGbigpLlxudGhlbigoXyk9PntcbmlkVG9Db21wbGV0ZS5kZWxldGUoaWQpO1xuY29uc3Qgb2ZmZXI9aWRUb09mZmVyLmdldChpZCk7XG5jb25zdCBjYW5jZWxsZWRPZmZlcj1hZGRNZXRhKHtcbi4uLm9mZmVyLFxuc3RhdHVzOidjYW5jZWwnfSk7XG5cbmlkVG9PZmZlci5zZXQoaWQsY2FuY2VsbGVkT2ZmZXIpO1xucmV0dXJuIHVwZGF0ZUluYm94U3RhdGUoaWQsY2FuY2VsbGVkT2ZmZXIpO1xuIH0pLlxuY2F0Y2goKGUpPT5jb25zb2xlLmVycm9yKCBgQ2Fubm90IGNhbmNlbCBvZmZlciAke2lkfTpgLGUpKTtcblxucmV0dXJuIHRydWU7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBhY2NlcHRPZmZlcihpZCl7XG5jb25zdCBvZmZlcj1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmlmKGNvbnN1bW1hdGVkKG9mZmVyKSl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZXQ9e307XG5sZXQgYWxyZWFkeVJlc29sdmVkPWZhbHNlO1xuY29uc3QgcmVqZWN0ZWQ9KGUpPT57XG5pZihhbHJlYWR5UmVzb2x2ZWQpe1xucmV0dXJuO1xuIH1cbmNvbnN0IHJlamVjdE9mZmVyPWFkZE1ldGEoe1xuLi4ub2ZmZXIsXG5zdGF0dXM6J3JlamVjdGVkJyxcbmVycm9yOiBgJHtlfWB9KTtcblxuaWRUb09mZmVyLnNldChpZCxyZWplY3RPZmZlcik7XG52b2lkIHVwZGF0ZUluYm94U3RhdGUoaWQscmVqZWN0T2ZmZXIpO1xuIH07XG5cbmF3YWl0IG51bGw7XG50cnl7XG5jb25zdCBwZW5kaW5nT2ZmZXI9YWRkTWV0YSh7XG4uLi5vZmZlcixcbnN0YXR1czoncGVuZGluZyd9KTtcblxuaWRUb09mZmVyLnNldChpZCxwZW5kaW5nT2ZmZXIpO1xudm9pZCB1cGRhdGVJbmJveFN0YXRlKGlkLHBlbmRpbmdPZmZlcik7XG5jb25zdCBjb21waWxlZE9mZmVyPWF3YWl0IGlkVG9Db21waWxlZE9mZmVyUC5nZXQoaWQpO1xuXG5jb25zdHtkZXBvc2l0ZWRQLHNlYXR9PWF3YWl0IGV4ZWN1dGVPZmZlcihjb21waWxlZE9mZmVyKTtcblxuaWRUb0NvbXBsZXRlLnNldChpZCwoKT0+e1xuYWxyZWFkeVJlc29sdmVkPXRydWU7XG5yZXR1cm4gRShzZWF0KS50cnlFeGl0KCk7XG4gfSk7XG5pZFRvU2VhdC5zZXQoaWQsc2VhdCk7XG4vL1xuLy9cbnZvaWQgRShzZWF0KS5cbmhhc0V4aXRlZCgpLlxudGhlbigoZXhpdGVkKT0+e1xuaWYoIWV4aXRlZCl7XG5yZXR1cm4gc3Vic2NyaWJlVG9VcGRhdGVzKGlkLHNlYXQpO1xuIH1cbiB9KTtcblxuY29uc3Qgb2ZmZXJSZXN1bHRQPUUoc2VhdCkuZ2V0T2ZmZXJSZXN1bHQoKTtcbmlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQuZ2V0KGlkKS5yZXNvbHZlKG9mZmVyUmVzdWx0UCk7XG5cbnJldD17XG5kZXBvc2l0ZWRQLFxuZGFwcENvbnRleHQ6b2ZmZXIuZGFwcENvbnRleHR9O1xuXG5cbi8vXG5kZXBvc2l0ZWRQLlxudGhlbigoXyk9Pntcbi8vXG5pZighYWxyZWFkeVJlc29sdmVkKXtcbmFscmVhZHlSZXNvbHZlZD10cnVlO1xuY29uc3QgYWNjZXB0ZWRPZmZlcj1hZGRNZXRhKHtcbi4uLnBlbmRpbmdPZmZlcixcbnN0YXR1czonYWNjZXB0J30pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLGFjY2VwdGVkT2ZmZXIpO1xudm9pZCB1cGRhdGVJbmJveFN0YXRlKGlkLGFjY2VwdGVkT2ZmZXIpO1xuIH1cbiB9KS5cbmNhdGNoKHJlamVjdGVkKTtcbiB9Y2F0Y2goZSl7XG5pZihvZmZlci5hY3Rpb25zKXtcbkUob2ZmZXIuYWN0aW9ucykuZXJyb3Iob2ZmZXIsZSk7XG4gfVxucmVqZWN0ZWQoZSk7XG50aHJvdyBlO1xuIH1cbnJldHVybiByZXQ7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpZFRvUGF5bWVudFJlY29yZD1tYWtlU2NhbGFyTWFwU3RvcmUoJ3BheW1lbnRJZCcpO1xuY29uc3R7dXBkYXRlcjpwYXltZW50c1VwZGF0ZXIsbm90aWZpZXI6cGF5bWVudHNOb3RpZmllcn09XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZU5vdGlmaWVyS2l0KFtdKTtcbi8qXG5cbiAgICovXG5jb25zdCB1cGRhdGVQYXltZW50UmVjb3JkPSh7YWN0aW9ucywuLi5wcmVEaXNwbGF5fSk9Pntcbi8vXG4vL1xuZGVsZXRlIHByZURpc3BsYXkuZGlzcGxheVBheW1lbnQ7XG5jb25zdCBkaXNwbGF5UGF5bWVudD1maWxsSW5TbG90cyhkZWh5ZHJhdGUoaGFyZGVuKHByZURpc3BsYXkpKSk7XG5jb25zdCBwYXltZW50UmVjb3JkPWFkZE1ldGEoe1xuLi4ucHJlRGlzcGxheSxcbmFjdGlvbnMsXG5kaXNwbGF5UGF5bWVudH0pO1xuXG5jb25zdHtpZH09cGF5bWVudFJlY29yZC5tZXRhO1xuaWRUb1BheW1lbnRSZWNvcmQuc2V0KGlkLGhhcmRlbihwYXltZW50UmVjb3JkKSk7XG5wYXltZW50c1VwZGF0ZXIudXBkYXRlU3RhdGUoW3BheW1lbnRSZWNvcmRdKTtcbiB9O1xuXG5jb25zdCBtYWtlUGF5bWVudEFjdGlvbnNGb3JJZD0oaWQpPT5cbm1ha2VQYXltZW50QWN0aW9ucyh7XG5nZXRSZWNvcmQ6KCk9PmlkVG9QYXltZW50UmVjb3JkLmdldChpZCksXG51cGRhdGVSZWNvcmQ6KHJlY29yZCx3aXRob3V0TWV0YT17fSk9Pntcbi8vXG4vL1xudXBkYXRlUGF5bWVudFJlY29yZCh7Li4ud2l0aG91dE1ldGEsLi4uYWRkTWV0YShyZWNvcmQpfSk7XG4gfSxcbmdldEJyYW5kUmVjb3JkOihicmFuZCk9PlxuYnJhbmRUYWJsZS5oYXNCeUJyYW5kKGJyYW5kKSYmYnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKSxcbmdldFB1cnNlQnlQZXRuYW1lOihwZXRuYW1lKT0+cHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSksXG5nZXRBdXRvRGVwb3NpdFB1cnNlOihiKT0+XG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5oYXMoYik/XG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5nZXQoYik6XG51bmRlZmluZWQsXG5nZXRJc3N1ZXJCb2FyZElkOmlzc3VlclRvQm9hcmRJZC5nZXR9KTtcblxuXG4vKlxuXG5cbiAgICovXG5jb25zdCBhZGRQYXltZW50PWFzeW5jKHBheW1lbnRQLGRlcG9zaXRUbz11bmRlZmluZWQpPT57XG4vL1xuY29uc3RbcGF5bWVudCxicmFuZF09YXdhaXQgUHJvbWlzZS5hbGwoW1xucGF5bWVudFAsXG5FKHBheW1lbnRQKS5nZXRBbGxlZ2VkQnJhbmQoKV0pO1xuXG5cbmNvbnN0IGJhc2VQYXltZW50UmVjb3JkPWFkZE1ldGEoe1xucGF5bWVudCxcbmJyYW5kfSk7XG5cbmNvbnN0e2lkfT1iYXNlUGF5bWVudFJlY29yZC5tZXRhO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwYXltZW50UmVjb3JkPXtcbi4uLmJhc2VQYXltZW50UmVjb3JkLFxuYWN0aW9uczptYWtlUGF5bWVudEFjdGlvbnNGb3JJZChpZCl9O1xuXG5pZFRvUGF5bWVudFJlY29yZC5pbml0KGlkLGhhcmRlbihwYXltZW50UmVjb3JkKSk7XG5cbmNvbnN0IHJlZnJlc2hlZD1hd2FpdCBwYXltZW50UmVjb3JkLmFjdGlvbnMucmVmcmVzaCgpO1xuaWYoIXJlZnJlc2hlZCl7XG4vL1xudXBkYXRlUGF5bWVudFJlY29yZChwYXltZW50UmVjb3JkKTtcbiB9XG5cbi8vXG5hd2FpdCBwYXltZW50UmVjb3JkLmFjdGlvbnMuZGVwb3NpdChkZXBvc2l0VG8pO1xuIH07XG5cbmxldCBzZWxmQ29udGFjdFA7XG5hc3luYyBmdW5jdGlvbiBnZXREZXBvc2l0RmFjZXRJZChfYnJhbmRCb2FyZElkKXtcbi8vXG5yZXR1cm4gRS5nZXQoc2VsZkNvbnRhY3RQKS5kZXBvc2l0Qm9hcmRJZDtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc2FibGVBdXRvRGVwb3NpdChwdXJzZVBldG5hbWUpe1xuY29uc3QgcHVyc2U9cHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocHVyc2VQZXRuYW1lKTtcbmNvbnN0IGJyYW5kPXB1cnNlVG9CcmFuZC5nZXQocHVyc2UpO1xuaWYoXG4hYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaGFzKGJyYW5kKXx8XG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5nZXQoYnJhbmQpIT09cHVyc2UpXG57XG5yZXR1cm47XG4gfVxuXG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5kZWxldGUoYnJhbmQpO1xuYXdhaXQgdXBkYXRlQWxsUHVyc2VTdGF0ZSgpO1xuIH1cblxuY29uc3QgcGVuZGluZ0VuYWJsZUF1dG9EZXBvc2l0cz1tYWtlU2NhbGFyTWFwU3RvcmUoJ2JyYW5kJyk7XG5hc3luYyBmdW5jdGlvbiBkb0VuYWJsZUF1dG9EZXBvc2l0KHB1cnNlUGV0bmFtZSx1cGRhdGVTdGF0ZSl7XG5jb25zdCBwdXJzZT1wdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldChwdXJzZVBldG5hbWUpO1xuY29uc3QgYnJhbmQ9cHVyc2VUb0JyYW5kLmdldChwdXJzZSk7XG5pZihicmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5oYXMoYnJhbmQpKXtcbmJyYW5kVG9BdXRvRGVwb3NpdFB1cnNlLnNldChicmFuZCxwdXJzZSk7XG4gfWVsc2V7XG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5pbml0KGJyYW5kLHB1cnNlKTtcbiB9XG5cbmF3YWl0IG51bGw7XG5pZih1cGRhdGVTdGF0ZSl7XG5hd2FpdCB1cGRhdGVBbGxQdXJzZVN0YXRlKCk7XG4gfVxuXG5jb25zdCBwZW5kaW5nUD1cbnBlbmRpbmdFbmFibGVBdXRvRGVwb3NpdHMuaGFzKGJyYW5kKSYmXG5wZW5kaW5nRW5hYmxlQXV0b0RlcG9zaXRzLmdldChicmFuZCk7XG5pZihwZW5kaW5nUCl7XG5yZXR1cm4gcGVuZGluZ1A7XG4gfVxuXG5jb25zdCBib2FyZElkUD1FLmdldChzZWxmQ29udGFjdFApLmRlcG9zaXRCb2FyZElkO1xucGVuZGluZ0VuYWJsZUF1dG9EZXBvc2l0cy5pbml0KGJyYW5kLGJvYXJkSWRQKTtcbmNvbnN0IGJvYXJkSWQ9YXdhaXQgYm9hcmRJZFA7XG5icmFuZFRvRGVwb3NpdEZhY2V0SWQuaW5pdChicmFuZCxib2FyZElkKTtcblxuaWYodXBkYXRlU3RhdGUpe1xuYXdhaXQgdXBkYXRlQWxsUHVyc2VTdGF0ZSgpO1xuIH1cbnJldHVybiBib2FyZElkUDtcbiB9XG5cbi8qXG5cblxuXG5cbiAgICovXG5mdW5jdGlvbiBhY2NlcHRQZXRuYW1lKFxuYWNjZXB0Rm4sXG5zdWdnZXN0ZWRQZXRuYW1lLFxuYm9hcmRJZCxcbmRhcHBPcmlnaW49dW5kZWZpbmVkKVxue1xuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IHBldG5hbWU7XG5pZihkYXBwT3JpZ2luPT09dW5kZWZpbmVkKXtcbnBldG5hbWU9c3VnZ2VzdGVkUGV0bmFtZTtcbiB9ZWxzZXtcbmNvbnN0IGVkZ2VuYW1lPWVkZ2VNYXBwaW5nLnZhbFRvUGV0bmFtZS5nZXQoZGFwcE9yaWdpbik7XG4vL1xucGV0bmFtZT1bZWRnZW5hbWUsc3VnZ2VzdGVkUGV0bmFtZV07XG4gfVxuXG5yZXR1cm4gRShib2FyZCkuXG5nZXRWYWx1ZShib2FyZElkKS5cbnRoZW4oKHZhbHVlKT0+e1xuY29udGV4dC5lbnN1cmVCb2FyZElkKGJvYXJkSWQsdmFsdWUpO1xucmV0dXJuIGFjY2VwdEZuKHBldG5hbWUsdmFsdWUpO1xuIH0pO1xuIH1cblxuLypcblxuXG5cbiAgICovXG5hc3luYyBmdW5jdGlvbiBzdWdnZXN0SXNzdWVyKFxuc3VnZ2VzdGVkUGV0bmFtZSxcbmlzc3VlckJvYXJkSWQsXG5kYXBwT3JpZ2luPXVuZGVmaW5lZClcbntcbi8vXG4vL1xuLy9cbnJldHVybiBhY2NlcHRQZXRuYW1lKFxuLy9cbihwZXRuYW1lLHZhbHVlKT0+YWRkSXNzdWVyKHBldG5hbWUsdmFsdWUsdHJ1ZSksXG5zdWdnZXN0ZWRQZXRuYW1lLFxuaXNzdWVyQm9hcmRJZCxcbmRhcHBPcmlnaW4pO1xuXG4gfVxuXG4vKlxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIHN1Z2dlc3RJbnN0YW5jZShcbnN1Z2dlc3RlZFBldG5hbWUsXG5pbnN0YW5jZUhhbmRsZUJvYXJkSWQsXG5kYXBwT3JpZ2luPXVuZGVmaW5lZClcbntcbi8vXG4vL1xuLy9cblxucmV0dXJuIGFjY2VwdFBldG5hbWUoXG5hZGRJbnN0YW5jZSxcbnN1Z2dlc3RlZFBldG5hbWUsXG5pbnN0YW5jZUhhbmRsZUJvYXJkSWQsXG5kYXBwT3JpZ2luKTtcblxuIH1cblxuLypcblxuXG5cbiAgICovXG5hc3luYyBmdW5jdGlvbiBzdWdnZXN0SW5zdGFsbGF0aW9uKFxuc3VnZ2VzdGVkUGV0bmFtZSxcbmluc3RhbGxhdGlvbkhhbmRsZUJvYXJkSWQsXG5kYXBwT3JpZ2luPXVuZGVmaW5lZClcbntcbi8vXG4vL1xuLy9cbnJldHVybiBhY2NlcHRQZXRuYW1lKFxuaW5zdGFsbGF0aW9uTWFuYWdlci5hZGQsXG5zdWdnZXN0ZWRQZXRuYW1lLFxuaW5zdGFsbGF0aW9uSGFuZGxlQm9hcmRJZCxcbmRhcHBPcmlnaW4pO1xuXG4gfVxuXG5mdW5jdGlvbiBnZXRCcmFuZChwZXRuYW1lKXtcbmNvbnN0IGJyYW5kPWJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHBldG5hbWUpO1xucmV0dXJuIGJyYW5kO1xuIH1cblxuZnVuY3Rpb24gZ2V0QnJhbmRQZXRuYW1lcyhicmFuZHMpe1xucmV0dXJuIGJyYW5kcy5tYXAoYnJhbmRNYXBwaW5nLnZhbFRvUGV0bmFtZS5nZXQpO1xuIH1cblxuZnVuY3Rpb24gZ2V0U2VsZkNvbnRhY3QoKXtcbnJldHVybiBzZWxmQ29udGFjdFA7XG4gfVxuXG5jb25zdCBtYWtlTWFuYWdlcj0ocGV0bmFtZU1hcHBpbmcsbWFuYWdlclR5cGUpPT57XG5jb25zdCBtYW5hZ2VyPUZhcihtYW5hZ2VyVHlwZSx7XG5yZW5hbWU6YXN5bmMocGV0bmFtZSx0aGluZyk9PntcbnBldG5hbWVNYXBwaW5nLnJlbmFtZVBldG5hbWUocGV0bmFtZSx0aGluZyk7XG5hd2FpdCB1cGRhdGVBbGxTdGF0ZSgpO1xuIH0sXG5nZXQ6cGV0bmFtZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldCxcbmdldEFsbDpwZXRuYW1lTWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcyxcbmFkZDphc3luYyhwZXRuYW1lLHRoaW5nKT0+e1xucGV0bmFtZU1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZSx0aGluZyk7XG5hd2FpdCB1cGRhdGVBbGxTdGF0ZSgpO1xuIH19KTtcblxucmV0dXJuIG1hbmFnZXI7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5zdGFsbGF0aW9uTWFuYWdlcj1tYWtlTWFuYWdlcihcbmluc3RhbGxhdGlvbk1hcHBpbmcsXG4nSW5zdGFsbGF0aW9uTWFuYWdlcicpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5zdGFuY2VNYW5hZ2VyPW1ha2VNYW5hZ2VyKGluc3RhbmNlTWFwcGluZywnSW5zdGFuY2VNYW5hZ2VyJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3Vlck1hbmFnZXI9RmFyKCdJc3N1ZXJNYW5hZ2VyJyx7XG5yZW5hbWU6YXN5bmMocGV0bmFtZSxpc3N1ZXIpPT57XG5icmFuZFRhYmxlLmhhc0J5SXNzdWVyKGlzc3Vlcil8fFxuRmFpbCBgaXNzdWVyIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGFkZGVkYDtcbmNvbnN0IGJyYW5kUmVjb3JkPWJyYW5kVGFibGUuZ2V0QnlJc3N1ZXIoaXNzdWVyKTtcbmJyYW5kTWFwcGluZy5yZW5hbWVQZXRuYW1lKHBldG5hbWUsYnJhbmRSZWNvcmQuYnJhbmQpO1xuYXdhaXQgdXBkYXRlQWxsU3RhdGUoKTtcbiB9LFxuZ2V0OihwZXRuYW1lKT0+e1xuY29uc3QgYnJhbmQ9YnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSk7XG5yZXR1cm4gYnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKS5pc3N1ZXI7XG4gfSxcbmdldEFsbDooKT0+e1xucmV0dXJuWy4uLmJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcygpXS5tYXAoXG4oW3BldG5hbWUsYnJhbmRdKT0+e1xuY29uc3R7aXNzdWVyfT1icmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xucmV0dXJuW3BldG5hbWUsaXNzdWVyXTtcbiB9KTtcblxuIH0sXG5hZGQ6YXN5bmMocGV0bmFtZSxpc3N1ZXJQKT0+e1xuY29uc3R7YnJhbmQsaXNzdWVyfT1hd2FpdCBicmFuZFRhYmxlLmluaXRJc3N1ZXIoaXNzdWVyUCxhZGRNZXRhKTtcbmF3YWl0IGluaXRJc3N1ZXJUb0JvYXJkSWQoaXNzdWVyLGJyYW5kKTtcbmJyYW5kTWFwcGluZy5zdWdnZXN0UGV0bmFtZShwZXRuYW1lLGJyYW5kKTtcbmF3YWl0IHVwZGF0ZUFsbElzc3VlcnNTdGF0ZSgpO1xuIH19KTtcblxuXG5mdW5jdGlvbiBnZXRJbnN0YWxsYXRpb25NYW5hZ2VyKCl7XG5yZXR1cm4gaW5zdGFsbGF0aW9uTWFuYWdlcjtcbiB9XG5cbmZ1bmN0aW9uIGdldEluc3RhbmNlTWFuYWdlcigpe1xucmV0dXJuIGluc3RhbmNlTWFuYWdlcjtcbiB9XG5cbmZ1bmN0aW9uIGdldElzc3Vlck1hbmFnZXIoKXtcbnJldHVybiBpc3N1ZXJNYW5hZ2VyO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZU9mZmVyUmVzdWx0KGludml0YXRpb25IYW5kbGUsb2ZmZXJSZXN1bHQpe1xuaW52aXRhdGlvbkhhbmRsZVRvT2ZmZXJSZXN1bHQuaW5pdChpbnZpdGF0aW9uSGFuZGxlLG9mZmVyUmVzdWx0KTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE9mZmVyUmVzdWx0KGludml0YXRpb25IYW5kbGUpe1xucmV0dXJuIGludml0YXRpb25IYW5kbGVUb09mZmVyUmVzdWx0LmdldChpbnZpdGF0aW9uSGFuZGxlKTtcbiB9XG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFVJTm90aWZpZXIocmF3SWQsZGFwcE9yaWdpbj0ndW5rbm93bicpe1xuY29uc3QgaWQ9bWFrZUlkKGRhcHBPcmlnaW4scmF3SWQpO1xuY29uc3Qgb2ZmZXJSZXN1bHQ9YXdhaXQgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQoaWQpLnByb21pc2U7XG5hc3NlcnQoXG5wYXNzU3R5bGVPZihvZmZlclJlc3VsdCk9PT0nY29weVJlY29yZCcsXG4gYG9mZmVyUmVzdWx0IG11c3QgYmUgYSByZWNvcmQgdG8gaGF2ZSBhIHVpTm90aWZpZXJgKTtcblxub2ZmZXJSZXN1bHQudWlOb3RpZmllcnx8RmFpbCBgb2ZmZXJSZXN1bHQgZG9lcyBub3QgaGF2ZSBhIHVpTm90aWZpZXJgO1xucmV0dXJuIG9mZmVyUmVzdWx0LnVpTm90aWZpZXI7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFB1YmxpY1N1YnNjcmliZXJzKHJhd0lkLGRhcHBPcmlnaW49J3Vua25vd24nKXtcbmNvbnN0IGlkPW1ha2VJZChkYXBwT3JpZ2luLHJhd0lkKTtcblxuY29uc3Qgb2ZmZXJSZXN1bHQ9YXdhaXQgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQoaWQpLnByb21pc2U7XG5hc3NlcnQoXG5wYXNzU3R5bGVPZihvZmZlclJlc3VsdCk9PT0nY29weVJlY29yZCcsXG4gYG9mZmVyUmVzdWx0ICR7b2ZmZXJSZXN1bHR9IG11c3QgYmUgYSByZWNvcmQgdG8gaGF2ZSBwdWJsaWNTdWJzY3JpYmVyc2ApO1xuXG5cbmNvbnN0e3B1YmxpY1N1YnNjcmliZXJzfT1vZmZlclJlc3VsdDtcbnB1YmxpY1N1YnNjcmliZXJzfHxcbkZhaWwgYG9mZmVyUmVzdWx0ICR7b2ZmZXJSZXN1bHR9IGRvZXMgbm90IGhhdmUgcHVibGljU3Vic2NyaWJlcnNgO1xucGFzc1N0eWxlT2YocHVibGljU3Vic2NyaWJlcnMpPT09J2NvcHlSZWNvcmQnfHxcbkZhaWwgYHB1YmxpY1N1YnNjcmliZXJzICR7cHVibGljU3Vic2NyaWJlcnN9IG11c3QgYmUgYSByZWNvcmRgO1xuXG5yZXR1cm4gcHVibGljU3Vic2NyaWJlcnM7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFB1YmxpY05vdGlmaWVycyhyYXdJZCxkYXBwT3JpZ2luPSd1bmtub3duJyl7XG5jb25zdCBwdWJsaWNTdWJzY3JpYmVycz1hd2FpdCBnZXRQdWJsaWNTdWJzY3JpYmVycyhyYXdJZCxkYXBwT3JpZ2luKTtcbnJldHVybiBvYmplY3RNYXAocHVibGljU3Vic2NyaWJlcnMsbWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIpO1xuIH1cblxuLy9cbi8vXG5jb25zdCBjcmVhdGVSb290TG9va3Vwcz0oKT0+e1xuY29uc3Qgcm9vdFBhdGhUb0xvb2t1cD1tYWtlTGVnYWN5TWFwKCdsb29rdXBzJyk7XG5cbi8qXG5cblxuICAgICAqL1xuY29uc3QgbWFrZUxvb2t1cD0oa2luZCxsb29rdXApPT57XG5yb290UGF0aFRvTG9va3VwLmluaXQoXG5raW5kLFxuRmFyKCBgJHtraW5kfUxvb2t1cGAse1xubG9va3VwfSkpO1xuXG5cbiB9O1xuXG4vL1xuLy9cbmNvbnN0IHBldG5hbWVPclBhdGg9XG4obG9va3VwKT0+XG4oLi4ucGF0aCk9PntcbnRyeXtcbmlmKHBhdGgubGVuZ3RoPT09MSl7XG4vL1xucmV0dXJuIGxvb2t1cChwYXRoWzBdKTtcbiB9XG4gfWNhdGNoKGUpe1xuLy9cbiB9XG5yZXR1cm4gbG9va3VwKHBhdGgpO1xuIH07XG5cbm1ha2VMb29rdXAoJ2JyYW5kJyxwZXRuYW1lT3JQYXRoKGJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KSk7XG5tYWtlTG9va3VwKCdjb250YWN0JyxwZXRuYW1lT3JQYXRoKGNvbnRhY3RNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQpKTtcbm1ha2VMb29rdXAoJ2lzc3VlcicscGV0bmFtZU9yUGF0aChpc3N1ZXJNYW5hZ2VyLmdldCkpO1xubWFrZUxvb2t1cCgnaW5zdGFuY2UnLHBldG5hbWVPclBhdGgoaW5zdGFuY2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQpKTtcbm1ha2VMb29rdXAoXG4naW5zdGFsbGF0aW9uJyxcbnBldG5hbWVPclBhdGgoaW5zdGFsbGF0aW9uTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KSk7XG5cbm1ha2VMb29rdXAoJ3B1cnNlJyxwZXRuYW1lT3JQYXRoKHB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KSk7XG5cbi8vXG5jb25zdCBpZE9ubHk9XG4oa2luZCxsb29rdXApPT5cbiguLi5wYXRoKT0+e1xucGF0aC5sZW5ndGg9PT0xfHxcbkZhaWwgYCR7cShcbmtpbmQpXG4gfSBsb29rdXAgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHNpbmdsZSBvZmZlciBJRCwgbm90ICR7cGF0aH1gO1xucmV0dXJuIGxvb2t1cChwYXRoWzBdKTtcbiB9O1xubWFrZUxvb2t1cCgnb2ZmZXInLGlkT25seSgnb2ZmZXInLGlkVG9PZmZlci5nZXQpKTtcbm1ha2VMb29rdXAoXG4nb2ZmZXJSZXN1bHQnLFxuaWRPbmx5KCdvZmZlclJlc3VsdCcsKGlkKT0+aWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQoaWQpLnByb21pc2UpKTtcblxuXG5yZXR1cm4gcm9vdFBhdGhUb0xvb2t1cDtcbiB9O1xuXG5jb25zdCBmaXJzdFBhdGhUb0xvb2t1cD1jcmVhdGVSb290TG9va3VwcygpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hcnNoYWxsZXI9aGFyZGVuKHtcbmZyb21DYXBEYXRhOmNvbnRleHQuZnJvbUNhcERhdGEsXG50b0NhcERhdGE6Y29udGV4dC50b0NhcERhdGEsXG51bnNlcmlhbGl6ZTpjb250ZXh0LmZyb21DYXBEYXRhLFxuc2VyaWFsaXplOmNvbnRleHQudG9DYXBEYXRhfSk7XG5cblxuY29uc3QgaGFuZGxlQWNjZXB0T2ZmZXJBY3Rpb249YXN5bmMob2ZmZXIpPT57XG5jb25zdHtyZXF1ZXN0Q29udGV4dH09b2ZmZXI7XG5jb25zdCByYXdJZD1hd2FpdCBhZGRPZmZlcihvZmZlcixyZXF1ZXN0Q29udGV4dCk7XG5jb25zdCBkYXBwT3JpZ2luPVxucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbnx8cmVxdWVzdENvbnRleHQub3JpZ2lufHwndW5rbm93bic7XG5yZXR1cm4gYWNjZXB0T2ZmZXIoIGAke2RhcHBPcmlnaW59IyR7cmF3SWR9YCk7XG4gfTtcblxuY29uc3QgaGFuZGxlU3VnZ2VzdElzc3VlckFjdGlvbj0oe3BldG5hbWUsYm9hcmRJZH0pPT5cbnN1Z2dlc3RJc3N1ZXIocGV0bmFtZSxib2FyZElkKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLypcblxuXG4gICAqL1xuY29uc3QgcGVyZm9ybUFjdGlvbj0ob2JqKT0+e1xuY29uc3R7dHlwZSxkYXRhfT1KU09OLnBhcnNlKG9iai5zcGVuZEFjdGlvbik7XG5zd2l0Y2godHlwZSl7XG5jYXNlJ2FjY2VwdE9mZmVyJzpcbnJldHVybiBoYW5kbGVBY2NlcHRPZmZlckFjdGlvbihkYXRhKTtcbmNhc2Unc3VnZ2VzdElzc3Vlcic6XG5yZXR1cm4gaGFuZGxlU3VnZ2VzdElzc3VlckFjdGlvbihkYXRhKTtcbmRlZmF1bHQ6XG50aHJvdyBFcnJvciggYFVua25vd24gd2FsbGV0IGFjdGlvbiAke3R5cGV9YCk7fVxuXG4gfTtcblxuY29uc3Qgd2FsbGV0PUZhcignd2FsbGV0Jyx7XG5sb29rdXA6KC4uLnBhdGgpPT57XG4vL1xuaWYocGF0aC5sZW5ndGg9PT0wKXtcbnJldHVybiB3YWxsZXQ7XG4gfVxuY29uc3RbZmlyc3QsLi4ucmVtYWluaW5nXT1wYXRoO1xuY29uc3QgZmlyc3RWYWx1ZT1maXJzdFBhdGhUb0xvb2t1cC5nZXQoZmlyc3QpO1xuaWYocmVtYWluaW5nLmxlbmd0aD09PTApe1xucmV0dXJuIGZpcnN0VmFsdWU7XG4gfVxucmV0dXJuIEUoZmlyc3RWYWx1ZSkubG9va3VwKC4uLnJlbWFpbmluZyk7XG4gfSxcbmdldE1hcnNoYWxsZXI6KCk9Pm1hcnNoYWxsZXIsXG5nZXREYXBwQ2FjaGVDb29yZGluYXRvcjooZGFwcE9yaWdpbik9PlxuZGFwcE9yaWdpbnMuZ2V0KGRhcHBPcmlnaW4pLmNhY2hlQ29vcmRpbmF0b3IsXG5nZXRDYWNoZUNvb3JkaW5hdG9yOigpPT5zaGFyZWRDYWNoZUNvb3JkaW5hdG9yLFxuc2F2ZU9mZmVyUmVzdWx0LFxuZ2V0T2ZmZXJSZXN1bHQsXG53YWl0Rm9yRGFwcEFwcHJvdmFsLFxuZ2V0RGFwcHNOb3RpZmllcigpe1xucmV0dXJuIGRhcHBzTm90aWZpZXI7XG4gfSxcbmdldFB1cnNlc05vdGlmaWVyKCl7XG5yZXR1cm4gcHVyc2VzTm90aWZpZXI7XG4gfSxcbmdldEF0dGVudWF0ZWRQdXJzZXNOb3RpZmllcigpe1xucmV0dXJuIGF0dGVudWF0ZWRQdXJzZXNOb3RpZmllcjtcbiB9LFxuZ2V0SXNzdWVyc05vdGlmaWVyKCl7XG5yZXR1cm4gaXNzdWVyc05vdGlmaWVyO1xuIH0sXG5nZXRPZmZlcnNOb3RpZmllcigpe1xucmV0dXJuIG9mZmVyc05vdGlmaWVyO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmFkZElzc3Vlcjppc3N1ZXJNYW5hZ2VyLmFkZCxcbmdldEJyYW5kLFxuZ2V0QnJhbmRQZXRuYW1lcyxcbnB1Ymxpc2hJc3N1ZXIsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuYWRkSW5zdGFuY2U6aW5zdGFuY2VNYW5hZ2VyLmFkZCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuYWRkSW5zdGFsbGF0aW9uOmluc3RhbGxhdGlvbk1hbmFnZXIuYWRkLFxuZ2V0SW5zdGFsbGF0aW9uTWFuYWdlcixcbmdldEluc3RhbmNlTWFuYWdlcixcbmdldElzc3Vlck1hbmFnZXIsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJlbmFtZUlzc3Vlcjppc3N1ZXJNYW5hZ2VyLnJlbmFtZSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZW5hbWVJbnN0YW5jZTppbnN0YW5jZU1hbmFnZXIucmVuYW1lLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZW5hbWVJbnN0YWxsYXRpb246aW5zdGFsbGF0aW9uTWFuYWdlci5yZW5hbWUsXG5nZXRTZWxmQ29udGFjdCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRJbnN0YW5jZTppbnN0YW5jZU1hbmFnZXIuZ2V0LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRJbnN0YWxsYXRpb246aW5zdGFsbGF0aW9uTWFuYWdlci5nZXQsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldEluc3RhbGxhdGlvbnM6aW5zdGFsbGF0aW9uTWFuYWdlci5nZXRBbGwsXG5tYWtlRW1wdHlQdXJzZSxcbmRlcG9zaXQsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldElzc3Vlcjppc3N1ZXJNYW5hZ2VyLmdldCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0SXNzdWVyczppc3N1ZXJNYW5hZ2VyLmdldEFsbCxcbmdldFB1cnNlcyxcbmdldFB1cnNlLFxuZ2V0UHVyc2VJc3N1ZXIsXG5hZGRPZmZlcixcbmRlY2xpbmVPZmZlcixcbmNhbmNlbE9mZmVyLFxuYWNjZXB0T2ZmZXIsXG5nZXRPZmZlcnMsXG5nZXRTZWF0OihpZCk9PmlkVG9TZWF0LmdldChpZCksXG5nZXRTZWF0czooaWRzKT0+aWRzLm1hcCh3YWxsZXQuZ2V0U2VhdCksXG5lbmFibGVBdXRvRGVwb3NpdChwdXJzZVBldG5hbWUpe1xuLy9cbnJldHVybiBkb0VuYWJsZUF1dG9EZXBvc2l0KHB1cnNlUGV0bmFtZSx0cnVlKTtcbiB9LFxuZGlzYWJsZUF1dG9EZXBvc2l0LFxucGVyZm9ybUFjdGlvbixcbmdldERlcG9zaXRGYWNldElkLFxuc3VnZ2VzdElzc3VlcixcbnN1Z2dlc3RJbnN0YW5jZSxcbnN1Z2dlc3RJbnN0YWxsYXRpb24sXG5hZGRDb250YWN0LFxuZ2V0Q29udGFjdHNOb3RpZmllcigpe1xucmV0dXJuIGNvbnRhY3RzTm90aWZpZXI7XG4gfSxcbmFkZFBheW1lbnQsXG5nZXRQYXltZW50c05vdGlmaWVyKCl7XG5yZXR1cm4gcGF5bWVudHNOb3RpZmllcjtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRVSU5vdGlmaWVyLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRQdWJsaWNOb3RpZmllcnMsXG5nZXRQdWJsaWNTdWJzY3JpYmVycyxcbmdldFpvZSgpe1xucmV0dXJuIHpvZTtcbiB9LFxuZ2V0Qm9hcmQoKXtcbnJldHVybiBib2FyZDtcbiB9LFxuZ2V0QWdvcmljTmFtZXMoLi4ucGF0aCl7XG5pZighYWdvcmljTmFtZXMpe1xudGhyb3cgRmFpbCBgYWdvcmljTmFtZXMgd2FzIG5vdCBzdXBwbGllZCB0byB0aGUgd2FsbGV0IG1ha2VyYDtcbiB9XG5yZXR1cm4gRShhZ29yaWNOYW1lcykubG9va3VwKC4uLnBhdGgpO1xuIH0sXG5nZXROYW1lc0J5QWRkcmVzcyguLi5wYXRoKXtcbmlmKG5hbWVzQnlBZGRyZXNzPT09dW5kZWZpbmVkKXtcbi8vXG4vL1xudGhyb3cgRmFpbCBgbmFtZXNCeUFkZHJlc3Mgd2FzIG5vdCBzdXBwbGllZCB0byB0aGUgd2FsbGV0IG1ha2VyYDtcbiB9XG5yZXR1cm4gRShuYW1lc0J5QWRkcmVzcykubG9va3VwKC4uLnBhdGgpO1xuIH19KTtcblxuXG5jb25zdCBpbml0aWFsaXplPWFzeW5jKCk9Pntcbi8vXG5jb25zdCBzZWxmRGVwb3NpdEZhY2V0PUZhcignY29udGFjdCcse1xucmVjZWl2ZShwYXltZW50KXtcbnJldHVybiBhZGRQYXltZW50KHBheW1lbnQpO1xuIH19KTtcblxuXG5jb25zdCBhZGRyZXNzPWF3YWl0IEUobXlBZGRyZXNzTmFtZUFkbWluKS5nZXRNeUFkZHJlc3MoKTtcbi8vXG5zZWxmQ29udGFjdFA9YWRkQ29udGFjdCgnU2VsZicsc2VsZkRlcG9zaXRGYWNldCxhZGRyZXNzKTtcblxuLy9cbmNvbnN0IFpPRV9JTlZJVEVfUFVSU0VfUEVUTkFNRT0nRGVmYXVsdCBab2UgaW52aXRlIHB1cnNlJztcbmNvbnN0IGludml0ZUlzc3VlclA9RSh6b2UpLmdldEludml0YXRpb25Jc3N1ZXIoKTtcbmNvbnN0IGFkZFpvZUlzc3Vlcj0oaXNzdWVyUCk9PlxuaXNzdWVyTWFuYWdlci5hZGQoWk9FX0lOVklURV9CUkFORF9QRVROQU1FLGlzc3VlclApO1xuY29uc3QgbWFrZUludml0ZVB1cnNlPSgpPT5cbndhbGxldC5tYWtlRW1wdHlQdXJzZShaT0VfSU5WSVRFX0JSQU5EX1BFVE5BTUUsWk9FX0lOVklURV9QVVJTRV9QRVROQU1FKTtcbmNvbnN0IGFkZEludml0ZURlcG9zaXRGYWNldD0oKT0+XG5FKHdhbGxldCkuZW5hYmxlQXV0b0RlcG9zaXQoWk9FX0lOVklURV9QVVJTRV9QRVROQU1FKTtcblxuYXdhaXQgYWRkWm9lSXNzdWVyKGludml0ZUlzc3VlclApLlxudGhlbihtYWtlSW52aXRlUHVyc2UpLlxudGhlbihhZGRJbnZpdGVEZXBvc2l0RmFjZXQpO1xuem9lSW52aXRlUHVyc2U9d2FsbGV0LmdldFB1cnNlKFpPRV9JTlZJVEVfUFVSU0VfUEVUTkFNRSk7XG5cbmF3YWl0IEUobXlBZGRyZXNzTmFtZUFkbWluKS51cGRhdGUoXG5XYWxsZXROYW1lLmRlcG9zaXRGYWNldCxcbnNlbGZEZXBvc2l0RmFjZXQpO1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBpbXBvcnRCYW5rQXNzZXRzPWFzeW5jKGJhbmspPT57XG52b2lkIG9ic2VydmVJdGVyYXRpb24oXG5zdWJzY3JpYmVFYWNoKEUoYmFuaykuZ2V0QXNzZXRTdWJzY3JpcHRpb24oKSksXG5oYXJkZW4oe1xuICAgICAgYXN5bmMgdXBkYXRlU3RhdGUoe3Byb3Bvc2VkTmFtZSxpc3N1ZXJOYW1lLGlzc3VlcixicmFuZH0pe1xuYXdhaXQgbnVsbDtcbnRyeXtcbmlzc3Vlck5hbWU9YXdhaXQgYWRkSXNzdWVyKGlzc3Vlck5hbWUsaXNzdWVyKTtcbmNvbnN0IHB1cnNlPWF3YWl0IEUoYmFuaykuZ2V0UHVyc2UoYnJhbmQpO1xuLy9cbmF3YWl0IGludGVybmFsVW5zYWZlSW1wb3J0UHVyc2UoXG5pc3N1ZXJOYW1lLFxucHJvcG9zZWROYW1lLFxudHJ1ZSxcbnB1cnNlKTtcblxuIH1jYXRjaChlKXtcbmNvbnNvbGUuZXJyb3IoJy8vLyBjb3VsZCBub3QgYWRkIGJhbmsgYXNzZXQgcHVyc2UnLGUse1xuaXNzdWVyTmFtZSxcbnByb3Bvc2VkTmFtZSxcbmlzc3VlcixcbmJyYW5kfSk7XG5cbiB9XG4gfX0pKS5cblxuZmluYWxseSgoKT0+Y29uc29sZS5lcnJvcignLy8vIFRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgYmFuayBhc3NldHMnKSk7XG4gfTtcbnJldHVybntcbmFkbWluOndhbGxldCxcbmluaXRpYWxpemVkOmluaXRpYWxpemUoKSxcbmltcG9ydEJhbmtBc3NldHN9O1xuXG4gfVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VXYWxsZXRSb290IjpbIm1ha2VXYWxsZXRSb290Il19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAL/k3V7oAgAA6AIAACwAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL3B1YnN1Yi5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBmdW5jdGlvbiAgICAgICAgICAgICAgICBtYWtlUHVic3ViKEUpe1xubGV0IGxhc3RQdWJsaXNoZWQ7XG5jb25zdCBzdWJzY3JpYmVycz1bXTtcblxucmV0dXJuIGhhcmRlbih7XG5zdWJzY3JpYmUocyl7XG5zdWJzY3JpYmVycy5wdXNoKHMpO1xuaWYobGFzdFB1Ymxpc2hlZCE9PXVuZGVmaW5lZCl7XG5FKHMpLm5vdGlmeShsYXN0UHVibGlzaGVkKTtcbiB9XG4gfSxcbnB1Ymxpc2gobSl7XG5sYXN0UHVibGlzaGVkPW07XG5mb3IoY29uc3QgcyBvZiBzdWJzY3JpYmVycyl7XG5FKHMpLm5vdGlmeShtKTtcbiB9XG4gfX0pO1xuXG4gfSRozY9fb25jZS5kZWZhdWx0KCAgICAgbWFrZVB1YnN1Yik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAApcHj38A1AADANQAALAAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvd2FsbGV0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvanMtdXRpbHMuanMiLCJAYWdvcmljL25vdGlmaWVyIiwiLi9saWItd2FsbGV0LmpzIiwiLi9wdWJzdWIuanMiLCIuL2JpZ2ludFN0cmluZ2lmeS5qcyIsIi4vZGF0ZS1ub3cuanMiLCIuL2ludGVybmFsLXR5cGVzLmpzIl0sImV4cG9ydHMiOlsiYnVpbGRSb290T2JqZWN0IiwiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLGRlZXBDb3B5SnNvbmFibGUsbWFrZU5vdGlmaWVyS2l0LG9ic2VydmVJdGVyYXRpb24sbWFrZVdhbGxldFJvb3QscHVic3ViLGJpZ2ludFN0cmluZ2lmeSxtYWtlVGltZXJEZXZpY2VEYXRlTm93LG1ha2VUaW1lclNlcnZpY2VEYXRlTm93OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2pzLXV0aWxzLmpzXCIsIFtbXCJkZWVwQ29weUpzb25hYmxlXCIsIFskaM2PX2EgPT4gKGRlZXBDb3B5SnNvbmFibGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyXCIsIFtbXCJtYWtlTm90aWZpZXJLaXRcIiwgWyRozY9fYSA9PiAobWFrZU5vdGlmaWVyS2l0ID0gJGjNj19hKV1dLFtcIm9ic2VydmVJdGVyYXRpb25cIiwgWyRozY9fYSA9PiAob2JzZXJ2ZUl0ZXJhdGlvbiA9ICRozY9fYSldXV1dLFtcIi4vbGliLXdhbGxldC5qc1wiLCBbW1wibWFrZVdhbGxldFJvb3RcIiwgWyRozY9fYSA9PiAobWFrZVdhbGxldFJvb3QgPSAkaM2PX2EpXV1dXSxbXCIuL3B1YnN1Yi5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjNj19hID0+IChwdWJzdWIgPSAkaM2PX2EpXV1dXSxbXCIuL2JpZ2ludFN0cmluZ2lmeS5qc1wiLCBbW1wiYmlnaW50U3RyaW5naWZ5XCIsIFskaM2PX2EgPT4gKGJpZ2ludFN0cmluZ2lmeSA9ICRozY9fYSldXV1dLFtcIi4vZGF0ZS1ub3cuanNcIiwgW1tcIm1ha2VUaW1lckRldmljZURhdGVOb3dcIiwgWyRozY9fYSA9PiAobWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyA9ICRozY9fYSldXSxbXCJtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vd1wiLCBbJGjNj19hID0+IChtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyA9ICRozY9fYSldXV1dLFtcIi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1aWxkUm9vdE9iamVjdCwgJ25hbWUnLCB7dmFsdWU6IFwiYnVpbGRSb290T2JqZWN0XCJ9KTskaM2PX29uY2UuYnVpbGRSb290T2JqZWN0KGJ1aWxkUm9vdE9iamVjdCk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5mdW5jdGlvbiAgICAgICAgYnVpbGRSb290T2JqZWN0KHZhdFBvd2Vycyl7XG4vL1xuY29uc3R7RH09dmF0UG93ZXJzfHx7fTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgd2FsbGV0Um9vdDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB3YWxsZXRBZG1pbjtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBwdXJzZXNTdGF0ZT1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW5ib3hTdGF0ZT1bXTtcbmxldCBodHRwO1xuXG5jb25zdCBicmlkZ2VIYW5kbGVzPW5ldyBTZXQoKTtcbmNvbnN0IG9mZmVyU3Vic2NyaXB0aW9ucz1uZXcgTWFwKCk7XG5cbmNvbnN0IGh0dHBTZW5kPShvYmosY2hhbm5lbEhhbmRsZXMpPT5cbkUoaHR0cCkuc2VuZChkZWVwQ29weUpzb25hYmxlKG9iaiksY2hhbm5lbEhhbmRsZXMpO1xuXG5jb25zdCBwdXNoT2ZmZXJTdWJzY3JpcHRpb25zPShjaGFubmVsSGFuZGxlLG9mZmVycyk9PntcbmNvbnN0IHN1YnM9b2ZmZXJTdWJzY3JpcHRpb25zLmdldChjaGFubmVsSGFuZGxlKTtcbmZvcihjb25zdHtvcmlnaW4sc3RhdHVzfW9mIHN1YnN8fFtdKXtcbi8vXG5jb25zdCByZXN1bHQ9aGFyZGVuKFxub2ZmZXJzLmZpbHRlcihcbihvZmZlcik9PlxuKHN0YXR1cz09PW51bGx8fG9mZmVyLnN0YXR1cz09PXN0YXR1cykmJlxub2ZmZXIucmVxdWVzdENvbnRleHQmJlxub2ZmZXIucmVxdWVzdENvbnRleHQub3JpZ2luPT09b3JpZ2luKSk7XG5cblxuaHR0cFNlbmQoXG57XG50eXBlOid3YWxsZXRPZmZlckRlc2NyaXB0aW9ucycsXG5kYXRhOnJlc3VsdH0sXG5cbltjaGFubmVsSGFuZGxlXSk7XG5cbiB9XG4gfTtcblxuY29uc3Qgc3Vic2NyaWJlVG9PZmZlcnM9KGNoYW5uZWxIYW5kbGUse29yaWdpbixzdGF0dXM9bnVsbH0pPT57XG5sZXQgc3Vicz1vZmZlclN1YnNjcmlwdGlvbnMuZ2V0KGNoYW5uZWxIYW5kbGUpO1xuaWYoIXN1YnMpe1xuc3Vicz1bXTtcbm9mZmVyU3Vic2NyaXB0aW9ucy5zZXQoY2hhbm5lbEhhbmRsZSxzdWJzKTtcbiB9XG5zdWJzLnB1c2goe29yaWdpbixzdGF0dXN9KTtcbnB1c2hPZmZlclN1YnNjcmlwdGlvbnMoY2hhbm5lbEhhbmRsZSxpbmJveFN0YXRlKTtcbiB9O1xuXG5jb25zdHtwdWJsaXNoOnB1cnNlc1B1Ymxpc2gsc3Vic2NyaWJlOnB1cnNlc1N1YnNjcmliZX09cHVic3ViKEUpO1xuY29uc3R7dXBkYXRlcjppbmJveFVwZGF0ZXIsbm90aWZpZXI6b2ZmZXJOb3RpZmllcn09XG5tYWtlTm90aWZpZXJLaXQoaW5ib3hTdGF0ZSk7XG5jb25zdHtwdWJsaXNoOmluYm94UHVibGlzaCxzdWJzY3JpYmU6aW5ib3hTdWJzY3JpYmV9PXB1YnN1YihFKTtcblxuY29uc3Qgbm90aWZpZXJzPWhhcmRlbih7XG5nZXRJbmJveE5vdGlmaWVyKCl7XG5yZXR1cm4gb2ZmZXJOb3RpZmllcjtcbiB9fSk7XG5cblxuLypcblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0dXAoe1xuem9lLFxuYm9hcmQsXG5hZ29yaWNOYW1lcyxcbm5hbWVzQnlBZGRyZXNzLFxubXlBZGRyZXNzTmFtZUFkbWluLFxudGltZXJEZXZpY2UsXG50aW1lckRldmljZVNjYWxlLFxubG9jYWxUaW1lclNlcnZpY2UsXG5sb2NhbFRpbWVyUG9sbEludGVydmFsfSlcbntcbmFzc2VydChteUFkZHJlc3NOYW1lQWRtaW4sJ21pc3NpbmcgbXlBZGRyZXNzTmFtZUFkbWluJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGRhdGVOb3dQO1xuaWYodGltZXJEZXZpY2Upe1xuZGF0ZU5vd1A9bWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyhELHRpbWVyRGV2aWNlLHRpbWVyRGV2aWNlU2NhbGUpO1xuIH1cbmlmKGxvY2FsVGltZXJTZXJ2aWNlKXtcbmRhdGVOb3dQPW1ha2VUaW1lclNlcnZpY2VEYXRlTm93KFxubG9jYWxUaW1lclNlcnZpY2UsXG5sb2NhbFRpbWVyUG9sbEludGVydmFsKTtcblxuIH1cblxuY29uc3QgZGF0ZU5vdz1hd2FpdCBkYXRlTm93UDtcbmNvbnN0IHc9bWFrZVdhbGxldFJvb3Qoe1xuYWdvcmljTmFtZXMsXG5uYW1lc0J5QWRkcmVzcyxcbm15QWRkcmVzc05hbWVBZG1pbixcbnpvZSxcbmJvYXJkLFxucHVyc2VzU3RhdGVDaGFuZ2VIYW5kbGVyOnB1cnNlc1B1Ymxpc2gsXG5pbmJveFN0YXRlQ2hhbmdlSGFuZGxlcjppbmJveFB1Ymxpc2gsXG5kYXRlTm93fSk7XG5cbmNvbnNvbGUuZGVidWcoJ3dhaXRpbmcgZm9yIHdhbGxldCB0byBpbml0aWFsaXplJyk7XG5hd2FpdCB3LmluaXRpYWxpemVkO1xuY29uc29sZS5kZWJ1Zygnd2FsbGV0IGluaXRpYWxpemVkJyk7XG53YWxsZXRBZG1pbj13LmFkbWluO1xud2FsbGV0Um9vdD13O1xuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlQnJpZGdlPShhcHByb3ZlLGRhcHBPcmlnaW4sbWV0YT17fSk9PntcbmFzeW5jIGZ1bmN0aW9uKm1ha2VBcHByb3ZlZE5vdGlmaWVyKHNvdXJjZU5vdGlmaWVyKXtcbmF3YWl0IGFwcHJvdmUoKTtcbmZvciBhd2FpdChjb25zdCBzdGF0ZSBvZiBzb3VyY2VOb3RpZmllcil7XG5hd2FpdCBhcHByb3ZlKCk7XG55aWVsZCBzdGF0ZTtcbiB9XG4gfVxuaGFyZGVuKG1ha2VBcHByb3ZlZE5vdGlmaWVyKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBicmlkZ2U9RmFyKCdicmlkZ2UnLHtcbiAgICAgIGFzeW5jIGdldFB1cnNlc05vdGlmaWVyKCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5jb25zdCBwdXJzZXNOb3RpZmllcj13YWxsZXRBZG1pbi5nZXRBdHRlbnVhdGVkUHVyc2VzTm90aWZpZXIoKTtcbmNvbnN0e25vdGlmaWVyLHVwZGF0ZXJ9PW1ha2VOb3RpZmllcktpdCgpO1xudm9pZCBvYnNlcnZlSXRlcmF0aW9uKG1ha2VBcHByb3ZlZE5vdGlmaWVyKHB1cnNlc05vdGlmaWVyKSx1cGRhdGVyKTtcbnJldHVybiBub3RpZmllcjtcbiB9LFxuICAgICAgYXN5bmMgZ2V0Q2FjaGVDb29yZGluYXRvcigpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldERhcHBDYWNoZUNvb3JkaW5hdG9yKGRhcHBPcmlnaW4pO1xuIH0sXG4gICAgICBhc3luYyBnZXRJc3N1ZXJzTm90aWZpZXIoKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRJc3N1ZXJzTm90aWZpZXIoKTtcbiB9LFxuICAgICAgYXN5bmMgYWRkT2ZmZXIob2ZmZXIpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmFkZE9mZmVyKG9mZmVyLHsuLi5tZXRhLGRhcHBPcmlnaW59KTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0T2ZmZXJzTm90aWZpZXIoc3RhdHVzPW51bGwpe1xuYXdhaXQgYXBwcm92ZSgpO1xuY29uc3R7bm90aWZpZXIsdXBkYXRlcn09bWFrZU5vdGlmaWVyS2l0KGluYm94U3RhdGUpO1xuY29uc3QgZmlsdGVyPShvZmZlcik9PlxuKHN0YXR1cz09PW51bGx8fG9mZmVyLnN0YXR1cz09PXN0YXR1cykmJlxub2ZmZXIucmVxdWVzdENvbnRleHQmJlxub2ZmZXIucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbj09PWRhcHBPcmlnaW47XG5jb25zdCBmaWx0ZXJlZE9mZmVycz0ob2ZmZXJzKT0+e1xucmV0dXJuIG9mZmVycy5maWx0ZXIoZmlsdGVyKS5tYXAoKHtyYXdJZCwuLi52fSk9Pih7XG4uLi52LFxuaWQ6cmF3SWR9KSk7XG5cbiB9O1xuXG52b2lkIG9ic2VydmVJdGVyYXRpb24obWFrZUFwcHJvdmVkTm90aWZpZXIob2ZmZXJOb3RpZmllcikse1xudXBkYXRlU3RhdGUob2ZmZXJzKXtcbnVwZGF0ZXIudXBkYXRlU3RhdGUoZmlsdGVyZWRPZmZlcnMob2ZmZXJzKSk7XG4gfSxcbmZpbmlzaChvZmZlcnMpe1xudXBkYXRlci5maW5pc2goZmlsdGVyZWRPZmZlcnMob2ZmZXJzKSk7XG4gfSxcbmZhaWwoZSl7XG51cGRhdGVyLmZhaWwoZSk7XG4gfX0pO1xuXG5yZXR1cm4gbm90aWZpZXI7XG4gfSxcbiAgICAgIGFzeW5jIGdldERlcG9zaXRGYWNldElkKGJyYW5kQm9hcmRJZCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0RGVwb3NpdEZhY2V0SWQoYnJhbmRCb2FyZElkKTtcbiB9LFxuICAgICAgYXN5bmMgc3VnZ2VzdElzc3VlcihwZXRuYW1lLGJvYXJkSWQpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLnN1Z2dlc3RJc3N1ZXIocGV0bmFtZSxib2FyZElkLGRhcHBPcmlnaW4pO1xuIH0sXG4gICAgICBhc3luYyBzdWdnZXN0SW5zdGFsbGF0aW9uKHBldG5hbWUsYm9hcmRJZCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uc3VnZ2VzdEluc3RhbGxhdGlvbihwZXRuYW1lLGJvYXJkSWQsZGFwcE9yaWdpbik7XG4gfSxcbiAgICAgIGFzeW5jIHN1Z2dlc3RJbnN0YW5jZShwZXRuYW1lLGJvYXJkSWQpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLnN1Z2dlc3RJbnN0YW5jZShwZXRuYW1lLGJvYXJkSWQsZGFwcE9yaWdpbik7XG4gfSxcbiAgICAgIGFzeW5jIGdldFVJTm90aWZpZXIocmF3SWQpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldFVJTm90aWZpZXIocmF3SWQsZGFwcE9yaWdpbik7XG4gfSxcbiAgICAgIGFzeW5jIGdldFB1YmxpY05vdGlmaWVycyhyYXdJZCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0UHVibGljTm90aWZpZXJzKHJhd0lkLGRhcHBPcmlnaW4pO1xuIH0sXG4gICAgICBhc3luYyBnZXRab2UoKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRab2UoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0Qm9hcmQoKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRCb2FyZCgpO1xuIH0sXG4gICAgICBhc3luYyBnZXRBZ29yaWNOYW1lcyguLi5wYXRoKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRBZ29yaWNOYW1lcyguLi5wYXRoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0TmFtZXNCeUFkZHJlc3MoLi4ucGF0aCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0TmFtZXNCeUFkZHJlc3MoLi4ucGF0aCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldEJyYW5kUGV0bmFtZXMoYnJhbmRzKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRCcmFuZFBldG5hbWVzKGJyYW5kcyk7XG4gfX0pO1xuXG5yZXR1cm4gYnJpZGdlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZWFwcHJvdmVkQnJpZGdlPUZhcigncHJlYXBwcm92ZWRCcmlkZ2UnLHtcbi8qXG5cblxuICAgICAqL1xuYWRkT2ZmZXIob2ZmZXIsbWV0YSl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uYWRkT2ZmZXIob2ZmZXIsbWV0YSk7XG4gfSxcbmdldERlcG9zaXRGYWNldElkKGJyYW5kQm9hcmRJZCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0RGVwb3NpdEZhY2V0SWQoYnJhbmRCb2FyZElkKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0T2ZmZXJzTm90aWZpZXIoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRPZmZlcnNOb3RpZmllcigpO1xuIH0sXG4gICAgICBhc3luYyBnZXRQdXJzZXNOb3RpZmllcigpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldEF0dGVudWF0ZWRQdXJzZXNOb3RpZmllcigpO1xuIH0sXG4gICAgICBhc3luYyBnZXRJc3N1ZXJzTm90aWZpZXIoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRJc3N1ZXJzTm90aWZpZXIoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0Q2FjaGVDb29yZGluYXRvcigpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldENhY2hlQ29vcmRpbmF0b3IoKTtcbiB9LFxuc3VnZ2VzdEluc3RhbGxhdGlvbihwZXRuYW1lLGluc3RhbGxhdGlvbkJvYXJkSWQpe1xucmV0dXJuIHdhbGxldEFkbWluLnN1Z2dlc3RJbnN0YWxsYXRpb24ocGV0bmFtZSxpbnN0YWxsYXRpb25Cb2FyZElkKTtcbiB9LFxuc3VnZ2VzdEluc3RhbmNlKHBldG5hbWUsaW5zdGFuY2VCb2FyZElkKXtcbnJldHVybiB3YWxsZXRBZG1pbi5zdWdnZXN0SW5zdGFuY2UocGV0bmFtZSxpbnN0YW5jZUJvYXJkSWQpO1xuIH0sXG5zdWdnZXN0SXNzdWVyKHBldG5hbWUsaXNzdWVyQm9hcmRJZCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uc3VnZ2VzdElzc3VlcihwZXRuYW1lLGlzc3VlckJvYXJkSWQpO1xuIH0sXG5nZXRVSU5vdGlmaWVyKHJhd0lkKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRVSU5vdGlmaWVyKHJhd0lkKTtcbiB9LFxuZ2V0UHVibGljTm90aWZpZXJzKHJhd0lkKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRQdWJsaWNOb3RpZmllcnMocmF3SWQpO1xuIH0sXG4gICAgICBhc3luYyBnZXRab2UoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRab2UoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0Qm9hcmQoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRCb2FyZCgpO1xuIH0sXG4gICAgICBhc3luYyBnZXRBZ29yaWNOYW1lcyguLi5wYXRoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRBZ29yaWNOYW1lcyguLi5wYXRoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0TmFtZXNCeUFkZHJlc3MoLi4ucGF0aCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0TmFtZXNCeUFkZHJlc3MoLi4ucGF0aCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldEJyYW5kUGV0bmFtZXMoYnJhbmRzKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRCcmFuZFBldG5hbWVzKGJyYW5kcyk7XG4gfX0pO1xuXG5oYXJkZW4ocHJlYXBwcm92ZWRCcmlkZ2UpO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRXYWxsZXQoYmFuayl7XG5hd2FpdCB3YWxsZXRSb290LmltcG9ydEJhbmtBc3NldHMoYmFuayk7XG5cbi8qXG5cbiAgICAgKi9cbmNvbnN0IHdhbGxldD1GYXIoJ3dhbGxldCcse1xuYWRkUGF5bWVudDp3YWxsZXRBZG1pbi5hZGRQYXltZW50LFxuICAgICAgYXN5bmMgZ2V0U2NvcGVkQnJpZGdlKHN1Z2dlc3RlZERhcHBQZXRuYW1lLGRhcHBPcmlnaW4pe1xuY29uc3QgYXBwcm92ZT1hc3luYygpPT57XG5hd2FpdCB3YWxsZXRBZG1pbi53YWl0Rm9yRGFwcEFwcHJvdmFsKFxuc3VnZ2VzdGVkRGFwcFBldG5hbWUsXG5kYXBwT3JpZ2luKTtcblxuIH07XG5cbnJldHVybiBtYWtlQnJpZGdlKGFwcHJvdmUsZGFwcE9yaWdpbik7XG4gfSxcbiAgICAgIGFzeW5jIGdldEJyaWRnZSgpe1xucmV0dXJuIHByZWFwcHJvdmVkQnJpZGdlO1xuIH0sXG5nZXREZXBvc2l0RmFjZXRJZDp3YWxsZXRBZG1pbi5nZXREZXBvc2l0RmFjZXRJZCxcbmdldEFkbWluRmFjZXQoKXtcbnJldHVybiBGYXIoJ2FkbWluRmFjZXQnLHtcbi4uLndhbGxldEFkbWluLFxuLi4ubm90aWZpZXJzLFxuZ2V0U2NvcGVkQnJpZGdlOndhbGxldC5nZXRTY29wZWRCcmlkZ2V9KTtcblxuIH0sXG5nZXRJc3N1ZXI6d2FsbGV0QWRtaW4uZ2V0SXNzdWVyLFxuZ2V0SXNzdWVyczp3YWxsZXRBZG1pbi5nZXRJc3N1ZXJzLFxuZ2V0UHVyc2U6d2FsbGV0QWRtaW4uZ2V0UHVyc2UsXG5nZXRQdXJzZXM6d2FsbGV0QWRtaW4uZ2V0UHVyc2VzLFxuXG5nZXRNYXJzaGFsbGVyOndhbGxldEFkbWluLmdldE1hcnNoYWxsZXIsXG5cbmxvb2t1cDp3YWxsZXRBZG1pbi5sb29rdXB9KTtcblxucmV0dXJuIGhhcmRlbih3YWxsZXQpO1xuIH1cblxuZnVuY3Rpb24gc2V0SFRUUE9iamVjdChvKXtcbmh0dHA9bztcbiB9XG5cbmZ1bmN0aW9uIHN0YXJ0U3Vic2NyaXB0aW9ucygpe1xuLy9cbi8vXG5wdXJzZXNTdWJzY3JpYmUoXG5oYXJkZW4oe1xubm90aWZ5KG0pe1xucHVyc2VzU3RhdGU9SlNPTi5wYXJzZShtKTtcbiB9fSkpO1xuXG5cblxuLy9cbi8vXG5pbmJveFN1YnNjcmliZShcbmhhcmRlbih7XG5ub3RpZnkobSl7XG5pbmJveFN0YXRlPUpTT04ucGFyc2UobSk7XG5pbmJveFVwZGF0ZXIudXBkYXRlU3RhdGUoaW5ib3hTdGF0ZSk7XG5pZihodHRwKXtcbi8vXG5mb3IoY29uc3QgY2hhbm5lbEhhbmRsZSBvZiBvZmZlclN1YnNjcmlwdGlvbnMua2V5cygpKXtcbnB1c2hPZmZlclN1YnNjcmlwdGlvbnMoY2hhbm5lbEhhbmRsZSxpbmJveFN0YXRlKTtcbiB9XG4gfVxuIH19KSk7XG5cblxuIH1cblxuZnVuY3Rpb24gZ2V0QnJpZGdlVVJMSGFuZGxlcigpe1xucmV0dXJuIEZhcignYnJpZGdlVVJMSGFuZGxlcicse1xuLypcblxuXG5cblxuXG5cblxuXG4gICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIGdldEJvb3RzdHJhcChvdGhlclNpZGUsbWV0YSxvYmope1xuY29uc3R7ZGFwcE9yaWdpbj1tZXRhLm9yaWdpbn09b2JqO1xuY29uc3Qgc3VnZ2VzdGVkRGFwcFBldG5hbWU9U3RyaW5nKFxubWV0YS5xdWVyeSYmbWV0YS5xdWVyeS5zdWdnZXN0ZWREYXBwUGV0bmFtZXx8XG5tZXRhLmRhcHBPcmlnaW58fFxuZGFwcE9yaWdpbik7XG5cblxuY29uc3QgYXBwcm92ZT1hc3luYygpPT57XG5sZXQgbm90WWV0RW5hYmxlZD1mYWxzZTtcbmF3YWl0IHdhbGxldEFkbWluLndhaXRGb3JEYXBwQXBwcm92YWwoXG5zdWdnZXN0ZWREYXBwUGV0bmFtZSxcbmRhcHBPcmlnaW4sXG4oKT0+e1xubm90WWV0RW5hYmxlZD10cnVlO1xuRShvdGhlclNpZGUpLlxubmVlZERhcHBBcHByb3ZhbChkYXBwT3JpZ2luLHN1Z2dlc3RlZERhcHBQZXRuYW1lKS5cbmNhdGNoKChfKT0+eyB9KTtcbiB9KTtcblxuaWYobm90WWV0RW5hYmxlZCl7XG5hd2FpdCBFKG90aGVyU2lkZSkuZGFwcEFwcHJvdmVkKGRhcHBPcmlnaW4pO1xuIH1cbiB9O1xuXG5yZXR1cm4gbWFrZUJyaWRnZShhcHByb3ZlLGRhcHBPcmlnaW4sbWV0YSk7XG4gfSxcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgKi9cbmdldENvbW1hbmRIYW5kbGVyKCl7XG5yZXR1cm4gRmFyKCdjb21tYW5kSGFuZGxlcicse1xub25PcGVuKF9vYmosbWV0YSl7XG5icmlkZ2VIYW5kbGVzLmFkZChtZXRhLmNoYW5uZWxIYW5kbGUpO1xuIH0sXG5vbkNsb3NlKF9vYmosbWV0YSl7XG5icmlkZ2VIYW5kbGVzLmRlbGV0ZShtZXRhLmNoYW5uZWxIYW5kbGUpO1xub2ZmZXJTdWJzY3JpcHRpb25zLmRlbGV0ZShtZXRhLmNoYW5uZWxIYW5kbGUpO1xuIH0sXG5cbiAgICAgIGFzeW5jIG9uTWVzc2FnZShvYmosbWV0YSl7XG5jb25zdHtcbnR5cGUsXG5kYXBwT3JpZ2luPW1ldGEub3JpZ2luLFxuc3VnZ2VzdGVkRGFwcFBldG5hbWU9bWV0YS5xdWVyeSYmXG5tZXRhLnF1ZXJ5LnN1Z2dlc3RlZERhcHBQZXRuYW1lfHxcbm9iai5kYXBwT3JpZ2lufHxcbm1ldGEub3JpZ2lufT1cbm9iajtcblxuLy9cbmxldCBuZWVkQXBwcm92YWw9ZmFsc2U7XG5hd2FpdCB3YWxsZXRBZG1pbi53YWl0Rm9yRGFwcEFwcHJvdmFsKFxuc3VnZ2VzdGVkRGFwcFBldG5hbWUsXG5kYXBwT3JpZ2luLFxuKCk9Pntcbm5lZWRBcHByb3ZhbD10cnVlO1xuaHR0cFNlbmQoXG57XG50eXBlOid3YWxsZXROZWVkRGFwcEFwcHJvdmFsJyxcbmRhdGE6e1xuZGFwcE9yaWdpbixcbnN1Z2dlc3RlZERhcHBQZXRuYW1lfX0sXG5cblxuW21ldGEuY2hhbm5lbEhhbmRsZV0pO1xuXG4gfSk7XG5cbmlmKG5lZWRBcHByb3ZhbCl7XG5odHRwU2VuZChcbntcbnR5cGU6J3dhbGxldEhhdmVEYXBwQXBwcm92YWwnLFxuZGF0YTp7XG5kYXBwT3JpZ2lufX0sXG5cblxuW21ldGEuY2hhbm5lbEhhbmRsZV0pO1xuXG4gfVxuXG5zd2l0Y2godHlwZSl7XG5jYXNlJ3dhbGxldEdldFB1cnNlcyc6e1xucmV0dXJue1xudHlwZTond2FsbGV0VXBkYXRlUHVyc2VzJyxcbmRhdGE6YmlnaW50U3RyaW5naWZ5KHB1cnNlc1N0YXRlKX07XG5cbiB9XG5jYXNlJ3dhbGxldEFkZE9mZmVyJzp7XG5sZXQgaGFuZGxlZD1mYWxzZTtcbmNvbnN0IGFjdGlvbnM9RmFyKCdhY3Rpb25zJyx7XG5oYW5kbGVkKG9mZmVyKXtcbmlmKGhhbmRsZWQpe1xucmV0dXJuO1xuIH1cbmhhbmRsZWQ9dHJ1ZTtcbmh0dHBTZW5kKFxue1xudHlwZTond2FsbGV0T2ZmZXJIYW5kbGVkJyxcbmRhdGE6b2ZmZXIuaWR9LFxuXG5bbWV0YS5jaGFubmVsSGFuZGxlXSk7XG5cbiB9fSk7XG5cbnJldHVybntcbnR5cGU6J3dhbGxldE9mZmVyQWRkZWQnLFxuZGF0YTphd2FpdCB3YWxsZXRBZG1pbi5hZGRPZmZlcihcbnsuLi5vYmouZGF0YSxhY3Rpb25zfSxcbnsuLi5tZXRhLGRhcHBPcmlnaW59KX07XG5cblxuIH1cblxuY2FzZSd3YWxsZXRTdWJzY3JpYmVPZmZlcnMnOntcbmNvbnN0e3N0YXR1cz1udWxsfT1vYmo7XG5jb25zdHtjaGFubmVsSGFuZGxlfT1tZXRhO1xuXG5pZighY2hhbm5lbEhhbmRsZSl7XG5yZXR1cm57XG50eXBlOid3YWxsZXRTdWJzY3JpYmVkT2ZmZXJzJyxcbmRhdGE6ZmFsc2V9O1xuXG4gfVxuXG4vL1xuc3Vic2NyaWJlVG9PZmZlcnMoY2hhbm5lbEhhbmRsZSx7XG5vcmlnaW46ZGFwcE9yaWdpbixcbnN0YXR1c30pO1xuXG5yZXR1cm57XG50eXBlOid3YWxsZXRTdWJzY3JpYmVkT2ZmZXJzJyxcbmRhdGE6dHJ1ZX07XG5cbiB9XG5cbmNhc2Und2FsbGV0R2V0T2ZmZXJzJzp7XG5jb25zdHtzdGF0dXM9bnVsbH09b2JqO1xuXG4vL1xubGV0IHJlc3VsdD1hd2FpdCB3YWxsZXRBZG1pbi5nZXRPZmZlcnMoe1xub3JpZ2luOmRhcHBPcmlnaW59KTtcblxuaWYoc3RhdHVzIT09bnVsbCl7XG4vL1xucmVzdWx0PWhhcmRlbihcbnJlc3VsdC5maWx0ZXIoKG9mZmVyKT0+b2ZmZXIuc3RhdHVzPT09c3RhdHVzKSk7XG5cbiB9XG5cbnJldHVybntcbnR5cGU6J3dhbGxldE9mZmVyRGVzY3JpcHRpb25zJyxcbmRhdGE6cmVzdWx0fTtcblxuIH1cblxuY2FzZSd3YWxsZXRHZXREZXBvc2l0RmFjZXRJZCc6e1xuY29uc3R7YnJhbmRCb2FyZElkfT1vYmo7XG5jb25zdCByZXN1bHQ9XG5hd2FpdCB3YWxsZXRBZG1pbi5nZXREZXBvc2l0RmFjZXRJZChicmFuZEJvYXJkSWQpO1xucmV0dXJue1xudHlwZTond2FsbGV0RGVwb3NpdEZhY2V0SWRSZXNwb25zZScsXG5kYXRhOnJlc3VsdH07XG5cbiB9XG5cbmNhc2Und2FsbGV0U3VnZ2VzdElzc3Vlcic6e1xuY29uc3R7cGV0bmFtZSxib2FyZElkfT1vYmo7XG5jb25zdCByZXN1bHQ9YXdhaXQgd2FsbGV0QWRtaW4uc3VnZ2VzdElzc3VlcihcbnBldG5hbWUsXG5ib2FyZElkLFxuZGFwcE9yaWdpbik7XG5cbnJldHVybntcbnR5cGU6J3dhbGxldFN1Z2dlc3RJc3N1ZXJSZXNwb25zZScsXG5kYXRhOnJlc3VsdH07XG5cbiB9XG5cbmNhc2Und2FsbGV0U3VnZ2VzdEluc3RhbmNlJzp7XG5jb25zdHtwZXRuYW1lLGJvYXJkSWR9PW9iajtcbmNvbnN0IHJlc3VsdD1hd2FpdCB3YWxsZXRBZG1pbi5zdWdnZXN0SW5zdGFuY2UoXG5wZXRuYW1lLFxuYm9hcmRJZCxcbmRhcHBPcmlnaW4pO1xuXG5yZXR1cm57XG50eXBlOid3YWxsZXRTdWdnZXN0SW5zdGFuY2VSZXNwb25zZScsXG5kYXRhOnJlc3VsdH07XG5cbiB9XG5cbmNhc2Und2FsbGV0U3VnZ2VzdEluc3RhbGxhdGlvbic6e1xuY29uc3R7cGV0bmFtZSxib2FyZElkfT1vYmo7XG5jb25zdCByZXN1bHQ9YXdhaXQgd2FsbGV0QWRtaW4uc3VnZ2VzdEluc3RhbGxhdGlvbihcbnBldG5hbWUsXG5ib2FyZElkLFxuZGFwcE9yaWdpbik7XG5cbnJldHVybntcbnR5cGU6J3dhbGxldFN1Z2dlc3RJbnN0YWxsYXRpb25SZXNwb25zZScsXG5kYXRhOnJlc3VsdH07XG5cbiB9XG5cbmRlZmF1bHQ6XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTt9XG5cbiB9fSk7XG5cbiB9fSk7XG5cbiB9XG5cbnN0YXJ0U3Vic2NyaXB0aW9ucygpO1xuXG5mdW5jdGlvbiBnZXRDb21tYW5kSGFuZGxlciguLi5wYXJhbXMpe1xuY29uc29sZS5kZWJ1ZyhcbidnZXRDb21tYW5kSGFuZGxlciBjYWxsZWQgaW4gd2FsbGV0LCBidXQgZG9lcyBub3QgZXhpc3QnLFxucGFyYW1zKTtcblxuIH1cblxucmV0dXJuIEZhcigncm9vdCcse1xuc3RhcnR1cCxcbmdldFdhbGxldCxcbnNldEhUVFBPYmplY3QsXG5nZXRCcmlkZ2VVUkxIYW5kbGVyLFxuZ2V0Q29tbWFuZEhhbmRsZXJ9KTtcblxuIH1cblxuLypcblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICAgICAgICAgIHNwYXduKHRlcm1zLF9pbnZpdGVNYWtlcil7XG5jb25zdCB3YWxsZXRWYXQ9YnVpbGRSb290T2JqZWN0KCk7XG5yZXR1cm4gd2FsbGV0VmF0LnN0YXJ0dXAodGVybXMpLnRoZW4oKF8pPT53YWxsZXRWYXQpO1xuIH0kaM2PX29uY2UuZGVmYXVsdCggICAgIHNwYXduKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmF1bHQiOlsiZGVmYXVsdCJdLCJidWlsZFJvb3RPYmplY3QiOlsiYnVpbGRSb290T2JqZWN0Il19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHB5q0ZdGQAAXRkAADMAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9pbnRlcm5hbCIsIkBhZ29yaWMvbm90aWZpZXIiLCJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCJdLCJleHBvcnRzIjpbIlJlY29yZGVyS2l0U2hhcGUiLCJkZWZpbmVFUmVjb3JkZXJLaXQiLCJkZWZpbmVSZWNvcmRlcktpdCIsInByZXBhcmVNb2NrUmVjb3JkZXJLaXRNYWtlcnMiLCJwcmVwYXJlUmVjb3JkZXIiLCJwcmVwYXJlUmVjb3JkZXJLaXQiLCJwcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLFN0b3JhZ2VOb2RlU2hhcGUscHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0LG1ha2VGYWtlTWFyc2hhbGxlcixtYWtlRmFrZVN0b3JhZ2UsbXVzdE1hdGNoLE0sbWFrZVNjYWxhckJpZ01hcFN0b3JlLHByZXBhcmVFeG9DbGFzcyxFOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJTdG9yYWdlTm9kZVNoYXBlXCIsIFskaM2PX2EgPT4gKFN0b3JhZ2VOb2RlU2hhcGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyXCIsIFtbXCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllci90b29scy90ZXN0U3VwcG9ydHMuanNcIiwgW1tcIm1ha2VGYWtlTWFyc2hhbGxlclwiLCBbJGjNj19hID0+IChtYWtlRmFrZU1hcnNoYWxsZXIgPSAkaM2PX2EpXV0sW1wibWFrZUZha2VTdG9yYWdlXCIsIFskaM2PX2EgPT4gKG1ha2VGYWtlU3RvcmFnZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZVJlY29yZGVyPShiYWdnYWdlLG1hcnNoYWxsZXIpPT57XG5jb25zdCBtYWtlUmVjb3JkZXI9cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbidSZWNvcmRlcicsXG5NLmludGVyZmFjZSgnUmVjb3JkZXInLHtcbmdldFN0b3JhZ2VOb2RlOk0uY2FsbCgpLnJldHVybnMoU3RvcmFnZU5vZGVTaGFwZSksXG5nZXRTdG9yYWdlUGF0aDpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbndyaXRlOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbndyaXRlRmluYWw6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoTS5wcm9taXNlKCkpfSksXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbihcbnB1Ymxpc2hlcixcbnN0b3JhZ2VOb2RlLFxudmFsdWVTaGFwZT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL00uYW55KCkpPT5cbntcbnJldHVybntcbmNsb3NlZDpmYWxzZSxcbnB1Ymxpc2hlcixcbnN0b3JhZ2VOb2RlLFxuc3RvcmFnZVBhdGg6LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovdW5kZWZpbmVkLFxudmFsdWVTaGFwZX07XG5cbiB9LFxue1xuZ2V0U3RvcmFnZU5vZGUoKXtcbnJldHVybiB0aGlzLnN0YXRlLnN0b3JhZ2VOb2RlO1xuIH0sXG4vKlxuXG5cblxuICAgICAgICovXG4gICAgICBhc3luYyBnZXRTdG9yYWdlUGF0aCgpe1xuY29uc3R7c3RvcmFnZVBhdGg6aGVsZFBhdGh9PXRoaXMuc3RhdGU7XG4vL1xuYXdhaXQgbnVsbDtcbmlmKGhlbGRQYXRoIT09dW5kZWZpbmVkKXtcbnJldHVybiBoZWxkUGF0aDtcbiB9XG5jb25zdCBwYXRoPWF3YWl0IEUodGhpcy5zdGF0ZS5zdG9yYWdlTm9kZSkuZ2V0UGF0aCgpO1xudGhpcy5zdGF0ZS5zdG9yYWdlUGF0aD1wYXRoO1xucmV0dXJuIHBhdGg7XG4gfSxcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgd3JpdGUodmFsdWUpe1xuY29uc3R7Y2xvc2VkLHB1Ymxpc2hlcixzdG9yYWdlTm9kZSx2YWx1ZVNoYXBlfT10aGlzLnN0YXRlO1xuIWNsb3NlZHx8RmFpbCBgY2Fubm90IHdyaXRlIHRvIGNsb3NlZCByZWNvcmRlcmA7XG5tdXN0TWF0Y2godmFsdWUsdmFsdWVTaGFwZSk7XG5jb25zdCBlbmNvZGVkPWF3YWl0IEUobWFyc2hhbGxlcikudG9DYXBEYXRhKHZhbHVlKTtcbmNvbnN0IHNlcmlhbGl6ZWQ9SlNPTi5zdHJpbmdpZnkoZW5jb2RlZCk7XG5hd2FpdCBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShzZXJpYWxpemVkKTtcblxuLy9cbnJldHVybiBwdWJsaXNoZXIucHVibGlzaCh2YWx1ZSk7XG4gfSxcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgd3JpdGVGaW5hbCh2YWx1ZSl7XG5jb25zdHtjbG9zZWQscHVibGlzaGVyLHN0b3JhZ2VOb2RlLHZhbHVlU2hhcGV9PXRoaXMuc3RhdGU7XG4hY2xvc2VkfHxGYWlsIGBjYW5ub3Qgd3JpdGUgdG8gY2xvc2VkIHJlY29yZGVyYDtcbm11c3RNYXRjaCh2YWx1ZSx2YWx1ZVNoYXBlKTtcbmNvbnN0IGVuY29kZWQ9YXdhaXQgRShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuY29uc3Qgc2VyaWFsaXplZD1KU09OLnN0cmluZ2lmeShlbmNvZGVkKTtcbmF3YWl0IEUoc3RvcmFnZU5vZGUpLnNldFZhbHVlKHNlcmlhbGl6ZWQpO1xuXG4vL1xudGhpcy5zdGF0ZS5jbG9zZWQ9dHJ1ZTtcbnJldHVybiBwdWJsaXNoZXIuZmluaXNoKHZhbHVlKTtcbiB9fSk7XG5cblxuXG5yZXR1cm4gbWFrZVJlY29yZGVyO1xuIH07JGjNj19vbmNlLnByZXBhcmVSZWNvcmRlcihwcmVwYXJlUmVjb3JkZXIpO1xuaGFyZGVuKHByZXBhcmVSZWNvcmRlcik7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmluZVJlY29yZGVyS2l0PSh7bWFrZVJlY29yZGVyLG1ha2VEdXJhYmxlUHVibGlzaEtpdH0pPT57XG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZVJlY29yZGVyS2l0PShzdG9yYWdlTm9kZSx2YWx1ZVNoYXBlKT0+e1xuY29uc3R7c3Vic2NyaWJlcixwdWJsaXNoZXJ9PW1ha2VEdXJhYmxlUHVibGlzaEtpdCgpO1xuY29uc3QgcmVjb3JkZXI9bWFrZVJlY29yZGVyKFxucHVibGlzaGVyLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnN0b3JhZ2VOb2RlLFxuXG52YWx1ZVNoYXBlKTtcblxucmV0dXJuIGhhcmRlbih7c3Vic2NyaWJlcixyZWNvcmRlcn0pO1xuIH07XG5yZXR1cm4gbWFrZVJlY29yZGVyS2l0O1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLmRlZmluZVJlY29yZGVyS2l0KGRlZmluZVJlY29yZGVyS2l0KTtcbmNvbnN0ICAgICAgICBkZWZpbmVFUmVjb3JkZXJLaXQ9KHttYWtlUmVjb3JkZXIsbWFrZUR1cmFibGVQdWJsaXNoS2l0fSk9Pntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlRVJlY29yZGVyS2l0PShzdG9yYWdlTm9kZVAsdmFsdWVTaGFwZSk9PntcbmNvbnN0e3B1Ymxpc2hlcixzdWJzY3JpYmVyfT1tYWtlRHVyYWJsZVB1Ymxpc2hLaXQoKTtcbmNvbnN0IHJlY29yZGVyUD1FLndoZW4oc3RvcmFnZU5vZGVQLChzdG9yYWdlTm9kZSk9PlxubWFrZVJlY29yZGVyKFxucHVibGlzaGVyLFxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovc3RvcmFnZU5vZGUsXG52YWx1ZVNoYXBlKSk7XG5cblxucmV0dXJue3N1YnNjcmliZXIscmVjb3JkZXJQfTtcbiB9O1xucmV0dXJuIG1ha2VFUmVjb3JkZXJLaXQ7XG4gfTskaM2PX29uY2UuZGVmaW5lRVJlY29yZGVyS2l0KGRlZmluZUVSZWNvcmRlcktpdCk7XG5oYXJkZW4oZGVmaW5lRVJlY29yZGVyS2l0KTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUmVjb3JkZXJLaXQ9KGJhZ2dhZ2UsbWFyc2hhbGxlcik9PntcbmNvbnN0IG1ha2VEdXJhYmxlUHVibGlzaEtpdD1wcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQoXG5iYWdnYWdlLFxuJ0R1cmFibGUgUHVibGlzaCBLaXQnKTtcblxuY29uc3QgbWFrZVJlY29yZGVyPXByZXBhcmVSZWNvcmRlcihiYWdnYWdlLG1hcnNoYWxsZXIpO1xucmV0dXJuIGRlZmluZVJlY29yZGVyS2l0KHttYWtlRHVyYWJsZVB1Ymxpc2hLaXQsbWFrZVJlY29yZGVyfSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5wcmVwYXJlUmVjb3JkZXJLaXQocHJlcGFyZVJlY29yZGVyS2l0KTtcbmNvbnN0ICAgICAgICBwcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnM9KGJhZ2dhZ2UsbWFyc2hhbGxlcik9PntcbmNvbnN0IG1ha2VEdXJhYmxlUHVibGlzaEtpdD1wcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQoXG5iYWdnYWdlLFxuJ0R1cmFibGUgUHVibGlzaCBLaXQnKTtcblxuY29uc3QgbWFrZVJlY29yZGVyPXByZXBhcmVSZWNvcmRlcihiYWdnYWdlLG1hcnNoYWxsZXIpO1xuXG5jb25zdCBtYWtlUmVjb3JkZXJLaXQ9ZGVmaW5lUmVjb3JkZXJLaXQoe1xubWFrZVJlY29yZGVyLFxubWFrZUR1cmFibGVQdWJsaXNoS2l0fSk7XG5cbmNvbnN0IG1ha2VFUmVjb3JkZXJLaXQ9ZGVmaW5lRVJlY29yZGVyS2l0KHtcbm1ha2VSZWNvcmRlcixcbm1ha2VEdXJhYmxlUHVibGlzaEtpdH0pO1xuXG5cbnJldHVybntcbm1ha2VEdXJhYmxlUHVibGlzaEtpdCxcbm1ha2VSZWNvcmRlcixcbm1ha2VSZWNvcmRlcktpdCxcbm1ha2VFUmVjb3JkZXJLaXR9O1xuXG4gfTtcblxuLypcblxuICovJGjNj19vbmNlLnByZXBhcmVSZWNvcmRlcktpdE1ha2VycyhwcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnMpO1xuY29uc3QgICAgICAgIHByZXBhcmVNb2NrUmVjb3JkZXJLaXRNYWtlcnM9KCk9PntcbmNvbnN0IGJhZ2dhZ2U9bWFrZVNjYWxhckJpZ01hcFN0b3JlKCdtb2NrIHJlY29yZGVyIGJhZ2dhZ2UnKTtcbmNvbnN0IG1hcnNoYWxsZXI9bWFrZUZha2VNYXJzaGFsbGVyKCk7XG5yZXR1cm57XG4uLi5wcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnMoYmFnZ2FnZSxtYXJzaGFsbGVyKSxcbnN0b3JhZ2VOb2RlOm1ha2VGYWtlU3RvcmFnZSgnbW9jayByZWNvcmRlciBzdG9yYWdlJyl9O1xuXG4gfTskaM2PX29uY2UucHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2VycyhwcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzKTtcblxuY29uc3QgICAgICAgIFJlY29yZGVyS2l0U2hhcGU9e1xucmVjb3JkZXI6TS5yZW1vdGFibGUoKSxcbnN1YnNjcmliZXI6TS5yZW1vdGFibGUoKX07JGjNj19vbmNlLlJlY29yZGVyS2l0U2hhcGUoUmVjb3JkZXJLaXRTaGFwZSk7XG5cbmhhcmRlbihSZWNvcmRlcktpdFNoYXBlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVSZWNvcmRlciI6WyJwcmVwYXJlUmVjb3JkZXIiXSwiZGVmaW5lUmVjb3JkZXJLaXQiOlsiZGVmaW5lUmVjb3JkZXJLaXQiXSwiZGVmaW5lRVJlY29yZGVyS2l0IjpbImRlZmluZUVSZWNvcmRlcktpdCJdLCJwcmVwYXJlUmVjb3JkZXJLaXQiOlsicHJlcGFyZVJlY29yZGVyS2l0Il0sInByZXBhcmVSZWNvcmRlcktpdE1ha2VycyI6WyJwcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnMiXSwicHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2VycyI6WyJwcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzIl0sIlJlY29yZGVyS2l0U2hhcGUiOlsiUmVjb3JkZXJLaXRTaGFwZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD94zlxtwEAALcBAAAeAAAAQGFnb3JpYy96b25lLXYwLjIuMi9kdXJhYmxlLmpzeyJpbXBvcnRzIjpbIi4vc3JjL2R1cmFibGUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9kdXJhYmxlLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2R1cmFibGUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAvR5yejkRAAA5EQAAIgAAAEBhZ29yaWMvem9uZS12MC4yLjIvc3JjL2R1cmFibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL2Jhc2Utem9uZSJdLCJleHBvcnRzIjpbIm1ha2VEdXJhYmxlWm9uZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRmFyLGlzUGFzc2FibGUsY2FuQmVEdXJhYmxlLG1ha2VTY2FsYXJNYXBTdG9yZSxwcmVwYXJlRXhvLHByZXBhcmVFeG9DbGFzcyxwcmVwYXJlRXhvQ2xhc3NLaXQscHJvdmlkZUR1cmFibGVNYXBTdG9yZSxwcm92aWRlRHVyYWJsZVNldFN0b3JlLHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLHByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlLHdhdGNoUHJvbWlzZSxrZXlzLG1ha2VPbmNlS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImlzUGFzc2FibGVcIiwgWyRozY9fYSA9PiAoaXNQYXNzYWJsZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcImNhbkJlRHVyYWJsZVwiLCBbJGjNj19hID0+IChjYW5CZUR1cmFibGUgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG8gPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzS2l0ID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcm92aWRlRHVyYWJsZVNldFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlU2V0U3RvcmUgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUgPSAkaM2PX2EpXV0sW1wid2F0Y2hQcm9taXNlXCIsIFskaM2PX2EgPT4gKHdhdGNoUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvYmFzZS16b25lXCIsIFtbXCJhZ29yaWNWYXREYXRhS2V5c1wiLCBbJGjNj19hID0+IChrZXlzID0gJGjNj19hKV1dLFtcIm1ha2VPbmNlS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VPbmNlS2l0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzU3RvcmFibGU9KHNwZWNpbWVuKT0+aXNQYXNzYWJsZShzcGVjaW1lbikmJmNhbkJlRHVyYWJsZShzcGVjaW1lbik7XG5oYXJkZW4oaXNTdG9yYWJsZSk7XG5cbi8qXG5cbiAqL1xuY29uc3QgYXR0YWNoRHVyYWJsZVN0b3Jlcz0oZ2V0QmFnZ2FnZSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hcFN0b3JlPShsYWJlbCxvcHRpb25zKT0+e1xuY29uc3QgYmFnZ2FnZT1nZXRCYWdnYWdlKCk7XG5jb25zdCByZXQ9cHJvdmlkZUR1cmFibGVNYXBTdG9yZShiYWdnYWdlLGxhYmVsLG9wdGlvbnMpO1xucmV0dXJuIHJldDtcbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2V0U3RvcmU9KGxhYmVsLG9wdGlvbnMpPT5cbnByb3ZpZGVEdXJhYmxlU2V0U3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdlYWtTZXRTdG9yZT0obGFiZWwsb3B0aW9ucyk9PlxucHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdlYWtNYXBTdG9yZT0obGFiZWwsb3B0aW9ucyk9PlxucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJldHVybiBGYXIoJ2R1cmFibGVTdG9yZXMnLHtcbmRldGFjaGVkOigpPT5kZXRhY2hlZER1cmFibGVTdG9yZXMsXG5pc1N0b3JhYmxlLFxubWFwU3RvcmUsXG5zZXRTdG9yZSxcbndlYWtNYXBTdG9yZSxcbndlYWtTZXRTdG9yZX0pO1xuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZXRhY2hlZER1cmFibGVTdG9yZXM9YXR0YWNoRHVyYWJsZVN0b3JlcygoKT0+XG5tYWtlU2NhbGFyTWFwU3RvcmUoJ2RldGFjaGVkJykpO1xuXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUR1cmFibGVab25lPShiYWdnYWdlLGJhc2VMYWJlbD0nZHVyYWJsZVpvbmUnKT0+e1xuYmFnZ2FnZXx8RmFpbCBgYmFnZ2FnZSByZXF1aXJlZGA7XG5cbmNvbnN0IGF0dGFjaGVkU3RvcmVzPWF0dGFjaER1cmFibGVTdG9yZXMoKCk9PmJhZ2dhZ2UpO1xuXG5jb25zdHttYWtlT25jZSx3cmFwUHJvdmlkZXJ9PW1ha2VPbmNlS2l0KFxuYmFzZUxhYmVsLFxuYXR0YWNoZWRTdG9yZXMsXG5iYWdnYWdlKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBleG9DbGFzcz0oLi4uYXJncyk9PnByZXBhcmVFeG9DbGFzcyhiYWdnYWdlLC4uLmFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8vXG5jb25zdCBleG9DbGFzc0tpdD0oLi4uYXJncyk9PnByZXBhcmVFeG9DbGFzc0tpdChiYWdnYWdlLC4uLmFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGV4bz0oLi4uYXJncyk9PnByZXBhcmVFeG8oYmFnZ2FnZSwuLi5hcmdzKTtcblxuY29uc3Qgc3ViWm9uZVN0b3JlPXdyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy5tYXBTdG9yZSxrZXlzLnpvbmUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN1YlpvbmU9KGxhYmVsLG9wdGlvbnM9e30pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3ViQmFnZ2FnZT1zdWJab25lU3RvcmUobGFiZWwsb3B0aW9ucyk7XG5yZXR1cm4gbWFrZUR1cmFibGVab25lKHN1YkJhZ2dhZ2UsIGAke2Jhc2VMYWJlbH0uJHtsYWJlbH1gKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCdkdXJhYmxlWm9uZScse1xuZXhvOndyYXBQcm92aWRlcihleG8sa2V5cy5leG8pLFxuZXhvQ2xhc3M6d3JhcFByb3ZpZGVyKGV4b0NsYXNzLGtleXMuZXhvQ2xhc3MpLFxuZXhvQ2xhc3NLaXQ6d3JhcFByb3ZpZGVyKGV4b0NsYXNzS2l0LGtleXMuZXhvQ2xhc3NLaXQpLFxuc3ViWm9uZSxcblxubWFrZU9uY2UsXG53YXRjaFByb21pc2UsXG5kZXRhY2hlZDphdHRhY2hlZFN0b3Jlcy5kZXRhY2hlZCxcbmlzU3RvcmFibGU6YXR0YWNoZWRTdG9yZXMuaXNTdG9yYWJsZSxcblxubWFwU3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLm1hcFN0b3JlLGtleXMuc3RvcmUpLFxuc2V0U3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLnNldFN0b3JlLGtleXMuc3RvcmUpLFxud2Vha01hcFN0b3JlOndyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy53ZWFrTWFwU3RvcmUsa2V5cy5zdG9yZSksXG53ZWFrU2V0U3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLndlYWtTZXRTdG9yZSxrZXlzLnN0b3JlKX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUR1cmFibGVab25lKG1ha2VEdXJhYmxlWm9uZSk7XG5oYXJkZW4obWFrZUR1cmFibGVab25lKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VEdXJhYmxlWm9uZSI6WyJtYWtlRHVyYWJsZVpvbmUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAKjJjOPYEAAD2BAAAKwAAAEBlbmRvL2NvbW1vbi12MS4yLjkvYXBwbHktbGFiZWxpbmctZXJyb3IuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiLi90aHJvdy1sYWJlbGVkLmpzIl0sImV4cG9ydHMiOlsiYXBwbHlMYWJlbGluZ0Vycm9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxpc1Byb21pc2UsdGhyb3dMYWJlbGVkOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3Rocm93LWxhYmVsZWQuanNcIiwgW1tcInRocm93TGFiZWxlZFwiLCBbJGjNj19hID0+ICh0aHJvd0xhYmVsZWQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXBwbHlMYWJlbGluZ0Vycm9yPShmdW5jLGFyZ3MsbGFiZWw9dW5kZWZpbmVkKT0+e1xuaWYobGFiZWw9PT11bmRlZmluZWQpe1xucmV0dXJuIGZ1bmMoLi4uYXJncyk7XG4gfVxubGV0IHJlc3VsdDtcbnRyeXtcbnJlc3VsdD1mdW5jKC4uLmFyZ3MpO1xuIH1jYXRjaChlcnIpe1xudGhyb3dMYWJlbGVkKGVycixsYWJlbCk7XG4gfVxuaWYoaXNQcm9taXNlKHJlc3VsdCkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIEUud2hlbihyZXN1bHQsdW5kZWZpbmVkLChyZWFzb24pPT50aHJvd0xhYmVsZWQocmVhc29uLGxhYmVsKSk7XG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9OyRozY9fb25jZS5hcHBseUxhYmVsaW5nRXJyb3IoYXBwbHlMYWJlbGluZ0Vycm9yKTtcbmhhcmRlbihhcHBseUxhYmVsaW5nRXJyb3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXBwbHlMYWJlbGluZ0Vycm9yIjpbImFwcGx5TGFiZWxpbmdFcnJvciJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAJf6BMiwQAAIsEAAAqAAAAQGVuZG8vY29tbW9uLXYxLjIuOS9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImZyb21VbmlxdWVFbnRyaWVzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV1dKTsgICBcblxuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGZyb21VbmlxdWVFbnRyaWVzPShhbGxFbnRyaWVzKT0+e1xuY29uc3QgZW50cmllc0FycmF5PVsuLi5hbGxFbnRyaWVzXTtcbmNvbnN0IHJlc3VsdD1oYXJkZW4oZnJvbUVudHJpZXMoZW50cmllc0FycmF5KSk7XG5pZihvd25LZXlzKHJlc3VsdCkubGVuZ3RoPT09ZW50cmllc0FycmF5Lmxlbmd0aCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNvbnN0IG5hbWVzPW5ldyBTZXQoKTtcbmZvcihjb25zdFtuYW1lLF9db2YgZW50cmllc0FycmF5KXtcbmlmKG5hbWVzLmhhcyhuYW1lKSl7XG5GYWlsIGBjb2xsaXNpb24gb24gcHJvcGVydHkgbmFtZSAke3EobmFtZSl9OiAke2VudHJpZXNBcnJheX1gO1xuIH1cbm5hbWVzLmFkZChuYW1lKTtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogZmFpbGVkIHRvIGNyZWF0ZSBvYmplY3QgZnJvbSB1bmlxdWUgZW50cmllc2A7XG4gfTskaM2PX29uY2UuZnJvbVVuaXF1ZUVudHJpZXMoZnJvbVVuaXF1ZUVudHJpZXMpO1xuaGFyZGVuKGZyb21VbmlxdWVFbnRyaWVzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImZyb21VbmlxdWVFbnRyaWVzIjpbImZyb21VbmlxdWVFbnRyaWVzIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAL0YEu1mAgAAZgIAACQAAABAZW5kby9jb21tb24tdjEuMi45L2lkZW50LWNoZWNrZXIuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImlkZW50Q2hlY2tlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaWRlbnRDaGVja2VyPShjb25kLF9kZXRhaWxzKT0+Y29uZDskaM2PX29uY2UuaWRlbnRDaGVja2VyKGlkZW50Q2hlY2tlcik7XG5oYXJkZW4oaWRlbnRDaGVja2VyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlkZW50Q2hlY2tlciI6WyJpZGVudENoZWNrZXIiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAJPZsEacCAACnAgAAJgAAAEBlbmRvL2NvbW1vbi12MS4yLjkvbGlzdC1kaWZmZXJlbmNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJsaXN0RGlmZmVyZW5jZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbGlzdERpZmZlcmVuY2U9KGxlZnRMaXN0LHJpZ2h0TGlzdCk9PntcbmNvbnN0IHJpZ2h0U2V0PW5ldyBTZXQocmlnaHRMaXN0KTtcbnJldHVybiBsZWZ0TGlzdC5maWx0ZXIoKGVsZW1lbnQpPT4hcmlnaHRTZXQuaGFzKGVsZW1lbnQpKTtcbiB9OyRozY9fb25jZS5saXN0RGlmZmVyZW5jZShsaXN0RGlmZmVyZW5jZSk7XG5oYXJkZW4obGlzdERpZmZlcmVuY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibGlzdERpZmZlcmVuY2UiOlsibGlzdERpZmZlcmVuY2UiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAydMyyIwDAACMAwAAKgAAAEBlbmRvL2NvbW1vbi12MS4yLjkvbWFrZS1hcnJheS1pdGVyYXRvci5qc3siaW1wb3J0cyI6WyIuL21ha2UtaXRlcmF0b3IuanMiXSwiZXhwb3J0cyI6WyJtYWtlQXJyYXlJdGVyYXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VJdGVyYXRvcjskaM2PX2ltcG9ydHMoW1tcIi4vbWFrZS1pdGVyYXRvci5qc1wiLCBbW1wibWFrZUl0ZXJhdG9yXCIsIFskaM2PX2EgPT4gKG1ha2VJdGVyYXRvciA9ICRozY9fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUFycmF5SXRlcmF0b3I9KGFycik9PntcbmNvbnN0e2xlbmd0aH09YXJyO1xubGV0IGk9MDtcbnJldHVybiBtYWtlSXRlcmF0b3IoKCk9Pntcbi8qICAgICAgICAgICAgKi9cbmxldCB2YWx1ZTtcbmlmKGk8bGVuZ3RoKXtcbnZhbHVlPWFycltpXTtcbmkrPTE7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfVxuLy9cbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZX0pO1xuIH0pO1xuIH07JGjNj19vbmNlLm1ha2VBcnJheUl0ZXJhdG9yKG1ha2VBcnJheUl0ZXJhdG9yKTtcbmhhcmRlbihtYWtlQXJyYXlJdGVyYXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlQXJyYXlJdGVyYXRvciI6WyJtYWtlQXJyYXlJdGVyYXRvciJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAtci2caAIAAGgCAAAkAAAAQGVuZG8vY29tbW9uLXYxLjIuOS9tYWtlLWl0ZXJhdG9yLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlSXRlcmF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSXRlcmF0b3I9KG5leHQpPT57XG5jb25zdCBpdGVyPWhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+aXRlcixcbm5leHR9KTtcblxucmV0dXJuIGl0ZXI7XG4gfTskaM2PX29uY2UubWFrZUl0ZXJhdG9yKG1ha2VJdGVyYXRvcik7XG5oYXJkZW4obWFrZUl0ZXJhdG9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VJdGVyYXRvciI6WyJtYWtlSXRlcmF0b3IiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAACs9TrDEDAAAxAwAAIQAAAEBlbmRvL2NvbW1vbi12MS4yLjkvb2JqZWN0LW1hcC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsib2JqZWN0TWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIGNvbnN0e2VudHJpZXMsZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgb2JqZWN0TWFwPShvcmlnaW5hbCxtYXBGbik9PntcbmNvbnN0IGVudHM9ZW50cmllcyhvcmlnaW5hbCk7XG5jb25zdCBtYXBFbnRzPWVudHMubWFwKFxuKFtrLHZdKT0+LyogICAgICAgICAgICAgICAgICAgICAgICovW2ssbWFwRm4odixrKV0pO1xuXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL2hhcmRlbihmcm9tRW50cmllcyhtYXBFbnRzKSkpO1xuIH07JGjNj19vbmNlLm9iamVjdE1hcChvYmplY3RNYXApO1xuaGFyZGVuKG9iamVjdE1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJvYmplY3RNYXAiOlsib2JqZWN0TWFwIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIZK65wQBAAAEAQAACYAAABAZW5kby9jb21tb24tdjEuMi45L29iamVjdC1tZXRhLW1hcC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsib2JqZWN0TWV0YU1hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBjb25zdHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLGNyZWF0ZSxmcm9tRW50cmllc309T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBvYmplY3RNZXRhTWFwPShcbm9yaWdpbmFsLFxubWV0YU1hcEZuLFxucHJvdG89T2JqZWN0LnByb3RvdHlwZSk9Plxue1xuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvcmlnaW5hbCk7XG5jb25zdCBrZXlzPW93bktleXMob3JpZ2luYWwpO1xuXG5jb25zdCBkZXNjRW50cmllcz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5rZXlzLlxubWFwKChrZXkpPT5ba2V5LG1ldGFNYXBGbihkZXNjc1trZXldLGtleSldKS5cbmZpbHRlcigoW19rZXksb3B0RGVzY10pPT5vcHREZXNjIT09dW5kZWZpbmVkKTtcblxucmV0dXJuIGhhcmRlbihjcmVhdGUocHJvdG8sZnJvbUVudHJpZXMoZGVzY0VudHJpZXMpKSk7XG4gfTskaM2PX29uY2Uub2JqZWN0TWV0YU1hcChvYmplY3RNZXRhTWFwKTtcbmhhcmRlbihvYmplY3RNZXRhTWFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im9iamVjdE1ldGFNYXAiOlsib2JqZWN0TWV0YU1hcCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC7uRglEAQAABAEAAAkAAAAQGVuZG8vY29tbW9uLXYxLjIuOS90aHJvdy1sYWJlbGVkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbInRocm93TGFiZWxlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsbWFrZUVycm9yLGFubm90YXRlRXJyb3I7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRozY9fYSA9PiAobWFrZUVycm9yID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB0aHJvd0xhYmVsZWQ9KFxuaW5uZXJFcnIsXG5sYWJlbCxcbmVyckNvbnN0cnVjdG9yPXVuZGVmaW5lZCxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG57XG5pZih0eXBlb2YgbGFiZWw9PT0nbnVtYmVyJyl7XG5sYWJlbD0gYFske2xhYmVsfV1gO1xuIH1cbmNvbnN0IG91dGVyRXJyPW1ha2VFcnJvcihcbiBgJHtsYWJlbH06ICR7aW5uZXJFcnIubWVzc2FnZX1gLFxuZXJyQ29uc3RydWN0b3IsXG5vcHRpb25zKTtcblxuYW5ub3RhdGVFcnJvcihvdXRlckVycixYIGBDYXVzZWQgYnkgJHtpbm5lckVycn1gKTtcbnRocm93IG91dGVyRXJyO1xuIH07JGjNj19vbmNlLnRocm93TGFiZWxlZCh0aHJvd0xhYmVsZWQpO1xuaGFyZGVuKHRocm93TGFiZWxlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ0aHJvd0xhYmVsZWQiOlsidGhyb3dMYWJlbGVkIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOnrrYHDAQAAwwEAACEAAABAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvZW52LW9wdGlvbnMuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9lbnYtb3B0aW9ucy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9lbnYtb3B0aW9ucy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAVnGiQGw4AABsOAAArAAAAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44L3NyYy9lbnYtb3B0aW9ucy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyIsImdldEVudmlyb25tZW50T3B0aW9uIiwiZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCIsIm1ha2VFbnZpcm9ubWVudENhcHRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKiAgICAgICAgICAgICAgICAgICAqL1xuLy9cblxuLy9cbi8vXG5cbi8vXG4vL1xuLy9cblxuY29uc3R7ZnJlZXplfT1PYmplY3Q7XG5jb25zdHthcHBseX09UmVmbGVjdDtcblxuLy9cbi8vXG5jb25zdCB1bmN1cnJ5VGhpcz1cbihmbik9PlxuKHJlY2VpdmVyLC4uLmFyZ3MpPT5cbmFwcGx5KGZuLHJlY2VpdmVyLGFyZ3MpO1xuY29uc3QgYXJyYXlQdXNoPXVuY3VycnlUaGlzKEFycmF5LnByb3RvdHlwZS5wdXNoKTtcbmNvbnN0IGFycmF5SW5jbHVkZXM9dW5jdXJyeVRoaXMoQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzKTtcbmNvbnN0IHN0cmluZ1NwbGl0PXVuY3VycnlUaGlzKFN0cmluZy5wcm90b3R5cGUuc3BsaXQpO1xuXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG5jb25zdCBGYWlsPShsaXRlcmFscywuLi5hcmdzKT0+e1xubGV0IG1zZz1saXRlcmFsc1swXTtcbmZvcihsZXQgaT0wO2k8YXJncy5sZW5ndGg7aSs9MSl7XG5tc2c9IGAke21zZ30ke2FyZ3NbaV19JHtsaXRlcmFsc1tpKzFdfWA7XG4gfVxudGhyb3cgRXJyb3IobXNnKTtcbiB9O1xuXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVudmlyb25tZW50Q2FwdG9yPShhR2xvYmFsLGRyb3BOYW1lcz1mYWxzZSk9PntcbmNvbnN0IGNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcz1bXTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0RW52aXJvbm1lbnRPcHRpb249KFxub3B0aW9uTmFtZSxcbmRlZmF1bHRTZXR0aW5nLFxub3B0T3RoZXJWYWx1ZXM9dW5kZWZpbmVkKT0+XG57XG50eXBlb2Ygb3B0aW9uTmFtZT09PSdzdHJpbmcnfHxcbkZhaWwgYEVudmlyb25tZW50IG9wdGlvbiBuYW1lICR7cShvcHRpb25OYW1lKX0gbXVzdCBiZSBhIHN0cmluZy5gO1xudHlwZW9mIGRlZmF1bHRTZXR0aW5nPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIGRlZmF1bHQgc2V0dGluZyAke3EoXG5kZWZhdWx0U2V0dGluZylcbiB9IG11c3QgYmUgYSBzdHJpbmcuYDtcblxuLyogICAgICAgICAgICAgICAgICovXG5sZXQgc2V0dGluZz1kZWZhdWx0U2V0dGluZztcbmNvbnN0IGdsb2JhbFByb2Nlc3M9YUdsb2JhbC5wcm9jZXNzfHx1bmRlZmluZWQ7XG5jb25zdCBnbG9iYWxFbnY9XG50eXBlb2YgZ2xvYmFsUHJvY2Vzcz09PSdvYmplY3QnJiZnbG9iYWxQcm9jZXNzLmVudnx8dW5kZWZpbmVkO1xuaWYodHlwZW9mIGdsb2JhbEVudj09PSdvYmplY3QnKXtcbmlmKG9wdGlvbk5hbWUgaW4gZ2xvYmFsRW52KXtcbmlmKCFkcm9wTmFtZXMpe1xuYXJyYXlQdXNoKGNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcyxvcHRpb25OYW1lKTtcbiB9XG5jb25zdCBvcHRpb25WYWx1ZT1nbG9iYWxFbnZbb3B0aW9uTmFtZV07XG4vL1xudHlwZW9mIG9wdGlvblZhbHVlPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIG5hbWVkICR7cShcbm9wdGlvbk5hbWUpXG4gfSwgaWYgcHJlc2VudCwgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUsIGdvdCAke3EoXG5vcHRpb25WYWx1ZSlcbiB9YDtcbnNldHRpbmc9b3B0aW9uVmFsdWU7XG4gfVxuIH1cbm9wdE90aGVyVmFsdWVzPT09dW5kZWZpbmVkfHxcbnNldHRpbmc9PT1kZWZhdWx0U2V0dGluZ3x8XG5hcnJheUluY2x1ZGVzKG9wdE90aGVyVmFsdWVzLHNldHRpbmcpfHxcbkZhaWwgYFVucmVjb2duaXplZCAke3Eob3B0aW9uTmFtZSl9IHZhbHVlICR7cShcbnNldHRpbmcpXG4gfS4gRXhwZWN0ZWQgb25lIG9mICR7cShbZGVmYXVsdFNldHRpbmcsLi4ub3B0T3RoZXJWYWx1ZXNdKX1gO1xucmV0dXJuIHNldHRpbmc7XG4gfTtcbmZyZWV6ZShnZXRFbnZpcm9ubWVudE9wdGlvbik7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGdldEVudmlyb25tZW50T3B0aW9uc0xpc3Q9KG9wdGlvbk5hbWUpPT57XG5jb25zdCBvcHRpb249Z2V0RW52aXJvbm1lbnRPcHRpb24ob3B0aW9uTmFtZSwnJyk7XG5yZXR1cm4gZnJlZXplKG9wdGlvbj09PScnP1tdOnN0cmluZ1NwbGl0KG9wdGlvbiwnLCcpKTtcbiB9O1xuZnJlZXplKGdldEVudmlyb25tZW50T3B0aW9uc0xpc3QpO1xuXG5jb25zdCBlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzPShvcHRpb25OYW1lLGVsZW1lbnQpPT5cbmFycmF5SW5jbHVkZXMoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdChvcHRpb25OYW1lKSxlbGVtZW50KTtcblxuY29uc3QgZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzPSgpPT57XG5yZXR1cm4gZnJlZXplKFsuLi5jYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXNdKTtcbiB9O1xuZnJlZXplKGdldENhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcyk7XG5cbnJldHVybiBmcmVlemUoe1xuZ2V0RW52aXJvbm1lbnRPcHRpb24sXG5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0LFxuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyxcbmdldENhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lc30pO1xuXG4gfTskaM2PX29uY2UubWFrZUVudmlyb25tZW50Q2FwdG9yKG1ha2VFbnZpcm9ubWVudENhcHRvcik7XG5mcmVlemUobWFrZUVudmlyb25tZW50Q2FwdG9yKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgIHtcbmdldEVudmlyb25tZW50T3B0aW9uLFxuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCxcbmVudmlyb25tZW50T3B0aW9uc0xpc3RIYXN9PVxubWFrZUVudmlyb25tZW50Q2FwdG9yKGdsb2JhbFRoaXMsdHJ1ZSk7JGjNj19vbmNlLmdldEVudmlyb25tZW50T3B0aW9uKGdldEVudmlyb25tZW50T3B0aW9uKTskaM2PX29uY2UuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdChnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KTskaM2PX29uY2UuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyhlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VFbnZpcm9ubWVudENhcHRvciI6WyJtYWtlRW52aXJvbm1lbnRDYXB0b3IiXSwiZ2V0RW52aXJvbm1lbnRPcHRpb24iOlsiZ2V0RW52aXJvbm1lbnRPcHRpb24iXSwiZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCI6WyJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0Il0sImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiOlsiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABatbqADggAAA4IAAAcAAAAQGVuZG8vZXJyb3JzLXYxLjIuOS9pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiRmFpbCIsIlgiLCJhbm5vdGF0ZUVycm9yIiwiYXNzZXJ0IiwiYiIsImJhcmUiLCJtYWtlRXJyb3IiLCJub3RlIiwicSIsInF1b3RlIiwicmVkYWN0ZWQiLCJ0aHJvd1JlZGFjdGVkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG5cbmNvbnN0IGdsb2JhbEFzc2VydD1nbG9iYWxUaGlzLmFzc2VydDtcblxuaWYoZ2xvYmFsQXNzZXJ0PT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQsIGltcG9ydCAnc2VzJyBiZWZvcmUgJ0BlbmRvL2Vycm9ycydgKTtcblxuIH1cblxuY29uc3QgbWlzc2luZz0vKiAgICAgICAgICAgICAgICAqL1tcbid0eXBlb2YnLFxuJ2Vycm9yJyxcbidmYWlsJyxcbidlcXVhbCcsXG4nc3RyaW5nJyxcbidub3RlJyxcbidkZXRhaWxzJyxcbidGYWlsJyxcbidxdW90ZScsXG4vL1xuLy9cbi8vXG4vL1xuJ21ha2VBc3NlcnQnXS5cbmZpbHRlcigobmFtZSk9Pmdsb2JhbEFzc2VydFtuYW1lXT09PXVuZGVmaW5lZCk7XG5pZihtaXNzaW5nLmxlbmd0aD4wKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQgbWV0aG9kcyAke21pc3Npbmcuam9pbihcbicsICcpXG4gfWApO1xuXG4gfVxuXG4vL1xuLy9cbi8vXG5jb25zdHtcbmJhcmUsXG5kZXRhaWxzOnJlZGFjdGVkLFxuZXJyb3I6bWFrZUVycm9yLFxuRmFpbDp0aHJvd1JlZGFjdGVkLFxubWFrZUFzc2VydDpfb21pdHRlZE1ha2VBc3NlcnQsXG5ub3RlLFxucXVvdGUsXG4uLi5hc3NlcnRpb25zfT1cbmdsb2JhbEFzc2VydDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbiRozY9fb25jZS5yZWRhY3RlZChyZWRhY3RlZCk7JGjNj19vbmNlLm1ha2VFcnJvcihtYWtlRXJyb3IpOyRozY9fb25jZS50aHJvd1JlZGFjdGVkKHRocm93UmVkYWN0ZWQpOyRozY9fb25jZS5ub3RlKG5vdGUpOyRozY9fb25jZS5xdW90ZShxdW90ZSk7Y29uc3QgYXNzZXJ0PSh2YWx1ZSxvcHREZXRhaWxzLGVyckNvbnRydWN0b3Isb3B0aW9ucyk9PlxuZ2xvYmFsQXNzZXJ0KHZhbHVlLG9wdERldGFpbHMsZXJyQ29udHJ1Y3RvcixvcHRpb25zKTskaM2PX29uY2UuYXNzZXJ0KGFzc2VydCk7XG5PYmplY3QuYXNzaWduKGFzc2VydCxhc3NlcnRpb25zKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgYmFyZU9yUXVvdGU9YmFyZXx8cXVvdGU7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuYmFyZU9yUXVvdGUoYmFyZU9yUXVvdGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVkYWN0ZWQiOlsicmVkYWN0ZWQiXSwiWCI6WyJyZWRhY3RlZCJdLCJtYWtlRXJyb3IiOlsibWFrZUVycm9yIl0sInRocm93UmVkYWN0ZWQiOlsidGhyb3dSZWRhY3RlZCJdLCJGYWlsIjpbInRocm93UmVkYWN0ZWQiXSwibm90ZSI6WyJub3RlIl0sImFubm90YXRlRXJyb3IiOlsibm90ZSJdLCJxdW90ZSI6WyJxdW90ZSJdLCJxIjpbInF1b3RlIl0sImFzc2VydCI6WyJhc3NlcnQiXSwiYmFyZSI6WyJiYXJlT3JRdW90ZSJdLCJiIjpbImJhcmVPclF1b3RlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMwZHYRMEQAATBEAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjMuMC9zcmMvRS5qc3siaW1wb3J0cyI6WyIuL3RyYWNrLXR1cm5zLmpzIiwiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHRyYWNrVHVybnMsbWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyOyRozY9faW1wb3J0cyhbW1wiLi90cmFjay10dXJucy5qc1wiLCBbW1widHJhY2tUdXJuc1wiLCBbJGjNj19hID0+ICh0cmFja1R1cm5zID0gJGjNj19hKV1dXV0sW1wiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzXCIsIFtbXCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXJcIiwgWyRozY9fYSA9PiAobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5jb25zdHtkZXRhaWxzOlgscXVvdGU6cSxGYWlsLGVycm9yOm1ha2VFcnJvcn09YXNzZXJ0O1xuY29uc3R7YXNzaWduLGZyZWV6ZX09T2JqZWN0O1xuXG4vKlxuXG4gKi9cblxuY29uc3Qgb25TZW5kPW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19TRU5EX0JSRUFLUE9JTlRTJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBiYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyPXtcbnNldChfdGFyZ2V0LF9wcm9wLF92YWx1ZSl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbmlzRXh0ZW5zaWJsZShfdGFyZ2V0KXtcbnJldHVybiBmYWxzZTtcbiB9LFxuc2V0UHJvdG90eXBlT2YoX3RhcmdldCxfdmFsdWUpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5kZWxldGVQcm9wZXJ0eShfdGFyZ2V0LF9wcm9wKXtcbnJldHVybiBmYWxzZTtcbiB9fTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFUHJveHlIYW5kbGVyPShyZWNpcGllbnQsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuZ2V0OihfdGFyZ2V0LHByb3BlcnR5S2V5LHJlY2VpdmVyKT0+e1xucmV0dXJuIGhhcmRlbihcbntcbi8vXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbltwcm9wZXJ0eUtleV0oLi4uYXJncyl7XG5pZih0aGlzIT09cmVjZWl2ZXIpe1xuLy9cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5yZWplY3QoXG5tYWtlRXJyb3IoXG5YIGBVbmV4cGVjdGVkIHJlY2VpdmVyIGZvciBcIiR7cShwcm9wZXJ0eUtleSl9XCIgbWV0aG9kIG9mIEUoJHtxKFxucmVjaXBpZW50KVxuIH0pYCkpO1xuXG5cbiB9XG5cbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHByb3BlcnR5S2V5KSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxucmV0dXJuIEhhbmRsZWRQcm9taXNlLmFwcGx5TWV0aG9kKHJlY2lwaWVudCxwcm9wZXJ0eUtleSxhcmdzKTtcbiB9XG4vL1xufVtwcm9wZXJ0eUtleV0pO1xuXG4gfSxcbmFwcGx5OihfdGFyZ2V0LF90aGlzQXJnLGFyZ0FycmF5PVtdKT0+e1xuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsdW5kZWZpbmVkKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbiB9XG5yZXR1cm4gSGFuZGxlZFByb21pc2UuYXBwbHlGdW5jdGlvbihyZWNpcGllbnQsYXJnQXJyYXkpO1xuIH0sXG5oYXM6KF90YXJnZXQsX3ApPT57XG4vL1xucmV0dXJuIHRydWU7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFU2VuZE9ubHlQcm94eUhhbmRsZXI9KHJlY2lwaWVudCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5nZXQ6KF90YXJnZXQscHJvcGVydHlLZXkscmVjZWl2ZXIpPT57XG5yZXR1cm4gaGFyZGVuKFxue1xuLy9cbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bcHJvcGVydHlLZXldKC4uLmFyZ3Mpe1xuLy9cbnRoaXM9PT1yZWNlaXZlcnx8XG5GYWlsIGBVbmV4cGVjdGVkIHJlY2VpdmVyIGZvciBcIiR7cShcbnByb3BlcnR5S2V5KVxuIH1cIiBtZXRob2Qgb2YgRS5zZW5kT25seSgke3EocmVjaXBpZW50KX0pYDtcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHByb3BlcnR5S2V5KSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxuSGFuZGxlZFByb21pc2UuYXBwbHlNZXRob2RTZW5kT25seShyZWNpcGllbnQscHJvcGVydHlLZXksYXJncyk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbi8vXG59W3Byb3BlcnR5S2V5XSk7XG5cbiB9LFxuYXBwbHk6KF90YXJnZXQsX3RoaXNBcmcsYXJnc0FycmF5PVtdKT0+e1xuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsdW5kZWZpbmVkKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbiB9XG5IYW5kbGVkUHJvbWlzZS5hcHBseUZ1bmN0aW9uU2VuZE9ubHkocmVjaXBpZW50LGFyZ3NBcnJheSk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH0sXG5oYXM6KF90YXJnZXQsX3ApPT57XG4vL1xucmV0dXJuIHRydWU7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFR2V0UHJveHlIYW5kbGVyPSh4LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmhhczooX3RhcmdldCxfcHJvcCk9PnRydWUsXG5nZXQ6KF90YXJnZXQscHJvcCk9PkhhbmRsZWRQcm9taXNlLmdldCh4LHByb3ApfSk7XG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBmdW5jVGFyZ2V0PWZyZWV6ZSgoKT0+eyB9KTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG9ialRhcmdldD1mcmVlemUoe19fcHJvdG9fXzpudWxsfSk7XG5cbi8qXG5cbiAqL1xuY29uc3QgbWFrZUU9KEhhbmRsZWRQcm9taXNlKT0+e1xucmV0dXJuIGhhcmRlbihcbmFzc2lnbihcbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAqL1xuLy9cbih4KT0+bmV3IFByb3h5KGZ1bmNUYXJnZXQsbWFrZUVQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpLFxue1xuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG4vL1xuZ2V0Oih4KT0+bmV3IFByb3h5KG9ialRhcmdldCxtYWtlRUdldFByb3h5SGFuZGxlcih4LEhhbmRsZWRQcm9taXNlKSksXG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5yZXNvbHZlOkhhbmRsZWRQcm9taXNlLnJlc29sdmUsXG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5zZW5kT25seTooeCk9PlxuLy9cbm5ldyBQcm94eShmdW5jVGFyZ2V0LG1ha2VFU2VuZE9ubHlQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpLFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xud2hlbjooeCxvbmZ1bGZpbGxlZCxvbnJlamVjdGVkKT0+XG5IYW5kbGVkUHJvbWlzZS5yZXNvbHZlKHgpLnRoZW4oXG4uLi50cmFja1R1cm5zKFtvbmZ1bGZpbGxlZCxvbnJlamVjdGVkXSkpfSkpO1xuXG5cblxuXG4gfTtcblxuY29uc3R7ZGVmYXVsdDokY82PX2RlZmF1bHR9PXtkZWZhdWx0Om1ha2VFfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZWZhdWx0KCRjzY9fZGVmYXVsdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABURLJnkBAAB5AQAAKQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wL3NyYy9leHBvcnRzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALbVu7bZDAAA2QwAACcAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjMuMC9zcmMvbG9jYWwuanN7ImltcG9ydHMiOlsiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZ2V0TWV0aG9kTmFtZXMiLCJsb2NhbEFwcGx5RnVuY3Rpb24iLCJsb2NhbEFwcGx5TWV0aG9kIiwibG9jYWxHZXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI7JGjNj19pbXBvcnRzKFtbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjNj19hID0+IChtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtkZXRhaWxzOlgscXVvdGU6cSxGYWlsfT1hc3NlcnQ7XG5cbmNvbnN0e2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMsZ2V0UHJvdG90eXBlT2YsZnJlZXplfT1PYmplY3Q7XG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuXG5jb25zdCBudHlwZW9mPShzcGVjaW1lbik9PnNwZWNpbWVuPT09bnVsbD8nbnVsbCc6dHlwZW9mIHNwZWNpbWVuO1xuXG5jb25zdCBvbkRlbGl2ZXJ5PW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19ERUxJVkVSWV9CUkVBS1BPSU5UUycpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzT2JqZWN0PSh2YWwpPT5PYmplY3QodmFsKT09PXZhbDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbXBhcmVTdHJpbmdpZmllZD0oYSxiKT0+e1xuaWYodHlwZW9mIGE9PT10eXBlb2YgYil7XG5jb25zdCBsZWZ0PVN0cmluZyhhKTtcbmNvbnN0IHJpZ2h0PVN0cmluZyhiKTtcbi8vXG5yZXR1cm4gbGVmdDxyaWdodD8tMTpsZWZ0PnJpZ2h0PzE6MDtcbiB9XG5pZih0eXBlb2YgYT09PSdzeW1ib2wnKXtcbmFzc2VydCh0eXBlb2YgYj09PSdzdHJpbmcnKTtcbnJldHVybi0xO1xuIH1cbmFzc2VydCh0eXBlb2YgYT09PSdzdHJpbmcnKTtcbmFzc2VydCh0eXBlb2YgYj09PSdzeW1ib2wnKTtcbnJldHVybiAxO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kTmFtZXM9KHZhbCk9PntcbmxldCBsYXllcj12YWw7XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7Ly9cbndoaWxlKGxheWVyIT09bnVsbCYmbGF5ZXIhPT1PYmplY3QucHJvdG90eXBlKXtcbi8vXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGxheWVyKTtcbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoZGVzY3MpKXtcbi8vXG4vL1xuaWYodHlwZW9mIHZhbFtuYW1lXT09PSdmdW5jdGlvbicpe1xubmFtZXMuYWRkKG5hbWUpO1xuIH1cbiB9XG5pZighaXNPYmplY3QodmFsKSl7XG5icmVhaztcbiB9XG5sYXllcj1nZXRQcm90b3R5cGVPZihsYXllcik7XG4gfVxucmV0dXJuIGhhcmRlbihbLi4ubmFtZXNdLnNvcnQoY29tcGFyZVN0cmluZ2lmaWVkKSk7XG4gfTtcbi8vXG4vL1xuJGjNj19vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtmcmVlemUoZ2V0TWV0aG9kTmFtZXMpO1xuXG5jb25zdCAgICAgICAgbG9jYWxBcHBseUZ1bmN0aW9uPShyZWNpcGllbnQsYXJncyk9PntcbnR5cGVvZiByZWNpcGllbnQ9PT0nZnVuY3Rpb24nfHxcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGludm9rZSB0YXJnZXQgYXMgYSBmdW5jdGlvbjsgdHlwZW9mIHRhcmdldCBpcyAke3EoXG5udHlwZW9mKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbmNvbnN0IHJlc3VsdD1hcHBseShyZWNpcGllbnQsdW5kZWZpbmVkLGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5RnVuY3Rpb24obG9jYWxBcHBseUZ1bmN0aW9uKTtcblxuY29uc3QgICAgICAgIGxvY2FsQXBwbHlNZXRob2Q9KHJlY2lwaWVudCxtZXRob2ROYW1lLGFyZ3MpPT57XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkfHxtZXRob2ROYW1lPT09bnVsbCl7XG4vL1xucmV0dXJuIGxvY2FsQXBwbHlGdW5jdGlvbihyZWNpcGllbnQsYXJncyk7XG4gfVxuaWYocmVjaXBpZW50PT09dW5kZWZpbmVkfHxyZWNpcGllbnQ9PT1udWxsKXtcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGRlbGl2ZXIgJHtxKG1ldGhvZE5hbWUpfSB0byB0YXJnZXQ7IHR5cGVvZiB0YXJnZXQgaXMgJHtxKFxubnR5cGVvZihyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuIH1cbmNvbnN0IGZuPXJlY2lwaWVudFttZXRob2ROYW1lXTtcbmlmKGZuPT09dW5kZWZpbmVkKXtcbmFzc2VydC5mYWlsKFxuWCBgdGFyZ2V0IGhhcyBubyBtZXRob2QgJHtxKG1ldGhvZE5hbWUpfSwgaGFzICR7cShcbmdldE1ldGhvZE5hbWVzKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG4gfVxuY29uc3QgZnR5cGU9bnR5cGVvZihmbik7XG50eXBlb2YgZm49PT0nZnVuY3Rpb24nfHxcbkZhaWwgYGludm9rZWQgbWV0aG9kICR7cShtZXRob2ROYW1lKX0gaXMgbm90IGEgZnVuY3Rpb247IGl0IGlzIGEgJHtxKFxuZnR5cGUpXG4gfWA7XG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LG1ldGhvZE5hbWUpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5jb25zdCByZXN1bHQ9YXBwbHkoZm4scmVjaXBpZW50LGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5TWV0aG9kKGxvY2FsQXBwbHlNZXRob2QpO1xuXG5jb25zdCAgICAgICAgbG9jYWxHZXQ9KHQsa2V5KT0+dFtrZXldOyRozY9fb25jZS5sb2NhbEdldChsb2NhbEdldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJsb2NhbEFwcGx5RnVuY3Rpb24iOlsibG9jYWxBcHBseUZ1bmN0aW9uIl0sImxvY2FsQXBwbHlNZXRob2QiOlsibG9jYWxBcHBseU1ldGhvZCJdLCJsb2NhbEdldCI6WyJsb2NhbEdldCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABsDJjOGA0AABgNAAA1AAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiXSwiZXhwb3J0cyI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJnZXRFbnZpcm9ubWVudE9wdGlvblwiLCBbJGjNj19hID0+IChnZXRFbnZpcm9ubWVudE9wdGlvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cbmNvbnN0e3F1b3RlOnEsRmFpbH09YXNzZXJ0O1xuXG5jb25zdHtoYXNPd24sZnJlZXplLGVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuLypcblxuXG5cblxuXG4gKi9cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgaXNKU09OUmVjb3JkPSh2YWwpPT5cbnR5cGVvZiB2YWw9PT0nb2JqZWN0JyYmdmFsIT09bnVsbCYmIUFycmF5LmlzQXJyYXkodmFsKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc2ltcGxpZnlUYWc9KHRhZyk9PntcbmZvcihjb25zdCBwcmVmaXggb2ZbJ0FsbGVnZWQ6ICcsJ0RlYnVnTmFtZTogJ10pe1xuaWYodGFnLnN0YXJ0c1dpdGgocHJlZml4KSl7XG5yZXR1cm4gdGFnLnNsaWNlKHByZWZpeC5sZW5ndGgpO1xuIH1cbiB9XG5yZXR1cm4gdGFnO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyPShvcHRpb25OYW1lKT0+e1xubGV0IGJyZWFrcG9pbnRzPUpTT04ucGFyc2UoZ2V0RW52aXJvbm1lbnRPcHRpb24ob3B0aW9uTmFtZSwnbnVsbCcpKTtcblxuaWYoYnJlYWtwb2ludHM9PT1udWxsKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBicmVha3BvaW50c1RhYmxlO1xuXG5jb25zdCBnZXRCcmVha3BvaW50cz0oKT0+YnJlYWtwb2ludHM7XG5mcmVlemUoZ2V0QnJlYWtwb2ludHMpO1xuXG5jb25zdCBzZXRCcmVha3BvaW50cz0obmV3QnJlYWtwb2ludHM9YnJlYWtwb2ludHMpPT57XG5pc0pTT05SZWNvcmQobmV3QnJlYWtwb2ludHMpfHxcbkZhaWwgYEV4cGVjdGVkICR7cShvcHRpb25OYW1lKX0gb3B0aW9uIHRvIGJlIGEgSlNPTiBicmVha3BvaW50cyByZWNvcmRgO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBuZXdCcmVha3BvaW50c1RhYmxlPXtfX3Byb3RvX186bnVsbH07XG5cbmZvcihjb25zdFt0YWcsbWV0aG9kQlBzXW9mIGVudHJpZXMobmV3QnJlYWtwb2ludHMpKXtcbnRhZz09PXNpbXBsaWZ5VGFnKHRhZyl8fFxuRmFpbCBgSnVzdCB1c2Ugc2ltcGxlIHRhZyAke3Eoc2ltcGxpZnlUYWcodGFnKSl9IHJhdGhlciB0aGFuICR7cSh0YWcpfWA7XG5pc0pTT05SZWNvcmQobWV0aG9kQlBzKXx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbidzICR7cShcbnRhZylcbiB9IHRvIGJlIGEgSlNPTiBtZXRob2RzIGJyZWFrcG9pbnRzIHJlY29yZGA7XG5mb3IoY29uc3RbbWV0aG9kTmFtZSxjb3VudF1vZiBlbnRyaWVzKG1ldGhvZEJQcykpe1xuY291bnQ9PT0nKid8fFxudHlwZW9mIGNvdW50PT09J251bWJlcicmJlxuTnVtYmVyLmlzU2FmZUludGVnZXIoY291bnQpJiZcbmNvdW50Pj0wfHxcbkZhaWwgYEV4cGVjdGVkICR7cShvcHRpb25OYW1lKX0gb3B0aW9uJ3MgJHtxKHRhZyl9LiR7cShcbm1ldGhvZE5hbWUpXG4gfSB0byBiZSBcIipcIiBvciBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyYDtcblxuY29uc3QgY2xhc3NCUHM9aGFzT3duKG5ld0JyZWFrcG9pbnRzVGFibGUsbWV0aG9kTmFtZSk/XG5uZXdCcmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdOlxubmV3QnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXT17XG4vL1xuX19wcm90b19fOm51bGx9O1xuXG5jbGFzc0JQc1t0YWddPWNvdW50O1xuIH1cbiB9XG5icmVha3BvaW50cz1uZXdCcmVha3BvaW50cztcbmJyZWFrcG9pbnRzVGFibGU9bmV3QnJlYWtwb2ludHNUYWJsZTtcbiB9O1xuZnJlZXplKHNldEJyZWFrcG9pbnRzKTtcblxuY29uc3Qgc2hvdWxkQnJlYWtwb2ludD0ocmVjaXBpZW50LG1ldGhvZE5hbWUpPT57XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkfHxtZXRob2ROYW1lPT09bnVsbCl7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IGNsYXNzQlBzPWJyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV18fGJyZWFrcG9pbnRzVGFibGVbJyonXTtcbmlmKGNsYXNzQlBzPT09dW5kZWZpbmVkKXtcbnJldHVybiBmYWxzZTtcbiB9XG5sZXQgdGFnPXNpbXBsaWZ5VGFnKHJlY2lwaWVudFtTeW1ib2wudG9TdHJpbmdUYWddKTtcbmxldCBjb3VudD1jbGFzc0JQc1t0YWddO1xuaWYoY291bnQ9PT11bmRlZmluZWQpe1xudGFnPScqJztcbmNvdW50PWNsYXNzQlBzW3RhZ107XG5pZihjb3VudD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbmlmKGNvdW50PT09JyonKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKGNvdW50PT09MCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5hc3NlcnQodHlwZW9mIGNvdW50PT09J251bWJlcicmJmNvdW50Pj0xKTtcbmNsYXNzQlBzW3RhZ109Y291bnQtMTtcbnJldHVybiBmYWxzZTtcbiB9O1xuZnJlZXplKHNob3VsZEJyZWFrcG9pbnQpO1xuXG5jb25zdCBicmVha3BvaW50VGVzdGVyPWZyZWV6ZSh7XG5nZXRCcmVha3BvaW50cyxcbnNldEJyZWFrcG9pbnRzLFxuc2hvdWxkQnJlYWtwb2ludH0pO1xuXG5icmVha3BvaW50VGVzdGVyLnNldEJyZWFrcG9pbnRzKCk7XG5yZXR1cm4gYnJlYWtwb2ludFRlc3RlcjtcbiB9OyRozY9fb25jZS5tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKTtcbmZyZWV6ZShtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIjpbIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC9O78lYgMAAGIDAAApAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAvc3JjL25vLXNoaW0uanN7ImltcG9ydHMiOlsiLi9FLmpzIiwiLi9leHBvcnRzLmpzIl0sImV4cG9ydHMiOlsiRSIsIkhhbmRsZWRQcm9taXNlIl0sInJlZXhwb3J0cyI6WyIuL2V4cG9ydHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlRTskaM2PX2ltcG9ydHMoW1tcIi4vRS5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjNj19hID0+IChtYWtlRSA9ICRozY9fYSldXV1dLFtcIi4vZXhwb3J0cy5qc1wiLCBbXV1dKTsgICBcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0IGhwPUhhbmRsZWRQcm9taXNlOyRozY9fb25jZS5ocChocCk7XG5jb25zdCAgICAgICAgRT1tYWtlRShocCk7JGjNj19vbmNlLkUoRSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJIYW5kbGVkUHJvbWlzZSI6WyJocCJdLCJFIjpbIkUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAApJpQMo4JAACOCQAALQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wL3NyYy90cmFjay10dXJucy5qc3siaW1wb3J0cyI6WyJAZW5kby9lbnYtb3B0aW9ucyJdLCJleHBvcnRzIjpbInRyYWNrVHVybnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dLFtcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRozY9fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxubGV0IGhpZGRlblByaW9yRXJyb3I7XG5sZXQgaGlkZGVuQ3VycmVudFR1cm49MDtcbmxldCBoaWRkZW5DdXJyZW50RXZlbnQ9MDtcblxuLy9cbmNvbnN0IFZFUkJPU0U9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCd0cmFjay10dXJucycpO1xuXG4vL1xuLy9cbmNvbnN0IEVOQUJMRUQ9XG5nZXRFbnZpcm9ubWVudE9wdGlvbignVFJBQ0tfVFVSTlMnLCdkaXNhYmxlZCcsWydlbmFibGVkJ10pPT09J2VuYWJsZWQnO1xuXG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCBhZGRSZWplY3Rpb25Ob3RlPShkZXRhaWxzTm90ZSk9PihyZWFzb24pPT57XG5pZihyZWFzb24gaW5zdGFuY2VvZiBFcnJvcil7XG5nbG9iYWxUaGlzLmFzc2VydC5ub3RlKHJlYXNvbixkZXRhaWxzTm90ZSk7XG4gfVxuaWYoVkVSQk9TRSl7XG5jb25zb2xlLmxvZygnUkVKRUNURUQgYXQgdG9wIG9mIGV2ZW50IGxvb3AnLHJlYXNvbik7XG4gfVxuIH07XG5cbmNvbnN0IHdyYXBGdW5jdGlvbj1cbihmdW5jLHNlbmRpbmdFcnJvcixYKT0+XG4oLi4uYXJncyk9PntcbmhpZGRlblByaW9yRXJyb3I9c2VuZGluZ0Vycm9yO1xuaGlkZGVuQ3VycmVudFR1cm4rPTE7XG5oaWRkZW5DdXJyZW50RXZlbnQ9MDtcbnRyeXtcbmxldCByZXN1bHQ7XG50cnl7XG5yZXN1bHQ9ZnVuYyguLi5hcmdzKTtcbiB9Y2F0Y2goZXJyKXtcbmlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcbmdsb2JhbFRoaXMuYXNzZXJ0Lm5vdGUoXG5lcnIsXG5YIGBUaHJvd24gZnJvbTogJHtoaWRkZW5QcmlvckVycm9yfToke2hpZGRlbkN1cnJlbnRUdXJufS4ke2hpZGRlbkN1cnJlbnRFdmVudH1gKTtcblxuIH1cbmlmKFZFUkJPU0Upe1xuY29uc29sZS5sb2coJ1RIUk9XTiB0byB0b3Agb2YgZXZlbnQgbG9vcCcsZXJyKTtcbiB9XG50aHJvdyBlcnI7XG4gfVxuLy9cbmNvbnN0IGRldGFpbHNOb3RlPVggYFJlamVjdGlvbiBmcm9tOiAke2hpZGRlblByaW9yRXJyb3J9OiR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWA7XG5Qcm9taXNlLnJlc29sdmUocmVzdWx0KS5jYXRjaChhZGRSZWplY3Rpb25Ob3RlKGRldGFpbHNOb3RlKSk7XG5yZXR1cm4gcmVzdWx0O1xuIH1maW5hbGx5e1xuaGlkZGVuUHJpb3JFcnJvcj11bmRlZmluZWQ7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRyYWNrVHVybnM9KGZ1bmNzKT0+e1xuaWYoIUVOQUJMRUR8fHR5cGVvZiBnbG9iYWxUaGlzPT09J3VuZGVmaW5lZCd8fCFnbG9iYWxUaGlzLmFzc2VydCl7XG5yZXR1cm4gZnVuY3M7XG4gfVxuY29uc3R7ZGV0YWlsczpYLG5vdGU6YW5ub3RhdGVFcnJvcn09Z2xvYmFsVGhpcy5hc3NlcnQ7XG5cbmhpZGRlbkN1cnJlbnRFdmVudCs9MTtcbmNvbnN0IHNlbmRpbmdFcnJvcj1FcnJvcihcbiBgRXZlbnQ6ICR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWApO1xuXG5pZihoaWRkZW5QcmlvckVycm9yIT09dW5kZWZpbmVkKXtcbmFubm90YXRlRXJyb3Ioc2VuZGluZ0Vycm9yLFggYENhdXNlZCBieTogJHtoaWRkZW5QcmlvckVycm9yfWApO1xuIH1cblxucmV0dXJuICgvKiAgICAgICAgICAgICovXG5mdW5jcy5tYXAoKGZ1bmMpPT5mdW5jJiZ3cmFwRnVuY3Rpb24oZnVuYyxzZW5kaW5nRXJyb3IsWCkpKTtcblxuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS50cmFja1R1cm5zKHRyYWNrVHVybnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJhY2tUdXJucyI6WyJ0cmFja1R1cm5zIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAH+mlRyFAgAAhQIAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjMuMC91dGlscy5qc3siaW1wb3J0cyI6WyIuL3NyYy9sb2NhbC5qcyIsIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2xvY2FsLmpzXCIsIFtdXSxbXCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvbG9jYWwuanMiOltbImdldE1ldGhvZE5hbWVzIiwiZ2V0TWV0aG9kTmFtZXMiXV0sIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiOltbIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciIsIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGLmEvoECAACBAgAAGQAAAEBlbmRvL2V4by12MS41LjgvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvZXhvLW1ha2Vycy5qcyIsIi4vc3JjL3R5cGVzLmpzIiwiLi9zcmMvZ2V0LWludGVyZmFjZS5qcyJdLCJleHBvcnRzIjpbbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy9leG8tbWFrZXJzLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZXhvLW1ha2Vycy5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIi4vc3JjL2dldC1pbnRlcmZhY2UuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9nZXQtaW50ZXJmYWNlLmpzIjpbWyJHRVRfSU5URVJGQUNFX0dVQVJEIiwiR0VUX0lOVEVSRkFDRV9HVUFSRCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAdkoX8AYVAAAGFQAAIgAAAEBlbmRvL2V4by12MS41Ljgvc3JjL2V4by1tYWtlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCJAZW5kby9lbnYtb3B0aW9ucyIsIkBlbmRvL2Vycm9ycyIsIi4vZXhvLXRvb2xzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzc0tpdCIsImluaXRFbXB0eSIsIm1ha2VFeG8iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBvYmplY3RNYXAsZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyxGYWlsLHEsZGVmZW5kUHJvdG90eXBlLGRlZmVuZFByb3RvdHlwZUtpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRozY9fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vZXhvLXRvb2xzLmpzXCIsIFtbXCJkZWZlbmRQcm90b3R5cGVcIiwgWyRozY9fYSA9PiAoZGVmZW5kUHJvdG90eXBlID0gJGjNj19hKV1dLFtcImRlZmVuZFByb3RvdHlwZUtpdFwiLCBbJGjNj19hID0+IChkZWZlbmRQcm90b3R5cGVLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtjcmVhdGUsc2VhbCxmcmVlemUsZGVmaW5lUHJvcGVydHksdmFsdWVzfT1PYmplY3Q7XG5cbi8vXG5jb25zdCBMQUJFTF9JTlNUQU5DRVM9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCdsYWJlbC1pbnN0YW5jZXMnKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBtYWtlU2VsZj0ocHJvdG8saW5zdGFuY2VDb3VudCk9PntcbmNvbnN0IHNlbGY9Y3JlYXRlKHByb3RvKTtcbmlmKExBQkVMX0lOU1RBTkNFUyl7XG5kZWZpbmVQcm9wZXJ0eShzZWxmLFN5bWJvbC50b1N0cmluZ1RhZyx7XG52YWx1ZTogYCR7cHJvdG9bU3ltYm9sLnRvU3RyaW5nVGFnXX0jJHtpbnN0YW5jZUNvdW50fWAsXG53cml0YWJsZTpmYWxzZSxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2V9KTtcblxuIH1cbnJldHVybiBoYXJkZW4oc2VsZik7XG4gfTtcblxuY29uc3QgZW1wdHlSZWNvcmQ9aGFyZGVuKHt9KTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaW5pdEVtcHR5PSgpPT5lbXB0eVJlY29yZDtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaW5pdEVtcHR5KGluaXRFbXB0eSk7XG5jb25zdCAgICAgICAgZGVmaW5lRXhvQ2xhc3M9KFxudGFnLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnM9e30pPT5cbntcbmhhcmRlbihtZXRob2RzKTtcbmNvbnN0e1xuZmluaXNoPXVuZGVmaW5lZCxcbnJlY2VpdmVBbXBsaWZpZXI9dW5kZWZpbmVkLFxucmVjZWl2ZUluc3RhbmNlVGVzdGVyPXVuZGVmaW5lZH09XG5vcHRpb25zO1xucmVjZWl2ZUFtcGxpZmllcj09PXVuZGVmaW5lZHx8XG5GYWlsIGBPbmx5IGZhY2V0cyBvZiBhbiBleG8gY2xhc3Mga2l0IGNhbiBiZSBhbXBsaWZpZWQgJHtxKHRhZyl9YDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0TWFwPW5ldyBXZWFrTWFwKCk7XG5jb25zdCBwcm90bz1kZWZlbmRQcm90b3R5cGUoXG50YWcsXG4oc2VsZik9Pi8qICAgICAgICAgICAgICAqL2NvbnRleHRNYXAuZ2V0KHNlbGYpLFxubWV0aG9kcyxcbnRydWUsXG5pbnRlcmZhY2VHdWFyZCk7XG5cbmxldCBpbnN0YW5jZUNvdW50PTA7XG4vKlxuXG4gICAqL1xuY29uc3QgbWFrZUluc3RhbmNlPSguLi5hcmdzKT0+e1xuLy9cbmNvbnN0IHN0YXRlPXNlYWwoaW5pdCguLi5hcmdzKSk7XG5pbnN0YW5jZUNvdW50Kz0xO1xuY29uc3Qgc2VsZj1tYWtlU2VsZihwcm90byxpbnN0YW5jZUNvdW50KTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0PWZyZWV6ZSh7c3RhdGUsc2VsZn0pO1xuY29udGV4dE1hcC5zZXQoc2VsZixjb250ZXh0KTtcbmlmKGZpbmlzaCl7XG5maW5pc2goY29udGV4dCk7XG4gfVxucmV0dXJuIHNlbGY7XG4gfTtcblxuaWYocmVjZWl2ZUluc3RhbmNlVGVzdGVyKXtcbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzSW5zdGFuY2U9KGV4byxmYWNldE5hbWU9dW5kZWZpbmVkKT0+e1xuZmFjZXROYW1lPT09dW5kZWZpbmVkfHxcbkZhaWwgYGZhY2V0TmFtZSBjYW4gb25seSBiZSB1c2VkIHdpdGggYW4gZXhvIGNsYXNzIGtpdDogJHtxKFxudGFnKVxuIH0gaGFzIG5vIGZhY2V0ICR7cShmYWNldE5hbWUpfWA7XG5yZXR1cm4gY29udGV4dE1hcC5oYXMoZXhvKTtcbiB9O1xuaGFyZGVuKGlzSW5zdGFuY2UpO1xucmVjZWl2ZUluc3RhbmNlVGVzdGVyKGlzSW5zdGFuY2UpO1xuIH1cblxucmV0dXJuIGhhcmRlbihtYWtlSW5zdGFuY2UpO1xuIH07JGjNj19vbmNlLmRlZmluZUV4b0NsYXNzKGRlZmluZUV4b0NsYXNzKTtcbmhhcmRlbihkZWZpbmVFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmaW5lRXhvQ2xhc3NLaXQ9KFxudGFnLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxubWV0aG9kc0tpdCxcbm9wdGlvbnM9e30pPT5cbntcbmhhcmRlbihtZXRob2RzS2l0KTtcbmNvbnN0e1xuZmluaXNoPXVuZGVmaW5lZCxcbnJlY2VpdmVBbXBsaWZpZXI9dW5kZWZpbmVkLFxucmVjZWl2ZUluc3RhbmNlVGVzdGVyPXVuZGVmaW5lZH09XG5vcHRpb25zO1xuY29uc3QgY29udGV4dE1hcEtpdD1vYmplY3RNYXAobWV0aG9kc0tpdCwoKT0+bmV3IFdlYWtNYXAoKSk7XG5jb25zdCBnZXRDb250ZXh0S2l0PW9iamVjdE1hcChcbmNvbnRleHRNYXBLaXQsXG4oY29udGV4dE1hcCk9PihmYWNldCk9PmNvbnRleHRNYXAuZ2V0KGZhY2V0KSk7XG5cbmNvbnN0IHByb3RvdHlwZUtpdD1kZWZlbmRQcm90b3R5cGVLaXQoXG50YWcsXG5nZXRDb250ZXh0S2l0LFxubWV0aG9kc0tpdCxcbnRydWUsXG5pbnRlcmZhY2VHdWFyZEtpdCk7XG5cbmxldCBpbnN0YW5jZUNvdW50PTA7XG4vKlxuXG4gICAqL1xuY29uc3QgbWFrZUluc3RhbmNlS2l0PSguLi5hcmdzKT0+e1xuLy9cbmNvbnN0IHN0YXRlPXNlYWwoaW5pdCguLi5hcmdzKSk7XG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29udGV4dD17c3RhdGUsZmFjZXRzOm51bGx9O1xuaW5zdGFuY2VDb3VudCs9MTtcbmNvbnN0IGZhY2V0cz1vYmplY3RNYXAocHJvdG90eXBlS2l0LChwcm90byxmYWNldE5hbWUpPT57XG5jb25zdCBzZWxmPW1ha2VTZWxmKHByb3RvLGluc3RhbmNlQ291bnQpO1xuY29udGV4dE1hcEtpdFtmYWNldE5hbWVdLnNldChzZWxmLGNvbnRleHQpO1xucmV0dXJuIHNlbGY7XG4gfSk7XG5jb250ZXh0LmZhY2V0cz1mYWNldHM7XG4vL1xuZnJlZXplKGNvbnRleHQpO1xuaWYoZmluaXNoKXtcbmZpbmlzaChjb250ZXh0KTtcbiB9XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9jb250ZXh0LmZhY2V0cyk7XG4gfTtcblxuaWYocmVjZWl2ZUFtcGxpZmllcil7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhbXBsaWZ5PShleG9GYWNldCk9PntcbmZvcihjb25zdCBjb250ZXh0TWFwIG9mIHZhbHVlcyhjb250ZXh0TWFwS2l0KSl7XG5pZihjb250ZXh0TWFwLmhhcyhleG9GYWNldCkpe1xuY29uc3R7ZmFjZXRzfT1jb250ZXh0TWFwLmdldChleG9GYWNldCk7XG5yZXR1cm4gZmFjZXRzO1xuIH1cbiB9XG50aHJvdyBGYWlsIGBNdXN0IGJlIGEgZmFjZXQgb2YgJHtxKHRhZyl9OiAke2V4b0ZhY2V0fWA7XG4gfTtcbmhhcmRlbihhbXBsaWZ5KTtcbnJlY2VpdmVBbXBsaWZpZXIoYW1wbGlmeSk7XG4gfVxuXG5pZihyZWNlaXZlSW5zdGFuY2VUZXN0ZXIpe1xuLyogICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNJbnN0YW5jZT0oZXhvRmFjZXQsZmFjZXROYW1lPXVuZGVmaW5lZCk9PntcbmlmKGZhY2V0TmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdmFsdWVzKGNvbnRleHRNYXBLaXQpLnNvbWUoKGNvbnRleHRNYXApPT5cbmNvbnRleHRNYXAuaGFzKGV4b0ZhY2V0KSk7XG5cbiB9XG5hc3NlcnQudHlwZW9mKGZhY2V0TmFtZSwnc3RyaW5nJyk7XG5jb25zdCBjb250ZXh0TWFwPWNvbnRleHRNYXBLaXRbZmFjZXROYW1lXTtcbmNvbnRleHRNYXAhPT11bmRlZmluZWR8fFxuRmFpbCBgZXhvIGNsYXNzIGtpdCAke3EodGFnKX0gaGFzIG5vIGZhY2V0IG5hbWVkICR7cShmYWNldE5hbWUpfWA7XG5yZXR1cm4gY29udGV4dE1hcC5oYXMoZXhvRmFjZXQpO1xuIH07XG5oYXJkZW4oaXNJbnN0YW5jZSk7XG5yZWNlaXZlSW5zdGFuY2VUZXN0ZXIoaXNJbnN0YW5jZSk7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKG1ha2VJbnN0YW5jZUtpdCk7XG4gfTskaM2PX29uY2UuZGVmaW5lRXhvQ2xhc3NLaXQoZGVmaW5lRXhvQ2xhc3NLaXQpO1xuaGFyZGVuKGRlZmluZUV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRXhvPSh0YWcsaW50ZXJmYWNlR3VhcmQsbWV0aG9kcyxvcHRpb25zPXVuZGVmaW5lZCk9PntcbmNvbnN0IG1ha2VJbnN0YW5jZT1kZWZpbmVFeG9DbGFzcyhcbnRhZyxcbmludGVyZmFjZUd1YXJkLFxuaW5pdEVtcHR5LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5yZXR1cm4gbWFrZUluc3RhbmNlKCk7XG4gfTskaM2PX29uY2UubWFrZUV4byhtYWtlRXhvKTtcbmhhcmRlbihtYWtlRXhvKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImluaXRFbXB0eSI6WyJpbml0RW1wdHkiXSwiZGVmaW5lRXhvQ2xhc3MiOlsiZGVmaW5lRXhvQ2xhc3MiXSwiZGVmaW5lRXhvQ2xhc3NLaXQiOlsiZGVmaW5lRXhvQ2xhc3NLaXQiXSwibWFrZUV4byI6WyJtYWtlRXhvIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACMF/cgVMAAAFTAAACEAAABAZW5kby9leG8tdjEuNS44L3NyYy9leG8tdG9vbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9mYXIiLCJAZW5kby9wYXR0ZXJucyIsIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vZ2V0LWludGVyZmFjZS5qcyJdLCJleHBvcnRzIjpbImRlZmVuZFByb3RvdHlwZSIsImRlZmVuZFByb3RvdHlwZUtpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldE1ldGhvZE5hbWVzLGhhc093blByb3BlcnR5T2YsdG9UaHJvd2FibGUsRSxGYXIsbXVzdE1hdGNoLE0saXNBd2FpdEFyZ0d1YXJkLGlzUmF3R3VhcmQsZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQsZ2V0TWV0aG9kR3VhcmRQYXlsb2FkLGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCxnZXRDb3B5TWFwRW50cmllcyxsaXN0RGlmZmVyZW5jZSxvYmplY3RNYXAscSxGYWlsLEdFVF9JTlRFUkZBQ0VfR1VBUkQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjNj19hID0+IChnZXRNZXRob2ROYW1lcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJ0b1Rocm93YWJsZVwiLCBbJGjNj19hID0+ICh0b1Rocm93YWJsZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiaXNBd2FpdEFyZ0d1YXJkXCIsIFskaM2PX2EgPT4gKGlzQXdhaXRBcmdHdWFyZCA9ICRozY9fYSldXSxbXCJpc1Jhd0d1YXJkXCIsIFskaM2PX2EgPT4gKGlzUmF3R3VhcmQgPSAkaM2PX2EpXV0sW1wiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQgPSAkaM2PX2EpXV0sW1wiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldE1ldGhvZEd1YXJkUGF5bG9hZCA9ICRozY9fYSldXSxbXCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkID0gJGjNj19hKV1dLFtcImdldENvcHlNYXBFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdldENvcHlNYXBFbnRyaWVzID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qc1wiLCBbW1wibGlzdERpZmZlcmVuY2VcIiwgWyRozY9fYSA9PiAobGlzdERpZmZlcmVuY2UgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vZ2V0LWludGVyZmFjZS5qc1wiLCBbW1wiR0VUX0lOVEVSRkFDRV9HVUFSRFwiLCBbJGjNj19hID0+IChHRVRfSU5URVJGQUNFX0dVQVJEID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZGVmaW5lUHJvcGVydGllcyxmcm9tRW50cmllc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgUmF3TWV0aG9kR3VhcmQ9TS5jYWxsKCkucmVzdChNLnJhdygpKS5yZXR1cm5zKE0ucmF3KCkpO1xuXG5jb25zdCBSRURBQ1RFRF9SQVdfQVJHPSc8cmVkYWN0ZWQgcmF3IGFyZz4nO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgUGFzc2FibGVNZXRob2RHdWFyZD1NLmNhbGwoKS5yZXN0KE0uYW55KCkpLnJldHVybnMoTS5hbnkoKSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZGVmZW5kU3luY0FyZ3M9KHN5bmNBcmdzLG1hdGNoQ29uZmlnLGxhYmVsPXVuZGVmaW5lZCk9PntcbmNvbnN0e1xuZGVjbGFyZWRMZW4sXG5oYXNSZXN0QXJnR3VhcmQsXG5yZXN0QXJnR3VhcmRJc1JhdyxcbnBhcmFtc1BhdHRlcm4sXG5yZWRhY3RlZEluZGljZXN9PVxubWF0Y2hDb25maWc7XG5cbi8vXG4vL1xubGV0IG1hdGNoYWJsZUFyZ3M9c3luY0FyZ3M7XG5pZihyZXN0QXJnR3VhcmRJc1JhdyYmc3luY0FyZ3MubGVuZ3RoPmRlY2xhcmVkTGVuKXtcbmNvbnN0IHJlc3RMZW49c3luY0FyZ3MubGVuZ3RoLWRlY2xhcmVkTGVuO1xuY29uc3QgcmVkYWN0ZWRSZXN0PUFycmF5KHJlc3RMZW4pLmZpbGwoUkVEQUNURURfUkFXX0FSRyk7XG5tYXRjaGFibGVBcmdzPVsuLi5zeW5jQXJncy5zbGljZSgwLGRlY2xhcmVkTGVuKSwuLi5yZWRhY3RlZFJlc3RdO1xuIH1lbHNlIGlmKFxucmVkYWN0ZWRJbmRpY2VzLmxlbmd0aD4wJiZcbnJlZGFjdGVkSW5kaWNlc1swXTxzeW5jQXJncy5sZW5ndGgpXG57XG4vL1xuLy9cbm1hdGNoYWJsZUFyZ3M9Wy4uLnN5bmNBcmdzXTtcbiB9XG5cbmZvcihjb25zdCBpIG9mIHJlZGFjdGVkSW5kaWNlcyl7XG5pZihpPj1tYXRjaGFibGVBcmdzLmxlbmd0aCl7XG5icmVhaztcbiB9XG5tYXRjaGFibGVBcmdzW2ldPVJFREFDVEVEX1JBV19BUkc7XG4gfVxuXG5tdXN0TWF0Y2goaGFyZGVuKG1hdGNoYWJsZUFyZ3MpLHBhcmFtc1BhdHRlcm4sbGFiZWwpO1xuXG5pZihoYXNSZXN0QXJnR3VhcmQpe1xucmV0dXJuIHN5bmNBcmdzO1xuIH1cbnN5bmNBcmdzLmxlbmd0aDw9ZGVjbGFyZWRMZW58fFxuRmFpbCBgJHtxKGxhYmVsKX0gYWNjZXB0cyBhdCBtb3N0ICR7cShkZWNsYXJlZExlbil9IGFyZ3VtZW50cywgbm90ICR7cShcbnN5bmNBcmdzLmxlbmd0aClcbiB9OiAke3N5bmNBcmdzfWA7XG5yZXR1cm4gc3luY0FyZ3M7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBidWlsZE1hdGNoQ29uZmlnPShtZXRob2RHdWFyZFBheWxvYWQpPT57XG5jb25zdHtcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkUGF5bG9hZDtcblxuY29uc3QgbWF0Y2hhYmxlQXJnR3VhcmRzPVsuLi5hcmdHdWFyZHMsLi4ub3B0aW9uYWxBcmdHdWFyZHNdO1xuXG5jb25zdCByZWRhY3RlZEluZGljZXM9W107XG5mb3IobGV0IGk9MDtpPG1hdGNoYWJsZUFyZ0d1YXJkcy5sZW5ndGg7aSs9MSl7XG5pZihpc1Jhd0d1YXJkKG1hdGNoYWJsZUFyZ0d1YXJkc1tpXSkpe1xubWF0Y2hhYmxlQXJnR3VhcmRzW2ldPVJFREFDVEVEX1JBV19BUkc7XG5yZWRhY3RlZEluZGljZXMucHVzaChpKTtcbiB9XG4gfVxuXG4vL1xubGV0IG1hdGNoYWJsZVJlc3RBcmdHdWFyZD1yZXN0QXJnR3VhcmQ7XG5pZihpc1Jhd0d1YXJkKG1hdGNoYWJsZVJlc3RBcmdHdWFyZCkpe1xubWF0Y2hhYmxlUmVzdEFyZ0d1YXJkPU0uYXJyYXlPZihSRURBQ1RFRF9SQVdfQVJHKTtcbiB9XG5jb25zdCBtYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQ9aGFyZGVuKHtcbi4uLm1ldGhvZEd1YXJkUGF5bG9hZCxcbmFyZ0d1YXJkczptYXRjaGFibGVBcmdHdWFyZHMuc2xpY2UoMCxhcmdHdWFyZHMubGVuZ3RoKSxcbm9wdGlvbmFsQXJnR3VhcmRzOm1hdGNoYWJsZUFyZ0d1YXJkcy5zbGljZShhcmdHdWFyZHMubGVuZ3RoKSxcbnJlc3RBcmdHdWFyZDptYXRjaGFibGVSZXN0QXJnR3VhcmR9KTtcblxuXG5jb25zdCBwYXJhbXNQYXR0ZXJuPU0uc3BsaXRBcnJheShcbm1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZC5hcmdHdWFyZHMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQub3B0aW9uYWxBcmdHdWFyZHMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQucmVzdEFyZ0d1YXJkKTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmRlY2xhcmVkTGVuOm1hdGNoYWJsZUFyZ0d1YXJkcy5sZW5ndGgsXG5oYXNSZXN0QXJnR3VhcmQ6cmVzdEFyZ0d1YXJkIT09dW5kZWZpbmVkLFxucmVzdEFyZ0d1YXJkSXNSYXc6cmVzdEFyZ0d1YXJkIT09bWF0Y2hhYmxlUmVzdEFyZ0d1YXJkLFxucGFyYW1zUGF0dGVybixcbnJlZGFjdGVkSW5kaWNlcyxcbm1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZH0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZFN5bmNNZXRob2Q9KFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmRQYXlsb2FkLFxubGFiZWwpPT5cbntcbmNvbnN0e3JldHVybkd1YXJkfT1tZXRob2RHdWFyZFBheWxvYWQ7XG5jb25zdCBpc1Jhd1JldHVybj1pc1Jhd0d1YXJkKHJldHVybkd1YXJkKTtcbmNvbnN0IG1hdGNoQ29uZmlnPWJ1aWxkTWF0Y2hDb25maWcobWV0aG9kR3VhcmRQYXlsb2FkKTtcbmNvbnN0e3N5bmNNZXRob2R9PXtcbi8vXG5zeW5jTWV0aG9kKC4uLnN5bmNBcmdzKXtcbnRyeXtcbmNvbnN0IGNvbnRleHQ9Z2V0Q29udGV4dCh0aGlzKTtcbi8vXG5jb25zdCByZWFsQXJncz1kZWZlbmRTeW5jQXJncyhzeW5jQXJncyxtYXRjaENvbmZpZyxsYWJlbCk7XG5jb25zdCByZXN1bHQ9YXBwbHkoYmVoYXZpb3JNZXRob2QsY29udGV4dCxyZWFsQXJncyk7XG5pZighaXNSYXdSZXR1cm4pe1xubXVzdE1hdGNoKGhhcmRlbihyZXN1bHQpLHJldHVybkd1YXJkLCBgJHtsYWJlbH06IHJlc3VsdGApO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfWNhdGNoKHRocm93blRoaW5nKXtcbnRocm93IHRvVGhyb3dhYmxlKHRocm93blRoaW5nKTtcbiB9XG4gfX07XG5cbnJldHVybiBzeW5jTWV0aG9kO1xuIH07XG5cbi8qXG5cbiAqL1xuY29uc3QgZGVzeW5jPShtZXRob2RHdWFyZFBheWxvYWQpPT57XG5jb25zdHtcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkUGF5bG9hZDtcbiFpc0F3YWl0QXJnR3VhcmQocmVzdEFyZ0d1YXJkKXx8XG5GYWlsIGBSZXN0IGFyZ3MgbWF5IG5vdCBiZSBhd2FpdGVkOiAke3Jlc3RBcmdHdWFyZH1gO1xuY29uc3QgcmF3QXJnR3VhcmRzPVsuLi5hcmdHdWFyZHMsLi4ub3B0aW9uYWxBcmdHdWFyZHNdO1xuXG5jb25zdCBhd2FpdEluZGV4ZXM9W107XG5mb3IobGV0IGk9MDtpPHJhd0FyZ0d1YXJkcy5sZW5ndGg7aSs9MSl7XG5jb25zdCBhcmdHdWFyZD1yYXdBcmdHdWFyZHNbaV07XG5pZihpc0F3YWl0QXJnR3VhcmQoYXJnR3VhcmQpKXtcbnJhd0FyZ0d1YXJkc1tpXT1nZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZChhcmdHdWFyZCkuYXJnR3VhcmQ7XG5hd2FpdEluZGV4ZXMucHVzaChpKTtcbiB9XG4gfVxucmV0dXJue1xuYXdhaXRJbmRleGVzLFxucmF3TWV0aG9kR3VhcmRQYXlsb2FkOntcbi4uLm1ldGhvZEd1YXJkUGF5bG9hZCxcbmFyZ0d1YXJkczpyYXdBcmdHdWFyZHMuc2xpY2UoMCxhcmdHdWFyZHMubGVuZ3RoKSxcbm9wdGlvbmFsQXJnR3VhcmRzOnJhd0FyZ0d1YXJkcy5zbGljZShhcmdHdWFyZHMubGVuZ3RoKX19O1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZEFzeW5jTWV0aG9kPShcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKT0+XG57XG5jb25zdHtyZXR1cm5HdWFyZH09bWV0aG9kR3VhcmRQYXlsb2FkO1xuY29uc3QgaXNSYXdSZXR1cm49aXNSYXdHdWFyZChyZXR1cm5HdWFyZCk7XG5cbmNvbnN0e2F3YWl0SW5kZXhlcyxyYXdNZXRob2RHdWFyZFBheWxvYWR9PWRlc3luYyhtZXRob2RHdWFyZFBheWxvYWQpO1xuY29uc3QgbWF0Y2hDb25maWc9YnVpbGRNYXRjaENvbmZpZyhyYXdNZXRob2RHdWFyZFBheWxvYWQpO1xuXG5jb25zdHthc3luY01ldGhvZH09e1xuLy9cbmFzeW5jTWV0aG9kKC4uLmFyZ3Mpe1xuY29uc3QgYXdhaXRMaXN0PVtdO1xuZm9yKGNvbnN0IGkgb2YgYXdhaXRJbmRleGVzKXtcbmlmKGk+PWFyZ3MubGVuZ3RoKXtcbmJyZWFrO1xuIH1cbmF3YWl0TGlzdC5wdXNoKGFyZ3NbaV0pO1xuIH1cbmNvbnN0IHA9UHJvbWlzZS5hbGwoYXdhaXRMaXN0KTtcbmNvbnN0IHN5bmNBcmdzPVsuLi5hcmdzXTtcbmNvbnN0IHJlc3VsdFA9RS53aGVuKFxucCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyhhd2FpdGVkQXJncyk9PntcbmZvcihsZXQgaj0wO2o8YXdhaXRlZEFyZ3MubGVuZ3RoO2orPTEpe1xuc3luY0FyZ3NbYXdhaXRJbmRleGVzW2pdXT1hd2FpdGVkQXJnc1tqXTtcbiB9XG4vL1xuLy9cbmNvbnN0IGNvbnRleHQ9Z2V0Q29udGV4dCh0aGlzKTtcbmNvbnN0IHJlYWxBcmdzPWRlZmVuZFN5bmNBcmdzKHN5bmNBcmdzLG1hdGNoQ29uZmlnLGxhYmVsKTtcbnJldHVybiBhcHBseShiZWhhdmlvck1ldGhvZCxjb250ZXh0LHJlYWxBcmdzKTtcbiB9KTtcblxucmV0dXJuIEUud2hlbihyZXN1bHRQLChmdWxmaWxsbWVudCk9PntcbmlmKCFpc1Jhd1JldHVybil7XG5tdXN0TWF0Y2goaGFyZGVuKGZ1bGZpbGxtZW50KSxyZXR1cm5HdWFyZCwgYCR7bGFiZWx9OiByZXN1bHRgKTtcbiB9XG5yZXR1cm4gZnVsZmlsbG1lbnQ7XG4gfSkuY2F0Y2goKHJlYXNvbik9PlxuLy9cbi8vXG5Qcm9taXNlLnJlamVjdCh0b1Rocm93YWJsZShyZWFzb24pKSk7XG5cbiB9fTtcblxucmV0dXJuIGFzeW5jTWV0aG9kO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRNZXRob2Q9KGdldENvbnRleHQsYmVoYXZpb3JNZXRob2QsbWV0aG9kR3VhcmQsbGFiZWwpPT57XG5jb25zdCBtZXRob2RHdWFyZFBheWxvYWQ9Z2V0TWV0aG9kR3VhcmRQYXlsb2FkKG1ldGhvZEd1YXJkKTtcbmNvbnN0e2NhbGxLaW5kfT1tZXRob2RHdWFyZFBheWxvYWQ7XG5pZihjYWxsS2luZD09PSdzeW5jJyl7XG5yZXR1cm4gZGVmZW5kU3luY01ldGhvZChcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKTtcblxuIH1lbHNle1xuYXNzZXJ0KGNhbGxLaW5kPT09J2FzeW5jJyk7XG5yZXR1cm4gZGVmZW5kQXN5bmNNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBiaW5kTWV0aG9kPShcbm1ldGhvZFRhZyxcbmNvbnRleHRQcm92aWRlcixcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmQpPT5cbntcbmFzc2VydC50eXBlb2YoYmVoYXZpb3JNZXRob2QsJ2Z1bmN0aW9uJyk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGdldENvbnRleHQ9KHJlcHJlc2VudGF0aXZlKT0+e1xucmVwcmVzZW50YXRpdmV8fFxuLy9cbkZhaWwgYE1ldGhvZCAke21ldGhvZFRhZ30gY2FsbGVkIHdpdGhvdXQgJ3RoaXMnIG9iamVjdGA7XG5jb25zdCBjb250ZXh0PWNvbnRleHRQcm92aWRlcihyZXByZXNlbnRhdGl2ZSk7XG5pZihjb250ZXh0PT09dW5kZWZpbmVkKXtcbnRocm93IEZhaWwgYCR7cShcbm1ldGhvZFRhZylcbiB9IG1heSBvbmx5IGJlIGFwcGxpZWQgdG8gYSB2YWxpZCBpbnN0YW5jZTogJHtyZXByZXNlbnRhdGl2ZX1gO1xuIH1cbnJldHVybiBjb250ZXh0O1xuIH07XG5cbmNvbnN0IG1ldGhvZD1kZWZlbmRNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZCxcbm1ldGhvZFRhZyk7XG5cblxuZGVmaW5lUHJvcGVydGllcyhtZXRob2Qse1xubmFtZTp7dmFsdWU6bWV0aG9kVGFnfSxcbmxlbmd0aDp7dmFsdWU6YmVoYXZpb3JNZXRob2QubGVuZ3RofX0pO1xuXG5yZXR1cm4gbWV0aG9kO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZlbmRQcm90b3R5cGU9KFxudGFnLFxuY29udGV4dFByb3ZpZGVyLFxuYmVoYXZpb3JNZXRob2RzLFxudGhpc2Z1bE1ldGhvZHM9ZmFsc2UsXG5pbnRlcmZhY2VHdWFyZD11bmRlZmluZWQpPT5cbntcbmNvbnN0IHByb3RvdHlwZT17fTtcbmNvbnN0IG1ldGhvZE5hbWVzPWdldE1ldGhvZE5hbWVzKGJlaGF2aW9yTWV0aG9kcykuZmlsdGVyKFxuLy9cbi8vXG4oa2V5KT0+e1xuaWYoa2V5IT09J2NvbnN0cnVjdG9yJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCBjb25zdHJ1Y3Rvcj1iZWhhdmlvck1ldGhvZHMuY29uc3RydWN0b3I7XG5yZXR1cm4hKFxuY29uc3RydWN0b3IucHJvdG90eXBlJiZcbmNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj09PWNvbnN0cnVjdG9yKTtcblxuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IG1ldGhvZEd1YXJkcztcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZGVmYXVsdEd1YXJkcztcbmlmKGludGVyZmFjZUd1YXJkKXtcbmNvbnN0e1xuaW50ZXJmYWNlTmFtZSxcbm1ldGhvZEd1YXJkczptZyxcbnN5bWJvbE1ldGhvZEd1YXJkcyxcbnNsb3BweSxcbmRlZmF1bHRHdWFyZHM6ZGc9c2xvcHB5PydwYXNzYWJsZSc6ZGVmYXVsdEd1YXJkc309XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoaW50ZXJmYWNlR3VhcmQpO1xubWV0aG9kR3VhcmRzPWhhcmRlbih7XG4uLi5tZyxcbi4uLihzeW1ib2xNZXRob2RHdWFyZHMmJlxuZnJvbUVudHJpZXMoZ2V0Q29weU1hcEVudHJpZXMoc3ltYm9sTWV0aG9kR3VhcmRzKSkpfSk7XG5cbmRlZmF1bHRHdWFyZHM9ZGc7XG57XG5jb25zdCBtZXRob2RHdWFyZE5hbWVzPW93bktleXMobWV0aG9kR3VhcmRzKTtcbmNvbnN0IHVuaW1wbGVtZW50ZWQ9bGlzdERpZmZlcmVuY2UobWV0aG9kR3VhcmROYW1lcyxtZXRob2ROYW1lcyk7XG51bmltcGxlbWVudGVkLmxlbmd0aD09PTB8fFxuRmFpbCBgbWV0aG9kcyAke3EodW5pbXBsZW1lbnRlZCl9IG5vdCBpbXBsZW1lbnRlZCBieSAke3EodGFnKX1gO1xuaWYoZGVmYXVsdEd1YXJkcz09PXVuZGVmaW5lZCl7XG5jb25zdCB1bmd1YXJkZWQ9bGlzdERpZmZlcmVuY2UobWV0aG9kTmFtZXMsbWV0aG9kR3VhcmROYW1lcyk7XG51bmd1YXJkZWQubGVuZ3RoPT09MHx8XG5GYWlsIGBtZXRob2RzICR7cSh1bmd1YXJkZWQpfSBub3QgZ3VhcmRlZCBieSAke3EoaW50ZXJmYWNlTmFtZSl9YDtcbiB9XG4gfVxuIH1cblxuZm9yKGNvbnN0IHByb3Agb2YgbWV0aG9kTmFtZXMpe1xuY29uc3Qgb3JpZ2luYWxNZXRob2Q9YmVoYXZpb3JNZXRob2RzW3Byb3BdO1xuY29uc3R7c2hpZnRlZE1ldGhvZH09e1xuc2hpZnRlZE1ldGhvZCguLi5hcmdzKXtcbnJldHVybiBvcmlnaW5hbE1ldGhvZCh0aGlzLC4uLmFyZ3MpO1xuIH19O1xuXG5jb25zdCBiZWhhdmlvck1ldGhvZD10aGlzZnVsTWV0aG9kcz9vcmlnaW5hbE1ldGhvZDpzaGlmdGVkTWV0aG9kO1xuLy9cbi8vXG5sZXQgbWV0aG9kR3VhcmQ9bWV0aG9kR3VhcmRzJiZtZXRob2RHdWFyZHNbcHJvcF07XG5pZighbWV0aG9kR3VhcmQpe1xuc3dpdGNoKGRlZmF1bHRHdWFyZHMpe1xuY2FzZSB1bmRlZmluZWQ6e1xuaWYodGhpc2Z1bE1ldGhvZHMpe1xubWV0aG9kR3VhcmQ9UGFzc2FibGVNZXRob2RHdWFyZDtcbiB9ZWxzZXtcbm1ldGhvZEd1YXJkPVJhd01ldGhvZEd1YXJkO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UncGFzc2FibGUnOntcbm1ldGhvZEd1YXJkPVBhc3NhYmxlTWV0aG9kR3VhcmQ7XG5icmVhaztcbiB9XG5jYXNlJ3Jhdyc6e1xubWV0aG9kR3VhcmQ9UmF3TWV0aG9kR3VhcmQ7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYFVucmVjb2duaXplZCBkZWZhdWx0R3VhcmRzICR7cShkZWZhdWx0R3VhcmRzKX1gO1xuIH19XG5cbiB9XG5wcm90b3R5cGVbcHJvcF09YmluZE1ldGhvZChcbiBgSW4gJHtxKHByb3ApfSBtZXRob2Qgb2YgKCR7dGFnfSlgLFxuY29udGV4dFByb3ZpZGVyLFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZCk7XG5cbiB9XG5cbmlmKCFoYXNPd25Qcm9wZXJ0eU9mKHByb3RvdHlwZSxHRVRfSU5URVJGQUNFX0dVQVJEKSl7XG5jb25zdCBnZXRJbnRlcmZhY2VHdWFyZE1ldGhvZD17XG5bR0VUX0lOVEVSRkFDRV9HVUFSRF0oKXtcbi8vXG5yZXR1cm4gaW50ZXJmYWNlR3VhcmQ7XG4gfX1bXG5HRVRfSU5URVJGQUNFX0dVQVJEXTtcbnByb3RvdHlwZVtHRVRfSU5URVJGQUNFX0dVQVJEXT1iaW5kTWV0aG9kKFxuIGBJbiAke3EoR0VUX0lOVEVSRkFDRV9HVUFSRCl9IG1ldGhvZCBvZiAoJHt0YWd9KWAsXG5jb250ZXh0UHJvdmlkZXIsXG5nZXRJbnRlcmZhY2VHdWFyZE1ldGhvZCxcblBhc3NhYmxlTWV0aG9kR3VhcmQpO1xuXG4gfVxuXG5yZXR1cm4gRmFyKFxudGFnLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnByb3RvdHlwZSk7XG5cblxuIH07JGjNj19vbmNlLmRlZmVuZFByb3RvdHlwZShkZWZlbmRQcm90b3R5cGUpO1xuaGFyZGVuKGRlZmVuZFByb3RvdHlwZSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZlbmRQcm90b3R5cGVLaXQ9KFxudGFnLFxuY29udGV4dFByb3ZpZGVyS2l0LFxuYmVoYXZpb3JNZXRob2RzS2l0LFxudGhpc2Z1bE1ldGhvZHM9ZmFsc2UsXG5pbnRlcmZhY2VHdWFyZEtpdD11bmRlZmluZWQpPT5cbntcbmNvbnN0IGZhY2V0TmFtZXM9b3duS2V5cyhiZWhhdmlvck1ldGhvZHNLaXQpLnNvcnQoKTtcbmZhY2V0TmFtZXMubGVuZ3RoPjF8fEZhaWwgYEEgbXVsdGktZmFjZXQgb2JqZWN0IG11c3QgaGF2ZSBtdWx0aXBsZSBmYWNldHNgO1xuaWYoaW50ZXJmYWNlR3VhcmRLaXQpe1xuY29uc3QgaW50ZXJmYWNlTmFtZXM9b3duS2V5cyhpbnRlcmZhY2VHdWFyZEtpdCk7XG5jb25zdCBleHRyYUludGVyZmFjZU5hbWVzPWxpc3REaWZmZXJlbmNlKGZhY2V0TmFtZXMsaW50ZXJmYWNlTmFtZXMpO1xuZXh0cmFJbnRlcmZhY2VOYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYEludGVyZmFjZXMgJHtxKGV4dHJhSW50ZXJmYWNlTmFtZXMpfSBub3QgaW1wbGVtZW50ZWQgYnkgJHtxKHRhZyl9YDtcbmNvbnN0IGV4dHJhRmFjZXROYW1lcz1saXN0RGlmZmVyZW5jZShpbnRlcmZhY2VOYW1lcyxmYWNldE5hbWVzKTtcbmV4dHJhRmFjZXROYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYEZhY2V0cyAke3EoZXh0cmFGYWNldE5hbWVzKX0gb2YgJHtxKHRhZyl9IG5vdCBndWFyZGVkIGJ5IGludGVyZmFjZXNgO1xuIH1cbmNvbnN0IGNvbnRleHRNYXBOYW1lcz1vd25LZXlzKGNvbnRleHRQcm92aWRlcktpdCk7XG5jb25zdCBleHRyYUNvbnRleHROYW1lcz1saXN0RGlmZmVyZW5jZShmYWNldE5hbWVzLGNvbnRleHRNYXBOYW1lcyk7XG5leHRyYUNvbnRleHROYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYENvbnRleHRzICR7cShleHRyYUNvbnRleHROYW1lcyl9IG5vdCBpbXBsZW1lbnRlZCBieSAke3EodGFnKX1gO1xuY29uc3QgZXh0cmFGYWNldE5hbWVzPWxpc3REaWZmZXJlbmNlKGNvbnRleHRNYXBOYW1lcyxmYWNldE5hbWVzKTtcbmV4dHJhRmFjZXROYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYEZhY2V0cyAke3EoZXh0cmFGYWNldE5hbWVzKX0gb2YgJHtxKHRhZyl9IG1pc3NpbmcgY29udGV4dHNgO1xuY29uc3QgcHJvdG9LaXQ9b2JqZWN0TWFwKGJlaGF2aW9yTWV0aG9kc0tpdCwoYmVoYXZpb3JNZXRob2RzLGZhY2V0TmFtZSk9PlxuZGVmZW5kUHJvdG90eXBlKFxuIGAke3RhZ30gJHtTdHJpbmcoZmFjZXROYW1lKX1gLFxuY29udGV4dFByb3ZpZGVyS2l0W2ZhY2V0TmFtZV0sXG5iZWhhdmlvck1ldGhvZHMsXG50aGlzZnVsTWV0aG9kcyxcbmludGVyZmFjZUd1YXJkS2l0JiZpbnRlcmZhY2VHdWFyZEtpdFtmYWNldE5hbWVdKSk7XG5cblxucmV0dXJuIHByb3RvS2l0O1xuIH07JGjNj19vbmNlLmRlZmVuZFByb3RvdHlwZUtpdChkZWZlbmRQcm90b3R5cGVLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmZW5kUHJvdG90eXBlIjpbImRlZmVuZFByb3RvdHlwZSJdLCJkZWZlbmRQcm90b3R5cGVLaXQiOlsiZGVmZW5kUHJvdG90eXBlS2l0Il19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANeWUP5lAgAAZQIAACUAAABAZW5kby9leG8tdjEuNS44L3NyYy9nZXQtaW50ZXJmYWNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJHRVRfSU5URVJGQUNFX0dVQVJEIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgR0VUX0lOVEVSRkFDRV9HVUFSRD0nX19nZXRJbnRlcmZhY2VHdWFyZF9fJztcblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLkdFVF9JTlRFUkZBQ0VfR1VBUkQoR0VUX0lOVEVSRkFDRV9HVUFSRCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJHRVRfSU5URVJGQUNFX0dVQVJEIjpbIkdFVF9JTlRFUkZBQ0VfR1VBUkQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABURLJnkBAAB5AQAAHQAAAEBlbmRvL2V4by12MS41Ljgvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAVESyZ5AQAAeQEAACAAAABAZW5kby9mYXItdjEuMS4xMC9zcmMvZXhwb3J0cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABSckKpuQIAALkCAAAeAAAAQGVuZG8vZmFyLXYxLjEuMTAvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9wYXNzLXN0eWxlIiwiLi9leHBvcnRzLmpzIl0sImV4cG9ydHMiOlsiZ2V0SW50ZXJmYWNlT2YiLCJnZXRJbnRlcmZhY2VPZiIsbnVsbF0sInJlZXhwb3J0cyI6WyIuL2V4cG9ydHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbXV0sW1wiLi9leHBvcnRzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGVuZG8vZXZlbnR1YWwtc2VuZCI6W1siRSIsIkUiXV0sIkBlbmRvL3Bhc3Mtc3R5bGUiOltbIkZhciIsIkZhciJdLFsiZ2V0SW50ZXJmYWNlT2YiLCJnZXRJbnRlcmZhY2VPZiJdLFsicGFzc1N0eWxlT2YiLCJwYXNzU3R5bGVPZiJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAWX9kFqMHAACjBwAAHQAAAEBlbmRvL21hcnNoYWwtdjEuNi4zL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyIsIi4vc3JjL21hcnNoYWwuanMiLCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyIsIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIiwiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiLCIuL3NyYy9yYW5rT3JkZXIuanMiLCIuL3NyYy90eXBlcy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiXSwiZXhwb3J0cyI6WyJhc3NlcnRSYW5rU29ydGVkIiwiYXNzZXJ0UmFua1NvcnRlZCIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsInBhcnNlIiwicGFyc2UiLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9wYXNzLXN0eWxlIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qc1wiLCBbXV0sW1wiLi9zcmMvbWFyc2hhbC5qc1wiLCBbXV0sW1wiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwtanVzdGluLmpzXCIsIFtdXSxbXCIuL3NyYy9lbmNvZGVQYXNzYWJsZS5qc1wiLCBbXV0sW1wiLi9zcmMvcmFua09yZGVyLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyI6W1siUUNMQVNTIiwiUUNMQVNTIl1dLCIuL3NyYy9tYXJzaGFsLmpzIjpbWyJtYWtlTWFyc2hhbCIsIm1ha2VNYXJzaGFsIl1dLCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyI6W1sic3RyaW5naWZ5Iiwic3RyaW5naWZ5Il0sWyJwYXJzZSIsInBhcnNlIl1dLCIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qcyI6W1siZGVjb2RlVG9KdXN0aW4iLCJkZWNvZGVUb0p1c3RpbiJdXSwiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiOltbIm1ha2VQYXNzYWJsZUtpdCIsIm1ha2VQYXNzYWJsZUtpdCJdLFsibWFrZUVuY29kZVBhc3NhYmxlIiwibWFrZUVuY29kZVBhc3NhYmxlIl0sWyJtYWtlRGVjb2RlUGFzc2FibGUiLCJtYWtlRGVjb2RlUGFzc2FibGUiXSxbImlzRW5jb2RlZFJlbW90YWJsZSIsImlzRW5jb2RlZFJlbW90YWJsZSJdLFsiemVyb1BhZCIsInplcm9QYWQiXSxbInJlY29yZE5hbWVzIiwicmVjb3JkTmFtZXMiXSxbInJlY29yZFZhbHVlcyIsInJlY29yZFZhbHVlcyJdXSwiLi9zcmMvcmFua09yZGVyLmpzIjpbWyJ0cml2aWFsQ29tcGFyYXRvciIsInRyaXZpYWxDb21wYXJhdG9yIl0sWyJhc3NlcnRSYW5rU29ydGVkIiwiYXNzZXJ0UmFua1NvcnRlZCJdLFsiY29tcGFyZVJhbmsiLCJjb21wYXJlUmFuayJdLFsiaXNSYW5rU29ydGVkIiwiaXNSYW5rU29ydGVkIl0sWyJzb3J0QnlSYW5rIiwic29ydEJ5UmFuayJdLFsiY29tcGFyZUFudGlSYW5rIiwiY29tcGFyZUFudGlSYW5rIl0sWyJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCIsIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0Il0sWyJnZXRQYXNzU3R5bGVDb3ZlciIsImdldFBhc3NTdHlsZUNvdmVyIl0sWyJpbnRlcnNlY3RSYW5rQ292ZXJzIiwiaW50ZXJzZWN0UmFua0NvdmVycyJdLFsidW5pb25SYW5rQ292ZXJzIiwidW5pb25SYW5rQ292ZXJzIl1dLCJAZW5kby9wYXNzLXN0eWxlIjpbWyJkZWVwbHlGdWxmaWxsZWQiLCJkZWVwbHlGdWxmaWxsZWQiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKpdDamIQwAAiEMAACoAAABAZW5kby9tYXJzaGFsLXYxLjYuMy9zcmMvZW5jb2RlUGFzc2FibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImlzRW5jb2RlZFJlbW90YWJsZSIsIm1ha2VEZWNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VQYXNzYWJsZUtpdCIsInBhc3NTdHlsZVByZWZpeGVzIiwicmVjb3JkTmFtZXMiLCJyZWNvcmRWYWx1ZXMiLCJ6ZXJvUGFkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0VGFnLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsYXNzZXJ0UmVjb3JkLGlzRXJyb3JMaWtlLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsYixxLEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJhc3NlcnRSZWNvcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVjb3JkID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYlwiLCBbJGjNj19hID0+IChiID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e2Zyb21FbnRyaWVzLGlzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vL1xuY29uc3QgckMwPS9bXFx4MDAtXFx4MUZdLztcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBnZXRTdWZmaXg9KHN0cixpbmRleCk9PmluZGV4PT09MD9zdHI6c3RyLnN1YnN0cmluZyhpbmRleCk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHJlY29yZE5hbWVzPShyZWNvcmQpPT5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuaGFyZGVuKC8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhyZWNvcmQpLnNvcnQoKS5yZXZlcnNlKCkpOyRozY9fb25jZS5yZWNvcmROYW1lcyhyZWNvcmROYW1lcyk7XG5oYXJkZW4ocmVjb3JkTmFtZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICByZWNvcmRWYWx1ZXM9KHJlY29yZCxuYW1lcyk9PlxuaGFyZGVuKG5hbWVzLm1hcCgobmFtZSk9PnJlY29yZFtuYW1lXSkpOyRozY9fb25jZS5yZWNvcmRWYWx1ZXMocmVjb3JkVmFsdWVzKTtcbmhhcmRlbihyZWNvcmRWYWx1ZXMpO1xuXG5jb25zdCB6ZXJvZXM9QXJyYXkoMTYpLlxuZmlsbCh1bmRlZmluZWQpLlxubWFwKChfLGkpPT4nMCcucmVwZWF0KGkpKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHplcm9QYWQ9KG4sc2l6ZSk9PntcbmNvbnN0IG5TdHI9IGAke259YDtcbmNvbnN0IGZpbGxMZW49c2l6ZS1uU3RyLmxlbmd0aDtcbmlmKGZpbGxMZW49PT0wKXJldHVybiBuU3RyO1xuYXNzZXJ0KGZpbGxMZW4+MCYmZmlsbExlbjx6ZXJvZXMubGVuZ3RoKTtcbnJldHVybiBgJHt6ZXJvZXNbZmlsbExlbl19JHtuU3RyfWA7XG4gfTskaM2PX29uY2UuemVyb1BhZCh6ZXJvUGFkKTtcbmhhcmRlbih6ZXJvUGFkKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBhc051bWJlcj1uZXcgRmxvYXQ2NEFycmF5KDEpO1xuY29uc3QgYXNCaXRzPW5ldyBCaWdVaW50NjRBcnJheShhc051bWJlci5idWZmZXIpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG5jb25zdCBDYW5vbmljYWxOYU5CaXRzPSdmZmY4MDAwMDAwMDAwMDAwJztcblxuLypcblxuXG4gKi9cbmNvbnN0IGVuY29kZUJpbmFyeTY0PShuKT0+e1xuLy9cbmlmKGlzKG4sLTApKXtcbm49MDtcbiB9ZWxzZSBpZihpcyhuLE5hTikpe1xucmV0dXJuIGBmJHtDYW5vbmljYWxOYU5CaXRzfWA7XG4gfVxuYXNOdW1iZXJbMF09bjtcbmxldCBiaXRzPWFzQml0c1swXTtcbmlmKG48MCl7XG5iaXRzXj0weGZmZmZmZmZmZmZmZmZmZmZuO1xuIH1lbHNle1xuYml0c149MHg4MDAwMDAwMDAwMDAwMDAwbjtcbiB9XG5yZXR1cm4gYGYke3plcm9QYWQoYml0cy50b1N0cmluZygxNiksMTYpfWA7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQmluYXJ5NjQ9KGVuY29kZWQsc2tpcD0wKT0+e1xuZW5jb2RlZC5jaGFyQXQoc2tpcCk9PT0nZid8fEZhaWwgYEVuY29kZWQgbnVtYmVyIGV4cGVjdGVkOiAke2VuY29kZWR9YDtcbmxldCBiaXRzPUJpZ0ludCggYDB4JHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpfWApO1xuaWYoZW5jb2RlZC5jaGFyQXQoc2tpcCsxKTwnOCcpe1xuYml0c149MHhmZmZmZmZmZmZmZmZmZmZmbjtcbiB9ZWxzZXtcbmJpdHNePTB4ODAwMDAwMDAwMDAwMDAwMG47XG4gfVxuYXNCaXRzWzBdPWJpdHM7XG5jb25zdCByZXN1bHQ9YXNOdW1iZXJbMF07XG4haXMocmVzdWx0LC0wKXx8XG5GYWlsIGBVbmV4cGVjdGVkIG5lZ2F0aXZlIHplcm86ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQmlnSW50PShuKT0+e1xuY29uc3QgYWJzPW48MG4/LW46bjtcbmNvbnN0IG5EaWdpdHM9YWJzLnRvU3RyaW5nKCkubGVuZ3RoO1xuY29uc3QgbERpZ2l0cz1uRGlnaXRzLnRvU3RyaW5nKCkubGVuZ3RoO1xuaWYobjwwbil7XG5yZXR1cm4gYG4ke1xuLy9cbi8vXG4nIycucmVwZWF0KGxEaWdpdHMtMSlcbiB9JHtcbi8vXG4oMTAqKmxEaWdpdHMtbkRpZ2l0cykudG9TdHJpbmcoKS5wYWRTdGFydChsRGlnaXRzLCcwJylcbiB9OiR7XG4vL1xuKDEwbioqQmlnSW50KG5EaWdpdHMpK24pLnRvU3RyaW5nKCkucGFkU3RhcnQobkRpZ2l0cywnMCcpXG4gfWA7XG4gfWVsc2V7XG5yZXR1cm4gYHAke1xuLy9cbi8vXG4nficucmVwZWF0KGxEaWdpdHMtMSlcbiB9JHtcbi8vXG5uRGlnaXRzXG4gfToke1xuLy9cbm5cbiB9YDtcbiB9XG4gfTtcblxuY29uc3QgckJpZ0ludFBheWxvYWQ9LyhbMC05XSspKDooWzAtOV0rJHwpfCkvcztcblxuLypcblxuXG4gKi9cbmNvbnN0IGRlY29kZUJpZ0ludD0oZW5jb2RlZCk9PntcbmNvbnN0IHR5cGVQcmVmaXg9ZW5jb2RlZC5jaGFyQXQoMCk7Ly9cbnR5cGVQcmVmaXg9PT0ncCd8fFxudHlwZVByZWZpeD09PSduJ3x8XG5GYWlsIGBFbmNvZGVkIGJpZ2ludCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5cbmNvbnN0e1xuaW5kZXg6bERpZ2l0cyxcbjE6c25EaWdpdHMsXG4yOnRhaWwsXG4zOmRpZ2l0c309XG5lbmNvZGVkLm1hdGNoKHJCaWdJbnRQYXlsb2FkKXx8RmFpbCBgRGlnaXQgY291bnQgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xuXG5zbkRpZ2l0cy5sZW5ndGg9PT1sRGlnaXRzfHxcbkZhaWwgYFVuYXJ5LXByZWZpeGVkIGRlY2ltYWwgZGlnaXQgY291bnQgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IG5EaWdpdHM9cGFyc2VJbnQoc25EaWdpdHMsMTApO1xuaWYodHlwZVByZWZpeD09PSduJyl7XG4vL1xuLy9cbm5EaWdpdHM9MTAqKi8qICAgICAgICAgICAgICAgICAqL2xEaWdpdHMtbkRpZ2l0cztcbiB9XG5cbnRhaWwuY2hhckF0KDApPT09JzonfHxGYWlsIGBTZXBhcmF0b3IgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xuZGlnaXRzLmxlbmd0aD09PW5EaWdpdHN8fFxuRmFpbCBgRml4ZWQtbGVuZ3RoIGRpZ2l0IHNlcXVlbmNlIGV4cGVjdGVkOiAke2VuY29kZWR9YDtcbmxldCBuPUJpZ0ludChkaWdpdHMpO1xuaWYodHlwZVByZWZpeD09PSduJyl7XG4vL1xuLy9cbm49LSgxMG4qKkJpZ0ludChuRGlnaXRzKS1uKTtcbiB9XG5cbnJldHVybiBuO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc3RyaW5nRXNjYXBlcz1BcnJheSgweDIyKS5cbmZpbGwodW5kZWZpbmVkKS5cbm1hcCgoXyxjcCk9PntcbnN3aXRjaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKSl7XG5jYXNlJyAnOlxucmV0dXJuJyFfJztcbmNhc2UnISc6XG5yZXR1cm4nIXwnO1xuZGVmYXVsdDpcbnJldHVybiBgISR7U3RyaW5nLmZyb21DaGFyQ29kZShjcCsweDIxKX1gO31cblxuIH0pO1xuc3RyaW5nRXNjYXBlc1snXicuY2hhckNvZGVBdCgwKV09J19AJztcbnN0cmluZ0VzY2FwZXNbJ18nLmNoYXJDb2RlQXQoMCldPSdfXyc7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUNvbXBhY3RTdHJpbmdTdWZmaXg9KHN0cik9Plxuc3RyLnJlcGxhY2UoL1tcXDAtIV5fXS9nLChjaCk9PnN0cmluZ0VzY2FwZXNbY2guY2hhckNvZGVBdCgwKV0pO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVDb21wYWN0U3RyaW5nU3VmZml4PShlbmNvZGVkKT0+e1xucmV0dXJuIGVuY29kZWQucmVwbGFjZSgvKFtcXDAtIV9dKSgufFxcbik/L2csKGVzYyxwcmVmaXgsc3VmZml4KT0+e1xuc3dpdGNoKGVzYyl7XG5jYXNlJyFfJzpcbnJldHVybicgJztcbmNhc2UnIXwnOlxucmV0dXJuJyEnO1xuY2FzZSdfQCc6XG5yZXR1cm4nXic7XG5jYXNlJ19fJzpcbnJldHVybidfJztcbmRlZmF1bHQ6e1xuY29uc3QgY2g9LyogICAgICAgICAgICAgICAgICovc3VmZml4O1xuLy9cbi8vXG5wcmVmaXg9PT0nIScmJnN1ZmZpeCE9PXVuZGVmaW5lZCYmY2g+PSchJyYmY2g8PSdAJ3x8XG5GYWlsIGBpbnZhbGlkIHN0cmluZyBlc2NhcGU6ICR7cShlc2MpfWA7XG5yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaC5jaGFyQ29kZUF0KDApLTB4MjEpO1xuIH19XG5cbiB9KTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBlbmNvZGVMZWdhY3lTdHJpbmdTdWZmaXg9KHN0cik9PnN0cjtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlTGVnYWN5U3RyaW5nU3VmZml4PShlbmNvZGVkKT0+ZW5jb2RlZDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVDb21wYWN0QXJyYXk9KGFycmF5LGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgY2hhcnM9WydeJ107XG5mb3IoY29uc3QgZWxlbWVudCBvZiBhcnJheSl7XG5jb25zdCBlbmM9ZW5jb2RlUGFzc2FibGUoZWxlbWVudCk7XG5jaGFycy5wdXNoKGVuYywnICcpO1xuIH1cbnJldHVybiBjaGFycy5qb2luKCcnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUNvbXBhY3RBcnJheT0oZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwPTApPT57XG5jb25zdCBlbGVtZW50cz1bXTtcbmxldCBkZXB0aD0wO1xuLy9cbi8vXG5sZXQgbmV4dEluZGV4PXNraXArMTtcbmxldCBjdXJyZW50RWxlbWVudFN0YXJ0PXNraXArMTtcbmZvcihjb25zdHswOmNoLGluZGV4Oml9b2YgZW5jb2RlZC5tYXRjaEFsbCgvW1xcXiBdL2cpKXtcbmNvbnN0IGluZGV4PS8qICAgICAgICAgICAgICAgICAqL2k7XG5pZihpbmRleDw9c2tpcCl7XG5pZihpbmRleD09PXNraXApe1xuY2g9PT0nXid8fEZhaWwgYEVuY29kZWQgYXJyYXkgZXhwZWN0ZWQ6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9XG4gfWVsc2UgaWYoY2g9PT0nXicpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5kZXB0aCs9MTtcbiB9ZWxzZXtcbi8vXG5pZihpbmRleD09PW5leHRJbmRleCl7XG4vL1xuZGVwdGgtPTE7XG5kZXB0aD49MHx8XG4vL1xuRmFpbCBgdW5leHBlY3RlZCBhcnJheSBlbGVtZW50IHRlcm1pbmF0b3I6ICR7ZW5jb2RlZC5zbGljZShza2lwLGluZGV4KzIpfWA7XG4gfVxuaWYoZGVwdGg9PT0wKXtcbi8vXG5lbGVtZW50cy5wdXNoKFxuZGVjb2RlUGFzc2FibGUoZW5jb2RlZC5zbGljZShjdXJyZW50RWxlbWVudFN0YXJ0LGluZGV4KSkpO1xuXG5jdXJyZW50RWxlbWVudFN0YXJ0PWluZGV4KzE7XG4gfVxuIH1cbi8vXG5uZXh0SW5kZXg9aW5kZXgrMTtcbiB9XG5kZXB0aD09PTB8fEZhaWwgYHVudGVybWluYXRlZCBhcnJheTogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xubmV4dEluZGV4PT09ZW5jb2RlZC5sZW5ndGh8fFxuRmFpbCBgdW50ZXJtaW5hdGVkIGFycmF5IGVsZW1lbnQ6ICR7Z2V0U3VmZml4KFxuZW5jb2RlZCxcbmN1cnJlbnRFbGVtZW50U3RhcnQpXG4gfWA7XG5yZXR1cm4gaGFyZGVuKGVsZW1lbnRzKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVMZWdhY3lBcnJheT0oYXJyYXksZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBjaGFycz1bJ1snXTtcbmZvcihjb25zdCBlbGVtZW50IG9mIGFycmF5KXtcbmNvbnN0IGVuYz1lbmNvZGVQYXNzYWJsZShlbGVtZW50KTtcbmZvcihjb25zdCBjIG9mIGVuYyl7XG5pZihjPT09J1xcdTAwMDAnfHxjPT09J1xcdTAwMDEnKXtcbmNoYXJzLnB1c2goJ1xcdTAwMDEnKTtcbiB9XG5jaGFycy5wdXNoKGMpO1xuIH1cbmNoYXJzLnB1c2goJ1xcdTAwMDAnKTtcbiB9XG5yZXR1cm4gY2hhcnMuam9pbignJyk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWNvZGVMZWdhY3lBcnJheT0oZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwPTApPT57XG5jb25zdCBlbGVtZW50cz1bXTtcbmNvbnN0IGVsZW1DaGFycz1bXTtcbi8vXG4vL1xubGV0IHN0aWxsVG9Ta2lwPXNraXArMTtcbmxldCBpbkVzY2FwZT1mYWxzZTtcbmZvcihjb25zdCBjIG9mIGVuY29kZWQpe1xuaWYoc3RpbGxUb1NraXA+MCl7XG5zdGlsbFRvU2tpcC09MTtcbmlmKHN0aWxsVG9Ta2lwPT09MCl7XG5jPT09J1snfHxGYWlsIGBFbmNvZGVkIGFycmF5IGV4cGVjdGVkOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG4gfVxuIH1lbHNlIGlmKGluRXNjYXBlKXtcbmM9PT0nXFx1MDAwMCd8fFxuYz09PSdcXHUwMDAxJ3x8XG5GYWlsIGBVbmV4cGVjdGVkIGNoYXJhY3RlciBhZnRlciB1MDAwMSBlc2NhcGU6ICR7Y31gO1xuZWxlbUNoYXJzLnB1c2goYyk7XG4gfWVsc2UgaWYoYz09PSdcXHUwMDAwJyl7XG5jb25zdCBlbmNvZGVkRWxlbWVudD1lbGVtQ2hhcnMuam9pbignJyk7XG5lbGVtQ2hhcnMubGVuZ3RoPTA7XG5jb25zdCBlbGVtZW50PWRlY29kZVBhc3NhYmxlKGVuY29kZWRFbGVtZW50KTtcbmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gfWVsc2UgaWYoYz09PSdcXHUwMDAxJyl7XG5pbkVzY2FwZT10cnVlO1xuLy9cbmNvbnRpbnVlO1xuIH1lbHNle1xuZWxlbUNoYXJzLnB1c2goYyk7XG4gfVxuaW5Fc2NhcGU9ZmFsc2U7XG4gfVxuIWluRXNjYXBlfHxGYWlsIGB1bmV4cGVjdGVkIGVuZCBvZiBlbmNvZGluZyAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5lbGVtQ2hhcnMubGVuZ3RoPT09MHx8XG5GYWlsIGBlbmNvZGluZyB0ZXJtaW5hdGVkIGVhcmx5OiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5yZXR1cm4gaGFyZGVuKGVsZW1lbnRzKTtcbiB9O1xuXG5jb25zdCBlbmNvZGVSZWNvcmQ9KHJlY29yZCxlbmNvZGVBcnJheSxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IG5hbWVzPXJlY29yZE5hbWVzKHJlY29yZCk7XG5jb25zdCB2YWx1ZXM9cmVjb3JkVmFsdWVzKHJlY29yZCxuYW1lcyk7XG5yZXR1cm4gYCgke2VuY29kZUFycmF5KGhhcmRlbihbbmFtZXMsdmFsdWVzXSksZW5jb2RlUGFzc2FibGUpfWA7XG4gfTtcblxuY29uc3QgZGVjb2RlUmVjb3JkPShlbmNvZGVkLGRlY29kZUFycmF5LGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmFzc2VydChlbmNvZGVkLmNoYXJBdChza2lwKT09PScoJyk7XG4vL1xuLy9cbmNvbnN0IHVuemlwcGVkRW50cmllcz1kZWNvZGVBcnJheShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXArMSk7XG51bnppcHBlZEVudHJpZXMubGVuZ3RoPT09Mnx8XG5GYWlsIGBleHBlY3RlZCBrZXlzLHZhbHVlcyBwYWlyOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5jb25zdFtrZXlzLHZhbHNdPXVuemlwcGVkRW50cmllcztcblxucGFzc1N0eWxlT2Yoa2V5cyk9PT0nY29weUFycmF5JyYmXG5wYXNzU3R5bGVPZih2YWxzKT09PSdjb3B5QXJyYXknJiZcbmtleXMubGVuZ3RoPT09dmFscy5sZW5ndGgmJlxua2V5cy5ldmVyeSgoa2V5KT0+dHlwZW9mIGtleT09PSdzdHJpbmcnKXx8XG5GYWlsIGBub3QgYSB2YWxpZCByZWNvcmQgZW5jb2Rpbmc6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0IG1hcEVudHJpZXM9a2V5cy5tYXAoKGtleSxpKT0+W2tleSx2YWxzW2ldXSk7XG5jb25zdCByZWNvcmQ9aGFyZGVuKGZyb21FbnRyaWVzKG1hcEVudHJpZXMpKTtcbmFzc2VydFJlY29yZChyZWNvcmQsJ2RlY29kZWQgcmVjb3JkJyk7XG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbmNvbnN0IGVuY29kZVRhZ2dlZD0odGFnZ2VkLGVuY29kZUFycmF5LGVuY29kZVBhc3NhYmxlKT0+XG4gYDoke2VuY29kZUFycmF5KGhhcmRlbihbZ2V0VGFnKHRhZ2dlZCksdGFnZ2VkLnBheWxvYWRdKSxlbmNvZGVQYXNzYWJsZSl9YDtcblxuY29uc3QgZGVjb2RlVGFnZ2VkPShlbmNvZGVkLGRlY29kZUFycmF5LGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmFzc2VydChlbmNvZGVkLmNoYXJBdChza2lwKT09PSc6Jyk7XG4vL1xuLy9cbmNvbnN0IHRhZ2dlZFBheWxvYWQ9ZGVjb2RlQXJyYXkoZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwKzEpO1xudGFnZ2VkUGF5bG9hZC5sZW5ndGg9PT0yfHxcbkZhaWwgYGV4cGVjdGVkIHRhZyxwYXlsb2FkIHBhaXI6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0W3RhZyxwYXlsb2FkXT10YWdnZWRQYXlsb2FkO1xucGFzc1N0eWxlT2YodGFnKT09PSdzdHJpbmcnfHxcbkZhaWwgYG5vdCBhIHZhbGlkIHRhZ2dlZCBlbmNvZGluZzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xucmV0dXJuIG1ha2VUYWdnZWQodGFnLHBheWxvYWQpO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVSZW1vdGFibGU9KHVuc2FmZUVuY29kZVJlbW90YWJsZSx2ZXJpZnlFbmNvZGluZyk9PntcbmNvbnN0IGVuY29kZVJlbW90YWJsZT0ocixpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZVJlbW90YWJsZShyLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0ncid8fFxuRmFpbCBgUmVtb3RhYmxlIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcInJcIjogJHtlbmNvZGluZ31gO1xudmVyaWZ5RW5jb2RpbmcoZW5jb2RpbmcsJ1JlbW90YWJsZScpO1xucmV0dXJuIGVuY29kaW5nO1xuIH07XG5yZXR1cm4gZW5jb2RlUmVtb3RhYmxlO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVQcm9taXNlPSh1bnNhZmVFbmNvZGVQcm9taXNlLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlUHJvbWlzZT0ocCxpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZVByb21pc2UocCxpbm5lckVuY29kZSk7XG50eXBlb2YgZW5jb2Rpbmc9PT0nc3RyaW5nJyYmZW5jb2RpbmcuY2hhckF0KDApPT09Jz8nfHxcbkZhaWwgYFByb21pc2UgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiP1wiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnUHJvbWlzZScpO1xucmV0dXJuIGVuY29kaW5nO1xuIH07XG5yZXR1cm4gZW5jb2RlUHJvbWlzZTtcbiB9O1xuXG5jb25zdCBtYWtlRW5jb2RlRXJyb3I9KHVuc2FmZUVuY29kZUVycm9yLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlRXJyb3I9KGVycixpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZUVycm9yKGVycixpbm5lckVuY29kZSk7XG50eXBlb2YgZW5jb2Rpbmc9PT0nc3RyaW5nJyYmZW5jb2RpbmcuY2hhckF0KDApPT09JyEnfHxcbkZhaWwgYEVycm9yIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcIiFcIjogJHtlbmNvZGluZ31gO1xudmVyaWZ5RW5jb2RpbmcoZW5jb2RpbmcsJ0Vycm9yJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVFcnJvcjtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbm5lckVuY29kZT0oZW5jb2RlU3RyaW5nU3VmZml4LGVuY29kZUFycmF5LG9wdGlvbnMpPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZTp1bnNhZmVFbmNvZGVSZW1vdGFibGUsXG5lbmNvZGVQcm9taXNlOnVuc2FmZUVuY29kZVByb21pc2UsXG5lbmNvZGVFcnJvcjp1bnNhZmVFbmNvZGVFcnJvcixcbnZlcmlmeUVuY29kaW5nPSgpPT57IH19PVxub3B0aW9ucztcbmNvbnN0IGVuY29kZVJlbW90YWJsZT1tYWtlRW5jb2RlUmVtb3RhYmxlKFxudW5zYWZlRW5jb2RlUmVtb3RhYmxlLFxudmVyaWZ5RW5jb2RpbmcpO1xuXG5jb25zdCBlbmNvZGVQcm9taXNlPW1ha2VFbmNvZGVQcm9taXNlKHVuc2FmZUVuY29kZVByb21pc2UsdmVyaWZ5RW5jb2RpbmcpO1xuY29uc3QgZW5jb2RlRXJyb3I9bWFrZUVuY29kZUVycm9yKHVuc2FmZUVuY29kZUVycm9yLHZlcmlmeUVuY29kaW5nKTtcblxuY29uc3QgaW5uZXJFbmNvZGU9KHBhc3NhYmxlKT0+e1xuaWYoaXNFcnJvckxpa2UocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gZW5jb2RlRXJyb3IocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihwYXNzYWJsZSk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnbnVsbCc6e1xucmV0dXJuJ3YnO1xuIH1cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4neic7XG4gfVxuY2FzZSdudW1iZXInOntcbnJldHVybiBlbmNvZGVCaW5hcnk2NChwYXNzYWJsZSk7XG4gfVxuY2FzZSdzdHJpbmcnOntcbnJldHVybiBgcyR7ZW5jb2RlU3RyaW5nU3VmZml4KHBhc3NhYmxlKX1gO1xuIH1cbmNhc2UnYm9vbGVhbic6e1xucmV0dXJuIGBiJHtwYXNzYWJsZX1gO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5yZXR1cm4gZW5jb2RlQmlnSW50KHBhc3NhYmxlKTtcbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xucmV0dXJuIGVuY29kZVJlbW90YWJsZShwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSdlcnJvcic6e1xucmV0dXJuIGVuY29kZUVycm9yKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBlbmNvZGVQcm9taXNlKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuLy9cbmNvbnN0IG5hbWU9bmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5yZXR1cm4gYHkke2VuY29kZVN0cmluZ1N1ZmZpeChuYW1lKX1gO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5yZXR1cm4gZW5jb2RlQXJyYXkocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xucmV0dXJuIGVuY29kZVJlY29yZChwYXNzYWJsZSxlbmNvZGVBcnJheSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybiBlbmNvZGVUYWdnZWQocGFzc2FibGUsZW5jb2RlQXJyYXksaW5uZXJFbmNvZGUpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgYSAke3EocGFzc1N0eWxlKX0gY2Fubm90IGJlIHVzZWQgYXMgYSBjb2xsZWN0aW9uIHBhc3NhYmxlYDtcbiB9fVxuXG4gfTtcbnJldHVybiBpbm5lckVuY29kZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgbGliZXJhbERlY29kZXJzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICove1xuZGVjb2RlUmVtb3RhYmxlOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkLFxuZGVjb2RlUHJvbWlzZTooX2VuY29kaW5nLF9pbm5lckRlY29kZSk9PnVuZGVmaW5lZCxcbmRlY29kZUVycm9yOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkfTtcblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlubmVyRGVjb2RlPShkZWNvZGVTdHJpbmdTdWZmaXgsZGVjb2RlQXJyYXksb3B0aW9ucyk9PntcbmNvbnN0e2RlY29kZVJlbW90YWJsZSxkZWNvZGVQcm9taXNlLGRlY29kZUVycm9yfT1vcHRpb25zO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlubmVyRGVjb2RlPShlbmNvZGVkLHNraXA9MCk9PntcbnN3aXRjaChlbmNvZGVkLmNoYXJBdChza2lwKSl7XG5jYXNlJ3YnOntcbnJldHVybiBudWxsO1xuIH1cbmNhc2Uneic6e1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jYXNlJ2YnOntcbnJldHVybiBkZWNvZGVCaW5hcnk2NChlbmNvZGVkLHNraXApO1xuIH1cbmNhc2Uncyc6e1xucmV0dXJuIGRlY29kZVN0cmluZ1N1ZmZpeChnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpKTtcbiB9XG5jYXNlJ2InOntcbmNvbnN0IHN1YnN0cmluZz1nZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpO1xuaWYoc3Vic3RyaW5nPT09J3RydWUnKXtcbnJldHVybiB0cnVlO1xuIH1lbHNlIGlmKHN1YnN0cmluZz09PSdmYWxzZScpe1xucmV0dXJuIGZhbHNlO1xuIH1cbnRocm93IEZhaWwgYGV4cGVjdGVkIGVuY29kZWQgYm9vbGVhbiB0byBiZSBcImJ0cnVlXCIgb3IgXCJiZmFsc2VcIjogJHtzdWJzdHJpbmd9YDtcbiB9XG5jYXNlJ24nOlxuY2FzZSdwJzp7XG5yZXR1cm4gZGVjb2RlQmlnSW50KGdldFN1ZmZpeChlbmNvZGVkLHNraXApKTtcbiB9XG5jYXNlJ3InOntcbnJldHVybiBkZWNvZGVSZW1vdGFibGUoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UnPyc6e1xucmV0dXJuIGRlY29kZVByb21pc2UoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UnISc6e1xucmV0dXJuIGRlY29kZUVycm9yKGdldFN1ZmZpeChlbmNvZGVkLHNraXApLGlubmVyRGVjb2RlKTtcbiB9XG5jYXNlJ3knOntcbi8vXG5jb25zdCBuYW1lPWRlY29kZVN0cmluZ1N1ZmZpeChnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpKTtcbnJldHVybiBwYXNzYWJsZVN5bWJvbEZvck5hbWUobmFtZSk7XG4gfVxuY2FzZSdbJzpcbmNhc2UnXic6e1xuLy9cbnJldHVybiBkZWNvZGVBcnJheShlbmNvZGVkLGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmNhc2UnKCc6e1xucmV0dXJuIGRlY29kZVJlY29yZChlbmNvZGVkLGRlY29kZUFycmF5LGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmNhc2UnOic6e1xucmV0dXJuIGRlY29kZVRhZ2dlZChlbmNvZGVkLGRlY29kZUFycmF5LGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgaW52YWxpZCBkYXRhYmFzZSBrZXk6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9fVxuXG4gfTtcbnJldHVybiBpbm5lckRlY29kZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVBhc3NhYmxlS2l0PShvcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGU9KHIsXyk9PkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke3J9YCxcbmVuY29kZVByb21pc2U9KHAsXyk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtwfWAsXG5lbmNvZGVFcnJvcj0oZXJyLF8pPT5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke2Vycn1gLFxuZm9ybWF0PSdsZWdhY3lPcmRlcmVkJyxcblxuZGVjb2RlUmVtb3RhYmxlPShlbmNvZGluZyxfKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YCxcbmRlY29kZVByb21pc2U9KGVuY29kaW5nLF8pPT5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YCxcbmRlY29kZUVycm9yPShlbmNvZGluZyxfKT0+RmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gfT1cbm9wdGlvbnM7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZW5jb2RlUGFzc2FibGU7XG5jb25zdCBlbmNvZGVPcHRpb25zPXtlbmNvZGVSZW1vdGFibGUsZW5jb2RlUHJvbWlzZSxlbmNvZGVFcnJvcixmb3JtYXR9O1xuaWYoZm9ybWF0PT09J2NvbXBhY3RPcmRlcmVkJyl7XG5jb25zdCBsaWJlcmFsRGVjb2RlPW1ha2VJbm5lckRlY29kZShcbmRlY29kZUNvbXBhY3RTdHJpbmdTdWZmaXgsXG5kZWNvZGVDb21wYWN0QXJyYXksXG5saWJlcmFsRGVjb2RlcnMpO1xuXG4vKlxuXG5cblxuICAgICAqL1xuY29uc3QgdmVyaWZ5RW5jb2Rpbmc9KGVuY29kaW5nLGxhYmVsKT0+e1xuIWVuY29kaW5nLm1hdGNoKHJDMCl8fFxuRmFpbCBgJHtiKFxubGFiZWwpXG4gfSBlbmNvZGluZyBtdXN0IG5vdCBjb250YWluIGEgQzAgY29udHJvbCBjaGFyYWN0ZXI6ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IGRlY29kZWQ9ZGVjb2RlQ29tcGFjdEFycmF5KCBgXnYgJHtlbmNvZGluZ30gdiBgLGxpYmVyYWxEZWNvZGUpO1xuaXNBcnJheShkZWNvZGVkKSYmXG5kZWNvZGVkLmxlbmd0aD09PTMmJlxuZGVjb2RlZFswXT09PW51bGwmJlxuZGVjb2RlZFsyXT09PW51bGx8fFxuRmFpbCBgJHtiKGxhYmVsKX0gZW5jb2RpbmcgbXVzdCBiZSBlbWJlZGRhYmxlOiAke2VuY29kaW5nfWA7XG4gfTtcbmNvbnN0IGVuY29kZUNvbXBhY3Q9bWFrZUlubmVyRW5jb2RlKFxuZW5jb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmVuY29kZUNvbXBhY3RBcnJheSxcbnsuLi5lbmNvZGVPcHRpb25zLHZlcmlmeUVuY29kaW5nfSk7XG5cbmVuY29kZVBhc3NhYmxlPShwYXNzYWJsZSk9PiBgfiR7ZW5jb2RlQ29tcGFjdChwYXNzYWJsZSl9YDtcbiB9ZWxzZSBpZihmb3JtYXQ9PT0nbGVnYWN5T3JkZXJlZCcpe1xuZW5jb2RlUGFzc2FibGU9bWFrZUlubmVyRW5jb2RlKFxuZW5jb2RlTGVnYWN5U3RyaW5nU3VmZml4LFxuZW5jb2RlTGVnYWN5QXJyYXksXG5lbmNvZGVPcHRpb25zKTtcblxuIH1lbHNle1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIGZvcm1hdDogJHtxKGZvcm1hdCl9YDtcbiB9XG5cbmNvbnN0IGRlY29kZU9wdGlvbnM9e2RlY29kZVJlbW90YWJsZSxkZWNvZGVQcm9taXNlLGRlY29kZUVycm9yfTtcbmNvbnN0IGRlY29kZUNvbXBhY3Q9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmRlY29kZUNvbXBhY3RBcnJheSxcbmRlY29kZU9wdGlvbnMpO1xuXG5jb25zdCBkZWNvZGVMZWdhY3k9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlTGVnYWN5U3RyaW5nU3VmZml4LFxuZGVjb2RlTGVnYWN5QXJyYXksXG5kZWNvZGVPcHRpb25zKTtcblxuY29uc3QgZGVjb2RlUGFzc2FibGU9KGVuY29kZWQpPT57XG4vL1xuLy9cbi8vXG5pZihlbmNvZGVkLmNoYXJBdCgwKT09PSd+Jyl7XG5yZXR1cm4gZGVjb2RlQ29tcGFjdChlbmNvZGVkLDEpO1xuIH1cbnJldHVybiBkZWNvZGVMZWdhY3koZW5jb2RlZCk7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7ZW5jb2RlUGFzc2FibGUsZGVjb2RlUGFzc2FibGV9KTtcbiB9OyRozY9fb25jZS5tYWtlUGFzc2FibGVLaXQobWFrZVBhc3NhYmxlS2l0KTtcbmhhcmRlbihtYWtlUGFzc2FibGVLaXQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbmNvZGVQYXNzYWJsZT0oZW5jb2RlT3B0aW9ucyk9PntcbmNvbnN0e2VuY29kZVBhc3NhYmxlfT1tYWtlUGFzc2FibGVLaXQoZW5jb2RlT3B0aW9ucyk7XG5yZXR1cm4gZW5jb2RlUGFzc2FibGU7XG4gfTskaM2PX29uY2UubWFrZUVuY29kZVBhc3NhYmxlKG1ha2VFbmNvZGVQYXNzYWJsZSk7XG5oYXJkZW4obWFrZUVuY29kZVBhc3NhYmxlKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRGVjb2RlUGFzc2FibGU9KGRlY29kZU9wdGlvbnMpPT57XG5jb25zdHtkZWNvZGVQYXNzYWJsZX09bWFrZVBhc3NhYmxlS2l0KGRlY29kZU9wdGlvbnMpO1xucmV0dXJuIGRlY29kZVBhc3NhYmxlO1xuIH07JGjNj19vbmNlLm1ha2VEZWNvZGVQYXNzYWJsZShtYWtlRGVjb2RlUGFzc2FibGUpO1xuaGFyZGVuKG1ha2VEZWNvZGVQYXNzYWJsZSk7XG5cbmNvbnN0ICAgICAgICBpc0VuY29kZWRSZW1vdGFibGU9KGVuY29kZWQpPT5lbmNvZGVkLmNoYXJBdCgwKT09PSdyJzskaM2PX29uY2UuaXNFbmNvZGVkUmVtb3RhYmxlKGlzRW5jb2RlZFJlbW90YWJsZSk7XG5oYXJkZW4oaXNFbmNvZGVkUmVtb3RhYmxlKTtcblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhc3NTdHlsZVByZWZpeGVzPXtcbmVycm9yOichJyxcbmNvcHlSZWNvcmQ6JygnLFxudGFnZ2VkOic6JyxcbnByb21pc2U6Jz8nLFxuY29weUFycmF5OidbXicsXG5ib29sZWFuOidiJyxcbm51bWJlcjonZicsXG5iaWdpbnQ6J25wJyxcbnJlbW90YWJsZToncicsXG5zdHJpbmc6J3MnLFxubnVsbDondicsXG5zeW1ib2w6J3knLFxuLy9cbi8vXG4vL1xudW5kZWZpbmVkOid6J307JGjNj19vbmNlLnBhc3NTdHlsZVByZWZpeGVzKHBhc3NTdHlsZVByZWZpeGVzKTtcblxuT2JqZWN0LnNldFByb3RvdHlwZU9mKHBhc3NTdHlsZVByZWZpeGVzLG51bGwpO1xuaGFyZGVuKHBhc3NTdHlsZVByZWZpeGVzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InJlY29yZE5hbWVzIjpbInJlY29yZE5hbWVzIl0sInJlY29yZFZhbHVlcyI6WyJyZWNvcmRWYWx1ZXMiXSwiemVyb1BhZCI6WyJ6ZXJvUGFkIl0sIm1ha2VQYXNzYWJsZUtpdCI6WyJtYWtlUGFzc2FibGVLaXQiXSwibWFrZUVuY29kZVBhc3NhYmxlIjpbIm1ha2VFbmNvZGVQYXNzYWJsZSJdLCJtYWtlRGVjb2RlUGFzc2FibGUiOlsibWFrZURlY29kZVBhc3NhYmxlIl0sImlzRW5jb2RlZFJlbW90YWJsZSI6WyJpc0VuY29kZWRSZW1vdGFibGUiXSwicGFzc1N0eWxlUHJlZml4ZXMiOlsicGFzc1N0eWxlUHJlZml4ZXMiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA2bp8M4EiAACBIgAAKwAAAEBlbmRvL21hcnNoYWwtdjEuNi4zL3NyYy9lbmNvZGVUb0NhcERhdGEuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIlFDTEFTUyIsIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSIsIm1ha2VFbmNvZGVUb0NhcERhdGEiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGlzT2JqZWN0LGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxcbmRlZmluZVByb3BlcnRpZXMsXG5pcyxcbmVudHJpZXMsXG5mcm9tRW50cmllcyxcbmZyZWV6ZX09XG5PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBRQ0xBU1M9J0BxY2xhc3MnOyRozY9fb25jZS5RQ0xBU1MoUUNMQVNTKTtcblxuXG4vKlxuXG5cbiAqL1xuY29uc3QgaGFzUUNsYXNzPShlbmNvZGVkKT0+aGFzT3duUHJvcGVydHlPZihlbmNvZGVkLFFDTEFTUyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IHFjbGFzc01hdGNoZXM9KGVuY29kZWQscWNsYXNzKT0+XG5pc09iamVjdChlbmNvZGVkKSYmXG4haXNBcnJheShlbmNvZGVkKSYmXG5oYXNRQ2xhc3MoZW5jb2RlZCkmJlxuZW5jb2RlZFtRQ0xBU1NdPT09cWNsYXNzO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YT0ocmVtKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cmVtfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9tKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Byb219YDtcblxuY29uc3QgZG9udEVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIpPT5GYWlsIGBlcnJvciBvYmplY3QgdW5leHBlY3RlZDogJHtlcnJ9YDtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW5jb2RlVG9DYXBEYXRhPShlbmNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9ZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YSxcbmVuY29kZVByb21pc2VUb0NhcERhdGE9ZG9udEVuY29kZVByb21pc2VUb0NhcERhdGEsXG5lbmNvZGVFcnJvclRvQ2FwRGF0YT1kb250RW5jb2RlRXJyb3JUb0NhcERhdGF9PVxuZW5jb2RlT3B0aW9ucztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGVuY29kZVRvQ2FwRGF0YVJlY3VyPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ3N0cmluZyc6e1xuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJue1tRQ0xBU1NdOid1bmRlZmluZWQnfTtcbiB9XG5jYXNlJ251bWJlcic6e1xuLy9cbmlmKE51bWJlci5pc05hTihwYXNzYWJsZSkpe1xucmV0dXJue1tRQ0xBU1NdOidOYU4nfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PUluZmluaXR5KXtcbnJldHVybntbUUNMQVNTXTonSW5maW5pdHknfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PS1JbmZpbml0eSl7XG5yZXR1cm57W1FDTEFTU106Jy1JbmZpbml0eSd9O1xuIH1cbi8vXG5yZXR1cm4gaXMocGFzc2FibGUsLTApPzA6cGFzc2FibGU7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybntcbltRQ0xBU1NdOidiaWdpbnQnLFxuZGlnaXRzOlN0cmluZyhwYXNzYWJsZSl9O1xuXG4gfVxuY2FzZSdzeW1ib2wnOntcbmFzc2VydFBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmNvbnN0IG5hbWU9LyogICAgICAgICAgICAgICAgICovbmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbnJldHVybntcbltRQ0xBU1NdOidzeW1ib2wnLFxubmFtZX07XG5cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmlmKGhhc093blByb3BlcnR5T2YocGFzc2FibGUsUUNMQVNTKSl7XG4vL1xuY29uc3R7W1FDTEFTU106cWNsYXNzVmFsdWUsLi4ucmVzdH09cGFzc2FibGU7XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PXtcbltRQ0xBU1NdOidoaWxiZXJ0Jyxcbm9yaWdpbmFsOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHFjbGFzc1ZhbHVlKX07XG5cbmlmKG93bktleXMocmVzdCkubGVuZ3RoPj0xKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJlc3VsdC5yZXN0PWVuY29kZVRvQ2FwRGF0YVJlY3VyKGZyZWV6ZShyZXN0KSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCBuYW1lcz1vd25LZXlzKHBhc3NhYmxlKS5zb3J0KCk7XG5yZXR1cm4gZnJvbUVudHJpZXMoXG5uYW1lcy5tYXAoKG5hbWUpPT5bbmFtZSxlbmNvZGVUb0NhcERhdGFSZWN1cihwYXNzYWJsZVtuYW1lXSldKSk7XG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xucmV0dXJuIHBhc3NhYmxlLm1hcChlbmNvZGVUb0NhcERhdGFSZWN1cik7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybntcbltRQ0xBU1NdOid0YWdnZWQnLFxudGFnOmdldFRhZyhwYXNzYWJsZSksXG5wYXlsb2FkOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlLnBheWxvYWQpfTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YShcbnBhc3NhYmxlLFxuZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuXG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ3Nsb3QnKSl7XG5yZXR1cm4gZW5jb2RlZDtcbiB9XG4vL1xudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFJlbW90YWJsZSBlbmNvZGluZyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoICR7cShcblFDTEFTUylcbiB9ICR7cSgnc2xvdCcpfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVByb21pc2VUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuaWYocWNsYXNzTWF0Y2hlcyhlbmNvZGVkLCdzbG90Jykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFByb21pc2UgZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCAke3EoXG5RQ0xBU1MsXG4nc2xvdCcpXG4gfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZW5jb2RlZD1lbmNvZGVFcnJvclRvQ2FwRGF0YShwYXNzYWJsZSxlbmNvZGVUb0NhcERhdGFSZWN1cik7XG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ2Vycm9yJykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggJHtxKFxuUUNMQVNTLFxuJ2Vycm9yJylcbiB9OiAke2VuY29kZWR9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IFVucmVjb2duaXplZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfTtcbmNvbnN0IGVuY29kZVRvQ2FwRGF0YT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oZW5jb2RlRXJyb3JUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpKTtcbiB9XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlKSk7XG4gfTtcbnJldHVybiBoYXJkZW4oZW5jb2RlVG9DYXBEYXRhKTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlVG9DYXBEYXRhKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuaGFyZGVuKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShzbG90RW5jb2RpbmcpPT5cbkZhaWwgYHJlbW90YWJsZSBvciBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7c2xvdEVuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0oZXJyb3JFbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlcnJvckVuY29kaW5nfWA7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZUZyb21DYXBEYXRhPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT1kb250RGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE9ZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhLFxuZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT1kb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YX09XG5kZWNvZGVPcHRpb25zO1xuXG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT09PWRlY29kZVByb21pc2VGcm9tQ2FwRGF0YXx8XG5GYWlsIGBBbiBpbXBsZW1lbnRhdGlvbiByZXN0cmljdGlvbiBmb3Igbm93OiBJZiBlaXRoZXIgZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEgb3IgZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhIGlzIHByb3ZpZGVkLCBib3RoIG11c3QgYmUgcHJvdmlkZWQgYW5kIHRoZXkgbXVzdCBiZSB0aGUgc2FtZTogJHtxKFxuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEpXG4gfSB2cyAke3EoZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhKX1gO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGVGcm9tQ2FwRGF0YT0oanNvbkVuY29kZWQpPT57XG5pZighaXNPYmplY3QoanNvbkVuY29kZWQpKXtcbi8vXG5yZXR1cm4ganNvbkVuY29kZWQ7XG4gfVxuaWYoaXNBcnJheShqc29uRW5jb2RlZCkpe1xucmV0dXJuIGpzb25FbmNvZGVkLm1hcCgoZW5jb2RlZFZhbCk9PmRlY29kZUZyb21DYXBEYXRhKGVuY29kZWRWYWwpKTtcbiB9ZWxzZSBpZihoYXNRQ2xhc3MoanNvbkVuY29kZWQpKXtcbmNvbnN0IHFjbGFzcz1qc29uRW5jb2RlZFtRQ0xBU1NdO1xudHlwZW9mIHFjbGFzcz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgJHtxKFFDTEFTUyl9IHR5cGVvZiAke3EodHlwZW9mIHFjbGFzcyl9YDtcbnN3aXRjaChxY2xhc3Mpe1xuLy9cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnTmFOJzp7XG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnSW5maW5pdHknOntcbnJldHVybiBJbmZpbml0eTtcbiB9XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PWpzb25FbmNvZGVkO1xudHlwZW9mIGRpZ2l0cz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZGlnaXRzIHR5cGVvZiAke3EodHlwZW9mIGRpZ2l0cyl9YDtcbnJldHVybiBCaWdJbnQoZGlnaXRzKTtcbiB9XG5jYXNlJ0BAYXN5bmNJdGVyYXRvcic6e1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvcjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09anNvbkVuY29kZWQ7XG5yZXR1cm4gcGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09anNvbkVuY29kZWQ7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcsZGVjb2RlRnJvbUNhcERhdGEocGF5bG9hZCkpO1xuIH1cbmNhc2Unc2xvdCc6e1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlZD1kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YShcbmpzb25FbmNvZGVkLFxuZGVjb2RlRnJvbUNhcERhdGEpO1xuXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGRlY29kZWQ7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZGVjb2RlZD1kZWNvZGVFcnJvckZyb21DYXBEYXRhKFxuanNvbkVuY29kZWQsXG5kZWNvZGVGcm9tQ2FwRGF0YSk7XG5cbmlmKHBhc3NTdHlsZU9mKGRlY29kZWQpPT09J2Vycm9yJyl7XG5yZXR1cm4gZGVjb2RlZDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YSBvcHRpb24gbXVzdCByZXR1cm4gYW4gZXJyb3I6ICR7ZGVjb2RlZH1gO1xuIH1cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09anNvbkVuY29kZWQ7XG5oYXNPd25Qcm9wZXJ0eU9mKGpzb25FbmNvZGVkLCdvcmlnaW5hbCcpfHxcbkZhaWwgYEludmFsaWQgSGlsYmVydCBIb3RlbCBlbmNvZGluZyAke2pzb25FbmNvZGVkfWA7XG4vL1xuY29uc3QgcmVzdWx0PXtbUUNMQVNTXTpkZWNvZGVGcm9tQ2FwRGF0YShvcmlnaW5hbCl9O1xuaWYoaGFzT3duUHJvcGVydHlPZihqc29uRW5jb2RlZCwncmVzdCcpKXtcbmNvbnN0IGlzTm9uRW1wdHlPYmplY3Q9XG50eXBlb2YgcmVzdD09PSdvYmplY3QnJiZcbnJlc3QhPT1udWxsJiZcbm93bktleXMocmVzdCkubGVuZ3RoPj0xO1xuaWYoIWlzTm9uRW1wdHlPYmplY3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyBtdXN0IGJlIGEgbm9uLWVtcHR5IG9iamVjdDogJHtyZXN0fWA7XG4gfVxuY29uc3QgcmVzdE9iaj1kZWNvZGVGcm9tQ2FwRGF0YShyZXN0KTtcbi8vXG4vL1xuLy9cbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RPYmosUUNMQVNTKXx8XG5GYWlsIGBSZXN0IG11c3Qgbm90IGNvbnRhaW4gaXRzIG93biBkZWZpbml0aW9uIG9mICR7cShRQ0xBU1MpfWA7XG5kZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHJlc3RPYmopKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG5jYXNlJ2liaWQnOntcbnRocm93IEZhaWwgYFRoZSBjYXBEYXRhIHByb3RvY29sIG5vIGxvbmdlciBzdXBwb3J0cyAke3EoUUNMQVNTKX0gJHtxKFxucWNsYXNzKVxuIH1gO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1lbHNle1xuYXNzZXJ0KHR5cGVvZiBqc29uRW5jb2RlZD09PSdvYmplY3QnJiZqc29uRW5jb2RlZCE9PW51bGwpO1xuY29uc3QgZGVjb2RlRW50cnk9KFtuYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSAke3EobmFtZSl9IG9mICR7anNvbkVuY29kZWR9IG11c3QgYmUgYSBzdHJpbmdgO1xucmV0dXJuW25hbWUsZGVjb2RlRnJvbUNhcERhdGEoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGpzb25FbmNvZGVkKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG4gfTtcbnJldHVybiBoYXJkZW4oZGVjb2RlRnJvbUNhcERhdGEpO1xuIH07JGjNj19vbmNlLm1ha2VEZWNvZGVGcm9tQ2FwRGF0YShtYWtlRGVjb2RlRnJvbUNhcERhdGEpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUUNMQVNTIjpbIlFDTEFTUyJdLCJtYWtlRW5jb2RlVG9DYXBEYXRhIjpbIm1ha2VFbmNvZGVUb0NhcERhdGEiXSwibWFrZURlY29kZUZyb21DYXBEYXRhIjpbIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD7iZ7NXSIAAF0iAAAtAAAAQGVuZG8vbWFyc2hhbC12MS42LjMvc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyIsIm1ha2VFbmNvZGVUb1NtYWxsY2FwcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhc3NTdHlsZU9mLGlzRXJyb3JMaWtlLG1ha2VUYWdnZWQsZ2V0VGFnLGhhc093blByb3BlcnR5T2YsYXNzZXJ0UGFzc2FibGVTeW1ib2wsbmFtZUZvclBhc3NhYmxlU3ltYm9sLHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxYLEZhaWwscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJuYW1lRm9yUGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAobmFtZUZvclBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dLFtcInBhc3NhYmxlU3ltYm9sRm9yTmFtZVwiLCBbJGjNj19hID0+IChwYXNzYWJsZVN5bWJvbEZvck5hbWUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e2lzLGVudHJpZXMsZnJvbUVudHJpZXN9PU9iamVjdDtcblxuY29uc3QgQkFORz0nIScuY2hhckNvZGVBdCgwKTtcbmNvbnN0IERBU0g9Jy0nLmNoYXJDb2RlQXQoMCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHN0YXJ0c1NwZWNpYWw9KGVuY29kZWRTdHIpPT57XG5pZihlbmNvZGVkU3RyPT09Jycpe1xucmV0dXJuIGZhbHNlO1xuIH1cbi8vXG5jb25zdCBjb2RlPWVuY29kZWRTdHIuY2hhckNvZGVBdCgwKTtcbi8vXG5yZXR1cm4gQkFORzw9Y29kZSYmY29kZTw9REFTSDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udEVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPShyZW0pPT5cbkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke3JlbX1gO1xuXG5jb25zdCBkb250RW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPShwcm9tKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Byb219YDtcblxuY29uc3QgZG9udEVuY29kZUVycm9yVG9TbWFsbGNhcHM9KGVycik9PlxuRmFpbCBgZXJyb3Igb2JqZWN0IHVuZXhwZWN0ZWQ6ICR7cShlcnIpfWA7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVuY29kZVRvU21hbGxjYXBzPShlbmNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGVUb1NtYWxsY2Fwcz1kb250RW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHMsXG5lbmNvZGVQcm9taXNlVG9TbWFsbGNhcHM9ZG9udEVuY29kZVByb21pc2VUb1NtYWxsY2FwcyxcbmVuY29kZUVycm9yVG9TbWFsbGNhcHM9ZG9udEVuY29kZUVycm9yVG9TbWFsbGNhcHN9PVxuZW5jb2RlT3B0aW9ucztcblxuY29uc3QgYXNzZXJ0RW5jb2RlZEVycm9yPShlbmNvZGluZyk9PntcbnR5cGVvZiBlbmNvZGluZz09PSdvYmplY3QnJiZoYXNPd25Qcm9wZXJ0eU9mKGVuY29kaW5nLCcjZXJyb3InKXx8XG5GYWlsIGBpbnRlcm5hbDogRXJyb3IgZW5jb2RpbmcgbXVzdCBoYXZlIFwiI2Vycm9yXCIgcHJvcGVydHk6ICR7cShcbmVuY29kaW5nKVxuIH1gO1xuLy9cbmNvbnN0IG1lc3NhZ2U9ZW5jb2RpbmdbJyNlcnJvciddO1xudHlwZW9mIG1lc3NhZ2U9PT0nc3RyaW5nJyYmKFxuIXN0YXJ0c1NwZWNpYWwobWVzc2FnZSl8fG1lc3NhZ2UuY2hhckF0KDApPT09JyEnKXx8XG5GYWlsIGBpbnRlcm5hbDogRXJyb3IgZW5jb2RpbmcgbXVzdCBoYXZlIHN0cmluZyBtZXNzYWdlOiAke3EobWVzc2FnZSl9YDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHNSZWN1cj0ocGFzc2FibGUpPT57XG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihwYXNzYWJsZSk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOntcbi8vXG5yZXR1cm4gcGFzc2FibGU7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmlmKHN0YXJ0c1NwZWNpYWwocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGAhJHtwYXNzYWJsZX1gO1xuIH1cbi8vXG5yZXR1cm4gcGFzc2FibGU7XG4gfVxuY2FzZSd1bmRlZmluZWQnOntcbnJldHVybicjdW5kZWZpbmVkJztcbiB9XG5jYXNlJ251bWJlcic6e1xuLy9cbmlmKE51bWJlci5pc05hTihwYXNzYWJsZSkpe1xucmV0dXJuJyNOYU4nO1xuIH1lbHNlIGlmKHBhc3NhYmxlPT09SW5maW5pdHkpe1xucmV0dXJuJyNJbmZpbml0eSc7XG4gfWVsc2UgaWYocGFzc2FibGU9PT0tSW5maW5pdHkpe1xucmV0dXJuJyMtSW5maW5pdHknO1xuIH1cbi8vXG5yZXR1cm4gaXMocGFzc2FibGUsLTApPzA6cGFzc2FibGU7XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0IHN0cj1TdHJpbmcocGFzc2FibGUpO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgKi9wYXNzYWJsZTwwbj9zdHI6YCske3N0cn1gKTtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuYXNzZXJ0UGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xuY29uc3QgbmFtZT0vKiAgICAgICAgICAgICAgICAgKi9uYW1lRm9yUGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xucmV0dXJuIGAlJHtuYW1lfWA7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbi8vXG5jb25zdCBuYW1lcz1vd25LZXlzKHBhc3NhYmxlKS5zb3J0KCk7XG5yZXR1cm4gZnJvbUVudHJpZXMoXG5uYW1lcy5tYXAoKG5hbWUpPT5bXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKG5hbWUpLFxuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihwYXNzYWJsZVtuYW1lXSldKSk7XG5cblxuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5yZXR1cm4gcGFzc2FibGUubWFwKGVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5yZXR1cm57XG4nI3RhZyc6ZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihnZXRUYWcocGFzc2FibGUpKSxcbnBheWxvYWQ6ZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihwYXNzYWJsZS5wYXlsb2FkKX07XG5cbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xuY29uc3QgcmVzdWx0PWVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzKFxucGFzc2FibGUsXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcblxuaWYodHlwZW9mIHJlc3VsdD09PSdzdHJpbmcnJiZyZXN1bHQuY2hhckF0KDApPT09JyQnKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuLy9cbnRocm93IEZhaWwgYGludGVybmFsOiBSZW1vdGFibGUgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiJFwiOiAke3Jlc3VsdH1gO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xuY29uc3QgcmVzdWx0PWVuY29kZVByb21pc2VUb1NtYWxsY2FwcyhcbnBhc3NhYmxlLFxuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG5cbmlmKHR5cGVvZiByZXN1bHQ9PT0nc3RyaW5nJyYmcmVzdWx0LmNoYXJBdCgwKT09PScmJyl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbnRocm93IEZhaWwgYGludGVybmFsOiBQcm9taXNlIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcIiZcIjogJHtyZXN1bHR9YDtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdCByZXN1bHQ9ZW5jb2RlRXJyb3JUb1NtYWxsY2FwcyhwYXNzYWJsZSxlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcbmFzc2VydEVuY29kZWRFcnJvcihyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IFVucmVjb2duaXplZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfTtcbmNvbnN0IGVuY29kZVRvU21hbGxjYXBzPShwYXNzYWJsZSk9PntcbmlmKGlzRXJyb3JMaWtlKHBhc3NhYmxlKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgcmVzdWx0PWhhcmRlbihcbmVuY29kZUVycm9yVG9TbWFsbGNhcHMocGFzc2FibGUsZW5jb2RlVG9TbWFsbGNhcHNSZWN1cikpO1xuXG5hc3NlcnRFbmNvZGVkRXJyb3IocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfVxucmV0dXJuIGhhcmRlbihlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKHBhc3NhYmxlKSk7XG4gfTtcbnJldHVybiBoYXJkZW4oZW5jb2RlVG9TbWFsbGNhcHMpO1xuIH07JGjNj19vbmNlLm1ha2VFbmNvZGVUb1NtYWxsY2FwcyhtYWtlRW5jb2RlVG9TbWFsbGNhcHMpO1xuaGFyZGVuKG1ha2VFbmNvZGVUb1NtYWxsY2Fwcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBkb250RGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT5cbkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+XG5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IGRvbnREZWNvZGVFcnJvckZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+XG5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke3EoZW5jb2RpbmcpfWA7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZUZyb21TbWFsbGNhcHM9KGRlY29kZU9wdGlvbnM9e30pPT57XG5jb25zdHtcbmRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9ZG9udERlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVQcm9taXNlRnJvbVNtYWxsY2Fwcz1kb250RGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVFcnJvckZyb21TbWFsbGNhcHM9ZG9udERlY29kZUVycm9yRnJvbVNtYWxsY2Fwc309XG5kZWNvZGVPcHRpb25zO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGVGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PntcbnN3aXRjaCh0eXBlb2YgZW5jb2Rpbmcpe1xuY2FzZSdib29sZWFuJzpcbmNhc2UnbnVtYmVyJzp7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmlmKCFzdGFydHNTcGVjaWFsKGVuY29kaW5nKSl7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfVxuY29uc3QgYz1lbmNvZGluZy5jaGFyQXQoMCk7XG5zd2l0Y2goYyl7XG5jYXNlJyEnOntcbi8vXG5yZXR1cm4gZW5jb2Rpbmcuc2xpY2UoMSk7XG4gfVxuY2FzZSclJzp7XG5yZXR1cm4gcGFzc2FibGVTeW1ib2xGb3JOYW1lKGVuY29kaW5nLnNsaWNlKDEpKTtcbiB9XG5jYXNlJyMnOntcbnN3aXRjaChlbmNvZGluZyl7XG5jYXNlJyN1bmRlZmluZWQnOntcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuY2FzZScjTmFOJzp7XG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnI0luZmluaXR5Jzp7XG5yZXR1cm4gSW5maW5pdHk7XG4gfVxuY2FzZScjLUluZmluaXR5Jzp7XG5yZXR1cm4tSW5maW5pdHk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYHVua25vd24gY29uc3RhbnQgXCIke3EoZW5jb2RpbmcpfVwiYCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfVxuY2FzZScrJzpcbmNhc2UnLSc6e1xucmV0dXJuIEJpZ0ludChlbmNvZGluZyk7XG4gfVxuY2FzZSckJzp7XG5jb25zdCByZXN1bHQ9ZGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2FwcyhcbmVuY29kaW5nLFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG5cbi8vXG5pZihwYXNzU3R5bGVPZihyZXN1bHQpIT09J3JlbW90YWJsZScpe1xuRmFpbCBgaW50ZXJuYWw6IGRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMgb3B0aW9uIG11c3QgcmV0dXJuIGEgcmVtb3RhYmxlOiAke3Jlc3VsdH1gO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfVxuY2FzZScmJzp7XG5jb25zdCByZXN1bHQ9ZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG5pZihwYXNzU3R5bGVPZihyZXN1bHQpIT09J3Byb21pc2UnKXtcbkZhaWwgYGludGVybmFsOiBkZWNvZGVQcm9taXNlRnJvbVNtYWxsY2FwcyBvcHRpb24gbXVzdCByZXR1cm4gYSBwcm9taXNlOiAke3Jlc3VsdH1gO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBTcGVjaWFsIGNoYXIgJHtxKFxuYylcbiB9IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlOiAke2VuY29kaW5nfWA7XG4gfX1cblxuIH1cbmNhc2Unb2JqZWN0Jzp7XG5pZihlbmNvZGluZz09PW51bGwpe1xucmV0dXJuIGVuY29kaW5nO1xuIH1cblxuaWYoaXNBcnJheShlbmNvZGluZykpe1xucmV0dXJuIGVuY29kaW5nLm1hcCgodmFsKT0+ZGVjb2RlRnJvbVNtYWxsY2Fwcyh2YWwpKTtcbiB9XG5cbmlmKGhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyN0YWcnKSl7XG5jb25zdHsnI3RhZyc6dGFnLHBheWxvYWQsLi4ucmVzdH09ZW5jb2Rpbmc7XG50eXBlb2YgdGFnPT09J3N0cmluZyd8fFxuRmFpbCBgVmFsdWUgb2YgXCIjdGFnXCIsIHRoZSB0YWcsIG11c3QgYmUgYSBzdHJpbmc6ICR7ZW5jb2Rpbmd9YDtcbm93bktleXMocmVzdCkubGVuZ3RoPT09MHx8XG5GYWlsIGAjdGFnIHJlY29yZCB1bmV4cGVjdGVkIHByb3BlcnRpZXM6ICR7cShvd25LZXlzKHJlc3QpKX1gO1xucmV0dXJuIG1ha2VUYWdnZWQoXG5kZWNvZGVGcm9tU21hbGxjYXBzKHRhZyksXG5kZWNvZGVGcm9tU21hbGxjYXBzKHBheWxvYWQpKTtcblxuIH1cblxuaWYoaGFzT3duUHJvcGVydHlPZihlbmNvZGluZywnI2Vycm9yJykpe1xuY29uc3QgcmVzdWx0PWRlY29kZUVycm9yRnJvbVNtYWxsY2FwcyhcbmVuY29kaW5nLFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG5cbnBhc3NTdHlsZU9mKHJlc3VsdCk9PT0nZXJyb3InfHxcbkZhaWwgYGludGVybmFsOiBkZWNvZGVFcnJvckZyb21TbWFsbGNhcHMgb3B0aW9uIG11c3QgcmV0dXJuIGFuIGVycm9yOiAke3Jlc3VsdH1gO1xucmV0dXJuIHJlc3VsdDtcbiB9XG5cbmNvbnN0IGRlY29kZUVudHJ5PShbZW5jb2RlZE5hbWUsZW5jb2RlZFZhbF0pPT57XG50eXBlb2YgZW5jb2RlZE5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSBuYW1lICR7cShcbmVuY29kZWROYW1lKVxuIH0gb2YgJHtlbmNvZGluZ30gbXVzdCBiZSBhIHN0cmluZ2A7XG5lbmNvZGVkTmFtZS5jaGFyQXQoMCkhPT0nIyd8fFxuRmFpbCBgVW5yZWNvZ25pemVkIHJlY29yZCB0eXBlICR7cShlbmNvZGVkTmFtZSl9OiAke2VuY29kaW5nfWA7XG5jb25zdCBuYW1lPWRlY29kZUZyb21TbWFsbGNhcHMoZW5jb2RlZE5hbWUpO1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBEZWNvZGVkIHByb3BlcnR5IG5hbWUgJHtuYW1lfSBmcm9tICR7ZW5jb2Rpbmd9IG11c3QgYmUgYSBzdHJpbmdgO1xucmV0dXJuW25hbWUsZGVjb2RlRnJvbVNtYWxsY2FwcyhlbmNvZGVkVmFsKV07XG4gfTtcbmNvbnN0IGRlY29kZWRFbnRyaWVzPWVudHJpZXMoZW5jb2RpbmcpLm1hcChkZWNvZGVFbnRyeSk7XG5yZXR1cm4gZnJvbUVudHJpZXMoZGVjb2RlZEVudHJpZXMpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGBpbnRlcm5hbDogdW5yZWNvZ25pemVkIEpTT04gdHlwZW9mICR7cShcbnR5cGVvZiBlbmNvZGluZylcbiB9OiAke2VuY29kaW5nfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH07XG5yZXR1cm4gaGFyZGVuKGRlY29kZUZyb21TbWFsbGNhcHMpO1xuIH07JGjNj19vbmNlLm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzKG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VFbmNvZGVUb1NtYWxsY2FwcyI6WyJtYWtlRW5jb2RlVG9TbWFsbGNhcHMiXSwibWFrZURlY29kZUZyb21TbWFsbGNhcHMiOlsibWFrZURlY29kZUZyb21TbWFsbGNhcHMiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAMsUIJT8jAAA/IwAAKgAAAEBlbmRvL21hcnNoYWwtdjEuNi4zL3NyYy9tYXJzaGFsLWp1c3Rpbi5qc3siaW1wb3J0cyI6WyJAZW5kby9uYXQiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIiwiLi9lbmNvZGVUb0NhcERhdGEuanMiXSwiZXhwb3J0cyI6WyJkZWNvZGVUb0p1c3RpbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE5hdCxnZXRFcnJvckNvbnN0cnVjdG9yLGlzT2JqZWN0LHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxxLFgsRmFpbCxRQ0xBU1M7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjNj19hID0+IChOYXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRFcnJvckNvbnN0cnVjdG9yXCIsIFskaM2PX2EgPT4gKGdldEVycm9yQ29uc3RydWN0b3IgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2VuY29kZVRvQ2FwRGF0YS5qc1wiLCBbW1wiUUNMQVNTXCIsIFskaM2PX2EgPT4gKFFDTEFTUyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7c3RyaW5naWZ5OnF1b3RlfT1KU09OO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VZZXNJbmRlbnRlcj0oKT0+e1xuY29uc3Qgc3RyaW5ncz1bXTtcbmxldCBsZXZlbD0wO1xubGV0IG5lZWRTcGFjZT1mYWxzZTtcbmNvbnN0IGxpbmU9KCk9Pntcbm5lZWRTcGFjZT1mYWxzZTtcbnJldHVybiBzdHJpbmdzLnB1c2goJ1xcbicsJyAgJy5yZXBlYXQobGV2ZWwpKTtcbiB9O1xucmV0dXJuIGhhcmRlbih7XG5vcGVuOihvcGVuQnJhY2tldCk9PntcbmxldmVsKz0xO1xuaWYobmVlZFNwYWNlKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbm5lZWRTcGFjZT1mYWxzZTtcbnJldHVybiBzdHJpbmdzLnB1c2gob3BlbkJyYWNrZXQpO1xuIH0sXG5saW5lLFxubmV4dDoodG9rZW4pPT57XG5pZihuZWVkU3BhY2UmJnRva2VuIT09JywnKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbm5lZWRTcGFjZT10cnVlO1xucmV0dXJuIHN0cmluZ3MucHVzaCh0b2tlbik7XG4gfSxcbmNsb3NlOihjbG9zZUJyYWNrZXQpPT57XG5hc3NlcnQobGV2ZWw+PTEpO1xubGV2ZWwtPTE7XG5saW5lKCk7XG5yZXR1cm4gc3RyaW5ncy5wdXNoKGNsb3NlQnJhY2tldCk7XG4gfSxcbmRvbmU6KCk9PntcbmFzc2VydC5lcXVhbChsZXZlbCwwKTtcbnJldHVybiBzdHJpbmdzLmpvaW4oJycpO1xuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBiYWRQYWlyUGF0dGVybj0vXig/Olxcd1xcd3w8PHw+PnxcXCtcXCt8LS18PCF8LT4pJC87XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VOb0luZGVudGVyPSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RyaW5ncz1bXTtcbnJldHVybiBoYXJkZW4oe1xub3Blbjoob3BlbkJyYWNrZXQpPT5zdHJpbmdzLnB1c2gob3BlbkJyYWNrZXQpLFxubGluZTooKT0+c3RyaW5ncy5sZW5ndGgsXG5uZXh0Oih0b2tlbik9PntcbmlmKHN0cmluZ3MubGVuZ3RoPj0xKXtcbmNvbnN0IGxhc3Q9c3RyaW5nc1tzdHJpbmdzLmxlbmd0aC0xXTtcbi8vXG5pZihsYXN0Lmxlbmd0aD49MSYmdG9rZW4ubGVuZ3RoPj0xKXtcbmNvbnN0IHBhaXI9IGAke2xhc3RbbGFzdC5sZW5ndGgtMV19JHt0b2tlblswXX1gO1xuaWYoYmFkUGFpclBhdHRlcm4udGVzdChwYWlyKSl7XG5zdHJpbmdzLnB1c2goJyAnKTtcbiB9XG4gfVxuIH1cbnJldHVybiBzdHJpbmdzLnB1c2godG9rZW4pO1xuIH0sXG5jbG9zZTooY2xvc2VCcmFja2V0KT0+e1xuaWYoc3RyaW5ncy5sZW5ndGg+PTEmJnN0cmluZ3Nbc3RyaW5ncy5sZW5ndGgtMV09PT0nLCcpe1xuc3RyaW5ncy5wb3AoKTtcbiB9XG5yZXR1cm4gc3RyaW5ncy5wdXNoKGNsb3NlQnJhY2tldCk7XG4gfSxcbmRvbmU6KCk9PnN0cmluZ3Muam9pbignJyl9KTtcblxuIH07XG5cbmNvbnN0IGlkZW50UGF0dGVybj0vXlthLXpBLVpdXFx3KiQvO1xuaGFyZGVuKGlkZW50UGF0dGVybik7XG5jb25zdCBBdEF0UHJlZml4UGF0dGVybj0vXkBAKC4qKSQvO1xuaGFyZGVuKEF0QXRQcmVmaXhQYXR0ZXJuKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWNvZGVUb0p1c3Rpbj0oZW5jb2Rpbmcsc2hvdWxkSW5kZW50PWZhbHNlLHNsb3RzPVtdKT0+e1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmU9KHJhd1RyZWUpPT57XG5pZighaXNPYmplY3QocmF3VHJlZSkpe1xucmV0dXJuO1xuIH1cbi8vXG5hc3NlcnQudHlwZW9mKHJhd1RyZWUsJ29iamVjdCcpO1xuYXNzZXJ0KHJhd1RyZWUhPT1udWxsKTtcbmlmKFFDTEFTUyBpbiByYXdUcmVlKXtcbmNvbnN0IHFjbGFzcz1yYXdUcmVlW1FDTEFTU107XG50eXBlb2YgcWNsYXNzPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBxY2xhc3MgdHlwZW9mICR7cSh0eXBlb2YgcWNsYXNzKX1gO1xuYXNzZXJ0KCFpc0FycmF5KHJhd1RyZWUpKTtcbnN3aXRjaChyYXdUcmVlWydAcWNsYXNzJ10pe1xuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdOYU4nOlxuY2FzZSdJbmZpbml0eSc6XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PXJhd1RyZWU7XG50eXBlb2YgZGlnaXRzPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBkaWdpdHMgdHlwZW9mICR7cSh0eXBlb2YgZGlnaXRzKX1gO1xucmV0dXJuO1xuIH1cbmNhc2UnQEBhc3luY0l0ZXJhdG9yJzp7XG5yZXR1cm47XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuY29uc3Qgc3ltPXBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbmFzc2VydC50eXBlb2Yoc3ltLCdzeW1ib2wnKTtcbnJldHVybjtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3R7dGFnLHBheWxvYWR9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKHRhZywnc3RyaW5nJyk7XG5wcmVwYXJlKHBheWxvYWQpO1xucmV0dXJuO1xuIH1cbmNhc2Unc2xvdCc6e1xuY29uc3R7aW5kZXgsaWZhY2V9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcbk5hdChpbmRleCk7XG5pZihpZmFjZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnQudHlwZW9mKGlmYWNlLCdzdHJpbmcnKTtcbiB9XG5yZXR1cm47XG4gfVxuY2FzZSdoaWxiZXJ0Jzp7XG5jb25zdHtvcmlnaW5hbCxyZXN0fT1yYXdUcmVlO1xuJ29yaWdpbmFsJ2luIHJhd1RyZWV8fFxuRmFpbCBgSW52YWxpZCBIaWxiZXJ0IEhvdGVsIGVuY29kaW5nICR7cmF3VHJlZX1gO1xucHJlcGFyZShvcmlnaW5hbCk7XG5pZigncmVzdCdpbiByYXdUcmVlKXtcbmlmKHR5cGVvZiByZXN0IT09J29iamVjdCcpe1xudGhyb3cgRmFpbCBgUmVzdCAke3Jlc3R9IGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0YDtcbiB9XG5pZihyZXN0PT09bnVsbCl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBub3QgYmUgbnVsbGA7XG4gfVxuaWYoaXNBcnJheShyZXN0KSl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBub3QgYmUgYW4gYXJyYXlgO1xuIH1cbmlmKFFDTEFTUyBpbiByZXN0KXtcbnRocm93IEZhaWwgYFJlc3QgZW5jb2RpbmcgJHtyZXN0fSBtdXN0IG5vdCBjb250YWluICR7cShRQ0xBU1MpfWA7XG4gfVxuY29uc3QgbmFtZXM9b3duS2V5cyhyZXN0KTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgbmFtZSAke25hbWV9IG9mICR7cmF3VHJlZX0gbXVzdCBiZSBhIHN0cmluZ2A7XG5wcmVwYXJlKHJlc3RbbmFtZV0pO1xuIH1cbiB9XG5yZXR1cm47XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3R7bmFtZSxtZXNzYWdlfT1yYXdUcmVlO1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGVycm9yIG5hbWUgdHlwZW9mICR7cSh0eXBlb2YgbmFtZSl9YDtcbiB9XG5nZXRFcnJvckNvbnN0cnVjdG9yKG5hbWUpIT09dW5kZWZpbmVkfHxcbkZhaWwgYE11c3QgYmUgdGhlIG5hbWUgb2YgYW4gRXJyb3IgY29uc3RydWN0b3IgJHtuYW1lfWA7XG50eXBlb2YgbWVzc2FnZT09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZXJyb3IgbWVzc2FnZSB0eXBlb2YgJHtxKHR5cGVvZiBtZXNzYWdlKX1gO1xucmV0dXJuO1xuIH1cblxuZGVmYXVsdDp7XG5hc3NlcnQuZmFpbChYIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfWVsc2UgaWYoaXNBcnJheShyYXdUcmVlKSl7XG5jb25zdHtsZW5ndGh9PXJhd1RyZWU7XG5mb3IobGV0IGk9MDtpPGxlbmd0aDtpKz0xKXtcbnByZXBhcmUocmF3VHJlZVtpXSk7XG4gfVxuIH1lbHNle1xuY29uc3QgbmFtZXM9b3duS2V5cyhyYXdUcmVlKTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbmlmKHR5cGVvZiBuYW1lIT09J3N0cmluZycpe1xudGhyb3cgRmFpbCBgUHJvcGVydHkgbmFtZSAke25hbWV9IG9mICR7cmF3VHJlZX0gbXVzdCBiZSBhIHN0cmluZ2A7XG4gfVxucHJlcGFyZShyYXdUcmVlW25hbWVdKTtcbiB9XG4gfVxuIH07XG5cbmNvbnN0IG1ha2VJbmRlbnRlcj1zaG91bGRJbmRlbnQ/bWFrZVllc0luZGVudGVyOm1ha2VOb0luZGVudGVyO1xubGV0IG91dD1tYWtlSW5kZW50ZXIoKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGU9KHJhd1RyZWUpPT57XG4vL1xucmV0dXJuIHJlY3VyKHJhd1RyZWUpO1xuIH07XG5cbmNvbnN0IGRlY29kZVByb3BlcnR5PShuYW1lLHZhbHVlKT0+e1xub3V0LmxpbmUoKTtcbmlmKG5hbWU9PT0nX19wcm90b19fJyl7XG4vL1xuLy9cbi8vXG4vL1xub3V0Lm5leHQoIGBbXCJfX3Byb3RvX19cIl06YCk7XG4gfWVsc2UgaWYoaWRlbnRQYXR0ZXJuLnRlc3QobmFtZSkpe1xub3V0Lm5leHQoIGAke25hbWV9OmApO1xuIH1lbHNle1xub3V0Lm5leHQoIGAke3F1b3RlKG5hbWUpfTpgKTtcbiB9XG5kZWNvZGUodmFsdWUpO1xub3V0Lm5leHQoJywnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgcmVjdXI9KHJhd1RyZWUpPT57XG5pZighaXNPYmplY3QocmF3VHJlZSkpe1xuLy9cbnJldHVybiBvdXQubmV4dChxdW90ZShyYXdUcmVlKSk7XG4gfVxuLy9cbmFzc2VydC50eXBlb2YocmF3VHJlZSwnb2JqZWN0Jyk7XG5hc3NlcnQocmF3VHJlZSE9PW51bGwpO1xuaWYoUUNMQVNTIGluIHJhd1RyZWUpe1xuY29uc3QgcWNsYXNzPXJhd1RyZWVbUUNMQVNTXTtcbmFzc2VydC50eXBlb2YocWNsYXNzLCdzdHJpbmcnKTtcbmFzc2VydCghaXNBcnJheShyYXdUcmVlKSk7XG4vL1xuLy9cbi8vXG5zd2l0Y2gocmF3VHJlZVsnQHFjbGFzcyddKXtcbi8vXG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ05hTic6XG5jYXNlJ0luZmluaXR5JzpcbmNhc2UnLUluZmluaXR5Jzp7XG4vL1xucmV0dXJuIG91dC5uZXh0KHFjbGFzcyk7XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0e2RpZ2l0c309cmF3VHJlZTtcbmFzc2VydC50eXBlb2YoZGlnaXRzLCdzdHJpbmcnKTtcbnJldHVybiBvdXQubmV4dCggYCR7QmlnSW50KGRpZ2l0cyl9bmApO1xuIH1cbmNhc2UnQEBhc3luY0l0ZXJhdG9yJzp7XG4vL1xucmV0dXJuIG91dC5uZXh0KCdTeW1ib2wuYXN5bmNJdGVyYXRvcicpO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5jb25zdHtuYW1lfT1yYXdUcmVlO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbmNvbnN0IHN5bT1wYXNzYWJsZVN5bWJvbEZvck5hbWUobmFtZSk7XG5hc3NlcnQudHlwZW9mKHN5bSwnc3ltYm9sJyk7XG5jb25zdCByZWdpc3RlcmVkTmFtZT1TeW1ib2wua2V5Rm9yKHN5bSk7XG5pZihyZWdpc3RlcmVkTmFtZT09PXVuZGVmaW5lZCl7XG5jb25zdCBtYXRjaD1BdEF0UHJlZml4UGF0dGVybi5leGVjKG5hbWUpO1xuYXNzZXJ0KG1hdGNoIT09bnVsbCk7XG5jb25zdCBzdWZmaXg9bWF0Y2hbMV07XG5hc3NlcnQoU3ltYm9sW3N1ZmZpeF09PT1zeW0pO1xuYXNzZXJ0KGlkZW50UGF0dGVybi50ZXN0KHN1ZmZpeCkpO1xucmV0dXJuIG91dC5uZXh0KCBgU3ltYm9sLiR7c3VmZml4fWApO1xuIH1cbnJldHVybiBvdXQubmV4dCggYFN5bWJvbC5mb3IoJHtxdW90ZShyZWdpc3RlcmVkTmFtZSl9KWApO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09cmF3VHJlZTtcbm91dC5uZXh0KCBgbWFrZVRhZ2dlZCgke3F1b3RlKHRhZyl9LGApO1xuZGVjb2RlKHBheWxvYWQpO1xucmV0dXJuIG91dC5uZXh0KCcpJyk7XG4gfVxuXG5jYXNlJ3Nsb3QnOntcbmxldHtpZmFjZX09cmF3VHJlZTtcbmNvbnN0IGluZGV4PU51bWJlcihOYXQocmF3VHJlZS5pbmRleCkpO1xuY29uc3QgbmVzdGVkUmVuZGVyPShhcmcpPT57XG5jb25zdCBvbGRPdXQ9b3V0O1xudHJ5e1xub3V0PW1ha2VOb0luZGVudGVyKCk7XG5kZWNvZGUoYXJnKTtcbnJldHVybiBvdXQuZG9uZSgpO1xuIH1maW5hbGx5e1xub3V0PW9sZE91dDtcbiB9XG4gfTtcbmlmKGluZGV4PHNsb3RzLmxlbmd0aCl7XG5jb25zdCBzbG90PW5lc3RlZFJlbmRlcihzbG90c1tpbmRleF0pO1xuaWYoaWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdFRvVmFsKCR7c2xvdH0pYCk7XG4gfVxuaWZhY2U9bmVzdGVkUmVuZGVyKGlmYWNlKTtcbnJldHVybiBvdXQubmV4dCggYHNsb3RUb1ZhbCgke3Nsb3R9LCR7aWZhY2V9KWApO1xuIH1lbHNlIGlmKGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBvdXQubmV4dCggYHNsb3QoJHtpbmRleH0pYCk7XG4gfVxuaWZhY2U9bmVzdGVkUmVuZGVyKGlmYWNlKTtcbnJldHVybiBvdXQubmV4dCggYHNsb3QoJHtpbmRleH0sJHtpZmFjZX0pYCk7XG4gfVxuXG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PXJhd1RyZWU7XG5vdXQub3BlbigneycpO1xuZGVjb2RlUHJvcGVydHkoUUNMQVNTLG9yaWdpbmFsKTtcbmlmKCdyZXN0J2luIHJhd1RyZWUpe1xuYXNzZXJ0LnR5cGVvZihyZXN0LCdvYmplY3QnKTtcbmFzc2VydChyZXN0IT09bnVsbCk7XG5jb25zdCBuYW1lcz1vd25LZXlzKHJlc3QpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBQcm9wZXJ0eSBuYW1lICR7cShcbm5hbWUpXG4gfSBvZiAke3Jlc3R9IG11c3QgYmUgYSBzdHJpbmdgO1xuIH1cbmRlY29kZVByb3BlcnR5KG5hbWUscmVzdFtuYW1lXSk7XG4gfVxuIH1cbnJldHVybiBvdXQuY2xvc2UoJ30nKTtcbiB9XG5cbmNhc2UnZXJyb3InOntcbmNvbnN0e1xubmFtZSxcbm1lc3NhZ2UsXG5jYXVzZT11bmRlZmluZWQsXG5lcnJvcnM9dW5kZWZpbmVkfT1cbnJhd1RyZWU7XG5jYXVzZT09PXVuZGVmaW5lZHx8XG5GYWlsIGBlcnJvciBjYXVzZSBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbm5hbWUhPT0gYEFnZ3JlZ2F0ZUVycm9yYHx8XG5GYWlsIGBBZ2dyZWdhdGVFcnJvciBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbmVycm9ycz09PXVuZGVmaW5lZHx8XG5GYWlsIGBlcnJvciBlcnJvcnMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiBtYXJzaGFsLWp1c3RpbmA7XG5yZXR1cm4gb3V0Lm5leHQoIGAke25hbWV9KCR7cXVvdGUobWVzc2FnZSl9KWApO1xuIH1cblxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYHVucmVjb2duaXplZCAke3EoUUNMQVNTKX0gJHtxKHFjbGFzcyl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfWVsc2UgaWYoaXNBcnJheShyYXdUcmVlKSl7XG5jb25zdHtsZW5ndGh9PXJhd1RyZWU7XG5pZihsZW5ndGg9PT0wKXtcbnJldHVybiBvdXQubmV4dCgnW10nKTtcbiB9ZWxzZXtcbm91dC5vcGVuKCdbJyk7XG5mb3IobGV0IGk9MDtpPGxlbmd0aDtpKz0xKXtcbm91dC5saW5lKCk7XG5kZWNvZGUocmF3VHJlZVtpXSk7XG5vdXQubmV4dCgnLCcpO1xuIH1cbnJldHVybiBvdXQuY2xvc2UoJ10nKTtcbiB9XG4gfWVsc2V7XG4vL1xuLy9cbmNvbnN0IG5hbWVzPS8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhyYXdUcmVlKTtcbmlmKG5hbWVzLmxlbmd0aD09PTApe1xucmV0dXJuIG91dC5uZXh0KCd7fScpO1xuIH1lbHNle1xub3V0Lm9wZW4oJ3snKTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbmRlY29kZVByb3BlcnR5KG5hbWUscmF3VHJlZVtuYW1lXSk7XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnfScpO1xuIH1cbiB9XG4gfTtcbnByZXBhcmUoZW5jb2RpbmcpO1xuZGVjb2RlKGVuY29kaW5nKTtcbnJldHVybiBvdXQuZG9uZSgpO1xuIH07JGjNj19vbmNlLmRlY29kZVRvSnVzdGluKGRlY29kZVRvSnVzdGluKTtcbmhhcmRlbihkZWNvZGVUb0p1c3Rpbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWNvZGVUb0p1c3RpbiI6WyJkZWNvZGVUb0p1c3RpbiJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAATlrJl7QYAAO0GAAAtAAAAQGVuZG8vbWFyc2hhbC12MS42LjMvc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vbWFyc2hhbC5qcyJdLCJleHBvcnRzIjpbInBhcnNlIiwic3RyaW5naWZ5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtYWtlTWFyc2hhbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9tYXJzaGFsLmpzXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7ZnJlZXplfT1PYmplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZG9Ob3RDb252ZXJ0VmFsVG9TbG90PSh2YWwpPT5cbkZhaWwgYE1hcnNoYWwncyBzdHJpbmdpZnkgcmVqZWN0cyBwcmVzZW5jZXMgYW5kIHByb21pc2VzICR7dmFsfWA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZG9Ob3RDb252ZXJ0U2xvdFRvVmFsPShzbG90LF9pZmFjZSk9PlxuRmFpbCBgTWFyc2hhbCdzIHBhcnNlIG11c3Qgbm90IGVuY29kZSBhbnkgc2xvdHMgJHtzbG90fWA7XG5cbmNvbnN0IGJhZEFycmF5SGFuZGxlcj1oYXJkZW4oe1xuZ2V0OihfdGFyZ2V0LG5hbWUsX3JlY2VpdmVyKT0+e1xuaWYobmFtZT09PSdsZW5ndGgnKXtcbnJldHVybiAwO1xuIH1cbi8vXG50aHJvdyBGYWlsIGBNYXJzaGFsJ3MgcGFyc2UgbXVzdCBub3QgZW5jb2RlIGFueSBzbG90IHBvc2l0aW9ucyAke25hbWV9YDtcbiB9fSk7XG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBhcnJheVRhcmdldD1mcmVlemUoLyogICAgICAgICAgICAgICAgKi9bXSk7XG5jb25zdCBiYWRBcnJheT1uZXcgUHJveHkoYXJyYXlUYXJnZXQsYmFkQXJyYXlIYW5kbGVyKTtcblxuY29uc3R7c2VyaWFsaXplLHVuc2VyaWFsaXplfT1tYWtlTWFyc2hhbChcbmRvTm90Q29udmVydFZhbFRvU2xvdCxcbmRvTm90Q29udmVydFNsb3RUb1ZhbCxcbntcbmVycm9yVGFnZ2luZzonb2ZmJyxcbi8vXG5zZXJpYWxpemVCb2R5Rm9ybWF0OidjYXBkYXRhJ30pO1xuXG5cblxuLypcblxuXG4gKi9cbmNvbnN0IHN0cmluZ2lmeT0odmFsKT0+c2VyaWFsaXplKHZhbCkuYm9keTskaM2PX29uY2Uuc3RyaW5naWZ5KHN0cmluZ2lmeSk7XG5oYXJkZW4oc3RyaW5naWZ5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0IHBhcnNlPShzdHIpPT5cbnVuc2VyaWFsaXplKFxuLy9cbi8vXG4vL1xuZnJlZXplKHtcbmJvZHk6c3RyLFxuc2xvdHM6YmFkQXJyYXl9KSk7JGjNj19vbmNlLnBhcnNlKHBhcnNlKTtcblxuXG5oYXJkZW4ocGFyc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic3RyaW5naWZ5IjpbInN0cmluZ2lmeSJdLCJwYXJzZSI6WyJwYXJzZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACVgA3CWScAAFknAAAjAAAAQGVuZG8vbWFyc2hhbC12MS42LjMvc3JjL21hcnNoYWwuanN7ImltcG9ydHMiOlsiQGVuZG8vbmF0IiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiLi9lbmNvZGVUb0NhcERhdGEuanMiLCIuL2VuY29kZVRvU21hbGxjYXBzLmpzIl0sImV4cG9ydHMiOlsibWFrZU1hcnNoYWwiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBOYXQsYXNzZXJ0UGFzc2FibGUsZ2V0SW50ZXJmYWNlT2YsZ2V0RXJyb3JDb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eU9mLHRvUGFzc2FibGVFcnJvcixYLEZhaWwscSxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcixvYmplY3RNYXAsUUNMQVNTLG1ha2VFbmNvZGVUb0NhcERhdGEsbWFrZURlY29kZUZyb21DYXBEYXRhLG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzLG1ha2VFbmNvZGVUb1NtYWxsY2FwczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcImdldEludGVyZmFjZU9mXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZU9mID0gJGjNj19hKV1dLFtcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRozY9fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1widG9QYXNzYWJsZUVycm9yXCIsIFskaM2PX2EgPT4gKHRvUGFzc2FibGVFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlVG9DYXBEYXRhLmpzXCIsIFtbXCJRQ0xBU1NcIiwgWyRozY9fYSA9PiAoUUNMQVNTID0gJGjNj19hKV1dLFtcIm1ha2VFbmNvZGVUb0NhcERhdGFcIiwgWyRozY9fYSA9PiAobWFrZUVuY29kZVRvQ2FwRGF0YSA9ICRozY9fYSldXSxbXCJtYWtlRGVjb2RlRnJvbUNhcERhdGFcIiwgWyRozY9fYSA9PiAobWFrZURlY29kZUZyb21DYXBEYXRhID0gJGjNj19hKV1dXV0sW1wiLi9lbmNvZGVUb1NtYWxsY2Fwcy5qc1wiLCBbW1wibWFrZURlY29kZUZyb21TbWFsbGNhcHNcIiwgWyRozY9fYSA9PiAobWFrZURlY29kZUZyb21TbWFsbGNhcHMgPSAkaM2PX2EpXV0sW1wibWFrZUVuY29kZVRvU21hbGxjYXBzXCIsIFskaM2PX2EgPT4gKG1ha2VFbmNvZGVUb1NtYWxsY2FwcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG5jb25zdHtkZWZpbmVQcm9wZXJ0aWVzfT1PYmplY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdFZhbFRvU2xvdEZuPSh4KT0+eDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdFNsb3RUb1ZhbEZuPSh4LF8pPT54O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWFyc2hhbD0oXG5jb252ZXJ0VmFsVG9TbG90PWRlZmF1bHRWYWxUb1Nsb3RGbixcbmNvbnZlcnRTbG90VG9WYWw9ZGVmYXVsdFNsb3RUb1ZhbEZuLFxue1xuZXJyb3JUYWdnaW5nPSdvbicsXG5tYXJzaGFsTmFtZT0nYW5vbi1tYXJzaGFsJyxcbi8vXG4vL1xuZXJyb3JJZE51bT0xMDAwMCxcbi8vXG4vL1xubWFyc2hhbFNhdmVFcnJvcj0oZXJyKT0+XG5jb25zb2xlLmxvZygnVGVtcG9yYXJ5IGxvZ2dpbmcgb2Ygc2VudCBlcnJvcicsZXJyKSxcbi8vXG4vL1xuc2VyaWFsaXplQm9keUZvcm1hdD0nY2FwZGF0YSd9PVxue30pPT5cbntcbmFzc2VydC50eXBlb2YobWFyc2hhbE5hbWUsJ3N0cmluZycpO1xuZXJyb3JUYWdnaW5nPT09J29uJ3x8XG5lcnJvclRhZ2dpbmc9PT0nb2ZmJ3x8XG5GYWlsIGBUaGUgZXJyb3JUYWdnaW5nIG9wdGlvbiBjYW4gb25seSBiZSBcIm9uXCIgb3IgXCJvZmZcIiAke2Vycm9yVGFnZ2luZ31gO1xuY29uc3QgbmV4dEVycm9ySWQ9KCk9PntcbmVycm9ySWROdW0rPTE7XG5yZXR1cm4gYGVycm9yOiR7bWFyc2hhbE5hbWV9IyR7ZXJyb3JJZE51bX1gO1xuIH07XG5cbi8qXG5cbiAgICovXG5jb25zdCB0b0NhcERhdGE9KHJvb3QpPT57XG5jb25zdCBzbG90cz1bXTtcbi8vXG5jb25zdCBzbG90TWFwPW5ldyBNYXAoKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBlbmNvZGVTbG90Q29tbW9uPShwYXNzYWJsZSk9PntcbmxldCBpbmRleD1zbG90TWFwLmdldChwYXNzYWJsZSk7XG5pZihpbmRleCE9PXVuZGVmaW5lZCl7XG4vL1xuYXNzZXJ0LnR5cGVvZihpbmRleCwnbnVtYmVyJyk7XG5yZXR1cm4gaGFyZGVuKHtpbmRleCxyZXBlYXQ6dHJ1ZX0pO1xuIH1cblxuaW5kZXg9c2xvdHMubGVuZ3RoO1xuY29uc3Qgc2xvdD1jb252ZXJ0VmFsVG9TbG90KHBhc3NhYmxlKTtcbnNsb3RzLnB1c2goc2xvdCk7XG5zbG90TWFwLnNldChwYXNzYWJsZSxpbmRleCk7XG5yZXR1cm4gaGFyZGVuKHtpbmRleCxyZXBlYXQ6ZmFsc2V9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmNvbnN0IGVuY29kZUVycm9yQ29tbW9uPShlcnIsZW5jb2RlUmVjdXIpPT57XG5jb25zdCBtZXNzYWdlPWVuY29kZVJlY3VyKCBgJHtlcnIubWVzc2FnZX1gKTtcbmFzc2VydC50eXBlb2YobWVzc2FnZSwnc3RyaW5nJyk7XG5jb25zdCBuYW1lPWVuY29kZVJlY3VyKCBgJHtlcnIubmFtZX1gKTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG4vL1xuLy9cbi8vXG5pZihlcnJvclRhZ2dpbmc9PT0nb24nKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBlcnJvcklkPWVuY29kZVJlY3VyKG5leHRFcnJvcklkKCkpO1xuYXNzZXJ0LnR5cGVvZihlcnJvcklkLCdzdHJpbmcnKTtcbmFubm90YXRlRXJyb3IoZXJyLFggYFNlbnQgYXMgJHtlcnJvcklkfWApO1xubWFyc2hhbFNhdmVFcnJvcihlcnIpO1xucmV0dXJuIGhhcmRlbih7ZXJyb3JJZCxtZXNzYWdlLG5hbWV9KTtcbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe21lc3NhZ2UsbmFtZX0pO1xuIH1cbiB9O1xuXG5pZihzZXJpYWxpemVCb2R5Rm9ybWF0PT09J2NhcGRhdGEnKXtcbi8qXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RUb0NhcERhdGE9KHBhc3NhYmxlLGlmYWNlPXVuZGVmaW5lZCk9PntcbmNvbnN0e2luZGV4LHJlcGVhdH09ZW5jb2RlU2xvdENvbW1vbihwYXNzYWJsZSk7XG5cbmlmKHJlcGVhdD09PXRydWV8fGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBoYXJkZW4oe1tRQ0xBU1NdOidzbG90JyxpbmRleH0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J3Nsb3QnLGlmYWNlLGluZGV4fSk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhPSh2YWwsX2VuY29kZVJlY3VyKT0+XG5lbmNvZGVTbG90VG9DYXBEYXRhKHZhbCxnZXRJbnRlcmZhY2VPZih2YWwpKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YT0ocHJvbWlzZSxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb0NhcERhdGEocHJvbWlzZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAgICovXG5jb25zdCBlbmNvZGVFcnJvclRvQ2FwRGF0YT0oZXJyLGVuY29kZVJlY3VyKT0+e1xuY29uc3QgZXJyRGF0YT1lbmNvZGVFcnJvckNvbW1vbihlcnIsZW5jb2RlUmVjdXIpO1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J2Vycm9yJywuLi5lcnJEYXRhfSk7XG4gfTtcblxuY29uc3QgZW5jb2RlVG9DYXBEYXRhPW1ha2VFbmNvZGVUb0NhcERhdGEoe1xuZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhLFxuZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YSxcbmVuY29kZUVycm9yVG9DYXBEYXRhfSk7XG5cblxuY29uc3QgZW5jb2RlZD1lbmNvZGVUb0NhcERhdGEocm9vdCk7XG5jb25zdCBib2R5PUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xucmV0dXJuIGhhcmRlbih7XG5ib2R5LFxuc2xvdHN9KTtcblxuIH1lbHNlIGlmKHNlcmlhbGl6ZUJvZHlGb3JtYXQ9PT0nc21hbGxjYXBzJyl7XG4vKlxuXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RUb1NtYWxsY2Fwcz0ocHJlZml4LHBhc3NhYmxlLGlmYWNlPXVuZGVmaW5lZCk9PntcbmNvbnN0e2luZGV4LHJlcGVhdH09ZW5jb2RlU2xvdENvbW1vbihwYXNzYWJsZSk7XG5cbi8vXG5pZihyZXBlYXQ9PT10cnVlfHxpZmFjZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gYCR7cHJlZml4fSR7aW5kZXh9YDtcbiB9XG5yZXR1cm4gYCR7cHJlZml4fSR7aW5kZXh9LiR7aWZhY2V9YDtcbiB9O1xuXG5jb25zdCBlbmNvZGVSZW1vdGFibGVUb1NtYWxsY2Fwcz0ocmVtb3RhYmxlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvU21hbGxjYXBzKCckJyxyZW1vdGFibGUsZ2V0SW50ZXJmYWNlT2YocmVtb3RhYmxlKSk7XG5cbmNvbnN0IGVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz0ocHJvbWlzZSxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb1NtYWxsY2FwcygnJicscHJvbWlzZSk7XG5cbmNvbnN0IGVuY29kZUVycm9yVG9TbWFsbGNhcHM9KGVycixlbmNvZGVSZWN1cik9PntcbmNvbnN0IGVyckRhdGE9ZW5jb2RlRXJyb3JDb21tb24oZXJyLGVuY29kZVJlY3VyKTtcbmNvbnN0e21lc3NhZ2UsLi4ucmVzdH09ZXJyRGF0YTtcbnJldHVybiBoYXJkZW4oeycjZXJyb3InOm1lc3NhZ2UsLi4ucmVzdH0pO1xuIH07XG5cbmNvbnN0IGVuY29kZVRvU21hbGxjYXBzPW1ha2VFbmNvZGVUb1NtYWxsY2Fwcyh7XG5lbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyxcbmVuY29kZVByb21pc2VUb1NtYWxsY2FwcyxcbmVuY29kZUVycm9yVG9TbWFsbGNhcHN9KTtcblxuXG5jb25zdCBlbmNvZGVkPWVuY29kZVRvU21hbGxjYXBzKHJvb3QpO1xuY29uc3Qgc21hbGxjYXBzQm9keT1KU09OLnN0cmluZ2lmeShlbmNvZGVkKTtcbnJldHVybiBoYXJkZW4oe1xuLy9cbi8vXG5ib2R5OiBgIyR7c21hbGxjYXBzQm9keX1gLFxuc2xvdHN9KTtcblxuIH1lbHNle1xuLy9cbnRocm93IEZhaWwgYFVucmVjb2duaXplZCBzZXJpYWxpemVCb2R5Rm9ybWF0OiAke3Eoc2VyaWFsaXplQm9keUZvcm1hdCl9YDtcbiB9XG4gfTtcblxuY29uc3QgbWFrZUZ1bGxSZXZpdmU9KHNsb3RzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHZhbE1hcD1uZXcgTWFwKCk7XG5cbi8qXG5cblxuICAgICAqL1xuY29uc3QgZGVjb2RlU2xvdENvbW1vbj0oc2xvdERhdGEpPT57XG5jb25zdHtpZmFjZT11bmRlZmluZWQsaW5kZXgsLi4ucmVzdH09c2xvdERhdGE7XG5vd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuRmFpbCBgdW5leHBlY3RlZCBlbmNvZGVkIHNsb3QgcHJvcGVydGllcyAke3Eob3duS2V5cyhyZXN0KSl9YDtcbmNvbnN0IGV4dGFudD12YWxNYXAuZ2V0KGluZGV4KTtcbmlmKGV4dGFudCl7XG5yZXR1cm4gZXh0YW50O1xuIH1cbi8vXG4vL1xuY29uc3Qgc2xvdD1zbG90c1tOdW1iZXIoTmF0KGluZGV4KSldO1xuY29uc3QgdmFsPWNvbnZlcnRTbG90VG9WYWwoc2xvdCxpZmFjZSk7XG52YWxNYXAuc2V0KGluZGV4LHZhbCk7XG5yZXR1cm4gdmFsO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAgICovXG5jb25zdCBkZWNvZGVFcnJvckNvbW1vbj0oZXJyRGF0YSxkZWNvZGVSZWN1cik9PntcbmNvbnN0e1xuZXJyb3JJZD11bmRlZmluZWQsXG5tZXNzYWdlLFxubmFtZSxcbmNhdXNlPXVuZGVmaW5lZCxcbmVycm9ycz11bmRlZmluZWQsXG4uLi5yZXN0fT1cbmVyckRhdGE7XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZE5hbWU9ZGVjb2RlUmVjdXIobmFtZSk7XG5jb25zdCBkTWVzc2FnZT1kZWNvZGVSZWN1cihtZXNzYWdlKTtcbi8vXG5jb25zdCBkRXJyb3JJZD0vKiAgICAgICAgICAgICAgICAgKi9lcnJvcklkJiZkZWNvZGVSZWN1cihlcnJvcklkKTtcbmlmKHR5cGVvZiBkTmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbmFtZSB0eXBlb2YgJHtxKHR5cGVvZiBkTmFtZSl9YDtcbiB9XG5pZih0eXBlb2YgZE1lc3NhZ2UhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGVycm9yIG1lc3NhZ2UgdHlwZW9mICR7cSh0eXBlb2YgZE1lc3NhZ2UpfWA7XG4gfVxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvcihkTmFtZSl8fEVycm9yO1xuY29uc3QgZXJyb3JOYW1lPVxuZEVycm9ySWQ9PT11bmRlZmluZWQ/XG4gYFJlbW90ZSR7ZXJyQ29uc3RydWN0b3IubmFtZX1gOlxuIGBSZW1vdGUke2VyckNvbnN0cnVjdG9yLm5hbWV9KCR7ZEVycm9ySWR9KWA7XG5jb25zdCBvcHRpb25zPXtcbmVycm9yTmFtZSxcbnNhbml0aXplOmZhbHNlfTtcblxuaWYoY2F1c2Upe1xub3B0aW9ucy5jYXVzZT1kZWNvZGVSZWN1cihjYXVzZSk7XG4gfVxuaWYoZXJyb3JzKXtcbm9wdGlvbnMuZXJyb3JzPWRlY29kZVJlY3VyKGVycm9ycyk7XG4gfVxuY29uc3QgcmF3RXJyb3I9bWFrZUVycm9yKGRNZXNzYWdlLGVyckNvbnN0cnVjdG9yLG9wdGlvbnMpO1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGRlc2NzPW9iamVjdE1hcChyZXN0LChkYXRhKT0+KHtcbnZhbHVlOmRlY29kZVJlY3VyKGRhdGEpLFxud3JpdGFibGU6ZmFsc2UsXG5lbnVtZXJhYmxlOmZhbHNlLFxuY29uZmlndXJhYmxlOmZhbHNlfSkpO1xuXG5kZWZpbmVQcm9wZXJ0aWVzKHJhd0Vycm9yLGRlc2NzKTtcbmhhcmRlbihyYXdFcnJvcik7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKHJhd0Vycm9yKTtcbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGRlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShyYXdUcmVlLF9kZWNvZGVSZWN1cik9PntcbmNvbnN0e1tRQ0xBU1NdOl8sLi4uc2xvdERhdGF9PXJhd1RyZWU7XG5yZXR1cm4gZGVjb2RlU2xvdENvbW1vbihzbG90RGF0YSk7XG4gfTtcblxuY29uc3QgZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0ocmF3VHJlZSxkZWNvZGVSZWN1cik9PntcbmNvbnN0e1tRQ0xBU1NdOl8sLi4uZXJyRGF0YX09cmF3VHJlZTtcbnJldHVybiBkZWNvZGVFcnJvckNvbW1vbihlcnJEYXRhLGRlY29kZVJlY3VyKTtcbiB9O1xuXG5jb25zdCByZXZpdmVGcm9tQ2FwRGF0YT1tYWtlRGVjb2RlRnJvbUNhcERhdGEoe1xuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGE6ZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE6ZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVFcnJvckZyb21DYXBEYXRhfSk7XG5cblxuY29uc3QgbWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzPShwcmVmaXgpPT57XG4vKlxuXG5cblxuICAgICAgICovXG5yZXR1cm4oc3RyaW5nRW5jb2RpbmcsX2RlY29kZVJlY3VyKT0+e1xuYXNzZXJ0KHN0cmluZ0VuY29kaW5nLmNoYXJBdCgwKT09PXByZWZpeCk7XG4vL1xuY29uc3QgaT1zdHJpbmdFbmNvZGluZy5pbmRleE9mKCcuJyk7XG5jb25zdCBpbmRleD1OdW1iZXIoc3RyaW5nRW5jb2Rpbmcuc2xpY2UoMSxpPDA/dW5kZWZpbmVkOmkpKTtcbi8vXG5jb25zdCBpZmFjZT1pPDA/dW5kZWZpbmVkOnN0cmluZ0VuY29kaW5nLnNsaWNlKGkrMSk7XG5yZXR1cm4gZGVjb2RlU2xvdENvbW1vbih7aWZhY2UsaW5kZXh9KTtcbiB9O1xuIH07XG5jb25zdCBkZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPW1ha2VEZWNvZGVTbG90RnJvbVNtYWxsY2FwcygnJCcpO1xuY29uc3QgZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzKCcmJyk7XG5cbmNvbnN0IGRlY29kZUVycm9yRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcsZGVjb2RlUmVjdXIpPT57XG5jb25zdHsnI2Vycm9yJzptZXNzYWdlLC4uLnJlc3RFcnJEYXRhfT1lbmNvZGluZztcbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RFcnJEYXRhLCdtZXNzYWdlJyl8fFxuRmFpbCBgdW5leHBlY3RlZCBlbmNvZGVkIGVycm9yIHByb3BlcnR5ICR7cSgnbWVzc2FnZScpfWA7XG5yZXR1cm4gZGVjb2RlRXJyb3JDb21tb24oe21lc3NhZ2UsLi4ucmVzdEVyckRhdGF9LGRlY29kZVJlY3VyKTtcbiB9O1xuXG5jb25zdCByZXZpdmVGcm9tU21hbGxjYXBzPW1ha2VEZWNvZGVGcm9tU21hbGxjYXBzKHtcbi8vXG5kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzLFxuLy9cbmRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzLFxuZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzfSk7XG5cblxucmV0dXJuIGhhcmRlbih7cmV2aXZlRnJvbUNhcERhdGEscmV2aXZlRnJvbVNtYWxsY2Fwc30pO1xuIH07XG5cbi8qXG5cbiAgICovXG5jb25zdCBmcm9tQ2FwRGF0YT0oZGF0YSk9PntcbmNvbnN0e2JvZHksc2xvdHN9PWRhdGE7XG50eXBlb2YgYm9keT09PSdzdHJpbmcnfHxcbkZhaWwgYHVuc2VyaWFsaXplKCkgZ2l2ZW4gbm9uLWNhcGRhdGEgKC5ib2R5IGlzICR7Ym9keX0sIG5vdCBzdHJpbmcpYDtcbmlzQXJyYXkoZGF0YS5zbG90cyl8fFxuRmFpbCBgdW5zZXJpYWxpemUoKSBnaXZlbiBub24tY2FwZGF0YSAoLnNsb3RzIGFyZSBub3QgQXJyYXkpYDtcbmNvbnN0e3Jldml2ZUZyb21DYXBEYXRhLHJldml2ZUZyb21TbWFsbGNhcHN9PW1ha2VGdWxsUmV2aXZlKHNsb3RzKTtcbmxldCByZXN1bHQ7XG4vL1xuaWYoYm9keS5jaGFyQXQoMCk9PT0nIycpe1xuY29uc3Qgc21hbGxjYXBzQm9keT1ib2R5LnNsaWNlKDEpO1xuY29uc3QgZW5jb2Rpbmc9aGFyZGVuKEpTT04ucGFyc2Uoc21hbGxjYXBzQm9keSkpO1xucmVzdWx0PWhhcmRlbihyZXZpdmVGcm9tU21hbGxjYXBzKGVuY29kaW5nKSk7XG4gfWVsc2V7XG5jb25zdCByYXdUcmVlPWhhcmRlbihKU09OLnBhcnNlKGJvZHkpKTtcbnJlc3VsdD1oYXJkZW4ocmV2aXZlRnJvbUNhcERhdGEocmF3VHJlZSkpO1xuIH1cbi8vXG4vL1xuLy9cbmFzc2VydFBhc3NhYmxlKHJlc3VsdCk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICovcmVzdWx0KTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtcbnRvQ2FwRGF0YSxcbmZyb21DYXBEYXRhLFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnNlcmlhbGl6ZTp0b0NhcERhdGEsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG51bnNlcmlhbGl6ZTpmcm9tQ2FwRGF0YX0pO1xuXG4gfTskaM2PX29uY2UubWFrZU1hcnNoYWwobWFrZU1hcnNoYWwpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1hcnNoYWwiOlsibWFrZU1hcnNoYWwiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAyA8wyssnAADLJwAAJQAAAEBlbmRvL21hcnNoYWwtdjEuNi4zL3NyYy9yYW5rT3JkZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIi4vZW5jb2RlUGFzc2FibGUuanMiXSwiZXhwb3J0cyI6WyJGdWxsUmFua0NvdmVyIiwiYXNzZXJ0UmFua1NvcnRlZCIsImNvbXBhcmF0b3JNaXJyb3JJbWFnZSIsImNvbXBhcmVBbnRpUmFuayIsImNvbXBhcmVSYW5rIiwiY292ZXJlZEVudHJpZXMiLCJnZXRJbmRleENvdmVyIiwiZ2V0UGFzc1N0eWxlQ292ZXIiLCJpbnRlcnNlY3RSYW5rQ292ZXJzIiwiaXNSYW5rU29ydGVkIiwibWFrZUNvbXBhcmF0b3JLaXQiLCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCIsInNvcnRCeVJhbmsiLCJ0cml2aWFsQ29tcGFyYXRvciIsInVuaW9uUmFua0NvdmVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldFRhZyxwYXNzU3R5bGVPZixuYW1lRm9yUGFzc2FibGVTeW1ib2wsRmFpbCxxLHBhc3NTdHlsZVByZWZpeGVzLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlUGFzc2FibGUuanNcIiwgW1tcInBhc3NTdHlsZVByZWZpeGVzXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZVByZWZpeGVzID0gJGjNj19hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZE5hbWVzID0gJGjNj19hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjNj19hID0+IChyZWNvcmRWYWx1ZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzLHNldFByb3RvdHlwZU9mLGlzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNhbWVWYWx1ZVplcm89KHgseSk9Png9PT15fHxpcyh4LHkpO1xuXG5jb25zdCAgICAgICAgdHJpdmlhbENvbXBhcmF0b3I9KGxlZnQscmlnaHQpPT5cbi8vXG5sZWZ0PHJpZ2h0Py0xOmxlZnQ9PT1yaWdodD8wOjE7XG5cbi8qXG5cbiAqLyRozY9fb25jZS50cml2aWFsQ29tcGFyYXRvcih0cml2aWFsQ29tcGFyYXRvcik7XG5cbmNvbnN0IHBhc3NTdHlsZVJhbmtzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5mcm9tRW50cmllcyhcbmVudHJpZXMocGFzc1N0eWxlUHJlZml4ZXMpXG4vL1xuLnNvcnQoKFtfbGVmdFN0eWxlLGxlZnRQcmVmaXhlc10sW19yaWdodFN0eWxlLHJpZ2h0UHJlZml4ZXNdKT0+e1xucmV0dXJuIHRyaXZpYWxDb21wYXJhdG9yKGxlZnRQcmVmaXhlcyxyaWdodFByZWZpeGVzKTtcbiB9KS5cbm1hcCgoW3Bhc3NTdHlsZSxwcmVmaXhlc10saW5kZXgpPT57XG4vL1xuLy9cbi8vXG5wcmVmaXhlcz09PVsuLi5wcmVmaXhlc10uc29ydCgpLmpvaW4oJycpfHxcbkZhaWwgYHVuc29ydGVkIHByZWZpeGVzIGZvciBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9OiAke3EocHJlZml4ZXMpfWA7XG5jb25zdCBjb3Zlcj1bXG5wcmVmaXhlcy5jaGFyQXQoMCksXG5TdHJpbmcuZnJvbUNoYXJDb2RlKHByZWZpeGVzLmNoYXJDb2RlQXQocHJlZml4ZXMubGVuZ3RoLTEpKzEpXTtcblxucmV0dXJuW3Bhc3NTdHlsZSx7aW5kZXgsY292ZXJ9XTtcbiB9KSk7XG5cblxuc2V0UHJvdG90eXBlT2YocGFzc1N0eWxlUmFua3MsbnVsbCk7XG5oYXJkZW4ocGFzc1N0eWxlUmFua3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0UGFzc1N0eWxlQ292ZXI9KHBhc3NTdHlsZSk9PnBhc3NTdHlsZVJhbmtzW3Bhc3NTdHlsZV0uY292ZXI7JGjNj19vbmNlLmdldFBhc3NTdHlsZUNvdmVyKGdldFBhc3NTdHlsZUNvdmVyKTtcbmhhcmRlbihnZXRQYXNzU3R5bGVDb3Zlcik7XG5cbi8qXG5cbiAqL1xuY29uc3QgbWVtb09mU29ydGVkPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cbiAqL1xuY29uc3QgY29tcGFyYXRvck1pcnJvckltYWdlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29tcGFyYXRvcktpdD0oY29tcGFyZVJlbW90YWJsZXM9KF94LF95KT0+TmFOKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbXBhcmF0b3I9KGxlZnQscmlnaHQpPT57XG5pZihzYW1lVmFsdWVaZXJvKGxlZnQscmlnaHQpKXtcbnJldHVybiAwO1xuIH1cbmNvbnN0IGxlZnRTdHlsZT1wYXNzU3R5bGVPZihsZWZ0KTtcbmNvbnN0IHJpZ2h0U3R5bGU9cGFzc1N0eWxlT2YocmlnaHQpO1xuaWYobGVmdFN0eWxlIT09cmlnaHRTdHlsZSl7XG5yZXR1cm4gdHJpdmlhbENvbXBhcmF0b3IoXG5wYXNzU3R5bGVSYW5rc1tsZWZ0U3R5bGVdLmluZGV4LFxucGFzc1N0eWxlUmFua3NbcmlnaHRTdHlsZV0uaW5kZXgpO1xuXG4gfVxuLypcblxuICAgICAqL1xuc3dpdGNoKGxlZnRTdHlsZSl7XG5jYXNlJ3JlbW90YWJsZSc6e1xucmV0dXJuIGNvbXBhcmVSZW1vdGFibGVzKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xuLy9cbi8vXG5yZXR1cm4gMDtcbiB9XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOntcbi8vXG4vL1xuaWYobGVmdDxyaWdodCl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbmFzc2VydChsZWZ0PnJpZ2h0KTtcbnJldHVybiAxO1xuIH1cbiB9XG5jYXNlJ3N5bWJvbCc6e1xucmV0dXJuIGNvbXBhcmF0b3IoXG5uYW1lRm9yUGFzc2FibGVTeW1ib2wobGVmdCksXG5uYW1lRm9yUGFzc2FibGVTeW1ib2wocmlnaHQpKTtcblxuIH1cbmNhc2UnbnVtYmVyJzp7XG4vL1xuaWYoTnVtYmVyLmlzTmFOKGxlZnQpKXtcbmFzc2VydCghTnVtYmVyLmlzTmFOKHJpZ2h0KSk7XG5yZXR1cm4gMTtcbiB9ZWxzZSBpZihOdW1iZXIuaXNOYU4ocmlnaHQpKXtcbnJldHVybi0xO1xuIH1cbi8vXG4vL1xuaWYobGVmdDxyaWdodCl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbmFzc2VydChsZWZ0PnJpZ2h0KTtcbnJldHVybiAxO1xuIH1cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGxlZnROYW1lcz1yZWNvcmROYW1lcyhsZWZ0KTtcbmNvbnN0IHJpZ2h0TmFtZXM9cmVjb3JkTmFtZXMocmlnaHQpO1xuXG5jb25zdCByZXN1bHQ9Y29tcGFyYXRvcihsZWZ0TmFtZXMscmlnaHROYW1lcyk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuY29uc3QgbGVmdFZhbHVlcz1yZWNvcmRWYWx1ZXMobGVmdCxsZWZ0TmFtZXMpO1xuY29uc3QgcmlnaHRWYWx1ZXM9cmVjb3JkVmFsdWVzKHJpZ2h0LHJpZ2h0TmFtZXMpO1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdFZhbHVlcyxyaWdodFZhbHVlcyk7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG5jb25zdCBsZW49TWF0aC5taW4obGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xuY29uc3QgcmVzdWx0PWNvbXBhcmF0b3IobGVmdFtpXSxyaWdodFtpXSk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbi8vXG4vL1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuLy9cbmNvbnN0IGxhYmVsQ29tcD1jb21wYXJhdG9yKGdldFRhZyhsZWZ0KSxnZXRUYWcocmlnaHQpKTtcbmlmKGxhYmVsQ29tcCE9PTApe1xucmV0dXJuIGxhYmVsQ29tcDtcbiB9XG5yZXR1cm4gY29tcGFyYXRvcihsZWZ0LnBheWxvYWQscmlnaHQucGF5bG9hZCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgcGFzc1N0eWxlOiAke3EobGVmdFN0eWxlKX1gO1xuIH19XG5cbi8qICAgICAgICAgICAgICAgKi9cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgb3V0ZXJDb21wYXJhdG9yPSh4LHkpPT5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NvbXBhcmF0b3IoeCx5KXx8MDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFudGlDb21wYXJhdG9yPSh4LHkpPT5vdXRlckNvbXBhcmF0b3IoeSx4KTtcblxubWVtb09mU29ydGVkLnNldChvdXRlckNvbXBhcmF0b3IsbmV3IFdlYWtTZXQoKSk7XG5tZW1vT2ZTb3J0ZWQuc2V0KGFudGlDb21wYXJhdG9yLG5ldyBXZWFrU2V0KCkpO1xuY29tcGFyYXRvck1pcnJvckltYWdlcy5zZXQob3V0ZXJDb21wYXJhdG9yLGFudGlDb21wYXJhdG9yKTtcbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuc2V0KGFudGlDb21wYXJhdG9yLG91dGVyQ29tcGFyYXRvcik7XG5cbnJldHVybiBoYXJkZW4oe2NvbXBhcmF0b3I6b3V0ZXJDb21wYXJhdG9yLGFudGlDb21wYXJhdG9yfSk7XG4gfTtcbi8qXG5cblxuICovJGjNj19vbmNlLm1ha2VDb21wYXJhdG9yS2l0KG1ha2VDb21wYXJhdG9yS2l0KTtcbmNvbnN0ICAgICAgICBjb21wYXJhdG9yTWlycm9ySW1hZ2U9KGNvbXBhcmF0b3IpPT5cbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuZ2V0KGNvbXBhcmF0b3IpO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmNvbXBhcmF0b3JNaXJyb3JJbWFnZShjb21wYXJhdG9yTWlycm9ySW1hZ2UpO1xuY29uc3QgICAgICAgIGlzUmFua1NvcnRlZD0ocGFzc2FibGVzLGNvbXBhcmUpPT57XG5jb25zdCBzdWJNZW1vT2ZTb3J0ZWQ9bWVtb09mU29ydGVkLmdldChjb21wYXJlKTtcbmFzc2VydChzdWJNZW1vT2ZTb3J0ZWQhPT11bmRlZmluZWQpO1xuaWYoc3ViTWVtb09mU29ydGVkLmhhcyhwYXNzYWJsZXMpKXtcbnJldHVybiB0cnVlO1xuIH1cbmFzc2VydChwYXNzU3R5bGVPZihwYXNzYWJsZXMpPT09J2NvcHlBcnJheScpO1xuZm9yKGxldCBpPTE7aTxwYXNzYWJsZXMubGVuZ3RoO2krPTEpe1xuaWYoY29tcGFyZShwYXNzYWJsZXNbaS0xXSxwYXNzYWJsZXNbaV0pPj0xKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxuc3ViTWVtb09mU29ydGVkLmFkZChwYXNzYWJsZXMpO1xucmV0dXJuIHRydWU7XG4gfTskaM2PX29uY2UuaXNSYW5rU29ydGVkKGlzUmFua1NvcnRlZCk7XG5oYXJkZW4oaXNSYW5rU29ydGVkKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRSYW5rU29ydGVkPShzb3J0ZWQsY29tcGFyZSk9PlxuaXNSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKXx8XG4vL1xuLy9cbkZhaWwgYE11c3QgYmUgcmFuayBzb3J0ZWQ6ICR7c29ydGVkfSB2cyAke3NvcnRCeVJhbmsoc29ydGVkLGNvbXBhcmUpfWA7JGjNj19vbmNlLmFzc2VydFJhbmtTb3J0ZWQoYXNzZXJ0UmFua1NvcnRlZCk7XG5oYXJkZW4oYXNzZXJ0UmFua1NvcnRlZCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNvcnRCeVJhbms9KHBhc3NhYmxlcyxjb21wYXJlKT0+e1xuaWYoQXJyYXkuaXNBcnJheShwYXNzYWJsZXMpKXtcbmhhcmRlbihwYXNzYWJsZXMpO1xuLy9cbi8vXG4vL1xuaWYoaXNSYW5rU29ydGVkKHBhc3NhYmxlcyxjb21wYXJlKSl7XG5yZXR1cm4gcGFzc2FibGVzO1xuIH1cbiB9XG5jb25zdCB1bnNvcnRlZD1bLi4ucGFzc2FibGVzXTtcbnVuc29ydGVkLmZvckVhY2goaGFyZGVuKTtcbmNvbnN0IHNvcnRlZD11bnNvcnRlZC5zb3J0KGNvbXBhcmUpO1xuLy9cbi8vXG4vL1xuaWYoY29tcGFyZSh0cnVlLHVuZGVmaW5lZCk+MCl7XG5sZXQgaT1zb3J0ZWQubGVuZ3RoLTE7XG53aGlsZShpPj0wJiZzb3J0ZWRbaV09PT11bmRlZmluZWQpaS09MTtcbmNvbnN0IG49c29ydGVkLmxlbmd0aC1pLTE7XG5pZihuPjAmJm48c29ydGVkLmxlbmd0aCl7XG5zb3J0ZWQuY29weVdpdGhpbihuLDApO1xuc29ydGVkLmZpbGwoLyogICAgICAgICAgICAqL3VuZGVmaW5lZCwwLG4pO1xuIH1cbiB9XG5oYXJkZW4oc29ydGVkKTtcbmNvbnN0IHN1Yk1lbW9PZlNvcnRlZD1tZW1vT2ZTb3J0ZWQuZ2V0KGNvbXBhcmUpO1xuYXNzZXJ0KHN1Yk1lbW9PZlNvcnRlZCE9PXVuZGVmaW5lZCk7XG5zdWJNZW1vT2ZTb3J0ZWQuYWRkKHNvcnRlZCk7XG5yZXR1cm4gc29ydGVkO1xuIH07JGjNj19vbmNlLnNvcnRCeVJhbmsoc29ydEJ5UmFuayk7XG5oYXJkZW4oc29ydEJ5UmFuayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCByYW5rU2VhcmNoPShzb3J0ZWQsY29tcGFyZSxrZXksYmlhcz0nbGVmdE1vc3QnKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChzb3J0ZWQsY29tcGFyZSk7XG5sZXQgbGVmdD0wO1xubGV0IHJpZ2h0PXNvcnRlZC5sZW5ndGg7XG53aGlsZShsZWZ0PHJpZ2h0KXtcbmNvbnN0IG09TWF0aC5mbG9vcigobGVmdCtyaWdodCkvMik7XG5jb25zdCBjb21wPWNvbXBhcmUoc29ydGVkW21dLGtleSk7XG5pZihjb21wPD0tMXx8Y29tcD09PTAmJmJpYXM9PT0ncmlnaHRNb3N0Jyl7XG5sZWZ0PW0rMTtcbiB9ZWxzZXtcbmFzc2VydChjb21wPj0xfHxjb21wPT09MCYmYmlhcz09PSdsZWZ0TW9zdCcpO1xucmlnaHQ9bTtcbiB9XG4gfVxucmV0dXJuIGJpYXM9PT0nbGVmdE1vc3QnP2xlZnQ6cmlnaHQtMTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbmRleENvdmVyPShzb3J0ZWQsY29tcGFyZSxbbGVmdEtleSxyaWdodEtleV0pPT57XG5hc3NlcnRSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKTtcbmNvbnN0IGxlZnRJbmRleD1yYW5rU2VhcmNoKHNvcnRlZCxjb21wYXJlLGxlZnRLZXksJ2xlZnRNb3N0Jyk7XG5jb25zdCByaWdodEluZGV4PXJhbmtTZWFyY2goc29ydGVkLGNvbXBhcmUscmlnaHRLZXksJ3JpZ2h0TW9zdCcpO1xucmV0dXJuW2xlZnRJbmRleCxyaWdodEluZGV4XTtcbiB9OyRozY9fb25jZS5nZXRJbmRleENvdmVyKGdldEluZGV4Q292ZXIpO1xuaGFyZGVuKGdldEluZGV4Q292ZXIpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBGdWxsUmFua0NvdmVyPWhhcmRlbihbJycsJ3snXSk7XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuRnVsbFJhbmtDb3ZlcihGdWxsUmFua0NvdmVyKTtcbmNvbnN0ICAgICAgICBjb3ZlcmVkRW50cmllcz0oc29ydGVkLFtsZWZ0SW5kZXgscmlnaHRJbmRleF0pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpdGVyYWJsZT1oYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmxldCBpPWxlZnRJbmRleDtcbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuaWYoaTw9cmlnaHRJbmRleCl7XG5jb25zdCBlbGVtZW50PXNvcnRlZFtpXTtcbmkrPTE7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZTpbaSxlbGVtZW50XSxkb25lOmZhbHNlfSk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZTp1bmRlZmluZWQsZG9uZTp0cnVlfSk7XG4gfVxuIH19KTtcblxuIH19KTtcblxucmV0dXJuIGl0ZXJhYmxlO1xuIH07JGjNj19vbmNlLmNvdmVyZWRFbnRyaWVzKGNvdmVyZWRFbnRyaWVzKTtcbmhhcmRlbihjb3ZlcmVkRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYXhSYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKT49MD9hOmI7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtaW5SYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKTw9MD9hOmI7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1bmlvblJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCB1bmlvblJhbmtDb3ZlclBhaXI9KFtsZWZ0QSxyaWdodEFdLFtsZWZ0QixyaWdodEJdKT0+W1xubWluUmFuayhjb21wYXJlLGxlZnRBLGxlZnRCKSxcbm1heFJhbmsoY29tcGFyZSxyaWdodEEscmlnaHRCKV07XG5cbnJldHVybiBjb3ZlcnMucmVkdWNlKHVuaW9uUmFua0NvdmVyUGFpcixbJ3snLCcnXSk7XG4gfTskaM2PX29uY2UudW5pb25SYW5rQ292ZXJzKHVuaW9uUmFua0NvdmVycyk7XG5oYXJkZW4odW5pb25SYW5rQ292ZXJzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGludGVyc2VjdFJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCBpbnRlcnNlY3RSYW5rQ292ZXJQYWlyPShbbGVmdEEscmlnaHRBXSxbbGVmdEIscmlnaHRCXSk9Pltcbm1heFJhbmsoY29tcGFyZSxsZWZ0QSxsZWZ0QiksXG5taW5SYW5rKGNvbXBhcmUscmlnaHRBLHJpZ2h0QildO1xuXG5yZXR1cm4gY292ZXJzLnJlZHVjZShpbnRlcnNlY3RSYW5rQ292ZXJQYWlyLFsnJywneyddKTtcbiB9OyRozY9fb25jZS5pbnRlcnNlY3RSYW5rQ292ZXJzKGludGVyc2VjdFJhbmtDb3ZlcnMpO1xuXG5jb25zdCAgICAgICB7Y29tcGFyYXRvcjpjb21wYXJlUmFuayxhbnRpQ29tcGFyYXRvcjpjb21wYXJlQW50aVJhbmt9PVxubWFrZUNvbXBhcmF0b3JLaXQoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5jb21wYXJlUmFuayhjb21wYXJlUmFuayk7JGjNj19vbmNlLmNvbXBhcmVBbnRpUmFuayhjb21wYXJlQW50aVJhbmspO1xuY29uc3QgICAgICAgIG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0PShsb25nTGl2ZWQ9ZmFsc2UpPT57XG5sZXQgbnVtU2Vlbj0wO1xuLy9cbi8vXG4vL1xuY29uc3QgTWFwQ29uc3RydWN0b3I9bG9uZ0xpdmVkP1dlYWtNYXA6TWFwO1xuY29uc3Qgc2Vlbj1uZXcgTWFwQ29uc3RydWN0b3IoKTtcbmNvbnN0IHRhZz0ocik9PntcbmlmKHNlZW4uaGFzKHIpKXtcbnJldHVybiBzZWVuLmdldChyKTtcbiB9XG5udW1TZWVuKz0xO1xuc2Vlbi5zZXQocixudW1TZWVuKTtcbnJldHVybiBudW1TZWVuO1xuIH07XG5jb25zdCBjb21wYXJlUmVtb3RhYmxlcz0oeCx5KT0+Y29tcGFyZVJhbmsodGFnKHgpLHRhZyh5KSk7XG5yZXR1cm4gbWFrZUNvbXBhcmF0b3JLaXQoY29tcGFyZVJlbW90YWJsZXMpO1xuIH07JGjNj19vbmNlLm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KTtcbmhhcmRlbihtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ0cml2aWFsQ29tcGFyYXRvciI6WyJ0cml2aWFsQ29tcGFyYXRvciJdLCJnZXRQYXNzU3R5bGVDb3ZlciI6WyJnZXRQYXNzU3R5bGVDb3ZlciJdLCJtYWtlQ29tcGFyYXRvcktpdCI6WyJtYWtlQ29tcGFyYXRvcktpdCJdLCJjb21wYXJhdG9yTWlycm9ySW1hZ2UiOlsiY29tcGFyYXRvck1pcnJvckltYWdlIl0sImlzUmFua1NvcnRlZCI6WyJpc1JhbmtTb3J0ZWQiXSwiYXNzZXJ0UmFua1NvcnRlZCI6WyJhc3NlcnRSYW5rU29ydGVkIl0sInNvcnRCeVJhbmsiOlsic29ydEJ5UmFuayJdLCJnZXRJbmRleENvdmVyIjpbImdldEluZGV4Q292ZXIiXSwiRnVsbFJhbmtDb3ZlciI6WyJGdWxsUmFua0NvdmVyIl0sImNvdmVyZWRFbnRyaWVzIjpbImNvdmVyZWRFbnRyaWVzIl0sInVuaW9uUmFua0NvdmVycyI6WyJ1bmlvblJhbmtDb3ZlcnMiXSwiaW50ZXJzZWN0UmFua0NvdmVycyI6WyJpbnRlcnNlY3RSYW5rQ292ZXJzIl0sImNvbXBhcmVSYW5rIjpbImNvbXBhcmVSYW5rIl0sImNvbXBhcmVBbnRpUmFuayI6WyJjb21wYXJlQW50aVJhbmsiXSwibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiOlsibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABURLJnkBAAB5AQAAIQAAAEBlbmRvL21hcnNoYWwtdjEuNi4zL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABlUZZiiAUAAIgFAAAeAAAAQGVuZG8vbmF0LXY1LjAuMTQvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJOYXQiLCJpc05hdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXNOYXQsICduYW1lJywge3ZhbHVlOiBcImlzTmF0XCJ9KTskaM2PX29uY2UuaXNOYXQoaXNOYXQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXQsICduYW1lJywge3ZhbHVlOiBcIk5hdFwifSk7JGjNj19vbmNlLk5hdChOYXQpOyAgIC8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBpc05hdChhbGxlZ2VkTnVtKXtcbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J2JpZ2ludCcpe1xucmV0dXJuIGFsbGVnZWROdW0+PTA7XG4gfVxuaWYodHlwZW9mIGFsbGVnZWROdW0hPT0nbnVtYmVyJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5yZXR1cm4gTnVtYmVyLmlzU2FmZUludGVnZXIoYWxsZWdlZE51bSkmJmFsbGVnZWROdW0+PTA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gTmF0KGFsbGVnZWROdW0pe1xuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nYmlnaW50Jyl7XG5pZihhbGxlZ2VkTnVtPDApe1xudGhyb3cgUmFuZ2VFcnJvciggYCR7YWxsZWdlZE51bX0gaXMgbmVnYXRpdmVgKTtcbiB9XG5yZXR1cm4gYWxsZWdlZE51bTtcbiB9XG5cbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J251bWJlcicpe1xuaWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGFsbGVnZWROdW0pKXtcbnRocm93IFJhbmdlRXJyb3IoIGAke2FsbGVnZWROdW19IGlzIG5vdCBhIHNhZmUgaW50ZWdlcmApO1xuIH1cbmlmKGFsbGVnZWROdW08MCl7XG50aHJvdyBSYW5nZUVycm9yKCBgJHthbGxlZ2VkTnVtfSBpcyBuZWdhdGl2ZWApO1xuIH1cbnJldHVybiBCaWdJbnQoYWxsZWdlZE51bSk7XG4gfVxuXG50aHJvdyBUeXBlRXJyb3IoXG4gYCR7YWxsZWdlZE51bX0gaXMgYSAke3R5cGVvZiBhbGxlZ2VkTnVtfSBidXQgbXVzdCBiZSBhIGJpZ2ludCBvciBhIG51bWJlcmApO1xuXG4gfVxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNOYXQiOlsiaXNOYXQiXSwiTmF0IjpbIk5hdCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABghYcIbgoAAG4KAAAgAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjgvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvaXRlci1oZWxwZXJzLmpzIiwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3NyYy9lcnJvci5qcyIsIi4vc3JjL3JlbW90YWJsZS5qcyIsIi4vc3JjL3N5bWJvbC5qcyIsIi4vc3JjL3N0cmluZy5qcyIsIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIiwiLi9zcmMvbWFrZVRhZ2dlZC5qcyIsIi4vc3JjL21ha2UtZmFyLmpzIiwiLi9zcmMvdHlwZUd1YXJkcy5qcyIsIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiRmFyIiwiRmFyIiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJmaWx0ZXJJdGVyYWJsZSIsImZpbHRlckl0ZXJhYmxlIiwiaXNFcnJvckxpa2UiLCJpc0Vycm9yTGlrZSIsImlzT2JqZWN0IiwiaXNPYmplY3QiLCJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSIsImlzUGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIixudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvaXRlci1oZWxwZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvZXJyb3IuanNcIiwgW11dLFtcIi4vc3JjL3JlbW90YWJsZS5qc1wiLCBbXV0sW1wiLi9zcmMvc3ltYm9sLmpzXCIsIFtdXSxbXCIuL3NyYy9zdHJpbmcuanNcIiwgW11dLFtcIi4vc3JjL3Bhc3NTdHlsZU9mLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlVGFnZ2VkLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlLWZhci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2l0ZXItaGVscGVycy5qcyI6W1sibWFwSXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLFsiZmlsdGVySXRlcmFibGUiLCJmaWx0ZXJJdGVyYWJsZSJdXSwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiOltbIlBBU1NfU1RZTEUiLCJQQVNTX1NUWUxFIl0sWyJpc09iamVjdCIsImlzT2JqZWN0Il0sWyJhc3NlcnRDaGVja2VyIiwiYXNzZXJ0Q2hlY2tlciJdLFsiZ2V0VGFnIiwiZ2V0VGFnIl0sWyJoYXNPd25Qcm9wZXJ0eU9mIiwiaGFzT3duUHJvcGVydHlPZiJdXSwiLi9zcmMvZXJyb3IuanMiOltbImdldEVycm9yQ29uc3RydWN0b3IiLCJnZXRFcnJvckNvbnN0cnVjdG9yIl0sWyJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIl1dLCIuL3NyYy9yZW1vdGFibGUuanMiOltbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXV0sIi4vc3JjL3N5bWJvbC5qcyI6W1siYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLFsiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiXSxbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCIsIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLFsicGFzc2FibGVTeW1ib2xGb3JOYW1lIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl1dLCIuL3NyYy9zdHJpbmcuanMiOltbImlzV2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLFsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0UGFzc2FibGVTdHJpbmciXV0sIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjpbWyJwYXNzU3R5bGVPZiIsInBhc3NTdHlsZU9mIl0sWyJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSJdLFsiYXNzZXJ0UGFzc2FibGUiLCJhc3NlcnRQYXNzYWJsZSJdLFsidG9QYXNzYWJsZUVycm9yIiwidG9QYXNzYWJsZUVycm9yIl0sWyJ0b1Rocm93YWJsZSIsInRvVGhyb3dhYmxlIl1dLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIjpbWyJtYWtlVGFnZ2VkIiwibWFrZVRhZ2dlZCJdXSwiLi9zcmMvbWFrZS1mYXIuanMiOltbIlJlbW90YWJsZSIsIlJlbW90YWJsZSJdLFsiRmFyIiwiRmFyIl0sWyJUb0ZhckZ1bmN0aW9uIiwiVG9GYXJGdW5jdGlvbiJdLFsiR0VUX01FVEhPRF9OQU1FUyIsIkdFVF9NRVRIT0RfTkFNRVMiXV0sIi4vc3JjL3R5cGVHdWFyZHMuanMiOltbImFzc2VydFJlY29yZCIsImFzc2VydFJlY29yZCJdLFsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5Il0sWyJhc3NlcnRSZW1vdGFibGUiLCJhc3NlcnRSZW1vdGFibGUiXSxbImlzUmVtb3RhYmxlIiwiaXNSZW1vdGFibGUiXSxbImlzUmVjb3JkIiwiaXNSZWNvcmQiXSxbImlzQ29weUFycmF5IiwiaXNDb3B5QXJyYXkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJqP4mGDBgAAgwYAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvY29weUFycmF5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5QXJyYXlIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLGFzc2VydENoZWNrZXIsZ2V0T3duRGF0YURlc2NyaXB0b3I7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjNj19hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNvbnN0e2dldFByb3RvdHlwZU9mfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheSxwcm90b3R5cGU6YXJyYXlQcm90b3R5cGV9PUFycmF5O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjYW5CZVZhbGlkPShjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+XG5pc0FycmF5KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmY2hlY2soZmFsc2UsWCBgQXJyYXkgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIENvcHlBcnJheUhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidjb3B5QXJyYXknLFxuXG5jYW5CZVZhbGlkLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jYW5CZVZhbGlkKGNhbmRpZGF0ZSxhc3NlcnRDaGVja2VyKTtcbmdldFByb3RvdHlwZU9mKGNhbmRpZGF0ZSk9PT1hcnJheVByb3RvdHlwZXx8XG5hc3NlcnQuZmFpbChYIGBNYWxmb3JtZWQgYXJyYXk6ICR7Y2FuZGlkYXRlfWAsVHlwZUVycm9yKTtcbi8vXG4vL1xuY29uc3QgbGVuPS8qICAgICAgICAgICAgICAgICAqL1xuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLCdsZW5ndGgnLGZhbHNlLGFzc2VydENoZWNrZXIpLnZhbHVlO1xuXG4vL1xuLy9cbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xucGFzc1N0eWxlT2ZSZWN1cihcbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSxpLHRydWUsYXNzZXJ0Q2hlY2tlcikudmFsdWUpO1xuXG4gfVxuLy9cbm93bktleXMoY2FuZGlkYXRlKS5sZW5ndGg9PT1sZW4rMXx8XG5hc3NlcnQuZmFpbChYIGBBcnJheXMgbXVzdCBub3QgaGF2ZSBub24taW5kZXhlczogJHtjYW5kaWRhdGV9YCxUeXBlRXJyb3IpO1xuIH19KTskaM2PX29uY2UuQ29weUFycmF5SGVscGVyKENvcHlBcnJheUhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJDb3B5QXJyYXlIZWxwZXIiOlsiQ29weUFycmF5SGVscGVyIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALY7xrxYCAAAWAgAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvY29weVJlY29yZC5qc3siaW1wb3J0cyI6WyIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiQ29weVJlY29yZEhlbHBlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsY2FuQmVNZXRob2QsZ2V0T3duRGF0YURlc2NyaXB0b3IsQ1g7JGjNj19pbXBvcnRzKFtbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiY2FuQmVNZXRob2RcIiwgWyRozY9fYSA9PiAoY2FuQmVNZXRob2QgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0UHJvdG90eXBlT2YscHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgY2hlY2tPYmplY3RQcm90b3R5cGU9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09b2JqZWN0UHJvdG90eXBlfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBSZWNvcmRzIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBjaGVja1Byb3BlcnR5Q2FuQmVWYWxpZD0oY2FuZGlkYXRlLGtleSx2YWx1ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG4odHlwZW9mIGtleT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUmVjb3JkcyBjYW4gb25seSBoYXZlIHN0cmluZy1uYW1lZCBwcm9wZXJ0aWVzOiAke2NhbmRpZGF0ZX1gKSYmKFxuIWNhbkJlTWV0aG9kKHZhbHVlKXx8XG4hIWNoZWNrJiZcbi8vXG5DWChcbmNoZWNrKVxuIGBSZWNvcmRzIGNhbm5vdCBjb250YWluIG5vbi1mYXIgZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBtYXkgYmUgbWV0aG9kcyBvZiBhbiBpbXBsaWNpdCBSZW1vdGFibGU6ICR7Y2FuZGlkYXRlfWApKTtcblxuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgQ29weVJlY29yZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidjb3B5UmVjb3JkJyxcblxuY2FuQmVWYWxpZDooY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbmNoZWNrT2JqZWN0UHJvdG90eXBlKGNhbmRpZGF0ZSxjaGVjaykmJlxuLy9cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkuZXZlcnkoKGtleSk9PlxuY2hlY2tQcm9wZXJ0eUNhbkJlVmFsaWQoY2FuZGlkYXRlLGtleSxjYW5kaWRhdGVba2V5XSxjaGVjaykpKTtcblxuXG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tPYmplY3RQcm90b3R5cGUoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuLy9cbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoY2FuZGlkYXRlKSl7XG5jb25zdHt2YWx1ZX09Z2V0T3duRGF0YURlc2NyaXB0b3IoXG5jYW5kaWRhdGUsXG5uYW1lLFxudHJ1ZSxcbmFzc2VydENoZWNrZXIpO1xuXG5jaGVja1Byb3BlcnR5Q2FuQmVWYWxpZChjYW5kaWRhdGUsbmFtZSx2YWx1ZSxhc3NlcnRDaGVja2VyKTtcbnBhc3NTdHlsZU9mUmVjdXIodmFsdWUpO1xuIH1cbiB9fSk7JGjNj19vbmNlLkNvcHlSZWNvcmRIZWxwZXIoQ29weVJlY29yZEhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJDb3B5UmVjb3JkSGVscGVyIjpbIkNvcHlSZWNvcmRIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAR4T6L4UKAACFCgAALgAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9kZWVwbHlGdWxmaWxsZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcGFzc1N0eWxlT2YuanMiLCIuL21ha2VUYWdnZWQuanMiXSwiZXhwb3J0cyI6WyJkZWVwbHlGdWxmaWxsZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRSxpc1Byb21pc2UsZ2V0VGFnLGlzT2JqZWN0LHBhc3NTdHlsZU9mLG1ha2VUYWdnZWQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaM2PX2EgPT4gKGlzUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIi4vbWFrZVRhZ2dlZC5qc1wiLCBbW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcGx5RnVsZmlsbGVkPWFzeW5jKHZhbCk9Pntcbi8vXG4vL1xuLy9cblxuaWYoIWlzT2JqZWN0KHZhbCkpe1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovdmFsKTtcbiB9XG5pZihpc1Byb21pc2UodmFsKSl7XG5yZXR1cm4gRS53aGVuKHZhbCwobm9ucCk9PmRlZXBseUZ1bGZpbGxlZChub25wKSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCBuYW1lcz0vKiAgICAgICAgICAgICAgICAgICAqL293bktleXMocmVjKTtcbmNvbnN0IHZhbFBzPW5hbWVzLm1hcCgobmFtZSk9PmRlZXBseUZ1bGZpbGxlZChyZWNbbmFtZV0pKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PlxuaGFyZGVuKGZyb21FbnRyaWVzKHZhbHMubWFwKChjLGkpPT5bbmFtZXNbaV0sY10pKSkpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbmNvbnN0IGFycj0vKiAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCB2YWxQcz1hcnIubWFwKChwKT0+ZGVlcGx5RnVsZmlsbGVkKHApKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PmhhcmRlbih2YWxzKSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRnZD0vKiAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgdGFnPWdldFRhZyh0Z2QpO1xuLy9cbnJldHVybiBFLndoZW4oZGVlcGx5RnVsZmlsbGVkKHRnZC5wYXlsb2FkKSwocGF5bG9hZCk9PlxubWFrZVRhZ2dlZCh0YWcscGF5bG9hZCkpO1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IHJlbT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIHJlbTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdCBlcnI9LyogICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIGVycjtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IHByb209LyogICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdmFsO1xucmV0dXJuIEUud2hlbihwcm9tLChub25wKT0+ZGVlcGx5RnVsZmlsbGVkKG5vbnApKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTskaM2PX29uY2UuZGVlcGx5RnVsZmlsbGVkKGRlZXBseUZ1bGZpbGxlZCk7XG5oYXJkZW4oZGVlcGx5RnVsZmlsbGVkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZXBseUZ1bGZpbGxlZCI6WyJkZWVwbHlGdWxmaWxsZWQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAvmDjY2MSAABjEgAAJAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9lcnJvci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiRXJyb3JIZWxwZXIiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciIsImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciIsImlzRXJyb3JMaWtlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxhc3NlcnRDaGVja2VyLENYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e2dldFByb3RvdHlwZU9mLGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMsaGFzT3duLGVudHJpZXN9PU9iamVjdDtcblxuLy9cbi8vXG5jb25zdCBlcnJvckNvbnN0cnVjdG9ycz1uZXcgTWFwKFxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbltcblsnRXJyb3InLEVycm9yXSxcblsnRXZhbEVycm9yJyxFdmFsRXJyb3JdLFxuWydSYW5nZUVycm9yJyxSYW5nZUVycm9yXSxcblsnUmVmZXJlbmNlRXJyb3InLFJlZmVyZW5jZUVycm9yXSxcblsnU3ludGF4RXJyb3InLFN5bnRheEVycm9yXSxcblsnVHlwZUVycm9yJyxUeXBlRXJyb3JdLFxuWydVUklFcnJvcicsVVJJRXJyb3JdXG5cbi8vXG4vL1xuLy9cbi8vXG5dKTtcblxuXG5pZih0eXBlb2YgQWdncmVnYXRlRXJyb3IhPT0ndW5kZWZpbmVkJyl7XG4vL1xuZXJyb3JDb25zdHJ1Y3RvcnMuc2V0KCdBZ2dyZWdhdGVFcnJvcicsQWdncmVnYXRlRXJyb3IpO1xuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRFcnJvckNvbnN0cnVjdG9yPShuYW1lKT0+ZXJyb3JDb25zdHJ1Y3RvcnMuZ2V0KG5hbWUpOyRozY9fb25jZS5nZXRFcnJvckNvbnN0cnVjdG9yKGdldEVycm9yQ29uc3RydWN0b3IpO1xuaGFyZGVuKGdldEVycm9yQ29uc3RydWN0b3IpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja0Vycm9yTGlrZT0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9Pntcbi8vXG5yZXR1cm4oXG5jYW5kaWRhdGUgaW5zdGFuY2VvZiBFcnJvcnx8XG4hIWNoZWNrJiZDWChjaGVjaykgYEVycm9yIGV4cGVjdGVkOiAke2NhbmRpZGF0ZX1gKTtcblxuIH07XG5oYXJkZW4oY2hlY2tFcnJvckxpa2UpO1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNFcnJvckxpa2U9KGNhbmRpZGF0ZSk9PmNoZWNrRXJyb3JMaWtlKGNhbmRpZGF0ZSk7JGjNj19vbmNlLmlzRXJyb3JMaWtlKGlzRXJyb3JMaWtlKTtcbmhhcmRlbihpc0Vycm9yTGlrZSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2M9KFxucHJvcE5hbWUsXG5kZXNjLFxucGFzc1N0eWxlT2ZSZWN1cixcbmNoZWNrPXVuZGVmaW5lZCk9Plxue1xuaWYoZGVzYy5lbnVtZXJhYmxlKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IG5vdCBiZSBlbnVtZXJhYmxlOiAke2Rlc2N9YCk7XG5cbiB9XG5pZighaGFzT3duKGRlc2MsJ3ZhbHVlJykpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3QgYmUgYSBkYXRhIHByb3BlcnR5OiAke2Rlc2N9YCk7XG5cbiB9XG5jb25zdHt2YWx1ZX09ZGVzYztcbnN3aXRjaChwcm9wTmFtZSl7XG5jYXNlJ21lc3NhZ2UnOlxuY2FzZSdzdGFjayc6e1xucmV0dXJuKFxudHlwZW9mIHZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmc6ICR7dmFsdWV9YCk7XG5cbiB9XG5jYXNlJ2NhdXNlJzp7XG4vL1xucmV0dXJuIGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKHZhbHVlLHBhc3NTdHlsZU9mUmVjdXIsY2hlY2spO1xuIH1cbmNhc2UnZXJyb3JzJzp7XG5pZighQXJyYXkuaXNBcnJheSh2YWx1ZSl8fHBhc3NTdHlsZU9mUmVjdXIodmFsdWUpIT09J2NvcHlBcnJheScpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3QgYmUgYSBjb3B5QXJyYXk6ICR7dmFsdWV9YCk7XG5cbiB9XG5yZXR1cm4gdmFsdWUuZXZlcnkoKGVycik9PlxuLy9cbmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKGVycixwYXNzU3R5bGVPZlJlY3VyLGNoZWNrKSk7XG5cbiB9XG5kZWZhdWx0OntcbmJyZWFrO1xuIH19XG5cbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciBoYXMgZXh0cmEgdW5wYXNzZWQgcHJvcGVydHkgJHtxKHByb3BOYW1lKX1gKTtcblxuIH07JGjNj19vbmNlLmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKTtcbmhhcmRlbihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yPShcbmNhbmRpZGF0ZSxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaz11bmRlZmluZWQpPT5cbntcbmlmKCFjaGVja0Vycm9yTGlrZShjYW5kaWRhdGUsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCBwcm90bz1nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpO1xuY29uc3R7bmFtZX09cHJvdG87XG5jb25zdCBlcnJDb25zdHJ1Y3Rvcj1nZXRFcnJvckNvbnN0cnVjdG9yKG5hbWUpO1xuaWYoZXJyQ29uc3RydWN0b3I9PT11bmRlZmluZWR8fGVyckNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PXByb3RvKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUGFzc2FibGUgRXJyb3IgbXVzdCBpbmhlcml0IGZyb20gYW4gZXJyb3IgY2xhc3MgLnByb3RvdHlwZTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9XG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGNhbmRpZGF0ZSk7XG5pZighKCdtZXNzYWdlJ2luIGRlc2NzKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFBhc3NhYmxlIEVycm9yIG11c3QgaGF2ZSBhbiBvd24gXCJtZXNzYWdlXCIgc3RyaW5nIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKTtcblxuIH1cblxucmV0dXJuIGVudHJpZXMoZGVzY3MpLmV2ZXJ5KChbcHJvcE5hbWUsZGVzY10pPT5cbmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKFxucHJvcE5hbWUsXG5kZXNjLFxucGFzc1N0eWxlT2ZSZWN1cixcbmNoZWNrKSk7XG5cblxuIH07JGjNj19vbmNlLmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKTtcbmhhcmRlbihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcik7XG5cbi8qXG5cbiAqL1xuY29uc3QgICAgICAgIEVycm9ySGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J2Vycm9yJyxcblxuY2FuQmVWYWxpZDpjaGVja0Vycm9yTGlrZSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cixhc3NlcnRDaGVja2VyKX0pOyRozY9fb25jZS5FcnJvckhlbHBlcihFcnJvckhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRFcnJvckNvbnN0cnVjdG9yIjpbImdldEVycm9yQ29uc3RydWN0b3IiXSwiaXNFcnJvckxpa2UiOlsiaXNFcnJvckxpa2UiXSwiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MiOlsiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MiXSwiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IiOlsiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IiXSwiRXJyb3JIZWxwZXIiOlsiRXJyb3JIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAJuaYAb4FAAC+BQAAKwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9pdGVyLWhlbHBlcnMuanN7ImltcG9ydHMiOlsiLi9tYWtlLWZhci5qcyJdLCJleHBvcnRzIjpbImZpbHRlckl0ZXJhYmxlIiwibWFwSXRlcmFibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXI7JGjNj19pbXBvcnRzKFtbXCIuL21ha2UtZmFyLmpzXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcEl0ZXJhYmxlPShiYXNlSXRlcmFibGUsZnVuYyk9PlxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbkZhcignbWFwcGVkIGl0ZXJhYmxlJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgYmFzZUl0ZXJhdG9yPWJhc2VJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gRmFyKCdtYXBwZWQgaXRlcmF0b3InLHtcbm5leHQ6KCk9PntcbmNvbnN0e3ZhbHVlOmJhc2VWYWx1ZSxkb25lfT1iYXNlSXRlcmF0b3IubmV4dCgpO1xuY29uc3QgdmFsdWU9ZG9uZT9iYXNlVmFsdWU6ZnVuYyhiYXNlVmFsdWUpO1xucmV0dXJuIGhhcmRlbih7dmFsdWUsZG9uZX0pO1xuIH19KTtcblxuIH19KTskaM2PX29uY2UubWFwSXRlcmFibGUobWFwSXRlcmFibGUpO1xuXG5oYXJkZW4obWFwSXRlcmFibGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZmlsdGVySXRlcmFibGU9KGJhc2VJdGVyYWJsZSxwcmVkKT0+XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuRmFyKCdmaWx0ZXJlZCBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmNvbnN0IGJhc2VJdGVyYXRvcj1iYXNlSXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIEZhcignZmlsdGVyZWQgaXRlcmF0b3InLHtcbm5leHQ6KCk9PntcbmZvcig7Oyl7XG5jb25zdCByZXN1bHQ9YmFzZUl0ZXJhdG9yLm5leHQoKTtcbmNvbnN0e3ZhbHVlLGRvbmV9PXJlc3VsdDtcbmlmKGRvbmV8fHByZWQodmFsdWUpKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbiB9fSk7XG5cbiB9fSk7JGjNj19vbmNlLmZpbHRlckl0ZXJhYmxlKGZpbHRlckl0ZXJhYmxlKTtcblxuaGFyZGVuKGZpbHRlckl0ZXJhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1hcEl0ZXJhYmxlIjpbIm1hcEl0ZXJhYmxlIl0sImZpbHRlckl0ZXJhYmxlIjpbImZpbHRlckl0ZXJhYmxlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAlUzWBwEQAAcBEAACcAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvbWFrZS1mYXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3JlbW90YWJsZS5qcyJdLCJleHBvcnRzIjpbIkZhciIsIkdFVF9NRVRIT0RfTkFNRVMiLCJSZW1vdGFibGUiLCJUb0ZhckZ1bmN0aW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0TWV0aG9kTmFtZXMscSxGYWlsLGFzc2VydENoZWNrZXIsUEFTU19TVFlMRSxhc3NlcnRJZmFjZSxnZXRJbnRlcmZhY2VPZixSZW1vdGFibGVIZWxwZXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjNj19hID0+IChnZXRNZXRob2ROYW1lcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV1dXSxbXCIuL3JlbW90YWJsZS5qc1wiLCBbW1wiYXNzZXJ0SWZhY2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0SWZhY2UgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlT2YgPSAkaM2PX2EpXV0sW1wiUmVtb3RhYmxlSGVscGVyXCIsIFskaM2PX2EgPT4gKFJlbW90YWJsZUhlbHBlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtwcm90b3R5cGU6ZnVuY3Rpb25Qcm90b3R5cGV9PUZ1bmN0aW9uO1xuY29uc3R7XG5nZXRQcm90b3R5cGVPZixcbnNldFByb3RvdHlwZU9mLFxuY3JlYXRlLFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1cbk9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlUmVtb3RhYmxlUHJvdG89KHJlbW90YWJsZSxpZmFjZSk9PntcbmxldCBvbGRQcm90bz1nZXRQcm90b3R5cGVPZihyZW1vdGFibGUpO1xuaWYodHlwZW9mIHJlbW90YWJsZT09PSdvYmplY3QnKXtcbmlmKG9sZFByb3RvPT09bnVsbCl7XG5vbGRQcm90bz1vYmplY3RQcm90b3R5cGU7XG4gfVxub2xkUHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuRmFpbCBgRm9yIG5vdywgcmVtb3RhYmxlcyBjYW5ub3QgaW5oZXJpdCBmcm9tIGFueXRoaW5nIHVudXN1YWwsIGluICR7cmVtb3RhYmxlfWA7XG4gfWVsc2UgaWYodHlwZW9mIHJlbW90YWJsZT09PSdmdW5jdGlvbicpe1xub2xkUHJvdG8hPT1udWxsfHxcbkZhaWwgYE9yaWdpbmFsIGZ1bmN0aW9uIG11c3Qgbm90IGluaGVyaXQgZnJvbSBudWxsOiAke3JlbW90YWJsZX1gO1xub2xkUHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5nZXRQcm90b3R5cGVPZihvbGRQcm90byk9PT1mdW5jdGlvblByb3RvdHlwZXx8XG5GYWlsIGBGYXIgZnVuY3Rpb25zIG11c3Qgb3JpZ2luYWxseSBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlLCBpbiAke3JlbW90YWJsZX1gO1xuIH1lbHNle1xuRmFpbCBgdW5yZWNvZ25pemVkIHR5cGVvZiAke3JlbW90YWJsZX1gO1xuIH1cbnJldHVybiBoYXJkZW4oXG5jcmVhdGUob2xkUHJvdG8se1xuW1BBU1NfU1RZTEVdOnt2YWx1ZToncmVtb3RhYmxlJ30sXG5bU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6aWZhY2V9fSkpO1xuXG5cbiB9O1xuXG5jb25zdCBhc3NlcnRDYW5CZVJlbW90YWJsZT0oY2FuZGlkYXRlKT0+XG5SZW1vdGFibGVIZWxwZXIuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBSZW1vdGFibGU9KFxuLy9cbmlmYWNlPSdSZW1vdGFibGUnLFxucHJvcHM9dW5kZWZpbmVkLFxucmVtb3RhYmxlPS8qICAgICAgICAgICAgKi97fSk9Plxue1xuYXNzZXJ0SWZhY2UoaWZhY2UpO1xuYXNzZXJ0KGlmYWNlKTtcbi8vXG4vL1xucHJvcHM9PT11bmRlZmluZWR8fEZhaWwgYFJlbW90YWJsZSBwcm9wcyBub3QgeWV0IGltcGxlbWVudGVkICR7cHJvcHN9YDtcblxuLy9cbmFzc2VydENhbkJlUmVtb3RhYmxlKHJlbW90YWJsZSk7XG5cbi8vXG4hKFBBU1NfU1RZTEUgaW4gcmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgbWFya2VkIGFzIGEgJHtxKFxucmVtb3RhYmxlW1BBU1NfU1RZTEVdKVxuIH1gO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4uaXNGYWtlfHxcbi8vXG4haXNGcm96ZW4ocmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgZnJvemVuYDtcbmNvbnN0IHJlbW90YWJsZVByb3RvPW1ha2VSZW1vdGFibGVQcm90byhyZW1vdGFibGUsaWZhY2UpO1xuXG4vL1xuLy9cbmNvbnN0IG11dGF0ZUhhcmRlbkFuZENoZWNrPSh0YXJnZXQpPT57XG4vL1xuc2V0UHJvdG90eXBlT2YodGFyZ2V0LHJlbW90YWJsZVByb3RvKTtcbmhhcmRlbih0YXJnZXQpO1xuYXNzZXJ0Q2FuQmVSZW1vdGFibGUodGFyZ2V0KTtcbiB9O1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2soe30pO1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2socmVtb3RhYmxlKTtcblxuLy9cbi8vXG5hc3NlcnQoaWZhY2UhPT11bmRlZmluZWQpOy8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAqL3JlbW90YWJsZSk7XG4gfTskaM2PX29uY2UuUmVtb3RhYmxlKFJlbW90YWJsZSk7XG5oYXJkZW4oUmVtb3RhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEdFVF9NRVRIT0RfTkFNRVM9J19fZ2V0TWV0aG9kTmFtZXNfXyc7XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5HRVRfTUVUSE9EX05BTUVTKEdFVF9NRVRIT0RfTkFNRVMpO1xuY29uc3QgZ2V0TWV0aG9kTmFtZXNNZXRob2Q9aGFyZGVuKHtcbltHRVRfTUVUSE9EX05BTUVTXSgpe1xucmV0dXJuIGdldE1ldGhvZE5hbWVzKHRoaXMpO1xuIH19KVtcbkdFVF9NRVRIT0RfTkFNRVNdO1xuXG5jb25zdCBnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3I9aGFyZGVuKHtcbnZhbHVlOmdldE1ldGhvZE5hbWVzTWV0aG9kLFxuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTpmYWxzZSxcbndyaXRhYmxlOmZhbHNlfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEZhcj0oZmFyTmFtZSxyZW1vdGFibGU9dW5kZWZpbmVkKT0+e1xuY29uc3Qgcj1yZW1vdGFibGU9PT11bmRlZmluZWQ/LyogICAgICAgICAgICAqL3t9OnJlbW90YWJsZTtcbmlmKHR5cGVvZiByPT09J29iamVjdCcmJiEoR0VUX01FVEhPRF9OQU1FUyBpbiByKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsR0VUX01FVEhPRF9OQU1FUyxnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3IpO1xuIH1cbnJldHVybiBSZW1vdGFibGUoIGBBbGxlZ2VkOiAke2Zhck5hbWV9YCx1bmRlZmluZWQscik7XG4gfTskaM2PX29uY2UuRmFyKEZhcik7XG5oYXJkZW4oRmFyKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRvRmFyRnVuY3Rpb249KGZhck5hbWUsZnVuYyk9PntcbmlmKGdldEludGVyZmFjZU9mKGZ1bmMpIT09dW5kZWZpbmVkKXtcbi8vXG5yZXR1cm4gZnVuYztcbiB9XG4vL1xucmV0dXJuIEZhcihmYXJOYW1lLCguLi5hcmdzKT0+ZnVuYyguLi5hcmdzKSk7XG4gfTskaM2PX29uY2UuVG9GYXJGdW5jdGlvbihUb0ZhckZ1bmN0aW9uKTtcbmhhcmRlbihUb0ZhckZ1bmN0aW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlJlbW90YWJsZSI6WyJSZW1vdGFibGUiXSwiR0VUX01FVEhPRF9OQU1FUyI6WyJHRVRfTUVUSE9EX05BTUVTIl0sIkZhciI6WyJGYXIiXSwiVG9GYXJGdW5jdGlvbiI6WyJUb0ZhckZ1bmN0aW9uIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEjNsTCvBAAArwQAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvbWFrZVRhZ2dlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbIm1ha2VUYWdnZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLFBBU1NfU1RZTEUsYXNzZXJ0UGFzc2FibGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlT2YuanNcIiwgW1tcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5jb25zdHtjcmVhdGUscHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09T2JqZWN0O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VUYWdnZWQ9KHRhZyxwYXlsb2FkKT0+e1xudHlwZW9mIHRhZz09PSdzdHJpbmcnfHxcbkZhaWwgYFRoZSB0YWcgb2YgYSB0YWdnZWQgcmVjb3JkIG11c3QgYmUgYSBzdHJpbmc6ICR7dGFnfWA7XG5hc3NlcnRQYXNzYWJsZShoYXJkZW4ocGF5bG9hZCkpO1xucmV0dXJuIGhhcmRlbihcbmNyZWF0ZShvYmplY3RQcm90b3R5cGUse1xuW1BBU1NfU1RZTEVdOnt2YWx1ZTondGFnZ2VkJ30sXG5bU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6dGFnfSxcbnBheWxvYWQ6e3ZhbHVlOnBheWxvYWQsZW51bWVyYWJsZTp0cnVlfX0pKTtcblxuXG4gfTskaM2PX29uY2UubWFrZVRhZ2dlZChtYWtlVGFnZ2VkKTtcbmhhcmRlbihtYWtlVGFnZ2VkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VUYWdnZWQiOlsibWFrZVRhZ2dlZCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABHps7qQxUAAEMVAAAwAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIkNYIiwiUEFTU19TVFlMRSIsImFzc2VydENoZWNrZXIiLCJjYW5CZU1ldGhvZCIsImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiLCJjaGVja1Bhc3NTdHlsZSIsImNoZWNrVGFnUmVjb3JkIiwiZ2V0T3duRGF0YURlc2NyaXB0b3IiLCJnZXRUYWciLCJoYXNPd25Qcm9wZXJ0eU9mIiwiaXNPYmplY3QiLCJpc1R5cGVkQXJyYXkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtwcm90b3R5cGU6ZnVuY3Rpb25Qcm90b3R5cGV9PUZ1bmN0aW9uO1xuY29uc3R7XG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG5nZXRQcm90b3R5cGVPZixcbmhhc093blByb3BlcnR5Om9iamVjdEhhc093blByb3BlcnR5LFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1cbk9iamVjdDtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuY29uc3R7dG9TdHJpbmdUYWc6dG9TdHJpbmdUYWdTeW1ib2x9PVN5bWJvbDtcblxuY29uc3QgdHlwZWRBcnJheVByb3RvdHlwZT1nZXRQcm90b3R5cGVPZihVaW50OEFycmF5LnByb3RvdHlwZSk7XG5jb25zdCB0eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjPWdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbnR5cGVkQXJyYXlQcm90b3R5cGUsXG50b1N0cmluZ1RhZ1N5bWJvbCk7XG5cbmFzc2VydCh0eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjKTtcbmNvbnN0IGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZz10eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjLmdldDtcbmFzc2VydCh0eXBlb2YgZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnPT09J2Z1bmN0aW9uJyk7XG5cbmNvbnN0ICAgICAgICBoYXNPd25Qcm9wZXJ0eU9mPShvYmoscHJvcCk9PlxuYXBwbHkob2JqZWN0SGFzT3duUHJvcGVydHksb2JqLFtwcm9wXSk7JGjNj19vbmNlLmhhc093blByb3BlcnR5T2YoaGFzT3duUHJvcGVydHlPZik7XG5oYXJkZW4oaGFzT3duUHJvcGVydHlPZik7XG5cbi8vXG5jb25zdCAgICAgICAgaXNPYmplY3Q9KHZhbCk9Pk9iamVjdCh2YWwpPT09dmFsOyRozY9fb25jZS5pc09iamVjdChpc09iamVjdCk7XG5oYXJkZW4oaXNPYmplY3QpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNUeXBlZEFycmF5PShvYmplY3QpPT57XG4vL1xuY29uc3QgdGFnPWFwcGx5KGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZyxvYmplY3QsW10pO1xucmV0dXJuIHRhZyE9PXVuZGVmaW5lZDtcbiB9OyRozY9fb25jZS5pc1R5cGVkQXJyYXkoaXNUeXBlZEFycmF5KTtcbmhhcmRlbihpc1R5cGVkQXJyYXkpO1xuXG5jb25zdCAgICAgICAgUEFTU19TVFlMRT1TeW1ib2wuZm9yKCdwYXNzU3R5bGUnKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUEFTU19TVFlMRShQQVNTX1NUWUxFKTtcbmNvbnN0ICAgICAgICBjYW5CZU1ldGhvZD0oZnVuYyk9PlxudHlwZW9mIGZ1bmM9PT0nZnVuY3Rpb24nJiYhKFBBU1NfU1RZTEUgaW4gZnVuYyk7JGjNj19vbmNlLmNhbkJlTWV0aG9kKGNhbkJlTWV0aG9kKTtcbmhhcmRlbihjYW5CZU1ldGhvZCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDaGVja2VyPShjb25kLGRldGFpbHMpPT57XG5hc3NlcnQoY29uZCxkZXRhaWxzKTtcbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmFzc2VydENoZWNrZXIoYXNzZXJ0Q2hlY2tlcik7XG5oYXJkZW4oYXNzZXJ0Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIENYPShjaGVjayk9PntcbmNvbnN0IHJlamVjdD0oVCwuLi5zdWJzKT0+Y2hlY2soZmFsc2UsWChULC4uLnN1YnMpKTtcbnJldHVybiByZWplY3Q7XG4gfTskaM2PX29uY2UuQ1goQ1gpO1xuaGFyZGVuKENYKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRPd25EYXRhRGVzY3JpcHRvcj0oXG5jYW5kaWRhdGUsXG5wcm9wTmFtZSxcbnNob3VsZEJlRW51bWVyYWJsZSxcbmNoZWNrKT0+XG57XG5jb25zdCBkZXNjPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNhbmRpZGF0ZSxwcm9wTmFtZSk7XG5cbnJldHVybihkZXNjIT09dW5kZWZpbmVkfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgJHtxKHByb3BOYW1lKX0gcHJvcGVydHkgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApJiYoXG5oYXNPd25Qcm9wZXJ0eU9mKGRlc2MsJ3ZhbHVlJyl8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGAke3EocHJvcE5hbWUpfSBtdXN0IG5vdCBiZSBhbiBhY2Nlc3NvciBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YCkmJihcbnNob3VsZEJlRW51bWVyYWJsZT9cbmRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3QgYmUgYW4gZW51bWVyYWJsZSBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YDpcbiFkZXNjLmVudW1lcmFibGV8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGAke3EocHJvcE5hbWUpfSBtdXN0IG5vdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKT9cbmRlc2M6XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gLyogICAgICAgICAgICAgICAgICAqL3VuZGVmaW5lZDtcbiB9OyRozY9fb25jZS5nZXRPd25EYXRhRGVzY3JpcHRvcihnZXRPd25EYXRhRGVzY3JpcHRvcik7XG5oYXJkZW4oZ2V0T3duRGF0YURlc2NyaXB0b3IpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0VGFnPSh0YWdSZWNvcmQpPT50YWdSZWNvcmRbU3ltYm9sLnRvU3RyaW5nVGFnXTskaM2PX29uY2UuZ2V0VGFnKGdldFRhZyk7XG5oYXJkZW4oZ2V0VGFnKTtcblxuY29uc3QgICAgICAgIGNoZWNrUGFzc1N0eWxlPShvYmoscGFzc1N0eWxlLGV4cGVjdGVkUGFzc1N0eWxlLGNoZWNrKT0+e1xucmV0dXJuKFxucGFzc1N0eWxlPT09ZXhwZWN0ZWRQYXNzU3R5bGV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEV4cGVjdGVkICR7cShleHBlY3RlZFBhc3NTdHlsZSl9LCBub3QgJHtxKHBhc3NTdHlsZSl9OiAke29ian1gKTtcblxuIH07JGjNj19vbmNlLmNoZWNrUGFzc1N0eWxlKGNoZWNrUGFzc1N0eWxlKTtcbmhhcmRlbihjaGVja1Bhc3NTdHlsZSk7XG5cbmNvbnN0IG1ha2VDaGVja1RhZ1JlY29yZD0oY2hlY2tQcm90byk9Pntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1RhZ1JlY29yZD0odGFnUmVjb3JkLGV4cGVjdGVkUGFzc1N0eWxlLGNoZWNrKT0+e1xucmV0dXJuKFxuKGlzT2JqZWN0KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgbm9uLW9iamVjdCBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiYoXG5pc0Zyb3plbih0YWdSZWNvcmQpfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgQSB0YWdSZWNvcmQgbXVzdCBiZSBmcm96ZW46ICR7dGFnUmVjb3JkfWApJiYoXG4haXNBcnJheSh0YWdSZWNvcmQpfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgQW4gYXJyYXkgY2Fubm90IGJlIGEgdGFnUmVjb3JkOiAke3RhZ1JlY29yZH1gKSYmXG5jaGVja1Bhc3NTdHlsZShcbnRhZ1JlY29yZCxcbmdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxQQVNTX1NUWUxFLGZhbHNlLGNoZWNrKS52YWx1ZSxcbmV4cGVjdGVkUGFzc1N0eWxlLFxuY2hlY2spJiYoXG5cbnR5cGVvZiBnZXRPd25EYXRhRGVzY3JpcHRvcih0YWdSZWNvcmQsU3ltYm9sLnRvU3RyaW5nVGFnLGZhbHNlLGNoZWNrKS5cbnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBBIFtTeW1ib2wudG9TdHJpbmdUYWddLW5hbWVkIHByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmc6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUHJvdG8odGFnUmVjb3JkLGdldFByb3RvdHlwZU9mKHRhZ1JlY29yZCksY2hlY2spKTtcblxuIH07XG5yZXR1cm4gaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcbiB9O1xuXG5jb25zdCAgICAgICAgY2hlY2tUYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuISFjaGVjayYmXG5jaGVjayhmYWxzZSxYIGBBIHRhZ1JlY29yZCBtdXN0IGluaGVyaXQgZnJvbSBPYmplY3QucHJvdG90eXBlOiAke3ZhbH1gKSk7JGjNj19vbmNlLmNoZWNrVGFnUmVjb3JkKGNoZWNrVGFnUmVjb3JkKTtcblxuaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcblxuY29uc3QgICAgICAgIGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5wcm90byE9PW51bGwmJmdldFByb3RvdHlwZU9mKHByb3RvKT09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbiEhY2hlY2smJlxuY2hlY2soXG5mYWxzZSxcblggYEZvciBmdW5jdGlvbnMsIGEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZTogJHt2YWx9YCkpOyRozY9fb25jZS5jaGVja0Z1bmN0aW9uVGFnUmVjb3JkKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQpO1xuXG5cbmhhcmRlbihjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Imhhc093blByb3BlcnR5T2YiOlsiaGFzT3duUHJvcGVydHlPZiJdLCJpc09iamVjdCI6WyJpc09iamVjdCJdLCJpc1R5cGVkQXJyYXkiOlsiaXNUeXBlZEFycmF5Il0sIlBBU1NfU1RZTEUiOlsiUEFTU19TVFlMRSJdLCJjYW5CZU1ldGhvZCI6WyJjYW5CZU1ldGhvZCJdLCJhc3NlcnRDaGVja2VyIjpbImFzc2VydENoZWNrZXIiXSwiQ1giOlsiQ1giXSwiZ2V0T3duRGF0YURlc2NyaXB0b3IiOlsiZ2V0T3duRGF0YURlc2NyaXB0b3IiXSwiZ2V0VGFnIjpbImdldFRhZyJdLCJjaGVja1Bhc3NTdHlsZSI6WyJjaGVja1Bhc3NTdHlsZSJdLCJjaGVja1RhZ1JlY29yZCI6WyJjaGVja1RhZ1JlY29yZCJdLCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIjpbImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAQ23Vyd8kAADfJAAAKgAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9wYXNzU3R5bGVPZi5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL2NvcHlBcnJheS5qcyIsIi4vY29weVJlY29yZC5qcyIsIi4vdGFnZ2VkLmpzIiwiLi9lcnJvci5qcyIsIi4vcmVtb3RhYmxlLmpzIiwiLi9zeW1ib2wuanMiLCIuL3NhZmUtcHJvbWlzZS5qcyIsIi4vc3RyaW5nLmpzIl0sImV4cG9ydHMiOlsiUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZSIsImlzUGFzc2FibGUiLCJwYXNzU3R5bGVPZiIsInRvUGFzc2FibGVFcnJvciIsInRvVGhyb3dhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLFgsRmFpbCxxLGFubm90YXRlRXJyb3IsbWFrZUVycm9yLGlzT2JqZWN0LGlzVHlwZWRBcnJheSxQQVNTX1NUWUxFLENvcHlBcnJheUhlbHBlcixDb3B5UmVjb3JkSGVscGVyLFRhZ2dlZEhlbHBlcixFcnJvckhlbHBlcixjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyxjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcixnZXRFcnJvckNvbnN0cnVjdG9yLGlzRXJyb3JMaWtlLFJlbW90YWJsZUhlbHBlcixhc3NlcnRQYXNzYWJsZVN5bWJvbCxhc3NlcnRTYWZlUHJvbWlzZSxhc3NlcnRQYXNzYWJsZVN0cmluZzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImlzVHlwZWRBcnJheVwiLCBbJGjNj19hID0+IChpc1R5cGVkQXJyYXkgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5QXJyYXkuanNcIiwgW1tcIkNvcHlBcnJheUhlbHBlclwiLCBbJGjNj19hID0+IChDb3B5QXJyYXlIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlSZWNvcmQuanNcIiwgW1tcIkNvcHlSZWNvcmRIZWxwZXJcIiwgWyRozY9fYSA9PiAoQ29weVJlY29yZEhlbHBlciA9ICRozY9fYSldXV1dLFtcIi4vdGFnZ2VkLmpzXCIsIFtbXCJUYWdnZWRIZWxwZXJcIiwgWyRozY9fYSA9PiAoVGFnZ2VkSGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9lcnJvci5qc1wiLCBbW1wiRXJyb3JIZWxwZXJcIiwgWyRozY9fYSA9PiAoRXJyb3JIZWxwZXIgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2NcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IgPSAkaM2PX2EpXV0sW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjNj19hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcIlJlbW90YWJsZUhlbHBlclwiLCBbJGjNj19hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N5bWJvbC5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV1dXSxbXCIuL3NhZmUtcHJvbWlzZS5qc1wiLCBbW1wiYXNzZXJ0U2FmZVByb21pc2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0U2FmZVByb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3N0cmluZy5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTdHJpbmdcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTdHJpbmcgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0Zyb3plbixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLHZhbHVlc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCBtYWtlSGVscGVyVGFibGU9KHBhc3NTdHlsZUhlbHBlcnMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEhlbHBlclRhYmxlPXtcbl9fcHJvdG9fXzpudWxsLFxuY29weUFycmF5OnVuZGVmaW5lZCxcbmNvcHlSZWNvcmQ6dW5kZWZpbmVkLFxudGFnZ2VkOnVuZGVmaW5lZCxcbmVycm9yOnVuZGVmaW5lZCxcbnJlbW90YWJsZTp1bmRlZmluZWR9O1xuXG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuY29uc3R7c3R5bGVOYW1lfT1oZWxwZXI7XG5zdHlsZU5hbWUgaW4gSGVscGVyVGFibGV8fEZhaWwgYFVucmVjb2duaXplZCBoZWxwZXI6ICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPT09dW5kZWZpbmVkfHxcbkZhaWwgYGNvbmZsaWN0aW5nIGhlbHBlcnMgZm9yICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPWhlbHBlcjtcbiB9XG5mb3IoY29uc3Qgc3R5bGVOYW1lIG9mIG93bktleXMoSGVscGVyVGFibGUpKXtcbkhlbHBlclRhYmxlW3N0eWxlTmFtZV0hPT11bmRlZmluZWR8fFxuRmFpbCBgbWlzc2luZyBoZWxwZXIgZm9yICR7cShzdHlsZU5hbWUpfWA7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKEhlbHBlclRhYmxlKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVBhc3NTdHlsZU9mPShwYXNzU3R5bGVIZWxwZXJzKT0+e1xuY29uc3QgSGVscGVyVGFibGU9bWFrZUhlbHBlclRhYmxlKHBhc3NTdHlsZUhlbHBlcnMpO1xuY29uc3QgcmVtb3RhYmxlSGVscGVyPUhlbHBlclRhYmxlLnJlbW90YWJsZTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcGFzc1N0eWxlTWVtbz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG4gICAqL1xuLy9cbmNvbnN0IHBhc3NTdHlsZU9mPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuLy9cbmNvbnN0IGluUHJvZ3Jlc3M9bmV3IFNldCgpO1xuXG5jb25zdCBwYXNzU3R5bGVPZlJlY3VyPShpbm5lcik9PntcbmNvbnN0IGlubmVySXNPYmplY3Q9aXNPYmplY3QoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5jb25zdCBpbm5lclN0eWxlPXBhc3NTdHlsZU1lbW8uZ2V0KGlubmVyKTtcbmlmKGlubmVyU3R5bGUpe1xucmV0dXJuIGlubmVyU3R5bGU7XG4gfVxuIWluUHJvZ3Jlc3MuaGFzKGlubmVyKXx8XG5GYWlsIGBQYXNzLWJ5LWNvcHkgZGF0YSBjYW5ub3QgYmUgY3ljbGljICR7aW5uZXJ9YDtcbmluUHJvZ3Jlc3MuYWRkKGlubmVyKTtcbiB9XG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mSW50ZXJuYWwoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5wYXNzU3R5bGVNZW1vLnNldChpbm5lcixwYXNzU3R5bGUpO1xuaW5Qcm9ncmVzcy5kZWxldGUoaW5uZXIpO1xuIH1cbnJldHVybiBwYXNzU3R5bGU7XG4gfTtcblxuY29uc3QgcGFzc1N0eWxlT2ZJbnRlcm5hbD0oaW5uZXIpPT57XG5jb25zdCB0eXBlc3RyPXR5cGVvZiBpbm5lcjtcbnN3aXRjaCh0eXBlc3RyKXtcbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6XG5jYXNlJ2JpZ2ludCc6e1xucmV0dXJuIHR5cGVzdHI7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmFzc2VydFBhc3NhYmxlU3RyaW5nKGlubmVyKTtcbnJldHVybidzdHJpbmcnO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChpbm5lcik7XG5yZXR1cm4nc3ltYm9sJztcbiB9XG5jYXNlJ29iamVjdCc6e1xuaWYoaW5uZXI9PT1udWxsKXtcbnJldHVybidudWxsJztcbiB9XG5pZighaXNGcm96ZW4oaW5uZXIpKXtcbmFzc2VydC5mYWlsKFxuLy9cbi8vXG5pc1R5cGVkQXJyYXkoaW5uZXIpP1xuWCBgQ2Fubm90IHBhc3MgbXV0YWJsZSB0eXBlZCBhcnJheXMgbGlrZSAke2lubmVyfS5gOlxuWCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWApO1xuXG4gfVxuaWYoaXNQcm9taXNlKGlubmVyKSl7XG5hc3NlcnRTYWZlUHJvbWlzZShpbm5lcik7XG5yZXR1cm4ncHJvbWlzZSc7XG4gfVxudHlwZW9mIGlubmVyLnRoZW4hPT0nZnVuY3Rpb24nfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1wcm9taXNlIHRoZW5hYmxlc2A7XG5jb25zdCBwYXNzU3R5bGVUYWc9aW5uZXJbUEFTU19TVFlMRV07XG5pZihwYXNzU3R5bGVUYWchPT11bmRlZmluZWQpe1xuYXNzZXJ0LnR5cGVvZihwYXNzU3R5bGVUYWcsJ3N0cmluZycpO1xuY29uc3QgaGVscGVyPUhlbHBlclRhYmxlW3Bhc3NTdHlsZVRhZ107XG5oZWxwZXIhPT11bmRlZmluZWR8fFxuRmFpbCBgVW5yZWNvZ25pemVkIFBhc3NTdHlsZTogJHtxKHBhc3NTdHlsZVRhZyl9YDtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICovcGFzc1N0eWxlVGFnKTtcbiB9XG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuaWYoaGVscGVyLmNhbkJlVmFsaWQoaW5uZXIpKXtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiBoZWxwZXIuc3R5bGVOYW1lO1xuIH1cbiB9XG5yZW1vdGFibGVIZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4ncmVtb3RhYmxlJztcbiB9XG5jYXNlJ2Z1bmN0aW9uJzp7XG5pc0Zyb3plbihpbm5lcil8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWA7XG50eXBlb2YgaW5uZXIudGhlbiE9PSdmdW5jdGlvbid8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLXByb21pc2UgdGhlbmFibGVzYDtcbnJlbW90YWJsZUhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybidyZW1vdGFibGUnO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoWCBgVW5yZWNvZ25pemVkIHR5cGVvZiAke3EodHlwZXN0cil9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9O1xuXG5yZXR1cm4gcGFzc1N0eWxlT2ZSZWN1cihwYXNzYWJsZSk7XG4gfTtcbnJldHVybiBoYXJkZW4ocGFzc1N0eWxlT2YpO1xuIH07XG5cbmNvbnN0ICAgICAgICBQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbD1TeW1ib2wuZm9yKCdAZW5kbyBwYXNzU3R5bGVPZicpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2woUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wpO1xuY29uc3QgICAgICAgIHBhc3NTdHlsZU9mPVxuZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpc1tQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbF18fFxubWFrZVBhc3NTdHlsZU9mKFtcbkNvcHlBcnJheUhlbHBlcixcbkNvcHlSZWNvcmRIZWxwZXIsXG5UYWdnZWRIZWxwZXIsXG5FcnJvckhlbHBlcixcblJlbW90YWJsZUhlbHBlcl0pOyRozY9fb25jZS5wYXNzU3R5bGVPZihwYXNzU3R5bGVPZik7XG5cblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlPSh2YWwpPT57XG5wYXNzU3R5bGVPZih2YWwpOy8vXG4gfTskaM2PX29uY2UuYXNzZXJ0UGFzc2FibGUoYXNzZXJ0UGFzc2FibGUpO1xuaGFyZGVuKGFzc2VydFBhc3NhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlPShzcGVjaW1lbik9PntcbnRyeXtcbi8vXG4vL1xucmV0dXJuIHBhc3NTdHlsZU9mKHNwZWNpbWVuKSE9PXVuZGVmaW5lZDtcbiB9Y2F0Y2goXyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH07JGjNj19vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG5oYXJkZW4oaXNQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0obmFtZSxkZXNjKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhuYW1lLGRlc2MscGFzc1N0eWxlT2YpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRvUGFzc2FibGVFcnJvcj0oZXJyKT0+e1xuaGFyZGVuKGVycik7XG5pZihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2YpKXtcbnJldHVybiBlcnI7XG4gfVxuY29uc3R7bmFtZSxtZXNzYWdlfT1lcnI7XG5jb25zdHtjYXVzZTpjYXVzZURlc2MsZXJyb3JzOmVycm9yc0Rlc2N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlcnIpO1xubGV0IGNhdXNlO1xubGV0IGVycm9ycztcbmlmKGNhdXNlRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdjYXVzZScsY2F1c2VEZXNjKSl7XG5jYXVzZT1jYXVzZURlc2MudmFsdWU7XG4gfVxuaWYoZXJyb3JzRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdlcnJvcnMnLGVycm9yc0Rlc2MpKXtcbmVycm9ycz1lcnJvcnNEZXNjLnZhbHVlO1xuIH1cblxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvciggYCR7bmFtZX1gKXx8RXJyb3I7XG5jb25zdCBuZXdFcnJvcj1tYWtlRXJyb3IoIGAke21lc3NhZ2V9YCxlcnJDb25zdHJ1Y3Rvcix7XG4vL1xuY2F1c2UsXG5lcnJvcnN9KTtcblxuLy9cbmhhcmRlbihuZXdFcnJvcik7XG4vL1xuLy9cbi8vXG5hbm5vdGF0ZUVycm9yKG5ld0Vycm9yLFggYGNvcGllZCBmcm9tIGVycm9yICR7ZXJyfWApO1xucGFzc1N0eWxlT2YobmV3RXJyb3IpPT09J2Vycm9yJ3x8XG5GYWlsIGBFeHBlY3RlZCAke25ld0Vycm9yfSB0byBiZSBhIHBhc3NhYmxlIGVycm9yYDtcbnJldHVybiBuZXdFcnJvcjtcbiB9OyRozY9fb25jZS50b1Bhc3NhYmxlRXJyb3IodG9QYXNzYWJsZUVycm9yKTtcbmhhcmRlbih0b1Bhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdG9UaHJvd2FibGU9KHNwZWNpbWVuKT0+e1xuaGFyZGVuKHNwZWNpbWVuKTtcbmlmKGlzRXJyb3JMaWtlKHNwZWNpbWVuKSl7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKC8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihzcGVjaW1lbik7XG5pZihpc09iamVjdChzcGVjaW1lbikpe1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuY29uc3QgZWxlbWVudHM9LyogICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cyl7XG5lbGVtZW50PT09dG9UaHJvd2FibGUoZWxlbWVudCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7ZWxlbWVudH1gO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmZvcihjb25zdCB2YWwgb2YgdmFsdWVzKHJlYykpe1xudmFsPT09dG9UaHJvd2FibGUodmFsKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHt2YWx9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGc9LyogICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuY29uc3R7cGF5bG9hZH09dGc7XG5wYXlsb2FkPT09dG9UaHJvd2FibGUocGF5bG9hZCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7cGF5bG9hZH1gO1xuYnJlYWs7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZXI9LyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmVyPT09dG9UaHJvd2FibGUoZXIpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VyfWA7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYEEgJHtxKHBhc3NTdHlsZSl9IGlzIG5vdCB0aHJvd2FibGU6ICR7c3BlY2ltZW59YDtcbiB9fVxuXG4gfVxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbik7XG4gfTskaM2PX29uY2UudG9UaHJvd2FibGUodG9UaHJvd2FibGUpO1xuaGFyZGVuKHRvVGhyb3dhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIjpbIlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIl0sInBhc3NTdHlsZU9mIjpbInBhc3NTdHlsZU9mIl0sImFzc2VydFBhc3NhYmxlIjpbImFzc2VydFBhc3NhYmxlIl0sImlzUGFzc2FibGUiOlsiaXNQYXNzYWJsZSJdLCJ0b1Bhc3NhYmxlRXJyb3IiOlsidG9QYXNzYWJsZUVycm9yIl0sInRvVGhyb3dhYmxlIjpbInRvVGhyb3dhYmxlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPZoi17VFwAA1RcAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvcmVtb3RhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJSZW1vdGFibGVIZWxwZXIiLCJhc3NlcnRJZmFjZSIsImdldEludGVyZmFjZU9mIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLGFzc2VydENoZWNrZXIsY2FuQmVNZXRob2QsaGFzT3duUHJvcGVydHlPZixQQVNTX1NUWUxFLGNoZWNrVGFnUmVjb3JkLGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQsaXNPYmplY3QsZ2V0VGFnLENYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImNhbkJlTWV0aG9kXCIsIFskaM2PX2EgPT4gKGNhbkJlTWV0aG9kID0gJGjNj19hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV0sW1wiY2hlY2tUYWdSZWNvcmRcIiwgWyRozY9fYSA9PiAoY2hlY2tUYWdSZWNvcmQgPSAkaM2PX2EpXV0sW1wiY2hlY2tGdW5jdGlvblRhZ1JlY29yZFwiLCBbJGjNj19hID0+IChjaGVja0Z1bmN0aW9uVGFnUmVjb3JkID0gJGjNj19hKV1dLFtcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtcbmdldFByb3RvdHlwZU9mLFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlLFxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309XG5PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBjaGVja0lmYWNlPShpZmFjZSxjaGVjayk9PntcbnJldHVybihcbi8vXG4odHlwZW9mIGlmYWNlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGb3Igbm93LCBpbnRlcmZhY2UgJHtpZmFjZX0gbXVzdCBiZSBhIHN0cmluZzsgdW5pbXBsZW1lbnRlZGApJiYoXG5pZmFjZT09PSdSZW1vdGFibGUnfHxcbmlmYWNlLnN0YXJ0c1dpdGgoJ0FsbGVnZWQ6ICcpfHxcbmlmYWNlLnN0YXJ0c1dpdGgoJ0RlYnVnTmFtZTogJyl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEZvciBub3csIGlmYWNlICR7cShcbmlmYWNlKVxuIH0gbXVzdCBiZSBcIlJlbW90YWJsZVwiIG9yIGJlZ2luIHdpdGggXCJBbGxlZ2VkOiBcIiBvciBcIkRlYnVnTmFtZTogXCI7IHVuaW1wbGVtZW50ZWRgKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydElmYWNlPShpZmFjZSk9PmNoZWNrSWZhY2UoaWZhY2UsYXNzZXJ0Q2hlY2tlcik7JGjNj19vbmNlLmFzc2VydElmYWNlKGFzc2VydElmYWNlKTtcbmhhcmRlbihhc3NlcnRJZmFjZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUmVtb3RhYmxlUHJvdG9PZj0ob3JpZ2luYWwsY2hlY2spPT57XG5pc09iamVjdChvcmlnaW5hbCl8fFxuRmFpbCBgUmVtb3RhYmxlcyBtdXN0IGJlIG9iamVjdHMgb3IgZnVuY3Rpb25zOiAke29yaWdpbmFsfWA7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgcHJvdG89Z2V0UHJvdG90eXBlT2Yob3JpZ2luYWwpO1xuaWYoXG5wcm90bz09PW9iamVjdFByb3RvdHlwZXx8XG5wcm90bz09PW51bGx8fFxucHJvdG89PT1GdW5jdGlvbi5wcm90b3R5cGUpXG57XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUmVtb3RhYmxlcyBtdXN0IGJlIGV4cGxpY2l0bHkgZGVjbGFyZWQ6ICR7cShvcmlnaW5hbCl9YCk7XG5cbiB9XG5cbmlmKHR5cGVvZiBvcmlnaW5hbD09PSdvYmplY3QnKXtcbmNvbnN0IHByb3RvUHJvdG89Z2V0UHJvdG90eXBlT2YocHJvdG8pO1xuaWYocHJvdG9Qcm90byE9PW9iamVjdFByb3RvdHlwZSYmcHJvdG9Qcm90byE9PW51bGwpe1xuLy9cbnJldHVybiBjaGVja1JlbW90YWJsZShwcm90byxjaGVjayk7XG4gfVxuaWYoIWNoZWNrVGFnUmVjb3JkKHByb3RvLCdyZW1vdGFibGUnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1lbHNlIGlmKHR5cGVvZiBvcmlnaW5hbD09PSdmdW5jdGlvbicpe1xuaWYoIWNoZWNrRnVuY3Rpb25UYWdSZWNvcmQocHJvdG8sJ3JlbW90YWJsZScsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxuXG4vL1xuY29uc3QgcGFzc1N0eWxlS2V5PS8qICAgICAgICAgICAgICAgICAgKi9QQVNTX1NUWUxFO1xuY29uc3QgdGFnS2V5PS8qICAgICAgICAgICAgICAgICAgKi9TeW1ib2wudG9TdHJpbmdUYWc7XG5jb25zdHtcbi8vXG5bLyogICAgICAgICAgICAgICAgICovcGFzc1N0eWxlS2V5XTpfcGFzc1N0eWxlRGVzYyxcblsvKiAgICAgICAgICAgICAgICAgKi90YWdLZXldOnt2YWx1ZTppZmFjZX0sXG4uLi5yZXN0RGVzY3N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhwcm90byk7XG5cbnJldHVybihcbihvd25LZXlzKHJlc3REZXNjcykubGVuZ3RoPT09MHx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFVuZXhwZWN0ZWQgcHJvcGVydGllcyBvbiBSZW1vdGFibGUgUHJvdG8gJHtvd25LZXlzKHJlc3REZXNjcyl9YCkmJlxuY2hlY2tJZmFjZShpZmFjZSxjaGVjaykpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjb25maXJtZWRSZW1vdGFibGVzPW5ldyBXZWFrU2V0KCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUmVtb3RhYmxlPSh2YWwsY2hlY2spPT57XG5pZihjb25maXJtZWRSZW1vdGFibGVzLmhhcyh2YWwpKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKCFpc0Zyb3plbih2YWwpKXtcbnJldHVybihcbiEhY2hlY2smJkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBub24tZnJvemVuIG9iamVjdHMgbGlrZSAke3ZhbH1gKTtcblxuIH1cbi8vXG5pZighUmVtb3RhYmxlSGVscGVyLmNhbkJlVmFsaWQodmFsLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgcmVzdWx0PWNoZWNrUmVtb3RhYmxlUHJvdG9PZih2YWwsY2hlY2spO1xuaWYocmVzdWx0KXtcbmNvbmZpcm1lZFJlbW90YWJsZXMuYWRkKHZhbCk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbnRlcmZhY2VPZj0odmFsKT0+e1xuaWYoXG4haXNPYmplY3QodmFsKXx8XG52YWxbUEFTU19TVFlMRV0hPT0ncmVtb3RhYmxlJ3x8XG4hY2hlY2tSZW1vdGFibGUodmFsKSlcbntcbi8vXG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbi8vXG5yZXR1cm4gZ2V0VGFnKHZhbCk7XG4gfTskaM2PX29uY2UuZ2V0SW50ZXJmYWNlT2YoZ2V0SW50ZXJmYWNlT2YpO1xuaGFyZGVuKGdldEludGVyZmFjZU9mKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBSZW1vdGFibGVIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZToncmVtb3RhYmxlJyxcblxuY2FuQmVWYWxpZDooY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbmNvbnN0IHZhbGlkVHlwZT1cbihpc09iamVjdChjYW5kaWRhdGUpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIG5vbi1vYmplY3RzIGFzIFJlbW90YWJsZSAke2NhbmRpZGF0ZX1gKSYmKFxuIWlzQXJyYXkoY2FuZGlkYXRlKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBhcnJheXMgYXMgUmVtb3RhYmxlICR7Y2FuZGlkYXRlfWApO1xuaWYoIXZhbGlkVHlwZSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGNhbmRpZGF0ZSk7XG5pZih0eXBlb2YgY2FuZGlkYXRlPT09J29iamVjdCcpe1xuLy9cbi8vXG5yZXR1cm4gb3duS2V5cyhkZXNjcykuZXZlcnkoKGtleSk9PntcbnJldHVybihcbi8vXG4oaGFzT3duUHJvcGVydHlPZihkZXNjc1svKiAgICAgICAgICAgICAgICAgKi9rZXldLCd2YWx1ZScpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIFJlbW90YWJsZXMgd2l0aCBhY2Nlc3NvcnMgbGlrZSAke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGluICR7Y2FuZGlkYXRlfWApJiYoXG5rZXk9PT1TeW1ib2wudG9TdHJpbmdUYWcmJmNoZWNrSWZhY2UoY2FuZGlkYXRlW2tleV0sY2hlY2spfHxcbihjYW5CZU1ldGhvZChjYW5kaWRhdGVba2V5XSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgUmVtb3RhYmxlcyB3aXRoIG5vbi1tZXRob2RzIGxpa2UgJHtxKFxuU3RyaW5nKGtleSkpXG4gfSBpbiAke2NhbmRpZGF0ZX1gKSYmKFxua2V5IT09UEFTU19TVFlMRXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgQSBwYXNzLWJ5LXJlbW90ZSBjYW5ub3Qgc2hhZG93ICR7cShQQVNTX1NUWUxFKX1gKSkpO1xuXG4gfSk7XG4gfWVsc2UgaWYodHlwZW9mIGNhbmRpZGF0ZT09PSdmdW5jdGlvbicpe1xuLy9cbi8vXG5jb25zdHtcbm5hbWU6bmFtZURlc2MsXG5sZW5ndGg6bGVuZ3RoRGVzYyxcbi8vXG5bU3ltYm9sLnRvU3RyaW5nVGFnXTp0b1N0cmluZ1RhZ0Rlc2MsXG4uLi5yZXN0RGVzY3N9PVxuZGVzY3M7XG5jb25zdCByZXN0S2V5cz1vd25LZXlzKHJlc3REZXNjcyk7XG5yZXR1cm4oXG4obmFtZURlc2MmJnR5cGVvZiBuYW1lRGVzYy52YWx1ZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBGYXIgZnVuY3Rpb24gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLCBpbiAke2NhbmRpZGF0ZX1gKSYmKFxubGVuZ3RoRGVzYyYmdHlwZW9mIGxlbmd0aERlc2MudmFsdWU9PT0nbnVtYmVyJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZhciBmdW5jdGlvbiBsZW5ndGggbXVzdCBiZSBhIG51bWJlciwgaW4gJHtjYW5kaWRhdGV9YCkmJihcbnRvU3RyaW5nVGFnRGVzYz09PXVuZGVmaW5lZHx8XG4odHlwZW9mIHRvU3RyaW5nVGFnRGVzYy52YWx1ZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRmFyIGZ1bmN0aW9uIEBAdG9TdHJpbmdUYWcgbXVzdCBiZSBhIHN0cmluZywgaW4gJHtjYW5kaWRhdGV9YCkmJlxuY2hlY2tJZmFjZSh0b1N0cmluZ1RhZ0Rlc2MudmFsdWUsY2hlY2spKSYmKFxucmVzdEtleXMubGVuZ3RoPT09MHx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZhciBmdW5jdGlvbnMgdW5leHBlY3RlZCBwcm9wZXJ0aWVzIGJlc2lkZXMgLm5hbWUgYW5kIC5sZW5ndGggJHtyZXN0S2V5c31gKSk7XG5cbiB9XG5yZXR1cm4hIWNoZWNrJiZDWChjaGVjaykgYHVucmVjb2duaXplZCB0eXBlb2YgJHtjYW5kaWRhdGV9YDtcbiB9LFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlKT0+Y2hlY2tSZW1vdGFibGUoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpLFxuXG5ldmVyeTooX3Bhc3NhYmxlLF9mbik9PnRydWV9KTskaM2PX29uY2UuUmVtb3RhYmxlSGVscGVyKFJlbW90YWJsZUhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3NlcnRJZmFjZSI6WyJhc3NlcnRJZmFjZSJdLCJnZXRJbnRlcmZhY2VPZiI6WyJnZXRJbnRlcmZhY2VPZiJdLCJSZW1vdGFibGVIZWxwZXIiOlsiUmVtb3RhYmxlSGVscGVyIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAfx1kK1DAAAtQwAACsAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvc2FmZS1wcm9taXNlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbImFzc2VydFNhZmVQcm9taXNlIiwiaXNTYWZlUHJvbWlzZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGlzUHJvbWlzZSxxLGFzc2VydENoZWNrZXIsaGFzT3duUHJvcGVydHlPZixDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7aXNGcm96ZW4sZ2V0UHJvdG90eXBlT2YsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7dG9TdHJpbmdUYWd9PVN5bWJvbDtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tQcm9taXNlT3duS2V5cz0ocHIsY2hlY2spPT57XG5jb25zdCBrZXlzPW93bktleXMocHIpO1xuXG5pZihrZXlzLmxlbmd0aD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgdW5rbm93bktleXM9a2V5cy5maWx0ZXIoXG4oa2V5KT0+dHlwZW9mIGtleSE9PSdzeW1ib2wnfHwhaGFzT3duUHJvcGVydHlPZihQcm9taXNlLnByb3RvdHlwZSxrZXkpKTtcblxuXG5pZih1bmtub3duS2V5cy5sZW5ndGghPT0wKXtcbnJldHVybiBDWChcbmNoZWNrKVxuIGAke3ByfSAtIE11c3Qgbm90IGhhdmUgYW55IG93biBwcm9wZXJ0aWVzOiAke3EodW5rbm93bktleXMpfWA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tTYWZlT3duS2V5PShrZXkpPT57XG5pZihrZXk9PT10b1N0cmluZ1RhZyl7XG4vL1xuLy9cbmNvbnN0IHRhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByLHRvU3RyaW5nVGFnKTtcbmFzc2VydCh0YWdEZXNjIT09dW5kZWZpbmVkKTtcbnJldHVybihcbihoYXNPd25Qcm9wZXJ0eU9mKHRhZ0Rlc2MsJ3ZhbHVlJyl8fFxuQ1goXG5jaGVjaylcbiBgT3duIEBAdG9TdHJpbmdUYWcgbXVzdCBiZSBhIGRhdGEgcHJvcGVydHksIG5vdCBhbiBhY2Nlc3NvcjogJHtxKHRhZ0Rlc2MpfWApJiYoXG50eXBlb2YgdGFnRGVzYy52YWx1ZT09PSdzdHJpbmcnfHxcbkNYKFxuY2hlY2spXG4gYE93biBAQHRvU3RyaW5nVGFnIHZhbHVlIG11c3QgYmUgYSBzdHJpbmc6ICR7cSh0YWdEZXNjLnZhbHVlKX1gKSYmKFxuIXRhZ0Rlc2MuZW51bWVyYWJsZXx8XG5DWChjaGVjaykgYE93biBAQHRvU3RyaW5nVGFnIG11c3Qgbm90IGJlIGVudW1lcmFibGU6ICR7cSh0YWdEZXNjKX1gKSk7XG5cbiB9XG5jb25zdCB2YWw9cHJba2V5XTtcbmlmKHZhbD09PXVuZGVmaW5lZHx8dHlwZW9mIHZhbD09PSdudW1iZXInKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKFxudHlwZW9mIHZhbD09PSdvYmplY3QnJiZcbnZhbCE9PW51bGwmJlxuaXNGcm96ZW4odmFsKSYmXG5nZXRQcm90b3R5cGVPZih2YWwpPT09T2JqZWN0LnByb3RvdHlwZSlcbntcbmNvbnN0IHN1YktleXM9b3duS2V5cyh2YWwpO1xuaWYoc3ViS2V5cy5sZW5ndGg9PT0wKXtcbnJldHVybiB0cnVlO1xuIH1cblxuaWYoXG5zdWJLZXlzLmxlbmd0aD09PTEmJlxuc3ViS2V5c1swXT09PSdkZXN0cm95ZWQnJiZcbnZhbC5kZXN0cm95ZWQ9PT1mYWxzZSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gQ1goXG5jaGVjaylcbiBgVW5leHBlY3RlZCBOb2RlIGFzeW5jX2hvb2tzIGFkZGl0aW9ucyB0byBwcm9taXNlOiAke3ByfS4ke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGlzICR7dmFsfWA7XG4gfTtcblxucmV0dXJuIGtleXMuZXZlcnkoY2hlY2tTYWZlT3duS2V5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tTYWZlUHJvbWlzZT0ocHIsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNGcm96ZW4ocHIpfHxDWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBiZSBmcm96ZW5gKSYmKFxuaXNQcm9taXNlKHByKXx8Q1goY2hlY2spIGAke3ByfSAtIE11c3QgYmUgYSBwcm9taXNlYCkmJihcbmdldFByb3RvdHlwZU9mKHByKT09PVByb21pc2UucHJvdG90eXBlfHxcbkNYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGluaGVyaXQgZnJvbSBQcm9taXNlLnByb3RvdHlwZTogJHtxKFxuZ2V0UHJvdG90eXBlT2YocHIpKVxuIH1gKSYmXG5jaGVja1Byb21pc2VPd25LZXlzKC8qICAgICAgICAgICAgICAgICAgKi9wcixjaGVjaykpO1xuXG4gfTtcbmhhcmRlbihjaGVja1NhZmVQcm9taXNlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNTYWZlUHJvbWlzZT0ocHIpPT5jaGVja1NhZmVQcm9taXNlKHByLCh4KT0+eCk7JGjNj19vbmNlLmlzU2FmZVByb21pc2UoaXNTYWZlUHJvbWlzZSk7XG5oYXJkZW4oaXNTYWZlUHJvbWlzZSk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRTYWZlUHJvbWlzZT0ocHIpPT5jaGVja1NhZmVQcm9taXNlKHByLGFzc2VydENoZWNrZXIpOyRozY9fb25jZS5hc3NlcnRTYWZlUHJvbWlzZShhc3NlcnRTYWZlUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1NhZmVQcm9taXNlIjpbImlzU2FmZVByb21pc2UiXSwiYXNzZXJ0U2FmZVByb21pc2UiOlsiYXNzZXJ0U2FmZVByb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAALmnjqOEHAADhBwAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9zdHJpbmcuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJpc1dlbGxGb3JtZWRTdHJpbmciXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8vXG5jb25zdCBoYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kPSEhU3RyaW5nLnByb3RvdHlwZS5pc1dlbGxGb3JtZWQ7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNXZWxsRm9ybWVkU3RyaW5nPWhhc1dlbGxGb3JtZWRTdHJpbmdNZXRob2Q/XG4oc3RyKT0+dHlwZW9mIHN0cj09PSdzdHJpbmcnJiZzdHIuaXNXZWxsRm9ybWVkKCk6XG4oc3RyKT0+e1xuaWYodHlwZW9mIHN0ciE9PSdzdHJpbmcnKXtcbnJldHVybiBmYWxzZTtcbiB9XG5mb3IoY29uc3QgY2ggb2Ygc3RyKXtcbi8vXG4vL1xuLy9cbmNvbnN0IGNwPS8qICAgICAgICAgICAgICAgICAqL2NoLmNvZGVQb2ludEF0KDApO1xuaWYoY3A+PTB4ZDgwMCYmY3A8PTB4ZGZmZil7XG4vL1xuLy9cbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmlzV2VsbEZvcm1lZFN0cmluZyhpc1dlbGxGb3JtZWRTdHJpbmcpO1xuaGFyZGVuKGlzV2VsbEZvcm1lZFN0cmluZyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0V2VsbEZvcm1lZFN0cmluZz0oc3RyKT0+e1xuaXNXZWxsRm9ybWVkU3RyaW5nKHN0cil8fEZhaWwgYEV4cGVjdGVkIHdlbGwtZm9ybWVkIHVuaWNvZGUgc3RyaW5nOiAke3N0cn1gO1xuIH07JGjNj19vbmNlLmFzc2VydFdlbGxGb3JtZWRTdHJpbmcoYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5oYXJkZW4oYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5cbmNvbnN0IE9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRT1cbmdldEVudmlyb25tZW50T3B0aW9uKCdPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEUnLCdkaXNhYmxlZCcsW1xuJ2VuYWJsZWQnXSk9PT1cbidlbmFibGVkJztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3RyaW5nPShzdHIpPT57XG50eXBlb2Ygc3RyPT09J3N0cmluZyd8fEZhaWwgYEV4cGVjdGVkIHN0cmluZyAke3N0cn1gO1xuIU9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRXx8YXNzZXJ0V2VsbEZvcm1lZFN0cmluZyhzdHIpO1xuIH07JGjNj19vbmNlLmFzc2VydFBhc3NhYmxlU3RyaW5nKGFzc2VydFBhc3NhYmxlU3RyaW5nKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1dlbGxGb3JtZWRTdHJpbmciOlsiaXNXZWxsRm9ybWVkU3RyaW5nIl0sImFzc2VydFdlbGxGb3JtZWRTdHJpbmciOlsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRQYXNzYWJsZVN0cmluZyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAFz1lyKwoAACsKAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3N5bWJvbC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG4gKi9cbmNvbnN0IHdlbGxLbm93blN5bWJvbE5hbWVzPW5ldyBNYXAoXG5vd25LZXlzKFN5bWJvbCkuXG5maWx0ZXIoXG4obmFtZSk9PnR5cGVvZiBuYW1lPT09J3N0cmluZycmJnR5cGVvZiBTeW1ib2xbbmFtZV09PT0nc3ltYm9sJykuXG5cbmZpbHRlcigobmFtZSk9Pntcbi8vXG4hbmFtZS5zdGFydHNXaXRoKCdAQCcpfHxcbkZhaWwgYERpZCBub3QgZXhwZWN0IFN5bWJvbCB0byBoYXZlIGEgc3ltYm9sLXZhbHVlZCBwcm9wZXJ0eSBuYW1lIHN0YXJ0aW5nIHdpdGggXCJAQFwiICR7cShcbm5hbWUpXG4gfWA7XG5yZXR1cm4gdHJ1ZTtcbiB9KVxuLy9cbi5tYXAoKG5hbWUpPT5bU3ltYm9sW25hbWVdLCBgQEAke25hbWV9YF0pKTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQYXNzYWJsZVN5bWJvbD0oc3ltKT0+XG50eXBlb2Ygc3ltPT09J3N5bWJvbCcmJihcbnR5cGVvZiBTeW1ib2wua2V5Rm9yKHN5bSk9PT0nc3RyaW5nJ3x8d2VsbEtub3duU3ltYm9sTmFtZXMuaGFzKHN5bSkpOyRozY9fb25jZS5pc1Bhc3NhYmxlU3ltYm9sKGlzUGFzc2FibGVTeW1ib2wpO1xuaGFyZGVuKGlzUGFzc2FibGVTeW1ib2wpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0UGFzc2FibGVTeW1ib2w9KHN5bSk9PlxuaXNQYXNzYWJsZVN5bWJvbChzeW0pfHxcbkZhaWwgYE9ubHkgcmVnaXN0ZXJlZCBzeW1ib2xzIG9yIHdlbGwta25vd24gc3ltYm9scyBhcmUgcGFzc2FibGU6ICR7cShzeW0pfWA7JGjNj19vbmNlLmFzc2VydFBhc3NhYmxlU3ltYm9sKGFzc2VydFBhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZVN5bWJvbCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG5hbWVGb3JQYXNzYWJsZVN5bWJvbD0oc3ltKT0+e1xuY29uc3QgbmFtZT1TeW1ib2wua2V5Rm9yKHN5bSk7XG5pZihuYW1lPT09dW5kZWZpbmVkKXtcbnJldHVybiB3ZWxsS25vd25TeW1ib2xOYW1lcy5nZXQoc3ltKTtcbiB9XG5pZihuYW1lLnN0YXJ0c1dpdGgoJ0BAJykpe1xucmV0dXJuIGBAQCR7bmFtZX1gO1xuIH1cbnJldHVybiBuYW1lO1xuIH07JGjNj19vbmNlLm5hbWVGb3JQYXNzYWJsZVN5bWJvbChuYW1lRm9yUGFzc2FibGVTeW1ib2wpO1xuaGFyZGVuKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCk7XG5cbmNvbnN0IEF0QXRQcmVmaXhQYXR0ZXJuPS9eQEAoLiopJC87XG5oYXJkZW4oQXRBdFByZWZpeFBhdHRlcm4pO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhc3NhYmxlU3ltYm9sRm9yTmFtZT0obmFtZSk9PntcbmlmKHR5cGVvZiBuYW1lIT09J3N0cmluZycpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jb25zdCBtYXRjaD1BdEF0UHJlZml4UGF0dGVybi5leGVjKG5hbWUpO1xuaWYobWF0Y2gpe1xuY29uc3Qgc3VmZml4PW1hdGNoWzFdO1xuaWYoc3VmZml4LnN0YXJ0c1dpdGgoJ0BAJykpe1xucmV0dXJuIFN5bWJvbC5mb3Ioc3VmZml4KTtcbiB9ZWxzZXtcbmNvbnN0IHN5bT1TeW1ib2xbc3VmZml4XTtcbmlmKHR5cGVvZiBzeW09PT0nc3ltYm9sJyl7XG5yZXR1cm4gc3ltO1xuIH1cbkZhaWwgYFJlc2VydmVkIGZvciB3ZWxsIGtub3duIHN5bWJvbCAke3Eoc3VmZml4KX06ICR7cShuYW1lKX1gO1xuIH1cbiB9XG5yZXR1cm4gU3ltYm9sLmZvcihuYW1lKTtcbiB9OyRozY9fb25jZS5wYXNzYWJsZVN5bWJvbEZvck5hbWUocGFzc2FibGVTeW1ib2xGb3JOYW1lKTtcbmhhcmRlbihwYXNzYWJsZVN5bWJvbEZvck5hbWUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQYXNzYWJsZVN5bWJvbCI6WyJpc1Bhc3NhYmxlU3ltYm9sIl0sImFzc2VydFBhc3NhYmxlU3ltYm9sIjpbImFzc2VydFBhc3NhYmxlU3ltYm9sIl0sIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCI6WyJuYW1lRm9yUGFzc2FibGVTeW1ib2wiXSwicGFzc2FibGVTeW1ib2xGb3JOYW1lIjpbInBhc3NhYmxlU3ltYm9sRm9yTmFtZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADi+PtLQwcAAEMHAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3RhZ2dlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiVGFnZ2VkSGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxhc3NlcnRDaGVja2VyLGNoZWNrVGFnUmVjb3JkLFBBU1NfU1RZTEUsZ2V0T3duRGF0YURlc2NyaXB0b3IsY2hlY2tQYXNzU3R5bGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjaGVja1RhZ1JlY29yZFwiLCBbJGjNj19hID0+IChjaGVja1RhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV0sW1wiY2hlY2tQYXNzU3R5bGVcIiwgWyRozY9fYSA9PiAoY2hlY2tQYXNzU3R5bGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRhZ2dlZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOid0YWdnZWQnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+XG5jaGVja1Bhc3NTdHlsZShjYW5kaWRhdGUsY2FuZGlkYXRlW1BBU1NfU1RZTEVdLCd0YWdnZWQnLGNoZWNrKSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tUYWdSZWNvcmQoY2FuZGlkYXRlLCd0YWdnZWQnLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuY29uc3QgcGFzc1N0eWxlS2V5PS8qICAgICAgICAgICAgICAgICAgKi9QQVNTX1NUWUxFO1xuY29uc3QgdGFnS2V5PS8qICAgICAgICAgICAgICAgICAgKi9TeW1ib2wudG9TdHJpbmdUYWc7XG5jb25zdHtcbi8vXG5bLyogICAgICAgICAgICAgICAgICovcGFzc1N0eWxlS2V5XTpfcGFzc1N0eWxlRGVzYyxcblsvKiAgICAgICAgICAgICAgICAgKi90YWdLZXldOl9sYWJlbERlc2MsXG5wYXlsb2FkOl9wYXlsb2FkRGVzYywvL1xuLi4ucmVzdERlc2NzfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbm93bktleXMocmVzdERlc2NzKS5sZW5ndGg9PT0wfHxcbkZhaWwgYFVuZXhwZWN0ZWQgcHJvcGVydGllcyBvbiB0YWdnZWQgcmVjb3JkICR7b3duS2V5cyhyZXN0RGVzY3MpfWA7XG5cbi8vXG4vL1xucGFzc1N0eWxlT2ZSZWN1cihcbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSwncGF5bG9hZCcsdHJ1ZSxhc3NlcnRDaGVja2VyKS52YWx1ZSk7XG5cbiB9fSk7JGjNj19vbmNlLlRhZ2dlZEhlbHBlcihUYWdnZWRIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVGFnZ2VkSGVscGVyIjpbIlRhZ2dlZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACKS8Q2JwkAACcJAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbImFzc2VydENvcHlBcnJheSIsImFzc2VydFJlY29yZCIsImFzc2VydFJlbW90YWJsZSIsImlzQ29weUFycmF5IiwiaXNSZWNvcmQiLCJpc1JlbW90YWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxwYXNzU3R5bGVPZjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlT2YuanNcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgaXNDb3B5QXJyYXk9KGFycik9PnBhc3NTdHlsZU9mKGFycik9PT0nY29weUFycmF5JzskaM2PX29uY2UuaXNDb3B5QXJyYXkoaXNDb3B5QXJyYXkpO1xuaGFyZGVuKGlzQ29weUFycmF5KTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVjb3JkPShyZWNvcmQpPT5wYXNzU3R5bGVPZihyZWNvcmQpPT09J2NvcHlSZWNvcmQnOyRozY9fb25jZS5pc1JlY29yZChpc1JlY29yZCk7XG5oYXJkZW4oaXNSZWNvcmQpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVtb3RhYmxlPShyZW1vdGFibGUpPT5wYXNzU3R5bGVPZihyZW1vdGFibGUpPT09J3JlbW90YWJsZSc7JGjNj19vbmNlLmlzUmVtb3RhYmxlKGlzUmVtb3RhYmxlKTtcbmhhcmRlbihpc1JlbW90YWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvcHlBcnJheT0oYXJyLG9wdE5hbWVPZkFycmF5PSdBbGxlZ2VkIGFycmF5Jyk9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihhcnIpO1xucGFzc1N0eWxlPT09J2NvcHlBcnJheSd8fFxuRmFpbCBgJHtxKG9wdE5hbWVPZkFycmF5KX0gJHthcnJ9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgYXJyYXksIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weUFycmF5KGFzc2VydENvcHlBcnJheSk7XG5oYXJkZW4oYXNzZXJ0Q29weUFycmF5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0UmVjb3JkPShyZWNvcmQsb3B0TmFtZU9mUmVjb3JkPSdBbGxlZ2VkIHJlY29yZCcpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmVjb3JkKTtcbnBhc3NTdHlsZT09PSdjb3B5UmVjb3JkJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVjb3JkKX0gJHtyZWNvcmR9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgcmVjb3JkLCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydFJlY29yZChhc3NlcnRSZWNvcmQpO1xuaGFyZGVuKGFzc2VydFJlY29yZCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlbW90YWJsZT0oXG5yZW1vdGFibGUsXG5vcHROYW1lT2ZSZW1vdGFibGU9J0FsbGVnZWQgcmVtb3RhYmxlJyk9Plxue1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlbW90YWJsZSk7XG5wYXNzU3R5bGU9PT0ncmVtb3RhYmxlJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVtb3RhYmxlKX0gJHtyZW1vdGFibGV9IG11c3QgYmUgYSByZW1vdGFibGUsIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0UmVtb3RhYmxlKGFzc2VydFJlbW90YWJsZSk7XG5oYXJkZW4oYXNzZXJ0UmVtb3RhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzQ29weUFycmF5IjpbImlzQ29weUFycmF5Il0sImlzUmVjb3JkIjpbImlzUmVjb3JkIl0sImlzUmVtb3RhYmxlIjpbImlzUmVtb3RhYmxlIl0sImFzc2VydENvcHlBcnJheSI6WyJhc3NlcnRDb3B5QXJyYXkiXSwiYXNzZXJ0UmVjb3JkIjpbImFzc2VydFJlY29yZCJdLCJhc3NlcnRSZW1vdGFibGUiOlsiYXNzZXJ0UmVtb3RhYmxlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAVESyZ5AQAAeQEAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA8LU7RuYOAADmDgAAHgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuOC9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzIiwiLi9zcmMva2V5cy9jb3B5U2V0LmpzIiwiLi9zcmMva2V5cy9jb3B5QmFnLmpzIiwiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qcyIsIi4vc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qcyIsIi4vc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qcyIsIi4vc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qcyIsIi4vc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiLCIuL3NyYy90eXBlcy5qcyIsIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyJdLCJleHBvcnRzIjpbImFzc2VydEtleSIsImFzc2VydEtleSIsImJhZ1VuaW9uIiwiYmFnVW5pb24iLCJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzRGlzam9pbnQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRSYW5rQ292ZXIiLCJnZXRSYW5rQ292ZXIiLCJzZXRDb21wYXJlIiwic2V0Q29tcGFyZSIsbnVsbCxudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL2NvcHlTZXQuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvY29weUJhZy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanNcIiwgW11dLFtcIi4vc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMva2V5cy9jaGVja0tleS5qcyI6W1siaXNLZXkiLCJpc0tleSJdLFsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5Il0sWyJhc3NlcnRTY2FsYXJLZXkiLCJhc3NlcnRTY2FsYXJLZXkiXSxbImlzQ29weVNldCIsImlzQ29weVNldCJdLFsiYXNzZXJ0Q29weVNldCIsImFzc2VydENvcHlTZXQiXSxbIm1ha2VDb3B5U2V0IiwibWFrZUNvcHlTZXQiXSxbImdldENvcHlTZXRLZXlzIiwiZ2V0Q29weVNldEtleXMiXSxbImlzQ29weUJhZyIsImlzQ29weUJhZyJdLFsiYXNzZXJ0Q29weUJhZyIsImFzc2VydENvcHlCYWciXSxbIm1ha2VDb3B5QmFnIiwibWFrZUNvcHlCYWciXSxbIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiXSxbImdldENvcHlCYWdFbnRyaWVzIiwiZ2V0Q29weUJhZ0VudHJpZXMiXSxbImlzQ29weU1hcCIsImlzQ29weU1hcCJdLFsiYXNzZXJ0Q29weU1hcCIsImFzc2VydENvcHlNYXAiXSxbIm1ha2VDb3B5TWFwIiwibWFrZUNvcHlNYXAiXSxbImdldENvcHlNYXBFbnRyaWVzIiwiZ2V0Q29weU1hcEVudHJpZXMiXV0sIi4vc3JjL2tleXMvY29weVNldC5qcyI6W1siY29lcmNlVG9FbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiXV0sIi4vc3JjL2tleXMvY29weUJhZy5qcyI6W1siY29lcmNlVG9CYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIl1dLCIuL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzIjpbWyJiYWdDb21wYXJlIiwiYmFnQ29tcGFyZSJdLFsic2V0Q29tcGFyZSIsInNldENvbXBhcmUiXSxbImNvbXBhcmVLZXlzIiwiY29tcGFyZUtleXMiXSxbImtleUxUIiwia2V5TFQiXSxbImtleUxURSIsImtleUxURSJdLFsia2V5RVEiLCJrZXlFUSJdLFsia2V5R1RFIiwia2V5R1RFIl0sWyJrZXlHVCIsImtleUdUIl1dLCIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiOltbImVsZW1lbnRzSXNTdXBlcnNldCIsImVsZW1lbnRzSXNTdXBlcnNldCJdLFsiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50Il0sWyJlbGVtZW50c0NvbXBhcmUiLCJlbGVtZW50c0NvbXBhcmUiXSxbImVsZW1lbnRzVW5pb24iLCJlbGVtZW50c1VuaW9uIl0sWyJlbGVtZW50c0Rpc2pvaW50VW5pb24iLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSxbImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSxbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLFsic2V0SXNTdXBlcnNldCIsInNldElzU3VwZXJzZXQiXSxbInNldElzRGlzam9pbnQiLCJzZXRJc0Rpc2pvaW50Il0sWyJzZXRVbmlvbiIsInNldFVuaW9uIl0sWyJzZXREaXNqb2ludFVuaW9uIiwic2V0RGlzam9pbnRVbmlvbiJdLFsic2V0SW50ZXJzZWN0aW9uIiwic2V0SW50ZXJzZWN0aW9uIl0sWyJzZXREaXNqb2ludFN1YnRyYWN0Iiwic2V0RGlzam9pbnRTdWJ0cmFjdCJdXSwiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIjpbWyJiYWdJc1N1cGVyYmFnIiwiYmFnSXNTdXBlcmJhZyJdLFsiYmFnVW5pb24iLCJiYWdVbmlvbiJdLFsiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSW50ZXJzZWN0aW9uIl0sWyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnRGlzam9pbnRTdWJ0cmFjdCJdXSwiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIjpbWyJNIiwiTSJdLFsiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIl0sWyJpc1BhdHRlcm4iLCJpc1BhdHRlcm4iXSxbImFzc2VydFBhdHRlcm4iLCJhc3NlcnRQYXR0ZXJuIl0sWyJtYXRjaGVzIiwibWF0Y2hlcyJdLFsibXVzdE1hdGNoIiwibXVzdE1hdGNoIl0sWyJpc0F3YWl0QXJnR3VhcmQiLCJpc0F3YWl0QXJnR3VhcmQiXSxbImFzc2VydEF3YWl0QXJnR3VhcmQiLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIl0sWyJpc1Jhd0d1YXJkIiwiaXNSYXdHdWFyZCJdLFsiYXNzZXJ0UmF3R3VhcmQiLCJhc3NlcnRSYXdHdWFyZCJdLFsiYXNzZXJ0TWV0aG9kR3VhcmQiLCJhc3NlcnRNZXRob2RHdWFyZCJdLFsiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCJdLFsia2luZE9mIiwia2luZE9mIl1dLCIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIjpbWyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCIsImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIl0sWyJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiXSxbImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCIsImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCJdLFsiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyIsImdldEludGVyZmFjZU1ldGhvZEtleXMiXV0sIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOltbImxpc3REaWZmZXJlbmNlIiwibGlzdERpZmZlcmVuY2UiXV0sIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjpbWyJvYmplY3RNYXAiLCJvYmplY3RNYXAiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMzG/TxoMgAAaDIAACoAAABAZW5kby9wYXR0ZXJucy12MS40Ljgvc3JjL2tleXMvY2hlY2tLZXkuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9jb3B5U2V0LmpzIiwiLi9jb3B5QmFnLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29weUJhZyIsImFzc2VydENvcHlNYXAiLCJhc3NlcnRDb3B5U2V0IiwiYXNzZXJ0S2V5IiwiYXNzZXJ0UHJpbWl0aXZlS2V5IiwiYXNzZXJ0U2NhbGFyS2V5IiwiY2hlY2tDb3B5QmFnIiwiY2hlY2tDb3B5TWFwIiwiY2hlY2tDb3B5U2V0IiwiY2hlY2tLZXkiLCJjaGVja1NjYWxhcktleSIsImNvcHlNYXBLZXlTZXQiLCJldmVyeUNvcHlCYWdFbnRyeSIsImV2ZXJ5Q29weU1hcEtleSIsImV2ZXJ5Q29weU1hcFZhbHVlIiwiZXZlcnlDb3B5U2V0S2V5IiwiZ2V0Q29weUJhZ0VudHJpZXMiLCJnZXRDb3B5TWFwRW50cmllcyIsImdldENvcHlNYXBFbnRyeUFycmF5IiwiZ2V0Q29weU1hcEtleXMiLCJnZXRDb3B5TWFwVmFsdWVzIiwiZ2V0Q29weVNldEtleXMiLCJpc0NvcHlCYWciLCJpc0NvcHlNYXAiLCJpc0NvcHlTZXQiLCJpc0tleSIsImlzUHJpbWl0aXZlS2V5IiwiaXNTY2FsYXJLZXkiLCJtYWtlQ29weUJhZyIsIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlNYXAiLCJtYWtlQ29weVNldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsYXNzZXJ0UGFzc2FibGUsRmFyLGdldFRhZyxpc09iamVjdCxtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLGlkZW50Q2hlY2tlcixYLHEsRmFpbCxjaGVja0VsZW1lbnRzLG1ha2VTZXRPZkVsZW1lbnRzLGNoZWNrQmFnRW50cmllcyxtYWtlQmFnT2ZFbnRyaWVzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qc1wiLCBbW1wiaWRlbnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGlkZW50Q2hlY2tlciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlTZXQuanNcIiwgW1tcImNoZWNrRWxlbWVudHNcIiwgWyRozY9fYSA9PiAoY2hlY2tFbGVtZW50cyA9ICRozY9fYSldXSxbXCJtYWtlU2V0T2ZFbGVtZW50c1wiLCBbJGjNj19hID0+IChtYWtlU2V0T2ZFbGVtZW50cyA9ICRozY9fYSldXV1dLFtcIi4vY29weUJhZy5qc1wiLCBbW1wiY2hlY2tCYWdFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGNoZWNrQmFnRW50cmllcyA9ICRozY9fYSldXSxbXCJtYWtlQmFnT2ZFbnRyaWVzXCIsIFskaM2PX2EgPT4gKG1ha2VCYWdPZkVudHJpZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuICovXG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUHJpbWl0aXZlS2V5PSh2YWwsY2hlY2spPT57XG5pZihpc09iamVjdCh2YWwpKXtcbnJldHVybihcbmNoZWNrIT09aWRlbnRDaGVja2VyJiZcbmNoZWNrKGZhbHNlLFggYEEgJHtxKHR5cGVvZiB2YWwpfSBjYW5ub3QgYmUgYSBwcmltaXRpdmU6ICR7dmFsfWApKTtcblxuIH1cbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUodmFsKTtcbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQcmltaXRpdmVLZXk9KHZhbCk9PmNoZWNrUHJpbWl0aXZlS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc1ByaW1pdGl2ZUtleShpc1ByaW1pdGl2ZUtleSk7XG5oYXJkZW4oaXNQcmltaXRpdmVLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFByaW1pdGl2ZUtleT0odmFsKT0+e1xuY2hlY2tQcmltaXRpdmVLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydFByaW1pdGl2ZUtleShhc3NlcnRQcmltaXRpdmVLZXkpO1xuaGFyZGVuKGFzc2VydFByaW1pdGl2ZUtleSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1NjYWxhcktleT0odmFsLGNoZWNrKT0+e1xuaWYoaXNQcmltaXRpdmVLZXkodmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsKTtcbmlmKHBhc3NTdHlsZT09PSdyZW1vdGFibGUnKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBjaGVjayhmYWxzZSxYIGBBICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgYSBzY2FsYXIga2V5OiAke3ZhbH1gKTtcbiB9O1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5jaGVja1NjYWxhcktleShjaGVja1NjYWxhcktleSk7XG5jb25zdCAgICAgICAgaXNTY2FsYXJLZXk9KHZhbCk9PmNoZWNrU2NhbGFyS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc1NjYWxhcktleShpc1NjYWxhcktleSk7XG5oYXJkZW4oaXNTY2FsYXJLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFNjYWxhcktleT0odmFsKT0+e1xuY2hlY2tTY2FsYXJLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydFNjYWxhcktleShhc3NlcnRTY2FsYXJLZXkpO1xuaGFyZGVuKGFzc2VydFNjYWxhcktleSk7XG5cbi8vXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBrZXlNZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja0tleT0odmFsLGNoZWNrKT0+e1xuaWYoIWlzT2JqZWN0KHZhbCkpe1xuLy9cbi8vXG5hc3NlcnRQYXNzYWJsZSh2YWwpO1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmlmKGtleU1lbW8uaGFzKHZhbCkpe1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmNvbnN0IHJlc3VsdD1jaGVja0tleUludGVybmFsKHZhbCxjaGVjayk7XG5pZihyZXN1bHQpe1xuLy9cbi8vXG4vL1xua2V5TWVtby5hZGQodmFsKTtcbiB9XG4vL1xuLy9cbnJldHVybiByZXN1bHQ7XG4gfTskaM2PX29uY2UuY2hlY2tLZXkoY2hlY2tLZXkpO1xuaGFyZGVuKGNoZWNrS2V5KTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNLZXk9KHZhbCk9PmNoZWNrS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc0tleShpc0tleSk7XG5oYXJkZW4oaXNLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydEtleT0odmFsKT0+e1xuY2hlY2tLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydEtleShhc3NlcnRLZXkpO1xuaGFyZGVuKGFzc2VydEtleSk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5U2V0TWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5U2V0PShzLGNoZWNrKT0+e1xuaWYoY29weVNldE1lbW8uaGFzKHMpKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IHJlc3VsdD1cbihwYXNzU3R5bGVPZihzKT09PSd0YWdnZWQnJiZnZXRUYWcocyk9PT0nY29weVNldCd8fFxuY2hlY2soZmFsc2UsWCBgTm90IGEgY29weVNldDogJHtzfWApKSYmXG5jaGVja0VsZW1lbnRzKHMucGF5bG9hZCxjaGVjaykmJlxuY2hlY2tLZXkocy5wYXlsb2FkLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb3B5U2V0TWVtby5hZGQocyk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5jaGVja0NvcHlTZXQoY2hlY2tDb3B5U2V0KTtcbmhhcmRlbihjaGVja0NvcHlTZXQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldD0ocyk9PmNoZWNrQ29weVNldChzLGlkZW50Q2hlY2tlcik7JGjNj19vbmNlLmlzQ29weVNldChpc0NvcHlTZXQpO1xuaGFyZGVuKGlzQ29weVNldCk7XG5cbi8qXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGFzc2VydENvcHlTZXQ9KHMpPT57XG5jaGVja0NvcHlTZXQocyxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRDb3B5U2V0KGFzc2VydENvcHlTZXQpO1xuaGFyZGVuKGFzc2VydENvcHlTZXQpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weVNldEtleXM9KHMpPT57XG5hc3NlcnRDb3B5U2V0KHMpO1xucmV0dXJuIHMucGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRDb3B5U2V0S2V5cyhnZXRDb3B5U2V0S2V5cyk7XG5oYXJkZW4oZ2V0Q29weVNldEtleXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVyeUNvcHlTZXRLZXk9KHMsZm4pPT5cbmdldENvcHlTZXRLZXlzKHMpLmV2ZXJ5KChrZXksaW5kZXgpPT5mbihrZXksaW5kZXgpKTskaM2PX29uY2UuZXZlcnlDb3B5U2V0S2V5KGV2ZXJ5Q29weVNldEtleSk7XG5oYXJkZW4oZXZlcnlDb3B5U2V0S2V5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5U2V0PShlbGVtZW50SXRlcik9PntcbmNvbnN0IHJlc3VsdD1tYWtlU2V0T2ZFbGVtZW50cyhlbGVtZW50SXRlcik7XG5hc3NlcnRDb3B5U2V0KHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5U2V0KG1ha2VDb3B5U2V0KTtcbmhhcmRlbihtYWtlQ29weVNldCk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5QmFnTWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5QmFnPShiLGNoZWNrKT0+e1xuaWYoY29weUJhZ01lbW8uaGFzKGIpKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IHJlc3VsdD1cbihwYXNzU3R5bGVPZihiKT09PSd0YWdnZWQnJiZnZXRUYWcoYik9PT0nY29weUJhZyd8fFxuY2hlY2soZmFsc2UsWCBgTm90IGEgY29weUJhZzogJHtifWApKSYmXG5jaGVja0JhZ0VudHJpZXMoYi5wYXlsb2FkLGNoZWNrKSYmXG5jaGVja0tleShiLnBheWxvYWQsY2hlY2spO1xuaWYocmVzdWx0KXtcbmNvcHlCYWdNZW1vLmFkZChiKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmNoZWNrQ29weUJhZyhjaGVja0NvcHlCYWcpO1xuaGFyZGVuKGNoZWNrQ29weUJhZyk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5QmFnPShiKT0+Y2hlY2tDb3B5QmFnKGIsaWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNDb3B5QmFnKGlzQ29weUJhZyk7XG5oYXJkZW4oaXNDb3B5QmFnKTtcblxuLypcblxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgYXNzZXJ0Q29weUJhZz0oYik9PntcbmNoZWNrQ29weUJhZyhiLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydENvcHlCYWcoYXNzZXJ0Q29weUJhZyk7XG5oYXJkZW4oYXNzZXJ0Q29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5QmFnRW50cmllcz0oYik9PntcbmFzc2VydENvcHlCYWcoYik7XG5yZXR1cm4gYi5wYXlsb2FkO1xuIH07JGjNj19vbmNlLmdldENvcHlCYWdFbnRyaWVzKGdldENvcHlCYWdFbnRyaWVzKTtcbmhhcmRlbihnZXRDb3B5QmFnRW50cmllcyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weUJhZ0VudHJ5PShiLGZuKT0+XG5nZXRDb3B5QmFnRW50cmllcyhiKS5ldmVyeSgoZW50cnksaW5kZXgpPT5mbihlbnRyeSxpbmRleCkpOyRozY9fb25jZS5ldmVyeUNvcHlCYWdFbnRyeShldmVyeUNvcHlCYWdFbnRyeSk7XG5oYXJkZW4oZXZlcnlDb3B5QmFnRW50cnkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvcHlCYWc9KGJhZ0VudHJ5SXRlcik9PntcbmNvbnN0IHJlc3VsdD1tYWtlQmFnT2ZFbnRyaWVzKGJhZ0VudHJ5SXRlcik7XG5hc3NlcnRDb3B5QmFnKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5QmFnKG1ha2VDb3B5QmFnKTtcbmhhcmRlbihtYWtlQ29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29weUJhZ0Zyb21FbGVtZW50cz0oZWxlbWVudEl0ZXIpPT57XG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5jb25zdCBzb3J0ZWQ9c29ydEJ5UmFuayhlbGVtZW50SXRlcixmdWxsQ29tcGFyZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVudHJpZXM9W107XG5mb3IobGV0IGk9MDtpPHNvcnRlZC5sZW5ndGg7KXtcbmNvbnN0IGs9c29ydGVkW2ldO1xubGV0IGo9aSsxO1xud2hpbGUoajxzb3J0ZWQubGVuZ3RoJiZmdWxsQ29tcGFyZShrLHNvcnRlZFtqXSk9PT0wKXtcbmorPTE7XG4gfVxuZW50cmllcy5wdXNoKFtrLEJpZ0ludChqLWkpXSk7XG5pPWo7XG4gfVxucmV0dXJuIG1ha2VDb3B5QmFnKGVudHJpZXMpO1xuIH07JGjNj19vbmNlLm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzKG1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzKTtcbmhhcmRlbihtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5TWFwTWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5TWFwPShtLGNoZWNrKT0+e1xuaWYoY29weU1hcE1lbW8uaGFzKG0pKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKCEocGFzc1N0eWxlT2YobSk9PT0ndGFnZ2VkJyYmZ2V0VGFnKG0pPT09J2NvcHlNYXAnKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgTm90IGEgY29weU1hcDogJHttfWApO1xuIH1cbmNvbnN0e3BheWxvYWR9PW07XG5pZihwYXNzU3R5bGVPZihwYXlsb2FkKSE9PSdjb3B5UmVjb3JkJyl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgQSBjb3B5TWFwJ3MgcGF5bG9hZCBtdXN0IGJlIGEgcmVjb3JkOiAke219YCk7XG4gfVxuY29uc3R7a2V5cyx2YWx1ZXMsLi4ucmVzdH09cGF5bG9hZDtcbmNvbnN0IHJlc3VsdD1cbihvd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuY2hlY2soXG5mYWxzZSxcblggYEEgY29weU1hcCdzIHBheWxvYWQgbXVzdCBvbmx5IGhhdmUgLmtleXMgYW5kIC52YWx1ZXM6ICR7bX1gKSkmJlxuXG5jaGVja0VsZW1lbnRzKGtleXMsY2hlY2spJiZcbmNoZWNrS2V5KGtleXMsY2hlY2spJiYoXG5wYXNzU3R5bGVPZih2YWx1ZXMpPT09J2NvcHlBcnJheSd8fFxuY2hlY2soZmFsc2UsWCBgQSBjb3B5TWFwJ3MgLnZhbHVlcyBtdXN0IGJlIGEgY29weUFycmF5OiAke219YCkpJiYoXG5rZXlzLmxlbmd0aD09PXZhbHVlcy5sZW5ndGh8fFxuY2hlY2soXG5mYWxzZSxcblggYEEgY29weU1hcCBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGtleXMgYW5kIHZhbHVlczogJHttfWApKTtcblxuaWYocmVzdWx0KXtcbmNvcHlNYXBNZW1vLmFkZChtKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmNoZWNrQ29weU1hcChjaGVja0NvcHlNYXApO1xuaGFyZGVuKGNoZWNrQ29weU1hcCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5TWFwPShtKT0+Y2hlY2tDb3B5TWFwKG0saWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNDb3B5TWFwKGlzQ29weU1hcCk7XG5oYXJkZW4oaXNDb3B5TWFwKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDb3B5TWFwPShtKT0+e1xuY2hlY2tDb3B5TWFwKG0sYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weU1hcChhc3NlcnRDb3B5TWFwKTtcbmhhcmRlbihhc3NlcnRDb3B5TWFwKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weU1hcEtleXM9KG0pPT57XG5hc3NlcnRDb3B5TWFwKG0pO1xucmV0dXJuIG0ucGF5bG9hZC5rZXlzO1xuIH07JGjNj19vbmNlLmdldENvcHlNYXBLZXlzKGdldENvcHlNYXBLZXlzKTtcbmhhcmRlbihnZXRDb3B5TWFwS2V5cyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBWYWx1ZXM9KG0pPT57XG5hc3NlcnRDb3B5TWFwKG0pO1xucmV0dXJuIG0ucGF5bG9hZC52YWx1ZXM7XG4gfTskaM2PX29uY2UuZ2V0Q29weU1hcFZhbHVlcyhnZXRDb3B5TWFwVmFsdWVzKTtcbmhhcmRlbihnZXRDb3B5TWFwVmFsdWVzKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBFbnRyeUFycmF5PShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbmNvbnN0e1xucGF5bG9hZDp7a2V5cyx2YWx1ZXN9fT1cbm07XG5yZXR1cm4gaGFyZGVuKGtleXMubWFwKChrZXksaSk9PltrZXksdmFsdWVzW2ldXSkpO1xuIH07JGjNj19vbmNlLmdldENvcHlNYXBFbnRyeUFycmF5KGdldENvcHlNYXBFbnRyeUFycmF5KTtcbmhhcmRlbihnZXRDb3B5TWFwRW50cnlBcnJheSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBFbnRyaWVzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbmNvbnN0e1xucGF5bG9hZDp7a2V5cyx2YWx1ZXN9fT1cbm07XG5jb25zdHtsZW5ndGh9PS8qICAgICAgICAgICAgICAgICova2V5cztcbnJldHVybiBGYXIoJ0NvcHlNYXAgZW50cmllcyBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmxldCBpPTA7XG5yZXR1cm4gRmFyKCdDb3B5TWFwIGVudHJpZXMgaXRlcmF0b3InLHtcbm5leHQ6KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmVzdWx0O1xuaWYoaTxsZW5ndGgpe1xucmVzdWx0PWhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTpba2V5c1tpXSx2YWx1ZXNbaV1dfSk7XG5pKz0xO1xucmV0dXJuIHJlc3VsdDtcbiB9ZWxzZXtcbnJlc3VsdD1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH19KTtcblxuIH19KTtcblxuIH07JGjNj19vbmNlLmdldENvcHlNYXBFbnRyaWVzKGdldENvcHlNYXBFbnRyaWVzKTtcbmhhcmRlbihnZXRDb3B5TWFwRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5TWFwS2V5PShtLGZuKT0+XG5nZXRDb3B5TWFwS2V5cyhtKS5ldmVyeSgoa2V5LGluZGV4KT0+Zm4oa2V5LGluZGV4KSk7JGjNj19vbmNlLmV2ZXJ5Q29weU1hcEtleShldmVyeUNvcHlNYXBLZXkpO1xuaGFyZGVuKGV2ZXJ5Q29weU1hcEtleSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5TWFwVmFsdWU9KG0sZm4pPT5cbmdldENvcHlNYXBWYWx1ZXMobSkuZXZlcnkoKHZhbHVlLGluZGV4KT0+Zm4odmFsdWUsaW5kZXgpKTskaM2PX29uY2UuZXZlcnlDb3B5TWFwVmFsdWUoZXZlcnlDb3B5TWFwVmFsdWUpO1xuaGFyZGVuKGV2ZXJ5Q29weU1hcFZhbHVlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY29weU1hcEtleVNldD0obSk9PlxuLy9cbm1ha2VUYWdnZWQoJ2NvcHlTZXQnLG0ucGF5bG9hZC5rZXlzKTskaM2PX29uY2UuY29weU1hcEtleVNldChjb3B5TWFwS2V5U2V0KTtcbmhhcmRlbihjb3B5TWFwS2V5U2V0KTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvcHlNYXA9KGVudHJpZXMpPT57XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHNvcnRlZEVudHJpZXM9c29ydEJ5UmFuayhlbnRyaWVzLGNvbXBhcmVBbnRpUmFuayk7XG5jb25zdCBrZXlzPXNvcnRlZEVudHJpZXMubWFwKChbayxfdl0pPT5rKTtcbmNvbnN0IHZhbHVlcz1zb3J0ZWRFbnRyaWVzLm1hcCgoW19rLHZdKT0+dik7XG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnY29weU1hcCcse2tleXMsdmFsdWVzfSk7XG5hc3NlcnRDb3B5TWFwKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5TWFwKG1ha2VDb3B5TWFwKTtcbmhhcmRlbihtYWtlQ29weU1hcCk7XG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrS2V5SW50ZXJuYWw9KHZhbCxjaGVjayk9PntcbmNvbnN0IGNoZWNrSXQ9KGNoaWxkKT0+Y2hlY2tLZXkoY2hpbGQsY2hlY2spO1xuXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xucmV0dXJuIE9iamVjdC52YWx1ZXModmFsKS5ldmVyeShjaGVja0l0KTtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbnJldHVybiB2YWwuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRhZz1nZXRUYWcodmFsKTtcbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG5yZXR1cm4gY2hlY2tDb3B5U2V0KHZhbCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG5yZXR1cm4gY2hlY2tDb3B5QmFnKHZhbCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5yZXR1cm4oXG5jaGVja0NvcHlNYXAodmFsLGNoZWNrKSYmXG4vL1xuLy9cbi8vXG5ldmVyeUNvcHlNYXBWYWx1ZSh2YWwsY2hlY2tJdCkpO1xuXG4gfVxuZGVmYXVsdDp7XG5yZXR1cm4oXG5jaGVjayE9PWlkZW50Q2hlY2tlciYmXG5jaGVjayhmYWxzZSxYIGBBIHBhc3NhYmxlIHRhZ2dlZCAke3EodGFnKX0gaXMgbm90IGEga2V5OiAke3ZhbH1gKSk7XG5cbiB9fVxuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgJHtxKHBhc3NTdHlsZSl9IGNhbm5vdCBiZSBhIGtleWApO1xuIH1cbmRlZmF1bHQ6e1xuLy9cbi8vXG50aHJvdyBGYWlsIGB1bmV4cGVjdGVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX06ICR7dmFsfWA7XG4gfX1cblxuIH07XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1ByaW1pdGl2ZUtleSI6WyJpc1ByaW1pdGl2ZUtleSJdLCJhc3NlcnRQcmltaXRpdmVLZXkiOlsiYXNzZXJ0UHJpbWl0aXZlS2V5Il0sImNoZWNrU2NhbGFyS2V5IjpbImNoZWNrU2NhbGFyS2V5Il0sImlzU2NhbGFyS2V5IjpbImlzU2NhbGFyS2V5Il0sImFzc2VydFNjYWxhcktleSI6WyJhc3NlcnRTY2FsYXJLZXkiXSwiY2hlY2tLZXkiOlsiY2hlY2tLZXkiXSwiaXNLZXkiOlsiaXNLZXkiXSwiYXNzZXJ0S2V5IjpbImFzc2VydEtleSJdLCJjaGVja0NvcHlTZXQiOlsiY2hlY2tDb3B5U2V0Il0sImlzQ29weVNldCI6WyJpc0NvcHlTZXQiXSwiYXNzZXJ0Q29weVNldCI6WyJhc3NlcnRDb3B5U2V0Il0sImdldENvcHlTZXRLZXlzIjpbImdldENvcHlTZXRLZXlzIl0sImV2ZXJ5Q29weVNldEtleSI6WyJldmVyeUNvcHlTZXRLZXkiXSwibWFrZUNvcHlTZXQiOlsibWFrZUNvcHlTZXQiXSwiY2hlY2tDb3B5QmFnIjpbImNoZWNrQ29weUJhZyJdLCJpc0NvcHlCYWciOlsiaXNDb3B5QmFnIl0sImFzc2VydENvcHlCYWciOlsiYXNzZXJ0Q29weUJhZyJdLCJnZXRDb3B5QmFnRW50cmllcyI6WyJnZXRDb3B5QmFnRW50cmllcyJdLCJldmVyeUNvcHlCYWdFbnRyeSI6WyJldmVyeUNvcHlCYWdFbnRyeSJdLCJtYWtlQ29weUJhZyI6WyJtYWtlQ29weUJhZyJdLCJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyI6WyJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyJdLCJjaGVja0NvcHlNYXAiOlsiY2hlY2tDb3B5TWFwIl0sImlzQ29weU1hcCI6WyJpc0NvcHlNYXAiXSwiYXNzZXJ0Q29weU1hcCI6WyJhc3NlcnRDb3B5TWFwIl0sImdldENvcHlNYXBLZXlzIjpbImdldENvcHlNYXBLZXlzIl0sImdldENvcHlNYXBWYWx1ZXMiOlsiZ2V0Q29weU1hcFZhbHVlcyJdLCJnZXRDb3B5TWFwRW50cnlBcnJheSI6WyJnZXRDb3B5TWFwRW50cnlBcnJheSJdLCJnZXRDb3B5TWFwRW50cmllcyI6WyJnZXRDb3B5TWFwRW50cmllcyJdLCJldmVyeUNvcHlNYXBLZXkiOlsiZXZlcnlDb3B5TWFwS2V5Il0sImV2ZXJ5Q29weU1hcFZhbHVlIjpbImV2ZXJ5Q29weU1hcFZhbHVlIl0sImNvcHlNYXBLZXlTZXQiOlsiY29weU1hcEtleVNldCJdLCJtYWtlQ29weU1hcCI6WyJtYWtlQ29weU1hcCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABkvkKTQhUAAEIVAAAtAAAAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiLCIuL2NoZWNrS2V5LmpzIiwiLi9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyJdLCJleHBvcnRzIjpbImJhZ0NvbXBhcmUiLCJjb21wYXJlS2V5cyIsImtleUVRIiwia2V5R1QiLCJrZXlHVEUiLCJrZXlMVCIsImtleUxURSIsInNldENvbXBhcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixnZXRUYWcsY29tcGFyZVJhbmsscmVjb3JkTmFtZXMscmVjb3JkVmFsdWVzLHRyaXZpYWxDb21wYXJhdG9yLHEsRmFpbCxhc3NlcnRLZXksZ2V0Q29weUJhZ0VudHJpZXMsZ2V0Q29weU1hcEVudHJ5QXJyYXksZ2V0Q29weVNldEtleXMsbWFrZUNvbXBhcmVDb2xsZWN0aW9uOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJjb21wYXJlUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlUmFuayA9ICRozY9fYSldXSxbXCJyZWNvcmROYW1lc1wiLCBbJGjNj19hID0+IChyZWNvcmROYW1lcyA9ICRozY9fYSldXSxbXCJyZWNvcmRWYWx1ZXNcIiwgWyRozY9fYSA9PiAocmVjb3JkVmFsdWVzID0gJGjNj19hKV1dLFtcInRyaXZpYWxDb21wYXJhdG9yXCIsIFskaM2PX2EgPT4gKHRyaXZpYWxDb21wYXJhdG9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9jaGVja0tleS5qc1wiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJnZXRDb3B5QmFnRW50cmllc1wiLCBbJGjNj19hID0+IChnZXRDb3B5QmFnRW50cmllcyA9ICRozY9fYSldXSxbXCJnZXRDb3B5TWFwRW50cnlBcnJheVwiLCBbJGjNj19hID0+IChnZXRDb3B5TWFwRW50cnlBcnJheSA9ICRozY9fYSldXSxbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjNj19hID0+IChnZXRDb3B5U2V0S2V5cyA9ICRozY9fYSldXV1dLFtcIi4va2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanNcIiwgW1tcIm1ha2VDb21wYXJlQ29sbGVjdGlvblwiLCBbJGjNj19hID0+IChtYWtlQ29tcGFyZUNvbGxlY3Rpb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc2V0Q29tcGFyZT1tYWtlQ29tcGFyZUNvbGxlY3Rpb24oXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuKHMpPT5oYXJkZW4oZ2V0Q29weVNldEtleXMocykubWFwKChrZXkpPT5ba2V5LDFdKSksXG5cbjAsXG50cml2aWFsQ29tcGFyYXRvcik7JGjNj19vbmNlLnNldENvbXBhcmUoc2V0Q29tcGFyZSk7XG5cbmhhcmRlbihzZXRDb21wYXJlKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGJhZ0NvbXBhcmU9bWFrZUNvbXBhcmVDb2xsZWN0aW9uKFxuZ2V0Q29weUJhZ0VudHJpZXMsXG4wbixcbnRyaXZpYWxDb21wYXJhdG9yKTskaM2PX29uY2UuYmFnQ29tcGFyZShiYWdDb21wYXJlKTtcblxuaGFyZGVuKGJhZ0NvbXBhcmUpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0IEFCU0VOVD1TeW1ib2woJ2Fic2VudCcpO1xuLypcblxuXG5cblxuXG5cbiAqL1xuLy9cbmNvbnN0IF9tYXBDb21wYXJlPW1ha2VDb21wYXJlQ29sbGVjdGlvbihcbmdldENvcHlNYXBFbnRyeUFycmF5LFxuQUJTRU5ULFxuKGxlZnRWYWx1ZSxyaWdodFZhbHVlKT0+e1xuaWYobGVmdFZhbHVlPT09QUJTRU5UJiZyaWdodFZhbHVlPT09QUJTRU5UKXtcbnRocm93IEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGFic2VudCBlbnRyeSBwYWlyYDtcbiB9ZWxzZSBpZihsZWZ0VmFsdWU9PT1BQlNFTlQpe1xucmV0dXJuLTE7XG4gfWVsc2UgaWYocmlnaHRWYWx1ZT09PUFCU0VOVCl7XG5yZXR1cm4gMTtcbiB9ZWxzZXtcbi8vXG5yZXR1cm4gY29tcGFyZUtleXMobGVmdFZhbHVlLHJpZ2h0VmFsdWUpO1xuIH1cbiB9KTtcblxuaGFyZGVuKF9tYXBDb21wYXJlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGNvbXBhcmVLZXlzPShsZWZ0LHJpZ2h0KT0+e1xuYXNzZXJ0S2V5KGxlZnQpO1xuYXNzZXJ0S2V5KHJpZ2h0KTtcbmNvbnN0IGxlZnRTdHlsZT1wYXNzU3R5bGVPZihsZWZ0KTtcbmNvbnN0IHJpZ2h0U3R5bGU9cGFzc1N0eWxlT2YocmlnaHQpO1xuaWYobGVmdFN0eWxlIT09cmlnaHRTdHlsZSl7XG4vL1xucmV0dXJuIE5hTjtcbiB9XG5zd2l0Y2gobGVmdFN0eWxlKXtcbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOlxuY2FzZSdzeW1ib2wnOntcbi8vXG5yZXR1cm4gY29tcGFyZVJhbmsobGVmdCxyaWdodCk7XG4gfVxuY2FzZSdudW1iZXInOntcbmNvbnN0IHJhbmtDb21wPWNvbXBhcmVSYW5rKGxlZnQscmlnaHQpO1xuaWYocmFua0NvbXA9PT0wKXtcbnJldHVybiAwO1xuIH1cbmlmKE51bWJlci5pc05hTihsZWZ0KXx8TnVtYmVyLmlzTmFOKHJpZ2h0KSl7XG4vL1xuYXNzZXJ0KCFOdW1iZXIuaXNOYU4obGVmdCl8fCFOdW1iZXIuaXNOYU4ocmlnaHQpKTtcbnJldHVybiBOYU47XG4gfVxuLy9cbi8vXG5yZXR1cm4gcmFua0NvbXA7XG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmlmKGxlZnQ9PT1yaWdodCl7XG5yZXR1cm4gMDtcbiB9XG4vL1xuLy9cbnJldHVybiBOYU47XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgbGVuPU1hdGgubWluKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbi8vXG5jb25zdCByZXN1bHQ9Y29tcGFyZUtleXMobGVmdFtpXSxyaWdodFtpXSk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbi8vXG4vL1xuLy9cbnJldHVybiBjb21wYXJlUmFuayhsZWZ0Lmxlbmd0aCxyaWdodC5sZW5ndGgpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG5jb25zdCBsZWZ0TmFtZXM9cmVjb3JkTmFtZXMobGVmdCk7XG4vL1xuY29uc3QgcmlnaHROYW1lcz1yZWNvcmROYW1lcyhyaWdodCk7XG5cbi8vXG5pZigha2V5RVEobGVmdE5hbWVzLHJpZ2h0TmFtZXMpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIE5hTjtcbiB9XG4vL1xuY29uc3QgbGVmdFZhbHVlcz1yZWNvcmRWYWx1ZXMobGVmdCxsZWZ0TmFtZXMpO1xuLy9cbmNvbnN0IHJpZ2h0VmFsdWVzPXJlY29yZFZhbHVlcyhyaWdodCxyaWdodE5hbWVzKTtcbi8vXG4vL1xubGV0IHJlc3VsdD0wO1xuZm9yKGxldCBpPTA7aTxsZWZ0VmFsdWVzLmxlbmd0aDtpKz0xKXtcbmNvbnN0IGNvbXA9Y29tcGFyZUtleXMobGVmdFZhbHVlc1tpXSxyaWdodFZhbHVlc1tpXSk7XG5pZihOdW1iZXIuaXNOYU4oY29tcCkpe1xucmV0dXJuIE5hTjtcbiB9XG5pZihyZXN1bHQhPT1jb21wJiZjb21wIT09MCl7XG5pZihyZXN1bHQ9PT0wKXtcbnJlc3VsdD1jb21wO1xuIH1lbHNle1xuYXNzZXJ0KFxucmVzdWx0PT09LTEmJmNvbXA9PT0xfHxyZXN1bHQ9PT0xJiZjb21wPT09LTEpO1xuXG5yZXR1cm4gTmFOO1xuIH1cbiB9XG4gfVxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiByZXN1bHQ7XG4gfVxuY2FzZSd0YWdnZWQnOntcbi8vXG5jb25zdCBsZWZ0VGFnPWdldFRhZyhsZWZ0KTtcbi8vXG5jb25zdCByaWdodFRhZz1nZXRUYWcocmlnaHQpO1xuaWYobGVmdFRhZyE9PXJpZ2h0VGFnKXtcbi8vXG5yZXR1cm4gTmFOO1xuIH1cbnN3aXRjaChsZWZ0VGFnKXtcbmNhc2UnY29weVNldCc6e1xuLy9cbnJldHVybiBzZXRDb21wYXJlKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UnY29weUJhZyc6e1xuLy9cbnJldHVybiBiYWdDb21wYXJlKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UnY29weU1hcCc6e1xuLy9cbi8vXG50aHJvdyBGYWlsIGBNYXAgY29tcGFyaXNvbiBub3QgeWV0IGltcGxlbWVudGVkOiAke2xlZnR9IHZzICR7cmlnaHR9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYHVuZXhwZWN0ZWQgdGFnICR7cShsZWZ0VGFnKX06ICR7bGVmdH1gO1xuIH19XG5cbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYHVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShsZWZ0U3R5bGUpfTogJHtsZWZ0fWA7XG4gfX1cblxuIH07JGjNj19vbmNlLmNvbXBhcmVLZXlzKGNvbXBhcmVLZXlzKTtcbmhhcmRlbihjb21wYXJlS2V5cyk7XG5cbmNvbnN0ICAgICAgICBrZXlMVD0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPDA7JGjNj19vbmNlLmtleUxUKGtleUxUKTtcbmhhcmRlbihrZXlMVCk7XG5cbmNvbnN0ICAgICAgICBrZXlMVEU9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KTw9MDskaM2PX29uY2Uua2V5TFRFKGtleUxURSk7XG5oYXJkZW4oa2V5TFRFKTtcblxuY29uc3QgICAgICAgIGtleUVRPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk9PT0wOyRozY9fb25jZS5rZXlFUShrZXlFUSk7XG5oYXJkZW4oa2V5RVEpO1xuXG5jb25zdCAgICAgICAga2V5R1RFPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk+PTA7JGjNj19vbmNlLmtleUdURShrZXlHVEUpO1xuaGFyZGVuKGtleUdURSk7XG5cbmNvbnN0ICAgICAgICBrZXlHVD0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPjA7JGjNj19vbmNlLmtleUdUKGtleUdUKTtcbmhhcmRlbihrZXlHVCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzZXRDb21wYXJlIjpbInNldENvbXBhcmUiXSwiYmFnQ29tcGFyZSI6WyJiYWdDb21wYXJlIl0sImNvbXBhcmVLZXlzIjpbImNvbXBhcmVLZXlzIl0sImtleUxUIjpbImtleUxUIl0sImtleUxURSI6WyJrZXlMVEUiXSwia2V5RVEiOlsia2V5RVEiXSwia2V5R1RFIjpbImtleUdURSJdLCJrZXlHVCI6WyJrZXlHVCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADAWLhF9g0AAPYNAAApAAAAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9rZXlzL2NvcHlCYWcuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydEJhZ0VudHJpZXMiLCJhc3NlcnROb0R1cGxpY2F0ZUtleXMiLCJjaGVja0JhZ0VudHJpZXMiLCJjb2VyY2VUb0JhZ0VudHJpZXMiLCJtYWtlQmFnT2ZFbnRyaWVzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGNvbXBhcmVBbnRpUmFuayxpc1JhbmtTb3J0ZWQsbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcImlzUmFua1NvcnRlZFwiLCBbJGjNj19hID0+IChpc1JhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaM2PX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjNj19hID0+IChzb3J0QnlSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrTm9EdXBsaWNhdGVLZXlzPShiYWdFbnRyaWVzLGZ1bGxDb21wYXJlLGNoZWNrKT0+e1xuLy9cbi8vXG4vL1xuLy9cbmZ1bGxDb21wYXJlPWZ1bGxDb21wYXJlfHxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG4vL1xuLy9cbi8vXG5iYWdFbnRyaWVzPXNvcnRCeVJhbmsoYmFnRW50cmllcyxmdWxsQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWJhZ0VudHJpZXM7XG5mb3IobGV0IGk9MTtpPGxlbmd0aDtpKz0xKXtcbmNvbnN0IGswPWJhZ0VudHJpZXNbaS0xXVswXTtcbmNvbnN0IGsxPWJhZ0VudHJpZXNbaV1bMF07XG5pZihmdWxsQ29tcGFyZShrMCxrMSk9PT0wKXtcbnJldHVybiBjaGVjayhmYWxzZSxYIGB2YWx1ZSBoYXMgZHVwbGljYXRlIGtleXM6ICR7azB9YCk7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydE5vRHVwbGljYXRlS2V5cz0oYmFnRW50cmllcyxmdWxsQ29tcGFyZT11bmRlZmluZWQpPT57XG5jaGVja05vRHVwbGljYXRlS2V5cyhiYWdFbnRyaWVzLGZ1bGxDb21wYXJlLGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKGFzc2VydE5vRHVwbGljYXRlS2V5cyk7XG5jb25zdCAgICAgICAgY2hlY2tCYWdFbnRyaWVzPShiYWdFbnRyaWVzLGNoZWNrKT0+e1xuaWYocGFzc1N0eWxlT2YoYmFnRW50cmllcykhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBlbnRyaWVzIG9mIGEgY29weUJhZyBtdXN0IGJlIGEgY29weUFycmF5OiAke2JhZ0VudHJpZXN9YCk7XG5cbiB9XG5pZighaXNSYW5rU29ydGVkKGJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rKSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBlbnRyaWVzIG9mIGEgY29weUJhZyBtdXN0IGJlIHNvcnRlZCBpbiByZXZlcnNlIHJhbmsgb3JkZXI6ICR7YmFnRW50cmllc31gKTtcblxuIH1cbmZvcihjb25zdCBlbnRyeSBvZiBiYWdFbnRyaWVzKXtcbmlmKFxucGFzc1N0eWxlT2YoZW50cnkpIT09J2NvcHlBcnJheSd8fFxuZW50cnkubGVuZ3RoIT09Mnx8XG50eXBlb2YgZW50cnlbMV0hPT0nYmlnaW50JylcbntcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgRWFjaCBlbnRyeSBvZiBhIGNvcHlCYWcgbXVzdCBiZSBwYWlyIG9mIGEga2V5IGFuZCBhIGJpZ2ludCByZXByZXNlbnRpbmcgYSBjb3VudDogJHtlbnRyeX1gKTtcblxuIH1cbmlmKGVudHJ5WzFdPDEpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBFYWNoIGVudHJ5IG9mIGEgY29weUJhZyBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBjb3VudDogJHtlbnRyeX1gKTtcblxuIH1cbiB9XG4vL1xucmV0dXJuIGNoZWNrTm9EdXBsaWNhdGVLZXlzKGJhZ0VudHJpZXMsdW5kZWZpbmVkLGNoZWNrKTtcbiB9OyRozY9fb25jZS5jaGVja0JhZ0VudHJpZXMoY2hlY2tCYWdFbnRyaWVzKTtcbmhhcmRlbihjaGVja0JhZ0VudHJpZXMpO1xuXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRCYWdFbnRyaWVzPShiYWdFbnRyaWVzKT0+e1xuY2hlY2tCYWdFbnRyaWVzKGJhZ0VudHJpZXMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0QmFnRW50cmllcyhhc3NlcnRCYWdFbnRyaWVzKTtcbmhhcmRlbihhc3NlcnRCYWdFbnRyaWVzKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBjb2VyY2VUb0JhZ0VudHJpZXM9KGJhZ0VudHJpZXNMaXN0KT0+e1xuY29uc3QgYmFnRW50cmllcz1zb3J0QnlSYW5rKGJhZ0VudHJpZXNMaXN0LGNvbXBhcmVBbnRpUmFuayk7XG5hc3NlcnRCYWdFbnRyaWVzKGJhZ0VudHJpZXMpO1xucmV0dXJuIGJhZ0VudHJpZXM7XG4gfTskaM2PX29uY2UuY29lcmNlVG9CYWdFbnRyaWVzKGNvZXJjZVRvQmFnRW50cmllcyk7XG5oYXJkZW4oY29lcmNlVG9CYWdFbnRyaWVzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VCYWdPZkVudHJpZXM9KGJhZ0VudHJ5SXRlcik9PlxubWFrZVRhZ2dlZCgnY29weUJhZycsY29lcmNlVG9CYWdFbnRyaWVzKGJhZ0VudHJ5SXRlcikpOyRozY9fb25jZS5tYWtlQmFnT2ZFbnRyaWVzKG1ha2VCYWdPZkVudHJpZXMpO1xuaGFyZGVuKG1ha2VCYWdPZkVudHJpZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzIjpbImFzc2VydE5vRHVwbGljYXRlS2V5cyJdLCJjaGVja0JhZ0VudHJpZXMiOlsiY2hlY2tCYWdFbnRyaWVzIl0sImFzc2VydEJhZ0VudHJpZXMiOlsiYXNzZXJ0QmFnRW50cmllcyJdLCJjb2VyY2VUb0JhZ0VudHJpZXMiOlsiY29lcmNlVG9CYWdFbnRyaWVzIl0sIm1ha2VCYWdPZkVudHJpZXMiOlsibWFrZUJhZ09mRW50cmllcyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB3nhOD/QsAAP0LAAApAAAAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9rZXlzL2NvcHlTZXQuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydEVsZW1lbnRzIiwiYXNzZXJ0Tm9EdXBsaWNhdGVzIiwiY2hlY2tFbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiLCJtYWtlU2V0T2ZFbGVtZW50cyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixjb21wYXJlQW50aVJhbmssaXNSYW5rU29ydGVkLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmssWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJpc1JhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoaXNSYW5rU29ydGVkID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja05vRHVwbGljYXRlcz0oZWxlbWVudHMsZnVsbENvbXBhcmUsY2hlY2spPT57XG4vL1xuLy9cbi8vXG4vL1xuZnVsbENvbXBhcmU9ZnVsbENvbXBhcmV8fG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbmVsZW1lbnRzPXNvcnRCeVJhbmsoZWxlbWVudHMsZnVsbENvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1lbGVtZW50cztcbmZvcihsZXQgaT0xO2k8bGVuZ3RoO2krPTEpe1xuY29uc3QgazA9ZWxlbWVudHNbaS0xXTtcbmNvbnN0IGsxPWVsZW1lbnRzW2ldO1xuaWYoZnVsbENvbXBhcmUoazAsazEpPT09MCl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgdmFsdWUgaGFzIGR1cGxpY2F0ZSBrZXlzOiAke2swfWApO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZXM9KGVsZW1lbnRzLGZ1bGxDb21wYXJlPXVuZGVmaW5lZCk9PntcbmNoZWNrTm9EdXBsaWNhdGVzKGVsZW1lbnRzLGZ1bGxDb21wYXJlLGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0Tm9EdXBsaWNhdGVzKGFzc2VydE5vRHVwbGljYXRlcyk7XG5jb25zdCAgICAgICAgY2hlY2tFbGVtZW50cz0oZWxlbWVudHMsY2hlY2spPT57XG5pZihwYXNzU3R5bGVPZihlbGVtZW50cykhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBrZXlzIG9mIGEgY29weVNldCBvciBjb3B5TWFwIG11c3QgYmUgYSBjb3B5QXJyYXk6ICR7ZWxlbWVudHN9YCk7XG5cbiB9XG5pZighaXNSYW5rU29ydGVkKGVsZW1lbnRzLGNvbXBhcmVBbnRpUmFuaykpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBUaGUga2V5cyBvZiBhIGNvcHlTZXQgb3IgY29weU1hcCBtdXN0IGJlIHNvcnRlZCBpbiByZXZlcnNlIHJhbmsgb3JkZXI6ICR7ZWxlbWVudHN9YCk7XG5cbiB9XG5yZXR1cm4gY2hlY2tOb0R1cGxpY2F0ZXMoZWxlbWVudHMsdW5kZWZpbmVkLGNoZWNrKTtcbiB9OyRozY9fb25jZS5jaGVja0VsZW1lbnRzKGNoZWNrRWxlbWVudHMpO1xuaGFyZGVuKGNoZWNrRWxlbWVudHMpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0RWxlbWVudHM9KGVsZW1lbnRzKT0+e1xuY2hlY2tFbGVtZW50cyhlbGVtZW50cyxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRFbGVtZW50cyhhc3NlcnRFbGVtZW50cyk7XG5oYXJkZW4oYXNzZXJ0RWxlbWVudHMpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvZXJjZVRvRWxlbWVudHM9KGVsZW1lbnRzTGlzdCk9PntcbmNvbnN0IGVsZW1lbnRzPXNvcnRCeVJhbmsoZWxlbWVudHNMaXN0LGNvbXBhcmVBbnRpUmFuayk7XG5hc3NlcnRFbGVtZW50cyhlbGVtZW50cyk7XG5yZXR1cm4gZWxlbWVudHM7XG4gfTskaM2PX29uY2UuY29lcmNlVG9FbGVtZW50cyhjb2VyY2VUb0VsZW1lbnRzKTtcbmhhcmRlbihjb2VyY2VUb0VsZW1lbnRzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTZXRPZkVsZW1lbnRzPShlbGVtZW50SXRlcik9PlxubWFrZVRhZ2dlZCgnY29weVNldCcsY29lcmNlVG9FbGVtZW50cyhlbGVtZW50SXRlcikpOyRozY9fb25jZS5tYWtlU2V0T2ZFbGVtZW50cyhtYWtlU2V0T2ZFbGVtZW50cyk7XG5oYXJkZW4obWFrZVNldE9mRWxlbWVudHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0Tm9EdXBsaWNhdGVzIjpbImFzc2VydE5vRHVwbGljYXRlcyJdLCJjaGVja0VsZW1lbnRzIjpbImNoZWNrRWxlbWVudHMiXSwiYXNzZXJ0RWxlbWVudHMiOlsiYXNzZXJ0RWxlbWVudHMiXSwiY29lcmNlVG9FbGVtZW50cyI6WyJjb2VyY2VUb0VsZW1lbnRzIl0sIm1ha2VTZXRPZkVsZW1lbnRzIjpbIm1ha2VTZXRPZkVsZW1lbnRzIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJNpZIUPEwAADxMAADkAAABAZW5kby9wYXR0ZXJucy12MS40Ljgvc3JjL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIiwiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyIsIm1ha2VDb21wYXJlQ29sbGVjdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydFJhbmtTb3J0ZWQsY29tcGFyZUFudGlSYW5rLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmssbWFrZUl0ZXJhdG9yLG1ha2VBcnJheUl0ZXJhdG9yLHEsRmFpbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzXCIsIFtbXCJtYWtlSXRlcmF0b3JcIiwgWyRozY9fYSA9PiAobWFrZUl0ZXJhdG9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanNcIiwgW1tcIm1ha2VBcnJheUl0ZXJhdG9yXCIsIFskaM2PX2EgPT4gKG1ha2VBcnJheUl0ZXJhdG9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgZ2VuZXJhdGVGdWxsU29ydGVkRW50cmllcz0oZW50cmllcyxyYW5rQ29tcGFyZSxmdWxsQ29tcGFyZSk9Pntcbi8vXG5hc3NlcnRSYW5rU29ydGVkKGVudHJpZXMscmFua0NvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1lbnRyaWVzO1xubGV0IGk9MDtcbmxldCBzYW1lUmFua0l0ZXJhdG9yO1xucmV0dXJuIG1ha2VJdGVyYXRvcigoKT0+e1xuaWYoc2FtZVJhbmtJdGVyYXRvcil7XG5jb25zdCByZXN1bHQ9c2FtZVJhbmtJdGVyYXRvci5uZXh0KCk7XG5pZighcmVzdWx0LmRvbmUpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG5zYW1lUmFua0l0ZXJhdG9yPXVuZGVmaW5lZDtcbiB9XG5pZihpPGxlbmd0aCl7XG5jb25zdCBlbnRyeT1lbnRyaWVzW2ldO1xuLy9cbmxldCBqPWkrMTtcbndoaWxlKGo8bGVuZ3RoJiZyYW5rQ29tcGFyZShlbnRyeVswXSxlbnRyaWVzW2pdWzBdKT09PTApe1xuais9MTtcbiB9XG5pZihqPT09aSsxKXtcbi8vXG5pPWo7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlOmVudHJ5fSk7XG4gfVxuY29uc3QgdGllcz1lbnRyaWVzLnNsaWNlKGksaik7XG5pPWo7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IHNvcnRlZFRpZXM9c29ydEJ5UmFuayh0aWVzLGZ1bGxDb21wYXJlKTtcbmZvcihsZXQgaz0xO2s8c29ydGVkVGllcy5sZW5ndGg7ays9MSl7XG4vL1xuY29uc3Rba2V5MF09c29ydGVkVGllc1trLTFdO1xuY29uc3Rba2V5MV09c29ydGVkVGllc1trXTtcbk1hdGguc2lnbihmdWxsQ29tcGFyZShrZXkwLGtleTEpKXx8XG5GYWlsIGBEdXBsaWNhdGUgZW50cnkga2V5OiAke2tleTB9YDtcbiB9XG5zYW1lUmFua0l0ZXJhdG9yPW1ha2VBcnJheUl0ZXJhdG9yKHNvcnRlZFRpZXMpO1xucmV0dXJuIHNhbWVSYW5rSXRlcmF0b3IubmV4dCgpO1xuIH1cbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9KTtcbiB9O1xuaGFyZGVuKGdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXM9KFxuYzEsXG5jMixcbmdldEVudHJpZXMsXG5hYnNlbnRWYWx1ZSk9Plxue1xuY29uc3QgZTE9Z2V0RW50cmllcyhjMSk7XG5jb25zdCBlMj1nZXRFbnRyaWVzKGMyKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgZnVsbENvbXBhcmU9bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcbmNvbnN0IHg9Z2VuZXJhdGVGdWxsU29ydGVkRW50cmllcyhlMSxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xuY29uc3QgeT1nZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzKGUyLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5cbi8vXG4vL1xubGV0IHhEb25lO1xubGV0IHhLZXk7XG5sZXQgeFZhbHVlO1xubGV0IHlEb25lO1xubGV0IHlLZXk7XG5sZXQgeVZhbHVlO1xuY29uc3Qgbm9uRW50cnk9W3VuZGVmaW5lZCx1bmRlZmluZWRdO1xuY29uc3QgbmV4dFg9KCk9PntcbiF4RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRYIG11c3Qgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuY29uc3QgcmVzdWx0PXhWYWx1ZTtcbih7ZG9uZTp4RG9uZSx2YWx1ZTpbeEtleSx4VmFsdWVdPW5vbkVudHJ5fT14Lm5leHQoKSk7XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5uZXh0WCgpO1xuY29uc3QgbmV4dFk9KCk9PntcbiF5RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRZIG11c3Qgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuY29uc3QgcmVzdWx0PXlWYWx1ZTtcbih7ZG9uZTp5RG9uZSx2YWx1ZTpbeUtleSx5VmFsdWVdPW5vbkVudHJ5fT15Lm5leHQoKSk7XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5uZXh0WSgpO1xucmV0dXJuIG1ha2VJdGVyYXRvcigoKT0+e1xubGV0IGRvbmU9ZmFsc2U7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB2YWx1ZTtcbmlmKHhEb25lJiZ5RG9uZSl7XG5kb25lPXRydWU7XG52YWx1ZT1bdW5kZWZpbmVkLGFic2VudFZhbHVlLGFic2VudFZhbHVlXTtcbiB9ZWxzZSBpZih4RG9uZSl7XG52YWx1ZT1beUtleSxhYnNlbnRWYWx1ZSxuZXh0WSgpXTtcbiB9ZWxzZSBpZih5RG9uZSl7XG52YWx1ZT1beEtleSxuZXh0WCgpLGFic2VudFZhbHVlXTtcbiB9ZWxzZXtcbi8vXG4vL1xuY29uc3QgY29tcD1mdWxsQ29tcGFyZSh4S2V5LHlLZXkpO1xuaWYoY29tcD09PTApe1xudmFsdWU9W3hLZXksbmV4dFgoKSxuZXh0WSgpXTtcbiB9ZWxzZSBpZihjb21wPDApe1xudmFsdWU9W3hLZXksbmV4dFgoKSxhYnNlbnRWYWx1ZV07XG4gfWVsc2UgaWYoY29tcD4wKXtcbnZhbHVlPVt5S2V5LGFic2VudFZhbHVlLG5leHRZKCldO1xuIH1lbHNle1xudGhyb3cgRmFpbCBgVW5leHBlY3RlZCBrZXkgY29tcGFyaXNvbiAke3EoY29tcCl9IGZvciAke3hLZXl9IHZzICR7eUtleX1gO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lLHZhbHVlfSk7XG4gfSk7XG4gfTskaM2PX29uY2UuZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMoZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMpO1xuaGFyZGVuKGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29tcGFyZUNvbGxlY3Rpb249KGdldEVudHJpZXMsYWJzZW50VmFsdWUsY29tcGFyZVZhbHVlcyk9PlxuaGFyZGVuKChsZWZ0LHJpZ2h0KT0+e1xuY29uc3QgbWVyZ2VkPWdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzKFxubGVmdCxcbnJpZ2h0LFxuZ2V0RW50cmllcyxcbmFic2VudFZhbHVlKTtcblxubGV0IGxlZnRJc0JpZ2dlcj1mYWxzZTtcbmxldCByaWdodElzQmlnZ2VyPWZhbHNlO1xuZm9yKGNvbnN0W19rZXksbGVmdFZhbHVlLHJpZ2h0VmFsdWVdb2YgbWVyZ2VkKXtcbmNvbnN0IGNvbXA9Y29tcGFyZVZhbHVlcyhsZWZ0VmFsdWUscmlnaHRWYWx1ZSk7XG5pZihjb21wPT09MCl7XG4vL1xuY29udGludWU7XG4gfWVsc2UgaWYoY29tcDwwKXtcbi8vXG5yaWdodElzQmlnZ2VyPXRydWU7XG4gfWVsc2UgaWYoY29tcD4wKXtcbi8vXG5sZWZ0SXNCaWdnZXI9dHJ1ZTtcbiB9ZWxzZXtcbk51bWJlci5pc05hTihjb21wKXx8XG4vL1xuRmFpbCBgVW5leHBlY3RlZCB2YWx1ZSBjb21wYXJpc29uICR7cShjb21wKX0gZm9yICR7bGVmdFZhbHVlfSB2cyAke3JpZ2h0VmFsdWV9YDtcbnJldHVybiBOYU47XG4gfVxuaWYobGVmdElzQmlnZ2VyJiZyaWdodElzQmlnZ2VyKXtcbnJldHVybiBOYU47XG4gfVxuIH1cbi8vXG5yZXR1cm4gbGVmdElzQmlnZ2VyPzE6cmlnaHRJc0JpZ2dlcj8tMTowO1xuIH0pOyRozY9fb25jZS5tYWtlQ29tcGFyZUNvbGxlY3Rpb24obWFrZUNvbXBhcmVDb2xsZWN0aW9uKTtcbmhhcmRlbihtYWtlQ29tcGFyZUNvbGxlY3Rpb24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMiOlsiZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMiXSwibWFrZUNvbXBhcmVDb2xsZWN0aW9uIjpbIm1ha2VDb21wYXJlQ29sbGVjdGlvbiJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACXGHwygRYAAIEWAAA1AAAAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyIsIi4vY29weUJhZy5qcyJdLCJleHBvcnRzIjpbImJhZ0Rpc2pvaW50U3VidHJhY3QiLCJiYWdJbnRlcnNlY3Rpb24iLCJiYWdJc0Rpc2pvaW50IiwiYmFnSXNTdXBlcmJhZyIsImJhZ1VuaW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UmFua1NvcnRlZCxjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxxLEZhaWwsYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzLG1ha2VCYWdPZkVudHJpZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlCYWcuanNcIiwgW1tcImFzc2VydE5vRHVwbGljYXRlS2V5c1wiLCBbJGjNj19hID0+IChhc3NlcnROb0R1cGxpY2F0ZUtleXMgPSAkaM2PX2EpXV0sW1wibWFrZUJhZ09mRW50cmllc1wiLCBbJGjNj19hID0+IChtYWtlQmFnT2ZFbnRyaWVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBiYWdXaW5kb3dSZXNvcnQ9KGJhZ0VudHJpZXMscmFua0NvbXBhcmUsZnVsbENvbXBhcmUpPT57XG5hc3NlcnRSYW5rU29ydGVkKGJhZ0VudHJpZXMscmFua0NvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1iYWdFbnRyaWVzO1xubGV0IGk9MDtcbmxldCBvcHRJbm5lckl0ZXJhdG9yO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+XG5oYXJkZW4oe1xubmV4dDooKT0+e1xuaWYob3B0SW5uZXJJdGVyYXRvcil7XG5jb25zdCByZXN1bHQ9b3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG5pZihyZXN1bHQuZG9uZSl7XG5vcHRJbm5lckl0ZXJhdG9yPXVuZGVmaW5lZDtcbi8vXG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5pZihpPGxlbmd0aCl7XG5jb25zdCBlbnRyeT1iYWdFbnRyaWVzW2ldO1xubGV0IGo9aSsxO1xud2hpbGUoXG5qPGxlbmd0aCYmXG5yYW5rQ29tcGFyZShlbnRyeVswXSxiYWdFbnRyaWVzW2pdWzBdKT09PTApXG57XG5qKz0xO1xuIH1cbmlmKGo9PT1pKzEpe1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTplbnRyeX0pO1xuIH1cbmNvbnN0IHNpbWlsYXJSdW49YmFnRW50cmllcy5zbGljZShpLGopO1xuaT1qO1xuY29uc3QgcmVzb3J0ZWQ9c29ydEJ5UmFuayhzaW1pbGFyUnVuLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbmFzc2VydE5vRHVwbGljYXRlS2V5cyhyZXNvcnRlZCxmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbm9wdElubmVySXRlcmF0b3I9cmVzb3J0ZWRbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIG9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOltudWxsLDBuXX0pO1xuIH1cbiB9fSl9KTtcblxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1lcmdlPSh4YmFnRW50cmllcyx5YmFnRW50cmllcyk9Pntcbi8vXG4vL1xuY29uc3QgZnVsbENvbXBhcmU9bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcblxuY29uc3QgeHM9YmFnV2luZG93UmVzb3J0KHhiYWdFbnRyaWVzLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5jb25zdCB5cz1iYWdXaW5kb3dSZXNvcnQoeWJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9Pntcbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgKi9cbmxldCB4O1xubGV0IHhjO1xubGV0IHhEb25lO1xuLyogICAgICAgICAgICAqL1xubGV0IHk7XG5sZXQgeWM7XG5sZXQgeURvbmU7XG5cbmNvbnN0IHhpPXhzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtcbmRvbmU6eERvbmUsXG52YWx1ZTpbeCx4Y119PVxueGkubmV4dCgpKTtcbiB9O1xubmV4dFgoKTtcblxuY29uc3QgeWk9eXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFk9KCk9PntcbiF5RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRZIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe1xuZG9uZTp5RG9uZSxcbnZhbHVlOlt5LHljXX09XG55aS5uZXh0KCkpO1xuIH07XG5uZXh0WSgpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbm5leHQ6KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgKi9cbmxldCBkb25lPWZhbHNlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB2YWx1ZTtcbmlmKHhEb25lJiZ5RG9uZSl7XG5kb25lPXRydWU7XG4vL1xudmFsdWU9W251bGwsMG4sMG5dO1xuIH1lbHNlIGlmKHhEb25lKXtcbi8vXG52YWx1ZT1beSwwbix5Y107XG5uZXh0WSgpO1xuIH1lbHNlIGlmKHlEb25lKXtcbi8vXG52YWx1ZT1beCx4Yywwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuY29uc3QgY29tcD1mdWxsQ29tcGFyZSh4LHkpO1xuaWYoY29tcD09PTApe1xuLy9cbnZhbHVlPVt4LHhjLHljXTtcbm5leHRYKCk7XG5uZXh0WSgpO1xuIH1lbHNlIGlmKGNvbXA8MCl7XG4vL1xudmFsdWU9W3gseGMsMG5dO1xubmV4dFgoKTtcbiB9ZWxzZXtcbi8vXG5jb21wPjB8fEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGNvbXAgJHtxKGNvbXApfWA7XG52YWx1ZT1beSwwbix5Y107XG5uZXh0WSgpO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lLHZhbHVlfSk7XG4gfX0pO1xuXG4gfX0pO1xuXG4gfTtcbmhhcmRlbihtZXJnZSk7XG5cbi8vXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlcklzU3VwZXJiYWc9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM8eWMpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLy9cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVySXNEaXNqb2ludD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MW4mJnljPj0xbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVyVW5pb249KHh5aSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnJlc3VsdC5wdXNoKFttLHhjK3ljXSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVySW50ZXJzZWN0aW9uPSh4eWkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5jb25zdCBtYz14Yzw9eWM/eGM6eWM7XG5yZXN1bHQucHVzaChbbSxtY10pO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlckRpc2pvaW50U3VidHJhY3Q9KHh5aSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmNvbnN0IG1jPXhjLXljO1xubWM+PTBufHxGYWlsIGByaWdodCBlbGVtZW50ICR7bX0gd2FzIG5vdCBpbiBsZWZ0YDtcbmlmKG1jPj0xbil7XG4vL1xucmVzdWx0LnB1c2goW20sbWNdKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG5jb25zdCBtZXJnZWlmeT0oYmFnSXRlck9wKT0+KHhiYWdFbnRyaWVzLHliYWdFbnRyaWVzKT0+XG5iYWdJdGVyT3AobWVyZ2UoeGJhZ0VudHJpZXMseWJhZ0VudHJpZXMpKTtcblxuY29uc3QgYmFnRW50cmllc0lzU3VwZXJiYWc9bWVyZ2VpZnkoYmFnSXRlcklzU3VwZXJiYWcpO1xuY29uc3QgYmFnRW50cmllc0lzRGlzam9pbnQ9bWVyZ2VpZnkoYmFnSXRlcklzRGlzam9pbnQpO1xuY29uc3QgYmFnRW50cmllc1VuaW9uPW1lcmdlaWZ5KGJhZ0l0ZXJVbmlvbik7XG5jb25zdCBiYWdFbnRyaWVzSW50ZXJzZWN0aW9uPW1lcmdlaWZ5KGJhZ0l0ZXJJbnRlcnNlY3Rpb24pO1xuY29uc3QgYmFnRW50cmllc0Rpc2pvaW50U3VidHJhY3Q9bWVyZ2VpZnkoYmFnSXRlckRpc2pvaW50U3VidHJhY3QpO1xuXG5jb25zdCByYXdCYWdpZnk9KGJhZ0VudHJpZXNPcCk9Pih4YmFnLHliYWcpPT5cbmJhZ0VudHJpZXNPcCh4YmFnLnBheWxvYWQseWJhZy5wYXlsb2FkKTtcblxuY29uc3QgYmFnaWZ5PShiYWdFbnRyaWVzT3ApPT4oeGJhZyx5YmFnKT0+XG5tYWtlQmFnT2ZFbnRyaWVzKGJhZ0VudHJpZXNPcCh4YmFnLnBheWxvYWQseWJhZy5wYXlsb2FkKSk7XG5cbmNvbnN0ICAgICAgICBiYWdJc1N1cGVyYmFnPXJhd0JhZ2lmeShiYWdFbnRyaWVzSXNTdXBlcmJhZyk7JGjNj19vbmNlLmJhZ0lzU3VwZXJiYWcoYmFnSXNTdXBlcmJhZyk7XG5jb25zdCAgICAgICAgYmFnSXNEaXNqb2ludD1yYXdCYWdpZnkoYmFnRW50cmllc0lzRGlzam9pbnQpOyRozY9fb25jZS5iYWdJc0Rpc2pvaW50KGJhZ0lzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIGJhZ1VuaW9uPWJhZ2lmeShiYWdFbnRyaWVzVW5pb24pOyRozY9fb25jZS5iYWdVbmlvbihiYWdVbmlvbik7XG5jb25zdCAgICAgICAgYmFnSW50ZXJzZWN0aW9uPWJhZ2lmeShiYWdFbnRyaWVzSW50ZXJzZWN0aW9uKTskaM2PX29uY2UuYmFnSW50ZXJzZWN0aW9uKGJhZ0ludGVyc2VjdGlvbik7XG5jb25zdCAgICAgICAgYmFnRGlzam9pbnRTdWJ0cmFjdD1iYWdpZnkoYmFnRW50cmllc0Rpc2pvaW50U3VidHJhY3QpOyRozY9fb25jZS5iYWdEaXNqb2ludFN1YnRyYWN0KGJhZ0Rpc2pvaW50U3VidHJhY3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYmFnSXNTdXBlcmJhZyI6WyJiYWdJc1N1cGVyYmFnIl0sImJhZ0lzRGlzam9pbnQiOlsiYmFnSXNEaXNqb2ludCJdLCJiYWdVbmlvbiI6WyJiYWdVbmlvbiJdLCJiYWdJbnRlcnNlY3Rpb24iOlsiYmFnSW50ZXJzZWN0aW9uIl0sImJhZ0Rpc2pvaW50U3VidHJhY3QiOlsiYmFnRGlzam9pbnRTdWJ0cmFjdCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA2IGmluhwAALocAAA1AAAAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyIsIi4vY29weVNldC5qcyJdLCJleHBvcnRzIjpbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNVbmlvbiIsInNldERpc2pvaW50U3VidHJhY3QiLCJzZXREaXNqb2ludFVuaW9uIiwic2V0SW50ZXJzZWN0aW9uIiwic2V0SXNEaXNqb2ludCIsInNldElzU3VwZXJzZXQiLCJzZXRVbmlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydFJhbmtTb3J0ZWQsY29tcGFyZUFudGlSYW5rLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmsscSxGYWlsLGFzc2VydE5vRHVwbGljYXRlcyxtYWtlU2V0T2ZFbGVtZW50czskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vY29weVNldC5qc1wiLCBbW1wiYXNzZXJ0Tm9EdXBsaWNhdGVzXCIsIFskaM2PX2EgPT4gKGFzc2VydE5vRHVwbGljYXRlcyA9ICRozY9fYSldXSxbXCJtYWtlU2V0T2ZFbGVtZW50c1wiLCBbJGjNj19hID0+IChtYWtlU2V0T2ZFbGVtZW50cyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCB3aW5kb3dSZXNvcnQ9KGVsZW1lbnRzLHJhbmtDb21wYXJlLGZ1bGxDb21wYXJlKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChlbGVtZW50cyxyYW5rQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWVsZW1lbnRzO1xubGV0IGk9MDtcbmxldCBvcHRJbm5lckl0ZXJhdG9yO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+XG5oYXJkZW4oe1xubmV4dDooKT0+e1xuaWYob3B0SW5uZXJJdGVyYXRvcil7XG5jb25zdCByZXN1bHQ9b3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG5pZihyZXN1bHQuZG9uZSl7XG5vcHRJbm5lckl0ZXJhdG9yPXVuZGVmaW5lZDtcbi8vXG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5pZihpPGxlbmd0aCl7XG5jb25zdCB2YWx1ZT1lbGVtZW50c1tpXTtcbmxldCBqPWkrMTtcbndoaWxlKGo8bGVuZ3RoJiZyYW5rQ29tcGFyZSh2YWx1ZSxlbGVtZW50c1tqXSk9PT0wKXtcbmorPTE7XG4gfVxuaWYoaj09PWkrMSl7XG5pPWo7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfVxuY29uc3Qgc2ltaWxhclJ1bj1lbGVtZW50cy5zbGljZShpLGopO1xuaT1qO1xuY29uc3QgcmVzb3J0ZWQ9c29ydEJ5UmFuayhzaW1pbGFyUnVuLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbmFzc2VydE5vRHVwbGljYXRlcyhyZXNvcnRlZCxmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbm9wdElubmVySXRlcmF0b3I9cmVzb3J0ZWRbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIG9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOm51bGx9KTtcbiB9XG4gfX0pfSk7XG5cblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtZXJnZT0oeGVsZW1lbnRzLHllbGVtZW50cyk9Pntcbi8vXG4vL1xuY29uc3QgZnVsbENvbXBhcmU9bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcblxuY29uc3QgeHM9d2luZG93UmVzb3J0KHhlbGVtZW50cyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xuY29uc3QgeXM9d2luZG93UmVzb3J0KHllbGVtZW50cyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAqL1xubGV0IHg7XG5sZXQgeERvbmU7XG4vKiAgICAgICAgICAgICovXG5sZXQgeTtcbmxldCB5RG9uZTtcblxuY29uc3QgeGk9eHNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFg9KCk9PntcbiF4RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRYIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe2RvbmU6eERvbmUsdmFsdWU6eH09eGkubmV4dCgpKTtcbiB9O1xubmV4dFgoKTtcblxuY29uc3QgeWk9eXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFk9KCk9PntcbiF5RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRZIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe2RvbmU6eURvbmUsdmFsdWU6eX09eWkubmV4dCgpKTtcbiB9O1xubmV4dFkoKTtcblxucmV0dXJuIGhhcmRlbih7XG5uZXh0OigpPT57XG4vKiAgICAgICAgICAgICAgICAgICovXG5sZXQgZG9uZT1mYWxzZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZih4RG9uZSYmeURvbmUpe1xuZG9uZT10cnVlO1xuLy9cbnZhbHVlPVtudWxsLDBuLDBuXTtcbiB9ZWxzZSBpZih4RG9uZSl7XG4vL1xudmFsdWU9W3ksMG4sMW5dO1xubmV4dFkoKTtcbiB9ZWxzZSBpZih5RG9uZSl7XG4vL1xudmFsdWU9W3gsMW4sMG5dO1xubmV4dFgoKTtcbiB9ZWxzZXtcbmNvbnN0IGNvbXA9ZnVsbENvbXBhcmUoeCx5KTtcbmlmKGNvbXA9PT0wKXtcbi8vXG52YWx1ZT1beCwxbiwxbl07XG5uZXh0WCgpO1xubmV4dFkoKTtcbiB9ZWxzZSBpZihjb21wPDApe1xuLy9cbnZhbHVlPVt4LDFuLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG4vL1xuY29tcD4wfHxGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBjb21wICR7cShjb21wKX1gO1xudmFsdWU9W3ksMG4sMW5dO1xubmV4dFkoKTtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZSx2YWx1ZX0pO1xuIH19KTtcblxuIH19KTtcblxuIH07XG5oYXJkZW4obWVyZ2UpO1xuXG5jb25zdCBpdGVySXNTdXBlcnNldD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLF95Y11vZiB4eWkpe1xuaWYoeGM9PT0wbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVySXNEaXNqb2ludD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MW4mJnljPj0xbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyQ29tcGFyZT0oeHlpKT0+e1xubGV0IGxvbmVZPWZhbHNlO1xubGV0IGxvbmVYPWZhbHNlO1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz09PTBuKXtcbi8vXG5sb25lWT10cnVlO1xuIH1cbmlmKHljPT09MG4pe1xuLy9cbmxvbmVYPXRydWU7XG4gfVxuaWYobG9uZVgmJmxvbmVZKXtcbnJldHVybiBOYU47XG4gfVxuIH1cbmlmKGxvbmVYKXtcbnJldHVybiAxO1xuIH1lbHNlIGlmKGxvbmVZKXtcbnJldHVybi0xO1xuIH1lbHNle1xuIWxvbmVYJiYhbG9uZVl8fFxuRmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgbG9uZSBwYWlyICR7cShbbG9uZVgsbG9uZVldKX1gO1xucmV0dXJuIDA7XG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGl0ZXJVbmlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0wbil7XG5yZXN1bHQucHVzaChtKTtcbiB9ZWxzZXtcbnljPj0wbnx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY291bnQgJHtxKHljKX1gO1xuLy9cbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyRGlzam9pbnRVbmlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnhjPT09MG58fHljPT09MG58fEZhaWwgYFNldHMgbXVzdCBub3QgaGF2ZSBjb21tb24gZWxlbWVudHM6ICR7bX1gO1xuaWYoeGM+PTFuKXtcbnJlc3VsdC5wdXNoKG0pO1xuIH1lbHNle1xueWM+PTFufHxGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBjb3VudCAke3EoeWMpfWA7XG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVySW50ZXJzZWN0aW9uPSh4eWkpPT57XG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM+PTFuJiZ5Yz49MW4pe1xuLy9cbnJlc3VsdC5wdXNoKG0pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGl0ZXJEaXNqb2ludFN1YnRyYWN0PSh4eWkpPT57XG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xueGM+PTFufHxGYWlsIGByaWdodCBlbGVtZW50ICR7bX0gd2FzIG5vdCBpbiBsZWZ0YDtcbmlmKHljPT09MG4pe1xuLy9cbnJlc3VsdC5wdXNoKG0pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbmNvbnN0IG1lcmdlaWZ5PShpdGVyT3ApPT4oeGVsZW1lbnRzLHllbGVtZW50cyk9PlxuaXRlck9wKG1lcmdlKHhlbGVtZW50cyx5ZWxlbWVudHMpKTtcblxuY29uc3QgICAgICAgIGVsZW1lbnRzSXNTdXBlcnNldD1tZXJnZWlmeShpdGVySXNTdXBlcnNldCk7JGjNj19vbmNlLmVsZW1lbnRzSXNTdXBlcnNldChlbGVtZW50c0lzU3VwZXJzZXQpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzSXNEaXNqb2ludD1tZXJnZWlmeShpdGVySXNEaXNqb2ludCk7JGjNj19vbmNlLmVsZW1lbnRzSXNEaXNqb2ludChlbGVtZW50c0lzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzQ29tcGFyZT1tZXJnZWlmeShpdGVyQ29tcGFyZSk7JGjNj19vbmNlLmVsZW1lbnRzQ29tcGFyZShlbGVtZW50c0NvbXBhcmUpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzVW5pb249bWVyZ2VpZnkoaXRlclVuaW9uKTskaM2PX29uY2UuZWxlbWVudHNVbmlvbihlbGVtZW50c1VuaW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0Rpc2pvaW50VW5pb249bWVyZ2VpZnkoaXRlckRpc2pvaW50VW5pb24pOyRozY9fb25jZS5lbGVtZW50c0Rpc2pvaW50VW5pb24oZWxlbWVudHNEaXNqb2ludFVuaW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0ludGVyc2VjdGlvbj1tZXJnZWlmeShpdGVySW50ZXJzZWN0aW9uKTskaM2PX29uY2UuZWxlbWVudHNJbnRlcnNlY3Rpb24oZWxlbWVudHNJbnRlcnNlY3Rpb24pO1xuY29uc3QgICAgICAgIGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdD1tZXJnZWlmeShpdGVyRGlzam9pbnRTdWJ0cmFjdCk7JGjNj19vbmNlLmVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdChlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QpO1xuXG5jb25zdCByYXdTZXRpZnk9KGVsZW1lbnRzT3ApPT4oeHNldCx5c2V0KT0+XG5lbGVtZW50c09wKHhzZXQucGF5bG9hZCx5c2V0LnBheWxvYWQpO1xuXG5jb25zdCBzZXRpZnk9KGVsZW1lbnRzT3ApPT4oeHNldCx5c2V0KT0+XG5tYWtlU2V0T2ZFbGVtZW50cyhlbGVtZW50c09wKHhzZXQucGF5bG9hZCx5c2V0LnBheWxvYWQpKTtcblxuY29uc3QgICAgICAgIHNldElzU3VwZXJzZXQ9cmF3U2V0aWZ5KGVsZW1lbnRzSXNTdXBlcnNldCk7JGjNj19vbmNlLnNldElzU3VwZXJzZXQoc2V0SXNTdXBlcnNldCk7XG5jb25zdCAgICAgICAgc2V0SXNEaXNqb2ludD1yYXdTZXRpZnkoZWxlbWVudHNJc0Rpc2pvaW50KTskaM2PX29uY2Uuc2V0SXNEaXNqb2ludChzZXRJc0Rpc2pvaW50KTtcbmNvbnN0ICAgICAgICBzZXRVbmlvbj1zZXRpZnkoZWxlbWVudHNVbmlvbik7JGjNj19vbmNlLnNldFVuaW9uKHNldFVuaW9uKTtcbmNvbnN0ICAgICAgICBzZXREaXNqb2ludFVuaW9uPXNldGlmeShlbGVtZW50c0Rpc2pvaW50VW5pb24pOyRozY9fb25jZS5zZXREaXNqb2ludFVuaW9uKHNldERpc2pvaW50VW5pb24pO1xuY29uc3QgICAgICAgIHNldEludGVyc2VjdGlvbj1zZXRpZnkoZWxlbWVudHNJbnRlcnNlY3Rpb24pOyRozY9fb25jZS5zZXRJbnRlcnNlY3Rpb24oc2V0SW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBzZXREaXNqb2ludFN1YnRyYWN0PXNldGlmeShlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QpOyRozY9fb25jZS5zZXREaXNqb2ludFN1YnRyYWN0KHNldERpc2pvaW50U3VidHJhY3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZWxlbWVudHNJc1N1cGVyc2V0IjpbImVsZW1lbnRzSXNTdXBlcnNldCJdLCJlbGVtZW50c0lzRGlzam9pbnQiOlsiZWxlbWVudHNJc0Rpc2pvaW50Il0sImVsZW1lbnRzQ29tcGFyZSI6WyJlbGVtZW50c0NvbXBhcmUiXSwiZWxlbWVudHNVbmlvbiI6WyJlbGVtZW50c1VuaW9uIl0sImVsZW1lbnRzRGlzam9pbnRVbmlvbiI6WyJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSwiZWxlbWVudHNJbnRlcnNlY3Rpb24iOlsiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IjpbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLCJzZXRJc1N1cGVyc2V0IjpbInNldElzU3VwZXJzZXQiXSwic2V0SXNEaXNqb2ludCI6WyJzZXRJc0Rpc2pvaW50Il0sInNldFVuaW9uIjpbInNldFVuaW9uIl0sInNldERpc2pvaW50VW5pb24iOlsic2V0RGlzam9pbnRVbmlvbiJdLCJzZXRJbnRlcnNlY3Rpb24iOlsic2V0SW50ZXJzZWN0aW9uIl0sInNldERpc2pvaW50U3VidHJhY3QiOlsic2V0RGlzam9pbnRTdWJ0cmFjdCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADkIGUvHBkAABwZAAA2AAAAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiLi9wYXR0ZXJuTWF0Y2hlcnMuanMiLCIuLi9rZXlzL2NoZWNrS2V5LmpzIl0sImV4cG9ydHMiOlsiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiLCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQiLCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgb2JqZWN0TWFwLEFyZ0d1YXJkTGlzdFNoYXBlLEF3YWl0QXJnR3VhcmRTaGFwZSxJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSxJbnRlcmZhY2VHdWFyZFNoYXBlLE0sTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUsTWV0aG9kR3VhcmRTaGFwZSxSYXdHdWFyZFNoYXBlLFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlLFN5bmNWYWx1ZUd1YXJkU2hhcGUsYXNzZXJ0QXdhaXRBcmdHdWFyZCxtYXRjaGVzLG11c3RNYXRjaCxnZXRDb3B5TWFwS2V5cyxtYWtlQ29weU1hcDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiLi9wYXR0ZXJuTWF0Y2hlcnMuanNcIiwgW1tcIkFyZ0d1YXJkTGlzdFNoYXBlXCIsIFskaM2PX2EgPT4gKEFyZ0d1YXJkTGlzdFNoYXBlID0gJGjNj19hKV1dLFtcIkF3YWl0QXJnR3VhcmRTaGFwZVwiLCBbJGjNj19hID0+IChBd2FpdEFyZ0d1YXJkU2hhcGUgPSAkaM2PX2EpXV0sW1wiSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGVcIiwgWyRozY9fYSA9PiAoSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUgPSAkaM2PX2EpXV0sW1wiSW50ZXJmYWNlR3VhcmRTaGFwZVwiLCBbJGjNj19hID0+IChJbnRlcmZhY2VHdWFyZFNoYXBlID0gJGjNj19hKV1dLFtcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJNZXRob2RHdWFyZFBheWxvYWRTaGFwZVwiLCBbJGjNj19hID0+IChNZXRob2RHdWFyZFBheWxvYWRTaGFwZSA9ICRozY9fYSldXSxbXCJNZXRob2RHdWFyZFNoYXBlXCIsIFskaM2PX2EgPT4gKE1ldGhvZEd1YXJkU2hhcGUgPSAkaM2PX2EpXV0sW1wiUmF3R3VhcmRTaGFwZVwiLCBbJGjNj19hID0+IChSYXdHdWFyZFNoYXBlID0gJGjNj19hKV1dLFtcIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlXCIsIFskaM2PX2EgPT4gKFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlID0gJGjNj19hKV1dLFtcIlN5bmNWYWx1ZUd1YXJkU2hhcGVcIiwgWyRozY9fYSA9PiAoU3luY1ZhbHVlR3VhcmRTaGFwZSA9ICRozY9fYSldXSxbXCJhc3NlcnRBd2FpdEFyZ0d1YXJkXCIsIFskaM2PX2EgPT4gKGFzc2VydEF3YWl0QXJnR3VhcmQgPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV1dXSxbXCIuLi9rZXlzL2NoZWNrS2V5LmpzXCIsIFtbXCJnZXRDb3B5TWFwS2V5c1wiLCBbJGjNj19hID0+IChnZXRDb3B5TWFwS2V5cyA9ICRozY9fYSldXSxbXCJtYWtlQ29weU1hcFwiLCBbJGjNj19hID0+IChtYWtlQ29weU1hcCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUF3YWl0QXJnR3VhcmRTaGFwZT1oYXJkZW4oe1xua2xhc3M6J2F3YWl0QXJnJyxcbmFyZ0d1YXJkOk0ucGF0dGVybigpfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkPShhd2FpdEFyZ0d1YXJkKT0+e1xuaWYobWF0Y2hlcyhhd2FpdEFyZ0d1YXJkLExlZ2FjeUF3YWl0QXJnR3VhcmRTaGFwZSkpe1xuLy9cbmNvbnN0e2tsYXNzOl8sLi4ucGF5bG9hZH09YXdhaXRBcmdHdWFyZDtcbi8vXG5yZXR1cm4gcGF5bG9hZDtcbiB9XG5hc3NlcnRBd2FpdEFyZ0d1YXJkKGF3YWl0QXJnR3VhcmQpO1xucmV0dXJuIGF3YWl0QXJnR3VhcmQucGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZChnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCk7XG5oYXJkZW4oZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lTeW5jTWV0aG9kR3VhcmRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xua2xhc3M6J21ldGhvZEd1YXJkJyxcbmNhbGxLaW5kOidzeW5jJyxcbmFyZ0d1YXJkczpTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9LFxuXG57XG5vcHRpb25hbEFyZ0d1YXJkczpTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxcbnJlc3RBcmdHdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSk7XG5cblxuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lBcmdHdWFyZFNoYXBlPU0ub3IoXG5SYXdHdWFyZFNoYXBlLFxuQXdhaXRBcmdHdWFyZFNoYXBlLFxuTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlLFxuTS5wYXR0ZXJuKCkpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lBcmdHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoTGVnYWN5QXJnR3VhcmRTaGFwZSk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUFzeW5jTWV0aG9kR3VhcmRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xua2xhc3M6J21ldGhvZEd1YXJkJyxcbmNhbGxLaW5kOidhc3luYycsXG5hcmdHdWFyZHM6TGVnYWN5QXJnR3VhcmRMaXN0U2hhcGUsXG5yZXR1cm5HdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSxcblxue1xub3B0aW9uYWxBcmdHdWFyZHM6QXJnR3VhcmRMaXN0U2hhcGUsXG5yZXN0QXJnR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0pO1xuXG5cblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5TWV0aG9kR3VhcmRTaGFwZT1NLm9yKFxuTGVnYWN5U3luY01ldGhvZEd1YXJkU2hhcGUsXG5MZWdhY3lBc3luY01ldGhvZEd1YXJkU2hhcGUpO1xuXG5cbmNvbnN0IGFkYXB0TGVnYWN5QXJnR3VhcmQ9KGFyZ0d1YXJkKT0+XG5tYXRjaGVzKGFyZ0d1YXJkLExlZ2FjeUF3YWl0QXJnR3VhcmRTaGFwZSk/XG5NLmF3YWl0KGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKGFyZ0d1YXJkKS5hcmdHdWFyZCk6XG5hcmdHdWFyZDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRNZXRob2RHdWFyZFBheWxvYWQ9KG1ldGhvZEd1YXJkKT0+e1xuaWYobWF0Y2hlcyhtZXRob2RHdWFyZCxNZXRob2RHdWFyZFNoYXBlKSl7XG5yZXR1cm4gbWV0aG9kR3VhcmQucGF5bG9hZDtcbiB9XG5tdXN0TWF0Y2gobWV0aG9kR3VhcmQsTGVnYWN5TWV0aG9kR3VhcmRTaGFwZSwnbGVnYWN5TWV0aG9kR3VhcmQnKTtcbmNvbnN0e1xuLy9cbmtsYXNzOl8sXG4vL1xuY2FsbEtpbmQsXG4vL1xucmV0dXJuR3VhcmQsXG4vL1xucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkO1xubGV0e1xuLy9cbmFyZ0d1YXJkcyxcbi8vXG5vcHRpb25hbEFyZ0d1YXJkc309XG5tZXRob2RHdWFyZDtcbmlmKGNhbGxLaW5kPT09J2FzeW5jJyl7XG5hcmdHdWFyZHM9YXJnR3VhcmRzLm1hcChhZGFwdExlZ2FjeUFyZ0d1YXJkKTtcbm9wdGlvbmFsQXJnR3VhcmRzPVxub3B0aW9uYWxBcmdHdWFyZHMmJm9wdGlvbmFsQXJnR3VhcmRzLm1hcChhZGFwdExlZ2FjeUFyZ0d1YXJkKTtcbiB9XG5jb25zdCBwYXlsb2FkPWhhcmRlbih7XG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzLFxucmVzdEFyZ0d1YXJkLFxucmV0dXJuR3VhcmR9KTtcblxuLy9cbm11c3RNYXRjaChwYXlsb2FkLE1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLCdpbnRlcm5hbE1ldGhvZEd1YXJkQWRhcHRvcicpO1xucmV0dXJuIHBheWxvYWQ7XG4gfTskaM2PX29uY2UuZ2V0TWV0aG9kR3VhcmRQYXlsb2FkKGdldE1ldGhvZEd1YXJkUGF5bG9hZCk7XG5oYXJkZW4oZ2V0TWV0aG9kR3VhcmRQYXlsb2FkKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5SW50ZXJmYWNlR3VhcmRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xua2xhc3M6J0ludGVyZmFjZScsXG5pbnRlcmZhY2VOYW1lOk0uc3RyaW5nKCksXG5tZXRob2RHdWFyZHM6TS5yZWNvcmRPZihcbk0uc3RyaW5nKCksXG5NLm9yKE1ldGhvZEd1YXJkU2hhcGUsTGVnYWN5TWV0aG9kR3VhcmRTaGFwZSkpfSxcblxuXG57XG5kZWZhdWx0R3VhcmRzOk0ub3IoTS51bmRlZmluZWQoKSwncGFzc2FibGUnLCdyYXcnKSxcbnNsb3BweTpNLmJvb2xlYW4oKSxcbi8vXG4vL1xuLy9cbnN5bWJvbE1ldGhvZEd1YXJkczpNLm1hcE9mKE0uc3ltYm9sKCksTWV0aG9kR3VhcmRTaGFwZSl9KTtcblxuXG5cbmNvbnN0IGFkYXB0TWV0aG9kR3VhcmQ9KG1ldGhvZEd1YXJkKT0+e1xuaWYobWF0Y2hlcyhtZXRob2RHdWFyZCxMZWdhY3lNZXRob2RHdWFyZFNoYXBlKSl7XG5jb25zdHtcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHM9W10sXG5yZXN0QXJnR3VhcmQ9TS5hbnkoKSxcbnJldHVybkd1YXJkfT1cbmdldE1ldGhvZEd1YXJkUGF5bG9hZChtZXRob2RHdWFyZCk7XG5jb25zdCBtQ2FsbD1jYWxsS2luZD09PSdzeW5jJz9NLmNhbGw6TS5jYWxsV2hlbjtcbnJldHVybiBtQ2FsbCguLi5hcmdHdWFyZHMpLlxub3B0aW9uYWwoLi4ub3B0aW9uYWxBcmdHdWFyZHMpLlxucmVzdChyZXN0QXJnR3VhcmQpLlxucmV0dXJucyhyZXR1cm5HdWFyZCk7XG4gfVxucmV0dXJuIG1ldGhvZEd1YXJkO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQ9KGludGVyZmFjZUd1YXJkKT0+e1xuaWYobWF0Y2hlcyhpbnRlcmZhY2VHdWFyZCxJbnRlcmZhY2VHdWFyZFNoYXBlKSl7XG5yZXR1cm4gaW50ZXJmYWNlR3VhcmQucGF5bG9hZDtcbiB9XG5tdXN0TWF0Y2goaW50ZXJmYWNlR3VhcmQsTGVnYWN5SW50ZXJmYWNlR3VhcmRTaGFwZSwnbGVnYWN5SW50ZXJmYWNlR3VhcmQnKTtcbi8vXG4vL1xubGV0e2tsYXNzOl8saW50ZXJmYWNlTmFtZSxtZXRob2RHdWFyZHMsLi4ucmVzdH09aW50ZXJmYWNlR3VhcmQ7XG5tZXRob2RHdWFyZHM9b2JqZWN0TWFwKG1ldGhvZEd1YXJkcyxhZGFwdE1ldGhvZEd1YXJkKTtcbmNvbnN0IHBheWxvYWQ9aGFyZGVuKHtcbmludGVyZmFjZU5hbWUsXG5tZXRob2RHdWFyZHMsXG4uLi5yZXN0fSk7XG5cbm11c3RNYXRjaChcbnBheWxvYWQsXG5JbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSxcbidpbnRlcm5hbEludGVyZmFjZUd1YXJkQWRhcHRvcicpO1xuXG5yZXR1cm4gcGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQpO1xuXG5jb25zdCBlbXB0eUNvcHlNYXA9bWFrZUNvcHlNYXAoW10pO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEludGVyZmFjZU1ldGhvZEtleXM9KGludGVyZmFjZUd1YXJkKT0+e1xuY29uc3R7bWV0aG9kR3VhcmRzLHN5bWJvbE1ldGhvZEd1YXJkcz1lbXB0eUNvcHlNYXB9PVxuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKGludGVyZmFjZUd1YXJkKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG4vL1xucmV0dXJuIGhhcmRlbihbXG4uLi5SZWZsZWN0Lm93bktleXMobWV0aG9kR3VhcmRzKSxcbi4uLmdldENvcHlNYXBLZXlzKHN5bWJvbE1ldGhvZEd1YXJkcyldKTtcblxuIH07JGjNj19vbmNlLmdldEludGVyZmFjZU1ldGhvZEtleXMoZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyk7XG5oYXJkZW4oZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCI6WyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCJdLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiOlsiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIl0sImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCI6WyJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQiXSwiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyI6WyJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKjet773rQAA960AADUAAABAZW5kby9wYXR0ZXJucy12MS40Ljgvc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiLCJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiLCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyIsIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiLCJAZW5kby9lcnJvcnMiLCIuLi9rZXlzL2NvbXBhcmVLZXlzLmpzIiwiLi4va2V5cy9jaGVja0tleS5qcyIsIi4uL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanMiXSwiZXhwb3J0cyI6WyJBcmdHdWFyZExpc3RTaGFwZSIsIkF3YWl0QXJnR3VhcmRTaGFwZSIsIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlIiwiSW50ZXJmYWNlR3VhcmRTaGFwZSIsIk0iLCJNZXRob2RHdWFyZFBheWxvYWRTaGFwZSIsIk1ldGhvZEd1YXJkU2hhcGUiLCJSYXdHdWFyZFNoYXBlIiwiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUiLCJTeW5jVmFsdWVHdWFyZFNoYXBlIiwiYXNzZXJ0QXdhaXRBcmdHdWFyZCIsImFzc2VydEludGVyZmFjZUd1YXJkIiwiYXNzZXJ0TWV0aG9kR3VhcmQiLCJhc3NlcnRQYXR0ZXJuIiwiYXNzZXJ0UmF3R3VhcmQiLCJjaGVja01hdGNoZXMiLCJkZWZhdWx0TGltaXRzIiwiZ2V0UmFua0NvdmVyIiwiaXNBd2FpdEFyZ0d1YXJkIiwiaXNQYXR0ZXJuIiwiaXNSYXdHdWFyZCIsImtpbmRPZiIsIm1hdGNoZXMiLCJtdXN0TWF0Y2giXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLEZhcixnZXRUYWcsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixoYXNPd25Qcm9wZXJ0eU9mLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxjb21wYXJlUmFuayxnZXRQYXNzU3R5bGVDb3ZlcixpbnRlcnNlY3RSYW5rQ292ZXJzLHVuaW9uUmFua0NvdmVycyxyZWNvcmROYW1lcyxyZWNvcmRWYWx1ZXMsaWRlbnRDaGVja2VyLGFwcGx5TGFiZWxpbmdFcnJvcixmcm9tVW5pcXVlRW50cmllcyxsaXN0RGlmZmVyZW5jZSxxLGIsWCxGYWlsLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLGtleUVRLGtleUdULGtleUdURSxrZXlMVCxrZXlMVEUsYXNzZXJ0S2V5LGNoZWNrS2V5LGlzS2V5LGNoZWNrU2NhbGFyS2V5LGNoZWNrQ29weVNldCxjaGVja0NvcHlNYXAsY29weU1hcEtleVNldCxjaGVja0NvcHlCYWcsZ2V0Q29weU1hcEVudHJ5QXJyYXksbWFrZUNvcHlNYXAsZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJjb21wYXJlUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlUmFuayA9ICRozY9fYSldXSxbXCJnZXRQYXNzU3R5bGVDb3ZlclwiLCBbJGjNj19hID0+IChnZXRQYXNzU3R5bGVDb3ZlciA9ICRozY9fYSldXSxbXCJpbnRlcnNlY3RSYW5rQ292ZXJzXCIsIFskaM2PX2EgPT4gKGludGVyc2VjdFJhbmtDb3ZlcnMgPSAkaM2PX2EpXV0sW1widW5pb25SYW5rQ292ZXJzXCIsIFskaM2PX2EgPT4gKHVuaW9uUmFua0NvdmVycyA9ICRozY9fYSldXSxbXCJyZWNvcmROYW1lc1wiLCBbJGjNj19hID0+IChyZWNvcmROYW1lcyA9ICRozY9fYSldXSxbXCJyZWNvcmRWYWx1ZXNcIiwgWyRozY9fYSA9PiAocmVjb3JkVmFsdWVzID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanNcIiwgW1tcImlkZW50Q2hlY2tlclwiLCBbJGjNj19hID0+IChpZGVudENoZWNrZXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanNcIiwgW1tcImFwcGx5TGFiZWxpbmdFcnJvclwiLCBbJGjNj19hID0+IChhcHBseUxhYmVsaW5nRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qc1wiLCBbW1wiZnJvbVVuaXF1ZUVudHJpZXNcIiwgWyRozY9fYSA9PiAoZnJvbVVuaXF1ZUVudHJpZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzXCIsIFtbXCJsaXN0RGlmZmVyZW5jZVwiLCBbJGjNj19hID0+IChsaXN0RGlmZmVyZW5jZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcImJcIiwgWyRozY9fYSA9PiAoYiA9ICRozY9fYSldXSxbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV0sW1wiLi4va2V5cy9jb21wYXJlS2V5cy5qc1wiLCBbW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV0sW1wia2V5R1RcIiwgWyRozY9fYSA9PiAoa2V5R1QgPSAkaM2PX2EpXV0sW1wia2V5R1RFXCIsIFskaM2PX2EgPT4gKGtleUdURSA9ICRozY9fYSldXSxbXCJrZXlMVFwiLCBbJGjNj19hID0+IChrZXlMVCA9ICRozY9fYSldXSxbXCJrZXlMVEVcIiwgWyRozY9fYSA9PiAoa2V5TFRFID0gJGjNj19hKV1dXV0sW1wiLi4va2V5cy9jaGVja0tleS5qc1wiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJjaGVja0tleVwiLCBbJGjNj19hID0+IChjaGVja0tleSA9ICRozY9fYSldXSxbXCJpc0tleVwiLCBbJGjNj19hID0+IChpc0tleSA9ICRozY9fYSldXSxbXCJjaGVja1NjYWxhcktleVwiLCBbJGjNj19hID0+IChjaGVja1NjYWxhcktleSA9ICRozY9fYSldXSxbXCJjaGVja0NvcHlTZXRcIiwgWyRozY9fYSA9PiAoY2hlY2tDb3B5U2V0ID0gJGjNj19hKV1dLFtcImNoZWNrQ29weU1hcFwiLCBbJGjNj19hID0+IChjaGVja0NvcHlNYXAgPSAkaM2PX2EpXV0sW1wiY29weU1hcEtleVNldFwiLCBbJGjNj19hID0+IChjb3B5TWFwS2V5U2V0ID0gJGjNj19hKV1dLFtcImNoZWNrQ29weUJhZ1wiLCBbJGjNj19hID0+IChjaGVja0NvcHlCYWcgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weU1hcEVudHJ5QXJyYXlcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEVudHJ5QXJyYXkgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlNYXBcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlNYXAgPSAkaM2PX2EpXV1dXSxbXCIuLi9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzXCIsIFtbXCJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllc1wiLCBbJGjNj19hID0+IChnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuY29uc3R7ZW50cmllcyx2YWx1ZXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBhdHRlcm5NZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IE1NO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmF1bHRMaW1pdHM9aGFyZGVuKHtcbmRlY2ltYWxEaWdpdHNMaW1pdDoxMDAsXG5zdHJpbmdMZW5ndGhMaW1pdDoxMDBfMDAwLFxuc3ltYm9sTmFtZUxlbmd0aExpbWl0OjEwMCxcbm51bVByb3BlcnRpZXNMaW1pdDo4MCxcbnByb3BlcnR5TmFtZUxlbmd0aExpbWl0OjEwMCxcbmFycmF5TGVuZ3RoTGltaXQ6MTBfMDAwLFxubnVtU2V0RWxlbWVudHNMaW1pdDoxMF8wMDAsXG5udW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0OjEwXzAwMCxcbm51bU1hcEVudHJpZXNMaW1pdDo1MDAwfSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZWZhdWx0TGltaXRzKGRlZmF1bHRMaW1pdHMpO1xuY29uc3QgbGltaXQ9KGxpbWl0cz17fSk9PlxuLyogICAgICAgICAgICAgICAgICAgICovaGFyZGVuKHtfX3Byb3RvX186ZGVmYXVsdExpbWl0cywuLi5saW1pdHN9KTtcblxuY29uc3QgY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQ9KFxucGF5bG9hZCxcbm1haW5QYXlsb2FkU2hhcGUsXG5jaGVjayxcbmxhYmVsKT0+XG57XG5hc3NlcnQoQXJyYXkuaXNBcnJheShtYWluUGF5bG9hZFNoYXBlKSk7XG5pZighQXJyYXkuaXNBcnJheShwYXlsb2FkKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgJHtxKGxhYmVsKX0gcGF5bG9hZCBtdXN0IGJlIGFuIGFycmF5OiAke3BheWxvYWR9YCk7XG4gfVxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuY29uc3QgbWFpbkxlbmd0aD1tYWluUGF5bG9hZFNoYXBlLmxlbmd0aDtcbmlmKCEocGF5bG9hZC5sZW5ndGg9PT1tYWluTGVuZ3RofHxwYXlsb2FkLmxlbmd0aD09PW1haW5MZW5ndGgrMSkpe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYCR7cShsYWJlbCl9IHBheWxvYWQgdW5leHBlY3RlZCBzaXplOiAke3BheWxvYWR9YCk7XG4gfVxuY29uc3QgbGltaXRzPXBheWxvYWRbbWFpbkxlbmd0aF07XG5wYXlsb2FkPWhhcmRlbihwYXlsb2FkLnNsaWNlKDAsbWFpbkxlbmd0aCkpO1xuLy9cbmlmKCFjaGVja01hdGNoZXMocGF5bG9hZCxtYWluUGF5bG9hZFNoYXBlLGNoZWNrLGxhYmVsKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuaWYobGltaXRzPT09dW5kZWZpbmVkKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybihcbihwYXNzU3R5bGVPZihsaW1pdHMpPT09J2NvcHlSZWNvcmQnfHxcbmNoZWNrKGZhbHNlLFggYExpbWl0cyBtdXN0IGJlIGEgcmVjb3JkOiAke3EobGltaXRzKX1gKSkmJlxuZW50cmllcyhsaW1pdHMpLmV2ZXJ5KFxuKFtrZXksdmFsdWVdKT0+XG5wYXNzU3R5bGVPZih2YWx1ZSk9PT0nbnVtYmVyJ3x8XG5jaGVjayhmYWxzZSxYIGBWYWx1ZSBvZiBsaW1pdCAke3Eoa2V5KX0gYnV0IGJlIGEgbnVtYmVyOiAke3EodmFsdWUpfWApKSk7XG5cblxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrRGVjaW1hbERpZ2l0c0xpbWl0PShzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spPT57XG5pZihcbk1hdGguZmxvb3IoTWF0aC5sb2cxMChNYXRoLmFicyhOdW1iZXIoc3BlY2ltZW4pKSkpKzE8PVxuZGVjaW1hbERpZ2l0c0xpbWl0KVxue1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBiaWdpbnQgJHtzcGVjaW1lbn0gbXVzdCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtkZWNpbWFsRGlnaXRzTGltaXR9IGRpZ2l0c2ApO1xuXG4gfTtcblxuLypcblxuICovXG5jb25zdCBtYWtlUGF0dGVybktpdD0oKT0+e1xuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWF5YmVNYXRjaEhlbHBlcj0odGFnKT0+XG4vL1xuSGVscGVyc0J5TWF0Y2hUYWdbdGFnXTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZVBheWxvYWRTaGFwZT0odGFnKT0+XG4vL1xuR3VhcmRQYXlsb2FkU2hhcGVzW3RhZ107XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2luZ2xldG9uS2luZHM9bmV3IE1hcChbXG5bJ251bGwnLG51bGxdLFxuWyd1bmRlZmluZWQnLHVuZGVmaW5lZF1dKTtcblxuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHRhZ01lbW89bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrVGFnZ2VkPSh0YWdnZWQsdGFnLGNoZWNrKT0+e1xuY29uc3QgbWF0Y2hIZWxwZXI9bWF5YmVNYXRjaEhlbHBlcih0YWcpO1xuaWYobWF0Y2hIZWxwZXIpe1xuLy9cbi8vXG5yZXR1cm4gbWF0Y2hIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQodGFnZ2VkLnBheWxvYWQsY2hlY2spO1xuIH1lbHNle1xuY29uc3QgcGF5bG9hZFNoYXBlPW1heWJlUGF5bG9hZFNoYXBlKHRhZyk7XG5pZihwYXlsb2FkU2hhcGUhPT11bmRlZmluZWQpe1xuLy9cbnJldHVybiBjaGVja01hdGNoZXModGFnZ2VkLnBheWxvYWQscGF5bG9hZFNoYXBlLGNoZWNrLHRhZyk7XG4gfVxuIH1cbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG5yZXR1cm4gY2hlY2tDb3B5U2V0KHRhZ2dlZCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG5yZXR1cm4gY2hlY2tDb3B5QmFnKHRhZ2dlZCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5yZXR1cm4gY2hlY2tDb3B5TWFwKHRhZ2dlZCxjaGVjayk7XG4gfVxuZGVmYXVsdDp7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYGNhbm5vdCBjaGVjayB1bnJlY29nbml6ZWQgdGFnICR7cSh0YWcpfTogJHt0YWdnZWR9YCk7XG5cbiB9fVxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGtpbmRPZj0oc3BlY2ltZW4sY2hlY2s9aWRlbnRDaGVja2VyKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHNwZWNpbWVuKTtcbmlmKHBhc3NTdHlsZSE9PSd0YWdnZWQnKXtcbnJldHVybiBwYXNzU3R5bGU7XG4gfVxuLy9cbi8vXG4vL1xuaWYodGFnTWVtby5oYXMoc3BlY2ltZW4pKXtcbnJldHVybiB0YWdNZW1vLmdldChzcGVjaW1lbik7XG4gfVxuY29uc3QgdGFnPWdldFRhZyhzcGVjaW1lbik7XG5pZihjaGVja1RhZ2dlZChzcGVjaW1lbix0YWcsY2hlY2spKXtcbnRhZ01lbW8uc2V0KHNwZWNpbWVuLHRhZyk7XG5yZXR1cm4gdGFnO1xuIH1cbmlmKGNoZWNrIT09aWRlbnRDaGVja2VyKXtcbmNoZWNrKGZhbHNlLFggYGNhbm5vdCBjaGVjayB1bnJlY29nbml6ZWQgdGFnICR7cSh0YWcpfWApO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfTtcbmhhcmRlbihraW5kT2YpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tLaW5kPShzcGVjaW1lbixraW5kLGNoZWNrKT0+e1xuLy9cbmlmKHNpbmdsZXRvbktpbmRzLmhhcyhraW5kKSl7XG4vL1xucmV0dXJuIGNoZWNrQXNLZXlQYXR0KHNwZWNpbWVuLHNpbmdsZXRvbktpbmRzLmdldChraW5kKSxjaGVjayk7XG4gfVxuXG5jb25zdCByZWFsS2luZD1raW5kT2Yoc3BlY2ltZW4sY2hlY2spO1xuaWYoa2luZD09PXJlYWxLaW5kKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKGNoZWNrIT09aWRlbnRDaGVja2VyKXtcbi8vXG4vL1xuY2hlY2soZmFsc2UsWCBgJHtiKHJlYWxLaW5kKX0gJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgJHtiKGtpbmQpfWApO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGlzS2luZD0oc3BlY2ltZW4sa2luZCk9PmNoZWNrS2luZChzcGVjaW1lbixraW5kLGlkZW50Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja0FzS2V5UGF0dD0oc3BlY2ltZW4sa2V5QXNQYXR0ZXJuLGNoZWNrKT0+e1xuaWYoaXNLZXkoc3BlY2ltZW4pJiZrZXlFUShzcGVjaW1lbixrZXlBc1BhdHRlcm4pKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybihcbmNoZWNrIT09aWRlbnRDaGVja2VyJiZcbi8vXG4vL1xuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlOiAke2tleUFzUGF0dGVybn1gKSk7XG5cbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNoZWNrUGF0dGVybj0ocGF0dCxjaGVjayk9PntcbmlmKGlzS2V5KHBhdHQpKXtcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihwYXR0ZXJuTWVtby5oYXMocGF0dCkpe1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmNvbnN0IHJlc3VsdD1jaGVja1BhdHRlcm5JbnRlcm5hbChwYXR0LGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5wYXR0ZXJuTWVtby5hZGQocGF0dCk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tQYXR0ZXJuSW50ZXJuYWw9KHBhdHQsY2hlY2spPT57XG4vL1xuLy9cbi8vXG5jb25zdCBjaGVja0l0PShjaGlsZCk9PmNoZWNrUGF0dGVybihjaGlsZCxjaGVjayk7XG5cbmNvbnN0IGtpbmQ9a2luZE9mKHBhdHQsY2hlY2spO1xuc3dpdGNoKGtpbmQpe1xuY2FzZSB1bmRlZmluZWQ6e1xucmV0dXJuIGZhbHNlO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG5yZXR1cm4gdmFsdWVzKHBhdHQpLmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuLy9cbnJldHVybiBwYXR0LmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UnY29weU1hcCc6e1xuLy9cbi8vXG4vL1xucmV0dXJuIGNoZWNrUGF0dGVybihwYXR0LnZhbHVlcyxjaGVjayk7XG4gfVxuY2FzZSdlcnJvcic6XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBjaGVjayhmYWxzZSxYIGBBICR7cShraW5kKX0gY2Fubm90IGJlIGEgcGF0dGVybmApO1xuIH1cbmRlZmF1bHQ6e1xuaWYobWF5YmVNYXRjaEhlbHBlcihraW5kKSE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYEEgcGFzc2FibGUgb2Yga2luZCAke3Eoa2luZCl9IGlzIG5vdCBhIHBhdHRlcm46ICR7cGF0dH1gKTtcblxuIH19XG5cbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBpc1BhdHRlcm49KHBhdHQpPT5jaGVja1BhdHRlcm4ocGF0dCxpZGVudENoZWNrZXIpO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYXNzZXJ0UGF0dGVybj0ocGF0dCk9PntcbmNoZWNrUGF0dGVybihwYXR0LGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8vXG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrTWF0Y2hlcz0oc3BlY2ltZW4scGF0dGVybixjaGVjayxsYWJlbD11bmRlZmluZWQpPT5cbi8vXG5hcHBseUxhYmVsaW5nRXJyb3IoY2hlY2tNYXRjaGVzSW50ZXJuYWwsW3NwZWNpbWVuLHBhdHRlcm4sY2hlY2tdLGxhYmVsKTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrTWF0Y2hlc0ludGVybmFsPShzcGVjaW1lbixwYXR0LGNoZWNrKT0+e1xuLy9cbmNvbnN0IHBhdHRlcm5LaW5kPWtpbmRPZihwYXR0LGNoZWNrKTtcbmNvbnN0IHNwZWNpbWVuS2luZD1raW5kT2Yoc3BlY2ltZW4pOy8vXG5zd2l0Y2gocGF0dGVybktpbmQpe1xuY2FzZSB1bmRlZmluZWQ6e1xucmV0dXJuIEZhaWwgYHBhdHRlcm4gZXhwZWN0ZWQ6ICR7cGF0dH1gO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIEZhaWwgYHByb21pc2VzIGNhbm5vdCBiZSBwYXR0ZXJuczogJHtwYXR0fWA7XG4gfVxuY2FzZSdlcnJvcic6e1xucmV0dXJuIEZhaWwgYGVycm9ycyBjYW5ub3QgYmUgcGF0dGVybnM6ICR7cGF0dH1gO1xuIH1cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdudW1iZXInOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOlxuY2FzZSdzeW1ib2wnOlxuY2FzZSdjb3B5U2V0JzpcbmNhc2UnY29weUJhZyc6XG5jYXNlJ3JlbW90YWJsZSc6e1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuaWYoaXNLZXkocGF0dCkpe1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4scGF0dCxjaGVjayk7XG4gfVxuaWYoc3BlY2ltZW5LaW5kIT09J2NvcHlBcnJheScpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSBjb3B5QXJyYXkgdG8gbWF0Y2ggYSBjb3B5QXJyYXkgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG5jb25zdHtsZW5ndGh9PXBhdHQ7XG5pZihzcGVjaW1lbi5sZW5ndGghPT1sZW5ndGgpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBBcnJheSAke3NwZWNpbWVufSAtIE11c3QgYmUgYXMgbG9uZyBhcyBjb3B5QXJyYXkgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG5yZXR1cm4gcGF0dC5ldmVyeSgocCxpKT0+Y2hlY2tNYXRjaGVzKHNwZWNpbWVuW2ldLHAsY2hlY2ssaSkpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuaWYoaXNLZXkocGF0dCkpe1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4scGF0dCxjaGVjayk7XG4gfVxuaWYoc3BlY2ltZW5LaW5kIT09J2NvcHlSZWNvcmQnKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgY29weVJlY29yZCB0byBtYXRjaCBhIGNvcHlSZWNvcmQgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHNwZWNpbWVuTmFtZXM9cmVjb3JkTmFtZXMoc3BlY2ltZW4pO1xuY29uc3QgcGF0dE5hbWVzPXJlY29yZE5hbWVzKHBhdHQpO1xuY29uc3QgbWlzc2luZz1saXN0RGlmZmVyZW5jZShwYXR0TmFtZXMsc3BlY2ltZW5OYW1lcyk7XG5pZihtaXNzaW5nLmxlbmd0aD49MSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBoYXZlIG1pc3NpbmcgcHJvcGVydGllcyAke3EobWlzc2luZyl9YCk7XG5cbiB9XG5jb25zdCB1bmV4cGVjdGVkPWxpc3REaWZmZXJlbmNlKHNwZWNpbWVuTmFtZXMscGF0dE5hbWVzKTtcbmlmKHVuZXhwZWN0ZWQubGVuZ3RoPj0xKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IG5vdCBoYXZlIHVuZXhwZWN0ZWQgcHJvcGVydGllczogJHtxKFxudW5leHBlY3RlZClcbiB9YCk7XG5cbiB9XG5jb25zdCBzcGVjaW1lblZhbHVlcz1yZWNvcmRWYWx1ZXMoc3BlY2ltZW4sc3BlY2ltZW5OYW1lcyk7XG5jb25zdCBwYXR0VmFsdWVzPXJlY29yZFZhbHVlcyhwYXR0LHBhdHROYW1lcyk7XG5yZXR1cm4gcGF0dE5hbWVzLmV2ZXJ5KChsYWJlbCxpKT0+XG5jaGVja01hdGNoZXMoc3BlY2ltZW5WYWx1ZXNbaV0scGF0dFZhbHVlc1tpXSxjaGVjayxsYWJlbCkpO1xuXG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5pZihpc0tleShwYXR0KSl7XG4vL1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5pZihzcGVjaW1lbktpbmQhPT0nY29weU1hcCcpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSBjb3B5TWFwIHRvIG1hdGNoIGEgY29weU1hcCBwYXR0ZXJuOiAke3EoXG5wYXR0KVxuIH1gKTtcblxuIH1cbi8vXG5jb25zdCBwYXR0S2V5U2V0PWNvcHlNYXBLZXlTZXQocGF0dCk7XG5jb25zdCBzcGVjaW1lbktleVNldD1jb3B5TWFwS2V5U2V0KHNwZWNpbWVuKTtcbmlmKCFjaGVja01hdGNoZXMoc3BlY2ltZW5LZXlTZXQscGF0dEtleVNldCxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhdHRWYWx1ZXM9W107XG5jb25zdCBzcGVjaW1lblZhbHVlcz1bXTtcbmNvbnN0IGVudHJ5UGFpcnM9Z2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMoXG5wYXR0LFxuc3BlY2ltZW4sXG5nZXRDb3B5TWFwRW50cnlBcnJheSxcbnVuZGVmaW5lZCk7XG5cbmZvcihjb25zdFtfa2V5LHBhdHRWYWx1ZSxzcGVjaW1lblZhbHVlXW9mIGVudHJ5UGFpcnMpe1xucGF0dFZhbHVlcy5wdXNoKHBhdHRWYWx1ZSk7XG5zcGVjaW1lblZhbHVlcy5wdXNoKHNwZWNpbWVuVmFsdWUpO1xuIH1cbnJldHVybiBjaGVja01hdGNoZXMoaGFyZGVuKHNwZWNpbWVuVmFsdWVzKSxoYXJkZW4ocGF0dFZhbHVlcyksY2hlY2spO1xuIH1cbmRlZmF1bHQ6e1xuY29uc3QgbWF0Y2hIZWxwZXI9bWF5YmVNYXRjaEhlbHBlcihwYXR0ZXJuS2luZCk7XG5pZihtYXRjaEhlbHBlcil7XG5yZXR1cm4gbWF0Y2hIZWxwZXIuY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQucGF5bG9hZCxjaGVjayk7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IHNob3VsZCBoYXZlIHJlY29nbml6ZWQgJHtxKHBhdHRlcm5LaW5kKX0gYDtcbiB9fVxuXG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBtYXRjaGVzPShzcGVjaW1lbixwYXR0KT0+XG5jaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dCxpZGVudENoZWNrZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG11c3RNYXRjaD0oc3BlY2ltZW4scGF0dCxsYWJlbD11bmRlZmluZWQpPT57XG5sZXQgaW5uZXJFcnJvcjtcbnRyeXtcbmlmKGNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LGlkZW50Q2hlY2tlcix1bmRlZmluZWQpKXtcbnJldHVybjtcbiB9XG4gfWNhdGNoKGVyKXtcbmlubmVyRXJyb3I9ZXI7XG4gfVxuLy9cbmNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LGFzc2VydENoZWNrZXIsbGFiZWwpO1xuY29uc3Qgb3V0ZXJFcnJvcj1tYWtlRXJyb3IoXG5YIGBpbnRlcm5hbDogJHtsYWJlbH06IGluY29uc2lzdGVudCBwYXR0ZXJuIG1hdGNoOiAke3EocGF0dCl9YCk7XG5cbmlmKGlubmVyRXJyb3IhPT11bmRlZmluZWQpe1xuYW5ub3RhdGVFcnJvcihvdXRlckVycm9yLFggYGNhdXNlZCBieSAke2lubmVyRXJyb3J9YCk7XG4gfVxudGhyb3cgb3V0ZXJFcnJvcjtcbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdldFJhbmtDb3Zlcj0ocGF0dCxlbmNvZGVQYXNzYWJsZSk9PntcbmlmKGlzS2V5KHBhdHQpKXtcbmNvbnN0IGVuY29kZWQ9ZW5jb2RlUGFzc2FibGUocGF0dCk7XG5pZihlbmNvZGVkIT09dW5kZWZpbmVkKXtcbnJldHVybltlbmNvZGVkLCBgJHtlbmNvZGVkfX5gXTtcbiB9XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhdHQpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYnJlYWs7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGFnPWdldFRhZyhwYXR0KTtcbmNvbnN0IG1hdGNoSGVscGVyPW1heWJlTWF0Y2hIZWxwZXIodGFnKTtcbmlmKG1hdGNoSGVscGVyKXtcbi8vXG4vL1xucmV0dXJuIG1hdGNoSGVscGVyLmdldFJhbmtDb3ZlcihwYXR0LnBheWxvYWQsZW5jb2RlUGFzc2FibGUpO1xuIH1cbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYnJlYWs7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmJyZWFrO1xuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7Ly9cbiB9fVxuXG5icmVhazsvL1xuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7Ly9cbiB9fVxuXG5yZXR1cm4gZ2V0UGFzc1N0eWxlQ292ZXIocGFzc1N0eWxlKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuPShhcnJheSxwYXR0LGNoZWNrLGxhYmVsUHJlZml4PScnKT0+e1xuaWYoaXNLaW5kKHBhdHQsJ21hdGNoOmFueScpKXtcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gYXJyYXkuZXZlcnkoKGVsLGkpPT5cbmNoZWNrTWF0Y2hlcyhlbCxwYXR0LGNoZWNrLCBgJHtsYWJlbFByZWZpeH1bJHtpfV1gKSk7XG5cbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hBbnlIZWxwZXI9RmFyKCdtYXRjaDphbnkgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KF9zcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsX2NoZWNrKT0+dHJ1ZSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KG1hdGNoZXJQYXlsb2FkLGNoZWNrKT0+XG5tYXRjaGVyUGF5bG9hZD09PXVuZGVmaW5lZHx8XG5jaGVjayhmYWxzZSxYIGBtYXRjaDphbnkgcGF5bG9hZDogJHttYXRjaGVyUGF5bG9hZH0gLSBNdXN0IGJlIHVuZGVmaW5lZGApLFxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+WycnLCd7J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hBbmRIZWxwZXI9RmFyKCdtYXRjaDphbmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHBhdHRzLGNoZWNrKT0+e1xucmV0dXJuIHBhdHRzLmV2ZXJ5KChwYXR0KT0+Y2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQsY2hlY2spKTtcbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDooYWxsZWdlZFBhdHRzLGNoZWNrKT0+e1xuY29uc3QgY2hlY2tJdD0ocGF0dCk9PmNoZWNrUGF0dGVybihwYXR0LGNoZWNrKTtcbnJldHVybihcbihwYXNzU3R5bGVPZihhbGxlZ2VkUGF0dHMpPT09J2NvcHlBcnJheSd8fFxuY2hlY2soZmFsc2UsWCBgTmVlZHMgYXJyYXkgb2Ygc3ViLXBhdHRlcm5zOiAke3EoYWxsZWdlZFBhdHRzKX1gKSkmJlxuYWxsZWdlZFBhdHRzLmV2ZXJ5KGNoZWNrSXQpKTtcblxuIH0sXG5cbmdldFJhbmtDb3ZlcjoocGF0dHMsZW5jb2RlUGFzc2FibGUpPT5cbmludGVyc2VjdFJhbmtDb3ZlcnMoXG5jb21wYXJlUmFuayxcbnBhdHRzLm1hcCgocCk9PmdldFJhbmtDb3ZlcihwLGVuY29kZVBhc3NhYmxlKSkpfSk7XG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hPckhlbHBlcj1GYXIoJ21hdGNoOm9yIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixwYXR0cyxjaGVjayk9PntcbmNvbnN0e2xlbmd0aH09cGF0dHM7XG5pZihsZW5ndGg9PT0wKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBubyBwYXR0ZXJuIGRpc2p1bmN0cyB0byBtYXRjaDogJHtxKHBhdHRzKX1gKTtcblxuIH1cbmlmKFxucGF0dHMubGVuZ3RoPT09MiYmXG4hbWF0Y2hlcyhzcGVjaW1lbixwYXR0c1swXSkmJlxuaXNLaW5kKHBhdHRzWzBdLCdtYXRjaDpraW5kJykmJlxucGF0dHNbMF0ucGF5bG9hZD09PSd1bmRlZmluZWQnKVxue1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHRzWzFdLGNoZWNrKTtcbiB9XG5pZihwYXR0cy5zb21lKChwYXR0KT0+bWF0Y2hlcyhzcGVjaW1lbixwYXR0KSkpe1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBtYXRjaCBvbmUgb2YgJHtxKHBhdHRzKX1gKTtcbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDptYXRjaEFuZEhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCxcblxuZ2V0UmFua0NvdmVyOihwYXR0cyxlbmNvZGVQYXNzYWJsZSk9PlxudW5pb25SYW5rQ292ZXJzKFxuY29tcGFyZVJhbmssXG5wYXR0cy5tYXAoKHApPT5nZXRSYW5rQ292ZXIocCxlbmNvZGVQYXNzYWJsZSkpKX0pO1xuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoTm90SGVscGVyPUZhcignbWF0Y2g6bm90IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixwYXR0LGNoZWNrKT0+e1xuaWYobWF0Y2hlcyhzcGVjaW1lbixwYXR0KSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBmYWlsIG5lZ2F0ZWQgcGF0dGVybjogJHtxKHBhdHQpfWApO1xuXG4gfWVsc2V7XG5yZXR1cm4gdHJ1ZTtcbiB9XG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tQYXR0ZXJuLFxuXG5nZXRSYW5rQ292ZXI6KF9wYXR0LF9lbmNvZGVQYXNzYWJsZSk9PlsnJywneyddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU2NhbGFySGVscGVyPUZhcignbWF0Y2g6c2NhbGFyIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsY2hlY2spPT5cbmNoZWNrU2NhbGFyS2V5KHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoS2V5SGVscGVyPUZhcignbWF0Y2g6a2V5IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsY2hlY2spPT5cbmNoZWNrS2V5KHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoUGF0dGVybkhlbHBlcj1GYXIoJ21hdGNoOnBhdHRlcm4gaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLF9tYXRjaGVyUGF5bG9hZCxjaGVjayk9PlxuY2hlY2tQYXR0ZXJuKHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoS2luZEhlbHBlcj1GYXIoJ21hdGNoOmtpbmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6Y2hlY2tLaW5kLFxuXG5jaGVja0lzV2VsbEZvcm1lZDooYWxsZWdlZEtleUtpbmQsY2hlY2spPT5cbnR5cGVvZiBhbGxlZ2VkS2V5S2luZD09PSdzdHJpbmcnfHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBtYXRjaDpraW5kOiBwYXlsb2FkOiAke2FsbGVnZWRLZXlLaW5kfSAtIEEga2luZCBuYW1lIG11c3QgYmUgYSBzdHJpbmdgKSxcblxuXG5nZXRSYW5rQ292ZXI6KGtpbmQsX2VuY29kZVBhc3NhYmxlKT0+e1xubGV0IHN0eWxlO1xuc3dpdGNoKGtpbmQpe1xuY2FzZSdjb3B5U2V0JzpcbmNhc2UnY29weU1hcCc6e1xuc3R5bGU9J3RhZ2dlZCc7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnN0eWxlPWtpbmQ7XG5icmVhaztcbiB9fVxuXG5yZXR1cm4gZ2V0UGFzc1N0eWxlQ292ZXIoc3R5bGUpO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hUYWdnZWRIZWxwZXI9RmFyKCdtYXRjaDp0YWdnZWQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFt0YWdQYXR0LHBheWxvYWRQYXR0XSxjaGVjayk9PntcbmlmKHBhc3NTdHlsZU9mKHNwZWNpbWVuKSE9PSd0YWdnZWQnKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgRXhwZWN0ZWQgdGFnZ2VkIG9iamVjdCwgbm90ICR7cShcbnBhc3NTdHlsZU9mKHNwZWNpbWVuKSlcbiB9OiAke3NwZWNpbWVufWApO1xuXG4gfVxucmV0dXJuKFxuY2hlY2tNYXRjaGVzKGdldFRhZyhzcGVjaW1lbiksdGFnUGF0dCxjaGVjaywndGFnJykmJlxuY2hlY2tNYXRjaGVzKHNwZWNpbWVuLnBheWxvYWQscGF5bG9hZFBhdHQsY2hlY2ssJ3BheWxvYWQnKSk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tNYXRjaGVzKFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpLE1NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6dGFnZ2VkIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9raW5kLF9lbmNvZGVQYXNzYWJsZSk9PmdldFBhc3NTdHlsZUNvdmVyKCd0YWdnZWQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEJpZ2ludEhlbHBlcj1GYXIoJ21hdGNoOmJpZ2ludCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2xpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7ZGVjaW1hbERpZ2l0c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdiaWdpbnQnLGNoZWNrKSYmXG5jaGVja0RlY2ltYWxEaWdpdHNMaW1pdChzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW10pLFxuY2hlY2ssXG4nbWF0Y2g6YmlnaW50IHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcignYmlnaW50Jyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hOYXRIZWxwZXI9RmFyKCdtYXRjaDpuYXQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFtsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e2RlY2ltYWxEaWdpdHNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnYmlnaW50JyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbj49MG4sXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgbm9uLW5lZ2F0aXZlYCkmJlxuXG5jaGVja0RlY2ltYWxEaWdpdHNMaW1pdChzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW10pLFxuY2hlY2ssXG4nbWF0Y2g6bmF0IHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+XG4vL1xuZ2V0UGFzc1N0eWxlQ292ZXIoJ2JpZ2ludCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU3RyaW5nSGVscGVyPUZhcignbWF0Y2g6c3RyaW5nIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtzdHJpbmdMZW5ndGhMaW1pdH09bGltaXQobGltaXRzKTtcbi8vXG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ3N0cmluZycsY2hlY2spJiYoXG4vL1xuLyogICAgICAgICAgICAgICAgICovc3BlY2ltZW4ubGVuZ3RoPD1zdHJpbmdMZW5ndGhMaW1pdHx8XG5jaGVjayhcbmZhbHNlLFxuWCBgc3RyaW5nICR7c3BlY2ltZW59IG11c3Qgbm90IGJlIGJpZ2dlciB0aGFuICR7c3RyaW5nTGVuZ3RoTGltaXR9YCkpKTtcblxuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbXSksXG5jaGVjayxcbidtYXRjaDpzdHJpbmcgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdzdHJpbmcnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFN5bWJvbEhlbHBlcj1GYXIoJ21hdGNoOnN5bWJvbCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2xpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7c3ltYm9sTmFtZUxlbmd0aExpbWl0fT1saW1pdChsaW1pdHMpO1xuaWYoIWNoZWNrS2luZChzcGVjaW1lbiwnc3ltYm9sJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHN5bWJvbE5hbWU9bmFtZUZvclBhc3NhYmxlU3ltYm9sKHNwZWNpbWVuKTtcblxuaWYodHlwZW9mIHN5bWJvbE5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUGFzc2FibGUgc3ltYm9sICR7c3BlY2ltZW59IG11c3QgaGF2ZSBhIHBhc3NhYmxlIG5hbWVgO1xuIH1cbnJldHVybiBjaGVjayhcbnN5bWJvbE5hbWUubGVuZ3RoPD1zeW1ib2xOYW1lTGVuZ3RoTGltaXQsXG5YIGBTeW1ib2wgbmFtZSAke3EoXG5zeW1ib2xOYW1lKVxuIH0gbXVzdCBub3QgYmUgYmlnZ2VyIHRoYW4gJHtzeW1ib2xOYW1lTGVuZ3RoTGltaXR9YCk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtdKSxcbmNoZWNrLFxuJ21hdGNoOnN5bWJvbCBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlxuZ2V0UGFzc1N0eWxlQ292ZXIoJ3N5bWJvbCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoUmVtb3RhYmxlSGVscGVyPUZhcignbWF0Y2g6cmVtb3RhYmxlIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyZW1vdGFibGVEZXNjLGNoZWNrKT0+e1xuaWYoaXNLaW5kKHNwZWNpbWVuLCdyZW1vdGFibGUnKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihjaGVjaz09PWlkZW50Q2hlY2tlcil7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7bGFiZWx9PXJlbW90YWJsZURlc2M7XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2Yoc3BlY2ltZW4pO1xuY29uc3Qga2luZERldGFpbHM9XG5wYXNzU3R5bGUhPT0ndGFnZ2VkJz9cbi8vXG5iKHBhc3NTdHlsZSk6XG4vL1xuLy9cbnEoZ2V0VGFnKHNwZWNpbWVuKSk7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcbi8vXG4vL1xuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgcmVtb3RhYmxlICR7YihsYWJlbCl9LCBub3QgJHtraW5kRGV0YWlsc31gKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihhbGxlZ2VkUmVtb3RhYmxlRGVzYyxjaGVjayk9PlxuY2hlY2tNYXRjaGVzKFxuYWxsZWdlZFJlbW90YWJsZURlc2MsXG5oYXJkZW4oe2xhYmVsOk1NLnN0cmluZygpfSksXG5jaGVjayxcbidtYXRjaDpyZW1vdGFibGUgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX3JlbW90YWJsZURlc2MsX2VuY29kZVBhc3NhYmxlKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcigncmVtb3RhYmxlJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hMVEVIZWxwZXI9RmFyKCdtYXRjaDpsdGUgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5TFRFKHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCl8fFxuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIDw9ICR7cmlnaHRPcGVyYW5kfWApLFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja0tleSxcblxuZ2V0UmFua0NvdmVyOihyaWdodE9wZXJhbmQsZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmlnaHRPcGVyYW5kKTtcbi8vXG4vL1xuLy9cbmxldFtsZWZ0Qm91bmQscmlnaHRCb3VuZF09Z2V0UGFzc1N0eWxlQ292ZXIocGFzc1N0eWxlKTtcbmNvbnN0IG5ld1JpZ2h0Qm91bmQ9IGAke2VuY29kZVBhc3NhYmxlKHJpZ2h0T3BlcmFuZCl9fmA7XG5pZihuZXdSaWdodEJvdW5kIT09dW5kZWZpbmVkKXtcbnJpZ2h0Qm91bmQ9bmV3UmlnaHRCb3VuZDtcbiB9XG5yZXR1cm5bbGVmdEJvdW5kLHJpZ2h0Qm91bmRdO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hMVEhlbHBlcj1GYXIoJ21hdGNoOmx0IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyaWdodE9wZXJhbmQsY2hlY2spPT5cbmtleUxUKHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCl8fFxuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIDwgJHtyaWdodE9wZXJhbmR9YCksXG5cbmNoZWNrSXNXZWxsRm9ybWVkOmNoZWNrS2V5LFxuXG5nZXRSYW5rQ292ZXI6bWF0Y2hMVEVIZWxwZXIuZ2V0UmFua0NvdmVyfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoR1RFSGVscGVyPUZhcignbWF0Y2g6Z3RlIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyaWdodE9wZXJhbmQsY2hlY2spPT5cbmtleUdURShzcGVjaW1lbixyaWdodE9wZXJhbmQpfHxcbmNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSA+PSAke3JpZ2h0T3BlcmFuZH1gKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tLZXksXG5cbmdldFJhbmtDb3ZlcjoocmlnaHRPcGVyYW5kLGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJpZ2h0T3BlcmFuZCk7XG4vL1xuLy9cbi8vXG5sZXRbbGVmdEJvdW5kLHJpZ2h0Qm91bmRdPWdldFBhc3NTdHlsZUNvdmVyKHBhc3NTdHlsZSk7XG5jb25zdCBuZXdMZWZ0Qm91bmQ9ZW5jb2RlUGFzc2FibGUocmlnaHRPcGVyYW5kKTtcbmlmKG5ld0xlZnRCb3VuZCE9PXVuZGVmaW5lZCl7XG5sZWZ0Qm91bmQ9bmV3TGVmdEJvdW5kO1xuIH1cbnJldHVybltsZWZ0Qm91bmQscmlnaHRCb3VuZF07XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEdUSGVscGVyPUZhcignbWF0Y2g6Z3QgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5R1Qoc3BlY2ltZW4scmlnaHRPcGVyYW5kKXx8XG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmUgPiAke3JpZ2h0T3BlcmFuZH1gKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tLZXksXG5cbmdldFJhbmtDb3ZlcjptYXRjaEdURUhlbHBlci5nZXRSYW5rQ292ZXJ9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hSZWNvcmRPZkhlbHBlcj1GYXIoJ21hdGNoOnJlY29yZE9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW2tleVBhdHQsdmFsdWVQYXR0LGxpbWl0cz11bmRlZmluZWRdLFxuY2hlY2spPT5cbntcbmNvbnN0e251bVByb3BlcnRpZXNMaW1pdCxwcm9wZXJ0eU5hbWVMZW5ndGhMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weVJlY29yZCcsY2hlY2spJiZcbmNoZWNrKFxub3duS2V5cyhzcGVjaW1lbikubGVuZ3RoPD1udW1Qcm9wZXJ0aWVzTGltaXQsXG5YIGBNdXN0IG5vdCBoYXZlIG1vcmUgdGhhbiAke3EoXG5udW1Qcm9wZXJ0aWVzTGltaXQpXG4gfSBwcm9wZXJ0aWVzOiAke3NwZWNpbWVufWApJiZcblxuZW50cmllcyhzcGVjaW1lbikuZXZlcnkoXG4oW2tleSx2YWx1ZV0pPT5cbmFwcGx5TGFiZWxpbmdFcnJvcihcbmNoZWNrLFxuW1xua2V5Lmxlbmd0aDw9cHJvcGVydHlOYW1lTGVuZ3RoTGltaXQsXG5YIGBQcm9wZXJ0eSBuYW1lIG11c3Qgbm90IGJlIGxvbmdlciB0aGFuICR7cShcbnByb3BlcnR5TmFtZUxlbmd0aExpbWl0KVxuIH1gXSxcblxua2V5KSYmXG5cbmNoZWNrTWF0Y2hlcyhcbmhhcmRlbihba2V5LHZhbHVlXSksXG5oYXJkZW4oW2tleVBhdHQsdmFsdWVQYXR0XSksXG5jaGVjayxcbmtleSkpKTtcblxuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDpyZWNvcmRPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfZW50cnlQYXR0KT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ2NvcHlSZWNvcmQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEFycmF5T2ZIZWxwZXI9RmFyKCdtYXRjaDphcnJheU9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbc3ViUGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e2FycmF5TGVuZ3RoTGltaXR9PWxpbWl0KGxpbWl0cyk7XG4vL1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5QXJyYXknLGNoZWNrKSYmKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5sZW5ndGg8PWFycmF5TGVuZ3RoTGltaXR8fFxuY2hlY2soXG5mYWxzZSxcblggYEFycmF5IGxlbmd0aCAke3NwZWNpbWVuLmxlbmd0aH0gbXVzdCBiZSA8PSBsaW1pdCAke2FycmF5TGVuZ3RoTGltaXR9YCkpJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihzcGVjaW1lbixzdWJQYXR0LGNoZWNrKSk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCldKSxcbmNoZWNrLFxuJ21hdGNoOmFycmF5T2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooKT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ2NvcHlBcnJheScpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU2V0T2ZIZWxwZXI9RmFyKCdtYXRjaDpzZXRPZiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2tleVBhdHQsbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtudW1TZXRFbGVtZW50c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5U2V0JyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLnBheWxvYWQubGVuZ3RoPG51bVNldEVsZW1lbnRzTGltaXQsXG5YIGBTZXQgbXVzdCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtxKG51bVNldEVsZW1lbnRzTGltaXQpfSBlbGVtZW50czogJHtcbnNwZWNpbWVuLnBheWxvYWQubGVuZ3RoXG4gfWApJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihzcGVjaW1lbi5wYXlsb2FkLGtleVBhdHQsY2hlY2ssJ3NldCBlbGVtZW50cycpKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6c2V0T2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooKT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ3RhZ2dlZCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoQmFnT2ZIZWxwZXI9RmFyKCdtYXRjaDpiYWdPZiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltrZXlQYXR0LGNvdW50UGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxcbmNoZWNrKT0+XG57XG5jb25zdHtudW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0LGRlY2ltYWxEaWdpdHNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weUJhZycsY2hlY2spJiZcbmNoZWNrKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5wYXlsb2FkLmxlbmd0aDw9XG5udW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0LFxuWCBgQmFnIG11c3Qgbm90IGhhdmUgbW9yZSB0aGFuICR7cShcbm51bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQpXG4gfSB1bmlxdWUgZWxlbWVudHM6ICR7c3BlY2ltZW59YCkmJlxuXG5zcGVjaW1lbi5wYXlsb2FkLmV2ZXJ5KFxuKFtrZXksY291bnRdLGkpPT5cbmNoZWNrTWF0Y2hlcyhrZXksa2V5UGF0dCxjaGVjaywgYGJhZyBrZXlzWyR7aX1dYCkmJlxuYXBwbHlMYWJlbGluZ0Vycm9yKFxuY2hlY2tEZWNpbWFsRGlnaXRzTGltaXQsXG5bY291bnQsZGVjaW1hbERpZ2l0c0xpbWl0LGNoZWNrXSxcbiBgYmFnIGNvdW50c1ske2l9XWApJiZcblxuY2hlY2tNYXRjaGVzKGNvdW50LGNvdW50UGF0dCxjaGVjaywgYGJhZyBjb3VudHNbJHtpfV1gKSkpO1xuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDpiYWdPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOigpPT5nZXRQYXNzU3R5bGVDb3ZlcigndGFnZ2VkJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hNYXBPZkhlbHBlcj1GYXIoJ21hdGNoOm1hcE9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW2tleVBhdHQsdmFsdWVQYXR0LGxpbWl0cz11bmRlZmluZWRdLFxuY2hlY2spPT5cbntcbmNvbnN0e251bU1hcEVudHJpZXNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weU1hcCcsY2hlY2spJiZcbmNoZWNrKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5wYXlsb2FkLmtleXMubGVuZ3RoPD1cbm51bU1hcEVudHJpZXNMaW1pdCxcblggYENvcHlNYXAgbXVzdCBoYXZlIG5vIG1vcmUgdGhhbiAke3EoXG5udW1NYXBFbnRyaWVzTGltaXQpXG4gfSBlbnRyaWVzOiAke3NwZWNpbWVufWApJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihcbnNwZWNpbWVuLnBheWxvYWQua2V5cyxcbmtleVBhdHQsXG5jaGVjayxcbidtYXAga2V5cycpJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihcbnNwZWNpbWVuLnBheWxvYWQudmFsdWVzLFxudmFsdWVQYXR0LFxuY2hlY2ssXG4nbWFwIHZhbHVlcycpKTtcblxuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpLE1NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6bWFwT2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX2VudHJ5UGF0dCk9PmdldFBhc3NTdHlsZUNvdmVyKCd0YWdnZWQnKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHNwbGl0QXJyYXlQYXJ0cz0oc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk9PntcbmNvbnN0IG51bVJlcXVpcmVkPXJlcXVpcmVkUGF0dC5sZW5ndGg7XG5jb25zdCBudW1PcHRpb25hbD1vcHRpb25hbFBhdHQubGVuZ3RoO1xuY29uc3QgcmVxdWlyZWRTcGVjaW1lbj1zcGVjaW1lbi5zbGljZSgwLG51bVJlcXVpcmVkKTtcbmNvbnN0IG9wdGlvbmFsU3BlY2ltZW49c3BlY2ltZW4uc2xpY2UoXG5udW1SZXF1aXJlZCxcbm51bVJlcXVpcmVkK251bU9wdGlvbmFsKTtcblxuY29uc3QgcmVzdFNwZWNpbWVuPXNwZWNpbWVuLnNsaWNlKG51bVJlcXVpcmVkK251bU9wdGlvbmFsKTtcbnJldHVybiBoYXJkZW4oe3JlcXVpcmVkU3BlY2ltZW4sb3B0aW9uYWxTcGVjaW1lbixyZXN0U3BlY2ltZW59KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgYWRhcHRBcnJheVBhdHRlcm49KG9wdGlvbmFsUGF0dCxsZW5ndGgpPT5cbmhhcmRlbihvcHRpb25hbFBhdHQuc2xpY2UoMCxsZW5ndGgpLm1hcCgocGF0dCk9Pk1NLm9wdChwYXR0KSkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTcGxpdEFycmF5SGVscGVyPUZhcignbWF0Y2g6c3BsaXRBcnJheSBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0PVtdLHJlc3RQYXR0PU1NLmFueSgpXSxcbmNoZWNrKT0+XG57XG5pZighY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5QXJyYXknLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7cmVxdWlyZWRTcGVjaW1lbixvcHRpb25hbFNwZWNpbWVuLHJlc3RTcGVjaW1lbn09XG5zcGxpdEFycmF5UGFydHMoc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk7XG5jb25zdCBwYXJ0aWFsUGF0dD1hZGFwdEFycmF5UGF0dGVybihcbm9wdGlvbmFsUGF0dCxcbm9wdGlvbmFsU3BlY2ltZW4ubGVuZ3RoKTtcblxubGV0IGFyZ051bT0wO1xucmV0dXJuKFxuKHJlcXVpcmVkU3BlY2ltZW4ubGVuZ3RoPT09cmVxdWlyZWRQYXR0Lmxlbmd0aHx8XG5jaGVjayhcbmZhbHNlLFxuWCBgRXhwZWN0ZWQgYXQgbGVhc3QgJHtxKFxucmVxdWlyZWRQYXR0Lmxlbmd0aClcbiB9IGFyZ3VtZW50czogJHtzcGVjaW1lbn1gKSkmJlxuXG5yZXF1aXJlZFBhdHQuZXZlcnkoKHAsaSk9PlxuLy9cbmNoZWNrTWF0Y2hlcyhyZXF1aXJlZFNwZWNpbWVuW2ldLHAsY2hlY2ssIGBhcmcgJHthcmdOdW0rK31gKSkmJlxuXG5wYXJ0aWFsUGF0dC5ldmVyeSgocCxpKT0+XG4vL1xuY2hlY2tNYXRjaGVzKG9wdGlvbmFsU3BlY2ltZW5baV0scCxjaGVjaywgYGFyZyAke2FyZ051bSsrfT9gKSkmJlxuXG5jaGVja01hdGNoZXMocmVzdFNwZWNpbWVuLHJlc3RQYXR0LGNoZWNrLCcuLi5yZXN0JykpO1xuXG4gfSxcblxuLypcblxuXG4gICAgICovXG5jaGVja0lzV2VsbEZvcm1lZDooc3BsaXRBcnJheSxjaGVjayk9PntcbmlmKFxucGFzc1N0eWxlT2Yoc3BsaXRBcnJheSk9PT0nY29weUFycmF5JyYmKFxuc3BsaXRBcnJheS5sZW5ndGg+PTF8fHNwbGl0QXJyYXkubGVuZ3RoPD0zKSlcbntcbmNvbnN0W3JlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQ9dW5kZWZpbmVkLHJlc3RQYXR0PXVuZGVmaW5lZF09XG5zcGxpdEFycmF5O1xuaWYoXG5pc1BhdHRlcm4ocmVxdWlyZWRQYXR0KSYmXG5wYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpPT09J2NvcHlBcnJheScmJihcbm9wdGlvbmFsUGF0dD09PXVuZGVmaW5lZHx8XG5pc1BhdHRlcm4ob3B0aW9uYWxQYXR0KSYmXG5wYXNzU3R5bGVPZihvcHRpb25hbFBhdHQpPT09J2NvcHlBcnJheScpJiYoXG5yZXN0UGF0dD09PXVuZGVmaW5lZHx8aXNQYXR0ZXJuKHJlc3RQYXR0KSkpXG57XG5yZXR1cm4gdHJ1ZTtcbiB9XG4gfVxucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBNdXN0IGJlIGFuIGFycmF5IG9mIGEgcmVxdWlyZWRQYXR0IGFycmF5LCBhbiBvcHRpb25hbCBvcHRpb25hbFBhdHQgYXJyYXksIGFuZCBhbiBvcHRpb25hbCByZXN0UGF0dDogJHtxKFxuc3BsaXRBcnJheSlcbiB9YCk7XG5cbiB9LFxuXG5nZXRSYW5rQ292ZXI6KFtcbl9yZXF1aXJlZFBhdHQsXG5fb3B0aW9uYWxQYXR0PXVuZGVmaW5lZCxcbl9yZXN0UGF0dD11bmRlZmluZWRdKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcignY29weUFycmF5Jyl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBzcGxpdFJlY29yZFBhcnRzPShzcGVjaW1lbixyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0KT0+e1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXF1aXJlZEVudHJpZXM9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgb3B0aW9uYWxFbnRyaWVzPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3RFbnRyaWVzPVtdO1xuZm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgZW50cmllcyhzcGVjaW1lbikpe1xuaWYoaGFzT3duUHJvcGVydHlPZihyZXF1aXJlZFBhdHQsbmFtZSkpe1xucmVxdWlyZWRFbnRyaWVzLnB1c2goW25hbWUsdmFsdWVdKTtcbiB9ZWxzZSBpZihoYXNPd25Qcm9wZXJ0eU9mKG9wdGlvbmFsUGF0dCxuYW1lKSl7XG5vcHRpb25hbEVudHJpZXMucHVzaChbbmFtZSx2YWx1ZV0pO1xuIH1lbHNle1xucmVzdEVudHJpZXMucHVzaChbbmFtZSx2YWx1ZV0pO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtcbnJlcXVpcmVkU3BlY2ltZW46ZnJvbVVuaXF1ZUVudHJpZXMocmVxdWlyZWRFbnRyaWVzKSxcbm9wdGlvbmFsU3BlY2ltZW46ZnJvbVVuaXF1ZUVudHJpZXMob3B0aW9uYWxFbnRyaWVzKSxcbnJlc3RTcGVjaW1lbjpmcm9tVW5pcXVlRW50cmllcyhyZXN0RW50cmllcyl9KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhZGFwdFJlY29yZFBhdHRlcm49KG9wdGlvbmFsUGF0dCxuYW1lcyk9PlxuZnJvbVVuaXF1ZUVudHJpZXMobmFtZXMubWFwKChuYW1lKT0+W25hbWUsTU0ub3B0KG9wdGlvbmFsUGF0dFtuYW1lXSldKSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFNwbGl0UmVjb3JkSGVscGVyPUZhcignbWF0Y2g6c3BsaXRSZWNvcmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KFxuc3BlY2ltZW4sXG5bcmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dD17fSxyZXN0UGF0dD1NTS5hbnkoKV0sXG5jaGVjayk9Plxue1xuaWYoIWNoZWNrS2luZChzcGVjaW1lbiwnY29weVJlY29yZCcsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdHtyZXF1aXJlZFNwZWNpbWVuLG9wdGlvbmFsU3BlY2ltZW4scmVzdFNwZWNpbWVufT1cbnNwbGl0UmVjb3JkUGFydHMoc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk7XG5cbmNvbnN0IHBhcnRpYWxOYW1lcz0vKiAgICAgICAgICAgICAgICAgICAqL293bktleXMob3B0aW9uYWxTcGVjaW1lbik7XG5jb25zdCBwYXJ0aWFsUGF0dD1hZGFwdFJlY29yZFBhdHRlcm4ob3B0aW9uYWxQYXR0LHBhcnRpYWxOYW1lcyk7XG5yZXR1cm4oXG5jaGVja01hdGNoZXMocmVxdWlyZWRTcGVjaW1lbixyZXF1aXJlZFBhdHQsY2hlY2spJiZcbnBhcnRpYWxOYW1lcy5ldmVyeSgobmFtZSk9PlxuY2hlY2tNYXRjaGVzKFxub3B0aW9uYWxTcGVjaW1lbltuYW1lXSxcbnBhcnRpYWxQYXR0W25hbWVdLFxuY2hlY2ssXG4gYCR7bmFtZX0/YCkpJiZcblxuXG5jaGVja01hdGNoZXMocmVzdFNwZWNpbWVuLHJlc3RQYXR0LGNoZWNrLCcuLi5yZXN0JykpO1xuXG4gfSxcblxuLypcblxuXG4gICAgICovXG5jaGVja0lzV2VsbEZvcm1lZDooc3BsaXRBcnJheSxjaGVjayk9PntcbmlmKFxucGFzc1N0eWxlT2Yoc3BsaXRBcnJheSk9PT0nY29weUFycmF5JyYmKFxuc3BsaXRBcnJheS5sZW5ndGg+PTF8fHNwbGl0QXJyYXkubGVuZ3RoPD0zKSlcbntcbmNvbnN0W3JlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQ9dW5kZWZpbmVkLHJlc3RQYXR0PXVuZGVmaW5lZF09XG5zcGxpdEFycmF5O1xuaWYoXG5pc1BhdHRlcm4ocmVxdWlyZWRQYXR0KSYmXG5wYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpPT09J2NvcHlSZWNvcmQnJiYoXG5vcHRpb25hbFBhdHQ9PT11bmRlZmluZWR8fFxuaXNQYXR0ZXJuKG9wdGlvbmFsUGF0dCkmJlxucGFzc1N0eWxlT2Yob3B0aW9uYWxQYXR0KT09PSdjb3B5UmVjb3JkJykmJihcbnJlc3RQYXR0PT09dW5kZWZpbmVkfHxpc1BhdHRlcm4ocmVzdFBhdHQpKSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYE11c3QgYmUgYW4gYXJyYXkgb2YgYSByZXF1aXJlZFBhdHQgcmVjb3JkLCBhbiBvcHRpb25hbCBvcHRpb25hbFBhdHQgcmVjb3JkLCBhbmQgYW4gb3B0aW9uYWwgcmVzdFBhdHQ6ICR7cShcbnNwbGl0QXJyYXkpXG4gfWApO1xuXG4gfSxcblxuZ2V0UmFua0NvdmVyOihbXG5yZXF1aXJlZFBhdHQsXG5fb3B0aW9uYWxQYXR0PXVuZGVmaW5lZCxcbl9yZXN0UGF0dD11bmRlZmluZWRdKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcihwYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgSGVscGVyc0J5TWF0Y2hUYWc9aGFyZGVuKHtcbidtYXRjaDphbnknOm1hdGNoQW55SGVscGVyLFxuJ21hdGNoOmFuZCc6bWF0Y2hBbmRIZWxwZXIsXG4nbWF0Y2g6b3InOm1hdGNoT3JIZWxwZXIsXG4nbWF0Y2g6bm90JzptYXRjaE5vdEhlbHBlcixcblxuJ21hdGNoOnNjYWxhcic6bWF0Y2hTY2FsYXJIZWxwZXIsXG4nbWF0Y2g6a2V5JzptYXRjaEtleUhlbHBlcixcbidtYXRjaDpwYXR0ZXJuJzptYXRjaFBhdHRlcm5IZWxwZXIsXG4nbWF0Y2g6a2luZCc6bWF0Y2hLaW5kSGVscGVyLFxuJ21hdGNoOnRhZ2dlZCc6bWF0Y2hUYWdnZWRIZWxwZXIsXG4nbWF0Y2g6YmlnaW50JzptYXRjaEJpZ2ludEhlbHBlcixcbidtYXRjaDpuYXQnOm1hdGNoTmF0SGVscGVyLFxuJ21hdGNoOnN0cmluZyc6bWF0Y2hTdHJpbmdIZWxwZXIsXG4nbWF0Y2g6c3ltYm9sJzptYXRjaFN5bWJvbEhlbHBlcixcbidtYXRjaDpyZW1vdGFibGUnOm1hdGNoUmVtb3RhYmxlSGVscGVyLFxuXG4nbWF0Y2g6bHQnOm1hdGNoTFRIZWxwZXIsXG4nbWF0Y2g6bHRlJzptYXRjaExURUhlbHBlcixcbidtYXRjaDpndGUnOm1hdGNoR1RFSGVscGVyLFxuJ21hdGNoOmd0JzptYXRjaEdUSGVscGVyLFxuXG4nbWF0Y2g6YXJyYXlPZic6bWF0Y2hBcnJheU9mSGVscGVyLFxuJ21hdGNoOnJlY29yZE9mJzptYXRjaFJlY29yZE9mSGVscGVyLFxuJ21hdGNoOnNldE9mJzptYXRjaFNldE9mSGVscGVyLFxuJ21hdGNoOmJhZ09mJzptYXRjaEJhZ09mSGVscGVyLFxuJ21hdGNoOm1hcE9mJzptYXRjaE1hcE9mSGVscGVyLFxuJ21hdGNoOnNwbGl0QXJyYXknOm1hdGNoU3BsaXRBcnJheUhlbHBlcixcbidtYXRjaDpzcGxpdFJlY29yZCc6bWF0Y2hTcGxpdFJlY29yZEhlbHBlcn0pO1xuXG5cbmNvbnN0IG1ha2VNYXRjaGVyPSh0YWcscGF5bG9hZCk9PntcbmNvbnN0IG1hdGNoZXI9bWFrZVRhZ2dlZCh0YWcscGF5bG9hZCk7XG5hc3NlcnRQYXR0ZXJuKG1hdGNoZXIpO1xucmV0dXJuIG1hdGNoZXI7XG4gfTtcblxuY29uc3QgbWFrZUtpbmRNYXRjaGVyPShraW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmtpbmQnLGtpbmQpO1xuXG5jb25zdCBBbnlTaGFwZT1tYWtlTWF0Y2hlcignbWF0Y2g6YW55Jyx1bmRlZmluZWQpO1xuY29uc3QgU2NhbGFyU2hhcGU9bWFrZU1hdGNoZXIoJ21hdGNoOnNjYWxhcicsdW5kZWZpbmVkKTtcbmNvbnN0IEtleVNoYXBlPW1ha2VNYXRjaGVyKCdtYXRjaDprZXknLHVuZGVmaW5lZCk7XG5jb25zdCBQYXR0ZXJuU2hhcGU9bWFrZU1hdGNoZXIoJ21hdGNoOnBhdHRlcm4nLHVuZGVmaW5lZCk7XG5jb25zdCBCb29sZWFuU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdib29sZWFuJyk7XG5jb25zdCBOdW1iZXJTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ251bWJlcicpO1xuY29uc3QgQmlnSW50U2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6YmlnaW50JyxbXSk7XG5jb25zdCBOYXRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpuYXQnLFtdKTtcbmNvbnN0IFN0cmluZ1NoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOnN0cmluZycsW10pO1xuY29uc3QgU3ltYm9sU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6c3ltYm9sJyxbXSk7XG5jb25zdCBSZWNvcmRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpyZWNvcmRPZicsW0FueVNoYXBlLEFueVNoYXBlXSk7XG5jb25zdCBBcnJheVNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOmFycmF5T2YnLFtBbnlTaGFwZV0pO1xuY29uc3QgU2V0U2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6c2V0T2YnLFtBbnlTaGFwZV0pO1xuY29uc3QgQmFnU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6YmFnT2YnLFtBbnlTaGFwZSxBbnlTaGFwZV0pO1xuY29uc3QgTWFwU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6bWFwT2YnLFtBbnlTaGFwZSxBbnlTaGFwZV0pO1xuY29uc3QgUmVtb3RhYmxlU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdyZW1vdGFibGUnKTtcbmNvbnN0IEVycm9yU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdlcnJvcicpO1xuY29uc3QgUHJvbWlzZVNoYXBlPW1ha2VLaW5kTWF0Y2hlcigncHJvbWlzZScpO1xuY29uc3QgVW5kZWZpbmVkU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCd1bmRlZmluZWQnKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlTGltaXRzTWF0Y2hlcj0odGFnLHBheWxvYWQpPT57XG5pZihwYXlsb2FkW3BheWxvYWQubGVuZ3RoLTFdPT09dW5kZWZpbmVkKXtcbnBheWxvYWQ9aGFyZGVuKHBheWxvYWQuc2xpY2UoMCxwYXlsb2FkLmxlbmd0aC0xKSk7XG4gfVxucmV0dXJuIG1ha2VNYXRjaGVyKHRhZyxwYXlsb2FkKTtcbiB9O1xuXG5jb25zdCBtYWtlUmVtb3RhYmxlTWF0Y2hlcj0obGFiZWw9dW5kZWZpbmVkKT0+XG5sYWJlbD09PXVuZGVmaW5lZD9cblJlbW90YWJsZVNoYXBlOlxubWFrZU1hdGNoZXIoJ21hdGNoOnJlbW90YWJsZScsaGFyZGVuKHtsYWJlbH0pKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlU3BsaXRQYXlsb2FkPShcbmVtcHR5LFxuYmFzZSxcbm9wdGlvbmFsPXVuZGVmaW5lZCxcbnJlc3Q9dW5kZWZpbmVkKT0+XG57XG5pZihyZXN0KXtcbnJldHVybltiYXNlLG9wdGlvbmFsfHxlbXB0eSxyZXN0XTtcbiB9XG5pZihvcHRpb25hbCl7XG5yZXR1cm5bYmFzZSxvcHRpb25hbF07XG4gfVxucmV0dXJuW2Jhc2VdO1xuIH07XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IE09aGFyZGVuKHtcbmFueTooKT0+QW55U2hhcGUsXG5hbmQ6KC4uLnBhdHRzKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmFuZCcscGF0dHMpLFxub3I6KC4uLnBhdHRzKT0+bWFrZU1hdGNoZXIoJ21hdGNoOm9yJyxwYXR0cyksXG5ub3Q6KHN1YlBhdHQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6bm90JyxzdWJQYXR0KSxcblxuc2NhbGFyOigpPT5TY2FsYXJTaGFwZSxcbmtleTooKT0+S2V5U2hhcGUsXG5wYXR0ZXJuOigpPT5QYXR0ZXJuU2hhcGUsXG5raW5kOm1ha2VLaW5kTWF0Y2hlcixcbnRhZ2dlZDoodGFnUGF0dD1NLnN0cmluZygpLHBheWxvYWRQYXR0PU0uYW55KCkpPT5cbm1ha2VNYXRjaGVyKCdtYXRjaDp0YWdnZWQnLGhhcmRlbihbdGFnUGF0dCxwYXlsb2FkUGF0dF0pKSxcbmJvb2xlYW46KCk9PkJvb2xlYW5TaGFwZSxcbm51bWJlcjooKT0+TnVtYmVyU2hhcGUsXG5iaWdpbnQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6YmlnaW50JyxbbGltaXRzXSk6QmlnSW50U2hhcGUsXG5uYXQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6bmF0JyxbbGltaXRzXSk6TmF0U2hhcGUsXG5zdHJpbmc6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c3RyaW5nJyxbbGltaXRzXSk6U3RyaW5nU2hhcGUsXG5zeW1ib2w6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c3ltYm9sJyxbbGltaXRzXSk6U3ltYm9sU2hhcGUsXG5yZWNvcmQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9NLnJlY29yZE9mKE0uYW55KCksTS5hbnkoKSxsaW1pdHMpOlJlY29yZFNoYXBlLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmFycmF5OihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/TS5hcnJheU9mKE0uYW55KCksbGltaXRzKTpBcnJheVNoYXBlLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuc2V0OihsaW1pdHM9dW5kZWZpbmVkKT0+bGltaXRzP00uc2V0T2YoTS5hbnkoKSxsaW1pdHMpOlNldFNoYXBlLFxuYmFnOihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/TS5iYWdPZihNLmFueSgpLE0uYW55KCksbGltaXRzKTpCYWdTaGFwZSxcbm1hcDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP00ubWFwT2YoTS5hbnkoKSxNLmFueSgpLGxpbWl0cyk6TWFwU2hhcGUsXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmVtb3RhYmxlOm1ha2VSZW1vdGFibGVNYXRjaGVyLFxuZXJyb3I6KCk9PkVycm9yU2hhcGUsXG5wcm9taXNlOigpPT5Qcm9taXNlU2hhcGUsXG51bmRlZmluZWQ6KCk9PlVuZGVmaW5lZFNoYXBlLFxubnVsbDooKT0+bnVsbCxcblxubHQ6KHJpZ2h0T3BlcmFuZCk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpsdCcscmlnaHRPcGVyYW5kKSxcbmx0ZToocmlnaHRPcGVyYW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmx0ZScscmlnaHRPcGVyYW5kKSxcbmVxOihrZXkpPT57XG5hc3NlcnRLZXkoa2V5KTtcbnJldHVybiBrZXk9PT11bmRlZmluZWQ/TS51bmRlZmluZWQoKTprZXk7XG4gfSxcbm5lcTooa2V5KT0+TS5ub3QoTS5lcShrZXkpKSxcbmd0ZToocmlnaHRPcGVyYW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmd0ZScscmlnaHRPcGVyYW5kKSxcbmd0OihyaWdodE9wZXJhbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6Z3QnLHJpZ2h0T3BlcmFuZCksXG5cbnJlY29yZE9mOihrZXlQYXR0PU0uYW55KCksdmFsdWVQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOnJlY29yZE9mJyxba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzXSksXG5hcnJheU9mOihzdWJQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOmFycmF5T2YnLFtzdWJQYXR0LGxpbWl0c10pLFxuc2V0T2Y6KGtleVBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c2V0T2YnLFtrZXlQYXR0LGxpbWl0c10pLFxuYmFnT2Y6KGtleVBhdHQ9TS5hbnkoKSxjb3VudFBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6YmFnT2YnLFtrZXlQYXR0LGNvdW50UGF0dCxsaW1pdHNdKSxcbm1hcE9mOihrZXlQYXR0PU0uYW55KCksdmFsdWVQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOm1hcE9mJyxba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzXSksXG5zcGxpdEFycmF5OihiYXNlLG9wdGlvbmFsPXVuZGVmaW5lZCxyZXN0PXVuZGVmaW5lZCk9PlxubWFrZU1hdGNoZXIoXG4nbWF0Y2g6c3BsaXRBcnJheScsXG5tYWtlU3BsaXRQYXlsb2FkKFtdLGJhc2Usb3B0aW9uYWwscmVzdCkpLFxuXG5zcGxpdFJlY29yZDooYmFzZSxvcHRpb25hbD11bmRlZmluZWQscmVzdD11bmRlZmluZWQpPT5cbm1ha2VNYXRjaGVyKFxuJ21hdGNoOnNwbGl0UmVjb3JkJyxcbm1ha2VTcGxpdFBheWxvYWQoe30sYmFzZSxvcHRpb25hbCxyZXN0KSksXG5cbnNwbGl0OihiYXNlLHJlc3Q9dW5kZWZpbmVkKT0+e1xuaWYocGFzc1N0eWxlT2YoaGFyZGVuKGJhc2UpKT09PSdjb3B5QXJyYXknKXtcbi8vXG4vL1xucmV0dXJuIE0uc3BsaXRBcnJheShiYXNlLHJlc3QmJltdLHJlc3QpO1xuIH1lbHNle1xucmV0dXJuIE0uc3BsaXRSZWNvcmQoYmFzZSxyZXN0JiZ7fSxyZXN0KTtcbiB9XG4gfSxcbnBhcnRpYWw6KGJhc2UscmVzdD11bmRlZmluZWQpPT57XG5pZihwYXNzU3R5bGVPZihoYXJkZW4oYmFzZSkpPT09J2NvcHlBcnJheScpe1xuLy9cbi8vXG5yZXR1cm4gTS5zcGxpdEFycmF5KFtdLGJhc2UscmVzdCk7XG4gfWVsc2V7XG5yZXR1cm4gTS5zcGxpdFJlY29yZCh7fSxiYXNlLHJlc3QpO1xuIH1cbiB9LFxuXG5lcmVmOih0KT0+TS5vcih0LE0ucHJvbWlzZSgpKSxcbm9wdDoodCk9Pk0ub3IoTS51bmRlZmluZWQoKSx0KSxcblxuaW50ZXJmYWNlOihpbnRlcmZhY2VOYW1lLG1ldGhvZEd1YXJkcyxvcHRpb25zKT0+XG4vL1xubWFrZUludGVyZmFjZUd1YXJkKGludGVyZmFjZU5hbWUsbWV0aG9kR3VhcmRzLG9wdGlvbnMpLFxuY2FsbDooLi4uYXJnUGF0dGVybnMpPT5cbi8vXG5tYWtlTWV0aG9kR3VhcmRNYWtlcignc3luYycsYXJnUGF0dGVybnMpLFxuY2FsbFdoZW46KC4uLmFyZ0d1YXJkcyk9PlxuLy9cbm1ha2VNZXRob2RHdWFyZE1ha2VyKCdhc3luYycsYXJnR3VhcmRzKSxcblxuYXdhaXQ6KGFyZ1BhdHRlcm4pPT5cbi8vXG5tYWtlQXdhaXRBcmdHdWFyZChhcmdQYXR0ZXJuKSxcbnJhdzooKT0+XG4vL1xubWFrZVJhd0d1YXJkKCl9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmNoZWNrTWF0Y2hlcyxcbm1hdGNoZXMsXG5tdXN0TWF0Y2gsXG5hc3NlcnRQYXR0ZXJuLFxuaXNQYXR0ZXJuLFxuZ2V0UmFua0NvdmVyLFxuTSxcbmtpbmRPZn0pO1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgICAgICAge1xuY2hlY2tNYXRjaGVzLFxubWF0Y2hlcyxcbm11c3RNYXRjaCxcbmFzc2VydFBhdHRlcm4sXG5pc1BhdHRlcm4sXG5nZXRSYW5rQ292ZXIsXG5NLFxua2luZE9mfT1cbm1ha2VQYXR0ZXJuS2l0KCk7JGjNj19vbmNlLmNoZWNrTWF0Y2hlcyhjaGVja01hdGNoZXMpOyRozY9fb25jZS5tYXRjaGVzKG1hdGNoZXMpOyRozY9fb25jZS5tdXN0TWF0Y2gobXVzdE1hdGNoKTskaM2PX29uY2UuYXNzZXJ0UGF0dGVybihhc3NlcnRQYXR0ZXJuKTskaM2PX29uY2UuaXNQYXR0ZXJuKGlzUGF0dGVybik7JGjNj19vbmNlLmdldFJhbmtDb3ZlcihnZXRSYW5rQ292ZXIpOyRozY9fb25jZS5NKE0pOyRozY9fb25jZS5raW5kT2Yoa2luZE9mKTtcblxuTU09TTtcblxuLy9cblxuLy9cbmNvbnN0IEF3YWl0QXJnR3VhcmRQYXlsb2FkU2hhcGU9aGFyZGVuKHtcbmFyZ0d1YXJkOk0ucGF0dGVybigpfSk7XG5cblxuY29uc3QgICAgICAgIEF3YWl0QXJnR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOmF3YWl0QXJnR3VhcmQnKTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuQXdhaXRBcmdHdWFyZFNoYXBlKEF3YWl0QXJnR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgaXNBd2FpdEFyZ0d1YXJkPShzcGVjaW1lbik9PlxubWF0Y2hlcyhzcGVjaW1lbixBd2FpdEFyZ0d1YXJkU2hhcGUpOyRozY9fb25jZS5pc0F3YWl0QXJnR3VhcmQoaXNBd2FpdEFyZ0d1YXJkKTtcbmhhcmRlbihpc0F3YWl0QXJnR3VhcmQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydEF3YWl0QXJnR3VhcmQ9KHNwZWNpbWVuKT0+e1xubXVzdE1hdGNoKHNwZWNpbWVuLEF3YWl0QXJnR3VhcmRTaGFwZSwnYXdhaXRBcmdHdWFyZCcpO1xuIH07JGjNj19vbmNlLmFzc2VydEF3YWl0QXJnR3VhcmQoYXNzZXJ0QXdhaXRBcmdHdWFyZCk7XG5oYXJkZW4oYXNzZXJ0QXdhaXRBcmdHdWFyZCk7XG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlQXdhaXRBcmdHdWFyZD0oYXJnUGF0dGVybik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1tYWtlVGFnZ2VkKCdndWFyZDphd2FpdEFyZ0d1YXJkJyx7XG5hcmdHdWFyZDphcmdQYXR0ZXJufSk7XG5cbmFzc2VydEF3YWl0QXJnR3VhcmQocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLy9cblxuY29uc3QgUmF3R3VhcmRQYXlsb2FkU2hhcGU9TS5yZWNvcmQoKTtcblxuY29uc3QgICAgICAgIFJhd0d1YXJkU2hhcGU9TS5raW5kKCdndWFyZDpyYXdHdWFyZCcpOyRozY9fb25jZS5SYXdHdWFyZFNoYXBlKFJhd0d1YXJkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgaXNSYXdHdWFyZD0oc3BlY2ltZW4pPT5tYXRjaGVzKHNwZWNpbWVuLFJhd0d1YXJkU2hhcGUpOyRozY9fb25jZS5pc1Jhd0d1YXJkKGlzUmF3R3VhcmQpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0UmF3R3VhcmQ9KHNwZWNpbWVuKT0+XG5tdXN0TWF0Y2goc3BlY2ltZW4sUmF3R3VhcmRTaGFwZSwncmF3R3VhcmQnKTtcblxuLypcblxuICovJGjNj19vbmNlLmFzc2VydFJhd0d1YXJkKGFzc2VydFJhd0d1YXJkKTtcbmNvbnN0IG1ha2VSYXdHdWFyZD0oKT0+bWFrZVRhZ2dlZCgnZ3VhcmQ6cmF3R3VhcmQnLHt9KTtcblxuLy9cbi8vXG5cbmNvbnN0ICAgICAgICBTeW5jVmFsdWVHdWFyZFNoYXBlPU0ub3IoUmF3R3VhcmRTaGFwZSxNLnBhdHRlcm4oKSk7JGjNj19vbmNlLlN5bmNWYWx1ZUd1YXJkU2hhcGUoU3luY1ZhbHVlR3VhcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBTeW5jVmFsdWVHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoU3luY1ZhbHVlR3VhcmRTaGFwZSk7JGjNj19vbmNlLlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKTtcblxuY29uc3QgQXJnR3VhcmRTaGFwZT1NLm9yKFJhd0d1YXJkU2hhcGUsQXdhaXRBcmdHdWFyZFNoYXBlLE0ucGF0dGVybigpKTtcbmNvbnN0ICAgICAgICBBcmdHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoQXJnR3VhcmRTaGFwZSk7JGjNj19vbmNlLkFyZ0d1YXJkTGlzdFNoYXBlKEFyZ0d1YXJkTGlzdFNoYXBlKTtcblxuY29uc3QgU3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlPWhhcmRlbih7XG5jYWxsS2luZDonc3luYycsXG5hcmdHdWFyZHM6U3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsXG5vcHRpb25hbEFyZ0d1YXJkczpNLm9wdChTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSksXG5yZXN0QXJnR3VhcmQ6TS5vcHQoU3luY1ZhbHVlR3VhcmRTaGFwZSksXG5yZXR1cm5HdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSk7XG5cblxuY29uc3QgQXN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZT1oYXJkZW4oe1xuY2FsbEtpbmQ6J2FzeW5jJyxcbmFyZ0d1YXJkczpBcmdHdWFyZExpc3RTaGFwZSxcbm9wdGlvbmFsQXJnR3VhcmRzOk0ub3B0KEFyZ0d1YXJkTGlzdFNoYXBlKSxcbnJlc3RBcmdHdWFyZDpNLm9wdChTeW5jVmFsdWVHdWFyZFNoYXBlKSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5jb25zdCAgICAgICAgTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGU9TS5vcihcblN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZSxcbkFzeW5jTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUpOyRozY9fb25jZS5NZXRob2RHdWFyZFBheWxvYWRTaGFwZShNZXRob2RHdWFyZFBheWxvYWRTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIE1ldGhvZEd1YXJkU2hhcGU9TS5raW5kKCdndWFyZDptZXRob2RHdWFyZCcpO1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5NZXRob2RHdWFyZFNoYXBlKE1ldGhvZEd1YXJkU2hhcGUpO1xuY29uc3QgICAgICAgIGFzc2VydE1ldGhvZEd1YXJkPShzcGVjaW1lbik9Pntcbm11c3RNYXRjaChzcGVjaW1lbixNZXRob2RHdWFyZFNoYXBlLCdtZXRob2RHdWFyZCcpO1xuIH07JGjNj19vbmNlLmFzc2VydE1ldGhvZEd1YXJkKGFzc2VydE1ldGhvZEd1YXJkKTtcbmhhcmRlbihhc3NlcnRNZXRob2RHdWFyZCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlTWV0aG9kR3VhcmRNYWtlcj0oXG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPXVuZGVmaW5lZCxcbnJlc3RBcmdHdWFyZD11bmRlZmluZWQpPT5cblxuaGFyZGVuKHtcbm9wdGlvbmFsOiguLi5vcHRBcmdHdWFyZHMpPT57XG5vcHRpb25hbEFyZ0d1YXJkcz09PXVuZGVmaW5lZHx8XG5GYWlsIGBDYW4gb25seSBoYXZlIG9uZSBzZXQgb2Ygb3B0aW9uYWwgZ3VhcmRzYDtcbnJlc3RBcmdHdWFyZD09PXVuZGVmaW5lZHx8XG5GYWlsIGBvcHRpb25hbCBhcmcgZ3VhcmRzIG11c3QgY29tZSBiZWZvcmUgcmVzdCBhcmdgO1xucmV0dXJuIG1ha2VNZXRob2RHdWFyZE1ha2VyKGNhbGxLaW5kLGFyZ0d1YXJkcyxvcHRBcmdHdWFyZHMpO1xuIH0sXG5yZXN0OihyQXJnR3VhcmQpPT57XG5yZXN0QXJnR3VhcmQ9PT11bmRlZmluZWR8fEZhaWwgYENhbiBvbmx5IGhhdmUgb25lIHJlc3QgYXJnYDtcbnJldHVybiBtYWtlTWV0aG9kR3VhcmRNYWtlcihcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yQXJnR3VhcmQpO1xuXG4gfSxcbnJldHVybnM6KHJldHVybkd1YXJkPU0udW5kZWZpbmVkKCkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOm1ldGhvZEd1YXJkJyx7XG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzLFxucmVzdEFyZ0d1YXJkLFxucmV0dXJuR3VhcmR9KTtcblxuYXNzZXJ0TWV0aG9kR3VhcmQocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfX0pO1xuXG5cbmNvbnN0ICAgICAgICBJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xuaW50ZXJmYWNlTmFtZTpNLnN0cmluZygpLFxubWV0aG9kR3VhcmRzOk0ucmVjb3JkT2YoTS5zdHJpbmcoKSxNZXRob2RHdWFyZFNoYXBlKX0sXG5cbntcbmRlZmF1bHRHdWFyZHM6TS5vcihNLnVuZGVmaW5lZCgpLCdwYXNzYWJsZScsJ3JhdycpLFxuc2xvcHB5Ok0uYm9vbGVhbigpLFxuc3ltYm9sTWV0aG9kR3VhcmRzOk0ubWFwT2YoTS5zeW1ib2woKSxNZXRob2RHdWFyZFNoYXBlKX0pOyRozY9fb25jZS5JbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZShJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSk7XG5cblxuXG5jb25zdCAgICAgICAgSW50ZXJmYWNlR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOmludGVyZmFjZUd1YXJkJyk7XG5cbi8qXG5cblxuICovJGjNj19vbmNlLkludGVyZmFjZUd1YXJkU2hhcGUoSW50ZXJmYWNlR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgYXNzZXJ0SW50ZXJmYWNlR3VhcmQ9KHNwZWNpbWVuKT0+e1xubXVzdE1hdGNoKHNwZWNpbWVuLEludGVyZmFjZUd1YXJkU2hhcGUsJ2ludGVyZmFjZUd1YXJkJyk7XG4gfTskaM2PX29uY2UuYXNzZXJ0SW50ZXJmYWNlR3VhcmQoYXNzZXJ0SW50ZXJmYWNlR3VhcmQpO1xuaGFyZGVuKGFzc2VydEludGVyZmFjZUd1YXJkKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbnRlcmZhY2VHdWFyZD0oaW50ZXJmYWNlTmFtZSxtZXRob2RHdWFyZHMsb3B0aW9ucz17fSk9PntcbmNvbnN0e3Nsb3BweT1mYWxzZSxkZWZhdWx0R3VhcmRzPXNsb3BweT8ncGFzc2FibGUnOnVuZGVmaW5lZH09XG5vcHRpb25zO1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdNZXRob2RHdWFyZHM9e307XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzPVtdO1xuZm9yKGNvbnN0IGtleSBvZiBvd25LZXlzKG1ldGhvZEd1YXJkcykpe1xuY29uc3QgdmFsdWU9bWV0aG9kR3VhcmRzWy8qICAgICAgICAgICAgICAgICAqL2tleV07XG5pZih0eXBlb2Yga2V5PT09J3N5bWJvbCcpe1xuc3ltYm9sTWV0aG9kR3VhcmRzRW50cmllcy5wdXNoKFtrZXksdmFsdWVdKTtcbiB9ZWxzZXtcbnN0cmluZ01ldGhvZEd1YXJkc1trZXldPXZhbHVlO1xuIH1cbiB9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOmludGVyZmFjZUd1YXJkJyx7XG5pbnRlcmZhY2VOYW1lLFxubWV0aG9kR3VhcmRzOnN0cmluZ01ldGhvZEd1YXJkcyxcbi4uLihzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzLmxlbmd0aD9cbntzeW1ib2xNZXRob2RHdWFyZHM6bWFrZUNvcHlNYXAoc3ltYm9sTWV0aG9kR3VhcmRzRW50cmllcyl9Olxue30pLFxuZGVmYXVsdEd1YXJkc30pO1xuXG5hc3NlcnRJbnRlcmZhY2VHdWFyZChyZXN1bHQpO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3Jlc3VsdCk7XG4gfTtcblxuY29uc3QgR3VhcmRQYXlsb2FkU2hhcGVzPWhhcmRlbih7XG4nZ3VhcmQ6YXdhaXRBcmdHdWFyZCc6QXdhaXRBcmdHdWFyZFBheWxvYWRTaGFwZSxcbidndWFyZDpyYXdHdWFyZCc6UmF3R3VhcmRQYXlsb2FkU2hhcGUsXG4nZ3VhcmQ6bWV0aG9kR3VhcmQnOk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLFxuJ2d1YXJkOmludGVyZmFjZUd1YXJkJzpJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZX0pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdExpbWl0cyI6WyJkZWZhdWx0TGltaXRzIl0sImNoZWNrTWF0Y2hlcyI6WyJjaGVja01hdGNoZXMiXSwibWF0Y2hlcyI6WyJtYXRjaGVzIl0sIm11c3RNYXRjaCI6WyJtdXN0TWF0Y2giXSwiYXNzZXJ0UGF0dGVybiI6WyJhc3NlcnRQYXR0ZXJuIl0sImlzUGF0dGVybiI6WyJpc1BhdHRlcm4iXSwiZ2V0UmFua0NvdmVyIjpbImdldFJhbmtDb3ZlciJdLCJNIjpbIk0iXSwia2luZE9mIjpbImtpbmRPZiJdLCJBd2FpdEFyZ0d1YXJkU2hhcGUiOlsiQXdhaXRBcmdHdWFyZFNoYXBlIl0sImlzQXdhaXRBcmdHdWFyZCI6WyJpc0F3YWl0QXJnR3VhcmQiXSwiYXNzZXJ0QXdhaXRBcmdHdWFyZCI6WyJhc3NlcnRBd2FpdEFyZ0d1YXJkIl0sIlJhd0d1YXJkU2hhcGUiOlsiUmF3R3VhcmRTaGFwZSJdLCJpc1Jhd0d1YXJkIjpbImlzUmF3R3VhcmQiXSwiYXNzZXJ0UmF3R3VhcmQiOlsiYXNzZXJ0UmF3R3VhcmQiXSwiU3luY1ZhbHVlR3VhcmRTaGFwZSI6WyJTeW5jVmFsdWVHdWFyZFNoYXBlIl0sIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIjpbIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIl0sIkFyZ0d1YXJkTGlzdFNoYXBlIjpbIkFyZ0d1YXJkTGlzdFNoYXBlIl0sIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIjpbIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIl0sIk1ldGhvZEd1YXJkU2hhcGUiOlsiTWV0aG9kR3VhcmRTaGFwZSJdLCJhc3NlcnRNZXRob2RHdWFyZCI6WyJhc3NlcnRNZXRob2RHdWFyZCJdLCJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSI6WyJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSJdLCJJbnRlcmZhY2VHdWFyZFNoYXBlIjpbIkludGVyZmFjZUd1YXJkU2hhcGUiXSwiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiOlsiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABURLJnkBAAB5AQAAIgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuOC9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAI/L0fHEGAABxBgAAIQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOS9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsIi4vc3JjL21lbW8tcmFjZS5qcyIsIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VQcm9taXNlS2l0IiwicmFjZVByb21pc2VzIl0sInJlZXhwb3J0cyI6WyIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQsbWVtb1JhY2U7JGjNj19pbXBvcnRzKFtbXCIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc1wiLCBbW1wibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCA9ICRozY9fYSldXV1dLFtcIi4vc3JjL21lbW8tcmFjZS5qc1wiLCBbW1wibWVtb1JhY2VcIiwgWyRozY9fYSA9PiAobWVtb1JhY2UgPSAkaM2PX2EpXV1dXSxbXCIuL3NyYy9pcy1wcm9taXNlLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZVByb21pc2VLaXQsICduYW1lJywge3ZhbHVlOiBcIm1ha2VQcm9taXNlS2l0XCJ9KTskaM2PX29uY2UubWFrZVByb21pc2VLaXQobWFrZVByb21pc2VLaXQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyYWNlUHJvbWlzZXMsICduYW1lJywge3ZhbHVlOiBcInJhY2VQcm9taXNlc1wifSk7JGjNj19vbmNlLnJhY2VQcm9taXNlcyhyYWNlUHJvbWlzZXMpOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZT1nbG9iYWxUaGlzLkhhbmRsZWRQcm9taXNlfHxQcm9taXNlO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZVByb21pc2VLaXQoKXtcbmNvbnN0e3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfT1tYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQoKTtcblxuY29uc3QgcHJvbWlzZT1uZXcgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZShleGVjdXRvcik7XG5cbnJldHVybiBoYXJkZW4oe3Byb21pc2UscmVzb2x2ZSxyZWplY3R9KTtcbiB9XG5oYXJkZW4obWFrZVByb21pc2VLaXQpO1xuXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICByYWNlUHJvbWlzZXModmFsdWVzKXtcbnJldHVybiBoYXJkZW4obWVtb1JhY2UuY2FsbChCZXN0UGlwZWxpbmFibGVQcm9taXNlLHZhbHVlcykpO1xuIH1cbmhhcmRlbihyYWNlUHJvbWlzZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVByb21pc2VLaXQiOlsibWFrZVByb21pc2VLaXQiXSwicmFjZVByb21pc2VzIjpbInJhY2VQcm9taXNlcyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACGOdRfhAIAAIQCAAAqAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS45L3NyYy9pcy1wcm9taXNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJpc1Byb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlzUHJvbWlzZSwgJ25hbWUnLCB7dmFsdWU6IFwiaXNQcm9taXNlXCJ9KTskaM2PX29uY2UuaXNQcm9taXNlKGlzUHJvbWlzZSk7ICAgLypcblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgaXNQcm9taXNlKG1heWJlUHJvbWlzZSl7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1heWJlUHJvbWlzZSk9PT1tYXliZVByb21pc2U7XG4gfVxuaGFyZGVuKGlzUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Byb21pc2UiOlsiaXNQcm9taXNlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPjKfDrLBwAAywcAACkAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjkvc3JjL21lbW8tcmFjZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWVtb1JhY2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiovXG5cbmNvbnN0IGlzT2JqZWN0PSh2YWx1ZSk9Pk9iamVjdCh2YWx1ZSk9PT12YWx1ZTtcblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGtub3duUHJvbWlzZXM9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1hcmtTZXR0bGVkPShyZWNvcmQpPT57XG5pZighcmVjb3JkfHxyZWNvcmQuc2V0dGxlZCl7XG5yZXR1cm4gbmV3IFNldCgpO1xuIH1cblxuY29uc3R7ZGVmZXJyZWRzfT1yZWNvcmQ7XG5PYmplY3QuYXNzaWduKHJlY29yZCx7XG5kZWZlcnJlZHM6dW5kZWZpbmVkLFxuc2V0dGxlZDp0cnVlfSk7XG5cbk9iamVjdC5mcmVlemUocmVjb3JkKTtcbnJldHVybiBkZWZlcnJlZHM7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZ2V0TWVtb1JlY29yZD0odmFsdWUpPT57XG5pZighaXNPYmplY3QodmFsdWUpKXtcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKHtzZXR0bGVkOnRydWV9KTtcbiB9XG5cbmxldCByZWNvcmQ9a25vd25Qcm9taXNlcy5nZXQodmFsdWUpO1xuXG5pZighcmVjb3JkKXtcbnJlY29yZD17ZGVmZXJyZWRzOm5ldyBTZXQoKSxzZXR0bGVkOmZhbHNlfTtcbmtub3duUHJvbWlzZXMuc2V0KHZhbHVlLHJlY29yZCk7XG4vL1xuUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKFxuKHZhbCk9PntcbmZvcihjb25zdHtyZXNvbHZlfW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVzb2x2ZSh2YWwpO1xuIH1cbiB9LFxuKGVycik9PntcbmZvcihjb25zdHtyZWplY3R9b2YgbWFya1NldHRsZWQocmVjb3JkKSl7XG5yZWplY3QoZXJyKTtcbiB9XG4gfSk7XG5cbiB9XG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbmNvbnN0e3JhY2V9PXtcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbnJhY2UodmFsdWVzKXtcbmxldCBkZWZlcnJlZDtcbi8qICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGNhY2hlZFZhbHVlcz1bXTtcbmNvbnN0IEM9dGhpcztcbmNvbnN0IHJlc3VsdD1uZXcgQygocmVzb2x2ZSxyZWplY3QpPT57XG5kZWZlcnJlZD17cmVzb2x2ZSxyZWplY3R9O1xuZm9yKGNvbnN0IHZhbHVlIG9mIHZhbHVlcyl7XG5jYWNoZWRWYWx1ZXMucHVzaCh2YWx1ZSk7XG5jb25zdHtzZXR0bGVkLGRlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihzZXR0bGVkKXtcbi8vXG4vL1xuQy5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmUscmVqZWN0KTtcbiB9ZWxzZXtcbmRlZmVycmVkcy5hZGQoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG5cbi8vXG4vL1xucmV0dXJuIHJlc3VsdC5maW5hbGx5KCgpPT57XG5mb3IoY29uc3QgdmFsdWUgb2YgY2FjaGVkVmFsdWVzKXtcbmNvbnN0e2RlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihkZWZlcnJlZHMpe1xuZGVmZXJyZWRzLmRlbGV0ZShkZWZlcnJlZCk7XG4gfVxuIH1cbiB9KTtcbiB9fTskaM2PX29uY2UucmFjZShyYWNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1lbW9SYWNlIjpbInJhY2UiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAPBQ37qsFAACrBQAANAAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOS9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdD0oKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZXNvbHZlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGludGVybmFsUmVqZWN0O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzb2x2ZT0odmFsdWUpPT57XG5pZihpbnRlcm5hbFJlc29sdmUpe1xuaW50ZXJuYWxSZXNvbHZlKHZhbHVlKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT1udWxsKTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWplY3Q9KHJlYXNvbik9PntcbmlmKGludGVybmFsUmVqZWN0KXtcbmludGVybmFsUmVqZWN0KHJlYXNvbik7XG5pbnRlcm5hbFJlc29sdmU9bnVsbDtcbmludGVybmFsUmVqZWN0PW51bGw7XG4gfWVsc2V7XG5hc3NlcnQoaW50ZXJuYWxSZWplY3Q9PT1udWxsKTtcbiB9XG4gfTtcblxuY29uc3QgZXhlY3V0b3I9KHJlcyxyZWopPT57XG5hc3NlcnQoaW50ZXJuYWxSZXNvbHZlPT09dW5kZWZpbmVkJiZpbnRlcm5hbFJlamVjdD09PXVuZGVmaW5lZCk7XG5pbnRlcm5hbFJlc29sdmU9cmVzO1xuaW50ZXJuYWxSZWplY3Q9cmVqO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfSk7XG4gfTskaM2PX29uY2UubWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG5oYXJkZW4obWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCI6WyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABURLJnkBAAB5AQAAJQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOS9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAAbfFr78RAAC/EQAAHAAAAEBlbmRvL3N0cmVhbS12MS4yLjkvaW5kZXguanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0Il0sImV4cG9ydHMiOlsibWFrZVBpcGUiLCJtYWtlUXVldWUiLCJtYWtlU3RyZWFtIiwibWFwUmVhZGVyIiwibWFwV3JpdGVyIiwicHJpbWUiLCJwdW1wIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxtYWtlUHJvbWlzZUtpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vL1xuLy9cbi8vXG5jb25zdCBmcmVlemU9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL09iamVjdC5mcmVlemU7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVF1ZXVlPSgpPT57XG5sZXR7cHJvbWlzZTp0YWlsUHJvbWlzZSxyZXNvbHZlOnRhaWxSZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucmV0dXJue1xucHV0KHZhbHVlKXtcbmNvbnN0e3Jlc29sdmUscHJvbWlzZX09bWFrZVByb21pc2VLaXQoKTtcbnRhaWxSZXNvbHZlKGZyZWV6ZSh7dmFsdWUscHJvbWlzZX0pKTtcbnRhaWxSZXNvbHZlPXJlc29sdmU7XG4gfSxcbmdldCgpe1xuY29uc3QgcHJvbWlzZT10YWlsUHJvbWlzZS50aGVuKChuZXh0KT0+bmV4dC52YWx1ZSk7XG50YWlsUHJvbWlzZT10YWlsUHJvbWlzZS50aGVuKChuZXh0KT0+bmV4dC5wcm9taXNlKTtcbnJldHVybiBoYXJkZW4ocHJvbWlzZSk7XG4gfX07XG5cbiB9OyRozY9fb25jZS5tYWtlUXVldWUobWFrZVF1ZXVlKTtcbmhhcmRlbihtYWtlUXVldWUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN0cmVhbT0oYWNrcyxkYXRhKT0+e1xuY29uc3Qgc3RyZWFtPWhhcmRlbih7XG4vKlxuXG4gICAgICovXG5uZXh0KHZhbHVlKXtcbi8vXG4vL1xuZGF0YS5wdXQoZnJlZXplKHt2YWx1ZSxkb25lOmZhbHNlfSkpO1xucmV0dXJuIGFja3MuZ2V0KCk7XG4gfSxcbi8qXG5cbiAgICAgKi9cbnJldHVybih2YWx1ZSl7XG5kYXRhLnB1dChmcmVlemUoe3ZhbHVlLGRvbmU6dHJ1ZX0pKTtcbnJldHVybiBhY2tzLmdldCgpO1xuIH0sXG4vKlxuXG4gICAgICovXG50aHJvdyhlcnJvcil7XG5kYXRhLnB1dChoYXJkZW4oUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG5yZXR1cm4gYWNrcy5nZXQoKTtcbiB9LFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe1xucmV0dXJuIHN0cmVhbTtcbiB9fSk7XG5cbnJldHVybiBzdHJlYW07XG4gfTskaM2PX29uY2UubWFrZVN0cmVhbShtYWtlU3RyZWFtKTtcbmhhcmRlbihtYWtlU3RyZWFtKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIG1ha2VQaXBlPSgpPT57XG5jb25zdCBkYXRhPW1ha2VRdWV1ZSgpO1xuY29uc3QgYWNrcz1tYWtlUXVldWUoKTtcbmNvbnN0IHJlYWRlcj1tYWtlU3RyZWFtKGFja3MsZGF0YSk7XG5jb25zdCB3cml0ZXI9bWFrZVN0cmVhbShkYXRhLGFja3MpO1xucmV0dXJuIGhhcmRlbihbd3JpdGVyLHJlYWRlcl0pO1xuIH07JGjNj19vbmNlLm1ha2VQaXBlKG1ha2VQaXBlKTtcbmhhcmRlbihtYWtlUGlwZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHB1bXA9YXN5bmMod3JpdGVyLHJlYWRlcixwcmltZXIpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0aWNrPShwcm9taXNlKT0+XG5FLndoZW4oXG5wcm9taXNlLFxuKHJlc3VsdCk9PntcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiB3cml0ZXIucmV0dXJuKHJlc3VsdC52YWx1ZSk7XG4gfWVsc2V7XG4vL1xuLy9cbnJldHVybiB0b2NrKHdyaXRlci5uZXh0KHJlc3VsdC52YWx1ZSkpO1xuIH1cbiB9LFxuKC8qICAgICAgICAgICAgICAgICovZXJyb3IpPT57XG5yZXR1cm4gd3JpdGVyLnRocm93KGVycm9yKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0b2NrPShwcm9taXNlKT0+XG5FLndoZW4oXG5wcm9taXNlLFxuKHJlc3VsdCk9PntcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiByZWFkZXIucmV0dXJuKHJlc3VsdC52YWx1ZSk7XG4gfWVsc2V7XG5yZXR1cm4gdGljayhyZWFkZXIubmV4dChyZXN1bHQudmFsdWUpKTtcbiB9XG4gfSxcbigvKiAgICAgICAgICAgICAgICAqL2Vycm9yKT0+e1xucmV0dXJuIHJlYWRlci50aHJvdyhlcnJvcik7XG4gfSk7XG5cbmF3YWl0IHRpY2socmVhZGVyLm5leHQocHJpbWVyKSk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLnB1bXAocHVtcCk7XG5oYXJkZW4ocHVtcCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJpbWU9KGdlbmVyYXRvcixwcmltZXIpPT57XG4vL1xuY29uc3QgZmlyc3Q9Z2VuZXJhdG9yLm5leHQocHJpbWVyKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZXN1bHQ7XG5jb25zdCBwcmltZWQ9aGFyZGVuKHtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIG5leHQodmFsdWUpe1xuaWYocmVzdWx0PT09dW5kZWZpbmVkKXtcbi8vXG5yZXN1bHQ9YXdhaXQgZmlyc3Q7XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5yZXR1cm4gZ2VuZXJhdG9yLm5leHQodmFsdWUpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgcmV0dXJuKHZhbHVlKXtcbmlmKHJlc3VsdD09PXVuZGVmaW5lZCl7XG4vL1xucmVzdWx0PWF3YWl0IGZpcnN0O1xuaWYocmVzdWx0LmRvbmUpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxucmV0dXJuIGdlbmVyYXRvci5yZXR1cm4odmFsdWUpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIHRocm93KGVycm9yKXtcbmlmKHJlc3VsdD09PXVuZGVmaW5lZCl7XG4vL1xucmVzdWx0PWF3YWl0IGZpcnN0O1xuaWYocmVzdWx0LmRvbmUpe1xudGhyb3cgZXJyb3I7XG4gfVxuIH1cbnJldHVybiBnZW5lcmF0b3IudGhyb3coZXJyb3IpO1xuIH19KTtcblxucmV0dXJuIHByaW1lZDtcbiB9OyRozY9fb25jZS5wcmltZShwcmltZSk7XG5oYXJkZW4ocHJpbWUpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcFJlYWRlcj0ocmVhZGVyLHRyYW5zZm9ybSk9PntcbmFzeW5jIGZ1bmN0aW9uKnRyYW5zZm9ybUdlbmVyYXRvcigpe1xuZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIHJlYWRlcil7XG55aWVsZCB0cmFuc2Zvcm0odmFsdWUpO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuaGFyZGVuKHRyYW5zZm9ybUdlbmVyYXRvcik7XG5yZXR1cm4gaGFyZGVuKHRyYW5zZm9ybUdlbmVyYXRvcigpKTtcbiB9OyRozY9fb25jZS5tYXBSZWFkZXIobWFwUmVhZGVyKTtcbmhhcmRlbihtYXBSZWFkZXIpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcFdyaXRlcj0od3JpdGVyLHRyYW5zZm9ybSk9PntcbmNvbnN0IHRyYW5zZm9ybWVkV3JpdGVyPWhhcmRlbih7XG4vKlxuXG4gICAgICovXG4gICAgICBhc3luYyBuZXh0KHZhbHVlKXtcbnJldHVybiB3cml0ZXIubmV4dCh0cmFuc2Zvcm0odmFsdWUpKTtcbiB9LFxuLypcblxuICAgICAqL1xuICAgICAgYXN5bmMgdGhyb3coZXJyb3Ipe1xucmV0dXJuIHdyaXRlci50aHJvdyhlcnJvcik7XG4gfSxcbi8qXG5cbiAgICAgKi9cbiAgICAgIGFzeW5jIHJldHVybih2YWx1ZSl7XG5yZXR1cm4gd3JpdGVyLnJldHVybih2YWx1ZSk7XG4gfSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtcbnJldHVybiB0cmFuc2Zvcm1lZFdyaXRlcjtcbiB9fSk7XG5cbnJldHVybiB0cmFuc2Zvcm1lZFdyaXRlcjtcbiB9OyRozY9fb25jZS5tYXBXcml0ZXIobWFwV3JpdGVyKTtcbmhhcmRlbihtYXBXcml0ZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVF1ZXVlIjpbIm1ha2VRdWV1ZSJdLCJtYWtlU3RyZWFtIjpbIm1ha2VTdHJlYW0iXSwibWFrZVBpcGUiOlsibWFrZVBpcGUiXSwicHVtcCI6WyJwdW1wIl0sInByaW1lIjpbInByaW1lIl0sIm1hcFJlYWRlciI6WyJtYXBSZWFkZXIiXSwibWFwV3JpdGVyIjpbIm1hcFdyaXRlciJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD0DM7f8gEAAPIBAAAcAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvbWFpbi5qc3siaW1wb3J0cyI6WyIuL3JpbmcwL21haW4uanMiLCIuL3JpbmcxL21haW4uanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3JpbmcwL21haW4uanMiLCIuL3JpbmcxL21haW4uanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9yaW5nMC9tYWluLmpzXCIsIFtdXSxbXCIuL3JpbmcxL21haW4uanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAVse9b6IBAACiAQAAHwAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL0UuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiQGVuZG8vZmFyIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB8vcxPngIAAJ4CAAAsAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImFzeW5jR2VuZXJhdGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzeW5jR2VuZXJhdGU9KG5leHQpPT57XG5yZXR1cm4gaGFyZGVuKHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PntcbnJldHVybiBoYXJkZW4oe1xubmV4dDphc3luYygpPT5oYXJkZW4obmV4dCgpKX0pO1xuXG4gfX0pO1xuXG4gfTskaM2PX29uY2UuYXN5bmNHZW5lcmF0ZShhc3luY0dlbmVyYXRlKTtcbmhhcmRlbihhc3luY0dlbmVyYXRlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzeW5jR2VuZXJhdGUiOlsiYXN5bmNHZW5lcmF0ZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACbSC63FQIAABUCAAAiAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFpbi5qc3siaW1wb3J0cyI6WyIuL0UuanMiLCIuL21ha2Vycy5qcyIsIi4vYXN5bmMtZ2VuZXJhdGUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL0UuanMiLCIuL2FzeW5jLWdlbmVyYXRlLmpzIiwiLi9tYWtlcnMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9FLmpzXCIsIFtdXSxbXCIuL21ha2Vycy5qc1wiLCBbXV0sW1wiLi9hc3luYy1nZW5lcmF0ZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADb5r8/+wcAAPsHAAAkAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFrZXJzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlTWFwIiwibWFrZVByb21pc2UiLCJtYWtlU2V0IiwibWFrZVdlYWtNYXAiLCJtYWtlV2Vha1NldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VQcm9taXNlPShleGVjdXRvcik9PmhhcmRlbihuZXcgUHJvbWlzZShleGVjdXRvcikpOyRozY9fb25jZS5tYWtlUHJvbWlzZShtYWtlUHJvbWlzZSk7XG5oYXJkZW4obWFrZVByb21pc2UpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZU1hcD0oZW50cmllc09ySXRlcmFibGUpPT5oYXJkZW4obmV3IE1hcChlbnRyaWVzT3JJdGVyYWJsZSkpOyRozY9fb25jZS5tYWtlTWFwKG1ha2VNYXApO1xuaGFyZGVuKG1ha2VNYXApO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VTZXQ9KHZhbHVlcyk9PmhhcmRlbihuZXcgU2V0KHZhbHVlcykpOyRozY9fb25jZS5tYWtlU2V0KG1ha2VTZXQpO1xuaGFyZGVuKG1ha2VTZXQpO1xuXG4vKlxuXG5cblxuICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtNYXA9KGVudHJpZXMpPT5oYXJkZW4obmV3IFdlYWtNYXAoZW50cmllcykpOyRozY9fb25jZS5tYWtlV2Vha01hcChtYWtlV2Vha01hcCk7XG5oYXJkZW4obWFrZVdlYWtNYXApO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlV2Vha1NldD0odmFsdWVzKT0+aGFyZGVuKG5ldyBXZWFrU2V0KHZhbHVlcykpOyRozY9fb25jZS5tYWtlV2Vha1NldChtYWtlV2Vha1NldCk7XG5oYXJkZW4obWFrZVdlYWtTZXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVByb21pc2UiOlsibWFrZVByb21pc2UiXSwibWFrZU1hcCI6WyJtYWtlTWFwIl0sIm1ha2VTZXQiOlsibWFrZVNldCJdLCJtYWtlV2Vha01hcCI6WyJtYWtlV2Vha01hcCJdLCJtYWtlV2Vha1NldCI6WyJtYWtlV2Vha1NldCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACv0+vqeAMAAHgDAAApAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanN7ImltcG9ydHMiOlsiLi4vcmluZzAvbWFpbi5qcyJdLCJleHBvcnRzIjpbImFzeW5jRG9XaGlsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VQcm9taXNlOyRozY9faW1wb3J0cyhbW1wiLi4vcmluZzAvbWFpbi5qc1wiLCBbW1wibWFrZVByb21pc2VcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2UgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3luY0RvV2hpbGU9KGJvZHkpPT57XG5yZXR1cm4gbWFrZVByb21pc2UoKHJlc29sdmUscmVqZWN0KT0+e1xuY29uc3QgbG9vcD1hc3luYygpPT57XG5jb25zdCBkb0NvbnRpbnVlPWF3YWl0IGJvZHkoKTtcbmlmKCFkb0NvbnRpbnVlKXtcbi8vXG5yZXNvbHZlKHVuZGVmaW5lZCk7XG5yZXR1cm47XG4gfVxuXG4vL1xuLy9cbmxvb3AoKS5jYXRjaChyZWplY3QpO1xuIH07XG5cbmxvb3AoKS5jYXRjaChyZWplY3QpO1xuIH0pO1xuIH07JGjNj19vbmNlLmFzeW5jRG9XaGlsZShhc3luY0RvV2hpbGUpO1xuaGFyZGVuKGFzeW5jRG9XaGlsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3luY0RvV2hpbGUiOlsiYXN5bmNEb1doaWxlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAZfiv+3AQAAtwEAACIAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9tYWluLmpzeyJpbXBvcnRzIjpbIi4vYXN5bmMtdG9vbHMuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2FzeW5jLXRvb2xzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vYXN5bmMtdG9vbHMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAQIeAwoAAAAAAAAAAADGp8qmZfoAAGX6AAAUAAAAAAAAAAAAAACkgQAAAABjb21wYXJ0bWVudC1tYXAuanNvblBLAQIeAwoAAAAAAAAAAADoKLsorgEAAK4BAAAgAAAAAAAAAAAAAACkgZf6AABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvaGVhcC5qc1BLAQIeAwoAAAAAAAAAAAAFREsmeQEAAHkBAAAnAAAAAAAAAAAAAACkgYP8AABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2V4cG9ydHMuanNQSwECHgMKAAAAAAAAAAAAWxIkmYgKAACICgAAJAAAAAAAAAAAAAAApIFB/gAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9oZWFwLmpzUEsBAh4DCgAAAAAAAAAAAMzs0QuaAgAAmgIAACUAAAAAAAAAAAAAAKSBCwkBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAUdiVg4cCAACHAgAAKwAAAAAAAAAAAAAApIHoCwEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9pcy1wYXNzYWJsZS5qc1BLAQIeAwoAAAAAAAAAAAB+5BUkpAMAAKQDAAAkAAAAAAAAAAAAAACkgbgOAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2tleXMuanNQSwECHgMKAAAAAAAAAAAACZbmPREHAAARBwAAKQAAAAAAAAAAAAAApIGeEgEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9tYWtlLW9uY2UuanNQSwECHgMKAAAAAAAAAAAAAXSK+44JAACOCQAALQAAAAAAAAAAAAAApIH2GQEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy93YXRjaC1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAEjyudUoBQAAKAUAACEAAAAAAAAAAAAAAKSBzyMBAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy9jYWNoZS5qc1BLAQIeAwoAAAAAAAAAAAASnwuxMgIAADICAAAgAAAAAAAAAAAAAACkgTYpAQBAYWdvcmljL2NhY2hlLXYwLjMuMi9zcmMvbWFpbi5qc1BLAQIeAwoAAAAAAAAAAACMvBfLOwQAADsEAAAhAAAAAAAAAAAAAACkgaYrAQBAYWdvcmljL2NhY2hlLXYwLjMuMi9zcmMvc3RhdGUuanNQSwECHgMKAAAAAAAAAAAAZRew0LEXAACxFwAAIQAAAAAAAAAAAAAApIEgMAEAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL3N0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAAVESyZ5AQAAeQEAACEAAAAAAAAAAAAAAKSBEEgBAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAABHUexiLx0AAC8dAAAmAAAAAAAAAAAAAACkgchJAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvYW1vdW50TWF0aC5qc1BLAQIeAwoAAAAAAAAAAABKkNB8AwQAAAMEAAAnAAAAAAAAAAAAAACkgTtnAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvYW1vdW50U3RvcmUuanNQSwECHgMKAAAAAAAAAAAARbUcGvYFAAD2BQAAJwAAAAAAAAAAAAAApIGDawEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Rpc3BsYXlJbmZvLmpzUEsBAh4DCgAAAAAAAAAAAF+WkLZuAgAAbgIAACEAAAAAAAAAAAAAAKSBvnEBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADwAy3lFBYAABQWAAAlAAAAAAAAAAAAAACkgWt0AQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvaXNzdWVyS2l0LmpzUEsBAh4DCgAAAAAAAAAAAN/GbqcQBgAAEAYAADoAAAAAAAAAAAAAAKSBwooBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAXsFLb84FAADOBQAAOgAAAAAAAAAAAAAApIEqkQEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAACZhaAmlgQAAJYEAAA2AAAAAAAAAAAAAACkgVCXAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAVgsI8XcGAAB3BgAANgAAAAAAAAAAAAAApIE6nAEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAI2/ad6yAwAAsgMAACMAAAAAAAAAAAAAAKSBBaMBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50LmpzUEsBAh4DCgAAAAAAAAAAAJIp6jsaIAAAGiAAACkAAAAAAAAAAAAAAKSB+KYBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50TGVkZ2VyLmpzUEsBAh4DCgAAAAAAAAAAAHow94npEAAA6RAAACEAAAAAAAAAAAAAAKSBWccBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wdXJzZS5qc1BLAQIeAwoAAAAAAAAAAAAxw5crBQYAAAUGAAAtAAAAAAAAAAAAAACkgYHYAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvdHJhbnNpZW50Tm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAAwd6/mPsYAAD7GAAAJgAAAAAAAAAAAAAApIHR3gEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAABURLJnkBAAB5AQAAJwAAAAAAAAAAAAAApIEQ+AEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVzLWluZGV4LmpzUEsBAh4DCgAAAAAAAAAAAJ2t3N8YGgAAGBoAACcAAAAAAAAAAAAAAKSBzvkBAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9jYWxsYmFjay5qc1BLAQIeAwoAAAAAAAAAAABz0F7h/AUAAPwFAAAlAAAAAAAAAAAAAACkgSsUAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvY29uZmlnLmpzUEsBAh4DCgAAAAAAAAAAAF+DFqp3BAAAdwQAACQAAAAAAAAAAAAAAKSBahoCAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9kZWJ1Zy5qc1BLAQIeAwoAAAAAAAAAAADTiaG/vQIAAL0CAAAlAAAAAAAAAAAAAACkgSMfAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZXJyb3JzLmpzUEsBAh4DCgAAAAAAAAAAACHQpXKiBQAAogUAACQAAAAAAAAAAAAAAKSBIyICAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADojmdATgcAAE4HAAAnAAAAAAAAAAAAAACkgQcoAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvanMtdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAHwlK4QIWAAACFgAALwAAAAAAAAAAAAAApIGaLwIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNQSwECHgMKAAAAAAAAAAAAwmKKfUAQAABAEAAAJgAAAAAAAAAAAAAApIHpRQIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL21hcnNoYWwuanNQSwECHgMKAAAAAAAAAAAA12mQKZoIAACaCAAAKwAAAAAAAAAAAAAApIFtVgIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL21ldGhvZC10b29scy5qc1BLAQIeAwoAAAAAAAAAAAANUHkNtR0AALUdAAAoAAAAAAAAAAAAAACkgVBfAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvc2VzLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAANEcd+m6IgAAuiIAADEAAAAAAAAAAAAAAKSBS30CAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanNQSwECHgMKAAAAAAAAAAAA6xiOAVAGAABQBgAALAAAAAAAAAAAAAAApIFUoAIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3Rlc3RpbmctdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAGERIDiwDAAAsAwAAKAAAAAAAAAAAAAAApIHupgIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVDaGVjay5qc1BLAQIeAwoAAAAAAAAAAACk1xA0fQMAAH0DAAApAAAAAAAAAAAAAACkgWCqAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdHlwZUd1YXJkcy5qc1BLAQIeAwoAAAAAAAAAAAAFREsmeQEAAHkBAAAqAAAAAAAAAAAAAACkgSSuAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdHlwZXMtaW5kZXguanNQSwECHgMKAAAAAAAAAAAA03qr5UEHAABBBwAAKgAAAAAAAAAAAAAApIHlrwIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3VwZ3JhZGUtYXBpLmpzUEsBAh4DCgAAAAAAAAAAABKO4l82CAAANggAADMAAAAAAAAAAAAAAKSBbrcCAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc1BLAQIeAwoAAAAAAAAAAACgC8uyDAgAAAwIAAAkAAAAAAAAAAAAAACkgfW/AgBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAA855uW6AQAACgEAAAJwAAAAAAAAAAAAAApIFDyAIAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL25vdGlmaWVyLmpzUEsBAh4DCgAAAAAAAAAAAAwUbIhcKwAAXCsAACoAAAAAAAAAAAAAAKSBKNkCAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9wdWJsaXNoLWtpdC5qc1BLAQIeAwoAAAAAAAAAAAAxrk4KQAgAAEAIAAAuAAAAAAAAAAAAAACkgcwEAwBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3RvcmVkLW5vdGlmaWVyLmpzUEsBAh4DCgAAAAAAAAAAACqIP9wcFgAAHBYAACcAAAAAAAAAAAAAAKSBWA0DAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdG9yZXN1Yi5qc1BLAQIeAwoAAAAAAAAAAACpV3xwUBIAAFASAAAoAAAAAAAAAAAAAACkgbkjAwBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3Vic2NyaWJlLmpzUEsBAh4DCgAAAAAAAAAAAJfiv+IACAAAAAgAACkAAAAAAAAAAAAAAKSBTzYDAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdWJzY3JpYmVyLmpzUEsBAh4DCgAAAAAAAAAAAC7X44scBAAAHAQAACQAAAAAAAAAAAAAAKSBlj4DAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy90b3BpYy5qc1BLAQIeAwoAAAAAAAAAAAAFREsmeQEAAHkBAAAqAAAAAAAAAAAAAACkgfRCAwBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvdHlwZXMtaW5kZXguanNQSwECHgMKAAAAAAAAAAAA0yzIgLEGAACxBgAALQAAAAAAAAAAAAAApIG1RAMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzUEsBAh4DCgAAAAAAAAAAAAKr88m8HQAAvB0AADMAAAAAAAAAAAAAAKSBsUsDAEBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMy9zcmMvbWFyc2hhbC1jb250ZXh0cy5qc1BLAQIeAwoAAAAAAAAAAAChqv0vww0AAMMNAAAhAAAAAAAAAAAAAACkgb5pAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAzuWXSGQFAABkBQAALAAAAAAAAAAAAAAApIHAdwMAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL2xlZ2FjeS9sZWdhY3lNYXAuanNQSwECHgMKAAAAAAAAAAAAbfFZIyYFAAAmBQAAMAAAAAAAAAAAAAAApIFufQMAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzUEsBAh4DCgAAAAAAAAAAAIWebmbLEAAAyxAAADEAAAAAAAAAAAAAAKSB4oIDAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanNQSwECHgMKAAAAAAAAAAAAQkx9HvwLAAD8CwAAMQAAAAAAAAAAAAAApIH8kwMAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAADG/C1l3w0AAN8NAAA1AAAAAAAAAAAAAACkgUegAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAACGL77EogoAAKIKAAA1AAAAAAAAAAAAAACkgXmuAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAADFAowz2g4AANoOAAAuAAAAAAAAAAAAAACkgW65AwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAAVESyZ5AQAAeQEAACEAAAAAAAAAAAAAAKSBlMgDAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAABvG5SMzxYAAM8WAAAoAAAAAAAAAAAAAACkgUzKAwBAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvZXhvLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAOco1IzXCAAA1wgAACQAAAAAAAAAAAAAAKSBYeEDAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADeGWoD2xYAANsWAAAwAAAAAAAAAAAAAACkgXrqAwBAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvdmF0LWRhdGEtYmluZGluZ3MuanNQSwECHgMKAAAAAAAAAAAAc3i9rmURAABlEQAAHwAAAAAAAAAAAAAApIGjAQQAQGFnb3JpYy92YXRzLXYwLjE1LjEvc3JjL2NyYy5qc1BLAQIeAwoAAAAAAAAAAACSC1tuYyEAAGMhAAAlAAAAAAAAAAAAAACkgUUTBABAYWdvcmljL3ZhdHMtdjAuMTUuMS9zcmMvbGliLWJvYXJkLmpzUEsBAh4DCgAAAAAAAAAAAB9PqMLlCwAA5QsAAC0AAAAAAAAAAAAAAKSB6zQEAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvYWN0aW9ucy5qc1BLAQIeAwoAAAAAAAAAAABTChau1wIAANcCAAA1AAAAAAAAAAAAAACkgRtBBABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2JpZ2ludFN0cmluZ2lmeS5qc1BLAQIeAwoAAAAAAAAAAABZFOv2iQkAAIkJAAAuAAAAAAAAAAAAAACkgUVEBABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2RhdGUtbm93LmpzUEsBAh4DCgAAAAAAAAAAAMCv6nUJEwAACRMAADoAAAAAAAAAAAAAAKSBGk4EAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvZmluZE9yTWFrZUludml0YXRpb24uanNQSwECHgMKAAAAAAAAAAAAVGqlKXoCAAB6AgAANAAAAAAAAAAAAAAApIF7YQQAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9pbnRlcm5hbC10eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADxmAgEywgAAMsIAAAxAAAAAAAAAAAAAACkgUdkBABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2lzc3VlclRhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAIBsAWQ0HgAANB4AADMAAAAAAAAAAAAAAKSBYW0EAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvbGliLWRlaHlkcmF0ZS5qc1BLAQIeAwoAAAAAAAAAAADvP+roXqUAAF6lAAAwAAAAAAAAAAAAAACkgeaLBABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2xpYi13YWxsZXQuanNQSwECHgMKAAAAAAAAAAAAv+TdXugCAADoAgAALAAAAAAAAAAAAAAApIGSMQUAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9wdWJzdWIuanNQSwECHgMKAAAAAAAAAAAApcHj38A1AADANQAALAAAAAAAAAAAAAAApIHENAUAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy93YWxsZXQuanNQSwECHgMKAAAAAAAAAAAAcHmrRl0ZAABdGQAAMwAAAAAAAAAAAAAApIHOagUAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzUEsBAh4DCgAAAAAAAAAAAP3jOXG3AQAAtwEAAB4AAAAAAAAAAAAAAKSBfIQFAEBhZ29yaWMvem9uZS12MC4yLjIvZHVyYWJsZS5qc1BLAQIeAwoAAAAAAAAAAAC9HnJ6OREAADkRAAAiAAAAAAAAAAAAAACkgW+GBQBAYWdvcmljL3pvbmUtdjAuMi4yL3NyYy9kdXJhYmxlLmpzUEsBAh4DCgAAAAAAAAAAACoyYzj2BAAA9gQAACsAAAAAAAAAAAAAAKSB6JcFAEBlbmRvL2NvbW1vbi12MS4yLjkvYXBwbHktbGFiZWxpbmctZXJyb3IuanNQSwECHgMKAAAAAAAAAAAACX+gTIsEAACLBAAAKgAAAAAAAAAAAAAApIEnnQUAQGVuZG8vY29tbW9uLXYxLjIuOS9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzUEsBAh4DCgAAAAAAAAAAAL0YEu1mAgAAZgIAACQAAAAAAAAAAAAAAKSB+qEFAEBlbmRvL2NvbW1vbi12MS4yLjkvaWRlbnQtY2hlY2tlci5qc1BLAQIeAwoAAAAAAAAAAAAk9mwRpwIAAKcCAAAmAAAAAAAAAAAAAACkgaKkBQBAZW5kby9jb21tb24tdjEuMi45L2xpc3QtZGlmZmVyZW5jZS5qc1BLAQIeAwoAAAAAAAAAAADJ0zLIjAMAAIwDAAAqAAAAAAAAAAAAAACkgY2nBQBAZW5kby9jb21tb24tdjEuMi45L21ha2UtYXJyYXktaXRlcmF0b3IuanNQSwECHgMKAAAAAAAAAAAALXItnGgCAABoAgAAJAAAAAAAAAAAAAAApIFhqwUAQGVuZG8vY29tbW9uLXYxLjIuOS9tYWtlLWl0ZXJhdG9yLmpzUEsBAh4DCgAAAAAAAAAAAArPU6wxAwAAMQMAACEAAAAAAAAAAAAAAKSBC64FAEBlbmRvL2NvbW1vbi12MS4yLjkvb2JqZWN0LW1hcC5qc1BLAQIeAwoAAAAAAAAAAACGSuucEAQAABAEAAAmAAAAAAAAAAAAAACkgXuxBQBAZW5kby9jb21tb24tdjEuMi45L29iamVjdC1tZXRhLW1hcC5qc1BLAQIeAwoAAAAAAAAAAAC7uRglEAQAABAEAAAkAAAAAAAAAAAAAACkgc+1BQBAZW5kby9jb21tb24tdjEuMi45L3Rocm93LWxhYmVsZWQuanNQSwECHgMKAAAAAAAAAAAA6eutgcMBAADDAQAAIQAAAAAAAAAAAAAApIEhugUAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAABWcaJAbDgAAGw4AACsAAAAAAAAAAAAAAKSBI7wFAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOC9zcmMvZW52LW9wdGlvbnMuanNQSwECHgMKAAAAAAAAAAAAWrW6gA4IAAAOCAAAHAAAAAAAAAAAAAAApIGHygUAQGVuZG8vZXJyb3JzLXYxLjIuOS9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADMGR2ETBEAAEwRAAAjAAAAAAAAAAAAAACkgc/SBQBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjMuMC9zcmMvRS5qc1BLAQIeAwoAAAAAAAAAAAAFREsmeQEAAHkBAAApAAAAAAAAAAAAAACkgVzkBQBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjMuMC9zcmMvZXhwb3J0cy5qc1BLAQIeAwoAAAAAAAAAAAC21bu22QwAANkMAAAnAAAAAAAAAAAAAACkgRzmBQBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjMuMC9zcmMvbG9jYWwuanNQSwECHgMKAAAAAAAAAAAAbAyYzhgNAAAYDQAANQAAAAAAAAAAAAAApIE68wUAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanNQSwECHgMKAAAAAAAAAAAAvTu/JWIDAABiAwAAKQAAAAAAAAAAAAAApIGlAAYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAvc3JjL25vLXNoaW0uanNQSwECHgMKAAAAAAAAAAAApJpQMo4JAACOCQAALQAAAAAAAAAAAAAApIFOBAYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAvc3JjL3RyYWNrLXR1cm5zLmpzUEsBAh4DCgAAAAAAAAAAAH+mlRyFAgAAhQIAACMAAAAAAAAAAAAAAKSBJw4GAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wL3V0aWxzLmpzUEsBAh4DCgAAAAAAAAAAABi5hL6BAgAAgQIAABkAAAAAAAAAAAAAAKSB7RAGAEBlbmRvL2V4by12MS41LjgvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAdkoX8AYVAAAGFQAAIgAAAAAAAAAAAAAApIGlEwYAQGVuZG8vZXhvLXYxLjUuOC9zcmMvZXhvLW1ha2Vycy5qc1BLAQIeAwoAAAAAAAAAAAAjBf3IFTAAABUwAAAhAAAAAAAAAAAAAACkgesoBgBAZW5kby9leG8tdjEuNS44L3NyYy9leG8tdG9vbHMuanNQSwECHgMKAAAAAAAAAAAA15ZQ/mUCAABlAgAAJQAAAAAAAAAAAAAApIE/WQYAQGVuZG8vZXhvLXYxLjUuOC9zcmMvZ2V0LWludGVyZmFjZS5qc1BLAQIeAwoAAAAAAAAAAAAFREsmeQEAAHkBAAAdAAAAAAAAAAAAAACkgedbBgBAZW5kby9leG8tdjEuNS44L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAAFREsmeQEAAHkBAAAgAAAAAAAAAAAAAACkgZtdBgBAZW5kby9mYXItdjEuMS4xMC9zcmMvZXhwb3J0cy5qc1BLAQIeAwoAAAAAAAAAAABSckKpuQIAALkCAAAeAAAAAAAAAAAAAACkgVJfBgBAZW5kby9mYXItdjEuMS4xMC9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAWX9kFqMHAACjBwAAHQAAAAAAAAAAAAAApIFHYgYAQGVuZG8vbWFyc2hhbC12MS42LjMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAql0NqYhDAACIQwAAKgAAAAAAAAAAAAAApIElagYAQGVuZG8vbWFyc2hhbC12MS42LjMvc3JjL2VuY29kZVBhc3NhYmxlLmpzUEsBAh4DCgAAAAAAAAAAANm6fDOBIgAAgSIAACsAAAAAAAAAAAAAAKSB9a0GAEBlbmRvL21hcnNoYWwtdjEuNi4zL3NyYy9lbmNvZGVUb0NhcERhdGEuanNQSwECHgMKAAAAAAAAAAAA+4mezV0iAABdIgAALQAAAAAAAAAAAAAApIG/0AYAQGVuZG8vbWFyc2hhbC12MS42LjMvc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzUEsBAh4DCgAAAAAAAAAAADLFCCU/IwAAPyMAACoAAAAAAAAAAAAAAKSBZ/MGAEBlbmRvL21hcnNoYWwtdjEuNi4zL3NyYy9tYXJzaGFsLWp1c3Rpbi5qc1BLAQIeAwoAAAAAAAAAAAATlrJl7QYAAO0GAAAtAAAAAAAAAAAAAACkge4WBwBAZW5kby9tYXJzaGFsLXYxLjYuMy9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanNQSwECHgMKAAAAAAAAAAAAlYANwlknAABZJwAAIwAAAAAAAAAAAAAApIEmHgcAQGVuZG8vbWFyc2hhbC12MS42LjMvc3JjL21hcnNoYWwuanNQSwECHgMKAAAAAAAAAAAAyA8wyssnAADLJwAAJQAAAAAAAAAAAAAApIHARQcAQGVuZG8vbWFyc2hhbC12MS42LjMvc3JjL3JhbmtPcmRlci5qc1BLAQIeAwoAAAAAAAAAAAAFREsmeQEAAHkBAAAhAAAAAAAAAAAAAACkgc5tBwBAZW5kby9tYXJzaGFsLXYxLjYuMy9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAAZVGWYogFAACIBQAAHgAAAAAAAAAAAAAApIGGbwcAQGVuZG8vbmF0LXY1LjAuMTQvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAGCFhwhuCgAAbgoAACAAAAAAAAAAAAAAAKSBSnUHAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAJqP4mGDBgAAgwYAACgAAAAAAAAAAAAAAKSB9n8HAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9jb3B5QXJyYXkuanNQSwECHgMKAAAAAAAAAAAAtjvGvFgIAABYCAAAKQAAAAAAAAAAAAAApIG/hgcAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL2NvcHlSZWNvcmQuanNQSwECHgMKAAAAAAAAAAAAR4T6L4UKAACFCgAALgAAAAAAAAAAAAAApIFejwcAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL2RlZXBseUZ1bGZpbGxlZC5qc1BLAQIeAwoAAAAAAAAAAAC+YONjYxIAAGMSAAAkAAAAAAAAAAAAAACkgS+aBwBAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvZXJyb3IuanNQSwECHgMKAAAAAAAAAAAAJuaYAb4FAAC+BQAAKwAAAAAAAAAAAAAApIHUrAcAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL2l0ZXItaGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAAAJVM1gcBEAAHARAAAnAAAAAAAAAAAAAACkgduyBwBAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvbWFrZS1mYXIuanNQSwECHgMKAAAAAAAAAAAASM2xMK8EAACvBAAAKQAAAAAAAAAAAAAApIGQxAcAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL21ha2VUYWdnZWQuanNQSwECHgMKAAAAAAAAAAAAR6bO6kMVAABDFQAAMAAAAAAAAAAAAAAApIGGyQcAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAENt1cnfJAAA3yQAACoAAAAAAAAAAAAAAKSBF98HAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9wYXNzU3R5bGVPZi5qc1BLAQIeAwoAAAAAAAAAAAD2aIte1RcAANUXAAAoAAAAAAAAAAAAAACkgT4ECABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvcmVtb3RhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAAfx1kK1DAAAtQwAACsAAAAAAAAAAAAAAKSBWRwIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9zYWZlLXByb21pc2UuanNQSwECHgMKAAAAAAAAAAAALmnjqOEHAADhBwAAJQAAAAAAAAAAAAAApIFXKQgAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3N0cmluZy5qc1BLAQIeAwoAAAAAAAAAAAAFz1lyKwoAACsKAAAlAAAAAAAAAAAAAACkgXsxCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvc3ltYm9sLmpzUEsBAh4DCgAAAAAAAAAAAOL4+0tDBwAAQwcAACUAAAAAAAAAAAAAAKSB6TsIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy90YWdnZWQuanNQSwECHgMKAAAAAAAAAAAAikvENicJAAAnCQAAKQAAAAAAAAAAAAAApIFvQwgAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAABURLJnkBAAB5AQAAJAAAAAAAAAAAAAAApIHdTAgAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAPC1O0bmDgAA5g4AAB4AAAAAAAAAAAAAAKSBmE4IAEBlbmRvL3BhdHRlcm5zLXYxLjQuOC9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADMxv08aDIAAGgyAAAqAAAAAAAAAAAAAACkgbpdCABAZW5kby9wYXR0ZXJucy12MS40Ljgvc3JjL2tleXMvY2hlY2tLZXkuanNQSwECHgMKAAAAAAAAAAAAZL5Ck0IVAABCFQAALQAAAAAAAAAAAAAApIFqkAgAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzUEsBAh4DCgAAAAAAAAAAAMBYuEX2DQAA9g0AACkAAAAAAAAAAAAAAKSB96UIAEBlbmRvL3BhdHRlcm5zLXYxLjQuOC9zcmMva2V5cy9jb3B5QmFnLmpzUEsBAh4DCgAAAAAAAAAAAHeeE4P9CwAA/QsAACkAAAAAAAAAAAAAAKSBNLQIAEBlbmRvL3BhdHRlcm5zLXYxLjQuOC9zcmMva2V5cy9jb3B5U2V0LmpzUEsBAh4DCgAAAAAAAAAAAJNpZIUPEwAADxMAADkAAAAAAAAAAAAAAKSBeMAIAEBlbmRvL3BhdHRlcm5zLXYxLjQuOC9zcmMva2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qc1BLAQIeAwoAAAAAAAAAAACXGHwygRYAAIEWAAA1AAAAAAAAAAAAAACkgd7TCABAZW5kby9wYXR0ZXJucy12MS40Ljgvc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qc1BLAQIeAwoAAAAAAAAAAAA2IGmluhwAALocAAA1AAAAAAAAAAAAAACkgbLqCABAZW5kby9wYXR0ZXJucy12MS40Ljgvc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qc1BLAQIeAwoAAAAAAAAAAADkIGUvHBkAABwZAAA2AAAAAAAAAAAAAACkgb8HCQBAZW5kby9wYXR0ZXJucy12MS40Ljgvc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanNQSwECHgMKAAAAAAAAAAAAqN63vvetAAD3rQAANQAAAAAAAAAAAAAApIEvIQkAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanNQSwECHgMKAAAAAAAAAAAABURLJnkBAAB5AQAAIgAAAAAAAAAAAAAApIF5zwkAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAAj8vR8cQYAAHEGAAAhAAAAAAAAAAAAAACkgTLRCQBAZW5kby9wcm9taXNlLWtpdC12MS4xLjkvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAhjnUX4QCAACEAgAAKgAAAAAAAAAAAAAApIHi1wkAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS45L3NyYy9pcy1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAPjKfDrLBwAAywcAACkAAAAAAAAAAAAAAKSBrtoJAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOS9zcmMvbWVtby1yYWNlLmpzUEsBAh4DCgAAAAAAAAAAADwUN+6rBQAAqwUAADQAAAAAAAAAAAAAAKSBwOIJAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOS9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNQSwECHgMKAAAAAAAAAAAABURLJnkBAAB5AQAAJQAAAAAAAAAAAAAApIG96AkAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS45L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAABt8WvvxEAAL8RAAAcAAAAAAAAAAAAAACkgXnqCQBAZW5kby9zdHJlYW0tdjEuMi45L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAPQMzt/yAQAA8gEAABwAAAAAAAAAAAAAAKSBcvwJAGplc3NpZS5qcy12MC4zLjQvc3JjL21haW4uanNQSwECHgMKAAAAAAAAAAAAVse9b6IBAACiAQAAHwAAAAAAAAAAAAAApIGe/gkAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvRS5qc1BLAQIeAwoAAAAAAAAAAAB8vcxPngIAAJ4CAAAsAAAAAAAAAAAAAACkgX0ACgBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9hc3luYy1nZW5lcmF0ZS5qc1BLAQIeAwoAAAAAAAAAAACbSC63FQIAABUCAAAiAAAAAAAAAAAAAACkgWUDCgBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9tYWluLmpzUEsBAh4DCgAAAAAAAAAAANvmvz/7BwAA+wcAACQAAAAAAAAAAAAAAKSBugUKAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL21ha2Vycy5qc1BLAQIeAwoAAAAAAAAAAACv0+vqeAMAAHgDAAApAAAAAAAAAAAAAACkgfcNCgBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9hc3luYy10b29scy5qc1BLAQIeAwoAAAAAAAAAAAAGX4r/twEAALcBAAAiAAAAAAAAAAAAAACkgbYRCgBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9tYWluLmpzUEsFBgAAAAChAKEAUDYAAK0TCgAAAA==","endoZipBase64Sha512":"89e18382fb808cd3d49d4f991c1b7504594de068359df9d5632c26c59878eacf2811c9762cab82be045c714a3526c3c4b163cb8e057fc7c4a0d5f9d3bdf47cfd"};
1
+ export default {"moduleFormat":"endoZipBase64","endoZipBase64":"UEsDBAoAAAAAAAAAAAAqQucUZfoAAGX6AAAUAAAAY29tcGFydG1lbnQtbWFwLmpzb257CiAgInRhZ3MiOiBbXSwKICAiZW50cnkiOiB7CiAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zIiwKICAgICJtb2R1bGUiOiAiLi9zcmMvd2FsbGV0LmpzIgogIH0sCiAgImNvbXBhcnRtZW50cyI6IHsKICAgICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvYmFzZS16b25lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvYmFzZS16b25lLXYwLjEuMCIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9leG8iOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXhvLXYxLjUuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjEwIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGFzcy1zdHlsZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2hlYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaGVhcC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdjNzFiMjc1NzI1YWVjNjg4MzI1ZDZkMzBmMzkzYzg1NDkxMjllNWQxM2FjNTYyMGU0ZTI2MDdmNmQ4YTFjZjExNzNlYTkwNzA5ODc3NzY0MGQyYTUxNjYwZDJmOWRjNDlhNmUyZjQ3N2Q5MjU2M2E3MmQzOTlhMmQ1NWQxNTc3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4cG9ydHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4cG9ydHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYmU2Zjg3MDYwNWM1ZTVlNDJmMzllZDI4MjIzNzhhYjllYWY0ZmE2YmRhNzQwNzBiYWM1OGZmZDEwZTE0YTA3MmNmODA5NmZlOGM2OTg2ODAwYTk5NWUyYzYwNGI4OGNhMjcyMWY5OTFiNTUwNzFhZTZmM2UzZDBlYTNiYWFmOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9oZWFwLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9oZWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNmFjMGZiN2NkMmI2NmJiOTgxMzNkOTQ4YjFkYjFhZmFmZmYzZjdmOWZhMDM2ZTYwMWI3MGYyYTEzZjMyMGYxMWQ0NWQzMTFmZGJhMzlmYmY1NDk1NjY0YmI2MzEzODk5ODYyZTA3MzE5ODFkNzk1YTY0NWJlZWYzZThlNTRiYTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNmJjZTg1ZDkyNzk4MGZmMGJjZGE2ZGZjYjIyNjBjNmQ3ZTdiNGZiYWU0NDlhZGVjY2U0NGUwODQ2Nzc5YmI0NWUyYzQzYmQ2NzgyMzA2YTY5NWY2OTY4OWZiZTAwYmIyNTVmYTViOTlhMWE3N2EwNGI4YzU4NjdjZjc0MDYyNDYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXMtcGFzc2FibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzLXBhc3NhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODlmNWY1NTMzYzBlYTlhYzgyZmQxMDA3ZDc2OGU4ZmEzMjA5ZGM4OWVlZGJjY2I2ZDRhZmIzNWFlMGY3MWZlODA4YmFlYjAyZGY1NmNhZDZhZGIzNjQyODIzOTE5ZWNkMjllMmEwYzg0MzkwODBhMmM5NDkzYjIwNDZiN2U1NDYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjM4MGMwODFjYjMxYmYwN2Y0NDIwNmJmZWY1MTI3ZTAwNGNlMWViODVkMzNhMzgyZWJlNDAzYmMyMjRhYTBmOTc2M2UyZjM2MWJmM2E0MmU0YTNiNTU1MmI5NDhkM2QwNTM3N2Q1ZTEyZDAyZWNlY2FmODM5MGE5M2Y3MDhmN2RhIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21ha2Utb25jZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZS1vbmNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmEzNWNjNmJhMWVhZDU0MTFhMGQ4ZWQ2YzhlMWY2ZTYzNjBhMWQzZmU3NzE1MDgyYTg2NDNhOTQ2YzEwM2VjYjVkYzNhZjczNDU4OTljNDNhOWQ2YjNkMjkxM2Y2YzUxYjIwM2JjZDU1YzY4MWVhYjk1YWMwMDM5ODUzZGY2ZTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvd2F0Y2gtcHJvbWlzZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvd2F0Y2gtcHJvbWlzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImU1ZDU2N2Q2YWY4ODdhNjU4MTY3ZGEyNzEzMzRkYzVmMzRkMTBmYjdjZWNkNzI5YzFiNDBhZmM5NTNmYzNmMmMyZjJiOGZiMzA4MTBiNTZkNTFiNzE0NjlmN2FhNmVkNDlmMTc1MGIxMWFlZTRhMjgyYmZjMzQ2OWQ1M2QwOWUxIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL2NhY2hlLXYwLjMuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9jYWNoZSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL2NhY2hlLXYwLjMuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL2NhY2hlLXYwLjMuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jYWNoZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY2FjaGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1YWM0MTRkZTk0YWFjZmFkMzJjNmU0M2YzZTZhZTQ5NzJjNmVlNDQyZGVkMjIwYTVkYTExYWM3Y2ZiOTc4ZmIwZmFkMzMzMmE5OTY4OTMwNjFmNDg1YmYwYjE2OTk3MDRmYjVkNWY3ZTcwODY4NjA3YjYwODYwMjk5ZDZiNGI1MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYWluLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWluLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjljNDRkNGRiMmFkN2VjZDA3MTdmMzk5ODdmZWE1NzlhYjY0ZDM4YmJjZmU3M2FjYjc5ZjE0Yjg1OGJiODEyNGU5MGZkZWUwYmMzNWY3OGE2YjE3ODc3Njc3NGZkYjZmMWJlOWIwYTJjZjZlYTkxOTU3NGUwZTc5M2VkMzU1NGYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RhdGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0YXRlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDE3YmY0ZDU0NzRmZWI0ZjNmZGZhMzdmODlkN2UxYWFmZDNlNGFkNTVhMDliZDQzNDQzNmFmZjQxMDA4YmQyNmEwMjA4NjcyMGIwNDgxZTAxODAxNTBkY2EwNWNkMGVlMDRiYzMyNDFmMGE1NzYzNDQ2MDVjYzY3NzA3NzI5NzgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMmEyMjExMjBhMDc5ZDc3ZGMwZTcyYWNhMjQ2MDJlZjRiMTg5ODJiM2I4NjBjNDVkMmQ5Yzk0MzljMjFlMzhkMDI3MDk3ZTA0Y2Q1NTVhOWM0MzdlNzI5NzQwNTkyNTA3OTNiOGNmY2JlZWQxNDI0ODAzNGIwNmIyM2FkMGJlYzYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWJlNmY4NzA2MDVjNWU1ZTQyZjM5ZWQyODIyMzc4YWI5ZWFmNGZhNmJkYTc0MDcwYmFjNThmZmQxMGUxNGEwNzJjZjgwOTZmZThjNjk4NjgwMGE5OTVlMmM2MDRiODhjYTI3MjFmOTkxYjU1MDcxYWU2ZjNlM2QwZWEzYmFhZjgiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvZXJ0cC12MC4xNi4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL2VydHAiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9lcnRwLXYwLjE2LjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy96b25lL2R1cmFibGUuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZHVyYWJsZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbmF0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL25hdC12NS4wLjE0IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Ftb3VudE1hdGguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2Ftb3VudE1hdGguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiOTg0MGYwY2U4NzI0MzRhMDI1OTA4OTViYjFhYTRhNDMzMjA3YmYzNmI3N2E0Y2QxMTI4YTRhOTUxNTRiMzQ5ZjhiODk1NTE3ZDdiODZjYzRhMDY0OWVhMDUyNDU0NzU3MGUzZDc0MjMzZTg4ODhjMTRiOTlhMmY5MzM1MzIwZiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9hbW91bnRTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYW1vdW50U3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2NjQwZDE0MWIzZTkwZWM3MTM4MjA1OWE2ZmZkZGFiZTQ2NmVhOWQ4ZTNlYTVjZmVhM2M1NWViYzU4MzA2ZWUyMWIxYTQzM2I3OGQzZDU5YjFiYzg3NWRiZGE0NDcwMzcyZDE5ODlmZGRiMTI3Zjc0MzdlMGFhNzQ5MDlkYWQ4MiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kaXNwbGF5SW5mby5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZGlzcGxheUluZm8uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI1Nzk5ZGE2YmM5ZmFiMzAxMjY5YjNkZjYzZGI5MDM5ODQxMzkxMmQ1YzUyMzc1ZDBjYTU1MGJhZWVhMjRiMzk2NDZjNGVjYTFjMTkwYTI2OTk1NTJmNzQ1NTRjZjk0YjkxNDI5NDlhY2QxYmM4M2QyMGNhNDk5ZjY2MGI5ZTRlZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkM2JiODkxNmM0MjQxNTZmYWUzMmI5OGZmZTY0YzhkODUzMDVlZTdmOGU5NjI1ZTJhMjFjOGJmYjViYzM3OGFjZTQ2ZGQ5ZjFjODEzN2YyMTRiYTA1NzQ1MjUzOGI5Y2ViMDk1NWM2YjA3YjEzOTBmYTE4Zjg0MjYyNGUwMDc1OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pc3N1ZXJLaXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzc3VlcktpdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjkwOTlhZGZjNDc2MWI3MzJjMzRiZmEyZWIzNzRiZjM1MTVkNmFmYmJhMjViMDMxMjY2MTViNzdmOTFjMDY1Yjk5ODFkMjI5OWYzNWY2OTQ5OTBlMzQzZTRmZDFkYzE0MTg2YTZkOGIxNjUxNTgxMzZlODk2M2I0MTBjZGY0Y2Y3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiOTM1MmYzYjE4ZWM4NjJmMjBmM2Y0ZWQ5NzNlMmExZjFmMDUxNTdiODBmZmYwMTdmNzdlNGQxMzJlNWQyNTM4ZmVlZjY0MDJiNzJjZDc5Y2Q0MGRhMWEwY2NkYWMzNTFhYzBkMTZlMTZmM2VjODg4ODYwYmEyM2M2ZjM4YTFlODUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXRoSGVscGVycy9jb3B5U2V0TWF0aEhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxNmIzN2YwYTVmMjY2OGI3NWI4ODkxYjljMGE4ODIxNTliZTc1OWI0ZDMyNWJjZThlOWMzYzExNTFiOWY1Yjk4MzgxNjVhMjU0YmEwMDAxMjBmNjY4M2E1ZThmYjE2ZGQzMTFjM2IyNzhhNjYyNmI3MTE1ODEwMTVhOTc4MDA0OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2YTYxYzcxNTRjOWJkMjVhMmQzYjEyMTczN2ZlY2ZhZGRiNDM1M2EyYzRhMmEzZjNhZGYyMzU5YzU5ZmVkNWE3ZWM2ODlkYmQ1YjNkZTdlM2FiMWQxYWRjNWU1NDkyYTI4YjI5M2U3MTlkMzIyMzhmMjM0NWI0YTU5YmRlMzNhYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzOGU5M2MxOGNhZTRkZmRkOGE0NWJjYjYzMzViZmJhZjI5Nzk2YzZkMjNkYmRmMGQ2YWYzY2FmZGU1NTQwOWExYTA1NTc1ZTIyNTZhMGM2MjI1M2RiNGNmOTk2MDJiMTcyYzVmYzE4YTFlZDMyNTRkNWZmODhmMzI2MTJlNGI1ZCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXltZW50LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXltZW50LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODQ3YTE3OWRjZjJiM2Y3YWQ3MWY1NWE0ZWZjNmIxMTI2NzgwNzcyZjRiODE0OGUxZTBkYmUxNzMwNDdkMDhkOWQ3ZjQxOGU4ODJmMDNiM2M2M2FiNDViZjYzNWYxMTY1ZDIyNzMzZGI5NjdlODQ0ODY3NTMyMTY3Mjg0NjIwZjYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF5bWVudExlZGdlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcGF5bWVudExlZGdlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFhYjVkNmMyMWQxNWIyODE5NWRmZmQ5Zjk2NjBjYTlmMTQ5ODFmNDgwNmNiMGUwYzhhN2Y5ODhlYjZkMThjYzBlMTM4YjIxYjYxZTE1YTZlYmRkZDdjYWMyODkxZjFlZWY4NjI1MzJkZTE4ZWYyZjYwNGJmYzJhMWE1Njg0N2E1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3B1cnNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wdXJzZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjg0ZTQ2OGY2YjA0ODUwNTU0MjI3MDE1NDFmNTMwMmNmNDYxZDFmNjk3ZjY5MzA1YzY2Mzc0MGE4Y2I0NTg4Y2YwMmIxMGIzZTg2MTM4NjNhZTA0OWY4MGJmMGYxYjZiYmIwZmI0MDViNDEzOTYzZGM4OGIyOTg1ZTNiMjdkNDAwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RyYW5zaWVudE5vdGlmaWVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90cmFuc2llbnROb3RpZmllci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjNjNTQ3MTVkYTQ4YjE1NThjMzdiYzQ4MThlYzBlMmM0ODhlNjFkYjc0OGJkNWExMWQxOWMxZDlkN2Q4MTA1M2NjNDRjZWU0ZTUxMDQ2NTY1MzdmZGNkY2QyMThkZmY2ZjhmYzFmYTZmY2EzMzIzNjFhZjhkZWFmY2I3NGEwY2NkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVHdWFyZHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVHdWFyZHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5ODhkOGUzZGMxN2VjODcwZTdkODQ2NGI2MGU5NDMwMGQ0N2IwNWJmMzQ4NGNmMGZkMjFlOWYzZjhkYjZmNGM0OGZiMjBhMWNlNTQxMGQyMTE1MWJjOWExYzIyMmIyYWFmZGYyYWIzYmI2YmRlM2E3NmZkNjY4NzExNDIxOGYyMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy1pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMtaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYmU2Zjg3MDYwNWM1ZTVlNDJmMzllZDI4MjIzNzhhYjllYWY0ZmE2YmRhNzQwNzBiYWM1OGZmZDEwZTE0YTA3MmNmODA5NmZlOGM2OTg2ODAwYTk5NWUyYzYwNGI4OGNhMjcyMWY5OTFiNTUwNzFhZTZmM2UzZDBlYTNiYWFmOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvaW50ZXJuYWwiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2hlYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vb2JqZWN0LW1ldGEtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vc3RyZWFtIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3N0cmVhbS12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgImplc3NpZS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJqZXNzaWUuanMtdjAuMy40IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbWFpbi5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jYWxsYmFjay5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY2FsbGJhY2suanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJhYTYzMThkNzFjODRlMjg2MTBlOWQzNWI0NzY1ODU0OGUyMGNmNGVjNDU5YTFkOGI3OWM0YzVjMGE1MDY2YTE4YWJkODczZTU3MGU4ZTM4M2VlMWY1MDViYTY0M2Y3N2U3ZGNjZThhYjgzNzNiMDkwNDgxMWU1ZGVmODdjZjQ0MSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb25maWcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvbmZpZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImUzOGQwMmJkYzBjYTA1YmFiZTZkNzJiMzczYTMwN2M3YjRkMjg2NjQ2MzdkMzA3ZmE0M2E3ZmYwMzM4OGJlMTU0ZDdkMWE2ZjE2MjM5Y2VhNjJhMDMxMWNmZDYwZTVhODQ5YmQyNDIzZDM1YTI2ZmU5OTJkODNlZDVjYTY1YmQyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2RlYnVnLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9kZWJ1Zy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgzYzAwYzk1NmUyZjMwZmRlNTE5YjlmNzUxYmU1MzA4ZTRhMzg0MTI0NGUxNTY1YzZiOWIyMzg3YWU5ZWYwN2VhMWQzODQ2NzA4MzJiZDNlY2QyZGVjMTUxMjNiZTkxZDQ2Y2VhOWVhM2NhNDFjMGJlZjk2M2E5YjUyMDU1M2QwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Vycm9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXJyb3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNzMxM2I5YmE5MDA4YmMwMjYyY2ZkMjIwZmM5NDdkOTIzYzkwYzc0MWU3MDNiMGI3OTVlMDcxYjkxZjkwYTQxZDhhMzA4NzAzNTQ0ZjE5OTYwNjY4OWQwMDlkMzg1MjBkNzQ0MjcyZjg2ZWU3NDk1NzFkZTQ3ZDkyODJkM2E1YjQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWY1YTdjYWUwMzE4NjNjOTZhNjY3NmE4MzI0NWFhZmM5ZjUwOGFjMDc1MzNiZTI2NzcyNzIxZWNhM2E3NTkyYzlkYjIyZGQyYTE4YjIxZDMyYzVhNjE0Nzg1YjFlNTAwOTdlMDQ1ZTUyMDhhZTQ0N2M3MGYxZTAwNGYwZmI3ZWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvanMtdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2pzLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNDk4NmY5OTE2ZjFjOWFjN2FhMmE0YzI4NTM3ZGIzNGM2NDU4MmExYThiZDU4ZTdkOTljZDIwMzM4NjA2NDY1YTM4YmYyMzc2MGZiYTFmNjI3MDRlYzQ5OGEyNWJjODg0ZmY1M2I5NDJkZDNmYjhiY2E4ZThmMjYzYzI5ODZlYWMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGliLWNoYWluU3RvcmFnZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjc4N2MyMzJmMTJjNTliNzRjZGI1YjM3NzFmYTk5ODUzYzE4MDk4YTU5YzZjMTYwMWE2Mzc5MGEwM2Q2MThiZThiOWNjOTJmZDJjYTk2Y2JjOTcxY2Y3YTM4OWQ3MjBhYmVjZTQzNDkwOGU0Yzk1YmMzM2VjYmJkM2Y1ZWIyMDQyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4NTJlNzc4OGZhOTgxYjJhZDUwN2M5NGI1MjM5YzExZTg1OTc5YzI0ZGMxMzRiZmE2ZDhlNTExZjMwZmFjNzhjMjllMTAwZjRlYzc4ZWQxNjdjYzg3OTYxOTNiYWRlNzllMGY3YTdlNGE3YTljMzYzYWEyNmYzYmY5MThhMzY0MCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZXRob2QtdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ldGhvZC10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImQyYTVmNzA3OTE3OWQ3ZDJhNzE2MThjOWY3MWE5NzMxYjdlMDE0MzVjMDIxNjFmMTE3Y2I1NzA2NDAwNWI2YTNlNTkzNTA5ZTE3NjVlNjQ4MzlmMTEyOGI5Yzc5OTA5YzEyNmE0MjJhMTMzODY0Zjg2ZTEyMWZmMDBlYjc0NzAzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Nlcy11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc2VzLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiM2I1NjU4OTA4YjYxZThiMWFhMmFhMzJhNDQzZTVlOWRiNzA0OGJjNTdlY2I0NWJiOWFmZTVmNDYzZGFhN2YxMDAxZDQ0MDQ3NjBjZjkwMzJiYmI2OTI3YWVmMDg3NGMyNjEwNzdiZTZhNzZmODI4NzUyMjVlNGZjNTcwN2VhNDgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3NTJhMDk0YThlZmExY2QwNDFlZjczNThjZmIwNTZiOTA5YWE3YWYxMjEzNzNjZWJlYjIzMWJmYjBkNzQwZGZmZGJkZjU1ZjAwMGZiNzRiM2VhZDA0YzUxYTNjYzVlYWMyMzA0OWVlN2M5NTk1OGMyNmE3YjZlM2YzMTI0OWZmYyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90ZXN0aW5nLXV0aWxzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90ZXN0aW5nLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZWU4YjU3OWNkN2FiNjE5ZTk2ZWRjMTI0ZGIxMTk3YmE4MjQ3MWUxYzhjYzRlMDk1ZTg3MDUxODRhMTU2ZWUxM2M4NDdlOGUxMjU0ZDhhYzNkNzQyMzExMjE1NTA2YjZmYjYxYzc4NDBiM2UxNGNmN2RiNzJlNjc2NzJiYzgwMTciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZUNoZWNrLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlQ2hlY2suanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJiZjIzNDE5NDlmMDFjNTNmZDljNDRlMWViZGJiYzdkNjU1NWY0YWMwMWZhMTAyZDkxYjZhZjc2NTA2NDIyYTAxOTAyZDM5YzZlN2E2ZGVkMDZmMWU0NjMzZmFjMmVkNDhlMDBmNjc0NzJlODM3Y2NhYjNmYTI2MTIzMjk1YmIzYSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMmZkNjVhN2Q5ZWMyYjFmNWExNGZkNDUyNzgxZDE3MjBjOThmNGQ5OGFiMzQ4NjJhN2VjM2YxNzQzMzA1NDI1NjJhMjY4Zjg5MGQzZjNkZmEwMzIyZmYwMzg2OTgzOGNlMzY1NGU0YWRjN2ZhYjkxNWMyYTQxYWNjMzljYzNiODgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMtaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLWluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWJlNmY4NzA2MDVjNWU1ZTQyZjM5ZWQyODIyMzc4YWI5ZWFmNGZhNmJkYTc0MDcwYmFjNThmZmQxMGUxNGEwNzJjZjgwOTZmZThjNjk4NjgwMGE5OTVlMmM2MDRiODhjYTI3MjFmOTkxYjU1MDcxYWU2ZjNlM2QwZWEzYmFhZjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdXBncmFkZS1hcGkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3VwZ3JhZGUtYXBpLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjczZmRmNzA3ZWI3YjhkNWE0ZmFlZGJhMzMxM2VmMjAwYWVmMGRlM2Q4YWZmY2EwMzMyOTJiOGM2NjE3NjVhNWQ0NGZjNTk1ZWUyYjgyNWJjMDkzYzkwZjc5MGViNmU0ZTg2YTM2MGE0NDVjMGE5NmQ5ZTA2MWQ1NTMxNjlkNGYiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL25vdGlmaWVyIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbGliLWNoYWluU3RvcmFnZS5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsL3NyYy90ZXN0aW5nLXV0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvdGVzdGluZy11dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL2ludGVybmFsL3NyYy91cGdyYWRlLWFwaS5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL3VwZ3JhZGUtYXBpLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZmFyIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Zhci12MS4xLjEwIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vbWFyc2hhbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9tYXJzaGFsLXYxLjYuMyIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vcGF0dGVybnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFmNTBjNzFiNzhkZTlkYjY0ZDgyYWRjZTRhYjUwMDA2NGRlOTY3MTkxOWVjMzI4MjhjMmVmMGY0YzVhZTM3MmE2YTk0YmNiZWJiMGM0Mjk0NDNhMDdmZjA0MDUwYWYxNjkwNmQ0YTg1NjQ2MTIzMTBhMTEwMzJhMTIxMWYwOGRmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImMyNWIxZDc5NmIwNzcwYTFhM2I3MjQ2N2Q0OTU1MTE0MGRmNDFmNDVlYzI0MWM1NjkxZDkwNWIzZTMxNDFhODc5ZmU0YjAwNDhiNjlhNzVmZTk1MDBjMTA3MDVmMDA2ZWFhMzE3ZDRhZmJhYWFlZmUwYmEyOTE2OGUwMzllMDYwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL25vdGlmaWVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9ub3RpZmllci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBhZjg3MGVmZjUxODUxZTY1NjVjNjYxNmQ3ZThlYTQxNjc4ZDZmMTA4NDdiNDM0OTJlMTYwNjllYmNkNDU4YWZhY2RiNmI5YTBhOGI3ZGJkZTMwYTRiYWRlNDMyMDc3ZTQ1YWIzNjI4ZTI4Njk3ZTlkYWFiOTI5NzEyYzEwYzkzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3B1Ymxpc2gta2l0LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wdWJsaXNoLWtpdC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjU1OGFmNDdjODIyNTQyMjgyOWM2NDVjMjUxY2RhMmNlNmMzNzE5MjRiMTczM2MyMTY2ZGEyZmFkNjYwNjU2OGU0ZGRjZThlMTg5NDM3MThiMDVmMTA1ODE0Mzc0ZTlkMmQ5ZDk3NzA4OGMwNGJkYzE0ZWU2Y2ZmNjViZTA3YjQyIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3JlZC1ub3RpZmllci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVkLW5vdGlmaWVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjA0YzMyNDRhOGFiNGNhODIyYWY5YzQyODU1ZmY1OWJlYmRiZjU0NTFhZWUyY2VmZWM0MTI4NTQ2MDMxOGJkNTU1NGYzM2MxOWJmNmRiNWIzMmU2ZmNlMTNiYzg1ZDRiOGU0ZjMzYTRkMDQyMTdkNDUxODAyMThjNWUxMjNjZTkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzdWIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlc3ViLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiODgxZGMxYmQ2OTc3NmM4NjBmM2MwN2QzMDg1MTNjZjE3ZmI1NjNkOTZiOWYzN2Q4NTM0ZjhkOTA3OWYyMGYwOWVjODI1OWRkMzM0MjBhNmY2MDQzODM5Zjg4MWY4MWUwYzRjYjM5ODRjMmViYzgxNzRmMDgyMTMyMWZhZGI2ZTYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3Vic2NyaWJlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdWJzY3JpYmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5NTk3ZGIwMTBjMDJlMzZjODZiMzliZDg3NzgzZGRiOWJmYmIwY2M2MTI2NmFiOThmNmE3YzQ2MjhiM2VhYTM2NzY4OWJhN2M4ODk4MGIzNzk0MDM3Y2EyODdlNmFmOGM0MDdhZDFlMDIzMjAwNTM1MzBiNjExNDczMWYyM2NhMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdWJzY3JpYmVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zdWJzY3JpYmVyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmE0NmNjZjU3MWQxNjZhM2JkYjQ4YzExYzJkZGMwYmY3ZjliYzI3NGJjNzZhZjgwMWZjMzE1ZmM2MTU1YmM2NzY2ZTU5ZTQ2YWE3YmRhNDMzOTc1ZDdkMGI4YWFiMDY0YjM0NTM4ODZkZmEwZGZiODMxYjc0YTliM2EzYjFkYTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdG9waWMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3RvcGljLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDYwNjhkNmFlYTJjYjMxZDY4MzJhZTZjZjlmZjVlZTE4ODFkMzJjMDU5NzVjNTM4ZTFmMDEyYTVjZjI0Njk3OTRmNWRlZGE4N2RhYWU5MDUwMGMyNmQ3NzE4NzdjNTVmNGZkMjFmOWVlZWE4YzJmYzhkMmY5ZTUwY2IwM2M4MmMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMtaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLWluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWJlNmY4NzA2MDVjNWU1ZTQyZjM5ZWQyODIyMzc4YWI5ZWFmNGZhNmJkYTc0MDcwYmFjNThmZmQxMGUxNGEwNzJjZjgwOTZmZThjNjk4NjgwMGE5OTVlMmM2MDRiODhjYTI3MjFmOTkxYjU1MDcxYWU2ZjNlM2QwZWEzYmFhZjgiCiAgICAgICAgfSwKICAgICAgICAiLi90b29scy90ZXN0U3VwcG9ydHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAidG9vbHMvdGVzdFN1cHBvcnRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNWRmMzdmNGMyNWU3MDAxNTNkODVjNmMzNjgxZjJkM2U2NWQ0YjFhNDg5ODczN2UyZmJmMzI2ZjQ0NDYzMTQxODE5MmZhMTgyMzM0MzRlMDg1YjRhNWE1MjMxODcxZDZmNTQ4YjI1NDRhYTMwNTI1NTVhNjgyOGU5M2QzZGIxMjgiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMyI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy9zbWFydC13YWxsZXQiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9zbWFydC13YWxsZXQtdjAuNS4zIiwKICAgICAgImxvY2F0aW9uIjogIkBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMyIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy92YXRzL3NyYy9saWItYm9hcmQuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXRzLXYwLjE1LjEiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9saWItYm9hcmQuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwtY29udGV4dHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwtY29udGV4dHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmOTYyMjdmMGJlODgxYmM2NGIwMTQ3OTkyZWI4ZThjMDczNDE3NDFiOWJlOGFjNDBlYjZlZWFkNzE1ZmRiNmQ5N2U1ZDVmM2E3MDI0NzhjNWY3NWFhZDg1ZTkwMGVkOTMxMTYyMTdlNDdkNzNjZGNkM2M0ZjZjNDk4YWZhZTdmZSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy9zdG9yZS12MC45LjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvc3RvcmUiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V4byI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9leG8tdjEuNS44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXR0ZXJucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wYXR0ZXJucy12MS40LjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjIxNDAwYWU4ZmZjMTlmN2FmNzk1MzU4MWRhM2Y2ZWE5NzAzYTUzOTVkM2RlNDlkYjg0ZTFlYzhhMTc2MDdhNDE0NjU4YWJiMzM5OGJjZDcwMWZiNjIwZTExZTYxM2JiNjdmYzhkMTU5MjA2ZTM1YTA3MWYwMjU0MTg3ZWQzZDg5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xlZ2FjeS9sZWdhY3lNYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xlZ2FjeS9sZWdhY3lNYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkODdkZjAyNGYyNzQ3MDY4MDgyZTQ0NTQ2ZmYwMWU3Y2Q0ZTYyNzUxMDkzOTQ4ZDJkMmQ5ODQ1Y2JmMTA5MTUyMDQ3M2YzNGIwNjJiY2M3OWQ1ZDQyZDRlYTcyNGE3ODliOGY1NmZjMmQwMmYwYzQ4MWQwM2QwOThhNWQwOTgyZSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjMmE3YTU2OGQ0MWQ4NzIzZjk2YjA1YWI1ZDNkNTZiYTA4YjQ1MDM3MDY2YmZjZjk1ODg3YzkyZGU4OTU0ZDYyNDRiYWZlOTgzMDRmMGU2ODJkNTc1MmEzNjEyOGExOTllODM4N2Q5NWE5NmEwZDA0MmVhOGMwYTZhNDYxZDFiYiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjc3NTNjNTQ4MjhhZmNkZWM4MjM4NGFmMzdlNGNhMzFkYTZiODk2ZWUyYTdkYWRiMDM3Y2U0MWQzODg5Zjk3YTFiMDE5NGI1ZmY2YmIyNmMyNjgyNThjZjc2NjJiMWJmNDJkYTI5NjkyOGY4YzYzNzg4MjI1MDJlZjMyNzZjNDNiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTEzZDMwYjg4ZmZiN2E4MTg5NWNlNzM0NWEyZWRmNWExYmUwMjlhMzgyYmRlNjZiZDFjMmMxYTE4NDE4MzYyODA5ZTAzMWY0ZjU4ODU3YmI5ZjQ5ODFmZjEwNjAwZmE4OWJkMDdiNTlkMjRhYmU1ZWQ2MTgxMDJhYWM2ZmNjYzYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImY0OWRiMDMwMGZlZTM3NmRiOTQwNzUwMzUzZGM1MjczYTNlYmVlNDhjMDA0NDEyM2IwYzExYmNiMDFlOGMzNDYzOTM0NGQyNjZmYjM4ZWFkMWQ0MTlmMjJiY2FkMThlZDdhYjdjM2Y5OTA5YWEzZDQxZGZhZGY1NjNlNDJhZmNkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5Njg5MDcyNzA2MGMyZGFiMWQ2Nzc3NDY2ODRhNzhlNzdmMzVjYzUxYTkzNzQ5ZTk2NDFkZTU5NjVjZjU1ZThhNGYyZDdhYjM2ZmViMWQ3YWI3MjFkNWJkYTM4YTMwYTAzZWQxNWY2Yjc1Zjg2NDMzZDY4NTViMjY0MWE2ZjNjMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0b3Jlcy9zdG9yZS11dGlscy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjVmODU0M2ZiZGZlOGMwMTMxMGEyYmM1ZjgyYzQzN2QxNmMxZTdjODY2ZmJjNGFhZTk3NWM2OGM2ZTE1MzcxZTBkM2FlNDE2ZGFlMTZmYWYzYWM5YWIyMzg1OGMwZmY0YmVmYWM4MDRhMTVlYzJjYTUwM2U4ZGFhZTc0NzljMDlmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFiZTZmODcwNjA1YzVlNWU0MmYzOWVkMjgyMjM3OGFiOWVhZjRmYTZiZGE3NDA3MGJhYzU4ZmZkMTBlMTRhMDcyY2Y4MDk2ZmU4YzY5ODY4MDBhOTk1ZTJjNjA0Yjg4Y2EyNzIxZjk5MWI1NTA3MWFlNmYzZTNkMGVhM2JhYWY4IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy92YXQtZGF0YSIsCiAgICAgICJsYWJlbCI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL3N0b3JlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvc3RvcmUtdjAuOS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4by11dGlscy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZXhvLXV0aWxzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzNhNmMwYjM3MDk3OTBjYzU3ZDFkODM1MTFhNzg4NDRkZTIxYmUyZjk1Zjg3NzYyODk1ZGNjNDU4Y2Q5YWUxZjdhNjAzMzU2MzFhZDUyYjNlNTJhMWRjOGUwMTVmOGRmZTcyNGE3ZWU5NjlhNmMwMjMzNjgxOTJkOGFmMjYyZTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTU5NTU0YWMyOTU1NjdhY2IzYjY3MjY3ZWYxYjhlNWE4NTRlOWRhYmE2ODNmOWVmNjE0MmYwZjlmMmRmN2Y2ODczODg0ZjE0OTljZjg5OWRkMzNiOGQ0YzMzNzU3MGVkZWExYjEzZTE0YWM1MzMxN2JlZjQ1MDUyYTBiYzhlMTQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdmF0LWRhdGEtYmluZGluZ3MuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWU4ODMxOGY1ZDQ3NWZmM2E3NjM4OWNhZGU2ZDU0MDdjMjVlMWNjNzBkMGIxMjY4ZDQxMzk5NmJiMWM2M2FkZmU0YTM1Y2U0MmZjZjI5MDlkMDZiNjZiMmM3OTYyNDkzZGQ3Nzc2YTM4YTlhOTUyMWY4Zjg1YWE1NzNjNzFjODgiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvdmF0cy12MC4xNS4xIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3ZhdHMiLAogICAgICAibGFiZWwiOiAiQGFnb3JpYy92YXRzLXYwLjE1LjEiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy92YXRzLXYwLjE1LjEiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3pvZS9zcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvem9lLXYwLjI2LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NyYy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvY3JjLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTk0YzZjNGRjOTE1Mzg4OTZlMzg5NGI3MDkyYmNkODI5MWMzMWU5NTI2MjNjNjNlZTdhYzZmNTUyN2FhMWRiYmUwZDI1NDQyMjNjMjk0OTgxZDRhZjc1NzliNjAxNDEyNjM5ZGMzNTdlMDkzOWRmNzFmOWMwYWI0ZmZmNTJlOGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGliLWJvYXJkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9saWItYm9hcmQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3ZjAzYzVkYTZmYTI5ZmMxMzY5MWNhOTBiZTc1OTZiZjllOWQ3ZGU3ZTMwNGQ3MDRmMmZkODZhMmZmMTIzZDA3MWY2YzIxMGNhMjk0NTk0NTc5NmExZTY3ZDc0MDhjNjk4NDc5MDUyMzhkY2YzMzY1YmQ1YjE4NTcxNjJmYTFjNyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zIjogewogICAgICAibmFtZSI6ICJAYWdvcmljL3dhbGxldC1iYWNrZW5kIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMyIsCiAgICAgICJsb2NhdGlvbiI6ICJAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMiLAogICAgICAibW9kdWxlcyI6IHsKICAgICAgICAiQGFnb3JpYy9jYWNoZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2NhY2hlLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL21haW4uanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9lcnRwIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvZXJ0cC12MC4xNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2ludGVybmFsLXYwLjMuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2pzLXV0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvanMtdXRpbHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9pbnRlcm5hbC9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvc3RvcmFnZS10ZXN0LXV0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9ub3RpZmllci12MC42LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3NtYXJ0LXdhbGxldC9zcmMvbWFyc2hhbC1jb250ZXh0cy5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3NtYXJ0LXdhbGxldC12MC41LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvc3RvcmUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy9zdG9yZS12MC45LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9uby1zaGltLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL21hcnNoYWwiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vbWFyc2hhbC12MS42LjMiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Byb21pc2Uta2l0IjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvYWN0aW9ucy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYWN0aW9ucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ0YmZiMTMyMjJlMzE0NWY5NWIzNDM2ZGRjMmVkZTE4NTI0YWEyYThhNTI5YTU4YmU5Mjk5OGU5NmNhYzU2ZjhhNTk2ZTI2YzEzZTNhNzY5ZGRhYWZmNWE0ZmQ5ODJmYjYzNGNmNGYwNTRjMjM2YjVhMjkxNmNjYjZmZDU4MWJkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2JpZ2ludFN0cmluZ2lmeS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvYmlnaW50U3RyaW5naWZ5LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzQ2ZWU2N2MxODFjNDBlYWI0YzBhNTFhMTRkYzMzZDM1YWI1MzE3YTBjMjhlM2FlNWM4MDU5ZTM2MDJhMzgzMmQ2M2JjODdkYjliNzVlOGJjOTdhZDUxODAxYTRkZGJiZjA1YmI1Y2I0ZWY4ZWQ0MmQzMWNiZTQzOGM5NzBiZWUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZGF0ZS1ub3cuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2RhdGUtbm93LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZDViYmM5ODY0N2YxNjY3ODUyYjBiNGU3MDcwMTRiNTcyMDIyYjhjMTRlYjc3Y2EyZDE4MmM2MjEwZTlhOGRlMDZkNmFiYWU2YWFiMmFjM2FjMjA5ZmU2YzE2NTY1ZTExMjY3MGRlYWM5NWUwOThjMTZhNDMxYTFjNDlmMDQwODkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZmluZE9yTWFrZUludml0YXRpb24uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ZpbmRPck1ha2VJbnZpdGF0aW9uLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjJkMDAwMjVhZjI5ZGYzODM1Zjc5OGEzMTk2YWYwYTkyYzAzZThiMDQ1MzNhYTg0ODcyNzlmNGRjNGUwMTgyMjgyZjY2NzIwMzVjNmU2MzAxNWFiMWJmZjUzNzRmMWRiNjQxNTcwNzAxYmI2MTkxODQ0OWJkZDIzMWNlZmUzZWYiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW50ZXJuYWwtdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2ludGVybmFsLXR5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYTE0NmUwODNhOTkwMjZjYThlZWQyNjJiYmRhMGZkNTI2YTdkYzRlMGFmZDAxZWQwODgzZjc1YTFhZTg4YTk4NDY5ZDlkOGYzNGY5MzAxODhjOTNmMmQ4YWQ1ZGNlMmQ1NjE5YzUzYjM0N2FlNDIxZDk2MTY0MDkwNjY5NmIyNDIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaXNzdWVyVGFibGUuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2lzc3VlclRhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNjA4NTJmZjc2MDhlOGZjYmUwMDgwN2E4ZWQxODFhZGNlNzk0MjVlM2QyZTkwMDRlMDIwODAxY2IwOTIzNGY4ZGQxMjdiMzE2ZWYzOTVjOTBlN2JlNTI1N2M3YjgyMjYxZmJlMjc2M2QzMmU5ZmM2MzcyNjVjY2UzNjQ1YjFhYWEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbGliLWRlaHlkcmF0ZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbGliLWRlaHlkcmF0ZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhiZmVjYTVlMzllNWNlMGMwNjVlMDUyOTE3Mzk2MDFkN2NkZjg2NzFmODEyYjU5NDllYzU3MDg2OTM1MjQ3ZjUzZDlhZTJjZGNlYzdiZWM4YTY5NDQ3ODYxMWFlYzM5ZDFiNzJjOGM4ZTlmZmQwMWUxMDNlMjljNWE2ZjhmOTM2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2xpYi13YWxsZXQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2xpYi13YWxsZXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0NjcwNmQ5ZjJkNDdkY2UzMTQ4ODRhYjkzNjAyYmFmNTc4YjJmMzViNzI0NmZmYWQzMDA3ODVlMWM1OGJmM2YyYzEzZjcwZTg3MjQwOTg2NjNmMzBiZmYyYTlhZWQ1YWIzZTY1MGFjODljNjdhZmM0MzA1MGI3OTZhZTZmZDVmMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wdWJzdWIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3B1YnN1Yi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjQ4NTBhZmU3NjM4YTQwNjUzYjZiMWFlNzVmYjZkMjhjNzE2YzUwNjgzNDllZjMyNTc4ODk5NGRiODRhOTZhMDlhZDAxNTQ3ZGM2ZmIyNjRjYzFhM2Q5OTFkZTM3NWY3NTNmZjM0NDc3OTg3OTQ4NDZiZWM3YTI0YTg1NjA3MTVkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3dhbGxldC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvd2FsbGV0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMGU3YTE2ZTJlNzNiODUzY2JmYTc5YzEyMzkwODA3ZjQ5MmFjMDllMjY1NDNlNTUwNzE5ODkzMGRjZmIzOWMwMjJkYWIwZWVlYjk4Njc1YzQ2MDlhMjBjZjAzODlkYjFmYmY0YjBiOGYzOGRjNTZiNDJkM2MzZTg1MTQzM2JiODAiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBhZ29yaWMvem9lLXYwLjI2LjIiOiB7CiAgICAgICJuYW1lIjogIkBhZ29yaWMvem9lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvem9lLXYwLjI2LjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy96b2UtdjAuMjYuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2ludGVybmFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9ub3RpZmllciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL25vdGlmaWVyLXYwLjYuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvbm90aWZpZXIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvbm90aWZpZXItdjAuNi4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi90b29scy90ZXN0U3VwcG9ydHMuanMiCiAgICAgICAgfSwKICAgICAgICAiQGFnb3JpYy9zdG9yZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL3N0b3JlLXYwLjkuMiIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBhZ29yaWMvdmF0LWRhdGEiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGFnb3JpYy92YXQtZGF0YS12MC41LjIiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9lcnJvcnMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXJyb3JzLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXZlbnR1YWwtc2VuZCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9ldmVudHVhbC1zZW5kLXYxLjMuMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL25vLXNoaW0uanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3OTA5YzNiYWRkZTdjMjlhYWJhNWFhMWQzODY2YzgwNWQ4OWNlMDliYmEyM2RmOWI2ZjFhZmViMmExZWE4MjMzYzkyMmU1YzQxMjNkNmZiYjA4NTczZmRkNTJmOGQzODY1NDM1NWYzNzEzYjIxMGE2ODc0MmUwYWY3ZGE0YjIwZSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGFnb3JpYy96b25lLXYwLjIuMiI6IHsKICAgICAgIm5hbWUiOiAiQGFnb3JpYy96b25lIiwKICAgICAgImxhYmVsIjogIkBhZ29yaWMvem9uZS12MC4yLjIiLAogICAgICAibG9jYXRpb24iOiAiQGFnb3JpYy96b25lLXYwLjIuMiIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAYWdvcmljL2Jhc2Utem9uZSI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAYWdvcmljL3ZhdC1kYXRhIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJkdXJhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmNiYzg5OTQzMjkwY2M3OTQ1ZjcyZjRmNzdhMjEyNDE3YjViZDIyNTEyOWRlMmQyMDgzMDk1NWVjMzMyYjg0NGEwOGE4ZDAxODIwZTI4YzEwNTdmYjQyZjljYjE5NDA3ZjE4MDQ0YWUzM2IxN2IzM2I1OGZhNmU2NGNkMGJjZDciCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvZHVyYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZHVyYWJsZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImIyNjkwOTVhMGFiYjk3MGNjNzhmOWI4MGE0YTU0ODFmMGU3ODhiYzdlMjViMzJmNmYwMWU2YTViZTQ1MzEyMzk1ODA4ZjIwZDJiMDQyNWU3NGIyMTljMTJkZWQzNzdlYTU1MDhkODAwYWU0YjIyZDRmNWZjYjFhMTBiOTcyNGRlIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9jb21tb24tdjEuMi45IjogewogICAgICAibmFtZSI6ICJAZW5kby9jb21tb24iLAogICAgICAibGFiZWwiOiAiQGVuZG8vY29tbW9uLXYxLjIuOSIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9jb21tb24tdjEuMi45IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiYXBwbHktbGFiZWxpbmctZXJyb3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwNWFmNTQyYmU5OTYwMDRmMTA5YmQyM2Q2ZWQ5NTg5MmZkOGVhMGY0NWRmZmI5MWMwZTdjZDUwM2JkMTJhZDRkN2Y0Y2ZiYWEyOTJiMmIzYmUxMmZkNzgzMDhmZTlhZmU1N2NiNGI2ODBjZGQzMGRjMWI3MGMyNmFmOGM1Y2ZlNSIKICAgICAgICB9LAogICAgICAgICIuL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiZnJvbS11bmlxdWUtZW50cmllcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA5ODJmNzgwZmYzYzM4ZGRjOGU0OGQ0MDE3ZGVlMTQ4ZDVhOGE0ZTY2MjA3ZjdiYzVlMTcxMGU5N2FiYjM0Y2FhNzUxZjQ4OWNjMzgwMDU5MmVhNGYwMDk5YTQ0YmQ1NzAwOTg3NzQyMzFiZDk4NzI5MTIxMDQyN2EwMTU3NGMxIgogICAgICAgIH0sCiAgICAgICAgIi4vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpZGVudC1jaGVja2VyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZjM5YmMwODIzMTNmNzBkNzI5YTc0NDZlYmI2NzhlMzllNDQ5ZjdlNzY4YmJjOTg0YjAyOGY0YmIzYmY4NDc3ZWU2NzZiODBlYzFjZTY2Yzk1MzFjZDkwOWM5NDRlNDAxMDk3MDgzMjk1N2UyMjE0MjM1NGUyNzk4ZTI2MzZhOGEiCiAgICAgICAgfSwKICAgICAgICAiLi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAibGlzdC1kaWZmZXJlbmNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYjY0ODQ5OTRiNjU2ZjEzNmFkNzUyYjBhNTE1Y2M0NWU0NWRjOTEwMGRhNjdjNzRhN2Q2MjU3Y2EyMmE3ZmI1ZWVhNzQ0YjA5MTg1YWY2MTgxMTY3Nzk3OGY5ZWQ1NGU0YTYyMTM2NWM1MTAxNzAxMWI0M2YxMTkwODFjMjk1MTIiCiAgICAgICAgfSwKICAgICAgICAiLi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogIm1ha2UtYXJyYXktaXRlcmF0b3IuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzZDBmOGZmODhkMmM5ZTc5ZWY4YzI2Mjg0NGU2YmJhNzUyNzY4NTUyODdiOTU1ZTEwMzc3NjYyZTMwNmZhOTQxNDgyMmEwYWFhMjA3ZDBjOGI2NmYyMjJhNzgyYzM5MDc0YWUyOGMyNDM4OTAxYjUwZGIwZmFhZGI4Yzg4NjJiOSIKICAgICAgICB9LAogICAgICAgICIuL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAibWFrZS1pdGVyYXRvci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjRmZjIzNjYzYmM5NzI0ODA5ZmM1ZjVkMzc5MDM5NGU0ZTVjMDA2Mjg0N2JiM2Q0MDY4ZjNiZGU2MWQ0ZTlmNmFiMWI3YTkzYmU0OTA1MWUwMzY1YzlkNzRkYmFiZTg0ZjliNjQ0YjMwZmRiZDE0ZjU5OTA3MTNmNjlmNTBlMjdmIgogICAgICAgIH0sCiAgICAgICAgIi4vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJvYmplY3QtbWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYmM5MzM1ODIzYzczNWIyNTZkNzUxNWNhYTUwODlhYjgxNzk4NTRlNmMxYTc1ZWIyNGEyM2U1NDM0MzFiYzQ3ZDFiNzUwYzE3MmY3ZjZkNWQwNzhlMmMxNjMzNjQ4MDdkNmZlZjhhYTgzNzE1ODM5ZjFlYjM3NmUyNjBiNTRiZWQiCiAgICAgICAgfSwKICAgICAgICAiLi9vYmplY3QtbWV0YS1tYXAuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAib2JqZWN0LW1ldGEtbWFwLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZWU0MTVhM2JiZjM5NTc2ZTJmNTQxNzk5YTY1NmI2MTIyZTFiMjk3MDFmZDFhOTY5OTBlZDU0MTRlNzMwNTA3NmU2YzNmNGQyMjE3NTViMGFlMDdjNWU4NTc5MzRkOTgzMWZiN2M2MDcxMDY3NTM2NTBmNTU3ZjU5MzBjNGE3MDgiCiAgICAgICAgfSwKICAgICAgICAiLi90aHJvdy1sYWJlbGVkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInRocm93LWxhYmVsZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYTg1ZDFiMGZiM2FiZDIyNzk1ZGEwNmZlMzE3Yjc2NzZjNzY0N2QzZjI0Mzc0OTc3NmM2MzUwNDg0YjcxMjc2NjJkNTM0M2JkMjRkNTliZTg0M2FiZDlmMzg1NWYwYzY4MTVjNGNjNDNjOWE5MDQ1OWZiNjQxNjU1YTVjOGJkMiIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IjogewogICAgICAibmFtZSI6ICJAZW5kby9lbnYtb3B0aW9ucyIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIyMGM4NGZjZTVkMmIzMWNiNzVmZjY5MWE0NDY0N2RlYWM1OWFiY2M4MmJkZjc0ZmUwNGU4ZDNkMjljNzFlODljZGFhZjM0MGIyYzQyMGI2OWU5ZmJjYzMwMDk2YjI3ZDc5YzA1YWRkZjEyMGMzMDgyOGQxMjdlNWM5YTc4YjUzMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbnYtb3B0aW9ucy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW52LW9wdGlvbnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkZjE2ZDgxZTQ5YzliY2RmMGRjYTg5ZjA5MTRmYzk4NGE4N2M3NjkwYjM2MjI5ZjQzNGNhM2YwMDk0M2FhNDdiMTg4YjczYzkwNWRlZTVjNTVhZDEwMmNhMWU0NDViMTYxZTllZGI4MTAxNzE0MjY2OTBkYjg5MmEwZDFmYjI0MyIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZXJyb3JzLXYxLjIuOSI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXJyb3JzIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZXJyb3JzLXYxLjIuOSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNzY3ZjRlNDIyNjFjNTZhNmQ4MmFmZGQ3ZWFmMzk3MjA4ZjdiNmRmNTA0MjUwM2VhMjc3YmJiNGY1NzZmMDA4MDEwNGNhZGZjMDAxODUxOTFjYjRkNWM2MWEzOWM1YzE5ZTczMTUyMThiNTYyZDdlYThhNTc1NThjN2MwYzdmMTEiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIjogewogICAgICAibmFtZSI6ICJAZW5kby9ldmVudHVhbC1zZW5kIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvRS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvRS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjI4NzBhMjhiNDFkYzA0NzkzMzQ3MTdkYzU4NGU2NTAyMDY0NTAyYjNmYjUwYTA5OWViY2VmYjQ0NDNjZTkyY2ZjN2NlN2RmM2ZjYzMxM2NlMzI1OWVmNWE5Y2I3NDBjZTlkMjI2ZTE1NzdmZTIxMWFkYjE5NGVmZDhkOWRjNWY3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4cG9ydHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4cG9ydHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYmU2Zjg3MDYwNWM1ZTVlNDJmMzllZDI4MjIzNzhhYjllYWY0ZmE2YmRhNzQwNzBiYWM1OGZmZDEwZTE0YTA3MmNmODA5NmZlOGM2OTg2ODAwYTk5NWUyYzYwNGI4OGNhMjcyMWY5OTFiNTUwNzFhZTZmM2UzZDBlYTNiYWFmOCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9sb2NhbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbG9jYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI5MDdlZGNlYTc0OTRjNjYyY2Q5YjJjNjU1MzkxYzY0YWUzNjkxZGEyMTFkYjIzMjQwOGI1ZTQ4ZTZjNmMxNTJhZmY0ZDJhMGE0NWQ1OGU4Y2E1NDViOTZkNmY4YTM2YWRlODc3MDFiYTcxODYwZjRhZjczMTAyOGM2NjY2MTQyMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMTk2MjdmMzNjODUwYWZiOGZjMjZlZjhlNTdlMDhlMWQyNDk4ZmZiN2VkYWE2MTMzNjY4NDRiMDA0Mjk5Mzg4NDYwODlkMDJmZDBmM2Y2NjcxNzg3ZWYxMDhlNWQ1MWY5ZTQ2OTY3YTExZmE5MzFmYjNjZWIzOWIxMGM3YjE3NDkiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbm8tc2hpbS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbm8tc2hpbS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImJkMzcwNjNmNDdkNzdiM2RkNTAyYjU4MGU2ZWViYjVhNzkyNmQyZTliN2U1MzFiZmZlMmYyODg0OGQxM2ZhYWMyMDE5YjhkYjA3YTE2ZTZhMTNlNzg1MzRiYzA4YzUxOWQzNmZkMWRkMmFhMzExZWU2NTYyN2QwZjQ2NjAwYTZkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3RyYWNrLXR1cm5zLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90cmFjay10dXJucy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA2ZWQyY2UxZTY5ZmY5MmEzYTQ1ZTBlOTgyY2QwYTYwZmJkZWQ1ZmYyNjc1NTlmZmQ1NTkzOWJlYzljYWMyOGU1MGNhN2MyYTQ0ODgwY2FiZTdjY2E2YzhiMDg4Yzk2YTVlYjE1YWQxYmQ2YjBlOTQzYWIyZTBiZDI3OTQ3Y2E0IgogICAgICAgIH0sCiAgICAgICAgIi4vdXRpbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAidXRpbHMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjYzJhMTgxZjczMzY3ZDMwYjI1ZDBhZjUyMGE1OWUxOWU4ODM3MzZiMzY4N2Y5ZDc1NjU4M2YwNWJhOTkyYzFlNjgwNDU1NGExYmMyMzRlMzVjZjViZDAwYTk4OTQ4NDJmZjdhMjI4NTJkNTQxYmNlYjA0YTM2ZGQ3ODllZTc2NCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZXhvLXYxLjUuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vZXhvIiwKICAgICAgImxhYmVsIjogIkBlbmRvL2V4by12MS41LjgiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vZXhvLXYxLjUuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2xpc3QtZGlmZmVyZW5jZS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vudi1vcHRpb25zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2V2ZW50dWFsLXNlbmQvdXRpbHMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3V0aWxzLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2ZhciI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9mYXItdjEuMS4xMCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3BhdHRlcm5zIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuOCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vaW5kZXguanMiCiAgICAgICAgfSwKICAgICAgICAiLi9pbmRleC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJpbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjEzNzcxMmIzZWU0MjhmZThjMmNjMDIwZTE4NGI3YTc2Yzk2MWU1NjBmMjM1Njg2NDc5NDIxYTIzOGU3MDJjZGUyYWY1NDg2MWMxZjg1NTA5YjQwY2NmZjAzN2M0YzQ0NzVmNmNhYjU3M2ZiYjdiZGY3Mjc1MTlmMDQ1NjY1NzA1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2V4by1tYWtlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by1tYWtlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMjFmOTIyNWZiYjMxYzEzYzQ2MGNjZDM5NTlhNjZhMWY0YWJlMDQzMDZhZGQxMWI4MGZkZTE0NmFjY2Y4ODNjYWI4OWQ0NzM2NjEzNTc2NTYzMWE5NTRkOWU5N2Q1N2EwY2I2MGZiNmQxZjdiOTM5Njg5MmZiY2I1Y2VjMzk1NCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leG8tdG9vbHMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2V4by10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgyYTRmZjEyM2M2NDFlY2VhNmQ4N2Q4Mzk2ZTc1OThjZjdjZjRjMzUwMzVmOTZkYzFhMzdjZTdkMDk2MTcxOTk4MWRjNzNkMGI1ODlkMGU4ZjJkNWFlZjYxOWRlZGM1Yjk3ZTljYTBhNTFjMmJiY2I2ZDliZWIwZDdjZTcwNWZlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2dldC1pbnRlcmZhY2UuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2dldC1pbnRlcmZhY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4NjUwZWE1YTFhNzdkZWViMDcwYjM3YzIwN2UwOWU3MWNiNGUwNTI5YmM4N2FhMTFlYjdiMWU1ZTM2MDViNzc1OWU3YTY0YTAyMGI4YWYxOTNhYjQ2Y2VmN2VjMmNkZTkxYmI0ZDdjZjg2ZGEwZmU5YzNhNTkwNDhjODliOTRlOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYmU2Zjg3MDYwNWM1ZTVlNDJmMzllZDI4MjIzNzhhYjllYWY0ZmE2YmRhNzQwNzBiYWM1OGZmZDEwZTE0YTA3MmNmODA5NmZlOGM2OTg2ODAwYTk5NWUyYzYwNGI4OGNhMjcyMWY5OTFiNTUwNzFhZTZmM2UzZDBlYTNiYWFmOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vZmFyLXYxLjEuMTAiOiB7CiAgICAgICJuYW1lIjogIkBlbmRvL2ZhciIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9mYXItdjEuMS4xMCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9mYXItdjEuMS4xMCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wYXNzLXN0eWxlIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9leHBvcnRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9leHBvcnRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWJlNmY4NzA2MDVjNWU1ZTQyZjM5ZWQyODIyMzc4YWI5ZWFmNGZhNmJkYTc0MDcwYmFjNThmZmQxMGUxNGEwNzJjZjgwOTZmZThjNjk4NjgwMGE5OTVlMmM2MDRiODhjYTI3MjFmOTkxYjU1MDcxYWU2ZjNlM2QwZWEzYmFhZjgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2luZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMTM4NzMwNWJmMDkyYzg2NjdkMTdhMWFlMGVhMjg3ZWY2Y2IwOGNlMjA2ZWI3MmY4ZWU1YTU2OWI4ZTZjMmUwNzIyMGUxNTNmN2EzNmY0NGVkMTQ3YzQ3MGEyNTc3NWU2MmRhNGViZTRkOTkxYTg5OTZmOWY5NDA4ZjZjNzgxNjIiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL21hcnNoYWwtdjEuNi4zIjogewogICAgICAibmFtZSI6ICJAZW5kby9tYXJzaGFsIiwKICAgICAgImxhYmVsIjogIkBlbmRvL21hcnNoYWwtdjEuNi4zIiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL21hcnNoYWwtdjEuNi4zIiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL29iamVjdC1tYXAuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vZXJyb3JzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2Vycm9ycy12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL25hdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9uYXQtdjUuMC4xNCIsCiAgICAgICAgICAibW9kdWxlIjogIi4vc3JjL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL3Bhc3Mtc3R5bGUiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vcGFzcy1zdHlsZS12MS40LjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwMjQ5MzM3YjhkMjE0ZTc5NzUyNjZmNmJkODIyZDU0MDg2NmJlZjQ4Yjg4MjMwZjIwYTM0YTkxMGExMjAxODdiMDMyMTQzMTVlNWMwMWE5NTRmMzgzYmZmNDdmM2RkYzQ4NWMzZDI2ZGU0ZGI0MmM3ZGM0NTYzYmM3ZjAwYmIyMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGVQYXNzYWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvZW5jb2RlUGFzc2FibGUuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI2MTc2NzE2ZDdiMjFjMDc0MjNjYzk2OGE2OTA5ZGM3YzA4OWM1MTg1NzAwNzdmMTMzZjkzNzI5NjIyMGUxMzRjNjQzZmJmODZlNDcyNzhiYmUyMTU0MTg3N2Q0M2E4M2JmZWY3ODY2OTFmMGEyMjhhYzE5NDBlYjJhYjBiYmQ4OSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9lbmNvZGVUb0NhcERhdGEuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2VuY29kZVRvQ2FwRGF0YS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImUxZjhkZWRiMjcwZmMyZDdmZGU0MjY1Njk4NDc5MjA5ZWJhMGY0NjdhYWU4NWQ4MmNhNWUxMGU2NDNkZDRkZjNmZTE5MjQ0Mjc5M2I0ODgyNWVkNzBmZTdlNWVhMjZmMzJiNzc3ZGZmYjg3MjY2YzkyZWI3ODM3MjFkOTY2M2ZkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lbmNvZGVUb1NtYWxsY2Fwcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjViMGJkOWI3N2VlOTc2MzVhNmE4YmQ1ZTRlMzNiZTNlZWRhOWQxYzczYzY5MjYyOTlmMjg5YWFlNTBkMTlkM2UyMjgxMTE5YTcwYTBhMjFmYTE0MjY2YzY3MDVjNTA1ZWYxNTczOWRkZTliYmFkNzgzMTk2ZjQ3ZTk3NDM4NWIwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLWp1c3Rpbi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjBiZDY0ZDA5MTU1MDlhYTNkMTdkNmIwOGYwOGYyMzM4ODA3YTVjODg1MjFkNTAxZmJlMTU4ZGMzNmZiYTFjMDhiZWYzZjk3YzRkZGU5ZTViMjI5NTU2NzlhOWQzOWZkZjNiMTY1MDYyOWMxNzMxOTViMjg1ZWYxODk5MDUyNGFlIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjE4YjE2NTU2OWE4ZmQ4NTFlNmUyNTQyM2I3NzQyMWM2Mzk2NjQ2NWEzNDU4NDA0MjE0OTFjYzA4NGQ2ZDJjYmFlYTM3MzMzY2U1MWVmNTljNTdhMjMzYzkyNTdhOTY3ZjMyNTBjODdlMzMxYzY4MmM2NDQ0MTMzYTkzOTc3MGUwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL21hcnNoYWwuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21hcnNoYWwuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3MjIwNWFkY2U3NGY5NWM2YjllMDgwYmU0ZmIwOTJmNDAzMWYwYTI2Y2FmYzIwOTRlNGMyZDQ4N2M4MzI4OWMyOGU4YjY1NzY5OTA3YjYwN2Q0ZDM0MTFiYzQ4ZjljMGEwYzdkNGM3YjM1YmQ0ZGQ4OTg0ZTM1OWIzMjY2OTAxMiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yYW5rT3JkZXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JhbmtPcmRlci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImMzZTVlN2E2ZWQ4NzM1MzdkODgyZjhlOWE2MDNhMWNjYzI1ZTc3NTVjMWUxYmZkZTA1MjRiYTE1N2NlYTQ2ZGU4MTc3MDNmMTQwOThhZjRmOTdmNWM3MmQ5Yjc5MDBjNDRiNmU0NDNiYTY3ODBkOTFkOTFmNDkxMGQzYWI3ZTg1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3R5cGVzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlcy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFiZTZmODcwNjA1YzVlNWU0MmYzOWVkMjgyMjM3OGFiOWVhZjRmYTZiZGE3NDA3MGJhYzU4ZmZkMTBlMTRhMDcyY2Y4MDk2ZmU4YzY5ODY4MDBhOTk1ZTJjNjA0Yjg4Y2EyNzIxZjk5MWI1NTA3MWFlNmYzZTNkMGVhM2JhYWY4IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9uYXQtdjUuMC4xNCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vbmF0IiwKICAgICAgImxhYmVsIjogIkBlbmRvL25hdC12NS4wLjE0IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL25hdC12NS4wLjE0IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIi4vc3JjL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pbmRleC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImYxMDBmOTQwOTQ0YWIzNTQzMmU1YTI2YWRkZDYzMmM0NWMyNGMzZTFhNzA4MDAzYmRjZTg0NTYxYzRlMTBmNjBhYzEzN2NjMWI3YzY4ZDIwNjk1NTNlOTE2NDE0MDYwYzM5YTJmNjY1NmNkZGNjMDJmYjFkYjNjYTNlYmVlZWY2IgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcGFzcy1zdHlsZSIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuOCIsCiAgICAgICJsb2NhdGlvbiI6ICJAZW5kby9wYXNzLXN0eWxlLXYxLjQuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9lbnYtb3B0aW9ucyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi91dGlscy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmYTc3NjY0NTFlM2NhZjMwYmM3NTExNjU3OTg2NDJjYTQ4M2FlNmQyYzNiYjhlNzc3OTAwNzFiMTdlZmEzNDgxZjNhYjgzMDMzMjc0YTM2NTQzMTU4MWIyNTYxYjA3Y2UxNjQxMWI0YWE0NjA1OWQ1YTVlNDc2YjE2YWYwZmUyOSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9jb3B5QXJyYXkuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvcHlBcnJheS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjVlNWQxYjEyZDE1ZTEwMDUyNjNkZmQ0NGY3NWVhNzIyMGEyZjFmMmYyOGQ5MjZiZTgxMGU3NmE3OTRmYjkxYzhlMjJkZWMzYmJhMWQ2ZDE4ODBhMzNmYTMwOWRhNDdiNjgxYjgzMDQxNmExY2I1ODg1ZGUxYTNlMDZiYmMyN2Q0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2NvcHlSZWNvcmQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2NvcHlSZWNvcmQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkOTRlZmM5NzVlNjU0MTE3YmEzMWIyNGE1M2EwZGIzNTA1ODUzNDUzMjZmNGQyZmQyZWViOWViMzBkOGY1ODM5N2MwMjhlYzNmMTMwZDAzN2ExMDcyNTJjNDVlM2MyNzNjMzZiOTVmZmJhYzcwYTk0YjdlYmFjYjI4MWFmMmJiNiIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9kZWVwbHlGdWxmaWxsZWQuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2RlZXBseUZ1bGZpbGxlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjAxOWZmM2YwNTFkODE4NTg2YWJmNWEwYzAyOWIzMGQyZTdjZDNiZTRkM2VmM2Q3ZDQwMGYwZmM1NjhjNjllNzQ4Y2EzMjk4MmZiZjVjNDliOTdhYTgxMTA2MTIxZGIzNzMxM2JhMTY0MDlhYTVlMTdmZWIxZWFmNzFhOWNmNDA1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2Vycm9yLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9lcnJvci5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjIxNDVhYmQ3NmViNTU3YjAxZDA0OGU0NTI2MGMxYTU1OWQ0MDI4Y2JlOWNiMzAwNjI4MmJhMTcwZDQ1NjI4ODY1NTBmNDk4YmU1ODRlZDJiNmZmZmMwYjgwOTExNjdkYjYwOWZiNjk5OTE4MDA0MjFhNWY2ODFkYmRkMzI3YTEzIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2l0ZXItaGVscGVycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvaXRlci1oZWxwZXJzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzA4NGY2ZGQxNTNjY2Q2ZjAxMzFmNTAyNjEzYmQ3ZmNkZTIzZDE4NWI2Nzg0YjI1ZGI1OWIxZWVlNWIyZmJlNjUwNTViOGVjZDVhOWUwMjRhYzFmOTY4MTA4OWQ0ZTRlZTBkYjAzMjdkOTQxMDdhODdiYjU5MjA2YzU2MzkwMmEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZS1mYXIuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL21ha2UtZmFyLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNmI0OTI3YjAxNTViMjI1YjkzNDIxMWNkNDBhMGYzMGQ0M2Y0ZDcwNzgzOGM2ZmUwYWJjMTBkMWZmZTlkNWQ5NDY1NDMzYWEwMmNlMDU1YWZkNDNkMWUyYTg1ZGIyNGRjOTA1M2RmNTY3NzNkMmNlMjQyZGNmYTA4MjExY2Y2NDIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWFrZVRhZ2dlZC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvbWFrZVRhZ2dlZC5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjhmZjVjZTQyMzBmZWJiNzUyMDY0YmMzZjA5YWRkMGFmNGE0OTU4YzIwYjNjMjUyM2M5ZDdkMGVmYzNjYTkxMzE3YzcxMThlODU0NWY4ZGEwZjU1NmJiYmRiYWZmODUyYmFlYmE1YTYxZjQyOTY1NGEwMzQzMzUwYWMyOGU3OGQ1IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXNzU3R5bGUtaGVscGVycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImMxOGRkYzg4MWJhNjJhNzM1NGY1ZjA5MTQ2NGFjYjFkM2I3ODBjNDRlZjg3ZjZhNmVlYzliMzk5ODY1MTBiOGRiZGJhYzEyNjgyZjdkNTdiMmNiY2Y0OTNiYmE3NTIyZDJlOWU1NTllZGY5ZTA5MmJiNTg2MWE1NzVkNWUzNzY3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXNzU3R5bGVPZi5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImRmYmRmMDE2OGQ4ZTg5OWM5ZDdkZDQwNDdjNzA4YmE1ZDI2MzExYzVkNGIzOGFlZmFhNzk2NjBjYzU2NWU2NmQzZmZkOWMwZTcwN2EwYjBkYzk2YmI3NWI1ZGUxYTJiODNmNDYwZjcxNTc3Yzk1OGIxYzBlZjVjZjcyYTkwNTY0IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JlbW90YWJsZS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmVtb3RhYmxlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMzI3NzIwOTViNDc2MWM2OWEzYzBmMmZjZWJmMTk0N2I2NzgwZDMwNzczZGRmZWYxODMyN2JlYTA3NjE0ZTY4ZTcyZWFlMGQxNWVmZmI4OTMxMzFlM2Y4NjM3ODZkOGQyMTc3ZTI5ZmZhMjk4OTNjNGVkMTUwMWRjZWEwYjg5ZjEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvc2FmZS1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9zYWZlLXByb21pc2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJjNTQ2YmJhOTkyY2YyMTQwYmFlOTJiMWNjOWQ1OGQ5YzI5ZGNjMDM0NmIxYzAwOWI0NDIzNjBlNzMyNWQyYWRjNjEyN2I5MWYwYmRlNzAyN2M2Y2ZmNWExNjhjMTY5NTkzMjczOTY4OTIwM2E1MmQwZGZhYWFhZDU5MTAwYWVlMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9zdHJpbmcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3N0cmluZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogImRhOGQ5MTBmNzE1ZmI4N2FmZTdkODI2NjQ5Yjg3YTM5YTZhZWUzYTY0ZDlmODE5NmIyNGM0ZDUyNzU0YTBhZDhmYmZjODIxMDNjOWIyYzBjY2M4NWYyMzQ3MDcwZTcwYzUwMGUyYzlkZTJkMmZlZDBhNTUwZjJlODc4YzcxNTg3IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3N5bWJvbC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvc3ltYm9sLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTY1MWE0NDA3ZTRmMDVjMjQ1NGE5NmMwNjE3NDJmNjg0OTI5YTUxMWY0YjA3NTkzYmM3ZWE1ODk2M2M3YzVjOTQwZjJhMWE5MWI4YzY1MGI0ZWE4NzQxMDlmOGQ1NjM4ZDYyOGIyY2E3YTZlZjlhYzk3NGM2YWRmYzg2ZDZiZjIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdGFnZ2VkLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90YWdnZWQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI0YmRiMGE4MTdmZmZjNDhkOGYxMmZiY2EzY2I5NmE2NjQ5OWE2NWZjNmI5ODk2MzkwNjMwZjg0YTcwNWY2MjU3OTFiZjEzY2ZkOTE1NzI0NmMxMzlkOWJjNjE2YTYzYTRkYzE2ZDJkNGYyNDM0MDlmNzM4MTcwOGU5NjNjMjRiMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlR3VhcmRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy90eXBlR3VhcmRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZTcwMTQ0ODc4NTEzMmUzYWU5ODhjYTE0OTBjY2Y1MDRjNGE4ZThkMjVkNGJiZmQzZjkxZjU2NDM3ZWFjYTFjMzlhOTgwOTgxZmE1Mzg3MGU1YTAyMjcxYzBjY2Q5YmZlMTQ5ODc1NTUwYmUxYWQ0OTRmNzNmNGZjODcwMDgzYzUiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvdHlwZXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3R5cGVzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMWJlNmY4NzA2MDVjNWU1ZTQyZjM5ZWQyODIyMzc4YWI5ZWFmNGZhNmJkYTc0MDcwYmFjNThmZmQxMGUxNGEwNzJjZjgwOTZmZThjNjk4NjgwMGE5OTVlMmM2MDRiODhjYTI3MjFmOTkxYjU1MDcxYWU2ZjNlM2QwZWEzYmFhZjgiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgIkBlbmRvL3BhdHRlcm5zLXYxLjQuOCI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vcGF0dGVybnMiLAogICAgICAibGFiZWwiOiAiQGVuZG8vcGF0dGVybnMtdjEuNC44IiwKICAgICAgImxvY2F0aW9uIjogIkBlbmRvL3BhdHRlcm5zLXYxLjQuOCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL2Zyb20tdW5pcXVlLWVudHJpZXMuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vZnJvbS11bmlxdWUtZW50cmllcy5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pZGVudC1jaGVja2VyLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbGlzdC1kaWZmZXJlbmNlLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2NvbW1vbi9tYWtlLWFycmF5LWl0ZXJhdG9yLmpzIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2NvbW1vbi12MS4yLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL21ha2UtYXJyYXktaXRlcmF0b3IuanMiCiAgICAgICAgfSwKICAgICAgICAiQGVuZG8vY29tbW9uL21ha2UtaXRlcmF0b3IuanMiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vY29tbW9uLXYxLjIuOSIsCiAgICAgICAgICAibW9kdWxlIjogIi4vbWFrZS1pdGVyYXRvci5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9jb21tb24tdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9vYmplY3QtbWFwLmpzIgogICAgICAgIH0sCiAgICAgICAgIkBlbmRvL2Vycm9ycyI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9lcnJvcnMtdjEuMi45IiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9tYXJzaGFsIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL21hcnNoYWwtdjEuNi4zIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL2luZGV4LmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogImluZGV4LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiYzE3YjRiODFlOGE4YzkzNGUyZDQ3YTc5ZTE2MjhlN2VjZDBkYzM0NDhmZjRlNTdkMjQwMDUzMmFlM2JiZTE3Zjc2OTVkZDg2MjcxMDUyZmE0N2Q3ZGFhOTFmMWQ4YTc3MGZkYzIzMDM0MjU4NjE0MjY1MzM1ZTc3OTYwYzQxZmMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9jaGVja0tleS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jaGVja0tleS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjliOGYzOTlkMDY0NjllYzE2YWFhYTNlYjc4ZTllMmVmZDczMGRhZTQyNTlmNWMxN2FiMDc2ZTI0NGYzMGU1M2VkMzA5YjFiMmY4ODdhZjFkYzA4YTIxYWRiOTc3ODI3NzQ3MzJhMWViZDRlODBhM2M3NGNmNTc1MWNhYmZkMDNmIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29tcGFyZUtleXMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvY29tcGFyZUtleXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI3M2JhZGExNmRjNGVjN2YwYjFhNzhlMzU3Zjk3ZjJmZGZmOTJhZjBlMzA0YzM4NWMzNjY4OWU2MGY1NGIzNWY0ZjdmMTJjOWE4OWM0NGNjYTg1ZjgyNjFmODYzMjZiNGU2Zjk2ZTZiMTdmMjRiNTBiZGJmYjFiMDc2Yjc1NGIzMyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9rZXlzL2NvcHlCYWcuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL2tleXMvY29weUJhZy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjA3NzI2YjIwMjEzZjAyNDVlYjg5NmNlYTVjNGVhZWRjMmY0YjQwZTllOTZlNjA1ODE3YWVjMmI0YzhmNjE1NjdlYTQyMmM0MWZmOWNmYWNlNzg5OWE1ZDZkOWRlNmQ5ODQ5OWFhZmJiNGM2NTFjNDA1YWUyNDUwZDFkMGNmNDY2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvY29weVNldC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9jb3B5U2V0LmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNzg2N2JiODE0YjMwNTIwY2ZhYjVjYTE5OTEyMmJhOWZmYjRhMzA3ZmRlYmFiNWQ4NDU1OTgxNWFlNWY5MTlhNDZlZmMzMzE0MTY4NjU1MjlkM2NiZjk5ZTJjODY0Yzk3ZTUwYTIzYjE0ZTEzNTMwODU3NTBjMGQ5ODZjZTNiMGEiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjk5MDQ1ZGYxZTFlM2NkM2FmNTA1MjAyODQ0ZjQ3NjczYjQzYzEwNmNhN2MyMzcwYzUyYWNjMjc4ZTE2YmIyMTljNWZiOTcwZjQ4YzkzOTNkZmI4NzdlZTU2ZTdkM2RlMTZhYjJiOTk0NTdhN2Q1OWY3MzA3ZjliNThlYTk2ODg5IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiNWE5Zjc3ZTk2YjQxMDc5MjRjMThmY2FlZmEyOGU4MWQzOTY4NTAwNzY4ZDZkZGUyZjViNjMxMTFiZDM0NGYwYmQyNDI3ZTY0NTJjY2ZlMWRjYzllZjNhNTA5NGUxNDczMTU4NWIwM2E4MTJlNDNjN2U2YzQzNWZmYzFhYTY1YjMiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxZWE0ODM4MWFmNDI5M2IyMmQ1Y2ZlM2I4NzQ1ZWM3ZjEwYmZiMGRmM2E3Y2Y1ZGVlZTViMDEzYzBjMWIzYTRjODkxOThkMTkxNTAyMGQyYmU4ZThhMzNlYzc2ZDAzZjdjN2M5YWYwNGQwMjdjZjc2NGU0NjA5NzE0MmYyMjlkMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMjY3MTY2MTAwNDlkYTk1ZDdjZTM2NTVhMGY1ZjE5ZGI3YmQwNGM3NzA1ZDdmNzgwZGE2MDY1Y2EyZTU5YjljY2EzMTAxY2QzNGM1MWJhYWEzOTE1MDE0MmZiMjNhMTFlNTdhYTUzZDRiZDViOTNmMzcyMzgwZGJhMzlkYTAxNTgiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4ZTE4YmI0YzJjMjE5YzRjYmE2MmEzNTVhMDdmYWQ5ZGJlNTdmNzliYWU5YjYwNTk0N2FmYmY4NTg4MDY1ZGQ0ZDIxMzI4Y2U3ZWQ0NjFkNWIyNDcxY2Q1YTg4MDUxMWQ5ZTI4YzYzNmJjMzQxYTA5NDIyODUxZGQxNDNkNDM1MCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYmU2Zjg3MDYwNWM1ZTVlNDJmMzllZDI4MjIzNzhhYjllYWY0ZmE2YmRhNzQwNzBiYWM1OGZmZDEwZTE0YTA3MmNmODA5NmZlOGM2OTg2ODAwYTk5NWUyYzYwNGI4OGNhMjcyMWY5OTFiNTUwNzFhZTZmM2UzZDBlYTNiYWFmOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS45IjogewogICAgICAibmFtZSI6ICJAZW5kby9wcm9taXNlLWtpdCIsCiAgICAgICJsYWJlbCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjkiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vcHJvbWlzZS1raXQtdjEuMS45IiwKICAgICAgIm1vZHVsZXMiOiB7CiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwYzJjOWQ0MmE3MWUyZmRhZGY1MDRlYjUwMzllMGFlOWFiYzM5YzVhZjRhMmY3OGY3YTYzZDAzNTA0YTE4OGQyZDY1ZGNmY2E4NzE2YmUwOTM1NmE2Y2Y5ODNmMTI3YTk2MWRlOGVkNTA2NTZmYmNiZGQwZGFkNDkzY2JkMDAzMSIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9pcy1wcm9taXNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9pcy1wcm9taXNlLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiMDQ2ZTlhYjY3NTBjM2ExNTY5MjBiYzEyYWQyMjU0N2I2NmZjNDEyZDZmZDAzZGYxYTQyZjY5NTVhYTZjNjJkNzE0NTY1ZjMyOTE2OWFiNDc2NmZlMGIzZDE1NmQyZWU1ODdkYzY1ZjA3ZGU4MzYzYmI0OGE5OThhMTkzYmViOGQiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvbWVtby1yYWNlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tZW1vLXJhY2UuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJmMzcxYjA4YjMwMjE5ZDMxMGYzN2U4ZjFjZWMzMDA0ZGEyMDlkN2I3ODljNjA2ZmQ0MGIzODBjNWUwZjg2YWVlMmEwZDg0ZTMzZTExMTA4ZWM1YWFkMGU0OTRmNTQwMGY5NWYwZTMzYTU4NDYyNGViMzExMDQ5MjMwNmZiZjNlNyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICI4Nzc4ZmM2YmE3MTM4ZGNkNzA1Y2FhOWNkMzk4YjkyYzM4NTFhYTJlYmE3ZjM3OWE0OWVkYTU2MzQ1MjMxMzE5ZTZiZTkyOTYzNGQzNjJkYzkxZTQ1NGQ5OTE0NGVlZDE3MTkwMjQ2ZmQ3MjM3ODU3NzFhY2NhYjZiYjYyMWU4OCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy90eXBlcy5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvdHlwZXMuanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIxYmU2Zjg3MDYwNWM1ZTVlNDJmMzllZDI4MjIzNzhhYjllYWY0ZmE2YmRhNzQwNzBiYWM1OGZmZDEwZTE0YTA3MmNmODA5NmZlOGM2OTg2ODAwYTk5NWUyYzYwNGI4OGNhMjcyMWY5OTFiNTUwNzFhZTZmM2UzZDBlYTNiYWFmOCIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiQGVuZG8vc3RyZWFtLXYxLjIuOSI6IHsKICAgICAgIm5hbWUiOiAiQGVuZG8vc3RyZWFtIiwKICAgICAgImxhYmVsIjogIkBlbmRvL3N0cmVhbS12MS4yLjkiLAogICAgICAibG9jYXRpb24iOiAiQGVuZG8vc3RyZWFtLXYxLjIuOSIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9ldmVudHVhbC1zZW5kIjogewogICAgICAgICAgImNvbXBhcnRtZW50IjogIkBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wIiwKICAgICAgICAgICJtb2R1bGUiOiAiLi9zcmMvbm8tc2hpbS5qcyIKICAgICAgICB9LAogICAgICAgICJAZW5kby9wcm9taXNlLWtpdCI6IHsKICAgICAgICAgICJjb21wYXJ0bWVudCI6ICJAZW5kby9wcm9taXNlLWtpdC12MS4xLjkiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL2luZGV4LmpzIgogICAgICAgIH0sCiAgICAgICAgIi4vaW5kZXguanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAiaW5kZXguanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIzNTY4MTU5YjhmNDVkNjcwMTYwYzk2MDBiMDE1OTQ1ZDQxYzRjMjBhZTdkMThiYTdjYjgyZTI2NzIyYzFjOWU4MzEyOTM0YmNlZTM1ZmZkM2Y3MGZkZWRlNGZmNGY3ZDE5YmE0YTFmMTMyYmJkMjhlZGM0MTBmNjcwMWNhYzVlMSIKICAgICAgICB9CiAgICAgIH0KICAgIH0sCiAgICAiamVzc2llLmpzLXYwLjMuNCI6IHsKICAgICAgIm5hbWUiOiAiamVzc2llLmpzIiwKICAgICAgImxhYmVsIjogImplc3NpZS5qcy12MC4zLjQiLAogICAgICAibG9jYXRpb24iOiAiamVzc2llLmpzLXYwLjMuNCIsCiAgICAgICJtb2R1bGVzIjogewogICAgICAgICJAZW5kby9mYXIiOiB7CiAgICAgICAgICAiY29tcGFydG1lbnQiOiAiQGVuZG8vZmFyLXYxLjEuMTAiLAogICAgICAgICAgIm1vZHVsZSI6ICIuL3NyYy9pbmRleC5qcyIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9tYWluLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9tYWluLmpzIiwKICAgICAgICAgICJwYXJzZXIiOiAicHJlLW1qcy1qc29uIiwKICAgICAgICAgICJzaGE1MTIiOiAiZWI4ZGYzMzY1YzViMGY0YjBmNmJmNmMxM2Y3ZTI5NmU3NjAzMWQzNjcxYjI4Y2I2ZDJmZGVjNDdmYmI3ZDE3YjBlNjk4NDgxN2FhNDAwOWRkYzY4Y2ExMDlkYjc5MzgyODAyZWUzZWIxMTViZGM0NTU4YjkzNjNhMmM2YmEyOGIiCiAgICAgICAgfSwKICAgICAgICAiLi9zcmMvcmluZzAvRS5qcyI6IHsKICAgICAgICAgICJsb2NhdGlvbiI6ICJzcmMvcmluZzAvRS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjdmNDIzNzE1ZWZlZDk0YzBlMWU5NDEwMGY4ZjVlMTYzZjUzMTAzMTk1NWExNmYzNTkwYWMyOTA1OTU3OGM5ZGRjZjg0ZWNlNzczNTAwNDkxYmJkZWNmNWQ0M2E2MDViYjc0NWM1NzA5OTAyM2JjOWIyYWM3YTM2Yzc1YTNjMmJiIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcwL2FzeW5jLWdlbmVyYXRlLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMC9hc3luYy1nZW5lcmF0ZS5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjFkYTM0ZGNiNmJlN2ExNTMzNTBjNTU1MTUzODE1ODY4ZDEyYzg3MDYxNDU1MTc1NmQxODk0MWNiZTdmMDc1M2E3ODZlMTBmN2M5MjYxZjEyYzFiNTU0NzY1YWMxZWQwY2E3MGU4NzY3N2UwM2JiZGE5OTcwNTgxNGVlZjQ1ODI2IgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcwL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcwL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICJkYTEyNWFkYTI2MDdiZDc2YjQzOWY3NTg4YmQzOWZkOGI4MDY4Y2Q4NjI5OWRmMDk2NDdlM2ZhMzVkMDZkMjU1OTkyOGIzNjk4ZGNmZDhhMDI1YjAwMTJhODU3OGU3MDQ1Nzk1NWUwYjFkMTZjMWFjOTI3MjI1NzIxMTRmMzgyMCIKICAgICAgICB9LAogICAgICAgICIuL3NyYy9yaW5nMC9tYWtlcnMuanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcwL21ha2Vycy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjgyYTVkZjFlZDEwNGUzMzM1YzMyNTMzZGQ2MDk0NDE0ZTllYTU3NGQ0YjQ3MzVkMjkzZGFiMWY1NWM0MzI5Y2UwZDc4ODIxNjdkZDIxODAyY2I2ZjJkOThkOTdlODNjNmE3Nzk5Y2E1Yzc5OGI5MmEzN2MzODczNjA4NmI1MWJkIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcxL2FzeW5jLXRvb2xzLmpzIjogewogICAgICAgICAgImxvY2F0aW9uIjogInNyYy9yaW5nMS9hc3luYy10b29scy5qcyIsCiAgICAgICAgICAicGFyc2VyIjogInByZS1tanMtanNvbiIsCiAgICAgICAgICAic2hhNTEyIjogIjljNTIyZGQ2NTc5M2QyMjIxNTkwZjYyZmM1MDEwOWI2ZDk1MmJjZDU1ZDI5NWNhNzgyMGQ1NDVhNmQ4NDEzNDMwYjI5ZWU1ZTQ2ZmZiZTZjNWU2ZTA3ZWM4MzQ0ZmRjOTcyOTRlOGE3MjZiMjQ5YmM3OTgwMjNlZDMzMmZlMDYwIgogICAgICAgIH0sCiAgICAgICAgIi4vc3JjL3JpbmcxL21haW4uanMiOiB7CiAgICAgICAgICAibG9jYXRpb24iOiAic3JjL3JpbmcxL21haW4uanMiLAogICAgICAgICAgInBhcnNlciI6ICJwcmUtbWpzLWpzb24iLAogICAgICAgICAgInNoYTUxMiI6ICIwOTNlYzRiNGMzNGUxNzY3NWU4MGE5OTNjODcxMjJlZTE5NDRmODk1YTA5ZWExODUzODlmNDE5OThlNjQ1ZmE0OTQ0NWE3N2Q0MTYwODMyODMwYjhhYzgyZjhlMTBiZGZjYjBmYTJjM2E2YjYwZDhhNTIzNTM1MmEwYjMzOWIzZiIKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn1QSwMECgAAAAAAAAAAAOgouyiuAQAArgEAACAAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvaGVhcC5qc3siaW1wb3J0cyI6WyIuL3NyYy9oZWFwLmpzIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiLi9zcmMvaGVhcC5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9oZWFwLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAVESyZ5AQAAeQEAACcAAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2V4cG9ydHMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAWxIkmYgKAACICgAAJAAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaGVhcC5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXhvIiwiQGFnb3JpYy9zdG9yZSIsIi4vbWFrZS1vbmNlLmpzIiwiLi9rZXlzLmpzIiwiLi93YXRjaC1wcm9taXNlLmpzIl0sImV4cG9ydHMiOlsibWFrZUhlYXBab25lIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFyLGlzUGFzc2FibGUsbWFrZUV4byxkZWZpbmVFeG9DbGFzcyxkZWZpbmVFeG9DbGFzc0tpdCxtYWtlU2NhbGFyTWFwU3RvcmUsbWFrZVNjYWxhclNldFN0b3JlLG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUsbWFrZVNjYWxhcldlYWtTZXRTdG9yZSxtYWtlT25jZUtpdCxrZXlzLHdhdGNoUHJvbWlzZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiaXNQYXNzYWJsZVwiLCBbJGjNj19hID0+IChpc1Bhc3NhYmxlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXhvXCIsIFtbXCJtYWtlRXhvXCIsIFskaM2PX2EgPT4gKG1ha2VFeG8gPSAkaM2PX2EpXV0sW1wiZGVmaW5lRXhvQ2xhc3NcIiwgWyRozY9fYSA9PiAoZGVmaW5lRXhvQ2xhc3MgPSAkaM2PX2EpXV0sW1wiZGVmaW5lRXhvQ2xhc3NLaXRcIiwgWyRozY9fYSA9PiAoZGVmaW5lRXhvQ2xhc3NLaXQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlU2NhbGFyTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhck1hcFN0b3JlID0gJGjNj19hKV1dLFtcIm1ha2VTY2FsYXJTZXRTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyU2V0U3RvcmUgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhcldlYWtNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyV2Vha01hcFN0b3JlID0gJGjNj19hKV1dLFtcIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhcldlYWtTZXRTdG9yZSA9ICRozY9fYSldXV1dLFtcIi4vbWFrZS1vbmNlLmpzXCIsIFtbXCJtYWtlT25jZUtpdFwiLCBbJGjNj19hID0+IChtYWtlT25jZUtpdCA9ICRozY9fYSldXV1dLFtcIi4va2V5cy5qc1wiLCBbW1wiYWdvcmljVmF0RGF0YUtleXNcIiwgWyRozY9fYSA9PiAoa2V5cyA9ICRozY9fYSldXV1dLFtcIi4vd2F0Y2gtcHJvbWlzZS5qc1wiLCBbW1wid2F0Y2hQcm9taXNlXCIsIFskaM2PX2EgPT4gKHdhdGNoUHJvbWlzZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG4gKi9cbmNvbnN0IGRldGFjaGVkSGVhcFN0b3Jlcz1GYXIoJ2hlYXBTdG9yZXMnLHtcbmRldGFjaGVkOigpPT5kZXRhY2hlZEhlYXBTdG9yZXMsXG5pc1N0b3JhYmxlOmlzUGFzc2FibGUsXG5cbnNldFN0b3JlOm1ha2VTY2FsYXJTZXRTdG9yZSxcbm1hcFN0b3JlOm1ha2VTY2FsYXJNYXBTdG9yZSxcbndlYWtNYXBTdG9yZTptYWtlU2NhbGFyV2Vha01hcFN0b3JlLFxud2Vha1NldFN0b3JlOm1ha2VTY2FsYXJXZWFrU2V0U3RvcmV9KTtcblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSGVhcFpvbmU9KGJhc2VMYWJlbD0naGVhcFpvbmUnKT0+e1xuY29uc3R7bWFrZU9uY2Usd3JhcFByb3ZpZGVyfT1tYWtlT25jZUtpdChiYXNlTGFiZWwsZGV0YWNoZWRIZWFwU3RvcmVzKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgbWFrZVN1YlpvbmU9KGxhYmVsLF9vcHRpb25zKT0+XG5tYWtlSGVhcFpvbmUoIGAke2Jhc2VMYWJlbH0uJHtsYWJlbH1gKTtcblxucmV0dXJuIEZhcignaGVhcFpvbmUnLHtcbmV4bzp3cmFwUHJvdmlkZXIobWFrZUV4byxrZXlzLmV4byksXG5leG9DbGFzczp3cmFwUHJvdmlkZXIoZGVmaW5lRXhvQ2xhc3Msa2V5cy5leG9DbGFzcyksXG5leG9DbGFzc0tpdDp3cmFwUHJvdmlkZXIoZGVmaW5lRXhvQ2xhc3NLaXQsa2V5cy5leG9DbGFzc0tpdCksXG5zdWJab25lOndyYXBQcm92aWRlcihtYWtlU3ViWm9uZSksXG5cbm1ha2VPbmNlLFxud2F0Y2hQcm9taXNlLFxuZGV0YWNoZWQ6ZGV0YWNoZWRIZWFwU3RvcmVzLmRldGFjaGVkLFxuaXNTdG9yYWJsZTpkZXRhY2hlZEhlYXBTdG9yZXMuaXNTdG9yYWJsZSxcblxubWFwU3RvcmU6d3JhcFByb3ZpZGVyKGRldGFjaGVkSGVhcFN0b3Jlcy5tYXBTdG9yZSksXG5zZXRTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLnNldFN0b3JlKSxcbndlYWtNYXBTdG9yZTp3cmFwUHJvdmlkZXIoZGV0YWNoZWRIZWFwU3RvcmVzLndlYWtNYXBTdG9yZSksXG53ZWFrU2V0U3RvcmU6d3JhcFByb3ZpZGVyKGRldGFjaGVkSGVhcFN0b3Jlcy53ZWFrU2V0U3RvcmUpfSk7XG5cbiB9OyRozY9fb25jZS5tYWtlSGVhcFpvbmUobWFrZUhlYXBab25lKTtcbmhhcmRlbihtYWtlSGVhcFpvbmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUhlYXBab25lIjpbIm1ha2VIZWFwWm9uZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADM7NELmgIAAJoCAAAlAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL2V4cG9ydHMuanMiLCIuL21ha2Utb25jZS5qcyIsIi4va2V5cy5qcyIsIi4vaXMtcGFzc2FibGUuanMiLCIuL3dhdGNoLXByb21pc2UuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2V4cG9ydHMuanMiLCIuL2lzLXBhc3NhYmxlLmpzIiwiLi9rZXlzLmpzIiwiLi9tYWtlLW9uY2UuanMiLCIuL3dhdGNoLXByb21pc2UuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9leHBvcnRzLmpzXCIsIFtdXSxbXCIuL21ha2Utb25jZS5qc1wiLCBbXV0sW1wiLi9rZXlzLmpzXCIsIFtdXSxbXCIuL2lzLXBhc3NhYmxlLmpzXCIsIFtdXSxbXCIuL3dhdGNoLXByb21pc2UuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAUdiVg4cCAACHAgAAKwAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaXMtcGFzc2FibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSJdLCJleHBvcnRzIjpbImlzUGFzc2FibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCByZWFsSXNQYXNzYWJsZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImlzUGFzc2FibGVcIiwgWyRozY9fYSA9PiAocmVhbElzUGFzc2FibGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQYXNzYWJsZT0oc3BlY2ltZW4pPT5yZWFsSXNQYXNzYWJsZShzcGVjaW1lbik7JGjNj19vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Bhc3NhYmxlIjpbImlzUGFzc2FibGUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAfuQVJKQDAACkAwAAJAAAAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMva2V5cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiYWdvcmljVmF0RGF0YUtleXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qga2luZD0obGFiZWwpPT4gYCR7bGFiZWx9X2tpbmRIYW5kbGVgO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzaW5nbGV0b249KGxhYmVsKT0+IGAke2xhYmVsfV9zaW5nbGV0b25gO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgYWdvcmljVmF0RGF0YUtleXM9e1xuZXhvQ2xhc3M6KGxhYmVsKT0+aGFyZGVuKFtraW5kKGxhYmVsKV0pLFxuZXhvQ2xhc3NLaXQ6KGxhYmVsKT0+aGFyZGVuKFtraW5kKGxhYmVsKV0pLFxuZXhvOihsYWJlbCk9PmhhcmRlbihba2luZChsYWJlbCksc2luZ2xldG9uKGxhYmVsKV0pLFxuc3RvcmU6KGxhYmVsKT0+aGFyZGVuKFtsYWJlbF0pLFxuem9uZToobGFiZWwpPT5oYXJkZW4oW2xhYmVsXSl9OyRozY9fb25jZS5hZ29yaWNWYXREYXRhS2V5cyhhZ29yaWNWYXREYXRhS2V5cyk7XG5cbmhhcmRlbihhZ29yaWNWYXREYXRhS2V5cyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhZ29yaWNWYXREYXRhS2V5cyI6WyJhZ29yaWNWYXREYXRhS2V5cyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAJluY9EQcAABEHAAApAAAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9tYWtlLW9uY2UuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIl0sImV4cG9ydHMiOlsibWFrZU9uY2VLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRlZmF1bHRMYWJlbFRvS2V5cz0obGFiZWwpPT5oYXJkZW4oW2xhYmVsXSk7XG5oYXJkZW4oZGVmYXVsdExhYmVsVG9LZXlzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VPbmNlS2l0PShkZWJ1Z05hbWUsc3RvcmVzLGJhY2tpbmdTdG9yZT11bmRlZmluZWQpPT57XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHVzZWRLZXlzPXN0b3Jlcy5kZXRhY2hlZCgpLnNldFN0b3JlKCBgJHtkZWJ1Z05hbWV9IHVzZWQga2V5c2ApO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYXNzZXJ0T25seU9uY2U9KGtleSk9PntcbnR5cGVvZiBrZXk9PT0nc3RyaW5nJ3x8RmFpbCBga2V5ICR7a2V5fSBtdXN0IGJlIGEgc3RyaW5nYDtcbiF1c2VkS2V5cy5oYXMoa2V5KXx8XG5GYWlsIGBrZXkgJHtrZXl9IGhhcyBhbHJlYWR5IGJlZW4gdXNlZCBpbiB0aGlzIHpvbmUgYW5kIGluY2FybmF0aW9uYDtcblxuLy9cbi8vXG51c2VkS2V5cy5hZGQoa2V5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgd3JhcFByb3ZpZGVyPShwcm92aWRlcixsYWJlbFRvS2V5cz1kZWZhdWx0TGFiZWxUb0tleXMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd3JhcHBlcj0obGFiZWwsLi4ucmVzdCk9PntcbmZvcihjb25zdCBrZXkgb2YgbGFiZWxUb0tleXMobGFiZWwpKXtcbmFzc2VydE9ubHlPbmNlKGtleSk7XG4gfVxucmV0dXJuIHByb3ZpZGVyKGxhYmVsLC4uLnJlc3QpO1xuIH07XG5yZXR1cm4gKC8qICAgICAgICAgICAgKi93cmFwcGVyKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZU9uY2U9KGtleSxtYWtlcik9PntcbmFzc2VydE9ubHlPbmNlKGtleSk7XG5pZihiYWNraW5nU3RvcmUmJmJhY2tpbmdTdG9yZS5oYXMoa2V5KSl7XG5yZXR1cm4gYmFja2luZ1N0b3JlLmdldChrZXkpO1xuIH1cbmNvbnN0IHZhbHVlPW1ha2VyKGtleSk7XG5zdG9yZXMuaXNTdG9yYWJsZSh2YWx1ZSl8fFxuRmFpbCBgbWFrZXIgcmV0dXJuIHZhbHVlICR7dmFsdWV9IGlzIG5vdCBzdG9yYWJsZWA7XG5iYWNraW5nU3RvcmUmJmJhY2tpbmdTdG9yZS5pbml0KGtleSx2YWx1ZSk7XG5yZXR1cm4gdmFsdWU7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7bWFrZU9uY2Usd3JhcFByb3ZpZGVyfSk7XG4gfTskaM2PX29uY2UubWFrZU9uY2VLaXQobWFrZU9uY2VLaXQpO1xuaGFyZGVuKG1ha2VPbmNlS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VPbmNlS2l0IjpbIm1ha2VPbmNlS2l0Il19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAF0ivuOCQAAjgkAAC0AAABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL3dhdGNoLXByb21pc2UuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGF0dGVybnMiLCJAZW5kby9mYXIiXSwiZXhwb3J0cyI6WyJQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkiLCJQcm9taXNlV2F0Y2hlckhhbmRsZXIiLCJQcm9taXNlV2F0Y2hlckkiLCJQcm9taXNlV2F0Y2hlclJlamVjdGVkSSIsIndhdGNoUHJvbWlzZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsTSxFOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdHthcHBseX09UmVmbGVjdDtcblxuLypcblxuICovXG5jb25zdCAgICAgICAgUHJvbWlzZVdhdGNoZXJIYW5kbGVyPU0uY2FsbChNLnJhdygpKS5yZXN0KE0ucmF3KCkpLnJldHVybnMoKTtcblxuLypcblxuICovJGjNj19vbmNlLlByb21pc2VXYXRjaGVySGFuZGxlcihQcm9taXNlV2F0Y2hlckhhbmRsZXIpO1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVyST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXInLHtcbm9uRnVsZmlsbGVkOlByb21pc2VXYXRjaGVySGFuZGxlcixcbm9uUmVqZWN0ZWQ6UHJvbWlzZVdhdGNoZXJIYW5kbGVyfSk7XG5cblxuLypcblxuICovJGjNj19vbmNlLlByb21pc2VXYXRjaGVySShQcm9taXNlV2F0Y2hlckkpO1xuY29uc3QgICAgICAgIFByb21pc2VXYXRjaGVyRnVsZmlsbGVkST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWQnLHtcbm9uRnVsZmlsbGVkOlByb21pc2VXYXRjaGVySGFuZGxlcn0pO1xuXG5cbi8qXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkoUHJvbWlzZVdhdGNoZXJGdWxmaWxsZWRJKTtcbmNvbnN0ICAgICAgICBQcm9taXNlV2F0Y2hlclJlamVjdGVkST1NLmludGVyZmFjZSgnUHJvbWlzZVdhdGNoZXJSZWplY3RlZCcse1xub25SZWplY3RlZDpQcm9taXNlV2F0Y2hlckhhbmRsZXJ9KTtcblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlV2F0Y2hlclJlamVjdGVkSShQcm9taXNlV2F0Y2hlclJlamVjdGVkSSk7XG5jb25zdCBjYWxsTWVNYXliZT0odGhhdCxwcm9wLHBvc3RBcmdzKT0+e1xuY29uc3QgZm49dGhhdFtwcm9wXTtcbmlmKCFmbil7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmFzc2VydC50eXBlb2YoZm4sJ2Z1bmN0aW9uJyk7XG4vKlxuXG4gICAqL1xuY29uc3Qgd3JhcHBlZD0oYXJnKT0+e1xuLy9cbi8vXG5hcHBseShmbix0aGF0LFthcmcsLi4ucG9zdEFyZ3NdKTtcbiB9O1xucmV0dXJuIHdyYXBwZWQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHdhdGNoUHJvbWlzZT0ocCx3YXRjaGVyLC4uLndhdGNoZXJBcmdzKT0+e1xuUHJvbWlzZS5yZXNvbHZlKHApPT09cHx8RmFpbCBgd2F0Y2hQcm9taXNlIG9ubHkgd2F0Y2hlcyBwcm9taXNlc2A7XG5jb25zdCBvbkZ1bGZpbGxlZD1jYWxsTWVNYXliZSh3YXRjaGVyLCdvbkZ1bGZpbGxlZCcsd2F0Y2hlckFyZ3MpO1xuY29uc3Qgb25SZWplY3RlZD1jYWxsTWVNYXliZSh3YXRjaGVyLCdvblJlamVjdGVkJyx3YXRjaGVyQXJncyk7XG5vbkZ1bGZpbGxlZHx8XG5vblJlamVjdGVkfHxcbkZhaWwgYHByb21pc2Ugd2F0Y2hlciBtdXN0IGltcGxlbWVudCBhdCBsZWFzdCBvbmUgaGFuZGxlciBtZXRob2RgO1xudm9pZCBFLndoZW4ocCxvbkZ1bGZpbGxlZCxvblJlamVjdGVkKTtcbiB9OyRozY9fb25jZS53YXRjaFByb21pc2Uod2F0Y2hQcm9taXNlKTtcbmhhcmRlbih3YXRjaFByb21pc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUHJvbWlzZVdhdGNoZXJIYW5kbGVyIjpbIlByb21pc2VXYXRjaGVySGFuZGxlciJdLCJQcm9taXNlV2F0Y2hlckkiOlsiUHJvbWlzZVdhdGNoZXJJIl0sIlByb21pc2VXYXRjaGVyRnVsZmlsbGVkSSI6WyJQcm9taXNlV2F0Y2hlckZ1bGZpbGxlZEkiXSwiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiOlsiUHJvbWlzZVdhdGNoZXJSZWplY3RlZEkiXSwid2F0Y2hQcm9taXNlIjpbIndhdGNoUHJvbWlzZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABI8rnVKAUAACgFAAAhAAAAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL2NhY2hlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIi4vc3RvcmUuanMiXSwiZXhwb3J0cyI6WyJtYWtlQ2FjaGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLEZhcixtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvcjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N0b3JlLmpzXCIsIFtbXCJtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvclwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ2FjaGU9KGNvb3JkaW5hdG9yPW1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yKCkpPT57XG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBjYWNoZT0oa2V5LC4uLm9wdFVwZGF0ZUd1YXJkUGF0dGVybik9PntcbmlmKG9wdFVwZGF0ZUd1YXJkUGF0dGVybi5sZW5ndGg9PT0wKXtcbnJldHVybiBFKGNvb3JkaW5hdG9yKS5nZXRSZWNlbnRWYWx1ZShrZXkpO1xuIH1cblxuY29uc3RbdXBkYXRlLGd1YXJkUGF0dGVybl09b3B0VXBkYXRlR3VhcmRQYXR0ZXJuO1xuaWYodHlwZW9mIHVwZGF0ZSE9PSdmdW5jdGlvbicpe1xucmV0dXJuIEUoY29vcmRpbmF0b3IpLnNldENhY2hlVmFsdWUoa2V5LHVwZGF0ZSxndWFyZFBhdHRlcm4pO1xuIH1cblxuY29uc3QgdXBkYXRlcj1GYXIoJ2NhY2hlIHVwZGF0ZXInLHtcbnVwZGF0ZToob2xkVmFsdWUpPT57XG5yZXR1cm4gdXBkYXRlKG9sZFZhbHVlKTtcbiB9fSk7XG5cbnJldHVybiBFKGNvb3JkaW5hdG9yKS51cGRhdGVDYWNoZVZhbHVlKGtleSx1cGRhdGVyLGd1YXJkUGF0dGVybik7XG4gfTtcblxucmV0dXJuIGNhY2hlO1xuIH07JGjNj19vbmNlLm1ha2VDYWNoZShtYWtlQ2FjaGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUNhY2hlIjpbIm1ha2VDYWNoZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAASnwuxMgIAADICAAAgAAAAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL21haW4uanN7ImltcG9ydHMiOlsiLi90eXBlcy5qcyIsIi4vc3RvcmUuanMiLCIuL2NhY2hlLmpzIiwiLi9zdGF0ZS5qcyJdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbIi4vY2FjaGUuanMiLCIuL3N0YXRlLmpzIiwiLi9zdG9yZS5qcyIsIi4vdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi90eXBlcy5qc1wiLCBbXV0sW1wiLi9zdG9yZS5qc1wiLCBbXV0sW1wiLi9jYWNoZS5qc1wiLCBbXV0sW1wiLi9zdGF0ZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACMvBfLOwQAADsEAAAhAAAAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL3N0YXRlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJHUk9VTkRfU1RBVEUiLCJtYWtlU3RhdGUiLCJ3aXRoR3JvdW5kU3RhdGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBHUk9VTkRfU1RBVEU9aGFyZGVuKHtnZW5lcmF0aW9uOjBuLHZhbHVlOnVuZGVmaW5lZH0pO1xuXG4vKlxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5HUk9VTkRfU1RBVEUoR1JPVU5EX1NUQVRFKTtcbmNvbnN0ICAgICAgICBtYWtlU3RhdGU9KHZhbHVlLHByaW9yU3RhdGU9R1JPVU5EX1NUQVRFKT0+XG5oYXJkZW4oe1xuZ2VuZXJhdGlvbjpwcmlvclN0YXRlLmdlbmVyYXRpb24rMW4sXG52YWx1ZX0pO1xuXG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVN0YXRlKG1ha2VTdGF0ZSk7XG5jb25zdCAgICAgICAgd2l0aEdyb3VuZFN0YXRlPShzdGF0ZVN0b3JlKT0+KHtcbi4uLnN0YXRlU3RvcmUsXG5nZXQ6KGtleSk9PntcbmlmKCFzdGF0ZVN0b3JlLmhhcyhrZXkpKXtcbnJldHVybiBHUk9VTkRfU1RBVEU7XG4gfVxucmV0dXJuIHN0YXRlU3RvcmUuZ2V0KGtleSk7XG4gfX0pOyRozY9fb25jZS53aXRoR3JvdW5kU3RhdGUod2l0aEdyb3VuZFN0YXRlKTtcblxuaGFyZGVuKHdpdGhHcm91bmRTdGF0ZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJHUk9VTkRfU1RBVEUiOlsiR1JPVU5EX1NUQVRFIl0sIm1ha2VTdGF0ZSI6WyJtYWtlU3RhdGUiXSwid2l0aEdyb3VuZFN0YXRlIjpbIndpdGhHcm91bmRTdGF0ZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABlF7DQsRcAALEXAAAhAAAAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL3N0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3N0b3JlIiwiQGFnb3JpYy92YXQtZGF0YSIsIkBhZ29yaWMvaW50ZXJuYWwiLCIuL3N0YXRlLmpzIl0sImV4cG9ydHMiOlsibWFrZUNoYWluU3RvcmFnZUNvb3JkaW5hdG9yIiwibWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBFLEZhcixkZWVwbHlGdWxmaWxsZWQsbWFrZU1hcnNoYWwsbWF0Y2hlcyxtYWtlU2NhbGFyTWFwU3RvcmUsbWFrZVNjYWxhckJpZ01hcFN0b3JlLHVudGlsVHJ1ZSx3aXRoR3JvdW5kU3RhdGUsbWFrZVN0YXRlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImRlZXBseUZ1bGZpbGxlZFwiLCBbJGjNj19hID0+IChkZWVwbHlGdWxmaWxsZWQgPSAkaM2PX2EpXV0sW1wibWFrZU1hcnNoYWxcIiwgWyRozY9fYSA9PiAobWFrZU1hcnNoYWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIm1ha2VTY2FsYXJCaWdNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyQmlnTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJ1bnRpbFRydWVcIiwgWyRozY9fYSA9PiAodW50aWxUcnVlID0gJGjNj19hKV1dXV0sW1wiLi9zdGF0ZS5qc1wiLCBbW1wid2l0aEdyb3VuZFN0YXRlXCIsIFskaM2PX2EgPT4gKHdpdGhHcm91bmRTdGF0ZSA9ICRozY9fYSldXSxbXCJtYWtlU3RhdGVcIiwgWyRozY9fYSA9PiAobWFrZVN0YXRlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlS2V5VG9TdHJpbmc9KHNhbml0aXplPShvYmopPT5vYmopPT57XG5sZXQgbGFzdE5vbmNlPTA7XG5jb25zdCB2YWxUb05vbmNlPW5ldyBXZWFrTWFwKCk7XG5jb25zdCB2YWxUb1Nsb3Q9KHZhbCk9PntcbmxldCBzbG90PXZhbFRvTm9uY2UuZ2V0KHZhbCk7XG5pZighc2xvdCl7XG5sYXN0Tm9uY2UrPTE7XG5zbG90PWxhc3ROb25jZTtcbnZhbFRvTm9uY2Uuc2V0KHZhbCxzbG90KTtcbiB9XG5yZXR1cm4gc2xvdDtcbiB9O1xuXG5jb25zdHt0b0NhcERhdGE6a2V5VG9Kc29uYWJsZX09bWFrZU1hcnNoYWwodmFsVG9TbG90LHVuZGVmaW5lZCx7XG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cbmNvbnN0IGtleVRvU3RyaW5nPWFzeW5jKGtleVApPT57XG5jb25zdCBrZXk9YXdhaXQgc2FuaXRpemUoa2V5UCk7XG5jb25zdCBvYmo9a2V5VG9Kc29uYWJsZShrZXkpO1xucmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaik7XG4gfTtcbnJldHVybiBrZXlUb1N0cmluZztcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgYXBwbHlDYWNoZVRyYW5zYWN0aW9uPWFzeW5jKFxua2V5U3RyLFxudHhuLFxuZ3VhcmRQYXR0ZXJuLFxuc2FuaXRpemUsXG5zdGF0ZVN0b3JlKT0+XG57XG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0VXBkYXRlZFN0YXRlPWFzeW5jKGJhc2lzU3RhdGUpPT57XG5jb25zdHt2YWx1ZX09YmFzaXNTdGF0ZTtcbmlmKCFtYXRjaGVzKHZhbHVlLGd1YXJkUGF0dGVybikpe1xuLy9cbnJldHVybiBudWxsO1xuIH1cblxuY29uc3QgbmV3VmFsdWU9YXdhaXQgc2FuaXRpemUodHhuKHZhbHVlKSk7XG5yZXR1cm4gbWFrZVN0YXRlKG5ld1ZhbHVlLGJhc2lzU3RhdGUpO1xuIH07XG5cbmxldCBiYXNpc1N0YXRlPXN0YXRlU3RvcmUuZ2V0KGtleVN0cik7XG5sZXQgdXBkYXRlZFN0YXRlPWF3YWl0IGdldFVwZGF0ZWRTdGF0ZShiYXNpc1N0YXRlKTtcblxuLy9cblxuLy9cbmJhc2lzU3RhdGU9c3RhdGVTdG9yZS5nZXQoa2V5U3RyKTtcbmNvbnN0IHVudGlsVXBkYXRlU3luY2VkPXVudGlsVHJ1ZShcbigpPT4hdXBkYXRlZFN0YXRlfHx1cGRhdGVkU3RhdGUuZ2VuZXJhdGlvbj5iYXNpc1N0YXRlLmdlbmVyYXRpb24pO1xuXG5mb3IgYXdhaXQoY29uc3QgXyBvZiB1bnRpbFVwZGF0ZVN5bmNlZCl7XG51cGRhdGVkU3RhdGU9YXdhaXQgZ2V0VXBkYXRlZFN0YXRlKGJhc2lzU3RhdGUpO1xuLy9cbmJhc2lzU3RhdGU9c3RhdGVTdG9yZS5nZXQoa2V5U3RyKTtcbiB9XG5cbmlmKCF1cGRhdGVkU3RhdGUpe1xuLy9cbi8vXG5yZXR1cm4gYmFzaXNTdGF0ZS52YWx1ZTtcbiB9XG5cbi8vXG4vL1xuaWYoYmFzaXNTdGF0ZS5nZW5lcmF0aW9uPDFuKXtcbi8vXG5zdGF0ZVN0b3JlLmluaXQoa2V5U3RyLHVwZGF0ZWRTdGF0ZSk7XG4gfWVsc2V7XG5zdGF0ZVN0b3JlLnNldChrZXlTdHIsdXBkYXRlZFN0YXRlKTtcbiB9XG5cbi8vXG5yZXR1cm4gdXBkYXRlZFN0YXRlLnZhbHVlO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IHN0cmluZ2lmeVN0YXRlU3RvcmU9YXN5bmMoc3RhdGVTdG9yZSxtYXJzaGFsbGVyKT0+e1xuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9iaj17fTtcbmZvcihjb25zdFtrZXksdmFsdWVdb2Ygc3RhdGVTdG9yZS5lbnRyaWVzKCkpe1xub2JqW2tleV09RShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuIH1cbnJldHVybiBkZWVwbHlGdWxmaWxsZWQoaGFyZGVuKG9iaikpLnRoZW4oKGZ1bGZpbGxlZE9iaik9PlxuSlNPTi5zdHJpbmdpZnkoZnVsZmlsbGVkT2JqKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3I9KFxuc3RhdGVTdG9yZT1tYWtlU2NhbGFyTWFwU3RvcmUoKSxcbnNhbml0aXplPWRlZXBseUZ1bGZpbGxlZCk9Plxue1xuY29uc3Qgc2VyaWFsaXplUGFzc2FibGU9bWFrZUtleVRvU3RyaW5nKHNhbml0aXplKTtcblxuY29uc3QgZGVmYXVsdFN0YXRlU3RvcmU9d2l0aEdyb3VuZFN0YXRlKHN0YXRlU3RvcmUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29vcmQ9RmFyKCdzdG9yZSBjYWNoZSBjb29yZGluYXRvcicse1xuZ2V0UmVjZW50VmFsdWU6YXN5bmMoa2V5KT0+e1xuY29uc3Qga2V5U3RyPWF3YWl0IHNlcmlhbGl6ZVBhc3NhYmxlKGtleSk7XG5yZXR1cm4gZGVmYXVsdFN0YXRlU3RvcmUuZ2V0KGtleVN0cikudmFsdWU7XG4gfSxcbnNldENhY2hlVmFsdWU6YXN5bmMoa2V5LG5ld1ZhbHVlLGd1YXJkUGF0dGVybik9PntcbmNvbnN0IGtleVN0cj1hd2FpdCBzZXJpYWxpemVQYXNzYWJsZShrZXkpO1xucmV0dXJuIGFwcGx5Q2FjaGVUcmFuc2FjdGlvbihcbmtleVN0cixcbigpPT5uZXdWYWx1ZSxcbmd1YXJkUGF0dGVybixcbnNhbml0aXplLFxuZGVmYXVsdFN0YXRlU3RvcmUpO1xuXG4gfSxcbnVwZGF0ZUNhY2hlVmFsdWU6YXN5bmMoa2V5LHVwZGF0ZXIsZ3VhcmRQYXR0ZXJuKT0+e1xuY29uc3Qga2V5U3RyPWF3YWl0IHNlcmlhbGl6ZVBhc3NhYmxlKGtleSk7XG5yZXR1cm4gYXBwbHlDYWNoZVRyYW5zYWN0aW9uKFxua2V5U3RyLFxuKG9sZFZhbHVlKT0+RSh1cGRhdGVyKS51cGRhdGUob2xkVmFsdWUpLFxuZ3VhcmRQYXR0ZXJuLFxuc2FuaXRpemUsXG5kZWZhdWx0U3RhdGVTdG9yZSk7XG5cbiB9fSk7XG5cbnJldHVybiBjb29yZDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yKG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yKTtcbmNvbnN0IG1ha2VMYXN0V2luc1VwZGF0ZXI9KHN0YXRlU3RvcmUsbWFyc2hhbGxlcixzdG9yYWdlTm9kZSk9PntcbmxldCBsYXN0UHJlcGFyZVRpY2tldD0wbjtcbmxldCBsYXN0Q29tbWl0VGlja2V0PTBuO1xuXG5yZXR1cm4gYXN5bmMoc3RvcmVkVmFsdWUpPT57XG4vL1xuLy9cbi8vXG5sYXN0UHJlcGFyZVRpY2tldCs9MW47XG5jb25zdCBtYXJzaGFsbFRpY2tldD1sYXN0UHJlcGFyZVRpY2tldDtcbmNvbnN0IHNlcmlhbGl6ZWRTdG9yZT1hd2FpdCBzdHJpbmdpZnlTdGF0ZVN0b3JlKHN0YXRlU3RvcmUsbWFyc2hhbGxlcik7XG5pZihtYXJzaGFsbFRpY2tldDxsYXN0Q29tbWl0VGlja2V0KXtcbi8vXG5yZXR1cm4gc3RvcmVkVmFsdWU7XG4gfVxuYXdhaXQgRShzdG9yYWdlTm9kZSkuc2V0VmFsdWUoc2VyaWFsaXplZFN0b3JlKTtcbmxhc3RDb21taXRUaWNrZXQ9bWFyc2hhbGxUaWNrZXQ7XG5yZXR1cm4gc3RvcmVkVmFsdWU7XG4gfTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDaGFpblN0b3JhZ2VDb29yZGluYXRvcj0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbmNvbnN0IHN0YXRlU3RvcmU9bWFrZVNjYWxhckJpZ01hcFN0b3JlKCdzdGF0ZUtleScpO1xuXG5jb25zdCBzYW5pdGl6ZT1kZWVwbHlGdWxmaWxsZWQ7XG5jb25zdCBzZXJpYWxpemVQYXNzYWJsZT1tYWtlS2V5VG9TdHJpbmcoc2FuaXRpemUpO1xuXG5jb25zdCBkZWZhdWx0U3RhdGVTdG9yZT13aXRoR3JvdW5kU3RhdGUoc3RhdGVTdG9yZSk7XG5cbmNvbnN0IHVwZGF0ZVN0b3JhZ2VOb2RlPW1ha2VMYXN0V2luc1VwZGF0ZXIoXG5kZWZhdWx0U3RhdGVTdG9yZSxcbm1hcnNoYWxsZXIsXG5zdG9yYWdlTm9kZSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvb3JkPUZhcignc3RvcmUgY2FjaGUgY29vcmRpbmF0b3InLHtcbmdldFJlY2VudFZhbHVlOmFzeW5jKGtleSk9PntcbmNvbnN0IGtleVN0cj1hd2FpdCBzZXJpYWxpemVQYXNzYWJsZShrZXkpO1xucmV0dXJuIGRlZmF1bHRTdGF0ZVN0b3JlLmdldChrZXlTdHIpLnZhbHVlO1xuIH0sXG5zZXRDYWNoZVZhbHVlOmFzeW5jKGtleSxuZXdWYWx1ZSxndWFyZFBhdHRlcm4pPT57XG5jb25zdCBrZXlTdHI9YXdhaXQgc2VyaWFsaXplUGFzc2FibGUoa2V5KTtcbmNvbnN0IHN0b3JlZFZhbHVlPWF3YWl0IGFwcGx5Q2FjaGVUcmFuc2FjdGlvbihcbmtleVN0cixcbigpPT5uZXdWYWx1ZSxcbmd1YXJkUGF0dGVybixcbnNhbml0aXplLFxuZGVmYXVsdFN0YXRlU3RvcmUpO1xuXG5yZXR1cm4gdXBkYXRlU3RvcmFnZU5vZGUoc3RvcmVkVmFsdWUpO1xuIH0sXG51cGRhdGVDYWNoZVZhbHVlOmFzeW5jKGtleSx1cGRhdGVyLGd1YXJkUGF0dGVybik9PntcbmNvbnN0IGtleVN0cj1hd2FpdCBzZXJpYWxpemVQYXNzYWJsZShrZXkpO1xuY29uc3Qgc3RvcmVkVmFsdWU9YXdhaXQgYXBwbHlDYWNoZVRyYW5zYWN0aW9uKFxua2V5U3RyLFxuKG9sZFZhbHVlKT0+RSh1cGRhdGVyKS51cGRhdGUob2xkVmFsdWUpLFxuZ3VhcmRQYXR0ZXJuLFxuc2FuaXRpemUsXG5kZWZhdWx0U3RhdGVTdG9yZSk7XG5cbnJldHVybiB1cGRhdGVTdG9yYWdlTm9kZShzdG9yZWRWYWx1ZSk7XG4gfX0pO1xuXG5yZXR1cm4gY29vcmQ7XG4gfTskaM2PX29uY2UubWFrZUNoYWluU3RvcmFnZUNvb3JkaW5hdG9yKG1ha2VDaGFpblN0b3JhZ2VDb29yZGluYXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvciI6WyJtYWtlU2NhbGFyU3RvcmVDb29yZGluYXRvciJdLCJtYWtlQ2hhaW5TdG9yYWdlQ29vcmRpbmF0b3IiOlsibWFrZUNoYWluU3RvcmFnZUNvb3JkaW5hdG9yIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAVESyZ5AQAAeQEAACEAAABAYWdvcmljL2NhY2hlLXYwLjMuMi9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAR1HsYi8dAAAvHQAAJgAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9hbW91bnRNYXRoLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3N0b3JlIiwiLi9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanMiLCIuL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qcyIsIi4vbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiQW1vdW50TWF0aCIsIkFzc2V0S2luZCIsImFzc2VydEFzc2V0S2luZCIsImFzc2VydFZhbHVlR2V0SGVscGVycyIsImdldEFzc2V0S2luZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxwYXNzU3R5bGVPZixhc3NlcnRSZW1vdGFibGUsYXNzZXJ0UmVjb3JkLE0sbWF0Y2hlcyxuYXRNYXRoSGVscGVycyxzZXRNYXRoSGVscGVycyxjb3B5U2V0TWF0aEhlbHBlcnMsY29weUJhZ01hdGhIZWxwZXJzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UmVtb3RhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFJlbW90YWJsZSA9ICRozY9fYSldXSxbXCJhc3NlcnRSZWNvcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVjb3JkID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanNcIiwgW1tcIm5hdE1hdGhIZWxwZXJzXCIsIFskaM2PX2EgPT4gKG5hdE1hdGhIZWxwZXJzID0gJGjNj19hKV1dXV0sW1wiLi9tYXRoSGVscGVycy9zZXRNYXRoSGVscGVycy5qc1wiLCBbW1wic2V0TWF0aEhlbHBlcnNcIiwgWyRozY9fYSA9PiAoc2V0TWF0aEhlbHBlcnMgPSAkaM2PX2EpXV1dXSxbXCIuL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qc1wiLCBbW1wiY29weVNldE1hdGhIZWxwZXJzXCIsIFskaM2PX2EgPT4gKGNvcHlTZXRNYXRoSGVscGVycyA9ICRozY9fYSldXV1dLFtcIi4vbWF0aEhlbHBlcnMvY29weUJhZ01hdGhIZWxwZXJzLmpzXCIsIFtbXCJjb3B5QmFnTWF0aEhlbHBlcnNcIiwgWyRozY9fYSA9PiAoY29weUJhZ01hdGhIZWxwZXJzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEFzc2V0S2luZD0vKiAgICAgICAgICAgICAgICAqL3tcbk5BVDonbmF0JyxcblNFVDonc2V0JyxcbkNPUFlfU0VUOidjb3B5U2V0JyxcbkNPUFlfQkFHOidjb3B5QmFnJ307JGjNj19vbmNlLkFzc2V0S2luZChBc3NldEtpbmQpO1xuXG5oYXJkZW4oQXNzZXRLaW5kKTtcbmNvbnN0IGFzc2V0S2luZE5hbWVzPWhhcmRlbihPYmplY3QudmFsdWVzKEFzc2V0S2luZCkuc29ydCgpKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRBc3NldEtpbmQ9KGFsbGVnZWRBSyk9PntcbmFzc2V0S2luZE5hbWVzLmluY2x1ZGVzKGFsbGVnZWRBSyl8fFxuRmFpbCBgVGhlIGFzc2V0S2luZCAke2FsbGVnZWRBS30gbXVzdCBiZSBvbmUgb2YgJHtxKGFzc2V0S2luZE5hbWVzKX1gO1xuIH07JGjNj19vbmNlLmFzc2VydEFzc2V0S2luZChhc3NlcnRBc3NldEtpbmQpO1xuaGFyZGVuKGFzc2VydEFzc2V0S2luZCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBoZWxwZXJzPXtcbm5hdDpuYXRNYXRoSGVscGVycyxcbnNldDpzZXRNYXRoSGVscGVycyxcbmNvcHlTZXQ6Y29weVNldE1hdGhIZWxwZXJzLFxuY29weUJhZzpjb3B5QmFnTWF0aEhlbHBlcnN9O1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhc3NlcnRWYWx1ZUdldEFzc2V0S2luZD0odmFsdWUpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsdWUpO1xuaWYocGFzc1N0eWxlPT09J2JpZ2ludCcpe1xucmV0dXJuJ25hdCc7XG4gfVxuaWYocGFzc1N0eWxlPT09J2NvcHlBcnJheScpe1xucmV0dXJuJ3NldCc7XG4gfVxuaWYobWF0Y2hlcyh2YWx1ZSxNLnNldCgpKSl7XG5yZXR1cm4nY29weVNldCc7XG4gfVxuaWYobWF0Y2hlcyh2YWx1ZSxNLmJhZygpKSl7XG5yZXR1cm4nY29weUJhZyc7XG4gfVxuLy9cbi8vXG4vL1xuLy9cbi8vXG50aHJvdyBGYWlsIGB2YWx1ZSAke3ZhbHVlfSBtdXN0IGJlIGEgYmlnaW50LCBjb3B5U2V0LCBjb3B5QmFnLCBvciBhbiBhcnJheSwgbm90ICR7cShcbnBhc3NTdHlsZSlcbiB9YDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRWYWx1ZUdldEhlbHBlcnM9KHZhbHVlKT0+XG4vL1xuaGVscGVyc1thc3NlcnRWYWx1ZUdldEFzc2V0S2luZCh2YWx1ZSldO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5hc3NlcnRWYWx1ZUdldEhlbHBlcnMoYXNzZXJ0VmFsdWVHZXRIZWxwZXJzKTtcbmNvbnN0IG9wdGlvbmFsQnJhbmRDaGVjaz0oYWxsZWdlZEJyYW5kLGJyYW5kKT0+e1xuaWYoYnJhbmQhPT11bmRlZmluZWQpe1xuYXNzZXJ0UmVtb3RhYmxlKGJyYW5kLCdicmFuZCcpO1xuYWxsZWdlZEJyYW5kPT09YnJhbmR8fFxuRmFpbCBgYW1vdW50J3MgYnJhbmQgJHtxKGFsbGVnZWRCcmFuZCl9IGRpZCBub3QgbWF0Y2ggZXhwZWN0ZWQgYnJhbmQgJHtxKFxuYnJhbmQpXG4gfWA7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja0xSQW5kR2V0SGVscGVycz0obGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5hc3NlcnRSZWNvcmQobGVmdEFtb3VudCwnbGVmdEFtb3VudCcpO1xuYXNzZXJ0UmVjb3JkKHJpZ2h0QW1vdW50LCdyaWdodEFtb3VudCcpO1xuY29uc3R7dmFsdWU6bGVmdFZhbHVlLGJyYW5kOmxlZnRCcmFuZH09bGVmdEFtb3VudDtcbmNvbnN0e3ZhbHVlOnJpZ2h0VmFsdWUsYnJhbmQ6cmlnaHRCcmFuZH09cmlnaHRBbW91bnQ7XG5hc3NlcnRSZW1vdGFibGUobGVmdEJyYW5kLCdsZWZ0QnJhbmQnKTtcbmFzc2VydFJlbW90YWJsZShyaWdodEJyYW5kLCdyaWdodEJyYW5kJyk7XG5vcHRpb25hbEJyYW5kQ2hlY2sobGVmdEJyYW5kLGJyYW5kKTtcbm9wdGlvbmFsQnJhbmRDaGVjayhyaWdodEJyYW5kLGJyYW5kKTtcbmxlZnRCcmFuZD09PXJpZ2h0QnJhbmR8fFxuRmFpbCBgQnJhbmRzIGluIGxlZnQgJHtxKGxlZnRCcmFuZCl9IGFuZCByaWdodCAke3EoXG5yaWdodEJyYW5kKVxuIH0gc2hvdWxkIG1hdGNoIGJ1dCBkbyBub3RgO1xuY29uc3QgbGVmdEhlbHBlcnM9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKGxlZnRWYWx1ZSk7XG5jb25zdCByaWdodEhlbHBlcnM9YXNzZXJ0VmFsdWVHZXRIZWxwZXJzKHJpZ2h0VmFsdWUpO1xubGVmdEhlbHBlcnM9PT1yaWdodEhlbHBlcnN8fFxuRmFpbCBgVGhlIGxlZnQgJHtsZWZ0QW1vdW50fSBhbmQgcmlnaHQgYW1vdW50ICR7cmlnaHRBbW91bnR9IGhhZCBkaWZmZXJlbnQgYXNzZXRLaW5kc2A7XG5yZXR1cm4gbGVmdEhlbHBlcnM7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvZXJjZUxSPShoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpPT57XG4vL1xucmV0dXJuW2guZG9Db2VyY2UobGVmdEFtb3VudC52YWx1ZSksaC5kb0NvZXJjZShyaWdodEFtb3VudC52YWx1ZSldO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBpc0dURT0obGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xucmV0dXJuIGguZG9Jc0dURSguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQW1vdW50TWF0aD17XG4vL1xuLy9cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5tYWtlOihicmFuZCxhbGxlZ2VkVmFsdWUpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5jb25zdCBoPWFzc2VydFZhbHVlR2V0SGVscGVycyhhbGxlZ2VkVmFsdWUpO1xuY29uc3QgdmFsdWU9aC5kb0NvZXJjZShhbGxlZ2VkVmFsdWUpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb2VyY2U6KGJyYW5kLGFsbGVnZWRBbW91bnQpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5hc3NlcnRSZWNvcmQoYWxsZWdlZEFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHticmFuZDphbGxlZ2VkQnJhbmQsdmFsdWU6YWxsZWdlZFZhbHVlfT1hbGxlZ2VkQW1vdW50O1xuYnJhbmQ9PT1hbGxlZ2VkQnJhbmR8fFxuRmFpbCBgVGhlIGJyYW5kIGluIHRoZSBhbGxlZ2VkQW1vdW50ICR7YWxsZWdlZEFtb3VudH0gaW4gJ2NvZXJjZScgZGlkbid0IG1hdGNoIHRoZSBzcGVjaWZpZWQgYnJhbmQgJHticmFuZH0uYDtcbi8vXG4vL1xucmV0dXJuIEFtb3VudE1hdGgubWFrZShicmFuZCxhbGxlZ2VkVmFsdWUpO1xuIH0sXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmdldFZhbHVlOihicmFuZCxhbW91bnQpPT5BbW91bnRNYXRoLmNvZXJjZShicmFuZCxhbW91bnQpLnZhbHVlLFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1ha2VFbXB0eTooYnJhbmQsYXNzZXRLaW5kPS8qICAgICAgICAgICAgICAgICovJ25hdCcpPT57XG5hc3NlcnRSZW1vdGFibGUoYnJhbmQsJ2JyYW5kJyk7XG5hc3NlcnRBc3NldEtpbmQoYXNzZXRLaW5kKTtcbmNvbnN0IHZhbHVlPWhlbHBlcnNbYXNzZXRLaW5kXS5kb01ha2VFbXB0eSgpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kLHZhbHVlfSk7XG4gfSxcbi8qXG5cblxuXG5cblxuXG4gICAqL1xubWFrZUVtcHR5RnJvbUFtb3VudDooYW1vdW50KT0+e1xuYXNzZXJ0UmVjb3JkKGFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHticmFuZCx2YWx1ZX09YW1vdW50O1xuY29uc3QgYXNzZXRLaW5kPWFzc2VydFZhbHVlR2V0QXNzZXRLaW5kKHZhbHVlKTtcbi8vXG5yZXR1cm4gQW1vdW50TWF0aC5tYWtlRW1wdHkoYnJhbmQsYXNzZXRLaW5kKTtcbiB9LFxuLypcblxuXG5cblxuXG4gICAqL1xuaXNFbXB0eTooYW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmFzc2VydFJlY29yZChhbW91bnQsJ2Ftb3VudCcpO1xuY29uc3R7YnJhbmQ6YWxsZWdlZEJyYW5kLHZhbHVlfT1hbW91bnQ7XG5hc3NlcnRSZW1vdGFibGUoYWxsZWdlZEJyYW5kLCdicmFuZCcpO1xub3B0aW9uYWxCcmFuZENoZWNrKGFsbGVnZWRCcmFuZCxicmFuZCk7XG5jb25zdCBoPWFzc2VydFZhbHVlR2V0SGVscGVycyh2YWx1ZSk7XG5yZXR1cm4gaC5kb0lzRW1wdHkoaC5kb0NvZXJjZSh2YWx1ZSkpO1xuIH0sXG5pc0dURSxcbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmlzRXF1YWw6KGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQ9dW5kZWZpbmVkKT0+e1xuY29uc3QgaD1jaGVja0xSQW5kR2V0SGVscGVycyhsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kKTtcbnJldHVybiBoLmRvSXNFcXVhbCguLi5jb2VyY2VMUihoLGxlZnRBbW91bnQscmlnaHRBbW91bnQpKTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuYWRkOihsZWZ0QW1vdW50LHJpZ2h0QW1vdW50LGJyYW5kPXVuZGVmaW5lZCk9PntcbmNvbnN0IGg9Y2hlY2tMUkFuZEdldEhlbHBlcnMobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZCk7XG5jb25zdCB2YWx1ZT1oLmRvQWRkKC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kOmxlZnRBbW91bnQuYnJhbmQsdmFsdWV9KTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5zdWJ0cmFjdDoobGVmdEFtb3VudCxyaWdodEFtb3VudCxicmFuZD11bmRlZmluZWQpPT57XG5jb25zdCBoPWNoZWNrTFJBbmRHZXRIZWxwZXJzKGxlZnRBbW91bnQscmlnaHRBbW91bnQsYnJhbmQpO1xuY29uc3QgdmFsdWU9aC5kb1N1YnRyYWN0KC4uLmNvZXJjZUxSKGgsbGVmdEFtb3VudCxyaWdodEFtb3VudCkpO1xuLy9cbnJldHVybiBoYXJkZW4oe2JyYW5kOmxlZnRBbW91bnQuYnJhbmQsdmFsdWV9KTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1pbjooeCx5LGJyYW5kPXVuZGVmaW5lZCk9PlxuLy9cbmlzR1RFKHgseSxicmFuZCk/XG55OlxuaXNHVEUoeSx4LGJyYW5kKT9cbng6XG5GYWlsIGAke3h9IGFuZCAke3l9IGFyZSBpbmNvbXBhcmFibGVgLFxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbm1heDooeCx5LGJyYW5kPXVuZGVmaW5lZCk9PlxuLy9cbmlzR1RFKHgseSxicmFuZCk/XG54OlxuaXNHVEUoeSx4KT9cbnk6XG5GYWlsIGAke3h9IGFuZCAke3l9IGFyZSBpbmNvbXBhcmFibGVgfTskaM2PX29uY2UuQW1vdW50TWF0aChBbW91bnRNYXRoKTtcblxuaGFyZGVuKEFtb3VudE1hdGgpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGdldEFzc2V0S2luZD0oYW1vdW50KT0+e1xuYXNzZXJ0UmVjb3JkKGFtb3VudCwnYW1vdW50Jyk7XG5jb25zdHt2YWx1ZX09YW1vdW50O1xucmV0dXJuIGFzc2VydFZhbHVlR2V0QXNzZXRLaW5kKHZhbHVlKTtcbiB9OyRozY9fb25jZS5nZXRBc3NldEtpbmQoZ2V0QXNzZXRLaW5kKTtcbmhhcmRlbihnZXRBc3NldEtpbmQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiQXNzZXRLaW5kIjpbIkFzc2V0S2luZCJdLCJhc3NlcnRBc3NldEtpbmQiOlsiYXNzZXJ0QXNzZXRLaW5kIl0sImFzc2VydFZhbHVlR2V0SGVscGVycyI6WyJhc3NlcnRWYWx1ZUdldEhlbHBlcnMiXSwiQW1vdW50TWF0aCI6WyJBbW91bnRNYXRoIl0sImdldEFzc2V0S2luZCI6WyJnZXRBc3NldEtpbmQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAASpDQfAMEAAADBAAAJwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9hbW91bnRTdG9yZS5qc3siaW1wb3J0cyI6WyIuL2Ftb3VudE1hdGguanMiXSwiZXhwb3J0cyI6WyJtYWtlQW1vdW50U3RvcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBBbW91bnRNYXRoOyRozY9faW1wb3J0cyhbW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VBbW91bnRTdG9yZT0oc3RhdGUsa2V5KT0+e1xucmV0dXJuIGhhcmRlbih7XG5nZXRBbW91bnQ6KCk9PnN0YXRlW2tleV0sXG5pbmNyZW1lbnQ6KGRlbHRhKT0+e1xuc3RhdGVba2V5XT1BbW91bnRNYXRoLmFkZChzdGF0ZVtrZXldLGRlbHRhKTtcbiB9LFxuZGVjcmVtZW50OihkZWx0YSk9PntcbmlmKEFtb3VudE1hdGguaXNHVEUoc3RhdGVba2V5XSxkZWx0YSkpe1xuc3RhdGVba2V5XT1BbW91bnRNYXRoLnN1YnRyYWN0KHN0YXRlW2tleV0sZGVsdGEpO1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGZhbHNlO1xuIH19KTtcblxuIH07JGjNj19vbmNlLm1ha2VBbW91bnRTdG9yZShtYWtlQW1vdW50U3RvcmUpO1xuaGFyZGVuKG1ha2VBbW91bnRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlQW1vdW50U3RvcmUiOlsibWFrZUFtb3VudFN0b3JlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEW1HBr2BQAA9gUAACcAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvZGlzcGxheUluZm8uanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9zdG9yZSIsIi4vdHlwZUd1YXJkcy5qcyJdLCJleHBvcnRzIjpbImNvZXJjZURpc3BsYXlJbmZvIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtdXN0TWF0Y2gsRGlzcGxheUluZm9TaGFwZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXV1dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbW1wiRGlzcGxheUluZm9TaGFwZVwiLCBbJGjNj19hID0+IChEaXNwbGF5SW5mb1NoYXBlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjb2VyY2VEaXNwbGF5SW5mbz0oYWxsZWdlZERpc3BsYXlJbmZvLGFzc2V0S2luZCk9Pntcbm11c3RNYXRjaChhbGxlZ2VkRGlzcGxheUluZm8sRGlzcGxheUluZm9TaGFwZSwnZGlzcGxheUluZm8nKTtcblxuaWYoYWxsZWdlZERpc3BsYXlJbmZvLmFzc2V0S2luZCE9PXVuZGVmaW5lZCl7XG5hbGxlZ2VkRGlzcGxheUluZm8uYXNzZXRLaW5kPT09YXNzZXRLaW5kfHxcbkZhaWwgYGRpc3BsYXlJbmZvLmFzc2V0S2luZCB3YXMgcHJlc2VudCAoJHthbGxlZ2VkRGlzcGxheUluZm8uYXNzZXRLaW5kfSkgYW5kIGRpZCBub3QgbWF0Y2ggdGhlIGFzc2V0S2luZCBhcmd1bWVudCAoJHthc3NldEtpbmR9KWA7XG4gfVxuY29uc3QgZGlzcGxheUluZm89aGFyZGVuKHsuLi5hbGxlZ2VkRGlzcGxheUluZm8sYXNzZXRLaW5kfSk7XG5cbmlmKGRpc3BsYXlJbmZvLmRlY2ltYWxQbGFjZXMhPT11bmRlZmluZWQpe1xuTnVtYmVyLmlzU2FmZUludGVnZXIoZGlzcGxheUluZm8uZGVjaW1hbFBsYWNlcyl8fFxuRmFpbCBgZGVjaW1hbFBsYWNlcyAke2Rpc3BsYXlJbmZvLmRlY2ltYWxQbGFjZXN9IGlzIG5vdCBhIHNhZmUgaW50ZWdlcmA7XG4gfVxuXG5yZXR1cm4gZGlzcGxheUluZm87XG4gfTskaM2PX29uY2UuY29lcmNlRGlzcGxheUluZm8oY29lcmNlRGlzcGxheUluZm8pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiY29lcmNlRGlzcGxheUluZm8iOlsiY29lcmNlRGlzcGxheUluZm8iXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAX5aQtm4CAABuAgAAIQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyIuL2Ftb3VudE1hdGguanMiLCIuL2lzc3VlcktpdC5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2Ftb3VudE1hdGguanMiLCIuL2lzc3VlcktpdC5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtdXSxbXCIuL2lzc3VlcktpdC5qc1wiLCBbXV0sW1wiLi90eXBlR3VhcmRzLmpzXCIsIFtdXSxbXCIuL3R5cGVzLWluZGV4LmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPADLeUUFgAAFBYAACUAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvaXNzdWVyS2l0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy96b25lL2R1cmFibGUuanMiLCIuL2Ftb3VudE1hdGguanMiLCIuL2Rpc3BsYXlJbmZvLmpzIiwiLi9wYXltZW50TGVkZ2VyLmpzIl0sImV4cG9ydHMiOlsiaGFzSXNzdWVyIiwibWFrZUR1cmFibGVJc3N1ZXJLaXQiLCJtYWtlSXNzdWVyS2l0IiwicHJlcGFyZUlzc3VlcktpdCIsInVwZ3JhZGVJc3N1ZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRmFpbCxhc3NlcnRQYXR0ZXJuLG1ha2VTY2FsYXJCaWdNYXBTdG9yZSxtYWtlRHVyYWJsZVpvbmUsQXNzZXRLaW5kLGFzc2VydEFzc2V0S2luZCxjb2VyY2VEaXNwbGF5SW5mbyxwcmVwYXJlUGF5bWVudExlZGdlcjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaM2PX2EgPT4gKGFzc2VydCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ01hcFN0b3JlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy96b25lL2R1cmFibGUuanNcIiwgW1tcIm1ha2VEdXJhYmxlWm9uZVwiLCBbJGjNj19hID0+IChtYWtlRHVyYWJsZVpvbmUgPSAkaM2PX2EpXV1dXSxbXCIuL2Ftb3VudE1hdGguanNcIiwgW1tcIkFzc2V0S2luZFwiLCBbJGjNj19hID0+IChBc3NldEtpbmQgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0QXNzZXRLaW5kXCIsIFskaM2PX2EgPT4gKGFzc2VydEFzc2V0S2luZCA9ICRozY9fYSldXV1dLFtcIi4vZGlzcGxheUluZm8uanNcIiwgW1tcImNvZXJjZURpc3BsYXlJbmZvXCIsIFskaM2PX2EgPT4gKGNvZXJjZURpc3BsYXlJbmZvID0gJGjNj19hKV1dXV0sW1wiLi9wYXltZW50TGVkZ2VyLmpzXCIsIFtbXCJwcmVwYXJlUGF5bWVudExlZGdlclwiLCBbJGjNj19hID0+IChwcmVwYXJlUGF5bWVudExlZGdlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBzZXR1cElzc3VlcktpdD0oXG57bmFtZSxhc3NldEtpbmQsZGlzcGxheUluZm8sZWxlbWVudFNoYXBlfSxcbmlzc3VlclpvbmUsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkKT0+XG57XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuYXNzZXJ0QXNzZXRLaW5kKGFzc2V0S2luZCk7XG5cbi8vXG5jb25zdCBjbGVhbkRpc3BsYXlJbmZvPWNvZXJjZURpc3BsYXlJbmZvKGRpc3BsYXlJbmZvLGFzc2V0S2luZCk7XG5pZihvcHRTaHV0ZG93bldpdGhGYWlsdXJlIT09dW5kZWZpbmVkKXtcbmFzc2VydC50eXBlb2Yob3B0U2h1dGRvd25XaXRoRmFpbHVyZSwnZnVuY3Rpb24nKTtcbiB9XG5cbmlmKGVsZW1lbnRTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGVsZW1lbnRTaGFwZSk7XG4gfVxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0e2lzc3VlcixtaW50LGJyYW5kLG1pbnRSZWNvdmVyeVB1cnNlfT1wcmVwYXJlUGF5bWVudExlZGdlcihcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuY2xlYW5EaXNwbGF5SW5mbyxcbmVsZW1lbnRTaGFwZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG5icmFuZCxcbmlzc3Vlcixcbm1pbnQsXG5taW50UmVjb3ZlcnlQdXJzZSxcbmRpc3BsYXlJbmZvOmNsZWFuRGlzcGxheUluZm99KTtcblxuIH07XG5oYXJkZW4oc2V0dXBJc3N1ZXJLaXQpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBJTlNUQU5DRV9LRVk9J2lzc3Vlcic7XG4vKlxuXG5cblxuICovXG5jb25zdCBSRUNPVkVSWV9TRVRTX1NUQVRFPSdyZWNvdmVyeVNldHNTdGF0ZSc7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1cGdyYWRlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCxcbnJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWQpPT5cbntcbmNvbnN0IGlzc3VlclJlY29yZD1pc3N1ZXJCYWdnYWdlLmdldChJTlNUQU5DRV9LRVkpO1xuY29uc3QgaXNzdWVyWm9uZT1tYWtlRHVyYWJsZVpvbmUoaXNzdWVyQmFnZ2FnZSk7XG5jb25zdCBvbGRSZWNvdmVyeVNldHNTdGF0ZT1pc3N1ZXJCYWdnYWdlLmhhcyhSRUNPVkVSWV9TRVRTX1NUQVRFKT9cbmlzc3VlckJhZ2dhZ2UuZ2V0KFJFQ09WRVJZX1NFVFNfU1RBVEUpOlxuJ2hhc1JlY292ZXJ5U2V0cyc7XG5pZihcbm9sZFJlY292ZXJ5U2V0c1N0YXRlPT09J25vUmVjb3ZlcnlTZXRzJyYmXG5yZWNvdmVyeVNldHNPcHRpb249PT0naGFzUmVjb3ZlcnlTZXRzJylcbntcbkZhaWwgYENhbm5vdCAoeWV0PykgdXBncmFkZSBmcm9tICdub1JlY292ZXJ5U2V0cycgdG8gJ2hhc1JlY292ZXJ5U2V0cydgO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHJlY292ZXJ5U2V0c1N0YXRlPXJlY292ZXJ5U2V0c09wdGlvbnx8b2xkUmVjb3ZlcnlTZXRzU3RhdGU7XG5yZXR1cm4gc2V0dXBJc3N1ZXJLaXQoXG5pc3N1ZXJSZWNvcmQsXG5pc3N1ZXJab25lLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKTtcblxuIH07JGjNj19vbmNlLnVwZ3JhZGVJc3N1ZXJLaXQodXBncmFkZUlzc3VlcktpdCk7XG5oYXJkZW4odXBncmFkZUlzc3VlcktpdCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBoYXNJc3N1ZXI9KGJhZ2dhZ2UpPT5iYWdnYWdlLmhhcyhJTlNUQU5DRV9LRVkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaGFzSXNzdWVyKGhhc0lzc3Vlcik7XG5jb25zdCAgICAgICAgbWFrZUR1cmFibGVJc3N1ZXJLaXQ9KFxuaXNzdWVyQmFnZ2FnZSxcbm5hbWUsXG4vL1xuYXNzZXRLaW5kPUFzc2V0S2luZC5OQVQsXG5kaXNwbGF5SW5mbz1oYXJkZW4oe30pLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZT11bmRlZmluZWQsXG57ZWxlbWVudFNoYXBlPXVuZGVmaW5lZCxyZWNvdmVyeVNldHNPcHRpb249dW5kZWZpbmVkfT17fSk9Plxue1xuY29uc3QgaXNzdWVyRGF0YT1oYXJkZW4oe1xubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxuZWxlbWVudFNoYXBlfSk7XG5cbmlzc3VlckJhZ2dhZ2UuaW5pdChJTlNUQU5DRV9LRVksaXNzdWVyRGF0YSk7XG5jb25zdCBpc3N1ZXJab25lPW1ha2VEdXJhYmxlWm9uZShpc3N1ZXJCYWdnYWdlKTtcbmNvbnN0IHJlY292ZXJ5U2V0c1N0YXRlPXJlY292ZXJ5U2V0c09wdGlvbnx8J2hhc1JlY292ZXJ5U2V0cyc7XG5pc3N1ZXJCYWdnYWdlLmluaXQoUkVDT1ZFUllfU0VUU19TVEFURSxyZWNvdmVyeVNldHNTdGF0ZSk7XG5yZXR1cm4gc2V0dXBJc3N1ZXJLaXQoXG5pc3N1ZXJEYXRhLFxuaXNzdWVyWm9uZSxcbnJlY292ZXJ5U2V0c1N0YXRlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSk7XG5cbiB9OyRozY9fb25jZS5tYWtlRHVyYWJsZUlzc3VlcktpdChtYWtlRHVyYWJsZUlzc3VlcktpdCk7XG5oYXJkZW4obWFrZUR1cmFibGVJc3N1ZXJLaXQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlSXNzdWVyS2l0PShcbmlzc3VlckJhZ2dhZ2UsXG5uYW1lLFxuLy9cbmFzc2V0S2luZD1Bc3NldEtpbmQuTkFULFxuZGlzcGxheUluZm89aGFyZGVuKHt9KSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkLFxuLy9cbm9wdGlvbnM9e30pPT5cbntcbmlmKGhhc0lzc3Vlcihpc3N1ZXJCYWdnYWdlKSl7XG5jb25zdHtlbGVtZW50U2hhcGU6Xz11bmRlZmluZWQscmVjb3ZlcnlTZXRzT3B0aW9uPXVuZGVmaW5lZH09XG5vcHRpb25zO1xuY29uc3QgaXNzdWVyS2l0PXVwZ3JhZGVJc3N1ZXJLaXQoXG5pc3N1ZXJCYWdnYWdlLFxub3B0U2h1dGRvd25XaXRoRmFpbHVyZSxcbnJlY292ZXJ5U2V0c09wdGlvbik7XG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG5yZXR1cm4gaXNzdWVyS2l0O1xuIH1lbHNle1xuY29uc3QgaXNzdWVyS2l0PW1ha2VEdXJhYmxlSXNzdWVyS2l0KFxuaXNzdWVyQmFnZ2FnZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5kaXNwbGF5SW5mbyxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmUsXG5vcHRpb25zKTtcblxuLy9cbnJldHVybiBpc3N1ZXJLaXQ7XG4gfVxuIH07JGjNj19vbmNlLnByZXBhcmVJc3N1ZXJLaXQocHJlcGFyZUlzc3VlcktpdCk7XG5oYXJkZW4ocHJlcGFyZUlzc3VlcktpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUlzc3VlcktpdD0oXG5uYW1lLFxuLy9cbmFzc2V0S2luZD1Bc3NldEtpbmQuTkFULFxuZGlzcGxheUluZm89aGFyZGVuKHt9KSxcbm9wdFNodXRkb3duV2l0aEZhaWx1cmU9dW5kZWZpbmVkLFxuLy9cbntlbGVtZW50U2hhcGU9dW5kZWZpbmVkLHJlY292ZXJ5U2V0c09wdGlvbj11bmRlZmluZWR9PXt9KT0+XG5cbi8vXG5tYWtlRHVyYWJsZUlzc3VlcktpdChcbm1ha2VTY2FsYXJCaWdNYXBTdG9yZSgnZHJvcHBlZCBpc3N1ZXIga2l0Jyx7ZHVyYWJsZTp0cnVlfSksXG5uYW1lLFxuYXNzZXRLaW5kLFxuZGlzcGxheUluZm8sXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlLFxue2VsZW1lbnRTaGFwZSxyZWNvdmVyeVNldHNPcHRpb259KTskaM2PX29uY2UubWFrZUlzc3VlcktpdChtYWtlSXNzdWVyS2l0KTtcblxuaGFyZGVuKG1ha2VJc3N1ZXJLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidXBncmFkZUlzc3VlcktpdCI6WyJ1cGdyYWRlSXNzdWVyS2l0Il0sImhhc0lzc3VlciI6WyJoYXNJc3N1ZXIiXSwibWFrZUR1cmFibGVJc3N1ZXJLaXQiOlsibWFrZUR1cmFibGVJc3N1ZXJLaXQiXSwicHJlcGFyZUlzc3VlcktpdCI6WyJwcmVwYXJlSXNzdWVyS2l0Il0sIm1ha2VJc3N1ZXJLaXQiOlsibWFrZUlzc3VlcktpdCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADfxm6nEAYAABAGAAA6AAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL2NvcHlCYWdNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIl0sImV4cG9ydHMiOlsiY29weUJhZ01hdGhIZWxwZXJzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQga2V5RVEsbWFrZUNvcHlCYWcsbXVzdE1hdGNoLE0sZ2V0Q29weUJhZ0VudHJpZXMsYmFnSXNTdXBlcmJhZyxiYWdVbmlvbixiYWdEaXNqb2ludFN1YnRyYWN0OyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlCYWdcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlCYWcgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiZ2V0Q29weUJhZ0VudHJpZXNcIiwgWyRozY9fYSA9PiAoZ2V0Q29weUJhZ0VudHJpZXMgPSAkaM2PX2EpXV0sW1wiYmFnSXNTdXBlcmJhZ1wiLCBbJGjNj19hID0+IChiYWdJc1N1cGVyYmFnID0gJGjNj19hKV1dLFtcImJhZ1VuaW9uXCIsIFskaM2PX2EgPT4gKGJhZ1VuaW9uID0gJGjNj19hKV1dLFtcImJhZ0Rpc2pvaW50U3VidHJhY3RcIiwgWyRozY9fYSA9PiAoYmFnRGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW1wdHk9bWFrZUNvcHlCYWcoW10pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb3B5QmFnTWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihiYWcpPT57XG5tdXN0TWF0Y2goYmFnLE0uYmFnKCksJ2JhZyBvZiBhbW91bnQnKTtcbnJldHVybiBiYWc7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eTooYmFnKT0+Z2V0Q29weUJhZ0VudHJpZXMoYmFnKS5sZW5ndGg9PT0wLFxuZG9Jc0dURTpiYWdJc1N1cGVyYmFnLFxuZG9Jc0VxdWFsOmtleUVRLFxuZG9BZGQ6YmFnVW5pb24sXG5kb1N1YnRyYWN0OmJhZ0Rpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2UuY29weUJhZ01hdGhIZWxwZXJzKGNvcHlCYWdNYXRoSGVscGVycyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjb3B5QmFnTWF0aEhlbHBlcnMiOlsiY29weUJhZ01hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAF7BS2/OBQAAzgUAADoAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvY29weVNldE1hdGhIZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJjb3B5U2V0TWF0aEhlbHBlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBrZXlFUSxtYWtlQ29weVNldCxtdXN0TWF0Y2gsTSxnZXRDb3B5U2V0S2V5cyxzZXRJc1N1cGVyc2V0LHNldERpc2pvaW50VW5pb24sc2V0RGlzam9pbnRTdWJ0cmFjdDskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW1tcImtleUVRXCIsIFskaM2PX2EgPT4gKGtleUVRID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5U2V0XCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5U2V0ID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcImdldENvcHlTZXRLZXlzXCIsIFskaM2PX2EgPT4gKGdldENvcHlTZXRLZXlzID0gJGjNj19hKV1dLFtcInNldElzU3VwZXJzZXRcIiwgWyRozY9fYSA9PiAoc2V0SXNTdXBlcnNldCA9ICRozY9fYSldXSxbXCJzZXREaXNqb2ludFVuaW9uXCIsIFskaM2PX2EgPT4gKHNldERpc2pvaW50VW5pb24gPSAkaM2PX2EpXV0sW1wic2V0RGlzam9pbnRTdWJ0cmFjdFwiLCBbJGjNj19hID0+IChzZXREaXNqb2ludFN1YnRyYWN0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PW1ha2VDb3B5U2V0KFtdKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBjb3B5U2V0TWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihzZXQpPT57XG5tdXN0TWF0Y2goc2V0LE0uc2V0KCksJ3NldCBvZiBhbW91bnQnKTtcbnJldHVybiBzZXQ7XG4gfSxcbmRvTWFrZUVtcHR5OigpPT5lbXB0eSxcbmRvSXNFbXB0eTooc2V0KT0+Z2V0Q29weVNldEtleXMoc2V0KS5sZW5ndGg9PT0wLFxuZG9Jc0dURTpzZXRJc1N1cGVyc2V0LFxuZG9Jc0VxdWFsOmtleUVRLFxuZG9BZGQ6c2V0RGlzam9pbnRVbmlvbixcbmRvU3VidHJhY3Q6c2V0RGlzam9pbnRTdWJ0cmFjdH0pOyRozY9fb25jZS5jb3B5U2V0TWF0aEhlbHBlcnMoY29weVNldE1hdGhIZWxwZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImNvcHlTZXRNYXRoSGVscGVycyI6WyJjb3B5U2V0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAmYWgJpYEAACWBAAANgAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9uYXRNYXRoSGVscGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9uYXQiXSwiZXhwb3J0cyI6WyJuYXRNYXRoSGVscGVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsTmF0LGlzTmF0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjNj19hID0+IChOYXQgPSAkaM2PX2EpXV0sW1wiaXNOYXRcIiwgWyRozY9fYSA9PiAoaXNOYXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgZW1wdHk9MG47XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBuYXRNYXRoSGVscGVycz1oYXJkZW4oe1xuZG9Db2VyY2U6KG5hdCk9Pntcbi8vXG5hc3NlcnQudHlwZW9mKG5hdCwnYmlnaW50Jyk7XG5pc05hdChuYXQpfHxGYWlsIGB2YWx1ZSAke25hdH0gbXVzdCBiZSBhIG5hdHVyYWwgbnVtYmVyYDtcbnJldHVybiBOYXQobmF0KTtcbiB9LFxuZG9NYWtlRW1wdHk6KCk9PmVtcHR5LFxuZG9Jc0VtcHR5OihuYXQpPT5uYXQ9PT1lbXB0eSxcbmRvSXNHVEU6KGxlZnQscmlnaHQpPT5sZWZ0Pj1yaWdodCxcbmRvSXNFcXVhbDoobGVmdCxyaWdodCk9PmxlZnQ9PT1yaWdodCxcbi8vXG5kb0FkZDoobGVmdCxyaWdodCk9PmxlZnQrcmlnaHQsXG5kb1N1YnRyYWN0OihsZWZ0LHJpZ2h0KT0+TmF0KGxlZnQtcmlnaHQpfSk7JGjNj19vbmNlLm5hdE1hdGhIZWxwZXJzKG5hdE1hdGhIZWxwZXJzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im5hdE1hdGhIZWxwZXJzIjpbIm5hdE1hdGhIZWxwZXJzIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFYLCPF3BgAAdwYAADYAAABAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvc2V0TWF0aEhlbHBlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJzZXRNYXRoSGVscGVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhc3NTdHlsZU9mLGFzc2VydEtleSxlbGVtZW50c0lzU3VwZXJzZXQsZWxlbWVudHNEaXNqb2ludFVuaW9uLGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCxjb2VyY2VUb0VsZW1lbnRzLGVsZW1lbnRzQ29tcGFyZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJlbGVtZW50c0lzU3VwZXJzZXRcIiwgWyRozY9fYSA9PiAoZWxlbWVudHNJc1N1cGVyc2V0ID0gJGjNj19hKV1dLFtcImVsZW1lbnRzRGlzam9pbnRVbmlvblwiLCBbJGjNj19hID0+IChlbGVtZW50c0Rpc2pvaW50VW5pb24gPSAkaM2PX2EpXV0sW1wiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0XCIsIFskaM2PX2EgPT4gKGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCA9ICRozY9fYSldXSxbXCJjb2VyY2VUb0VsZW1lbnRzXCIsIFskaM2PX2EgPT4gKGNvZXJjZVRvRWxlbWVudHMgPSAkaM2PX2EpXV0sW1wiZWxlbWVudHNDb21wYXJlXCIsIFskaM2PX2EgPT4gKGVsZW1lbnRzQ29tcGFyZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVtcHR5PWhhcmRlbihbXSk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgc2V0TWF0aEhlbHBlcnM9aGFyZGVuKHtcbmRvQ29lcmNlOihsaXN0KT0+e1xubGlzdD1jb2VyY2VUb0VsZW1lbnRzKGxpc3QpO1xuLy9cbi8vXG4vL1xuLy9cbmFzc2VydEtleShsaXN0KTtcbnJldHVybiBsaXN0O1xuIH0sXG5kb01ha2VFbXB0eTooKT0+ZW1wdHksXG5kb0lzRW1wdHk6KGxpc3QpPT5wYXNzU3R5bGVPZihsaXN0KT09PSdjb3B5QXJyYXknJiZsaXN0Lmxlbmd0aD09PTAsXG5kb0lzR1RFOmVsZW1lbnRzSXNTdXBlcnNldCxcbmRvSXNFcXVhbDooeCx5KT0+ZWxlbWVudHNDb21wYXJlKHgseSk9PT0wLFxuZG9BZGQ6ZWxlbWVudHNEaXNqb2ludFVuaW9uLFxuZG9TdWJ0cmFjdDplbGVtZW50c0Rpc2pvaW50U3VidHJhY3R9KTskaM2PX29uY2Uuc2V0TWF0aEhlbHBlcnMoc2V0TWF0aEhlbHBlcnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic2V0TWF0aEhlbHBlcnMiOlsic2V0TWF0aEhlbHBlcnMiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAjb9p3rIDAACyAwAAIwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50LmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUGF5bWVudEtpbmQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpbml0RW1wdHk7JGjNj19pbXBvcnRzKFtbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJpbml0RW1wdHlcIiwgWyRozY9fYSA9PiAoaW5pdEVtcHR5ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vL1xuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHByZXBhcmVQYXltZW50S2luZD0oaXNzdWVyWm9uZSxuYW1lLGJyYW5kLFBheW1lbnRJKT0+e1xuY29uc3QgbWFrZVBheW1lbnQ9aXNzdWVyWm9uZS5leG9DbGFzcyhcbiBgJHtuYW1lfSBwYXltZW50YCxcblBheW1lbnRJLFxuaW5pdEVtcHR5LFxue1xuZ2V0QWxsZWdlZEJyYW5kKCl7XG5yZXR1cm4gYnJhbmQ7XG4gfX0pO1xuXG5cbi8vXG5yZXR1cm4gbWFrZVBheW1lbnQ7XG4gfTskaM2PX29uY2UucHJlcGFyZVBheW1lbnRLaW5kKHByZXBhcmVQYXltZW50S2luZCk7XG5oYXJkZW4ocHJlcGFyZVBheW1lbnRLaW5kKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVQYXltZW50S2luZCI6WyJwcmVwYXJlUGF5bWVudEtpbmQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkinqOxogAAAaIAAAKQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50TGVkZ2VyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Byb21pc2Uta2l0IiwiQGFnb3JpYy9zdG9yZSIsIi4vYW1vdW50TWF0aC5qcyIsIi4vcGF5bWVudC5qcyIsIi4vcHVyc2UuanMiLCIuL3R5cGVHdWFyZHMuanMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUGF5bWVudExlZGdlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgscSxGYWlsLGFubm90YXRlRXJyb3IsaXNQcm9taXNlLG11c3RNYXRjaCxNLGtleUVRLEFtb3VudE1hdGgscHJlcGFyZVBheW1lbnRLaW5kLHByZXBhcmVQdXJzZUtpbmQsQnJhbmRJLG1ha2VJc3N1ZXJJbnRlcmZhY2VzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaM2PX2EgPT4gKGlzUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcImtleUVRXCIsIFskaM2PX2EgPT4gKGtleUVRID0gJGjNj19hKV1dXV0sW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXSxbXCIuL3BheW1lbnQuanNcIiwgW1tcInByZXBhcmVQYXltZW50S2luZFwiLCBbJGjNj19hID0+IChwcmVwYXJlUGF5bWVudEtpbmQgPSAkaM2PX2EpXV1dXSxbXCIuL3B1cnNlLmpzXCIsIFtbXCJwcmVwYXJlUHVyc2VLaW5kXCIsIFskaM2PX2EgPT4gKHByZXBhcmVQdXJzZUtpbmQgPSAkaM2PX2EpXV1dXSxbXCIuL3R5cGVHdWFyZHMuanNcIiwgW1tcIkJyYW5kSVwiLCBbJGjNj19hID0+IChCcmFuZEkgPSAkaM2PX2EpXV0sW1wibWFrZUlzc3VlckludGVyZmFjZXNcIiwgWyRozY9fYSA9PiAobWFrZUlzc3VlckludGVyZmFjZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgYW1vdW50U2hhcGVGcm9tRWxlbWVudFNoYXBlPShicmFuZCxhc3NldEtpbmQsZWxlbWVudFNoYXBlKT0+e1xubGV0IHZhbHVlU2hhcGU7XG5zd2l0Y2goYXNzZXRLaW5kKXtcbmNhc2UnbmF0Jzp7XG52YWx1ZVNoYXBlPU0ubmF0KCk7XG5lbGVtZW50U2hhcGU9PT11bmRlZmluZWR8fFxuRmFpbCBgRnVuZ2libGUgYXNzZXRzIGNhbm5vdCBoYXZlIGFuIGVsZW1lbnRTaGFwZTogJHtxKGVsZW1lbnRTaGFwZSl9YDtcbmJyZWFrO1xuIH1cbmNhc2Unc2V0Jzp7XG5pZihlbGVtZW50U2hhcGU9PT11bmRlZmluZWQpe1xudmFsdWVTaGFwZT1NLmFycmF5T2YoTS5rZXkoKSk7XG4gfWVsc2V7XG52YWx1ZVNoYXBlPU0uYXJyYXlPZihNLmFuZChNLmtleSgpLGVsZW1lbnRTaGFwZSkpO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVNldCc6e1xuaWYoZWxlbWVudFNoYXBlPT09dW5kZWZpbmVkKXtcbnZhbHVlU2hhcGU9TS5zZXQoKTtcbiB9ZWxzZXtcbnZhbHVlU2hhcGU9TS5zZXRPZihlbGVtZW50U2hhcGUpO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weUJhZyc6e1xuaWYoZWxlbWVudFNoYXBlPT09dW5kZWZpbmVkKXtcbnZhbHVlU2hhcGU9TS5iYWcoKTtcbiB9ZWxzZXtcbnZhbHVlU2hhcGU9TS5iYWdPZihlbGVtZW50U2hhcGUpO1xuIH1cbmJyZWFrO1xuIH1cbmRlZmF1bHQ6e1xuRmFpbCBgdW5leHBlY3RlZCBhc3NldCBraW5kICR7cShhc3NldEtpbmQpfWA7XG4gfX1cblxuXG5jb25zdCBhbW91bnRTaGFwZT1oYXJkZW4oe1xuYnJhbmQsLy9cbnZhbHVlOnZhbHVlU2hhcGV9KTtcblxucmV0dXJuIGFtb3VudFNoYXBlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUGF5bWVudExlZGdlcj0oXG5pc3N1ZXJab25lLFxubmFtZSxcbmFzc2V0S2luZCxcbmRpc3BsYXlJbmZvLFxuZWxlbWVudFNoYXBlLFxucmVjb3ZlcnlTZXRzU3RhdGUsXG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlPXVuZGVmaW5lZCk9Plxue1xuLyogICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBicmFuZD1pc3N1ZXJab25lLmV4byggYCR7bmFtZX0gYnJhbmRgLEJyYW5kSSx7XG5pc015SXNzdWVyKGFsbGVnZWRJc3N1ZXIpe1xuLy9cbnJldHVybiBhbGxlZ2VkSXNzdWVyPT09aXNzdWVyO1xuIH0sXG5nZXRBbGxlZ2VkTmFtZSgpe1xucmV0dXJuIG5hbWU7XG4gfSxcbi8vXG5nZXREaXNwbGF5SW5mbygpe1xucmV0dXJuIGRpc3BsYXlJbmZvO1xuIH0sXG5nZXRBbW91bnRTaGFwZSgpe1xucmV0dXJuIGFtb3VudFNoYXBlO1xuIH19KTtcblxuXG5jb25zdCBhbW91bnRTaGFwZT1hbW91bnRTaGFwZUZyb21FbGVtZW50U2hhcGUoXG5icmFuZCxcbmFzc2V0S2luZCxcbmVsZW1lbnRTaGFwZSk7XG5cblxuY29uc3R7SXNzdWVySSxNaW50SSxQYXltZW50SSxQdXJzZUlLaXR9PW1ha2VJc3N1ZXJJbnRlcmZhY2VzKFxuYnJhbmQsXG5hc3NldEtpbmQsXG5hbW91bnRTaGFwZSk7XG5cblxuY29uc3QgbWFrZVBheW1lbnQ9cHJlcGFyZVBheW1lbnRLaW5kKGlzc3VlclpvbmUsbmFtZSxicmFuZCxQYXltZW50SSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHNodXRkb3duTGVkZ2VyV2l0aEZhaWx1cmU9KHJlYXNvbik9Pntcbi8vXG4vL1xuaWYob3B0U2h1dGRvd25XaXRoRmFpbHVyZSE9PXVuZGVmaW5lZCl7XG50cnl7XG5vcHRTaHV0ZG93bldpdGhGYWlsdXJlKHJlYXNvbik7XG4gfWNhdGNoKGVyckluU2h1dGRvd24pe1xuYW5ub3RhdGVFcnJvcihlcnJJblNodXRkb3duLFggYENhdXNlZCBieTogJHtyZWFzb259YCk7XG50aHJvdyBlcnJJblNodXRkb3duO1xuIH1cbiB9XG50aHJvdyByZWFzb247XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBheW1lbnRMZWRnZXI9aXNzdWVyWm9uZS53ZWFrTWFwU3RvcmUoJ3BheW1lbnRMZWRnZXInLHtcbnZhbHVlU2hhcGU6YW1vdW50U2hhcGV9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwYXltZW50UmVjb3ZlcnlTZXRzPWlzc3VlclpvbmUud2Vha01hcFN0b3JlKCdwYXltZW50UmVjb3ZlcnlTZXRzJyk7XG5cbi8qXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgaW5pdFBheW1lbnQ9KHBheW1lbnQsYW1vdW50LG9wdFJlY292ZXJ5U2V0PXVuZGVmaW5lZCk9PntcbmlmKHJlY292ZXJ5U2V0c1N0YXRlPT09J25vUmVjb3ZlcnlTZXRzJyl7XG5vcHRSZWNvdmVyeVNldD09PXVuZGVmaW5lZHx8XG5GYWlsIGB3aGVuIHJlY292ZXJTZXRzU3RhdGUgPT09ICdub1JlY292ZXJ5U2V0cycsIG9wdFJlY292ZXJ5U2V0IG11c3QgYmUgZW1wdHlgO1xuIH1cbmlmKG9wdFJlY292ZXJ5U2V0IT09dW5kZWZpbmVkJiYhQW1vdW50TWF0aC5pc0VtcHR5KGFtb3VudCkpe1xub3B0UmVjb3ZlcnlTZXQuYWRkKHBheW1lbnQpO1xucGF5bWVudFJlY292ZXJ5U2V0cy5pbml0KHBheW1lbnQsb3B0UmVjb3ZlcnlTZXQpO1xuIH1cbnBheW1lbnRMZWRnZXIuaW5pdChwYXltZW50LGFtb3VudCk7XG4gfTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGRlbGV0ZVBheW1lbnQ9KHBheW1lbnQpPT57XG5wYXltZW50TGVkZ2VyLmRlbGV0ZShwYXltZW50KTtcbmlmKHBheW1lbnRSZWNvdmVyeVNldHMuaGFzKHBheW1lbnQpKXtcbmNvbnN0IHJlY292ZXJ5U2V0PXBheW1lbnRSZWNvdmVyeVNldHMuZ2V0KHBheW1lbnQpO1xucGF5bWVudFJlY292ZXJ5U2V0cy5kZWxldGUocGF5bWVudCk7XG5yZWNvdmVyeVNldC5kZWxldGUocGF5bWVudCk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29lcmNlPShhbGxlZ2VkQW1vdW50KT0+QW1vdW50TWF0aC5jb2VyY2UoYnJhbmQsYWxsZWdlZEFtb3VudCk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgYXNzZXJ0QW1vdW50Q29uc2lzdGVudD0ocGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUpPT57XG5pZihvcHRBbW91bnRTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2gocGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUsJ2Ftb3VudCcpO1xuIH1cbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBhc3NlcnRMaXZlUGF5bWVudD0ocGF5bWVudCk9PntcbnBheW1lbnRMZWRnZXIuaGFzKHBheW1lbnQpfHxcbkZhaWwgYCR7cGF5bWVudH0gd2FzIG5vdCBhIGxpdmUgcGF5bWVudCBmb3IgYnJhbmQgJHtxKFxuYnJhbmQpXG4gfS4gSXQgY291bGQgYmUgYSB1c2VkLXVwIHBheW1lbnQsIGEgcGF5bWVudCBmb3IgYW5vdGhlciBicmFuZCwgb3IgaXQgbWlnaHQgbm90IGJlIGEgcGF5bWVudCBhdCBhbGwuYDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlcG9zaXRJbnRlcm5hbD0oXG5iYWxhbmNlU3RvcmUsXG5zcmNQYXltZW50LFxub3B0QW1vdW50U2hhcGU9dW5kZWZpbmVkKT0+XG57XG4haXNQcm9taXNlKHNyY1BheW1lbnQpfHxcbmFzc2VydC5mYWlsKFxuIGBkZXBvc2l0IGRvZXMgbm90IGFjY2VwdCBwcm9taXNlcyBhcyBmaXJzdCBhcmd1bWVudC4gSW5zdGVhZCBvZiBwYXNzaW5nIHRoZSBwcm9taXNlIChkZXBvc2l0KHBheW1lbnRQcm9taXNlKSksIGNvbnNpZGVyIHVud3JhcHBpbmcgdGhlIHByb21pc2UgZmlyc3Q6IEUud2hlbihwYXltZW50UHJvbWlzZSwgKGFjdHVhbFBheW1lbnQgPT4gZGVwb3NpdChhY3R1YWxQYXltZW50KSlgLFxuVHlwZUVycm9yKTtcblxuYXNzZXJ0TGl2ZVBheW1lbnQoc3JjUGF5bWVudCk7XG5jb25zdCBzcmNQYXltZW50QmFsYW5jZT1wYXltZW50TGVkZ2VyLmdldChzcmNQYXltZW50KTtcbmFzc2VydEFtb3VudENvbnNpc3RlbnQoc3JjUGF5bWVudEJhbGFuY2Usb3B0QW1vdW50U2hhcGUpO1xudHJ5e1xuLy9cbi8vXG4vL1xuZGVsZXRlUGF5bWVudChzcmNQYXltZW50KTtcbmJhbGFuY2VTdG9yZS5pbmNyZW1lbnQoc3JjUGF5bWVudEJhbGFuY2UpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbnJldHVybiBzcmNQYXltZW50QmFsYW5jZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHdpdGhkcmF3SW50ZXJuYWw9KGJhbGFuY2VTdG9yZSxhbW91bnQscmVjb3ZlcnlTZXQ9dW5kZWZpbmVkKT0+e1xuYW1vdW50PWNvZXJjZShhbW91bnQpO1xuY29uc3QgcGF5bWVudD1tYWtlUGF5bWVudCgpO1xuLy9cbi8vXG5iYWxhbmNlU3RvcmUuZGVjcmVtZW50KGFtb3VudCl8fFxuRmFpbCBgV2l0aGRyYXdhbCBvZiAke2Ftb3VudH0gZmFpbGVkIGJlY2F1c2UgdGhlIHB1cnNlIG9ubHkgY29udGFpbmVkICR7YmFsYW5jZVN0b3JlLmdldEFtb3VudCgpfWA7XG50cnl7XG5pbml0UGF5bWVudChwYXltZW50LGFtb3VudCxyZWNvdmVyeVNldCk7XG4gfWNhdGNoKGVycil7XG5zaHV0ZG93bkxlZGdlcldpdGhGYWlsdXJlKGVycik7XG50aHJvdyBlcnI7XG4gfVxucmV0dXJuIHBheW1lbnQ7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBtYWtlRW1wdHlQdXJzZT1wcmVwYXJlUHVyc2VLaW5kKFxuaXNzdWVyWm9uZSxcbm5hbWUsXG5hc3NldEtpbmQsXG5icmFuZCxcblB1cnNlSUtpdCxcbmhhcmRlbih7XG5kZXBvc2l0SW50ZXJuYWwsXG53aXRoZHJhd0ludGVybmFsfSksXG5cbnJlY292ZXJ5U2V0c1N0YXRlLFxucGF5bWVudFJlY292ZXJ5U2V0cyk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgaXNzdWVyPWlzc3VlclpvbmUuZXhvKCBgJHtuYW1lfSBpc3N1ZXJgLElzc3Vlckkse1xuZ2V0QnJhbmQoKXtcbnJldHVybiBicmFuZDtcbiB9LFxuZ2V0QWxsZWdlZE5hbWUoKXtcbnJldHVybiBuYW1lO1xuIH0sXG5nZXRBc3NldEtpbmQoKXtcbnJldHVybiBhc3NldEtpbmQ7XG4gfSxcbmdldERpc3BsYXlJbmZvKCl7XG5yZXR1cm4gZGlzcGxheUluZm87XG4gfSxcbm1ha2VFbXB0eVB1cnNlKCl7XG5yZXR1cm4gbWFrZUVtcHR5UHVyc2UoKTtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5pc0xpdmUocGF5bWVudCl7XG4vL1xucmV0dXJuIHBheW1lbnRMZWRnZXIuaGFzKHBheW1lbnQpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldEFtb3VudE9mKHBheW1lbnQpe1xuLy9cbmFzc2VydExpdmVQYXltZW50KHBheW1lbnQpO1xucmV0dXJuIHBheW1lbnRMZWRnZXIuZ2V0KHBheW1lbnQpO1xuIH0sXG4vKlxuXG5cbiAgICAgKi9cbmJ1cm4ocGF5bWVudCxvcHRBbW91bnRTaGFwZT11bmRlZmluZWQpe1xuLy9cbmFzc2VydExpdmVQYXltZW50KHBheW1lbnQpO1xuY29uc3QgcGF5bWVudEJhbGFuY2U9cGF5bWVudExlZGdlci5nZXQocGF5bWVudCk7XG5hc3NlcnRBbW91bnRDb25zaXN0ZW50KHBheW1lbnRCYWxhbmNlLG9wdEFtb3VudFNoYXBlKTtcbnRyeXtcbi8vXG5kZWxldGVQYXltZW50KHBheW1lbnQpO1xuIH1jYXRjaChlcnIpe1xuc2h1dGRvd25MZWRnZXJXaXRoRmFpbHVyZShlcnIpO1xudGhyb3cgZXJyO1xuIH1cbnJldHVybiBwYXltZW50QmFsYW5jZTtcbiB9fSk7XG5cblxuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWludFJlY292ZXJ5UHVyc2U9LyogICAgICAgICAgICAgICAgICAgKi9cbmlzc3VlclpvbmUubWFrZU9uY2UoJ21pbnRSZWNvdmVyeVB1cnNlJywoKT0+bWFrZUVtcHR5UHVyc2UoKSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWludD1pc3N1ZXJab25lLmV4byggYCR7bmFtZX0gbWludGAsTWludEkse1xuZ2V0SXNzdWVyKCl7XG5yZXR1cm4gaXNzdWVyO1xuIH0sXG5taW50UGF5bWVudChuZXdBbW91bnQpe1xubmV3QW1vdW50PWNvZXJjZShuZXdBbW91bnQpO1xubXVzdE1hdGNoKG5ld0Ftb3VudCxhbW91bnRTaGFwZSwnbWludGVkIGFtb3VudCcpO1xuLy9cbi8vXG5jb25zdCByYXdQYXltZW50PW1ha2VQYXltZW50KCk7XG5pbml0UGF5bWVudChyYXdQYXltZW50LG5ld0Ftb3VudCx1bmRlZmluZWQpO1xuXG5jb25zdCBtaW50UmVjb3ZlcnlQdXJzZUJlZm9yZT1taW50UmVjb3ZlcnlQdXJzZS5nZXRDdXJyZW50QW1vdW50KCk7XG5taW50UmVjb3ZlcnlQdXJzZS5kZXBvc2l0KHJhd1BheW1lbnQsbmV3QW1vdW50KTtcbmNvbnN0IHBheW1lbnQ9bWludFJlY292ZXJ5UHVyc2Uud2l0aGRyYXcobmV3QW1vdW50KTtcbmNvbnN0IG1pbnRSZWNvdmVyeVB1cnNlQWZ0ZXI9bWludFJlY292ZXJ5UHVyc2UuZ2V0Q3VycmVudEFtb3VudCgpO1xuYXNzZXJ0KGtleUVRKG1pbnRSZWNvdmVyeVB1cnNlQmVmb3JlLG1pbnRSZWNvdmVyeVB1cnNlQWZ0ZXIpKTtcbnJldHVybiBwYXltZW50O1xuIH19KTtcblxuXG5jb25zdCBpc3N1ZXJLaXQ9aGFyZGVuKHtpc3N1ZXIsbWludCxicmFuZCxtaW50UmVjb3ZlcnlQdXJzZX0pO1xucmV0dXJuIGlzc3VlcktpdDtcbiB9OyRozY9fb25jZS5wcmVwYXJlUGF5bWVudExlZGdlcihwcmVwYXJlUGF5bWVudExlZGdlcik7XG5oYXJkZW4ocHJlcGFyZVBheW1lbnRMZWRnZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicHJlcGFyZVBheW1lbnRMZWRnZXIiOlsicHJlcGFyZVBheW1lbnRMZWRnZXIiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAejD3iekQAADpEAAAIQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wdXJzZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL3N0b3JlIiwiLi9hbW91bnRNYXRoLmpzIiwiLi90cmFuc2llbnROb3RpZmllci5qcyIsIi4vYW1vdW50U3RvcmUuanMiXSwiZXhwb3J0cyI6WyJwcmVwYXJlUHVyc2VLaW5kIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxNLG1ha2VDb3B5U2V0LEFtb3VudE1hdGgsbWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0LG1ha2VBbW91bnRTdG9yZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1ha2VDb3B5U2V0XCIsIFskaM2PX2EgPT4gKG1ha2VDb3B5U2V0ID0gJGjNj19hKV1dXV0sW1wiLi9hbW91bnRNYXRoLmpzXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXSxbXCIuL3RyYW5zaWVudE5vdGlmaWVyLmpzXCIsIFtbXCJtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXRcIiwgWyRozY9fYSA9PiAobWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9hbW91bnRTdG9yZS5qc1wiLCBbW1wibWFrZUFtb3VudFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VBbW91bnRTdG9yZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3QgRU1QVFlfQ09QWV9TRVQ9bWFrZUNvcHlTZXQoW10pO1xuXG4vL1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUHVyc2VLaW5kPShcbmlzc3VlclpvbmUsXG5uYW1lLFxuYXNzZXRLaW5kLFxuYnJhbmQsXG5QdXJzZUlLaXQsXG5wdXJzZU1ldGhvZHMsXG5yZWNvdmVyeVNldHNTdGF0ZSxcbnBheW1lbnRSZWNvdmVyeVNldHMpPT5cbntcbmNvbnN0IGFtb3VudFNoYXBlPWJyYW5kLmdldEFtb3VudFNoYXBlKCk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0e3Byb3ZpZGVOb3RpZmllcix1cGRhdGU6dXBkYXRlQmFsYW5jZX09bWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZVJlY292ZXJ5U2V0PShzdGF0ZSk9PntcbmNvbnN0e3JlY292ZXJ5U2V0fT1zdGF0ZTtcbmlmKHJlY292ZXJ5U2V0c1N0YXRlPT09J2hhc1JlY292ZXJ5U2V0cycpe1xucmV0dXJuIHJlY292ZXJ5U2V0O1xuIH1lbHNle1xucmVjb3ZlcnlTZXRzU3RhdGU9PT0nbm9SZWNvdmVyeVNldHMnfHxcbkZhaWwgYHJlY292ZXJTZXRzU3RhdGUgbXVzdCBiZSBub1JlY292ZXJ5U2V0cyBpZiBpdCBpc24ndCBoYXNSZWNvdmVyU2V0c2A7XG5wYXltZW50UmVjb3ZlcnlTZXRzIT09dW5kZWZpbmVkfHxcbkZhaWwgYHBheW1lbnRSZWNvdmVyeVNldHMgbXVzdCBhbHdheXMgYmUgZGVmaW5lZGA7XG5yZWNvdmVyeVNldC5nZXRTaXplKCk9PT0wfHxcbkZhaWwgYFdpdGggbm9SZWNvdmVyeVNldHMsIHJlY292ZXJ5U2V0IG11c3QgYmUgZW1wdHlgO1xuXG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdHtkZXBvc2l0SW50ZXJuYWwsd2l0aGRyYXdJbnRlcm5hbH09cHVyc2VNZXRob2RzO1xuY29uc3QgbWFrZVB1cnNlS2l0PWlzc3VlclpvbmUuZXhvQ2xhc3NLaXQoXG4gYCR7bmFtZX0gUHVyc2VgLFxuUHVyc2VJS2l0LFxuKCk9PntcbmNvbnN0IGN1cnJlbnRCYWxhbmNlPUFtb3VudE1hdGgubWFrZUVtcHR5KGJyYW5kLGFzc2V0S2luZCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWNvdmVyeVNldD1pc3N1ZXJab25lLmRldGFjaGVkKCkuc2V0U3RvcmUoJ3JlY292ZXJ5IHNldCcpO1xuXG5yZXR1cm57XG5jdXJyZW50QmFsYW5jZSxcbnJlY292ZXJ5U2V0fTtcblxuIH0sXG57XG5wdXJzZTp7XG5kZXBvc2l0KHNyY1BheW1lbnQsb3B0QW1vdW50U2hhcGU9dW5kZWZpbmVkKXtcbi8vXG4vL1xuY29uc3R7c3RhdGV9PXRoaXM7XG5jb25zdHtwdXJzZX09dGhpcy5mYWNldHM7XG5jb25zdCBiYWxhbmNlU3RvcmU9bWFrZUFtb3VudFN0b3JlKHN0YXRlLCdjdXJyZW50QmFsYW5jZScpO1xuLy9cbmNvbnN0IHNyY1BheW1lbnRCYWxhbmNlPWRlcG9zaXRJbnRlcm5hbChcbmJhbGFuY2VTdG9yZSxcbnNyY1BheW1lbnQsXG5vcHRBbW91bnRTaGFwZSk7XG5cbnVwZGF0ZUJhbGFuY2UocHVyc2UsYmFsYW5jZVN0b3JlLmdldEFtb3VudCgpKTtcbnJldHVybiBzcmNQYXltZW50QmFsYW5jZTtcbiB9LFxud2l0aGRyYXcoYW1vdW50KXtcbmNvbnN0e3N0YXRlfT10aGlzO1xuY29uc3R7cHVyc2V9PXRoaXMuZmFjZXRzO1xuXG5jb25zdCBvcHRSZWNvdmVyeVNldD1tYXliZVJlY292ZXJ5U2V0KHN0YXRlKTtcbmNvbnN0IGJhbGFuY2VTdG9yZT1tYWtlQW1vdW50U3RvcmUoc3RhdGUsJ2N1cnJlbnRCYWxhbmNlJyk7XG4vL1xuY29uc3QgcGF5bWVudD13aXRoZHJhd0ludGVybmFsKFxuYmFsYW5jZVN0b3JlLFxuYW1vdW50LFxub3B0UmVjb3ZlcnlTZXQpO1xuXG51cGRhdGVCYWxhbmNlKHB1cnNlLGJhbGFuY2VTdG9yZS5nZXRBbW91bnQoKSk7XG5yZXR1cm4gcGF5bWVudDtcbiB9LFxuZ2V0Q3VycmVudEFtb3VudCgpe1xuY29uc3R7c3RhdGV9PXRoaXM7XG5jb25zdCBiYWxhbmNlU3RvcmU9bWFrZUFtb3VudFN0b3JlKHN0YXRlLCdjdXJyZW50QmFsYW5jZScpO1xucmV0dXJuIGJhbGFuY2VTdG9yZS5nZXRBbW91bnQoKTtcbiB9LFxuZ2V0Q3VycmVudEFtb3VudE5vdGlmaWVyKCl7XG5yZXR1cm4gcHJvdmlkZU5vdGlmaWVyKHRoaXMuZmFjZXRzLnB1cnNlKTtcbiB9LFxuZ2V0QWxsZWdlZEJyYW5kKCl7XG5yZXR1cm4gYnJhbmQ7XG4gfSxcblxuZ2V0RGVwb3NpdEZhY2V0KCl7XG5yZXR1cm4gdGhpcy5mYWNldHMuZGVwb3NpdEZhY2V0O1xuIH0sXG5cbmdldFJlY292ZXJ5U2V0KCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbmNvbnN0IG9wdFJlY292ZXJ5U2V0PW1heWJlUmVjb3ZlcnlTZXQoc3RhdGUpO1xuaWYob3B0UmVjb3ZlcnlTZXQ9PT11bmRlZmluZWQpe1xucmV0dXJuIEVNUFRZX0NPUFlfU0VUO1xuIH1cbnJldHVybiBvcHRSZWNvdmVyeVNldC5zbmFwc2hvdCgpO1xuIH0sXG5yZWNvdmVyQWxsKCl7XG5jb25zdHtzdGF0ZSxmYWNldHN9PXRoaXM7XG5sZXQgYW1vdW50PUFtb3VudE1hdGgubWFrZUVtcHR5KGJyYW5kLGFzc2V0S2luZCk7XG5jb25zdCBvcHRSZWNvdmVyeVNldD1tYXliZVJlY292ZXJ5U2V0KHN0YXRlKTtcbmlmKG9wdFJlY292ZXJ5U2V0PT09dW5kZWZpbmVkKXtcbnJldHVybiBhbW91bnQ7Ly9cbiB9XG5mb3IoY29uc3QgcGF5bWVudCBvZiBvcHRSZWNvdmVyeVNldC5rZXlzKCkpe1xuLy9cbi8vXG5jb25zdCBkZWx0YT1mYWNldHMucHVyc2UuZGVwb3NpdChwYXltZW50KTtcbmFtb3VudD1BbW91bnRNYXRoLmFkZChhbW91bnQsZGVsdGEsYnJhbmQpO1xuIH1cbm9wdFJlY292ZXJ5U2V0LmdldFNpemUoKT09PTB8fFxuRmFpbCBgaW50ZXJuYWw6IFJlbWFpbmluZyB1bnJlY292ZXJlZCBwYXltZW50czogJHtmYWNldHMucHVyc2UuZ2V0UmVjb3ZlcnlTZXQoKX1gO1xucmV0dXJuIGFtb3VudDtcbiB9fSxcblxuZGVwb3NpdEZhY2V0OntcbnJlY2VpdmUoLi4uYXJncyl7XG5yZXR1cm4gdGhpcy5mYWNldHMucHVyc2UuZGVwb3NpdCguLi5hcmdzKTtcbiB9fX0sXG5cblxue1xuc3RhdGVTaGFwZTp7XG5jdXJyZW50QmFsYW5jZTphbW91bnRTaGFwZSxcbnJlY292ZXJ5U2V0Ok0ucmVtb3RhYmxlKCdyZWNvdmVyeVNldCcpfX0pO1xuXG5cblxucmV0dXJuKCk9Pm1ha2VQdXJzZUtpdCgpLnB1cnNlO1xuIH07JGjNj19vbmNlLnByZXBhcmVQdXJzZUtpbmQocHJlcGFyZVB1cnNlS2luZCk7XG5oYXJkZW4ocHJlcGFyZVB1cnNlS2luZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJwcmVwYXJlUHVyc2VLaW5kIjpbInByZXBhcmVQdXJzZUtpbmQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAMcOXKwUGAAAFBgAALQAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy90cmFuc2llbnROb3RpZmllci5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy9zdG9yZSIsIkBhZ29yaWMvbm90aWZpZXIiXSwiZXhwb3J0cyI6WyJtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlLHByb3ZpZGVMYXp5LG1ha2VOb3RpZmllcktpdDskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcInByb3ZpZGVMYXp5XCIsIFskaM2PX2EgPT4gKHByb3ZpZGVMYXp5ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wibWFrZU5vdGlmaWVyS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VOb3RpZmllcktpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLy9cbi8vXG5jb25zdCAgICAgICAgbWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0PSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0cmFuc2llbnROb3RpZmVyS2l0cz1tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKFxuJ3RyYW5zaWVudE5vdGlmZXJLaXRzJyk7XG5cblxuY29uc3QgcHJvdmlkZU5vdGlmaWVyS2l0PShrZXkpPT5cbnByb3ZpZGVMYXp5KHRyYW5zaWVudE5vdGlmZXJLaXRzLGtleSwoKT0+XG5tYWtlTm90aWZpZXJLaXQoa2V5LmdldEN1cnJlbnRBbW91bnQoKSkpO1xuXG5cbmNvbnN0IHByb3ZpZGVOb3RpZmllcj0oa2V5KT0+cHJvdmlkZU5vdGlmaWVyS2l0KGtleSkubm90aWZpZXI7XG5jb25zdCB1cGRhdGU9KGtleSxuZXdWYWx1ZSk9PntcbmlmKHRyYW5zaWVudE5vdGlmZXJLaXRzLmhhcyhrZXkpKXtcbmNvbnN0e3VwZGF0ZXJ9PXRyYW5zaWVudE5vdGlmZXJLaXRzLmdldChrZXkpO1xudXBkYXRlci51cGRhdGVTdGF0ZShuZXdWYWx1ZSk7XG4gfVxuIH07XG5cbnJldHVybntwcm92aWRlTm90aWZpZXIsdXBkYXRlfTtcbiB9OyRozY9fb25jZS5tYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQobWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0KTtcbmhhcmRlbihtYWtlVHJhbnNpZW50Tm90aWZpZXJLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYW5zaWVudE5vdGlmaWVyS2l0IjpbIm1ha2VUcmFuc2llbnROb3RpZmllcktpdCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADB3r+Y+xgAAPsYAAAmAAAAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJBbW91bnRQYXR0ZXJuU2hhcGUiLCJBbW91bnRTaGFwZSIsIkFzc2V0S2luZFNoYXBlIiwiQnJhbmRJIiwiQnJhbmRTaGFwZSIsIkRlcG9zaXRGYWNldFNoYXBlIiwiRGlzcGxheUluZm9TaGFwZSIsIklzc3VlcktpdFNoYXBlIiwiSXNzdWVyU2hhcGUiLCJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiLCJNaW50U2hhcGUiLCJOb3RpZmllclNoYXBlIiwiUGF5bWVudFNoYXBlIiwiUHVyc2VTaGFwZSIsIlJhdGlvU2hhcGUiLCJpc0NvcHlCYWdWYWx1ZSIsImlzQ29weVNldFZhbHVlIiwiaXNOYXRWYWx1ZSIsImlzU2V0VmFsdWUiLCJtYWtlSXNzdWVySW50ZXJmYWNlcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE0sbWF0Y2hlcyxnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dLFtcIm1hdGNoZXNcIiwgWyRozY9fYSA9PiAobWF0Y2hlcyA9ICRozY9fYSldXSxbXCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCAgICAgICAgQnJhbmRTaGFwZT1NLnJlbW90YWJsZSgnQnJhbmQnKTskaM2PX29uY2UuQnJhbmRTaGFwZShCcmFuZFNoYXBlKTtcbmNvbnN0ICAgICAgICBJc3N1ZXJTaGFwZT1NLnJlbW90YWJsZSgnSXNzdWVyJyk7JGjNj19vbmNlLklzc3VlclNoYXBlKElzc3VlclNoYXBlKTtcbmNvbnN0ICAgICAgICBQYXltZW50U2hhcGU9TS5yZW1vdGFibGUoJ1BheW1lbnQnKTskaM2PX29uY2UuUGF5bWVudFNoYXBlKFBheW1lbnRTaGFwZSk7XG5jb25zdCAgICAgICAgUHVyc2VTaGFwZT1NLnJlbW90YWJsZSgnUHVyc2UnKTskaM2PX29uY2UuUHVyc2VTaGFwZShQdXJzZVNoYXBlKTtcbmNvbnN0ICAgICAgICBEZXBvc2l0RmFjZXRTaGFwZT1NLnJlbW90YWJsZSgnRGVwb3NpdEZhY2V0Jyk7JGjNj19vbmNlLkRlcG9zaXRGYWNldFNoYXBlKERlcG9zaXRGYWNldFNoYXBlKTtcbmNvbnN0ICAgICAgICBOb3RpZmllclNoYXBlPU0ucmVtb3RhYmxlKCdOb3RpZmllcicpOyRozY9fb25jZS5Ob3RpZmllclNoYXBlKE5vdGlmaWVyU2hhcGUpO1xuY29uc3QgICAgICAgIE1pbnRTaGFwZT1NLnJlbW90YWJsZSgnTWludCcpO1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuTWludFNoYXBlKE1pbnRTaGFwZSk7XG5jb25zdCBOYXRWYWx1ZVNoYXBlPU0ubmF0KCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBDb3B5U2V0VmFsdWVTaGFwZT1NLnNldCgpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgU2V0VmFsdWVTaGFwZT1NLmFycmF5T2YoTS5rZXkoKSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IENvcHlCYWdWYWx1ZVNoYXBlPU0uYmFnKCk7XG5cbmNvbnN0IEFtb3VudFZhbHVlU2hhcGU9TS5vcihcbk5hdFZhbHVlU2hhcGUsXG5Db3B5U2V0VmFsdWVTaGFwZSxcblNldFZhbHVlU2hhcGUsXG5Db3B5QmFnVmFsdWVTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIEFtb3VudFNoYXBlPXticmFuZDpCcmFuZFNoYXBlLHZhbHVlOkFtb3VudFZhbHVlU2hhcGV9OyRozY9fb25jZS5BbW91bnRTaGFwZShBbW91bnRTaGFwZSk7XG5oYXJkZW4oQW1vdW50U2hhcGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgQW1vdW50UGF0dGVyblNoYXBlPU0ucGF0dGVybigpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLkFtb3VudFBhdHRlcm5TaGFwZShBbW91bnRQYXR0ZXJuU2hhcGUpO1xuY29uc3QgICAgICAgIFJhdGlvU2hhcGU9e251bWVyYXRvcjpBbW91bnRTaGFwZSxkZW5vbWluYXRvcjpBbW91bnRTaGFwZX07JGjNj19vbmNlLlJhdGlvU2hhcGUoUmF0aW9TaGFwZSk7XG5oYXJkZW4oUmF0aW9TaGFwZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzTmF0VmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxOYXRWYWx1ZVNoYXBlKTskaM2PX29uY2UuaXNOYXRWYWx1ZShpc05hdFZhbHVlKTtcbmhhcmRlbihpc05hdFZhbHVlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5U2V0VmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxDb3B5U2V0VmFsdWVTaGFwZSk7JGjNj19vbmNlLmlzQ29weVNldFZhbHVlKGlzQ29weVNldFZhbHVlKTtcbmhhcmRlbihpc0NvcHlTZXRWYWx1ZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzU2V0VmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxTZXRWYWx1ZVNoYXBlKTskaM2PX29uY2UuaXNTZXRWYWx1ZShpc1NldFZhbHVlKTtcbmhhcmRlbihpc1NldFZhbHVlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5QmFnVmFsdWU9KHZhbHVlKT0+bWF0Y2hlcyh2YWx1ZSxDb3B5QmFnVmFsdWVTaGFwZSk7JGjNj19vbmNlLmlzQ29weUJhZ1ZhbHVlKGlzQ29weUJhZ1ZhbHVlKTtcbmhhcmRlbihpc0NvcHlCYWdWYWx1ZSk7XG5cbi8vXG5jb25zdCAgICAgICAgTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTPTEwMDskaM2PX29uY2UuTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTKE1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyk7XG5cbmNvbnN0ICAgICAgICBBc3NldEtpbmRTaGFwZT1NLm9yKCduYXQnLCdzZXQnLCdjb3B5U2V0JywnY29weUJhZycpOyRozY9fb25jZS5Bc3NldEtpbmRTaGFwZShBc3NldEtpbmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBEaXNwbGF5SW5mb1NoYXBlPU0uc3BsaXRSZWNvcmQoXG57fSxcbntcbmRlY2ltYWxQbGFjZXM6TS5hbmQoXG5NLmd0ZSgtTUFYX0FCU09MVVRFX0RFQ0lNQUxfUExBQ0VTKSxcbk0ubHRlKE1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUykpLFxuXG5hc3NldEtpbmQ6QXNzZXRLaW5kU2hhcGV9LFxuXG57XG4vL1xuLy9cbn0pOyRozY9fb25jZS5EaXNwbGF5SW5mb1NoYXBlKERpc3BsYXlJbmZvU2hhcGUpO1xuXG5cbmNvbnN0ICAgICAgICBJc3N1ZXJLaXRTaGFwZT17XG5icmFuZDpCcmFuZFNoYXBlLFxubWludDpNaW50U2hhcGUsXG5taW50UmVjb3ZlcnlQdXJzZTpQdXJzZVNoYXBlLFxuaXNzdWVyOklzc3VlclNoYXBlLFxuZGlzcGxheUluZm86RGlzcGxheUluZm9TaGFwZX07JGjNj19vbmNlLklzc3VlcktpdFNoYXBlKElzc3VlcktpdFNoYXBlKTtcblxuaGFyZGVuKElzc3VlcktpdFNoYXBlKTtcblxuLy9cblxuY29uc3QgICAgICAgIEJyYW5kST1NLmludGVyZmFjZSgnQnJhbmQnLHtcbmlzTXlJc3N1ZXI6TS5jYWxsV2hlbihNLmF3YWl0KElzc3VlclNoYXBlKSkucmV0dXJucyhNLmJvb2xlYW4oKSksXG5nZXRBbGxlZ2VkTmFtZTpNLmNhbGwoKS5yZXR1cm5zKE0uc3RyaW5nKCkpLFxuZ2V0RGlzcGxheUluZm86TS5jYWxsKCkucmV0dXJucyhEaXNwbGF5SW5mb1NoYXBlKSxcbmdldEFtb3VudFNoYXBlOk0uY2FsbCgpLnJldHVybnMoTS5wYXR0ZXJuKCkpfSk7XG5cblxuLypcblxuXG5cbiAqLyRozY9fb25jZS5CcmFuZEkoQnJhbmRJKTtcbmNvbnN0ICAgICAgICBtYWtlSXNzdWVySW50ZXJmYWNlcz0oXG5icmFuZFNoYXBlPUJyYW5kU2hhcGUsXG5hc3NldEtpbmRTaGFwZT1Bc3NldEtpbmRTaGFwZSxcbmFtb3VudFNoYXBlPUFtb3VudFNoYXBlKT0+XG57XG5jb25zdCBJc3N1ZXJJPU0uaW50ZXJmYWNlKCdJc3N1ZXInLHtcbmdldEJyYW5kOk0uY2FsbCgpLnJldHVybnMoYnJhbmRTaGFwZSksXG5nZXRBbGxlZ2VkTmFtZTpNLmNhbGwoKS5yZXR1cm5zKE0uc3RyaW5nKCkpLFxuZ2V0QXNzZXRLaW5kOk0uY2FsbCgpLnJldHVybnMoYXNzZXRLaW5kU2hhcGUpLFxuZ2V0RGlzcGxheUluZm86TS5jYWxsKCkucmV0dXJucyhEaXNwbGF5SW5mb1NoYXBlKSxcbm1ha2VFbXB0eVB1cnNlOk0uY2FsbCgpLnJldHVybnMoUHVyc2VTaGFwZSksXG5cbmlzTGl2ZTpNLmNhbGxXaGVuKE0uYXdhaXQoUGF5bWVudFNoYXBlKSkucmV0dXJucyhNLmJvb2xlYW4oKSksXG5nZXRBbW91bnRPZjpNLmNhbGxXaGVuKE0uYXdhaXQoUGF5bWVudFNoYXBlKSkucmV0dXJucyhhbW91bnRTaGFwZSksXG5idXJuOk0uY2FsbFdoZW4oTS5hd2FpdChQYXltZW50U2hhcGUpKS5cbm9wdGlvbmFsKEFtb3VudFBhdHRlcm5TaGFwZSkuXG5yZXR1cm5zKGFtb3VudFNoYXBlKX0pO1xuXG5cbmNvbnN0IE1pbnRJPU0uaW50ZXJmYWNlKCdNaW50Jyx7XG5nZXRJc3N1ZXI6TS5jYWxsKCkucmV0dXJucyhJc3N1ZXJTaGFwZSksXG5taW50UGF5bWVudDpNLmNhbGwoYW1vdW50U2hhcGUpLnJldHVybnMoUGF5bWVudFNoYXBlKX0pO1xuXG5cbmNvbnN0IFBheW1lbnRJPU0uaW50ZXJmYWNlKCdQYXltZW50Jyx7XG5nZXRBbGxlZ2VkQnJhbmQ6TS5jYWxsKCkucmV0dXJucyhicmFuZFNoYXBlKX0pO1xuXG5cbmNvbnN0IFB1cnNlST1NLmludGVyZmFjZSgnUHVyc2UnLHtcbmdldEFsbGVnZWRCcmFuZDpNLmNhbGwoKS5yZXR1cm5zKGJyYW5kU2hhcGUpLFxuZ2V0Q3VycmVudEFtb3VudDpNLmNhbGwoKS5yZXR1cm5zKGFtb3VudFNoYXBlKSxcbmdldEN1cnJlbnRBbW91bnROb3RpZmllcjpNLmNhbGwoKS5yZXR1cm5zKE5vdGlmaWVyU2hhcGUpLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmRlcG9zaXQ6TS5jYWxsKFBheW1lbnRTaGFwZSkuXG5vcHRpb25hbChBbW91bnRQYXR0ZXJuU2hhcGUpLlxucmV0dXJucyhhbW91bnRTaGFwZSksXG5nZXREZXBvc2l0RmFjZXQ6TS5jYWxsKCkucmV0dXJucyhEZXBvc2l0RmFjZXRTaGFwZSksXG53aXRoZHJhdzpNLmNhbGwoYW1vdW50U2hhcGUpLnJldHVybnMoUGF5bWVudFNoYXBlKSxcbmdldFJlY292ZXJ5U2V0Ok0uY2FsbCgpLnJldHVybnMoTS5zZXRPZihQYXltZW50U2hhcGUpKSxcbnJlY292ZXJBbGw6TS5jYWxsKCkucmV0dXJucyhhbW91bnRTaGFwZSl9KTtcblxuXG5jb25zdCBEZXBvc2l0RmFjZXRJPU0uaW50ZXJmYWNlKCdEZXBvc2l0RmFjZXQnLHtcbnJlY2VpdmU6Z2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKFB1cnNlSSkubWV0aG9kR3VhcmRzLmRlcG9zaXR9KTtcblxuXG5jb25zdCBQdXJzZUlLaXQ9e1xucHVyc2U6UHVyc2VJLFxuZGVwb3NpdEZhY2V0OkRlcG9zaXRGYWNldEl9O1xuXG5oYXJkZW4oUHVyc2VJS2l0KTtcblxucmV0dXJuIGhhcmRlbih7XG5Jc3N1ZXJJLFxuTWludEksXG5QYXltZW50SSxcblB1cnNlSUtpdH0pO1xuXG4gfTskaM2PX29uY2UubWFrZUlzc3VlckludGVyZmFjZXMobWFrZUlzc3VlckludGVyZmFjZXMpO1xuaGFyZGVuKG1ha2VJc3N1ZXJJbnRlcmZhY2VzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkJyYW5kU2hhcGUiOlsiQnJhbmRTaGFwZSJdLCJJc3N1ZXJTaGFwZSI6WyJJc3N1ZXJTaGFwZSJdLCJQYXltZW50U2hhcGUiOlsiUGF5bWVudFNoYXBlIl0sIlB1cnNlU2hhcGUiOlsiUHVyc2VTaGFwZSJdLCJEZXBvc2l0RmFjZXRTaGFwZSI6WyJEZXBvc2l0RmFjZXRTaGFwZSJdLCJOb3RpZmllclNoYXBlIjpbIk5vdGlmaWVyU2hhcGUiXSwiTWludFNoYXBlIjpbIk1pbnRTaGFwZSJdLCJBbW91bnRTaGFwZSI6WyJBbW91bnRTaGFwZSJdLCJBbW91bnRQYXR0ZXJuU2hhcGUiOlsiQW1vdW50UGF0dGVyblNoYXBlIl0sIlJhdGlvU2hhcGUiOlsiUmF0aW9TaGFwZSJdLCJpc05hdFZhbHVlIjpbImlzTmF0VmFsdWUiXSwiaXNDb3B5U2V0VmFsdWUiOlsiaXNDb3B5U2V0VmFsdWUiXSwiaXNTZXRWYWx1ZSI6WyJpc1NldFZhbHVlIl0sImlzQ29weUJhZ1ZhbHVlIjpbImlzQ29weUJhZ1ZhbHVlIl0sIk1BWF9BQlNPTFVURV9ERUNJTUFMX1BMQUNFUyI6WyJNQVhfQUJTT0xVVEVfREVDSU1BTF9QTEFDRVMiXSwiQXNzZXRLaW5kU2hhcGUiOlsiQXNzZXRLaW5kU2hhcGUiXSwiRGlzcGxheUluZm9TaGFwZSI6WyJEaXNwbGF5SW5mb1NoYXBlIl0sIklzc3VlcktpdFNoYXBlIjpbIklzc3VlcktpdFNoYXBlIl0sIkJyYW5kSSI6WyJCcmFuZEkiXSwibWFrZUlzc3VlckludGVyZmFjZXMiOlsibWFrZUlzc3VlckludGVyZmFjZXMiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABURLJnkBAAB5AQAAJwAAAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy90eXBlcy1pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACdrdzfGBoAABgaAAAnAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2NhbGxiYWNrLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbImNhbGxFIiwiY2FsbFN5bmMiLCJpc0NhbGxiYWNrIiwibWFrZUZ1bmN0aW9uQ2FsbGJhY2siLCJtYWtlTWV0aG9kQ2FsbGJhY2siLCJtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2siLCJtYWtlU3luY01ldGhvZENhbGxiYWNrIiwicHJlcGFyZUF0dGVudWF0b3IiLCJwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLG1ha2VFcnJvcixxLEUsaXNPYmplY3QsaXNQYXNzYWJsZVN5bWJvbCxnZXRJbnRlcmZhY2VNZXRob2RLZXlzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImlzUGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoaXNQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZU1ldGhvZEtleXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuY29uc3R7b3duS2V5czpyYXdPd25LZXlzfT1SZWZsZWN0O1xuY29uc3Qgb3duS2V5cz1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yYXdPd25LZXlzO1xuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpc1Byb3BlcnR5S2V5PShrZXkpPT57XG5zd2l0Y2godHlwZW9mIGtleSl7XG5jYXNlJ3N0cmluZyc6XG5jYXNlJ251bWJlcic6XG5jYXNlJ3N5bWJvbCc6XG5yZXR1cm4gdHJ1ZTtcbmRlZmF1bHQ6XG5yZXR1cm4gZmFsc2U7fVxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNhbGxTeW5jPShjYWxsYmFjaywuLi5hcmdzKT0+e1xuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdGFyZ2V0KC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH1cbnJldHVybiB0YXJnZXRbbWV0aG9kTmFtZV0oLi4uYm91bmQsLi4uYXJncyk7XG4gfTskaM2PX29uY2UuY2FsbFN5bmMoY2FsbFN5bmMpO1xuaGFyZGVuKGNhbGxTeW5jKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNhbGxFPShjYWxsYmFjaywuLi5hcmdzKT0+e1xuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xuaWYobWV0aG9kTmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gRSh0YXJnZXQpKC4uLmJvdW5kLC4uLmFyZ3MpO1xuIH1cbnJldHVybiBFKHRhcmdldClbbWV0aG9kTmFtZV0oLi4uYm91bmQsLi4uYXJncyk7XG4gfTskaM2PX29uY2UuY2FsbEUoY2FsbEUpO1xuaGFyZGVuKGNhbGxFKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2s9KHRhcmdldCwuLi5ib3VuZCk9PntcbnR5cGVvZiB0YXJnZXQ9PT0nZnVuY3Rpb24nfHxcbkZhaWwgYHN5bmMgZnVuY3Rpb24gY2FsbGJhY2sgdGFyZ2V0IG11c3QgYmUgYSBmdW5jdGlvbjogJHt0YXJnZXR9YDtcbi8qICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNiPWhhcmRlbih7dGFyZ2V0LGJvdW5kLGlzU3luYzp0cnVlfSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2sobWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrKTtcbmhhcmRlbihtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VGdW5jdGlvbkNhbGxiYWNrPSh0YXJnZXQsLi4uYm91bmQpPT57XG5pc09iamVjdCh0YXJnZXQpfHxcbkZhaWwgYGZ1bmN0aW9uIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGEgZnVuY3Rpb24gcHJlc2VuY2U6ICR7dGFyZ2V0fWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxib3VuZH0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlRnVuY3Rpb25DYWxsYmFjayhtYWtlRnVuY3Rpb25DYWxsYmFjayk7XG5oYXJkZW4obWFrZUZ1bmN0aW9uQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN5bmNNZXRob2RDYWxsYmFjaz0odGFyZ2V0LG1ldGhvZE5hbWUsLi4uYm91bmQpPT57XG5pc09iamVjdCh0YXJnZXQpfHxcbkZhaWwgYHN5bmMgbWV0aG9kIGNhbGxiYWNrIHRhcmdldCBtdXN0IGJlIGFuIG9iamVjdDogJHt0YXJnZXR9YDtcbnR5cGVvZiBtZXRob2ROYW1lPT09J3N0cmluZyd8fFxuaXNQYXNzYWJsZVN5bWJvbChtZXRob2ROYW1lKXx8XG5GYWlsIGBtZXRob2QgbmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIHBhc3NhYmxlIHN5bWJvbDogJHttZXRob2ROYW1lfWA7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjYj1oYXJkZW4oe3RhcmdldCxtZXRob2ROYW1lLGJvdW5kLGlzU3luYzp0cnVlfSk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlU3luY01ldGhvZENhbGxiYWNrKG1ha2VTeW5jTWV0aG9kQ2FsbGJhY2spO1xuaGFyZGVuKG1ha2VTeW5jTWV0aG9kQ2FsbGJhY2spO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1ldGhvZENhbGxiYWNrPSh0YXJnZXQsbWV0aG9kTmFtZSwuLi5ib3VuZCk9PntcbmlzT2JqZWN0KHRhcmdldCl8fEZhaWwgYG1ldGhvZCBjYWxsYmFjayB0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3Q6ICR7dGFyZ2V0fWA7XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSl8fFxuRmFpbCBgbWV0aG9kIG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBwYXNzYWJsZSBzeW1ib2w6ICR7bWV0aG9kTmFtZX1gO1xuLyogICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2I9aGFyZGVuKHt0YXJnZXQsbWV0aG9kTmFtZSxib3VuZH0pO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAqL2NiKTtcbiB9OyRozY9fb25jZS5tYWtlTWV0aG9kQ2FsbGJhY2sobWFrZU1ldGhvZENhbGxiYWNrKTtcbmhhcmRlbihtYWtlTWV0aG9kQ2FsbGJhY2spO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ2FsbGJhY2s9KGNhbGxiYWNrKT0+e1xuaWYoIWlzT2JqZWN0KGNhbGxiYWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7dGFyZ2V0LG1ldGhvZE5hbWUsYm91bmR9PWNhbGxiYWNrO1xucmV0dXJuKFxuaXNPYmplY3QodGFyZ2V0KSYmKFxubWV0aG9kTmFtZT09PXVuZGVmaW5lZHx8XG50eXBlb2YgbWV0aG9kTmFtZT09PSdzdHJpbmcnfHxcbmlzUGFzc2FibGVTeW1ib2wobWV0aG9kTmFtZSkpJiZcbkFycmF5LmlzQXJyYXkoYm91bmQpKTtcblxuIH07JGjNj19vbmNlLmlzQ2FsbGJhY2soaXNDYWxsYmFjayk7XG5oYXJkZW4oaXNDYWxsYmFjayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlQXR0ZW51YXRvcj0oXG56b25lLFxubWV0aG9kTmFtZXMsXG57aW50ZXJmYWNlR3VhcmQsdGFnPSdBdHRlbnVhdG9yJ309e30pPT5cbntcbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ldGhvZHM9LyogICAgICAgICAgICAgICAgICAqL1xuZnJvbUVudHJpZXMoXG5tZXRob2ROYW1lcy5tYXAoKGtleSk9Pntcbi8vXG5pZighaXNQcm9wZXJ0eUtleShrZXkpKXtcbnRocm93IEZhaWwgYGtleSAke3Eoa2V5KX0gaXMgbm90IGEgUHJvcGVydHlLZXlgO1xuIH1cblxuY29uc3QgbT0vKiAgICAgICAgICAgICAgICAgICove1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgKi9cbltrZXldKC4uLmFyZ3Mpe1xuLy9cbmNvbnN0IGNiPXRoaXMuc3RhdGUuY2JzW2tleV07XG5pZighY2Ipe1xuY29uc3QgZXJyPW1ha2VFcnJvciggYHVuaW1wbGVtZW50ZWQgJHtxKHRhZyl9IG1ldGhvZCAke3Eoa2V5KX1gKTtcbmlmKHRoaXMuc3RhdGUuaXNTeW5jKXtcbnRocm93IGVycjtcbiB9XG5yZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTtcbiB9XG5pZihjYi5pc1N5bmMpe1xucmV0dXJuIGNhbGxTeW5jKGNiLC4uLmFyZ3MpO1xuIH1cbnJldHVybiBjYWxsRShjYiwuLi5hcmdzKTtcbiB9fVtcbmtleV07XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICovW2tleSxtXSk7XG4gfSkpO1xuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZUF0dGVudWF0b3I9em9uZS5leG9DbGFzcyhcbnRhZyxcbmludGVyZmFjZUd1YXJkLFxuLypcblxuXG5cblxuICAgICAqL1xuKHtcbnRhcmdldD1udWxsLFxuaXNTeW5jPWZhbHNlLFxub3ZlcnJpZGVzPS8qICAgICAgICAgICAgICAgICAgICAqL3t9fSk9Plxue1xuY29uc3QgY2JzPS8qICAgICAgICAgICAgICAgICAgICAqL3t9O1xuXG5jb25zdCByZW1haW5pbmc9bmV3IFNldChtZXRob2ROYW1lcyk7XG5mb3IoY29uc3Qga2V5IG9mIG93bktleXMob3ZlcnJpZGVzKSl7XG5yZW1haW5pbmcuaGFzKGtleSl8fFxuRmFpbCBgJHtxKHRhZyl9IG92ZXJyaWRlc1ske3Eoa2V5KX1dIG5vdCBhbGxvd2VkIGJ5IG1ldGhvZE5hbWVzYDtcblxucmVtYWluaW5nLmRlbGV0ZShrZXkpO1xuY29uc3QgY2I9b3ZlcnJpZGVzW2tleV07XG5jYj09bnVsbHx8XG5pc0NhbGxiYWNrKGNiKXx8XG5GYWlsIGAke3EodGFnKX0gb3ZlcnJpZGVzWyR7cShrZXkpfV0gaXMgbm90IGEgY2FsbGJhY2s7IGdvdCAke2NifWA7XG5jYnNba2V5XT1jYjtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIHJlbWFpbmluZyl7XG5pZihpc1N5bmMpe1xuY2JzW2tleV09bWFrZVN5bmNNZXRob2RDYWxsYmFjayh0YXJnZXQsa2V5KTtcbiB9ZWxzZXtcbmNic1trZXldPW1ha2VNZXRob2RDYWxsYmFjayh0YXJnZXQsa2V5KTtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7Y2JzLGlzU3luY30pO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICovbWV0aG9kcyk7XG5cbnJldHVybiBtYWtlQXR0ZW51YXRvcjtcbiB9OyRozY9fb25jZS5wcmVwYXJlQXR0ZW51YXRvcihwcmVwYXJlQXR0ZW51YXRvcik7XG5oYXJkZW4ocHJlcGFyZUF0dGVudWF0b3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3I9KHpvbmUsaW50ZXJmYWNlR3VhcmQsb3B0cz17fSk9PntcbmNvbnN0IG1ldGhvZE5hbWVzPWdldEludGVyZmFjZU1ldGhvZEtleXMoaW50ZXJmYWNlR3VhcmQpO1xuY29uc3QgbWFrZUF0dGVudWF0b3I9cHJlcGFyZUF0dGVudWF0b3Ioem9uZSxtZXRob2ROYW1lcyx7XG4uLi5vcHRzLFxuaW50ZXJmYWNlR3VhcmR9KTtcblxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZUF0dGVudWF0b3IpO1xuIH07JGjNj19vbmNlLnByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcihwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IpO1xuaGFyZGVuKHByZXBhcmVHdWFyZGVkQXR0ZW51YXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJjYWxsU3luYyI6WyJjYWxsU3luYyJdLCJjYWxsRSI6WyJjYWxsRSJdLCJtYWtlU3luY0Z1bmN0aW9uQ2FsbGJhY2siOlsibWFrZVN5bmNGdW5jdGlvbkNhbGxiYWNrIl0sIm1ha2VGdW5jdGlvbkNhbGxiYWNrIjpbIm1ha2VGdW5jdGlvbkNhbGxiYWNrIl0sIm1ha2VTeW5jTWV0aG9kQ2FsbGJhY2siOlsibWFrZVN5bmNNZXRob2RDYWxsYmFjayJdLCJtYWtlTWV0aG9kQ2FsbGJhY2siOlsibWFrZU1ldGhvZENhbGxiYWNrIl0sImlzQ2FsbGJhY2siOlsiaXNDYWxsYmFjayJdLCJwcmVwYXJlQXR0ZW51YXRvciI6WyJwcmVwYXJlQXR0ZW51YXRvciJdLCJwcmVwYXJlR3VhcmRlZEF0dGVudWF0b3IiOlsicHJlcGFyZUd1YXJkZWRBdHRlbnVhdG9yIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHPQXuH8BQAA/AUAACUAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvY29uZmlnLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJCcmlkZ2VJZCIsIkNvc21vc0luaXRLZXlUb0JyaWRnZUlkIiwiVkJhbmtBY2NvdW50IiwiV2FsbGV0TmFtZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgQnJpZGdlSWQ9LyogICAgICAgICAgICAgICAgKi97XG5CQU5LOidiYW5rJyxcbkNPUkU6J2NvcmUnLFxuRElCQzonZGliYycsXG5TVE9SQUdFOidzdG9yYWdlJyxcblBST1ZJU0lPTjoncHJvdmlzaW9uJyxcblBST1ZJU0lPTl9TTUFSVF9XQUxMRVQ6J3Byb3Zpc2lvbldhbGxldCcsXG5WTE9DQUxDSEFJTjondmxvY2FsY2hhaW4nLFxuVlRSQU5TRkVSOid2dHJhbnNmZXInLFxuV0FMTEVUOid3YWxsZXQnfTskaM2PX29uY2UuQnJpZGdlSWQoQnJpZGdlSWQpO1xuXG5oYXJkZW4oQnJpZGdlSWQpO1xuXG5jb25zdCAgICAgICAgQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQ9e1xudmJhbmtQb3J0OkJyaWRnZUlkLkJBTkssXG52aWJjUG9ydDpCcmlkZ2VJZC5ESUJDfTskaM2PX29uY2UuQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQoQ29zbW9zSW5pdEtleVRvQnJpZGdlSWQpO1xuXG5cbmNvbnN0ICAgICAgICBXYWxsZXROYW1lPS8qICAgICAgICAgICAgICAgICove1xuZGVwb3NpdEZhY2V0OidkZXBvc2l0RmFjZXQnfTskaM2PX29uY2UuV2FsbGV0TmFtZShXYWxsZXROYW1lKTtcblxuaGFyZGVuKFdhbGxldE5hbWUpO1xuXG4vL1xuY29uc3QgICAgICAgIFZCYW5rQWNjb3VudD0vKiAgICAgICAgICAgICAgICAqL3tcbnJlc2VydmU6e1xubW9kdWxlOid2YmFuay9yZXNlcnZlJyxcbmFkZHJlc3M6J2Fnb3JpYzFhZTBsbXR6bGdyY25sYTl4amtwYWFycTVkNWRmZXo2M2gzbnVjbCd9LFxuXG5wcm92aXNpb246e1xubW9kdWxlOid2YmFuay9wcm92aXNpb24nLFxuYWRkcmVzczonYWdvcmljMW1lZ3p5dGc2NWN5cmd6czZmdnp4Z3JjcXZ3d2w3dWdwdDYyMzQ2J319OyRozY9fb25jZS5WQmFua0FjY291bnQoVkJhbmtBY2NvdW50KTtcblxuXG5oYXJkZW4oVkJhbmtBY2NvdW50KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkJyaWRnZUlkIjpbIkJyaWRnZUlkIl0sIkNvc21vc0luaXRLZXlUb0JyaWRnZUlkIjpbIkNvc21vc0luaXRLZXlUb0JyaWRnZUlkIl0sIldhbGxldE5hbWUiOlsiV2FsbGV0TmFtZSJdLCJWQmFua0FjY291bnQiOlsiVkJhbmtBY2NvdW50Il19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAF+DFqp3BAAAdwQAACQAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZGVidWcuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VUcmFjZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxubGV0IGRlYnVnSW5zdGFuY2U9MTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlVHJhY2VyPShuYW1lLGVuYWJsZT10cnVlKT0+e1xuZGVidWdJbnN0YW5jZSs9MTtcbmxldCBkZWJ1Z0NvdW50PTE7XG5jb25zdCBrZXk9IGAtLS0tLSAke25hbWV9LiR7ZGVidWdJbnN0YW5jZX0gYDtcbi8vXG5zd2l0Y2goZW5hYmxlKXtcbmNhc2UgZmFsc2U6e1xuY29uc3QgbG9nRGlzYWJsZWQ9KC4uLl9hcmdzKT0+eyB9O1xucmV0dXJuIGxvZ0Rpc2FibGVkO1xuIH1cbmNhc2UndmVyYm9zZSc6e1xuY29uc3QgaW5mb1RpY2s9KG9wdExvZywuLi5hcmdzKT0+e1xuaWYob3B0TG9nLmxvZyl7XG5jb25zb2xlLmluZm8oa2V5LGRlYnVnQ291bnQrPTEsLi4uYXJncyk7XG4gfWVsc2V7XG5jb25zb2xlLmluZm8oa2V5LGRlYnVnQ291bnQrPTEsb3B0TG9nLC4uLmFyZ3MpO1xuIH1cbiB9O1xucmV0dXJuIGluZm9UaWNrO1xuIH1cbmRlZmF1bHQ6e1xuY29uc3QgZGVidWdUaWNrPShvcHRMb2csLi4uYXJncyk9PntcbmlmKG9wdExvZy5sb2cpe1xub3B0TG9nLmxvZyhrZXksZGVidWdDb3VudCs9MSwuLi5hcmdzKTtcbiB9ZWxzZXtcbmNvbnNvbGUuaW5mbyhrZXksZGVidWdDb3VudCs9MSxvcHRMb2csLi4uYXJncyk7XG4gfVxuIH07XG5yZXR1cm4gZGVidWdUaWNrO1xuIH19XG5cbiB9OyRozY9fb25jZS5tYWtlVHJhY2VyKG1ha2VUcmFjZXIpO1xuaGFyZGVuKG1ha2VUcmFjZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVRyYWNlciI6WyJtYWtlVHJhY2VyIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANOJob+9AgAAvQIAACUAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZXJyb3JzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIk5vbk51bGxpc2giXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBOb25OdWxsaXNoPSh2YWwsb3B0RGV0YWlscz0gYHVuZXhwZWN0ZWQgJHtxKHZhbCl9YCk9PntcbmlmKHZhbCE9bnVsbCl7XG4vL1xucmV0dXJuIHZhbDtcbiB9XG5hc3NlcnQuZmFpbChvcHREZXRhaWxzKTtcbiB9OyRozY9fb25jZS5Ob25OdWxsaXNoKE5vbk51bGxpc2gpO1xuaGFyZGVuKE5vbk51bGxpc2gpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiTm9uTnVsbGlzaCI6WyJOb25OdWxsaXNoIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACHQpXKiBQAAogUAACQAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvaW5kZXguanN7ImltcG9ydHMiOlsiLi9jb25maWcuanMiLCIuL2RlYnVnLmpzIiwiLi9lcnJvcnMuanMiLCIuL2pzLXV0aWxzLmpzIiwiLi9tYXJzaGFsLmpzIiwiLi9tZXRob2QtdG9vbHMuanMiLCIuL3Nlcy11dGlscy5qcyIsIi4vdHlwZUNoZWNrLmpzIiwiLi90eXBlR3VhcmRzLmpzIiwiLi90eXBlcy1pbmRleC5qcyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiQGVuZG8vY29tbW9uL29iamVjdC1tZXRhLW1hcC5qcyIsIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzIl0sImV4cG9ydHMiOltudWxsLG51bGwsbnVsbCxudWxsXSwicmVleHBvcnRzIjpbIi4vY29uZmlnLmpzIiwiLi9kZWJ1Zy5qcyIsIi4vZXJyb3JzLmpzIiwiLi9qcy11dGlscy5qcyIsIi4vbWV0aG9kLXRvb2xzLmpzIiwiLi9zZXMtdXRpbHMuanMiLCIuL3R5cGVDaGVjay5qcyIsIi4vdHlwZUd1YXJkcy5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9jb25maWcuanNcIiwgW11dLFtcIi4vZGVidWcuanNcIiwgW11dLFtcIi4vZXJyb3JzLmpzXCIsIFtdXSxbXCIuL2pzLXV0aWxzLmpzXCIsIFtdXSxbXCIuL21hcnNoYWwuanNcIiwgW11dLFtcIi4vbWV0aG9kLXRvb2xzLmpzXCIsIFtdXSxbXCIuL3Nlcy11dGlscy5qc1wiLCBbXV0sW1wiLi90eXBlQ2hlY2suanNcIiwgW11dLFtcIi4vdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi90eXBlcy1pbmRleC5qc1wiLCBbXV0sW1wiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9tYXJzaGFsLmpzIjpbWyJwdXJlRGF0YU1hcnNoYWxsZXIiLCJwdXJlRGF0YU1hcnNoYWxsZXIiXV0sIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjpbWyJvYmplY3RNYXAiLCJvYmplY3RNYXAiXV0sIkBlbmRvL2NvbW1vbi9vYmplY3QtbWV0YS1tYXAuanMiOltbIm9iamVjdE1ldGFNYXAiLCJvYmplY3RNZXRhTWFwIl1dLCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyI6W1siZnJvbVVuaXF1ZUVudHJpZXMiLCJmcm9tVW5pcXVlRW50cmllcyJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA6I5nQE4HAABOBwAAJwAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9qcy11dGlscy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZGVlcENvcHlKc29uYWJsZSIsImRlZXBNYXBPYmplY3QiLCJtYWtlTWVhc3VyZVNlY29uZHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cbi8vXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWVwQ29weUpzb25hYmxlPSh2YWx1ZSk9PkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVlcENvcHlKc29uYWJsZShkZWVwQ29weUpzb25hYmxlKTtcbmNvbnN0IGRlZXBNYXBPYmplY3RJbnRlcm5hbD0odmFsdWUsbmFtZSxjb250YWluZXIsbWFwcGVyKT0+e1xuaWYoY29udGFpbmVyJiZ0eXBlb2YgbmFtZT09PSdzdHJpbmcnKXtcbmNvbnN0IG1hcHBlZD1tYXBwZXIodmFsdWUsbmFtZSxjb250YWluZXIpO1xuaWYobWFwcGVkIT09dmFsdWUpe1xucmV0dXJuIG1hcHBlZDtcbiB9XG4gfVxuXG5pZih0eXBlb2YgdmFsdWUhPT0nb2JqZWN0J3x8IXZhbHVlKXtcbnJldHVybiB2YWx1ZTtcbiB9XG5cbmxldCB3YXNNYXBwZWQ9ZmFsc2U7XG5jb25zdCBtYXBwZWRFbnRyaWVzPU9iamVjdC5lbnRyaWVzKHZhbHVlKS5tYXAoKFtpbm5lck5hbWUsaW5uZXJWYWx1ZV0pPT57XG5jb25zdCBtYXBwZWRJbm5lclZhbHVlPWRlZXBNYXBPYmplY3RJbnRlcm5hbChcbmlubmVyVmFsdWUsXG5pbm5lck5hbWUsXG52YWx1ZSxcbm1hcHBlcik7XG5cbndhc01hcHBlZHx8PW1hcHBlZElubmVyVmFsdWUhPT1pbm5lclZhbHVlO1xucmV0dXJuW2lubmVyTmFtZSxtYXBwZWRJbm5lclZhbHVlXTtcbiB9KTtcblxucmV0dXJuIHdhc01hcHBlZD9PYmplY3QuZnJvbUVudHJpZXMobWFwcGVkRW50cmllcyk6dmFsdWU7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWVwTWFwT2JqZWN0PShvYmosbWFwcGVyKT0+XG5kZWVwTWFwT2JqZWN0SW50ZXJuYWwob2JqLHVuZGVmaW5lZCx1bmRlZmluZWQsbWFwcGVyKTtcblxuLypcblxuXG5cblxuXG4gKi8kaM2PX29uY2UuZGVlcE1hcE9iamVjdChkZWVwTWFwT2JqZWN0KTtcbmNvbnN0ICAgICAgICBtYWtlTWVhc3VyZVNlY29uZHM9KGN1cnJlbnRUaW1lTWlsbGlzZWMpPT57XG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IG1lYXN1cmVTZWNvbmRzPWFzeW5jKGZuKT0+e1xuY29uc3QgdDA9Y3VycmVudFRpbWVNaWxsaXNlYygpO1xuY29uc3QgcmVzdWx0PWF3YWl0IGZuKCk7XG5jb25zdCBkdXJhdGlvbk1pbGxpc2VjPWN1cnJlbnRUaW1lTWlsbGlzZWMoKS10MDtcbnJldHVybntyZXN1bHQsZHVyYXRpb246ZHVyYXRpb25NaWxsaXNlYy8xMDAwfTtcbiB9O1xucmV0dXJuIG1lYXN1cmVTZWNvbmRzO1xuIH07JGjNj19vbmNlLm1ha2VNZWFzdXJlU2Vjb25kcyhtYWtlTWVhc3VyZVNlY29uZHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVlcENvcHlKc29uYWJsZSI6WyJkZWVwQ29weUpzb25hYmxlIl0sImRlZXBNYXBPYmplY3QiOlsiZGVlcE1hcE9iamVjdCJdLCJtYWtlTWVhc3VyZVNlY29uZHMiOlsibWFrZU1lYXN1cmVTZWNvbmRzIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAB8JSuECFgAAAhYAAC8AAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvbGliLWNoYWluU3RvcmFnZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9wYXR0ZXJucyIsIkBhZ29yaWMvYmFzZS16b25lL2hlYXAuanMiLCIuL2NhbGxiYWNrLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q2FwRGF0YSIsImFzc2VydFBhdGhTZWdtZW50IiwiaXNTdHJlYW1DZWxsIiwibWFrZUNoYWluU3RvcmFnZVJvb3QiLCJtYWtlU2VyaWFsaXplVG9TdG9yYWdlIiwibWFrZVN0b3JhZ2VOb2RlQ2hpbGQiLCJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRSxGYXIsTSxtYWtlSGVhcFpvbmUsY2I7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9iYXNlLXpvbmUvaGVhcC5qc1wiLCBbW1wibWFrZUhlYXBab25lXCIsIFskaM2PX2EgPT4gKG1ha2VIZWFwWm9uZSA9ICRozY9fYSldXV1dLFtcIi4vY2FsbGJhY2suanNcIiwgW1tcIipcIiwgWyRozY9fYSA9PiAoY2IgPSAkaM2PX2EpXV1dXV0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShtYWtlQ2hhaW5TdG9yYWdlUm9vdCwgJ25hbWUnLCB7dmFsdWU6IFwibWFrZUNoYWluU3RvcmFnZVJvb3RcIn0pOyRozY9fb25jZS5tYWtlQ2hhaW5TdG9yYWdlUm9vdChtYWtlQ2hhaW5TdG9yYWdlUm9vdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VTdG9yYWdlTm9kZUNoaWxkLCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlU3RvcmFnZU5vZGVDaGlsZFwifSk7JGjNj19vbmNlLm1ha2VTdG9yYWdlTm9kZUNoaWxkKG1ha2VTdG9yYWdlTm9kZUNoaWxkKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBDaGFpblN0b3JhZ2VOb2RlST1NLmludGVyZmFjZSgnU3RvcmFnZU5vZGUnLHtcbnNldFZhbHVlOk0uY2FsbFdoZW4oTS5zdHJpbmcoKSkucmV0dXJucygpLFxuZ2V0UGF0aDpNLmNhbGwoKS5yZXR1cm5zKE0uc3RyaW5nKCkpLFxuZ2V0U3RvcmVLZXk6TS5jYWxsV2hlbigpLnJldHVybnMoTS5yZWNvcmQoKSksXG5tYWtlQ2hpbGROb2RlOk0uY2FsbChNLnN0cmluZygpKS5cbm9wdGlvbmFsKE0uc3BsaXRSZWNvcmQoe30se3NlcXVlbmNlOk0uYm9vbGVhbigpfSx7fSkpLlxucmV0dXJucyhNLnJlbW90YWJsZSgnU3RvcmFnZU5vZGUnKSl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNTdHJlYW1DZWxsPShjZWxsKT0+XG5jZWxsJiZcbnR5cGVvZiBjZWxsPT09J29iamVjdCcmJlxuQXJyYXkuaXNBcnJheShjZWxsLnZhbHVlcykmJlxudHlwZW9mIGNlbGwuYmxvY2tIZWlnaHQ9PT0nc3RyaW5nJyYmXG4vXjAkfF5bMS05XVswLTldKiQvLnRlc3QoY2VsbC5ibG9ja0hlaWdodCk7JGjNj19vbmNlLmlzU3RyZWFtQ2VsbChpc1N0cmVhbUNlbGwpO1xuaGFyZGVuKGlzU3RyZWFtQ2VsbCk7XG5cbi8vXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDYXBEYXRhPShkYXRhKT0+e1xuYXNzZXJ0LnR5cGVvZihkYXRhLCdvYmplY3QnKTtcbmFzc2VydChkYXRhKTtcbmFzc2VydC50eXBlb2YoZGF0YS5ib2R5LCdzdHJpbmcnKTtcbmFzc2VydChBcnJheS5pc0FycmF5KGRhdGEuc2xvdHMpKTtcbi8vXG4gfTskaM2PX29uY2UuYXNzZXJ0Q2FwRGF0YShhc3NlcnRDYXBEYXRhKTtcbmhhcmRlbihhc3NlcnRDYXBEYXRhKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHBhdGhTZWdtZW50UGF0dGVybj0vXlthLXpBLVowLTlfLV17MSwxMDB9JC87XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBhc3NlcnRQYXRoU2VnbWVudD0obmFtZSk9PntcbnBhdGhTZWdtZW50UGF0dGVybi50ZXN0KG5hbWUpfHxcbkZhaWwgYFBhdGggc2VnbWVudCBuYW1lcyBtdXN0IGNvbnNpc3Qgb2YgMSB0byAxMDAgY2hhcmFjdGVycyBsaW1pdGVkIHRvIEFTQ0lJIGFscGhhbnVtZXJpY3MsIHVuZGVyc2NvcmVzLCBhbmQvb3IgZGFzaGVzOiAke25hbWV9YDtcbiB9OyRozY9fb25jZS5hc3NlcnRQYXRoU2VnbWVudChhc3NlcnRQYXRoU2VnbWVudCk7XG5oYXJkZW4oYXNzZXJ0UGF0aFNlZ21lbnQpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZT0oem9uZSk9Pntcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG1ha2VDaGFpblN0b3JhZ2VOb2RlPXpvbmUuZXhvQ2xhc3MoXG4nQ2hhaW5TdG9yYWdlTm9kZScsXG5DaGFpblN0b3JhZ2VOb2RlSSxcbi8qXG5cblxuXG5cblxuXG4gICAgICovXG4obWVzc2VuZ2VyLHBhdGgse3NlcXVlbmNlPWZhbHNlfT17fSk9PntcbmFzc2VydC50eXBlb2YocGF0aCwnc3RyaW5nJyk7XG5hc3NlcnQudHlwZW9mKHNlcXVlbmNlLCdib29sZWFuJyk7XG5yZXR1cm4gaGFyZGVuKHtwYXRoLG1lc3NlbmdlcixzZXF1ZW5jZX0pO1xuIH0sXG57XG5nZXRQYXRoKCl7XG5yZXR1cm4gdGhpcy5zdGF0ZS5wYXRoO1xuIH0sXG4vKlxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgZ2V0U3RvcmVLZXkoKXtcbmNvbnN0e3BhdGgsbWVzc2VuZ2VyfT10aGlzLnN0YXRlO1xucmV0dXJuIGNiLmNhbGxFKG1lc3Nlbmdlcix7XG5tZXRob2Q6J2dldFN0b3JlS2V5JyxcbmFyZ3M6W3BhdGhdfSk7XG5cbiB9LFxuLypcblxuXG5cblxuICAgICAgICovXG5tYWtlQ2hpbGROb2RlKG5hbWUsY2hpbGROb2RlT3B0aW9ucz17fSl7XG5jb25zdHtzZXF1ZW5jZSxwYXRoLG1lc3Nlbmdlcn09dGhpcy5zdGF0ZTtcbmFzc2VydFBhdGhTZWdtZW50KG5hbWUpO1xuY29uc3QgbWVyZ2VkT3B0aW9ucz17c2VxdWVuY2UsLi4uY2hpbGROb2RlT3B0aW9uc307XG5yZXR1cm4gbWFrZUNoYWluU3RvcmFnZU5vZGUoXG5tZXNzZW5nZXIsXG4gYCR7cGF0aH0uJHtuYW1lfWAsXG5tZXJnZWRPcHRpb25zKTtcblxuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgc2V0VmFsdWUodmFsdWUpe1xuY29uc3R7c2VxdWVuY2UscGF0aCxtZXNzZW5nZXJ9PXRoaXMuc3RhdGU7XG5hc3NlcnQudHlwZW9mKHZhbHVlLCdzdHJpbmcnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGVudHJ5O1xuaWYoIXNlcXVlbmNlJiYhdmFsdWUpe1xuZW50cnk9W3BhdGhdO1xuIH1lbHNle1xuZW50cnk9W3BhdGgsdmFsdWVdO1xuIH1cbmF3YWl0IGNiLmNhbGxFKG1lc3Nlbmdlcix7XG5tZXRob2Q6c2VxdWVuY2U/J2FwcGVuZCc6J3NldCcsXG5hcmdzOltlbnRyeV19KTtcblxuIH1cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG59KTtcblxucmV0dXJuIG1ha2VDaGFpblN0b3JhZ2VOb2RlO1xuIH07JGjNj19vbmNlLnByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKHByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKTtcblxuY29uc3QgbWFrZUhlYXBDaGFpblN0b3JhZ2VOb2RlPXByZXBhcmVDaGFpblN0b3JhZ2VOb2RlKG1ha2VIZWFwWm9uZSgpKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICBtYWtlQ2hhaW5TdG9yYWdlUm9vdChcbmhhbmRsZVN0b3JhZ2VNZXNzYWdlLFxucm9vdFBhdGgsXG5yb290T3B0aW9ucz17fSlcbntcbmNvbnN0IG1lc3Nlbmdlcj1jYi5tYWtlRnVuY3Rpb25DYWxsYmFjayhoYW5kbGVTdG9yYWdlTWVzc2FnZSk7XG5cbi8vXG5jb25zdCByb290Tm9kZT1tYWtlSGVhcENoYWluU3RvcmFnZU5vZGUobWVzc2VuZ2VyLHJvb3RQYXRoLHJvb3RPcHRpb25zKTtcbnJldHVybiByb290Tm9kZTtcbiB9XG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlTnVsbFN0b3JhZ2VOb2RlPSgpPT57XG4vL1xucmV0dXJuIG1ha2VDaGFpblN0b3JhZ2VSb290KFxuRmFyKCdOdWxsTWVzc2VuZ2VyJywoKT0+bnVsbCksXG4nbnVsbCcpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5hc3luYyBmdW5jdGlvbiAgICAgICAgbWFrZVN0b3JhZ2VOb2RlQ2hpbGQoc3RvcmFnZU5vZGVSZWYsY2hpbGROYW1lKXtcbmNvbnN0IGV4aXN0aW5nU3RvcmFnZU5vZGU9YXdhaXQgc3RvcmFnZU5vZGVSZWY7XG5jb25zdCBzdG9yYWdlTm9kZT1leGlzdGluZ1N0b3JhZ2VOb2RlfHxtYWtlTnVsbFN0b3JhZ2VOb2RlKCk7XG5yZXR1cm4gRShzdG9yYWdlTm9kZSkubWFrZUNoaWxkTm9kZShjaGlsZE5hbWUpO1xuIH1cbmhhcmRlbihtYWtlU3RvcmFnZU5vZGVDaGlsZCk7XG5cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNlcmlhbGl6ZVRvU3RvcmFnZT0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbnJldHVybiBhc3luYyh2YWx1ZSk9PntcbmNvbnN0IG1hcnNoYWxsZWQ9YXdhaXQgRShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuY29uc3Qgc2VyaWFsaXplZD1KU09OLnN0cmluZ2lmeShtYXJzaGFsbGVkKTtcbnJldHVybiBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShzZXJpYWxpemVkKTtcbiB9O1xuIH07JGjNj19vbmNlLm1ha2VTZXJpYWxpemVUb1N0b3JhZ2UobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1N0cmVhbUNlbGwiOlsiaXNTdHJlYW1DZWxsIl0sImFzc2VydENhcERhdGEiOlsiYXNzZXJ0Q2FwRGF0YSJdLCJhc3NlcnRQYXRoU2VnbWVudCI6WyJhc3NlcnRQYXRoU2VnbWVudCJdLCJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSI6WyJwcmVwYXJlQ2hhaW5TdG9yYWdlTm9kZSJdLCJtYWtlQ2hhaW5TdG9yYWdlUm9vdCI6WyJtYWtlQ2hhaW5TdG9yYWdlUm9vdCJdLCJtYWtlU3RvcmFnZU5vZGVDaGlsZCI6WyJtYWtlU3RvcmFnZU5vZGVDaGlsZCJdLCJtYWtlU2VyaWFsaXplVG9TdG9yYWdlIjpbIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2UiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAwmKKfUAQAABAEAAAJgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9tYXJzaGFsLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCIuL2xpYi1jaGFpblN0b3JhZ2UuanMiXSwiZXhwb3J0cyI6WyJib2FyZFNsb3R0aW5nTWFyc2hhbGxlciIsIm1ha2VCb2FyZFJlbW90ZSIsIm1ha2VIaXN0b3J5UmV2aXZlciIsInB1cmVEYXRhTWFyc2hhbGxlciIsInNsb3RUb0JvYXJkUmVtb3RlIiwidW5tYXJzaGFsRnJvbVZzdG9yYWdlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxGYXIsbWFrZU1hcnNoYWwsaXNTdHJlYW1DZWxsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXV1dLFtcIi4vbGliLWNoYWluU3RvcmFnZS5qc1wiLCBbW1wiaXNTdHJlYW1DZWxsXCIsIFskaM2PX2EgPT4gKGlzU3RyZWFtQ2VsbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUJvYXJkUmVtb3RlPSh7Ym9hcmRJZCxpZmFjZX0pPT57XG5jb25zdCBub25hbGxlZ2VkPWlmYWNlP2lmYWNlLnJlcGxhY2UoL15BbGxlZ2VkOiAvLCcnKTonJztcbnJldHVybiBGYXIoIGBCb2FyZFJlbW90ZSR7bm9uYWxsZWdlZH1gLHtnZXRCb2FyZElkOigpPT5ib2FyZElkfSk7XG4gfTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UubWFrZUJvYXJkUmVtb3RlKG1ha2VCb2FyZFJlbW90ZSk7XG5jb25zdCAgICAgICAgc2xvdFRvQm9hcmRSZW1vdGU9KGJvYXJkSWQsaWZhY2UpPT5cbm1ha2VCb2FyZFJlbW90ZSh7Ym9hcmRJZCxpZmFjZX0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLnNsb3RUb0JvYXJkUmVtb3RlKHNsb3RUb0JvYXJkUmVtb3RlKTtcbmNvbnN0IGJvYXJkVmFsVG9TbG90PSh2YWwpPT57XG5pZignZ2V0Qm9hcmRJZCdpbiB2YWwpe1xucmV0dXJuIHZhbC5nZXRCb2FyZElkKCk7XG4gfVxudGhyb3cgRmFpbCBgdW5rbm93biBvYmogaW4gYm9hcmRTbG90dGluZ01hcnNoYWxsZXIudmFsVG9TbG90ICR7dmFsfWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyPShzbG90VG9WYWw9dW5kZWZpbmVkKT0+e1xucmV0dXJuIG1ha2VNYXJzaGFsKGJvYXJkVmFsVG9TbG90LHNsb3RUb1ZhbCx7XG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSk7XG5cbiB9O1xuXG4vL1xuLy9cbi8qXG5cblxuICovJGjNj19vbmNlLmJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyKGJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyKTtcbmNvbnN0IGFzc2VydENhcERhdGE9KGRhdGEpPT57XG5hc3NlcnQudHlwZW9mKGRhdGEsJ29iamVjdCcpO1xuYXNzZXJ0KGRhdGEpO1xuYXNzZXJ0LnR5cGVvZihkYXRhLmJvZHksJ3N0cmluZycpO1xuYXNzZXJ0KEFycmF5LmlzQXJyYXkoZGF0YS5zbG90cykpO1xuLy9cbiB9O1xuaGFyZGVuKGFzc2VydENhcERhdGEpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1bm1hcnNoYWxGcm9tVnN0b3JhZ2U9KGRhdGEsa2V5LGZyb21DYXBEYXRhLGluZGV4KT0+e1xuY29uc3Qgc2VyaWFsaXplZD1kYXRhLmdldChrZXkpfHxGYWlsIGBubyBkYXRhIGZvciAke2tleX1gO1xuYXNzZXJ0LnR5cGVvZihzZXJpYWxpemVkLCdzdHJpbmcnKTtcbmFzc2VydC50eXBlb2YoaW5kZXgsJ251bWJlcicpO1xuXG5jb25zdCBzdHJlYW1DZWxsPUpTT04ucGFyc2Uoc2VyaWFsaXplZCk7XG5pZighaXNTdHJlYW1DZWxsKHN0cmVhbUNlbGwpKXtcbnRocm93IEZhaWwgYG5vdCBhIFN0cmVhbUNlbGw6ICR7c3RyZWFtQ2VsbH1gO1xuIH1cblxuY29uc3R7dmFsdWVzfT1zdHJlYW1DZWxsO1xudmFsdWVzLmxlbmd0aD4wfHxGYWlsIGBubyBTdHJlYW1DZWxsIHZhbHVlczogJHtzdHJlYW1DZWxsfWA7XG5cbmNvbnN0IG1hcnNoYWxsZWQ9dmFsdWVzLmF0KGluZGV4KTtcbmFzc2VydC50eXBlb2YobWFyc2hhbGxlZCwnc3RyaW5nJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY2FwRGF0YT1oYXJkZW4oSlNPTi5wYXJzZShtYXJzaGFsbGVkKSk7XG5hc3NlcnRDYXBEYXRhKGNhcERhdGEpO1xuXG5jb25zdCB1bm1hcnNoYWxsZWQ9ZnJvbUNhcERhdGEoY2FwRGF0YSk7XG5yZXR1cm4gdW5tYXJzaGFsbGVkO1xuIH07JGjNj19vbmNlLnVubWFyc2hhbEZyb21Wc3RvcmFnZSh1bm1hcnNoYWxGcm9tVnN0b3JhZ2UpO1xuaGFyZGVuKHVubWFyc2hhbEZyb21Wc3RvcmFnZSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VIaXN0b3J5UmV2aXZlcj0oZW50cmllcyxzbG90VG9WYWw9dW5kZWZpbmVkKT0+e1xuY29uc3QgYm9hcmQ9Ym9hcmRTbG90dGluZ01hcnNoYWxsZXIoc2xvdFRvVmFsKTtcbmNvbnN0IHZzTWFwPW5ldyBNYXAoZW50cmllcyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGZyb21DYXBEYXRhPSguLi5hcmdzKT0+XG5SZWZsZWN0LmFwcGx5KGJvYXJkLmZyb21DYXBEYXRhLGJvYXJkLGFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2V0SXRlbT0oa2V5KT0+dW5tYXJzaGFsRnJvbVZzdG9yYWdlKHZzTWFwLGtleSxmcm9tQ2FwRGF0YSwtMSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjaGlsZHJlbj0ocHJlZml4KT0+e1xucHJlZml4LmVuZHNXaXRoKCcuJyl8fEZhaWwgYHByZWZpeCBtdXN0IGVuZCB3aXRoICcuJ2A7XG5yZXR1cm4gaGFyZGVuKFtcbi4uLm5ldyBTZXQoXG5lbnRyaWVzLlxubWFwKChbayxfXSk9PmspLlxuZmlsdGVyKChrKT0+ay5zdGFydHNXaXRoKHByZWZpeCkpLlxubWFwKChrKT0+ay5zbGljZShwcmVmaXgubGVuZ3RoKS5zcGxpdCgnLicpWzBdKSldKTtcblxuXG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBoYXM9KGspPT52c01hcC5nZXQoaykhPT11bmRlZmluZWQ7XG5cbnJldHVybiBoYXJkZW4oe2dldEl0ZW0sY2hpbGRyZW4saGFzfSk7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLm1ha2VIaXN0b3J5UmV2aXZlcihtYWtlSGlzdG9yeVJldml2ZXIpO1xuY29uc3QgcmVqZWN0T0NhcD0oY2FwKT0+RmFpbCBgJHtjYXB9IGlzIG5vdCBwdXJlIGRhdGFgO1xuY29uc3QgICAgICAgIHB1cmVEYXRhTWFyc2hhbGxlcj1tYWtlTWFyc2hhbChyZWplY3RPQ2FwLHJlamVjdE9DYXAse1xuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pOyRozY9fb25jZS5wdXJlRGF0YU1hcnNoYWxsZXIocHVyZURhdGFNYXJzaGFsbGVyKTtcblxuaGFyZGVuKHB1cmVEYXRhTWFyc2hhbGxlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlQm9hcmRSZW1vdGUiOlsibWFrZUJvYXJkUmVtb3RlIl0sInNsb3RUb0JvYXJkUmVtb3RlIjpbInNsb3RUb0JvYXJkUmVtb3RlIl0sImJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyIjpbImJvYXJkU2xvdHRpbmdNYXJzaGFsbGVyIl0sInVubWFyc2hhbEZyb21Wc3RvcmFnZSI6WyJ1bm1hcnNoYWxGcm9tVnN0b3JhZ2UiXSwibWFrZUhpc3RvcnlSZXZpdmVyIjpbIm1ha2VIaXN0b3J5UmV2aXZlciJdLCJwdXJlRGF0YU1hcnNoYWxsZXIiOlsicHVyZURhdGFNYXJzaGFsbGVyIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANdpkCmaCAAAmggAACsAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvbWV0aG9kLXRvb2xzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiXSwiZXhwb3J0cyI6WyJiaW5kQWxsTWV0aG9kcyIsImdldE1ldGhvZE5hbWVzIiwiZ2V0U3RyaW5nTWV0aG9kTmFtZXMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpc09iamVjdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHtnZXRQcm90b3R5cGVPZixjcmVhdGUsZnJvbUVudHJpZXMsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309XG5PYmplY3Q7XG5jb25zdHtvd25LZXlzLGFwcGx5fT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgY29tcGFyZVN0cmluZ2lmaWVkPShhLGIpPT57XG5pZih0eXBlb2YgYT09PXR5cGVvZiBiKXtcbmNvbnN0IGxlZnQ9U3RyaW5nKGEpO1xuY29uc3QgcmlnaHQ9U3RyaW5nKGIpO1xuLy9cbnJldHVybiBsZWZ0PHJpZ2h0Py0xOmxlZnQ+cmlnaHQ/MTowO1xuIH1cbmlmKHR5cGVvZiBhPT09J3N5bWJvbCcpe1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N0cmluZycpO1xucmV0dXJuLTE7XG4gfVxuYXNzZXJ0KHR5cGVvZiBhPT09J3N0cmluZycpO1xuYXNzZXJ0KHR5cGVvZiBiPT09J3N5bWJvbCcpO1xucmV0dXJuIDE7XG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRNZXRob2ROYW1lcz0odmFsKT0+e1xubGV0IGxheWVyPXZhbDtcbmNvbnN0IG5hbWVzPW5ldyBTZXQoKTsvL1xud2hpbGUobGF5ZXIhPT1udWxsJiZsYXllciE9PU9iamVjdC5wcm90b3R5cGUpe1xuLy9cbmNvbnN0IGRlc2NzPWdldE93blByb3BlcnR5RGVzY3JpcHRvcnMobGF5ZXIpO1xuY29uc3Qgb3duTmFtZXM9LyogICAgICAgICAgICAgICovb3duS2V5cyhkZXNjcyk7XG5mb3IoY29uc3QgbmFtZSBvZiBvd25OYW1lcyl7XG4vL1xuLy9cbmlmKHR5cGVvZiB2YWxbbmFtZV09PT0nZnVuY3Rpb24nKXtcbm5hbWVzLmFkZChuYW1lKTtcbiB9XG4gfVxuaWYoIWlzT2JqZWN0KHZhbCkpe1xuYnJlYWs7XG4gfVxubGF5ZXI9Z2V0UHJvdG90eXBlT2YobGF5ZXIpO1xuIH1cbnJldHVybiBoYXJkZW4oWy4uLm5hbWVzXS5zb3J0KGNvbXBhcmVTdHJpbmdpZmllZCkpO1xuIH07JGjNj19vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtcbmhhcmRlbihnZXRNZXRob2ROYW1lcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0U3RyaW5nTWV0aG9kTmFtZXM9KHZhbCk9PlxuLyogICAgICAgICAgICAgICAgICAgKi9cbmdldE1ldGhvZE5hbWVzKHZhbCkuZmlsdGVyKChuYW1lKT0+dHlwZW9mIG5hbWU9PT0nc3RyaW5nJyk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5nZXRTdHJpbmdNZXRob2ROYW1lcyhnZXRTdHJpbmdNZXRob2ROYW1lcyk7XG5jb25zdCAgICAgICAgYmluZEFsbE1ldGhvZHM9KG9iaik9PlxuaGFyZGVuKFxuY3JlYXRlKFxub2JqLFxuZnJvbUVudHJpZXMoXG5nZXRNZXRob2ROYW1lcyhvYmopLm1hcCgobmFtZSk9Pltcbm5hbWUsXG57XG52YWx1ZTooLyogICAgICAgICAgICAgICAgICAgICovLi4uYXJncyk9PlxuYXBwbHkob2JqW25hbWVdLG9iaixhcmdzKSxcbmVudW1lcmFibGU6dHJ1ZX1dKSkpKTskaM2PX29uY2UuYmluZEFsbE1ldGhvZHMoYmluZEFsbE1ldGhvZHMpO1xuXG5cblxuXG5cbmhhcmRlbihiaW5kQWxsTWV0aG9kcyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJnZXRTdHJpbmdNZXRob2ROYW1lcyI6WyJnZXRTdHJpbmdNZXRob2ROYW1lcyJdLCJiaW5kQWxsTWV0aG9kcyI6WyJiaW5kQWxsTWV0aG9kcyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAANUHkNtR0AALUdAAAoAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3Nlcy11dGlscy5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcHJvbWlzZS1raXQiLCJAZW5kby9zdHJlYW0iLCJqZXNzaWUuanMiXSwiZXhwb3J0cyI6WyJQcm9taXNlQWxsT3JFcnJvcnMiLCJhZ2dyZWdhdGVUcnlGaW5hbGx5IiwiYWxsVmFsdWVzIiwiYXNzZXJ0QWxsRGVmaW5lZCIsImRlZXBseUZ1bGZpbGxlZE9iamVjdCIsImZvcmV2ZXIiLCJzeW5jaHJvbml6ZWRUZWUiLCJ1bnRpbFRydWUiLCJ3aGlsZVRydWUiLCJ3aXRoRGVmZXJyZWRDbGVhbnVwIiwiemlwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLFgsZGVlcGx5RnVsZmlsbGVkLGlzT2JqZWN0LG1ha2VQcm9taXNlS2l0LG1ha2VRdWV1ZSxhc3luY0dlbmVyYXRlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dLFtcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImRlZXBseUZ1bGZpbGxlZFwiLCBbJGjNj19hID0+IChkZWVwbHlGdWxmaWxsZWQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9zdHJlYW1cIiwgW1tcIm1ha2VRdWV1ZVwiLCBbJGjNj19hID0+IChtYWtlUXVldWUgPSAkaM2PX2EpXV1dXSxbXCJqZXNzaWUuanNcIiwgW1tcImFzeW5jR2VuZXJhdGVcIiwgWyRozY9fYSA9PiAoYXN5bmNHZW5lcmF0ZSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtmcm9tRW50cmllcyxrZXlzLHZhbHVlc309T2JqZWN0O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcGx5RnVsZmlsbGVkT2JqZWN0PWFzeW5jKG9iaik9PntcbmlzT2JqZWN0KG9iail8fEZhaWwgYHBhcmFtIG11c3QgYmUgYW4gb2JqZWN0YDtcbnJldHVybiBkZWVwbHlGdWxmaWxsZWQob2JqKTtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmRlZXBseUZ1bGZpbGxlZE9iamVjdChkZWVwbHlGdWxmaWxsZWRPYmplY3QpO1xuY29uc3QgbWFrZUFnZ3JlZ2F0ZUVycm9yPVxudHlwZW9mIEFnZ3JlZ2F0ZUVycm9yPT09J2Z1bmN0aW9uJz9cbihlcnJvcnMsbWVzc2FnZSxvcHRpb25zKT0+QWdncmVnYXRlRXJyb3IoZXJyb3JzLG1lc3NhZ2Usb3B0aW9ucyk6XG4oZXJyb3JzLG1lc3NhZ2Usb3B0aW9ucyk9PntcbnJldHVybiBtYWtlRXJyb3IobWVzc2FnZT8/J211bHRpcGxlIGVycm9ycycsdW5kZWZpbmVkLHtcbi4uLm9wdGlvbnMsXG5lcnJvcnN9KTtcblxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBQcm9taXNlQWxsT3JFcnJvcnM9YXN5bmMoaXRlbXMpPT57XG5yZXR1cm4gUHJvbWlzZS5hbGxTZXR0bGVkKGl0ZW1zKS50aGVuKChyZXN1bHRzKT0+e1xuY29uc3QgZXJyb3JzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZXN1bHRzLmZpbHRlcigoe3N0YXR1c30pPT5zdGF0dXM9PT0ncmVqZWN0ZWQnKS5cbm1hcCgocmVzdWx0KT0+cmVzdWx0LnJlYXNvbik7XG5pZighZXJyb3JzLmxlbmd0aCl7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3Jlc3VsdHMubWFwKFxuKHJlc3VsdCk9PnJlc3VsdC52YWx1ZSkpO1xuXG4gfWVsc2UgaWYoZXJyb3JzLmxlbmd0aD09PTEpe1xudGhyb3cgZXJyb3JzWzBdO1xuIH1lbHNle1xudGhyb3cgbWFrZUFnZ3JlZ2F0ZUVycm9yKGVycm9ycyk7XG4gfVxuIH0pO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5Qcm9taXNlQWxsT3JFcnJvcnMoUHJvbWlzZUFsbE9yRXJyb3JzKTtcbmNvbnN0ICAgICAgICBhZ2dyZWdhdGVUcnlGaW5hbGx5PWFzeW5jKHRyaWVyLGZpbmFsaXplcik9PlxudHJpZXIoKS50aGVuKFxuYXN5bmMocmVzdWx0KT0+ZmluYWxpemVyKCkudGhlbigoKT0+cmVzdWx0KSxcbmFzeW5jKHRyeUVycm9yKT0+XG5maW5hbGl6ZXIodHJ5RXJyb3IpLlxudGhlbihcbigpPT50cnlFcnJvcixcbihmaW5hbGl6ZUVycm9yKT0+bWFrZUFnZ3JlZ2F0ZUVycm9yKFt0cnlFcnJvcixmaW5hbGl6ZUVycm9yXSkpLlxuXG50aGVuKChlcnJvcik9PlByb21pc2UucmVqZWN0KGVycm9yKSkpO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hZ2dyZWdhdGVUcnlGaW5hbGx5KGFnZ3JlZ2F0ZVRyeUZpbmFsbHkpO1xuY29uc3QgICAgICAgIHdpdGhEZWZlcnJlZENsZWFudXA9YXN5bmMoZm4pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNsZWFudXBzTElGTz1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWRkQ2xlYW51cD0oY2xlYW51cCk9PntcbmNsZWFudXBzTElGTy51bnNoaWZ0KGNsZWFudXApO1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZmluYWxpemVyPWFzeW5jKGVycik9Pntcbi8vXG5jb25zdCBjbGVhbnVwUmVzdWx0cz1jbGVhbnVwc0xJRk8ubWFwKGFzeW5jKGNsZWFudXApPT57XG5hd2FpdCBudWxsO1xucmV0dXJuIGNsZWFudXAoZXJyKTtcbiB9KTtcbmF3YWl0IFByb21pc2VBbGxPckVycm9ycyhjbGVhbnVwUmVzdWx0cyk7XG4gfTtcbnJldHVybiBhZ2dyZWdhdGVUcnlGaW5hbGx5KCgpPT5mbihhZGRDbGVhbnVwKSxmaW5hbGl6ZXIpO1xuIH07XG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS53aXRoRGVmZXJyZWRDbGVhbnVwKHdpdGhEZWZlcnJlZENsZWFudXApO1xuY29uc3QgICAgICAgIGFzc2VydEFsbERlZmluZWQ9KG9iaik9PntcbmNvbnN0IG1pc3Npbmc9W107XG5mb3IoY29uc3Rba2V5LHZhbF1vZiBPYmplY3QuZW50cmllcyhvYmopKXtcbmlmKHZhbD09PXVuZGVmaW5lZCl7XG5taXNzaW5nLnB1c2goa2V5KTtcbiB9XG4gfVxuaWYobWlzc2luZy5sZW5ndGg+MCl7XG5GYWlsIGBtaXNzaW5nICR7cShtaXNzaW5nKX1gO1xuIH1cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5hc3NlcnRBbGxEZWZpbmVkKGFzc2VydEFsbERlZmluZWQpO1xuY29uc3Qgbm90RG9uZT1oYXJkZW4oe2RvbmU6ZmFsc2UsdmFsdWU6dW5kZWZpbmVkfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYWx3YXlzRG9uZT1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcblxuY29uc3QgICAgICAgIGZvcmV2ZXI9YXN5bmNHZW5lcmF0ZSgoKT0+bm90RG9uZSk7XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLmZvcmV2ZXIoZm9yZXZlcik7XG5jb25zdCAgICAgICAgd2hpbGVUcnVlPShwcm9kdWNlKT0+XG5hc3luY0dlbmVyYXRlKGFzeW5jKCk9PntcbmNvbnN0IHZhbHVlPWF3YWl0IHByb2R1Y2UoKTtcbmlmKCF2YWx1ZSl7XG5yZXR1cm4gYWx3YXlzRG9uZTtcbiB9XG5yZXR1cm4gaGFyZGVuKHtcbmRvbmU6ZmFsc2UsXG52YWx1ZX0pO1xuXG4gfSk7XG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLndoaWxlVHJ1ZSh3aGlsZVRydWUpO1xuY29uc3QgICAgICAgIHVudGlsVHJ1ZT0ocHJvZHVjZSk9PlxuYXN5bmNHZW5lcmF0ZShhc3luYygpPT57XG5jb25zdCB2YWx1ZT1hd2FpdCBwcm9kdWNlKCk7XG5pZih2YWx1ZSl7XG5yZXR1cm4gaGFyZGVuKHtcbmRvbmU6dHJ1ZSxcbnZhbHVlfSk7XG5cbiB9XG5yZXR1cm4gaGFyZGVuKHtcbmRvbmU6ZmFsc2UsXG52YWx1ZX0pO1xuXG4gfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS51bnRpbFRydWUodW50aWxUcnVlKTtcbmNvbnN0ICAgICAgICB6aXA9KHhzLHlzKT0+aGFyZGVuKHhzLm1hcCgoeCxpKT0+W3gseXNbK2ldXSkpO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLnppcCh6aXApO1xuY29uc3QgICAgICAgIGFsbFZhbHVlcz1hc3luYyhvYmopPT57XG5jb25zdCByZXNvbHZlZD1hd2FpdCBQcm9taXNlLmFsbCh2YWx1ZXMob2JqKSk7XG4vL1xucmV0dXJuIGhhcmRlbihmcm9tRW50cmllcyh6aXAoa2V5cyhvYmopLHJlc29sdmVkKSkpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5hbGxWYWx1ZXMoYWxsVmFsdWVzKTtcbmNvbnN0ICAgICAgICBzeW5jaHJvbml6ZWRUZWU9KHNvdXJjZVN0cmVhbSxyZWFkZXJDb3VudCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZG9uZVJlc3VsdDtcblxuLypcblxuXG5cbiAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBxdWV1ZXM9W107XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1bGxOZXh0PWFzeW5jKCk9PntcbmNvbnN0IHJlcXVlc3RzPWF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChxdWV1ZXMubWFwKChxdWV1ZSk9PnF1ZXVlLmdldCgpKSk7XG5jb25zdCByZWplY3Rpb25zPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXNvbHZlcnM9W107XG5sZXQgZG9uZT1mYWxzZTtcbmZvcihjb25zdCBzZXR0bGVkUmVzdWx0IG9mIHJlcXVlc3RzKXtcbmlmKHNldHRsZWRSZXN1bHQuc3RhdHVzPT09J3JlamVjdGVkJyl7XG5yZWplY3Rpb25zLnB1c2goc2V0dGxlZFJlc3VsdC5yZWFzb24pO1xuIH1lbHNle1xuZG9uZXx8PSEhc2V0dGxlZFJlc3VsdC52YWx1ZS5kb25lO1xucmVzb2x2ZXJzLnB1c2goc2V0dGxlZFJlc3VsdC52YWx1ZS52YWx1ZSk7XG4gfVxuIH1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmVzdWx0O1xuaWYoZG9uZVJlc3VsdCl7XG5yZXN1bHQ9UHJvbWlzZS5yZXNvbHZlKGRvbmVSZXN1bHQpO1xuIH1lbHNlIGlmKHJlamVjdGlvbnMubGVuZ3RoKXtcbmNvbnN0IGVycm9yPW1ha2VFcnJvcihYIGBUZWVkIHN0cmVhbSB0aHJld2ApO1xuYW5ub3RhdGVFcnJvcihlcnJvcixYIGBUZWVkIHJlamVjdGlvbnM6ICR7cmVqZWN0aW9uc31gKTtcbnJlc3VsdD1cbnNvdXJjZVN0cmVhbS50aHJvdz8uKGVycm9yKXx8XG5Qcm9taXNlLnJlc29sdmUoc291cmNlU3RyZWFtLnJldHVybj8uKCkpLnRoZW4oKCk9PlxuUHJvbWlzZS5yZWplY3QoZXJyb3IpKTtcblxuIH1lbHNlIGlmKGRvbmUpe1xucmVzdWx0PVxuc291cmNlU3RyZWFtLnJldHVybj8uKCl8fFxuUHJvbWlzZS5yZXNvbHZlKHtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfSk7XG4gfWVsc2V7XG5yZXN1bHQ9c291cmNlU3RyZWFtLm5leHQoKTtcbiB9XG5yZXN1bHQudGhlbihcbihyKT0+e1xuaWYoci5kb25lKXtcbmRvbmVSZXN1bHQ9cjtcbiB9XG4gfSxcbigpPT57XG5kb25lUmVzdWx0PXtkb25lOnRydWUsdmFsdWU6dW5kZWZpbmVkfTtcbiB9KTtcblxuZm9yKGNvbnN0IHJlc29sdmUgb2YgcmVzb2x2ZXJzKXtcbnJlc29sdmUocmVzdWx0KTtcbiB9XG5yZXR1cm4gcHVsbE5leHQoKTtcbiB9O1xuXG5jb25zdCByZWFkZXJzPUFycmF5LmZyb20oe2xlbmd0aDpyZWFkZXJDb3VudH0pLm1hcCgoKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHF1ZXVlPW1ha2VRdWV1ZSgpO1xucXVldWVzLnB1c2gocXVldWUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVhZGVyPWhhcmRlbih7XG4gICAgICBhc3luYyBuZXh0KCl7XG4vKlxuXG5cblxuICAgICAgICAgKi9cbmNvbnN0e3Byb21pc2UscmVzb2x2ZX09bWFrZVByb21pc2VLaXQoKTtcbnF1ZXVlLnB1dCh7dmFsdWU6cmVzb2x2ZSxkb25lOmZhbHNlfSk7XG5yZXR1cm4gcHJvbWlzZTtcbiB9LFxuICAgICAgYXN5bmMgcmV0dXJuKCl7XG4vKlxuXG5cblxuICAgICAgICAgKi9cbmNvbnN0e3Byb21pc2UscmVzb2x2ZX09bWFrZVByb21pc2VLaXQoKTtcbnF1ZXVlLnB1dCh7dmFsdWU6cmVzb2x2ZSxkb25lOnRydWV9KTtcbnJldHVybiBwcm9taXNlO1xuIH0sXG4gICAgICBhc3luYyB0aHJvdyhyZWFzb24pe1xuY29uc3QgcmVqZWN0aW9uPVByb21pc2UucmVqZWN0KHJlYXNvbik7XG5xdWV1ZS5wdXQocmVqZWN0aW9uKTtcbnJldHVybiByZWplY3Rpb247XG4gfSxcbi8vXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCl7XG5yZXR1cm4gcmVhZGVyO1xuIH0sXG4vL1xuICAgICAgYXN5bmNbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKXtcbmF3YWl0IHJlYWRlci5yZXR1cm4oKTtcbiB9fSk7XG5cbnJldHVybiByZWFkZXI7XG4gfSk7XG5cbnZvaWQgcHVsbE5leHQoKTtcbnJldHVybiByZWFkZXJzO1xuIH07JGjNj19vbmNlLnN5bmNocm9uaXplZFRlZShzeW5jaHJvbml6ZWRUZWUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVlcGx5RnVsZmlsbGVkT2JqZWN0IjpbImRlZXBseUZ1bGZpbGxlZE9iamVjdCJdLCJQcm9taXNlQWxsT3JFcnJvcnMiOlsiUHJvbWlzZUFsbE9yRXJyb3JzIl0sImFnZ3JlZ2F0ZVRyeUZpbmFsbHkiOlsiYWdncmVnYXRlVHJ5RmluYWxseSJdLCJ3aXRoRGVmZXJyZWRDbGVhbnVwIjpbIndpdGhEZWZlcnJlZENsZWFudXAiXSwiYXNzZXJ0QWxsRGVmaW5lZCI6WyJhc3NlcnRBbGxEZWZpbmVkIl0sImZvcmV2ZXIiOlsiZm9yZXZlciJdLCJ3aGlsZVRydWUiOlsid2hpbGVUcnVlIl0sInVudGlsVHJ1ZSI6WyJ1bnRpbFRydWUiXSwiemlwIjpbInppcCJdLCJhbGxWYWx1ZXMiOlsiYWxsVmFsdWVzIl0sInN5bmNocm9uaXplZFRlZSI6WyJzeW5jaHJvbml6ZWRUZWUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA0Rx36boiAAC6IgAAMQAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIi4vZGVidWcuanMiLCIuL2Vycm9ycy5qcyIsIi4vbGliLWNoYWluU3RvcmFnZS5qcyIsIi4vbWFyc2hhbC5qcyIsIi4vbWV0aG9kLXRvb2xzLmpzIiwiLi90ZXN0aW5nLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdE1hcnNoYWxsZXIiLCJkZWZhdWx0U2VyaWFsaXplciIsImRvY3VtZW50U3RvcmFnZVNjaGVtYSIsIm1ha2VGYWtlU3RvcmFnZUtpdCIsIm1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdCIsInNsb3RTdHJpbmdVbnNlcmlhbGl6ZSIsInNsb3RUb1JlbW90YWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRmFyLG1ha2VNYXJzaGFsLFJlbW90YWJsZSxtYWtlVHJhY2VyLE5vbk51bGxpc2gsaXNTdHJlYW1DZWxsLG1ha2VDaGFpblN0b3JhZ2VSb290LHVubWFyc2hhbEZyb21Wc3RvcmFnZSxiaW5kQWxsTWV0aG9kcyxldmVudExvb3BJdGVyYXRpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dLFtcIlJlbW90YWJsZVwiLCBbJGjNj19hID0+IChSZW1vdGFibGUgPSAkaM2PX2EpXV1dXSxbXCIuL2RlYnVnLmpzXCIsIFtbXCJtYWtlVHJhY2VyXCIsIFskaM2PX2EgPT4gKG1ha2VUcmFjZXIgPSAkaM2PX2EpXV1dXSxbXCIuL2Vycm9ycy5qc1wiLCBbW1wiTm9uTnVsbGlzaFwiLCBbJGjNj19hID0+IChOb25OdWxsaXNoID0gJGjNj19hKV1dXV0sW1wiLi9saWItY2hhaW5TdG9yYWdlLmpzXCIsIFtbXCJpc1N0cmVhbUNlbGxcIiwgWyRozY9fYSA9PiAoaXNTdHJlYW1DZWxsID0gJGjNj19hKV1dLFtcIm1ha2VDaGFpblN0b3JhZ2VSb290XCIsIFskaM2PX2EgPT4gKG1ha2VDaGFpblN0b3JhZ2VSb290ID0gJGjNj19hKV1dXV0sW1wiLi9tYXJzaGFsLmpzXCIsIFtbXCJ1bm1hcnNoYWxGcm9tVnN0b3JhZ2VcIiwgWyRozY9fYSA9PiAodW5tYXJzaGFsRnJvbVZzdG9yYWdlID0gJGjNj19hKV1dXV0sW1wiLi9tZXRob2QtdG9vbHMuanNcIiwgW1tcImJpbmRBbGxNZXRob2RzXCIsIFskaM2PX2EgPT4gKGJpbmRBbGxNZXRob2RzID0gJGjNj19hKV1dXV0sW1wiLi90ZXN0aW5nLXV0aWxzLmpzXCIsIFtbXCJldmVudExvb3BJdGVyYXRpb25cIiwgWyRozY9fYSA9PiAoZXZlbnRMb29wSXRlcmF0aW9uID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3QgdHJhY2U9bWFrZVRyYWNlcignU3RvclRVJyxmYWxzZSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc2xvdFRvUmVtb3RhYmxlPShfc2xvdElkLGlmYWNlPSdSZW1vdGFibGUnKT0+XG5SZW1vdGFibGUoaWZhY2UpO1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5zbG90VG9SZW1vdGFibGUoc2xvdFRvUmVtb3RhYmxlKTtcbmNvbnN0ICAgICAgICBkZWZhdWx0TWFyc2hhbGxlcj1tYWtlTWFyc2hhbCh1bmRlZmluZWQsc2xvdFRvUmVtb3RhYmxlLHtcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KTtcblxuXG4vKlxuXG4gKi8kaM2PX29uY2UuZGVmYXVsdE1hcnNoYWxsZXIoZGVmYXVsdE1hcnNoYWxsZXIpO1xuY29uc3QgICAgICAgIGRlZmF1bHRTZXJpYWxpemVyPXtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnBhcnNlOih0eHQpPT5kZWZhdWx0TWFyc2hhbGxlci5mcm9tQ2FwRGF0YShKU09OLnBhcnNlKHR4dCkpLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnN0cmluZ2lmeToob2JqKT0+SlNPTi5zdHJpbmdpZnkoZGVmYXVsdE1hcnNoYWxsZXIudG9DYXBEYXRhKG9iaikpfTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZWZhdWx0U2VyaWFsaXplcihkZWZhdWx0U2VyaWFsaXplcik7XG5jb25zdCBtYWtlU2xvdFN0cmluZ1Vuc2VyaWFsaXplPSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlkZW50aXR5U2xvdFRvVmFsRm49KHNsb3QsXyk9PkZhcigndW5rJyx7dG9KU09OOigpPT5zbG90fSk7XG5jb25zdHtmcm9tQ2FwRGF0YX09bWFrZU1hcnNoYWwodW5kZWZpbmVkLGlkZW50aXR5U2xvdFRvVmFsRm4pO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZT0oY2FwRGF0YSk9PlxuSlNPTi5wYXJzZShcbkpTT04uc3RyaW5naWZ5KGZyb21DYXBEYXRhKGNhcERhdGEpLChfLHZhbCk9PntcbmlmKHR5cGVvZiB2YWw9PT0nYmlnaW50Jyl7XG4vL1xuLy9cbnJldHVybiBgQGVuY3JvbXVsYXRlOiR7dmFsfWA7XG4gfWVsc2V7XG5yZXR1cm4gdmFsO1xuIH1cbiB9KSxcbihfa2V5LHZhbCk9PntcbmlmKHR5cGVvZiB2YWw9PT0nc3RyaW5nJyYmdmFsLnN0YXJ0c1dpdGgoJ0BlbmNyb211bGF0ZScpKXtcbnJldHVybiBCaWdJbnQodmFsLnNwbGl0KCc6JylbMV0pO1xuIH1lbHNle1xucmV0dXJuIHZhbDtcbiB9XG4gfSk7XG5cbnJldHVybiBoYXJkZW4odW5zZXJpYWxpemUpO1xuIH07XG5jb25zdCAgICAgICAgc2xvdFN0cmluZ1Vuc2VyaWFsaXplPW1ha2VTbG90U3RyaW5nVW5zZXJpYWxpemUoKTtcblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5zbG90U3RyaW5nVW5zZXJpYWxpemUoc2xvdFN0cmluZ1Vuc2VyaWFsaXplKTtcbmNvbnN0ICAgICAgICBtYWtlRmFrZVN0b3JhZ2VLaXQ9KHJvb3RQYXRoLHJvb3RPcHRpb25zKT0+e1xuY29uc3QgcmVzb2x2ZWRPcHRpb25zPXtzZXF1ZW5jZTp0cnVlLC4uLnJvb3RPcHRpb25zfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGF0YT1uZXcgTWFwKCk7XG5sZXQgY3VycmVudEJsb2NrSGVpZ2h0PTA7XG5cbmNvbnN0IHVwZGF0ZU5ld0NlbGxCbG9ja0hlaWdodD0oYmxvY2tIZWlnaHQ9Y3VycmVudEJsb2NrSGVpZ2h0KzEpPT57XG5ibG9ja0hlaWdodD5jdXJyZW50QmxvY2tIZWlnaHR8fFxuRmFpbCBgYmxvY2tIZWlnaHQgJHtibG9ja0hlaWdodH0gbXVzdCBiZSBncmVhdGVyIHRoYW4gJHtjdXJyZW50QmxvY2tIZWlnaHR9YDtcbmN1cnJlbnRCbG9ja0hlaWdodD1ibG9ja0hlaWdodDtcbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2V0Q2hpbGRFbnRyaWVzPShwcmVmaXgpPT57XG5hc3NlcnQocHJlZml4LmVuZHNXaXRoKCcuJykpO1xuY29uc3QgY2hpbGRFbnRyaWVzPW5ldyBNYXAoKTtcbmZvcihjb25zdFtwYXRoLHZhbHVlXW9mIGRhdGEuZW50cmllcygpKXtcbmlmKCFwYXRoLnN0YXJ0c1dpdGgocHJlZml4KSl7XG5jb250aW51ZTtcbiB9XG5jb25zdFtzZWdtZW50LC4uLnN1ZmZpeF09cGF0aC5zbGljZShwcmVmaXgubGVuZ3RoKS5zcGxpdCgnLicpO1xuaWYoc3VmZml4Lmxlbmd0aD09PTApe1xuY2hpbGRFbnRyaWVzLnNldChzZWdtZW50LHZhbHVlKTtcbiB9ZWxzZSBpZighY2hpbGRFbnRyaWVzLmhhcyhzZWdtZW50KSl7XG5jaGlsZEVudHJpZXMuc2V0KHNlZ21lbnQsbnVsbCk7XG4gfVxuIH1cbnJldHVybiBjaGlsZEVudHJpZXM7XG4gfTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1lc3NhZ2VzPVtdO1xuXG5jb25zdCB0b1N0b3JhZ2U9RmFyKFxuJ1RvU3RvcmFnZScsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuKG1lc3NhZ2UpPT57XG5tZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xuc3dpdGNoKG1lc3NhZ2UubWV0aG9kKXtcbmNhc2UnZ2V0U3RvcmVLZXknOntcbmNvbnN0W2tleV09bWVzc2FnZS5hcmdzO1xucmV0dXJue3N0b3JlTmFtZTonc3dpbmdzZXQnLHN0b3JlU3Via2V5OiBgZmFrZToke2tleX1gfTtcbiB9XG5jYXNlJ2dldCc6e1xuY29uc3Rba2V5XT1tZXNzYWdlLmFyZ3M7XG5yZXR1cm4gZGF0YS5oYXMoa2V5KT9kYXRhLmdldChrZXkpOm51bGw7XG4gfVxuY2FzZSdjaGlsZHJlbic6e1xuY29uc3Rba2V5XT1tZXNzYWdlLmFyZ3M7XG5jb25zdCBjaGlsZEVudHJpZXM9Z2V0Q2hpbGRFbnRyaWVzKCBgJHtrZXl9LmApO1xucmV0dXJuWy4uLmNoaWxkRW50cmllcy5rZXlzKCldO1xuIH1cbmNhc2UnZW50cmllcyc6e1xuY29uc3Rba2V5XT1tZXNzYWdlLmFyZ3M7XG5jb25zdCBjaGlsZEVudHJpZXM9Z2V0Q2hpbGRFbnRyaWVzKCBgJHtrZXl9LmApO1xucmV0dXJuWy4uLmNoaWxkRW50cmllcy5lbnRyaWVzKCldLm1hcCgoZW50cnkpPT5cbmVudHJ5WzFdIT1udWxsP2VudHJ5OltlbnRyeVswXV0pO1xuXG4gfVxuY2FzZSdzZXQnOlxuY2FzZSdzZXRXaXRob3V0Tm90aWZ5Jzp7XG50cmFjZSgndG9TdG9yYWdlIHNldCcsbWVzc2FnZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbmV3RW50cmllcz1tZXNzYWdlLmFyZ3M7XG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mIG5ld0VudHJpZXMpe1xuaWYodmFsdWUhPW51bGwpe1xuZGF0YS5zZXQoa2V5LHZhbHVlKTtcbiB9ZWxzZXtcbmRhdGEuZGVsZXRlKGtleSk7XG4gfVxuIH1cbmJyZWFrO1xuIH1cbmNhc2UnYXBwZW5kJzp7XG50cmFjZSgndG9TdG9yYWdlIGFwcGVuZCcsbWVzc2FnZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbmV3RW50cmllcz1tZXNzYWdlLmFyZ3M7XG5mb3IoY29uc3Rba2V5LHZhbHVlXW9mIG5ld0VudHJpZXMpe1xudmFsdWUhPW51bGx8fEZhaWwgYGF0dGVtcHQgdG8gYXBwZW5kIHdpdGggbm8gdmFsdWVgO1xuLy9cbmNvbnN0IG9sZFZhbD1kYXRhLmdldChrZXkpO1xubGV0IHN0cmVhbUNlbGw7XG5pZihvbGRWYWwhPW51bGwpe1xudHJ5e1xuc3RyZWFtQ2VsbD1KU09OLnBhcnNlKG9sZFZhbCk7XG5hc3NlcnQoaXNTdHJlYW1DZWxsKHN0cmVhbUNlbGwpKTtcbiB9Y2F0Y2goX2Vycil7XG5zdHJlYW1DZWxsPXVuZGVmaW5lZDtcbiB9XG4gfVxuaWYoXG5zdHJlYW1DZWxsPT09dW5kZWZpbmVkfHxcbk51bWJlcihzdHJlYW1DZWxsLmJsb2NrSGVpZ2h0KSE9PWN1cnJlbnRCbG9ja0hlaWdodClcbntcbnN0cmVhbUNlbGw9e1xuYmxvY2tIZWlnaHQ6U3RyaW5nKGN1cnJlbnRCbG9ja0hlaWdodCksXG52YWx1ZXM6IXN0cmVhbUNlbGwmJm9sZFZhbCE9bnVsbD9bb2xkVmFsXTpbXX07XG5cbiB9XG5zdHJlYW1DZWxsLnZhbHVlcy5wdXNoKHZhbHVlKTtcbmRhdGEuc2V0KGtleSxKU09OLnN0cmluZ2lmeShzdHJlYW1DZWxsKSk7XG4gfVxuYnJlYWs7XG4gfVxuY2FzZSdzaXplJzpcbi8vXG4vL1xucmV0dXJuWy4uLmRhdGEua2V5cygpXS5maWx0ZXIoKGspPT5cbmsuc3RhcnRzV2l0aCggYCR7bWVzc2FnZS5hcmdzWzBdfS5gKSkuXG5sZW5ndGg7XG5kZWZhdWx0OlxudGhyb3cgRXJyb3IoIGB1bnN1cHBvcnRlZCBtZXRob2Q6ICR7bWVzc2FnZS5tZXRob2R9YCk7fVxuXG4gfSk7XG5cbmNvbnN0IHJvb3ROb2RlPW1ha2VDaGFpblN0b3JhZ2VSb290KHRvU3RvcmFnZSxyb290UGF0aCxyZXNvbHZlZE9wdGlvbnMpO1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0VmFsdWVzPShwYXRoKT0+e1xuYXNzZXJ0KHJlc29sdmVkT3B0aW9ucy5zZXF1ZW5jZSk7XG5jb25zdCBub2RlRGF0YT1kYXRhLmdldChwYXRoKTtcbmFzc2VydChub2RlRGF0YSwgYG5vIGRhdGEgYXQgcGF0aCAke3BhdGh9YCk7XG5jb25zdCB3cmFwcGVyPUpTT04ucGFyc2Uobm9kZURhdGEpO1xucmV0dXJuIHdyYXBwZXIudmFsdWVzO1xuIH07XG5cbnJldHVybntcbnJvb3ROb2RlLFxuLy9cbmRhdGE6LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL2RhdGEsXG51cGRhdGVOZXdDZWxsQmxvY2tIZWlnaHQsXG5nZXRWYWx1ZXMsXG5tZXNzYWdlcyxcbnRvU3RvcmFnZX07XG5cbiB9OyRozY9fb25jZS5tYWtlRmFrZVN0b3JhZ2VLaXQobWFrZUZha2VTdG9yYWdlS2l0KTtcbmhhcmRlbihtYWtlRmFrZVN0b3JhZ2VLaXQpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlTW9ja0NoYWluU3RvcmFnZVJvb3Q9KCk9PntcbmNvbnN0e3Jvb3ROb2RlLGRhdGF9PW1ha2VGYWtlU3RvcmFnZUtpdCgnbW9ja0NoYWluU3RvcmFnZVJvb3QnKTtcbnJldHVybiBGYXIoJ21vY2tDaGFpblN0b3JhZ2UnLHtcbi4uLmJpbmRBbGxNZXRob2RzKHJvb3ROb2RlKSxcbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAgICovXG5nZXRCb2R5OihwYXRoLG1hcnNoYWxsZXI9ZGVmYXVsdE1hcnNoYWxsZXIsaW5kZXg9LTEpPT57XG5kYXRhLnNpemV8fEZhaWwgYG5vIGRhdGEgaW4gc3RvcmFnZWA7XG4vKlxuXG5cblxuICAgICAgICovXG5jb25zdCBmcm9tQ2FwRGF0YT0oLi4uYXJncyk9PlxuUmVmbGVjdC5hcHBseShtYXJzaGFsbGVyLmZyb21DYXBEYXRhLG1hcnNoYWxsZXIsYXJncyk7XG5yZXR1cm4gdW5tYXJzaGFsRnJvbVZzdG9yYWdlKGRhdGEscGF0aCxmcm9tQ2FwRGF0YSxpbmRleCk7XG4gfSxcbmtleXM6KCk9PlsuLi5kYXRhLmtleXMoKV19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZU1vY2tDaGFpblN0b3JhZ2VSb290KG1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdCk7XG5jb25zdCAgICAgICAgZG9jdW1lbnRTdG9yYWdlU2NoZW1hPWFzeW5jKHQsc3RvcmFnZSxvcHRzKT0+e1xuLy9cbmF3YWl0IGV2ZW50TG9vcEl0ZXJhdGlvbigpO1xuXG5jb25zdCBnZXRMYXN0PSgvKiAgICAgICAgICAgICAgICAgKi9jZWxsKT0+XG5KU09OLnBhcnNlKGNlbGwpLnZhbHVlcy5hdCgtMSl8fGFzc2VydC5mYWlsKCk7XG5jb25zdHtzaG93VmFsdWU9KHMpPT5zfT1vcHRzO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZ2V0Qm9keURlZmF1bHQ9KGQsayk9PnNob3dWYWx1ZShnZXRMYXN0KE5vbk51bGxpc2goZC5nZXQoaykpKSk7XG5cbmNvbnN0W2tleXMsZ2V0Qm9keV09XG4na2V5cydpbiBzdG9yYWdlP1xuW3N0b3JhZ2Uua2V5cygpLCgvKiAgICAgICAgICAgICAgICAgKi9rKT0+c3RvcmFnZS5nZXRCb2R5KGspXTpcbltcbnN0b3JhZ2UuZGF0YS5rZXlzKCksXG4oLyogICAgICAgICAgICAgICAgICovayk9PmdldEJvZHlEZWZhdWx0KHN0b3JhZ2UuZGF0YSxrKV07XG5cblxuY29uc3R7cGF0dGVybixyZXBsYWNlbWVudH09XG4ncGF0dGVybidpbiBvcHRzP1xub3B0czpcbntwYXR0ZXJuOidtb2NrQ2hhaW5TdG9yYWdlUm9vdC4nLHJlcGxhY2VtZW50OidwdWJsaXNoZWQuJ307XG5cbmNvbnN0IHBydW5lZD1bLi4ua2V5c10uXG5zb3J0KCkuXG5maWx0ZXIoXG4nbm9kZSdpbiBvcHRzP1xuKGtleSk9Plxua2V5LlxucmVwbGFjZShwYXR0ZXJuLHJlcGxhY2VtZW50KS5cbnN0YXJ0c1dpdGgoIGBwdWJsaXNoZWQuJHtvcHRzLm5vZGV9YCk6XG4oX2VudHJ5KT0+dHJ1ZSk7XG5cblxuY29uc3QgaWxsdXN0cmF0aW9uPXBydW5lZC5tYXAoXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuKGtleSk9PltrZXkucmVwbGFjZShwYXR0ZXJuLHJlcGxhY2VtZW50KSxnZXRCb2R5KGtleSldKTtcblxuXG5jb25zdCBub3RlPVxuJ25vdGUnaW4gb3B0cz9cbm9wdHMubm90ZTpcbiBgVW5kZXIgXCJwdWJsaXNoZWRcIiwgdGhlIFwiJHtvcHRzLm5vZGV9XCIgbm9kZSBpcyBkZWxlZ2F0ZWQgdG8gJHtvcHRzLm93bmVyfS5gO1xuY29uc3QgYm9pbGVycGxhdGU9IGBcblRoZSBleGFtcGxlIGJlbG93IGlsbHVzdHJhdGVzIHRoZSBzY2hlbWEgb2YgdGhlIGRhdGEgcHVibGlzaGVkIHRoZXJlLlxuXG5TZWUgYWxzbyBib2FyZCBtYXJzaGFsbGluZyBjb252ZW50aW9ucyAoX3RvIGFwcGVhcl8pLmA7XG50LnNuYXBzaG90KGlsbHVzdHJhdGlvbixub3RlK2JvaWxlcnBsYXRlKTtcbiB9OyRozY9fb25jZS5kb2N1bWVudFN0b3JhZ2VTY2hlbWEoZG9jdW1lbnRTdG9yYWdlU2NoZW1hKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InNsb3RUb1JlbW90YWJsZSI6WyJzbG90VG9SZW1vdGFibGUiXSwiZGVmYXVsdE1hcnNoYWxsZXIiOlsiZGVmYXVsdE1hcnNoYWxsZXIiXSwiZGVmYXVsdFNlcmlhbGl6ZXIiOlsiZGVmYXVsdFNlcmlhbGl6ZXIiXSwic2xvdFN0cmluZ1Vuc2VyaWFsaXplIjpbInNsb3RTdHJpbmdVbnNlcmlhbGl6ZSJdLCJtYWtlRmFrZVN0b3JhZ2VLaXQiOlsibWFrZUZha2VTdG9yYWdlS2l0Il0sIm1ha2VNb2NrQ2hhaW5TdG9yYWdlUm9vdCI6WyJtYWtlTW9ja0NoYWluU3RvcmFnZVJvb3QiXSwiZG9jdW1lbnRTdG9yYWdlU2NoZW1hIjpbImRvY3VtZW50U3RvcmFnZVNjaGVtYSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADrGI4BUAYAAFAGAAAsAAAAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3Rlc3RpbmctdXRpbHMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImV2ZW50TG9vcEl0ZXJhdGlvbiIsImluc3BlY3RNYXBTdG9yZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLypcblxuXG4gKi9cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlbnRMb29wSXRlcmF0aW9uPWFzeW5jKCk9PlxubmV3IFByb21pc2UoKHJlc29sdmUpPT5zZXRJbW1lZGlhdGUocmVzb2x2ZSkpOyRozY9fb25jZS5ldmVudExvb3BJdGVyYXRpb24oZXZlbnRMb29wSXRlcmF0aW9uKTtcbmhhcmRlbihldmVudExvb3BJdGVyYXRpb24pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdPclRhZz0odmFsdWUpPT57XG5pZih0eXBlb2YgdmFsdWU9PT0nc3RyaW5nJyl7XG5yZXR1cm4gdmFsdWU7XG4gfWVsc2UgaWYodHlwZW9mIHZhbHVlPT09J29iamVjdCcmJlN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZSl7XG5yZXR1cm4gdmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXTtcbiB9XG5yZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiB9O1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBpbnNwZWN0TWFwU3RvcmU9KHN0b3JlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG9iaj17fTtcbmZvcihjb25zdCBrZXkgb2Ygc3RvcmUua2V5cygpKXtcbmNvbnN0IHZhbHVlPXN0b3JlLmdldChrZXkpO1xuY29uc3QgaGFzS2V5cz10eXBlb2YgdmFsdWU9PT0nb2JqZWN0JyYmJ2tleXMnaW4gdmFsdWU7XG5jb25zdCBpbmRleD1zdHJpbmdPclRhZyhrZXkpO1xuaWYoaGFzS2V5cyYmJ2dldCdpbiB2YWx1ZSl7XG5vYmpbaW5kZXhdPWluc3BlY3RNYXBTdG9yZSh2YWx1ZSk7XG4gfWVsc2UgaWYoaGFzS2V5cyl7XG5vYmpbaW5kZXhdPUFycmF5LmZyb20odmFsdWUua2V5cygpKTtcbiB9ZWxzZXtcbm9ialtpbmRleF09XG52YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCYmU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbHVlP1xudmFsdWVbU3ltYm9sLnRvU3RyaW5nVGFnXTpcbnZhbHVlO1xuIH1cbiB9XG5yZXR1cm4gb2JqO1xuIH07JGjNj19vbmNlLmluc3BlY3RNYXBTdG9yZShpbnNwZWN0TWFwU3RvcmUpO1xuaGFyZGVuKGluc3BlY3RNYXBTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJldmVudExvb3BJdGVyYXRpb24iOlsiZXZlbnRMb29wSXRlcmF0aW9uIl0sImluc3BlY3RNYXBTdG9yZSI6WyJpbnNwZWN0TWFwU3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGERIDiwDAAAsAwAAKAAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90eXBlQ2hlY2suanN7ImltcG9ydHMiOlsiQGVuZG8vcGF0dGVybnMiXSwiZXhwb3J0cyI6WyJjYXN0IiwibXVzdE1hdGNoIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHlwZWxlc3NNdXN0TWF0Y2g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKHR5cGVsZXNzTXVzdE1hdGNoID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKlxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbXVzdE1hdGNoPXR5cGVsZXNzTXVzdE1hdGNoO1xuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UubXVzdE1hdGNoKG11c3RNYXRjaCk7XG5jb25zdCAgICAgICAgY2FzdD0oc3BlY2ltZW4scGF0dCk9Pntcbi8vXG4vL1xuLy9cbm11c3RNYXRjaChzcGVjaW1lbixwYXR0KTtcbnJldHVybiBzcGVjaW1lbjtcbiB9OyRozY9fb25jZS5jYXN0KGNhc3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibXVzdE1hdGNoIjpbIm11c3RNYXRjaCJdLCJjYXN0IjpbImNhc3QiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAkPuG/0kEAABJBAAAKQAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy90eXBlR3VhcmRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiQnJpZGdlQmlnSW50U2hhcGUiLCJTdG9yYWdlTm9kZVNoYXBlIiwiVW5ndWFyZGVkSGVscGVySSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE07JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiTVwiLCBbJGjNj19hID0+IChNID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuY29uc3QgICAgICAgIFN0b3JhZ2VOb2RlU2hhcGU9TS5yZW1vdGFibGUoJ1N0b3JhZ2VOb2RlJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyRozY9fb25jZS5TdG9yYWdlTm9kZVNoYXBlKFN0b3JhZ2VOb2RlU2hhcGUpO1xuY29uc3QgICAgICAgIFVuZ3VhcmRlZEhlbHBlckk9TS5pbnRlcmZhY2UoXG4naGVscGVyJyxcbnt9LFxuLy9cbntzbG9wcHk6dHJ1ZX0pO1xuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuICovJGjNj19vbmNlLlVuZ3VhcmRlZEhlbHBlckkoVW5ndWFyZGVkSGVscGVySSk7XG5jb25zdCAgICAgICAgQnJpZGdlQmlnSW50U2hhcGU9TS5vcihNLm51bWJlcigpLE0uc3RyaW5nKCkpOyRozY9fb25jZS5CcmlkZ2VCaWdJbnRTaGFwZShCcmlkZ2VCaWdJbnRTaGFwZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJTdG9yYWdlTm9kZVNoYXBlIjpbIlN0b3JhZ2VOb2RlU2hhcGUiXSwiVW5ndWFyZGVkSGVscGVySSI6WyJVbmd1YXJkZWRIZWxwZXJJIl0sIkJyaWRnZUJpZ0ludFNoYXBlIjpbIkJyaWRnZUJpZ0ludFNoYXBlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAVESyZ5AQAAeQEAACoAAABAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdHlwZXMtaW5kZXguanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA03qr5UEHAABBBwAAKgAAAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy91cGdyYWRlLWFwaS5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUiLCJpc0FiYW5kb25lZEVycm9yIiwiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiIsIm1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE0sbWF0Y2hlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuY29uc3R7aXNGcm96ZW59PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgICAgICAgIFVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGU9aGFyZGVuKHtcbm5hbWU6J3ZhdFVwZ3JhZGVkJyxcbnVwZ3JhZGVNZXNzYWdlOk0uc3RyaW5nKCksXG5pbmNhcm5hdGlvbk51bWJlcjpNLm51bWJlcigpfSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5VcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlKFVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUpO1xuY29uc3QgICAgICAgIG1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbj0odXBncmFkZU1lc3NhZ2UsdG9JbmNhcm5hdGlvbk51bWJlcik9PlxuaGFyZGVuKHtcbm5hbWU6J3ZhdFVwZ3JhZGVkJyxcbnVwZ3JhZGVNZXNzYWdlLFxuaW5jYXJuYXRpb25OdW1iZXI6dG9JbmNhcm5hdGlvbk51bWJlcn0pOyRozY9fb25jZS5tYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24obWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uKTtcblxuaGFyZGVuKG1ha2VVcGdyYWRlRGlzY29ubmVjdGlvbik7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzVXBncmFkZURpc2Nvbm5lY3Rpb249KHJlYXNvbik9PlxucmVhc29uIT1udWxsJiYvL1xuaXNGcm96ZW4ocmVhc29uKSYmXG5tYXRjaGVzKHJlYXNvbixVcGdyYWRlRGlzY29ubmVjdGlvblNoYXBlKTskaM2PX29uY2UuaXNVcGdyYWRlRGlzY29ubmVjdGlvbihpc1VwZ3JhZGVEaXNjb25uZWN0aW9uKTtcbmhhcmRlbihpc1VwZ3JhZGVEaXNjb25uZWN0aW9uKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc0FiYW5kb25lZEVycm9yPShyZWFzb24pPT5cbnJlYXNvbiE9bnVsbCYmLy9cbmlzRnJvemVuKHJlYXNvbikmJlxubWF0Y2hlcyhyZWFzb24sTS5lcnJvcigpKSYmXG4vL1xuLy9cbnJlYXNvbi5tZXNzYWdlPT09J3ZhdCB0ZXJtaW5hdGVkJzskaM2PX29uY2UuaXNBYmFuZG9uZWRFcnJvcihpc0FiYW5kb25lZEVycm9yKTtcbmhhcmRlbihpc0FiYW5kb25lZEVycm9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlVwZ3JhZGVEaXNjb25uZWN0aW9uU2hhcGUiOlsiVXBncmFkZURpc2Nvbm5lY3Rpb25TaGFwZSJdLCJtYWtlVXBncmFkZURpc2Nvbm5lY3Rpb24iOlsibWFrZVVwZ3JhZGVEaXNjb25uZWN0aW9uIl0sImlzVXBncmFkZURpc2Nvbm5lY3Rpb24iOlsiaXNVcGdyYWRlRGlzY29ubmVjdGlvbiJdLCJpc0FiYW5kb25lZEVycm9yIjpbImlzQWJhbmRvbmVkRXJyb3IiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAEo7iXzYIAAA2CAAAMwAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc3siaW1wb3J0cyI6WyJAZW5kby9mYXIiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIiwib2JzZXJ2ZUl0ZXJhdGlvbiIsIm9ic2VydmVJdGVyYXRvciIsIm9ic2VydmVOb3RpZmllciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsc3Vic2NyaWJlTGF0ZXN0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlTGF0ZXN0XCIsIFskaM2PX2EgPT4gKHN1YnNjcmliZUxhdGVzdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXI9c3Vic2NyaWJlTGF0ZXN0O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyKG1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyKTtcbmNvbnN0ICAgICAgICBvYnNlcnZlSXRlcmF0b3I9KGFzeW5jSXRlcmF0b3JQLGl0ZXJhdGlvbk9ic2VydmVyKT0+e1xucmV0dXJuIG5ldyBQcm9taXNlKChhY2ssb2JzZXJ2ZXJFcnJvcik9PntcbmNvbnN0IHJlY3VyPSgpPT57XG5FLndoZW4oXG5FKGFzeW5jSXRlcmF0b3JQKS5uZXh0KCksXG4oe3ZhbHVlLGRvbmV9KT0+e1xuaWYoZG9uZSl7XG5pdGVyYXRpb25PYnNlcnZlci5maW5pc2gmJml0ZXJhdGlvbk9ic2VydmVyLmZpbmlzaCh2YWx1ZSk7XG5hY2sodW5kZWZpbmVkKTtcbiB9ZWxzZXtcbml0ZXJhdGlvbk9ic2VydmVyLnVwZGF0ZVN0YXRlJiZcbml0ZXJhdGlvbk9ic2VydmVyLnVwZGF0ZVN0YXRlKHZhbHVlKTtcbnJlY3VyKCk7XG4gfVxuIH0sXG4ocmVhc29uKT0+e1xuaXRlcmF0aW9uT2JzZXJ2ZXIuZmFpbCYmaXRlcmF0aW9uT2JzZXJ2ZXIuZmFpbChyZWFzb24pO1xuYWNrKHVuZGVmaW5lZCk7XG4gfSkuXG5jYXRjaChvYnNlcnZlckVycm9yKTtcbiB9O1xucmVjdXIoKTtcbiB9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm9ic2VydmVJdGVyYXRvcihvYnNlcnZlSXRlcmF0b3IpO1xuY29uc3QgICAgICAgIG9ic2VydmVJdGVyYXRpb249KGFzeW5jSXRlcmFibGVQLGl0ZXJhdGlvbk9ic2VydmVyKT0+e1xuY29uc3QgaXRlcmF0b3JQPUUoYXN5bmNJdGVyYWJsZVApW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpO1xucmV0dXJuIG9ic2VydmVJdGVyYXRvcihpdGVyYXRvclAsaXRlcmF0aW9uT2JzZXJ2ZXIpO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2Uub2JzZXJ2ZUl0ZXJhdGlvbihvYnNlcnZlSXRlcmF0aW9uKTtcbmNvbnN0ICAgICAgICBvYnNlcnZlTm90aWZpZXI9KG5vdGlmaWVyUCxpdGVyYXRpb25PYnNlcnZlcik9Plxub2JzZXJ2ZUl0ZXJhdGlvbihzdWJzY3JpYmVMYXRlc3Qobm90aWZpZXJQKSxpdGVyYXRpb25PYnNlcnZlcik7JGjNj19vbmNlLm9ic2VydmVOb3RpZmllcihvYnNlcnZlTm90aWZpZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiOlsibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiXSwib2JzZXJ2ZUl0ZXJhdG9yIjpbIm9ic2VydmVJdGVyYXRvciJdLCJvYnNlcnZlSXRlcmF0aW9uIjpbIm9ic2VydmVJdGVyYXRpb24iXSwib2JzZXJ2ZU5vdGlmaWVyIjpbIm9ic2VydmVOb3RpZmllciJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACgC8uyDAgAAAwIAAAkAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vcHVibGlzaC1raXQuanMiLCIuL3N1YnNjcmliZS5qcyIsIi4vbm90aWZpZXIuanMiLCIuL3N1YnNjcmliZXIuanMiLCIuL3RvcGljLmpzIiwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyIsIi4vc3RvcmVzdWIuanMiLCIuL3N0b3JlZC1ub3RpZmllci5qcyIsIi4vdHlwZXMtaW5kZXguanMiXSwiZXhwb3J0cyI6WyJtYWtlTm90aWZpZXJLaXQiLCJtYWtlTm90aWZpZXJLaXQiLCJtYWtlU3Vic2NyaXB0aW9uS2l0IiwibWFrZVN1YnNjcmlwdGlvbktpdCIsIm9ic2VydmVJdGVyYXRvciIsIm9ic2VydmVJdGVyYXRvciIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInN1YnNjcmliZUxhdGVzdCIsInN1YnNjcmliZUxhdGVzdCIsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3N0b3JlZC1ub3RpZmllci5qcyIsIi4vc3RvcmVzdWIuanMiLCIuL3R5cGVzLWluZGV4LmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vcHVibGlzaC1raXQuanNcIiwgW11dLFtcIi4vc3Vic2NyaWJlLmpzXCIsIFtdXSxbXCIuL25vdGlmaWVyLmpzXCIsIFtdXSxbXCIuL3N1YnNjcmliZXIuanNcIiwgW11dLFtcIi4vdG9waWMuanNcIiwgW11dLFtcIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanNcIiwgW11dLFtcIi4vc3RvcmVzdWIuanNcIiwgW11dLFtcIi4vc3RvcmVkLW5vdGlmaWVyLmpzXCIsIFtdXSxbXCIuL3R5cGVzLWluZGV4LmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9wdWJsaXNoLWtpdC5qcyI6W1sibWFrZVB1Ymxpc2hLaXQiLCJtYWtlUHVibGlzaEtpdCJdLFsicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0IiwicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0Il0sWyJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIiwiRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZSJdLFsiSXRlcmFibGVFYWNoVG9waWNJIiwiSXRlcmFibGVFYWNoVG9waWNJIl0sWyJJdGVyYWJsZUxhdGVzdFRvcGljSSIsIkl0ZXJhYmxlTGF0ZXN0VG9waWNJIl0sWyJTdWJzY3JpYmVyU2hhcGUiLCJTdWJzY3JpYmVyU2hhcGUiXV0sIi4vc3Vic2NyaWJlLmpzIjpbWyJzdWJzY3JpYmVFYWNoIiwic3Vic2NyaWJlRWFjaCJdLFsic3Vic2NyaWJlTGF0ZXN0Iiwic3Vic2NyaWJlTGF0ZXN0Il1dLCIuL25vdGlmaWVyLmpzIjpbWyJtYWtlTm90aWZpZXIiLCJtYWtlTm90aWZpZXIiXSxbIm1ha2VOb3RpZmllcktpdCIsIm1ha2VOb3RpZmllcktpdCJdLFsibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiLCJtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSJdLFsibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIiLCJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciJdXSwiLi9zdWJzY3JpYmVyLmpzIjpbWyJtYWtlU3Vic2NyaXB0aW9uIiwibWFrZVN1YnNjcmlwdGlvbiJdLFsibWFrZVN1YnNjcmlwdGlvbktpdCIsIm1ha2VTdWJzY3JpcHRpb25LaXQiXV0sIi4vdG9waWMuanMiOltbIm1ha2VQaW5uZWRIaXN0b3J5VG9waWMiLCJtYWtlUGlubmVkSGlzdG9yeVRvcGljIl1dLCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIjpbWyJvYnNlcnZlTm90aWZpZXIiLCJvYnNlcnZlTm90aWZpZXIiXSxbIm9ic2VydmVJdGVyYXRvciIsIm9ic2VydmVJdGVyYXRvciJdLFsib2JzZXJ2ZUl0ZXJhdGlvbiIsIm9ic2VydmVJdGVyYXRpb24iXSxbIm1ha2VBc3luY0l0ZXJhYmxlRnJvbU5vdGlmaWVyIiwibWFrZUFzeW5jSXRlcmFibGVGcm9tTm90aWZpZXIiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPOeblugEAAAoBAAACcAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvbm90aWZpZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiLi9wdWJsaXNoLWtpdC5qcyIsIi4vc3Vic2NyaWJlLmpzIl0sImV4cG9ydHMiOlsibWFrZU5vdGlmaWVyIiwibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiLCJtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlciIsIm1ha2VOb3RpZmllcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxFLEZhcixtYWtlUHVibGlzaEtpdCxzdWJzY3JpYmVMYXRlc3Q7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiLi9wdWJsaXNoLWtpdC5qc1wiLCBbW1wibWFrZVB1Ymxpc2hLaXRcIiwgWyRozY9fYSA9PiAobWFrZVB1Ymxpc2hLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlTGF0ZXN0XCIsIFskaM2PX2EgPT4gKHN1YnNjcmliZUxhdGVzdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTm90aWZpZXI9KHNoYXJhYmxlSW50ZXJuYWxzUCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBub3RpZmllcj1GYXIoJ25vdGlmaWVyJyx7XG4uLi5zdWJzY3JpYmVMYXRlc3Qoc2hhcmFibGVJbnRlcm5hbHNQKSxcbmdldFVwZGF0ZVNpbmNlOmFzeW5jKHVwZGF0ZUNvdW50KT0+XG5FKHNoYXJhYmxlSW50ZXJuYWxzUCkuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpLFxuXG4vKlxuXG5cblxuXG4gICAgICovXG5nZXRTaGFyYWJsZU5vdGlmaWVySW50ZXJuYWxzOmFzeW5jKCk9PnNoYXJhYmxlSW50ZXJuYWxzUCxcbi8qXG5cblxuXG4gICAgICovXG5nZXRTdG9yZUtleTooKT0+aGFyZGVuKHtub3RpZmllcn0pfSk7XG5cbnJldHVybiBub3RpZmllcjtcbiB9O1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLm1ha2VOb3RpZmllcihtYWtlTm90aWZpZXIpO1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyPShzdWJzY3JpYmVyKT0+e1xuLypcblxuICAgKi9cbmNvbnN0IGJhc2VOb3RpZmllcj1oYXJkZW4oe1xuZ2V0VXBkYXRlU2luY2U6KHVwZGF0ZUNvdW50PXVuZGVmaW5lZCk9PlxuRShzdWJzY3JpYmVyKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgbm90aWZpZXI9RmFyKCdub3RpZmllcicse1xuLi4ubWFrZU5vdGlmaWVyKGJhc2VOb3RpZmllciksXG4uLi5iYXNlTm90aWZpZXJ9KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH07JGjNj19vbmNlLm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyKG1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyKTtcbmhhcmRlbihtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTm90aWZpZXJLaXQ9KC4uLmluaXRpYWxTdGF0ZUFycik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0e3B1Ymxpc2hlcixzdWJzY3JpYmVyfT1tYWtlUHVibGlzaEtpdCgpO1xuXG5jb25zdCBub3RpZmllcj1tYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcihzdWJzY3JpYmVyKTtcblxuY29uc3QgdXBkYXRlcj1GYXIoJ3VwZGF0ZXInLHtcbnVwZGF0ZVN0YXRlOihzdGF0ZSk9PnB1Ymxpc2hlci5wdWJsaXNoKHN0YXRlKSxcbmZpbmlzaDooY29tcGxldGlvbik9PnB1Ymxpc2hlci5maW5pc2goY29tcGxldGlvbiksXG5mYWlsOihyZWFzb24pPT5wdWJsaXNoZXIuZmFpbChyZWFzb24pfSk7XG5cblxuYXNzZXJ0KGluaXRpYWxTdGF0ZUFyci5sZW5ndGg8PTEsJ3RvbyBtYW55IGFyZ3VtZW50cycpO1xuaWYoaW5pdGlhbFN0YXRlQXJyLmxlbmd0aD09PTEpe1xudXBkYXRlci51cGRhdGVTdGF0ZShpbml0aWFsU3RhdGVBcnJbMF0pO1xuIH1cblxuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKHtub3RpZmllcix1cGRhdGVyfSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VOb3RpZmllcktpdChtYWtlTm90aWZpZXJLaXQpO1xuY29uc3QgICAgICAgIG1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlPShhc3luY0l0ZXJhYmxlUCk9PntcbmNvbnN0IGl0ZXJhdG9yUD1FKGFzeW5jSXRlcmFibGVQKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IG9wdE5leHRQcm9taXNlO1xubGV0IGN1cnJlbnRVcGRhdGVDb3VudD0wbjtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBjdXJyZW50UmVzcG9uc2U7XG5sZXQgZmluYWw9ZmFsc2U7XG5cbi8qXG5cbiAgICovXG5jb25zdCBiYXNlTm90aWZpZXI9RmFyKCdiYXNlTm90aWZpZXInLHtcbmdldFVwZGF0ZVNpbmNlKHVwZGF0ZUNvdW50PS0xbil7XG5pZih1cGRhdGVDb3VudDxjdXJyZW50VXBkYXRlQ291bnQpe1xuaWYoY3VycmVudFJlc3BvbnNlKXtcbnJldHVybiBQcm9taXNlLnJlc29sdmUoY3VycmVudFJlc3BvbnNlKTtcbiB9XG4gfWVsc2UgaWYodXBkYXRlQ291bnQhPT1jdXJyZW50VXBkYXRlQ291bnQpe1xudGhyb3cgRXJyb3IoXG4nZ2V0VXBkYXRlU2luY2UgYXJndW1lbnQgbXVzdCBiZSBhIHByZXZpb3VzbHktaXNzdWVkIHVwZGF0ZUNvdW50LicpO1xuXG4gfVxuXG4vL1xuaWYoZmluYWwpe1xuYXNzZXJ0KGN1cnJlbnRSZXNwb25zZSE9PXVuZGVmaW5lZCk7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGN1cnJlbnRSZXNwb25zZSk7XG4gfVxuaWYoIW9wdE5leHRQcm9taXNlKXtcbmNvbnN0IG5leHRJdGVyUmVzdWx0UD1FKGl0ZXJhdG9yUCkubmV4dCgpO1xub3B0TmV4dFByb21pc2U9RS53aGVuKFxubmV4dEl0ZXJSZXN1bHRQLFxuKHtkb25lLHZhbHVlfSk9PntcbmFzc2VydCghZmluYWwpO1xuaWYoZG9uZSl7XG5maW5hbD10cnVlO1xuIH1cbmN1cnJlbnRVcGRhdGVDb3VudCs9MW47XG5jdXJyZW50UmVzcG9uc2U9aGFyZGVuKHtcbnZhbHVlLFxudXBkYXRlQ291bnQ6ZG9uZT91bmRlZmluZWQ6Y3VycmVudFVwZGF0ZUNvdW50fSk7XG5cbm9wdE5leHRQcm9taXNlPXVuZGVmaW5lZDtcbnJldHVybiBjdXJyZW50UmVzcG9uc2U7XG4gfSxcbihfcmVhc29uKT0+e1xuZmluYWw9dHJ1ZTtcbmN1cnJlbnRSZXNwb25zZT1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubmV4dEl0ZXJSZXN1bHRQO1xub3B0TmV4dFByb21pc2U9dW5kZWZpbmVkO1xucmV0dXJuIGN1cnJlbnRSZXNwb25zZTtcbiB9KTtcblxuIH1cbnJldHVybiBvcHROZXh0UHJvbWlzZTtcbiB9fSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG5vdGlmaWVyPUZhcignbm90aWZpZXInLHtcbi8vXG4vL1xuLi4ubWFrZU5vdGlmaWVyKGJhc2VOb3RpZmllciksXG4uLi5iYXNlTm90aWZpZXJ9KTtcblxucmV0dXJuIG5vdGlmaWVyO1xuIH07JGjNj19vbmNlLm1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlKG1ha2VOb3RpZmllckZyb21Bc3luY0l0ZXJhYmxlKTtcbmhhcmRlbihtYWtlTm90aWZpZXJGcm9tQXN5bmNJdGVyYWJsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTm90aWZpZXIiOlsibWFrZU5vdGlmaWVyIl0sIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIjpbIm1ha2VOb3RpZmllckZyb21TdWJzY3JpYmVyIl0sIm1ha2VOb3RpZmllcktpdCI6WyJtYWtlTm90aWZpZXJLaXQiXSwibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiOlsibWFrZU5vdGlmaWVyRnJvbUFzeW5jSXRlcmFibGUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAADBRsiFwrAABcKwAAKgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9wdWJsaXNoLWtpdC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9mYXIiLCJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL3BhdHRlcm5zIiwiQGFnb3JpYy92YXQtZGF0YSJdLCJleHBvcnRzIjpbIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiLCJJdGVyYWJsZUVhY2hUb3BpY0kiLCJJdGVyYWJsZUxhdGVzdFRvcGljSSIsIlB1Ymxpc2hlckkiLCJTdWJzY3JpYmVySSIsIlN1YnNjcmliZXJTaGFwZSIsIlVwZGF0ZUNvdW50U2hhcGUiLCJtYWtlUHVibGlzaEtpdCIsInByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCIsInB1Ymxpc2hLaXRJS2l0Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEUsRmFyLG1ha2VQcm9taXNlS2l0LE0sZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkLGNhbkJlRHVyYWJsZSxwcmVwYXJlRXhvQ2xhc3NLaXQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9mYXJcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcIm1ha2VQcm9taXNlS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VQcm9taXNlS2l0ID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy92YXQtZGF0YVwiLCBbW1wiY2FuQmVEdXJhYmxlXCIsIFskaM2PX2EgPT4gKGNhbkJlRHVyYWJsZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzS2l0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuLypcblxuXG4gKi9cblxuY29uc3Qgc2luaz0oKT0+eyB9O1xuY29uc3QgbWFrZVF1aWV0UmVqZWN0aW9uPShyZWFzb24pPT57XG5jb25zdCByZWplY3Rpb249aGFyZGVuKFByb21pc2UucmVqZWN0KHJlYXNvbikpO1xudm9pZCBFLndoZW4ocmVqZWN0aW9uLHNpbmssc2luayk7XG5yZXR1cm4gcmVqZWN0aW9uO1xuIH07XG5jb25zdCB0b29GYXJSZWplY3Rpb249bWFrZVF1aWV0UmVqZWN0aW9uKFxuaGFyZGVuKEVycm9yKCdDYW5ub3QgcmVhZCBwYXN0IGVuZCBvZiBpdGVyYXRpb24uJykpKTtcblxuXG5jb25zdCAgICAgICAgUHVibGlzaGVyST1NLmludGVyZmFjZSgnUHVibGlzaGVyJyx7XG5wdWJsaXNoOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKCksXG5maW5pc2g6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoKSxcbmZhaWw6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoKX0pO1xuXG5cbi8vXG4kaM2PX29uY2UuUHVibGlzaGVySShQdWJsaXNoZXJJKTtjb25zdCBVcGRhdGVDb3VudFNoYXBlPU0ub3IoTS5iaWdpbnQoKSxNLm51bWJlcigpKTskaM2PX29uY2UuVXBkYXRlQ291bnRTaGFwZShVcGRhdGVDb3VudFNoYXBlKTtcbmNvbnN0ICAgICAgICBTdWJzY3JpYmVyST1NLmludGVyZmFjZSgnU3Vic2NyaWJlcicse1xuc3Vic2NyaWJlQWZ0ZXI6TS5jYWxsKCkub3B0aW9uYWwoTS5iaWdpbnQoKSkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRVcGRhdGVTaW5jZTpNLmNhbGwoKS5vcHRpb25hbChVcGRhdGVDb3VudFNoYXBlKS5yZXR1cm5zKE0ucHJvbWlzZSgpKX0pOyRozY9fb25jZS5TdWJzY3JpYmVySShTdWJzY3JpYmVySSk7XG5cbmNvbnN0ICAgICAgICBwdWJsaXNoS2l0SUtpdD1oYXJkZW4oe1xucHVibGlzaGVyOlB1Ymxpc2hlckksXG5zdWJzY3JpYmVyOlN1YnNjcmliZXJJfSk7JGjNj19vbmNlLnB1Ymxpc2hLaXRJS2l0KHB1Ymxpc2hLaXRJS2l0KTtcblxuXG5jb25zdCAgICAgICAgRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZT1NLmludGVyZmFjZShcbidGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvcicsXG57XG5mb3JrOk0uY2FsbCgpLnJldHVybnMoTS5hbnkoKSksXG5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdOk0uY2FsbCgpLnJldHVybnMoTS5hbnkoKSksLy9cbm5leHQ6TS5jYWxsV2hlbigpLnJldHVybnMoTS5hbnkoKSl9KTskaM2PX29uY2UuRm9ya2FibGVBc3luY0l0ZXJhYmxlSXRlcmF0b3JTaGFwZShGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlKTtcblxuXG5cbmNvbnN0ICAgICAgICBJdGVyYWJsZUVhY2hUb3BpY0k9TS5pbnRlcmZhY2UoJ0l0ZXJhYmxlRWFjaFRvcGljJyx7XG5zdWJzY3JpYmVBZnRlcjpcbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChTdWJzY3JpYmVySSkubWV0aG9kR3VhcmRzLnN1YnNjcmliZUFmdGVyLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTpNLmNhbGwoKS5yZXR1cm5zKFxuTS5yZW1vdGFibGUoJ0ZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJykpfSk7JGjNj19vbmNlLkl0ZXJhYmxlRWFjaFRvcGljSShJdGVyYWJsZUVhY2hUb3BpY0kpO1xuXG5cblxuY29uc3QgICAgICAgIEl0ZXJhYmxlTGF0ZXN0VG9waWNJPU0uaW50ZXJmYWNlKCdJdGVyYWJsZUxhdGVzdFRvcGljJyx7XG5nZXRVcGRhdGVTaW5jZTpcbmdldEludGVyZmFjZUd1YXJkUGF5bG9hZChTdWJzY3JpYmVySSkubWV0aG9kR3VhcmRzLmdldFVwZGF0ZVNpbmNlLFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTpNLmNhbGwoKS5yZXR1cm5zKFxuTS5yZW1vdGFibGUoJ0ZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yJykpfSk7XG5cblxuXG4vKlxuXG5cblxuXG4gKi8kaM2PX29uY2UuSXRlcmFibGVMYXRlc3RUb3BpY0koSXRlcmFibGVMYXRlc3RUb3BpY0kpO1xuY29uc3Qgd2Vha01lbW9pemVVbmFyeT0oZm4pPT57XG5jb25zdCBjYWNoZT1uZXcgV2Vha01hcCgpO1xucmV0dXJuKGFyZyk9Pntcbi8qICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgb2FyZz1hcmc7XG5pZihjYWNoZS5oYXMob2FyZykpe1xucmV0dXJuIGNhY2hlLmdldChvYXJnKTtcbiB9XG5jb25zdCByZXN1bHQ9Zm4oYXJnKTtcbmNhY2hlLnNldChvYXJnLHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgbWFrZVVwZGF0ZVJlY29yZEZyb21QdWJsaWNhdGlvblJlY29yZD0ocmVjb3JkKT0+e1xuY29uc3R7XG5oZWFkOnt2YWx1ZSxkb25lfSxcbnB1Ymxpc2hDb3VudH09XG5yZWNvcmQ7XG5pZihkb25lKXtcbi8vXG5yZXR1cm4gaGFyZGVuKHt2YWx1ZSx1cGRhdGVDb3VudDp1bmRlZmluZWR9KTtcbiB9XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZSx1cGRhdGVDb3VudDpwdWJsaXNoQ291bnR9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVB1Ymxpc2hLaXQ9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdGFpbFA7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB0YWlsUjtcbih7cHJvbWlzZTp0YWlsUCxyZXNvbHZlOnRhaWxSfT1tYWtlUHJvbWlzZUtpdCgpKTtcblxubGV0IGN1cnJlbnRQdWJsaXNoQ291bnQ9MG47XG5sZXQgY3VycmVudFA9dGFpbFA7XG5jb25zdCBhZHZhbmNlQ3VycmVudD0oZG9uZSx2YWx1ZSxyZWplY3Rpb24pPT57XG5pZih0YWlsUj09PXVuZGVmaW5lZCl7XG50aHJvdyBFcnJvcignQ2Fubm90IHVwZGF0ZSBzdGF0ZSBhZnRlciB0ZXJtaW5hdGlvbi4nKTtcbiB9XG5cbmN1cnJlbnRQdWJsaXNoQ291bnQrPTFuO1xuY3VycmVudFA9dGFpbFA7XG5jb25zdCByZXNvbHZlQ3VycmVudD10YWlsUjtcblxuaWYoZG9uZSl7XG50YWlsUD10b29GYXJSZWplY3Rpb247XG50YWlsUj11bmRlZmluZWQ7XG4gfWVsc2V7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG4gfVxuXG5pZihyZWplY3Rpb24pe1xucmVzb2x2ZUN1cnJlbnQocmVqZWN0aW9uKTtcbiB9ZWxzZXtcbnJlc29sdmVDdXJyZW50KFxuaGFyZGVuKHtcbmhlYWQ6e3ZhbHVlLGRvbmV9LFxucHVibGlzaENvdW50OmN1cnJlbnRQdWJsaXNoQ291bnQsXG50YWlsOnRhaWxQfSkpO1xuXG5cbiB9XG4gfTtcblxuY29uc3QgbWFrZU1lbW9pemVkVXBkYXRlUmVjb3JkPXdlYWtNZW1vaXplVW5hcnkoXG5tYWtlVXBkYXRlUmVjb3JkRnJvbVB1YmxpY2F0aW9uUmVjb3JkKTtcblxuXG4vKlxuXG5cbiAgICovXG5jb25zdCBzdWJzY3JpYmVyPUZhcignU3Vic2NyaWJlcicse1xuc3Vic2NyaWJlQWZ0ZXI6KHB1Ymxpc2hDb3VudD0tMW4pPT57XG5hc3NlcnQudHlwZW9mKHB1Ymxpc2hDb3VudCwnYmlnaW50Jyk7XG5pZihwdWJsaXNoQ291bnQ9PT1jdXJyZW50UHVibGlzaENvdW50KXtcbnJldHVybiB0YWlsUDtcbiB9ZWxzZSBpZihwdWJsaXNoQ291bnQ8Y3VycmVudFB1Ymxpc2hDb3VudCl7XG5yZXR1cm4gY3VycmVudFA7XG4gfWVsc2V7XG50aHJvdyBFcnJvcihcbidzdWJzY3JpYmVBZnRlciBhcmd1bWVudCBtdXN0IGJlIGEgcHJldmlvdXNseS1pc3N1ZWQgcHVibGlzaENvdW50LicpO1xuXG4gfVxuIH0sXG5nZXRVcGRhdGVTaW5jZToodXBkYXRlQ291bnQpPT57XG5pZih1cGRhdGVDb3VudD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gc3Vic2NyaWJlci5zdWJzY3JpYmVBZnRlcigpLnRoZW4obWFrZU1lbW9pemVkVXBkYXRlUmVjb3JkKTtcbiB9XG51cGRhdGVDb3VudD1CaWdJbnQodXBkYXRlQ291bnQpO1xucmV0dXJuKFxuc3Vic2NyaWJlclxuLy9cbi8vXG4vL1xuLnN1YnNjcmliZUFmdGVyKHVwZGF0ZUNvdW50KVxuLy9cbi8vXG4udGhlbigoKT0+c3Vic2NyaWJlci5nZXRVcGRhdGVTaW5jZSgpKSk7XG5cbiB9fSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdWJsaXNoZXI9RmFyKCdQdWJsaXNoZXInLHtcbnB1Ymxpc2g6KHZhbHVlKT0+e1xuYWR2YW5jZUN1cnJlbnQoZmFsc2UsdmFsdWUpO1xuIH0sXG5maW5pc2g6KGZpbmFsVmFsdWUpPT57XG5hZHZhbmNlQ3VycmVudCh0cnVlLGZpbmFsVmFsdWUpO1xuIH0sXG5mYWlsOihyZWFzb24pPT57XG5hZHZhbmNlQ3VycmVudCh0cnVlLHVuZGVmaW5lZCxtYWtlUXVpZXRSZWplY3Rpb24ocmVhc29uKSk7XG4gfX0pO1xuXG5yZXR1cm4gaGFyZGVuKHtwdWJsaXNoZXIsc3Vic2NyaWJlcn0pO1xuIH07JGjNj19vbmNlLm1ha2VQdWJsaXNoS2l0KG1ha2VQdWJsaXNoS2l0KTtcbmhhcmRlbihtYWtlUHVibGlzaEtpdCk7XG5cbmNvbnN0IER1cmFibGVQdWJsaXNoS2l0U3RhdGVTaGFwZT1oYXJkZW4oe1xudmFsdWVEdXJhYmlsaXR5Ok0uYW55KCksXG5wdWJsaXNoQ291bnQ6TS5hbnkoKSxcbnN0YXR1czpNLmFueSgpLFxuaGFzVmFsdWU6TS5hbnkoKSxcbnZhbHVlOk0uYW55KCl9KTtcblxuXG4vL1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpbml0RHVyYWJsZVB1Ymxpc2hLaXRTdGF0ZT0ob3B0aW9ucz17fSk9PntcbmNvbnN0e3ZhbHVlRHVyYWJpbGl0eT0nbWFuZGF0b3J5J309b3B0aW9ucztcbmFzc2VydC5lcXVhbCh2YWx1ZUR1cmFiaWxpdHksJ21hbmRhdG9yeScpO1xucmV0dXJue1xuLy9cbnZhbHVlRHVyYWJpbGl0eSxcblxuLy9cbnB1Ymxpc2hDb3VudDowbixcbnN0YXR1czonbGl2ZScsLy9cblxuLy9cbi8vXG4vL1xuaGFzVmFsdWU6ZmFsc2UsXG52YWx1ZTp1bmRlZmluZWR9O1xuXG4gfTtcblxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qXG5cblxuICovXG5jb25zdCBnZXRFcGhlbWVyYWxLZXk9KGZhY2V0cyk9PmZhY2V0cy5wdWJsaXNoZXI7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBwcm92aWRlQ3VycmVudFA9KHN0YXRlLGZhY2V0cyx0YWlsKT0+e1xuY29uc3QgZXBoZW1lcmFsS2V5PWdldEVwaGVtZXJhbEtleShmYWNldHMpO1xuY29uc3QgZm91bmREYXRhPWR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YS5nZXQoZXBoZW1lcmFsS2V5KTtcbmNvbnN0IGN1cnJlbnRQPWZvdW5kRGF0YSYmZm91bmREYXRhLmN1cnJlbnRQO1xuaWYoY3VycmVudFApe1xucmV0dXJuIGN1cnJlbnRQO1xuIH1cblxuY29uc3R7cHVibGlzaENvdW50LHN0YXR1cyxoYXNWYWx1ZSx2YWx1ZX09c3RhdGU7XG5pZighaGFzVmFsdWUpe1xuYXNzZXJ0KHN0YXR1cz09PSdsaXZlJyk7XG5yZXR1cm4gdGFpbDtcbiB9XG5pZihzdGF0dXM9PT0nbGl2ZSd8fHN0YXR1cz09PSdmaW5pc2hlZCcpe1xuY29uc3QgY2VsbD1oYXJkZW4oe1xuaGVhZDp7dmFsdWUsZG9uZTpzdGF0dXMhPT0nbGl2ZSd9LFxucHVibGlzaENvdW50LFxudGFpbH0pO1xuXG5yZXR1cm4gRS5yZXNvbHZlKGNlbGwpO1xuIH1lbHNlIGlmKHN0YXR1cz09PSdmYWlsZWQnKXtcbnJldHVybiBtYWtlUXVpZXRSZWplY3Rpb24odmFsdWUpO1xuIH1lbHNle1xudGhyb3cgRmFpbCBgSW52YWxpZCBkdXJhYmxlIHByb21pc2Uga2l0IHN0YXR1czogJHtxKHN0YXR1cyl9YDtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGE9KHN0YXRlLGZhY2V0cyk9PntcbmNvbnN0IGVwaGVtZXJhbEtleT1nZXRFcGhlbWVyYWxLZXkoZmFjZXRzKTtcbmNvbnN0IGZvdW5kRGF0YT1kdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEuZ2V0KGVwaGVtZXJhbEtleSk7XG5pZihmb3VuZERhdGEpe1xucmV0dXJuIGZvdW5kRGF0YTtcbiB9XG5cbmNvbnN0e3N0YXR1c309c3RhdGU7XG5sZXQgdGFpbFA7XG5sZXQgdGFpbFI7XG5pZihzdGF0dXM9PT0nbGl2ZScpe1xuKHtwcm9taXNlOnRhaWxQLHJlc29sdmU6dGFpbFJ9PW1ha2VQcm9taXNlS2l0KCkpO1xudm9pZCBFLndoZW4odGFpbFAsc2luayxzaW5rKTtcbiB9ZWxzZSBpZihzdGF0dXM9PT0nZmluaXNoZWQnfHxzdGF0dXM9PT0nZmFpbGVkJyl7XG50YWlsUD10b29GYXJSZWplY3Rpb247XG4gfWVsc2V7XG50aHJvdyBGYWlsIGBJbnZhbGlkIGR1cmFibGUgcHJvbWlzZSBraXQgc3RhdHVzOiAke3Eoc3RhdHVzKX1gO1xuIH1cbi8vXG5jb25zdCBvYmo9aGFyZGVuKHtjdXJyZW50UDp1bmRlZmluZWQsdGFpbFAsdGFpbFJ9KTtcbmR1cmFibGVQdWJsaXNoS2l0RXBoZW1lcmFsRGF0YS5zZXQoZXBoZW1lcmFsS2V5LG9iaik7XG5yZXR1cm4gb2JqO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBhZHZhbmNlRHVyYWJsZVB1Ymxpc2hLaXQ9KGNvbnRleHQsdmFsdWUsdGFyZ2V0U3RhdHVzPSdsaXZlJyk9PntcbmNvbnN0e3N0YXRlLGZhY2V0c309Y29udGV4dDtcbmNvbnN0e3ZhbHVlRHVyYWJpbGl0eSxzdGF0dXN9PXN0YXRlO1xuaWYoc3RhdHVzIT09J2xpdmUnKXtcbnRocm93IEVycm9yKCdDYW5ub3QgdXBkYXRlIHN0YXRlIGFmdGVyIHRlcm1pbmF0aW9uLicpO1xuIH1cbmNvbnN0IGRvbmU9dGFyZ2V0U3RhdHVzIT09J2xpdmUnO1xuaWYoZG9uZXx8dmFsdWVEdXJhYmlsaXR5PT09J21hbmRhdG9yeScpe1xuY2FuQmVEdXJhYmxlKHZhbHVlKXx8RmFpbCBgQ2Fubm90IGFjY2VwdCBub24tZHVyYWJsZSB2YWx1ZTogJHt2YWx1ZX1gO1xuIH1cbmNvbnN0e3RhaWxQOm9sZFRhaWxQLHRhaWxSOnJlc29sdmVPbGRUYWlsfT1cbnByb3ZpZGVEdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEoc3RhdGUsZmFjZXRzKTtcbmFzc2VydC50eXBlb2YocmVzb2x2ZU9sZFRhaWwsJ2Z1bmN0aW9uJyk7XG5cbmNvbnN0IHB1Ymxpc2hDb3VudD1zdGF0ZS5wdWJsaXNoQ291bnQrMW47XG5zdGF0ZS5wdWJsaXNoQ291bnQ9cHVibGlzaENvdW50O1xuXG5sZXQgdGFpbFA7XG5sZXQgdGFpbFI7XG5pZihkb25lKXtcbnN0YXRlLnN0YXR1cz10YXJnZXRTdGF0dXM7XG50YWlsUD10b29GYXJSZWplY3Rpb247XG50YWlsUj11bmRlZmluZWQ7XG4gfWVsc2V7XG4oe3Byb21pc2U6dGFpbFAscmVzb2x2ZTp0YWlsUn09bWFrZVByb21pc2VLaXQoKSk7XG52b2lkIEUud2hlbih0YWlsUCxzaW5rLHNpbmspO1xuIH1cblxubGV0IGN1cnJlbnRQO1xuaWYodGFyZ2V0U3RhdHVzPT09J2ZhaWxlZCcpe1xuc3RhdGUuaGFzVmFsdWU9dHJ1ZTtcbnN0YXRlLnZhbHVlPXZhbHVlO1xuY29uc3QgcmVqZWN0aW9uPW1ha2VRdWlldFJlamVjdGlvbih2YWx1ZSk7XG5yZXNvbHZlT2xkVGFpbChyZWplY3Rpb24pO1xuIH1lbHNle1xuLy9cbi8vXG5pZihkb25lfHx2YWx1ZUR1cmFiaWxpdHkhPT0naWdub3JlZCcmJmNhbkJlRHVyYWJsZSh2YWx1ZSkpe1xuc3RhdGUuaGFzVmFsdWU9dHJ1ZTtcbnN0YXRlLnZhbHVlPXZhbHVlO1xuIH1lbHNle1xuc3RhdGUuaGFzVmFsdWU9ZmFsc2U7XG5zdGF0ZS52YWx1ZT11bmRlZmluZWQ7XG4vL1xuY3VycmVudFA9b2xkVGFpbFA7XG4gfVxuXG5yZXNvbHZlT2xkVGFpbChcbmhhcmRlbih7XG5oZWFkOnt2YWx1ZSxkb25lfSxcbnB1Ymxpc2hDb3VudCxcbnRhaWw6dGFpbFB9KSk7XG5cblxuIH1cblxuZHVyYWJsZVB1Ymxpc2hLaXRFcGhlbWVyYWxEYXRhLnNldChcbmdldEVwaGVtZXJhbEtleShmYWNldHMpLFxuaGFyZGVuKHtjdXJyZW50UCx0YWlsUCx0YWlsUn0pKTtcblxuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0PShiYWdnYWdlLGtpbmROYW1lKT0+e1xuLy9cbi8vXG5jb25zdCBtYWtlTWVtb2l6ZWRVcGRhdGVSZWNvcmQ9bWFrZVVwZGF0ZVJlY29yZEZyb21QdWJsaWNhdGlvblJlY29yZDtcblxuLypcblxuICAgKi9cbnJldHVybiBwcmVwYXJlRXhvQ2xhc3NLaXQoXG5iYWdnYWdlLFxua2luZE5hbWUsXG5wdWJsaXNoS2l0SUtpdCxcbmluaXREdXJhYmxlUHVibGlzaEtpdFN0YXRlLFxue1xuLy9cbi8vXG5wdWJsaXNoZXI6e1xucHVibGlzaCh2YWx1ZSl7XG5hZHZhbmNlRHVyYWJsZVB1Ymxpc2hLaXQodGhpcyx2YWx1ZSk7XG4gfSxcbmZpbmlzaChmaW5hbFZhbHVlKXtcbmFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdCh0aGlzLGZpbmFsVmFsdWUsJ2ZpbmlzaGVkJyk7XG4gfSxcbmZhaWwocmVhc29uKXtcbmFkdmFuY2VEdXJhYmxlUHVibGlzaEtpdCh0aGlzLHJlYXNvbiwnZmFpbGVkJyk7XG4gfX0sXG5cblxuLy9cbi8vXG5zdWJzY3JpYmVyOntcbnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudD0tMW4pe1xuY29uc3R7c3RhdGUsZmFjZXRzfT10aGlzO1xuY29uc3R7cHVibGlzaENvdW50OmN1cnJlbnRQdWJsaXNoQ291bnR9PXN0YXRlO1xuY29uc3R7Y3VycmVudFAsdGFpbFB9PXByb3ZpZGVEdXJhYmxlUHVibGlzaEtpdEVwaGVtZXJhbERhdGEoXG5zdGF0ZSxcbmZhY2V0cyk7XG5cbmlmKHB1Ymxpc2hDb3VudD09PWN1cnJlbnRQdWJsaXNoQ291bnQpe1xucmV0dXJuIHRhaWxQO1xuIH1lbHNlIGlmKHB1Ymxpc2hDb3VudDxjdXJyZW50UHVibGlzaENvdW50KXtcbnJldHVybiBjdXJyZW50UHx8cHJvdmlkZUN1cnJlbnRQKHN0YXRlLGZhY2V0cyx0YWlsUCk7XG4gfWVsc2V7XG50aHJvdyBFcnJvcihcbidzdWJzY3JpYmVBZnRlciBhcmd1bWVudCBtdXN0IGJlIGEgcHJldmlvdXNseS1pc3N1ZWQgcHVibGlzaENvdW50LicpO1xuXG4gfVxuIH0sXG5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCl7XG5jb25zdHtcbmZhY2V0czp7c3Vic2NyaWJlcn19PVxudGhpcztcbmlmKHVwZGF0ZUNvdW50PT09dW5kZWZpbmVkKXtcbnJldHVybiBzdWJzY3JpYmVyLnN1YnNjcmliZUFmdGVyKCkudGhlbihtYWtlTWVtb2l6ZWRVcGRhdGVSZWNvcmQpO1xuIH1cbnVwZGF0ZUNvdW50PUJpZ0ludCh1cGRhdGVDb3VudCk7XG5yZXR1cm4oXG5zdWJzY3JpYmVyXG4vL1xuLy9cbi8vXG4uc3Vic2NyaWJlQWZ0ZXIodXBkYXRlQ291bnQpXG4vL1xuLy9cbi50aGVuKCgpPT5zdWJzY3JpYmVyLmdldFVwZGF0ZVNpbmNlKCkpKTtcblxuIH19fSxcblxuXG57XG5zdGF0ZVNoYXBlOkR1cmFibGVQdWJsaXNoS2l0U3RhdGVTaGFwZX0pO1xuXG5cbiB9OyRozY9fb25jZS5wcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQocHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KTtcbmhhcmRlbihwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQpO1xuXG5jb25zdCAgICAgICAgU3Vic2NyaWJlclNoYXBlPU0ucmVtb3RhYmxlKCdTdWJzY3JpYmVyJyk7JGjNj19vbmNlLlN1YnNjcmliZXJTaGFwZShTdWJzY3JpYmVyU2hhcGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUHVibGlzaGVySSI6WyJQdWJsaXNoZXJJIl0sIlVwZGF0ZUNvdW50U2hhcGUiOlsiVXBkYXRlQ291bnRTaGFwZSJdLCJTdWJzY3JpYmVySSI6WyJTdWJzY3JpYmVySSJdLCJwdWJsaXNoS2l0SUtpdCI6WyJwdWJsaXNoS2l0SUtpdCJdLCJGb3JrYWJsZUFzeW5jSXRlcmFibGVJdGVyYXRvclNoYXBlIjpbIkZvcmthYmxlQXN5bmNJdGVyYWJsZUl0ZXJhdG9yU2hhcGUiXSwiSXRlcmFibGVFYWNoVG9waWNJIjpbIkl0ZXJhYmxlRWFjaFRvcGljSSJdLCJJdGVyYWJsZUxhdGVzdFRvcGljSSI6WyJJdGVyYWJsZUxhdGVzdFRvcGljSSJdLCJtYWtlUHVibGlzaEtpdCI6WyJtYWtlUHVibGlzaEtpdCJdLCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQiOlsicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0Il0sIlN1YnNjcmliZXJTaGFwZSI6WyJTdWJzY3JpYmVyU2hhcGUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAMa5OCkAIAABACAAALgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdG9yZWQtbm90aWZpZXIuanN7ImltcG9ydHMiOlsiQGFnb3JpYy9pbnRlcm5hbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanMiLCJAZW5kby9mYXIiLCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzIl0sImV4cG9ydHMiOlsibWFrZVN0b3JlZE5vdGlmaWVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0QWxsRGVmaW5lZCxtYWtlU2VyaWFsaXplVG9TdG9yYWdlLEUsRmFyLG9ic2VydmVOb3RpZmllcjskaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcImFzc2VydEFsbERlZmluZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0QWxsRGVmaW5lZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNcIiwgW1tcIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2VcIiwgWyRozY9fYSA9PiAobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCIuL2FzeW5jSXRlcmFibGVBZGFwdG9yLmpzXCIsIFtbXCJvYnNlcnZlTm90aWZpZXJcIiwgWyRozY9fYSA9PiAob2JzZXJ2ZU5vdGlmaWVyID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkTm90aWZpZXI9KG5vdGlmaWVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5hc3NlcnRBbGxEZWZpbmVkKHtub3RpZmllcixzdG9yYWdlTm9kZSxtYXJzaGFsbGVyfSk7XG5cbmNvbnN0IG1hcnNoYWxsVG9TdG9yYWdlPW1ha2VTZXJpYWxpemVUb1N0b3JhZ2Uoc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik7XG5cbm9ic2VydmVOb3RpZmllcihub3RpZmllcix7XG51cGRhdGVTdGF0ZSh2YWx1ZSl7XG5tYXJzaGFsbFRvU3RvcmFnZSh2YWx1ZSkuY2F0Y2goKHJlYXNvbik9PlxuY29uc29sZS5lcnJvcignU3RvcmVkTm90aWZpZXIgZmFpbGVkIHRvIHVwZGF0ZVN0YXRlJyxyZWFzb24pKTtcblxuIH0sXG5mYWlsKHJlYXNvbil7XG5jb25zb2xlLmVycm9yKCdTdG9yZWROb3RpZmllciBmYWlsZWQgdG8gaXRlcmF0ZScscmVhc29uKTtcbiB9fSkuXG5jYXRjaCgocmVhc29uKT0+e1xuY29uc29sZS5lcnJvcignU3RvcmVkTm90aWZpZXIgaGFsdGVkIGl0ZXJhdGlvbicscmVhc29uKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZXI9RmFyKCd1bnNlcmlhbGl6ZXInLHtcbmZyb21DYXBEYXRhOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKSxcbnVuc2VyaWFsaXplOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdG9yZWROb3RpZmllcj1GYXIoJ1N0b3JlZE5vdGlmaWVyJyx7XG5nZXRVcGRhdGVTaW5jZToodXBkYXRlQ291bnQpPT5FKG5vdGlmaWVyKS5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCksXG5nZXRQYXRoOigpPT5FKHN0b3JhZ2VOb2RlKS5nZXRQYXRoKCksXG5nZXRVbnNlcmlhbGl6ZXI6KCk9PnVuc2VyaWFsaXplcn0pO1xuXG5yZXR1cm4gc3RvcmVkTm90aWZpZXI7XG4gfTskaM2PX29uY2UubWFrZVN0b3JlZE5vdGlmaWVyKG1ha2VTdG9yZWROb3RpZmllcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU3RvcmVkTm90aWZpZXIiOlsibWFrZVN0b3JlZE5vdGlmaWVyIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACqIP9wcFgAAHBYAACcAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3RvcmVzdWIuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwiLCJAYWdvcmljL2ludGVybmFsL3NyYy9saWItY2hhaW5TdG9yYWdlLmpzIiwiLi9hc3luY0l0ZXJhYmxlQWRhcHRvci5qcyIsIi4vcHVibGlzaC1raXQuanMiLCIuL3N1YnNjcmliZXIuanMiLCIuL3N1YnNjcmliZS5qcyJdLCJleHBvcnRzIjpbImZvckVhY2hQdWJsaWNhdGlvblJlY29yZCIsIm1ha2VTdG9yZWRQdWJsaXNoS2l0IiwibWFrZVN0b3JlZFB1Ymxpc2hlcktpdCIsIm1ha2VTdG9yZWRTdWJzY3JpYmVyIiwibWFrZVN0b3JlZFN1YnNjcmlwdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLG1ha2VNYXJzaGFsLGFzc2VydEFsbERlZmluZWQsbWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSxvYnNlcnZlSXRlcmF0aW9uLG1ha2VQdWJsaXNoS2l0LG1ha2VTdWJzY3JpcHRpb25LaXQsc3Vic2NyaWJlRWFjaDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWxcIiwgW1tcImFzc2VydEFsbERlZmluZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0QWxsRGVmaW5lZCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNcIiwgW1tcIm1ha2VTZXJpYWxpemVUb1N0b3JhZ2VcIiwgWyRozY9fYSA9PiAobWFrZVNlcmlhbGl6ZVRvU3RvcmFnZSA9ICRozY9fYSldXV1dLFtcIi4vYXN5bmNJdGVyYWJsZUFkYXB0b3IuanNcIiwgW1tcIm9ic2VydmVJdGVyYXRpb25cIiwgWyRozY9fYSA9PiAob2JzZXJ2ZUl0ZXJhdGlvbiA9ICRozY9fYSldXV1dLFtcIi4vcHVibGlzaC1raXQuanNcIiwgW1tcIm1ha2VQdWJsaXNoS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VQdWJsaXNoS2l0ID0gJGjNj19hKV1dXV0sW1wiLi9zdWJzY3JpYmVyLmpzXCIsIFtbXCJtYWtlU3Vic2NyaXB0aW9uS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VTdWJzY3JpcHRpb25LaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlRWFjaFwiLCBbJGjNj19hID0+IChzdWJzY3JpYmVFYWNoID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBmb3JFYWNoUHVibGljYXRpb25SZWNvcmQ9YXN5bmMoc3Vic2NyaWJlcixjb25zdW1lVmFsdWUpPT57XG4vL1xuLy9cbmNvbnN0IGl0ZXJhdG9yPXN1YnNjcmliZUVhY2goc3Vic2NyaWJlcilbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7XG5cbmxldCBmaW5pc2hlZD1mYWxzZTtcbmF3YWl0IG51bGw7XG53aGlsZSghZmluaXNoZWQpe1xuY29uc3R7dmFsdWUsZG9uZX09YXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuYXdhaXQgY29uc3VtZVZhbHVlKHZhbHVlKTtcbmZpbmlzaGVkPSEhZG9uZTtcbiB9XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmZvckVhY2hQdWJsaWNhdGlvblJlY29yZChmb3JFYWNoUHVibGljYXRpb25SZWNvcmQpO1xuY29uc3QgICAgICAgIG1ha2VTdG9yZWRTdWJzY3JpYmVyPShzdWJzY3JpYmVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpPT57XG5hc3NlcnRBbGxEZWZpbmVkKHtzdWJzY3JpYmVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXJ9KTtcblxuY29uc3QgbWFyc2hhbGxUb1N0b3JhZ2U9bWFrZVNlcmlhbGl6ZVRvU3RvcmFnZShzdG9yYWdlTm9kZSxtYXJzaGFsbGVyKTtcblxuLy9cbmZvckVhY2hQdWJsaWNhdGlvblJlY29yZChzdWJzY3JpYmVyLG1hcnNoYWxsVG9TdG9yYWdlKS5jYXRjaCgoZXJyKT0+e1xuLy9cbi8vXG5jb25zb2xlLmVycm9yKCdTdG9yZWRTdWJzY3JpYmVyIGZhaWxlZCB0byBpdGVyYXRlJyxlcnIpO1xuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHVuc2VyaWFsaXplcj1GYXIoJ3Vuc2VyaWFsaXplcicse1xuZnJvbUNhcERhdGE6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpLFxudW5zZXJpYWxpemU6KGRhdGEpPT5FKG1hcnNoYWxsZXIpLmZyb21DYXBEYXRhKGRhdGEpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RvcmVzdWI9RmFyKCdTdG9yZWRTdWJzY3JpYmVyJyx7XG5zdWJzY3JpYmVBZnRlcjoocHVibGlzaENvdW50KT0+c3Vic2NyaWJlci5zdWJzY3JpYmVBZnRlcihwdWJsaXNoQ291bnQpLFxuZ2V0VXBkYXRlU2luY2U6KHVwZGF0ZUNvdW50KT0+c3Vic2NyaWJlci5nZXRVcGRhdGVTaW5jZSh1cGRhdGVDb3VudCksXG5nZXRQYXRoOigpPT5FKHN0b3JhZ2VOb2RlKS5nZXRQYXRoKCksXG5nZXRTdG9yZUtleTooKT0+RShzdG9yYWdlTm9kZSkuZ2V0U3RvcmVLZXkoKSxcbmdldFVuc2VyaWFsaXplcjooKT0+dW5zZXJpYWxpemVyfSk7XG5cbnJldHVybiBzdG9yZXN1YjtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5tYWtlU3RvcmVkU3Vic2NyaWJlcihtYWtlU3RvcmVkU3Vic2NyaWJlcik7XG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFN1YnNjcmlwdGlvbj0oXG5zdWJzY3JpcHRpb24sXG5zdG9yYWdlTm9kZSxcbm1hcnNoYWxsZXI9bWFrZU1hcnNoYWwodW5kZWZpbmVkLHVuZGVmaW5lZCx7XG5tYXJzaGFsU2F2ZUVycm9yOigpPT57IH0sXG5zZXJpYWxpemVCb2R5Rm9ybWF0OidzbWFsbGNhcHMnfSkpPT5cblxue1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB1bnNlcmlhbGl6ZXI9RmFyKCd1bnNlcmlhbGl6ZXInLHtcbmZyb21DYXBEYXRhOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKSxcbnVuc2VyaWFsaXplOihkYXRhKT0+RShtYXJzaGFsbGVyKS5mcm9tQ2FwRGF0YShkYXRhKX0pO1xuXG5cbi8vXG5sZXQgcHVibGlzaEZhaWxlZD1mYWxzZTtcbmxldCBwdWJsaXNoRXhjZXB0aW9uO1xuXG5jb25zdCBmYWlsPShlcnIpPT57XG5wdWJsaXNoRmFpbGVkPXRydWU7XG5wdWJsaXNoRXhjZXB0aW9uPWVycjtcbiB9O1xuXG4vL1xuLy9cbmNvbnN0IHB1Ymxpc2hWYWx1ZT0ob2JqKT0+e1xuYXNzZXJ0KHN0b3JhZ2VOb2RlKTtcbmlmKHB1Ymxpc2hGYWlsZWQpe1xuLy9cbnRocm93IHB1Ymxpc2hFeGNlcHRpb247XG4gfVxuXG4vL1xuRShtYXJzaGFsbGVyKS5cbnRvQ2FwRGF0YShvYmopLlxudGhlbigoc2VyaWFsaXplZCk9PntcbmNvbnN0IGVuY29kZWQ9SlNPTi5zdHJpbmdpZnkoc2VyaWFsaXplZCk7XG5yZXR1cm4gRShzdG9yYWdlTm9kZSkuc2V0VmFsdWUoZW5jb2RlZCk7XG4gfSkuXG5jYXRjaChmYWlsKTtcbiB9O1xuXG5pZihzdG9yYWdlTm9kZSl7XG4vL1xub2JzZXJ2ZUl0ZXJhdGlvbihzdWJzY3JpcHRpb24se1xudXBkYXRlU3RhdGU6cHVibGlzaFZhbHVlLFxuZmluaXNoOnB1Ymxpc2hWYWx1ZX0pLlxuY2F0Y2goZmFpbCk7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3Jlc3ViPUZhcignU3RvcmVkU3Vic2NyaXB0aW9uJyx7XG4vL1xuZ2V0U3RvcmVLZXk6YXN5bmMoKT0+e1xuaWYoIXN0b3JhZ2VOb2RlKXtcbnJldHVybiBoYXJkZW4oe3N1YnNjcmlwdGlvbn0pO1xuIH1cbmNvbnN0IHN0b3JlS2V5PWF3YWl0IEUoc3RvcmFnZU5vZGUpLmdldFN0b3JlS2V5KCk7XG5yZXR1cm4gaGFyZGVuKHsuLi5zdG9yZUtleSxzdWJzY3JpcHRpb259KTtcbiB9LFxuZ2V0VW5zZXJpYWxpemVyOigpPT51bnNlcmlhbGl6ZXIsXG5nZXRTaGFyYWJsZVN1YnNjcmlwdGlvbkludGVybmFsczooKT0+XG5zdWJzY3JpcHRpb24uZ2V0U2hhcmFibGVTdWJzY3JpcHRpb25JbnRlcm5hbHMoKSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnN1YnNjcmlwdGlvbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSxcbnN1YnNjcmliZUFmdGVyOihwdWJsaXNoQ291bnQpPT5zdWJzY3JpcHRpb24uc3Vic2NyaWJlQWZ0ZXIocHVibGlzaENvdW50KX0pO1xuXG5yZXR1cm4gc3RvcmVzdWI7XG4gfTskaM2PX29uY2UubWFrZVN0b3JlZFN1YnNjcmlwdGlvbihtYWtlU3RvcmVkU3Vic2NyaXB0aW9uKTtcbmhhcmRlbihtYWtlU3RvcmVkU3Vic2NyaXB0aW9uKTtcblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN0b3JlZFB1Ymxpc2hlcktpdD0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcixjaGlsZFBhdGgpPT57XG5jb25zdHtwdWJsaWNhdGlvbixzdWJzY3JpcHRpb259PW1ha2VTdWJzY3JpcHRpb25LaXQoKTtcblxuaWYoc3RvcmFnZU5vZGUmJmNoaWxkUGF0aCl7XG5zdG9yYWdlTm9kZT1FKHN0b3JhZ2VOb2RlKS5tYWtlQ2hpbGROb2RlKGNoaWxkUGF0aCk7XG4gfVxuXG4vL1xuY29uc3Qgc3Vic2NyaWJlcj1tYWtlU3RvcmVkU3Vic2NyaXB0aW9uKFxuc3Vic2NyaXB0aW9uLFxuc3RvcmFnZU5vZGUsXG5tYXJzaGFsbGVyKTtcblxuXG5yZXR1cm57XG5wdWJsaXNoZXI6cHVibGljYXRpb24sXG5zdWJzY3JpYmVyfTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVN0b3JlZFB1Ymxpc2hlcktpdChtYWtlU3RvcmVkUHVibGlzaGVyS2l0KTtcbmNvbnN0ICAgICAgICBtYWtlU3RvcmVkUHVibGlzaEtpdD0oc3RvcmFnZU5vZGUsbWFyc2hhbGxlcik9PntcbmNvbnN0e3B1Ymxpc2hlcixzdWJzY3JpYmVyfT1tYWtlUHVibGlzaEtpdCgpO1xuXG5yZXR1cm57XG5wdWJsaXNoZXIsXG4vL1xuc3Vic2NyaWJlcjptYWtlU3RvcmVkU3Vic2NyaWJlcihzdWJzY3JpYmVyLHN0b3JhZ2VOb2RlLG1hcnNoYWxsZXIpfTtcblxuIH07JGjNj19vbmNlLm1ha2VTdG9yZWRQdWJsaXNoS2l0KG1ha2VTdG9yZWRQdWJsaXNoS2l0KTtcbmhhcmRlbihtYWtlU3RvcmVkUHVibGlzaEtpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJmb3JFYWNoUHVibGljYXRpb25SZWNvcmQiOlsiZm9yRWFjaFB1YmxpY2F0aW9uUmVjb3JkIl0sIm1ha2VTdG9yZWRTdWJzY3JpYmVyIjpbIm1ha2VTdG9yZWRTdWJzY3JpYmVyIl0sIm1ha2VTdG9yZWRTdWJzY3JpcHRpb24iOlsibWFrZVN0b3JlZFN1YnNjcmlwdGlvbiJdLCJtYWtlU3RvcmVkUHVibGlzaGVyS2l0IjpbIm1ha2VTdG9yZWRQdWJsaXNoZXJLaXQiXSwibWFrZVN0b3JlZFB1Ymxpc2hLaXQiOlsibWFrZVN0b3JlZFB1Ymxpc2hLaXQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAqVd8cFASAABQEgAAKAAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdWJzY3JpYmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZmFyIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3VwZ3JhZGUtYXBpLmpzIl0sImV4cG9ydHMiOlsic3Vic2NyaWJlIiwic3Vic2NyaWJlRWFjaCIsInN1YnNjcmliZUxhdGVzdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsRmFpbCxhbm5vdGF0ZUVycm9yLEUsRmFyLGlzT2JqZWN0LGlzVXBncmFkZURpc2Nvbm5lY3Rpb247JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdXBncmFkZS1hcGkuanNcIiwgW1tcImlzVXBncmFkZURpc2Nvbm5lY3Rpb25cIiwgWyRozY9fYSA9PiAoaXNVcGdyYWRlRGlzY29ubmVjdGlvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0IHNpbms9KCk9PnsgfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCByZWNvbm5lY3RBc05lZWRlZD1hc3luYyhnZXR0ZXIsc2VlZD1bXSk9PntcbmxldCBkaXNjb25uZWN0aW9uO1xubGV0IGxhc3RWZXJzaW9uPS1JbmZpbml0eTtcbi8vXG5hd2FpdCBudWxsO1xuZm9yKGxldCBpPTA7O2krPTEpe1xudHJ5e1xuY29uc3QgcmVzdWx0UD1pPHNlZWQubGVuZ3RoP3NlZWRbaV06Z2V0dGVyKCk7XG5jb25zdCByZXN1bHQ9YXdhaXQgcmVzdWx0UDtcbnJldHVybiByZXN1bHQ7XG4gfWNhdGNoKGVycil7XG5pZihpc1VwZ3JhZGVEaXNjb25uZWN0aW9uKGVycikpe1xuaWYoIWRpc2Nvbm5lY3Rpb24pe1xuZGlzY29ubmVjdGlvbj1lcnI7XG4gfVxuY29uc3R7aW5jYXJuYXRpb25OdW1iZXI6dmVyc2lvbn09ZXJyO1xuaWYodmVyc2lvbj5sYXN0VmVyc2lvbil7XG4vL1xuLy9cbi8vXG5sYXN0VmVyc2lvbj12ZXJzaW9uO1xuY29udGludWU7XG4gfVxuIH1cbi8vXG4vL1xuLy9cbmlmKGlzT2JqZWN0KGVycikmJmRpc2Nvbm5lY3Rpb24mJmRpc2Nvbm5lY3Rpb24hPT1lcnIpe1xudHJ5e1xuYW5ub3RhdGVFcnJvcihcbmVycixcblggYEF0dGVtcHRpbmcgdG8gcmVjb3ZlciBmcm9tIGRpc2Nvbm5lY3Rpb246ICR7ZGlzY29ubmVjdGlvbn1gKTtcblxuIH1jYXRjaChfZXJyKXtcbi8vXG4gfVxuIH1cbnRocm93IGVycjtcbiB9XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHN1YnNjcmliZT0oaXRQKT0+XG5GYXIoJ0FzeW5jSXRlcmFibGUnLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PntcbmNvbnN0IGl0PUUoaXRQKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKTtcbmNvbnN0IHNlbGY9RmFyKCdBc3luY0l0ZXJhYmxlSXRlcmF0b3InLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnNlbGYsXG5uZXh0OmFzeW5jKCk9PkUoaXQpLm5leHQoKX0pO1xuXG5yZXR1cm4gc2VsZjtcbiB9fSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5zdWJzY3JpYmUoc3Vic2NyaWJlKTtcbmNvbnN0IG1ha2VFYWNoSXRlcmF0b3I9KHRvcGljLG5leHRDZWxsUCk9Pntcbi8vXG4vL1xuY29uc3Qgc2VsZj1GYXIoJ0VhY2hJdGVyYXRvcicse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+c2VsZixcbm5leHQ6KCk9PntcbmNvbnN0e1xuaGVhZDpyZXN1bHRQLFxucHVibGlzaENvdW50OnB1Ymxpc2hDb3VudFAsXG50YWlsOnRhaWxQfT1cbkUuZ2V0KG5leHRDZWxsUCk7XG5cbi8vXG4vL1xuY29uc3QgZ2V0U3VjY2Vzc29yPWFzeW5jKCk9PntcbmNvbnN0IHB1Ymxpc2hDb3VudD1hd2FpdCBwdWJsaXNoQ291bnRQO1xuYXNzZXJ0LnR5cGVvZihwdWJsaXNoQ291bnQsJ2JpZ2ludCcpO1xuY29uc3Qgc3VjY2Vzc29yPWF3YWl0IEUodG9waWMpLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCk7XG5jb25zdCBuZXdQdWJsaXNoQ291bnQ9c3VjY2Vzc29yLnB1Ymxpc2hDb3VudDtcbmlmKG5ld1B1Ymxpc2hDb3VudCE9PXB1Ymxpc2hDb3VudCsxbil7XG5GYWlsIGBlYWNoSXRlcmF0b3IgYnJva2VuIGJ5IGdhcCBmcm9tIHB1Ymxpc2hDb3VudCAke3B1Ymxpc2hDb3VudH0gdG8gJHtuZXdQdWJsaXNoQ291bnR9YDtcbiB9XG5yZXR1cm4gc3VjY2Vzc29yO1xuIH07XG5cbi8vXG4vL1xubmV4dENlbGxQPXJlY29ubmVjdEFzTmVlZGVkKGdldFN1Y2Nlc3NvcixbdGFpbFBdKTtcblxuLy9cbi8vXG4vL1xuLy9cbnZvaWQgRS53aGVuKHB1Ymxpc2hDb3VudFAsc2luayxzaW5rKTtcbnZvaWQgRS53aGVuKG5leHRDZWxsUCxzaW5rLHNpbmspO1xucmV0dXJuIHJlc3VsdFA7XG4gfSxcbmZvcms6KCk9Pm1ha2VFYWNoSXRlcmF0b3IodG9waWMsbmV4dENlbGxQKX0pO1xuXG5yZXR1cm4gc2VsZjtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHN1YnNjcmliZUVhY2g9KHRvcGljKT0+e1xuY29uc3QgaXRlcmFibGU9RmFyKCdFYWNoSXRlcmFibGUnLHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PntcbmNvbnN0IGZpcnN0Q2VsbFA9cmVjb25uZWN0QXNOZWVkZWQoKCk9PkUodG9waWMpLnN1YnNjcmliZUFmdGVyKCkpO1xucmV0dXJuIG1ha2VFYWNoSXRlcmF0b3IodG9waWMsZmlyc3RDZWxsUCk7XG4gfX0pO1xuXG5yZXR1cm4gaXRlcmFibGU7XG4gfTskaM2PX29uY2Uuc3Vic2NyaWJlRWFjaChzdWJzY3JpYmVFYWNoKTtcbmhhcmRlbihzdWJzY3JpYmVFYWNoKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNsb25lTGF0ZXN0SXRlcmF0b3I9KHRvcGljLGxvY2FsVXBkYXRlQ291bnQsdGVybWluYWxSZXN1bHQpPT57XG5sZXQgbXV0ZXg9UHJvbWlzZS5yZXNvbHZlKCk7XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZVJlcXVlc3ROZXh0UmVzdWx0PWFzeW5jKCk9PntcbmlmKHRlcm1pbmFsUmVzdWx0KXtcbi8vXG4vL1xucmV0dXJuIHRlcm1pbmFsUmVzdWx0O1xuIH1cblxuLy9cbi8vXG5jb25zdHt2YWx1ZSx1cGRhdGVDb3VudH09YXdhaXQgcmVjb25uZWN0QXNOZWVkZWQoKCk9PlxuRSh0b3BpYykuZ2V0VXBkYXRlU2luY2UobG9jYWxVcGRhdGVDb3VudCkpO1xuXG4vL1xubG9jYWxVcGRhdGVDb3VudD11cGRhdGVDb3VudDtcblxuLy9cbmlmKHVwZGF0ZUNvdW50PT09dW5kZWZpbmVkKXtcbnRlcm1pbmFsUmVzdWx0PWhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlfSk7XG5yZXR1cm4gdGVybWluYWxSZXN1bHQ7XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZX0pO1xuIH07XG5cbmNvbnN0IHNlbGY9RmFyKCdMYXRlc3RJdGVyYXRvcicse1xuZm9yazooKT0+Y2xvbmVMYXRlc3RJdGVyYXRvcih0b3BpYyxsb2NhbFVwZGF0ZUNvdW50LHRlcm1pbmFsUmVzdWx0KSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PnNlbGYsXG5uZXh0OmFzeW5jKCk9Pntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuaWYodGVybWluYWxSZXN1bHQpe1xuLy9cbi8vXG5yZXR1cm4gdGVybWluYWxSZXN1bHQ7XG4gfVxuXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgbmV4dFJlc3VsdD1tdXRleC50aGVuKG1heWJlUmVxdWVzdE5leHRSZXN1bHQpO1xubXV0ZXg9bmV4dFJlc3VsdC50aGVuKHNpbmssc2luayk7XG4vL1xuXG5yZXR1cm4gbmV4dFJlc3VsdDtcbiB9fSk7XG5cbnJldHVybiBzZWxmO1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VMYXRlc3RJdGVyYXRvcj0odG9waWMpPT5jbG9uZUxhdGVzdEl0ZXJhdG9yKHRvcGljKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBzdWJzY3JpYmVMYXRlc3Q9KHRvcGljKT0+e1xuY29uc3QgaXRlcmFibGU9RmFyKCdMYXRlc3RJdGVyYWJsZScse1xuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXTooKT0+bWFrZUxhdGVzdEl0ZXJhdG9yKHRvcGljKX0pO1xuXG5yZXR1cm4gaXRlcmFibGU7XG4gfTskaM2PX29uY2Uuc3Vic2NyaWJlTGF0ZXN0KHN1YnNjcmliZUxhdGVzdCk7XG5oYXJkZW4oc3Vic2NyaWJlTGF0ZXN0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InN1YnNjcmliZSI6WyJzdWJzY3JpYmUiXSwic3Vic2NyaWJlRWFjaCI6WyJzdWJzY3JpYmVFYWNoIl0sInN1YnNjcmliZUxhdGVzdCI6WyJzdWJzY3JpYmVMYXRlc3QiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAl+K/4gAIAAAACAAAKQAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdWJzY3JpYmVyLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2ZhciIsIi4vc3Vic2NyaWJlLmpzIiwiLi9wdWJsaXNoLWtpdC5qcyIsIi4vdG9waWMuanMiXSwiZXhwb3J0cyI6WyJtYWtlU3Vic2NyaXB0aW9uIiwibWFrZVN1YnNjcmlwdGlvbktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLHN1YnNjcmliZUVhY2gsbWFrZVB1Ymxpc2hLaXQsbWFrZVBpbm5lZEhpc3RvcnlUb3BpYzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N1YnNjcmliZS5qc1wiLCBbW1wic3Vic2NyaWJlRWFjaFwiLCBbJGjNj19hID0+IChzdWJzY3JpYmVFYWNoID0gJGjNj19hKV1dXV0sW1wiLi9wdWJsaXNoLWtpdC5qc1wiLCBbW1wibWFrZVB1Ymxpc2hLaXRcIiwgWyRozY9fYSA9PiAobWFrZVB1Ymxpc2hLaXQgPSAkaM2PX2EpXV1dXSxbXCIuL3RvcGljLmpzXCIsIFtbXCJtYWtlUGlubmVkSGlzdG9yeVRvcGljXCIsIFskaM2PX2EgPT4gKG1ha2VQaW5uZWRIaXN0b3J5VG9waWMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VTdWJzY3JpcHRpb249KHRvcGljKT0+e1xuY29uc3Qgc3Vic2NyaXB0aW9uPUZhcignU3Vic2NyaXB0aW9uJyx7XG4uLi5zdWJzY3JpYmVFYWNoKHRvcGljKSxcbnN1YnNjcmliZUFmdGVyOmFzeW5jKHB1Ymxpc2hDb3VudCk9PkUodG9waWMpLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCksXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbmdldFNoYXJhYmxlU3Vic2NyaXB0aW9uSW50ZXJuYWxzOmFzeW5jKCk9PnRvcGljLFxuXG5nZXRTdG9yZUtleTooKT0+aGFyZGVuKHtzdWJzY3JpcHRpb259KX0pO1xuXG5yZXR1cm4gc3Vic2NyaXB0aW9uO1xuIH07JGjNj19vbmNlLm1ha2VTdWJzY3JpcHRpb24obWFrZVN1YnNjcmlwdGlvbik7XG5oYXJkZW4obWFrZVN1YnNjcmlwdGlvbik7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlU3Vic2NyaXB0aW9uS2l0PSgpPT57XG5jb25zdHtwdWJsaXNoZXIsc3Vic2NyaWJlcn09bWFrZVB1Ymxpc2hLaXQoKTtcblxuLy9cbi8vXG5cbmNvbnN0IHBpbm5lZEhpc3RvcnlUb3BpYz1tYWtlUGlubmVkSGlzdG9yeVRvcGljKHN1YnNjcmliZXIpO1xuY29uc3Qgc3Vic2NyaXB0aW9uPW1ha2VTdWJzY3JpcHRpb24ocGlubmVkSGlzdG9yeVRvcGljKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1YmxpY2F0aW9uPUZhcigncHVibGljYXRpb24nLHtcbnVwZGF0ZVN0YXRlOihub25GaW5hbFZhbHVlKT0+cHVibGlzaGVyLnB1Ymxpc2gobm9uRmluYWxWYWx1ZSksXG5maW5pc2g6KGNvbXBsZXRpb24pPT5wdWJsaXNoZXIuZmluaXNoKGNvbXBsZXRpb24pLFxuZmFpbDoocmVhc29uKT0+cHVibGlzaGVyLmZhaWwocmVhc29uKX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe3B1YmxpY2F0aW9uLHN1YnNjcmlwdGlvbn0pO1xuIH07JGjNj19vbmNlLm1ha2VTdWJzY3JpcHRpb25LaXQobWFrZVN1YnNjcmlwdGlvbktpdCk7XG5oYXJkZW4obWFrZVN1YnNjcmlwdGlvbktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU3Vic2NyaXB0aW9uIjpbIm1ha2VTdWJzY3JpcHRpb24iXSwibWFrZVN1YnNjcmlwdGlvbktpdCI6WyJtYWtlU3Vic2NyaXB0aW9uS2l0Il19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAC7X44scBAAAHAQAACQAAABAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvdG9waWMuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIl0sImV4cG9ydHMiOlsibWFrZVBpbm5lZEhpc3RvcnlUb3BpYyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhcjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVBpbm5lZEhpc3RvcnlUb3BpYz0odG9waWMpPT57XG4vL1xuXG4vL1xuY29uc3QgcGlubmVkUHViTGlzdD10b3BpYy5zdWJzY3JpYmVBZnRlcigpO1xuXG5yZXR1cm4gRmFyKCdQaW5uZWRIaXN0b3J5VG9waWMnLHtcbnN1YnNjcmliZUFmdGVyOmFzeW5jKHB1Ymxpc2hDb3VudD0tMW4pPT57XG5pZihwdWJsaXNoQ291bnQ9PT0tMW4pe1xucmV0dXJuIHBpbm5lZFB1Ykxpc3Q7XG4gfVxucmV0dXJuIHRvcGljLnN1YnNjcmliZUFmdGVyKHB1Ymxpc2hDb3VudCk7XG4gfSxcbmdldFVwZGF0ZVNpbmNlOmFzeW5jKHVwZGF0ZUNvdW50PXVuZGVmaW5lZCk9Pntcbi8vXG5yZXR1cm4gdG9waWMuZ2V0VXBkYXRlU2luY2UodXBkYXRlQ291bnQpO1xuIH19KTtcblxuIH07JGjNj19vbmNlLm1ha2VQaW5uZWRIaXN0b3J5VG9waWMobWFrZVBpbm5lZEhpc3RvcnlUb3BpYyk7XG5oYXJkZW4obWFrZVBpbm5lZEhpc3RvcnlUb3BpYyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlUGlubmVkSGlzdG9yeVRvcGljIjpbIm1ha2VQaW5uZWRIaXN0b3J5VG9waWMiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABURLJnkBAAB5AQAAKgAAAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy90eXBlcy1pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADTLMiAsQYAALEGAAAtAAAAQGFnb3JpYy9ub3RpZmllci12MC42LjIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL2ludGVybmFsL3NyYy90ZXN0aW5nLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsibWFrZUZha2VNYXJzaGFsbGVyIiwibWFrZUZha2VTdG9yYWdlIixudWxsXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXIsbWFrZU1hcnNoYWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdGVzdGluZy11dGlscy5qc1wiLCBbXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VGYWtlU3RvcmFnZT0ocGF0aCxwdWJsaWNhdGlvbik9PntcbmxldCBzZXRWYWx1ZUNhbGxzPTA7XG5jb25zdCBmdWxsUGF0aD0gYHB1Ymxpc2guJHtwYXRofWA7XG5jb25zdCBzdG9yZUtleT1oYXJkZW4oe1xuc3RvcmVOYW1lOidzd2luZ3NldCcsXG5zdG9yZVN1YmtleTogYHN3aW5nc2V0L2RhdGE6JHtmdWxsUGF0aH1gLFxuZGF0YVByZWZpeEJ5dGVzOicnfSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN0b3JhZ2U9RmFyKCdTdG9yYWdlTm9kZScse1xuZ2V0UGF0aDooKT0+cGF0aCxcbmdldFN0b3JlS2V5OmFzeW5jKCk9PnN0b3JlS2V5LFxuc2V0VmFsdWU6YXN5bmModmFsdWUpPT57XG5zZXRWYWx1ZUNhbGxzKz0xO1xuYXNzZXJ0LnR5cGVvZih2YWx1ZSwnc3RyaW5nJyk7XG5pZihwdWJsaWNhdGlvbil7XG5wdWJsaWNhdGlvbi51cGRhdGVTdGF0ZSh2YWx1ZSk7XG4gfVxuIH0sXG5tYWtlQ2hpbGROb2RlOigpPT5zdG9yYWdlLFxuY291bnRTZXRWYWx1ZUNhbGxzOigpPT5zZXRWYWx1ZUNhbGxzfSk7XG5cbnJldHVybiBzdG9yYWdlO1xuIH07JGjNj19vbmNlLm1ha2VGYWtlU3RvcmFnZShtYWtlRmFrZVN0b3JhZ2UpO1xuaGFyZGVuKG1ha2VGYWtlU3RvcmFnZSk7XG5cbmNvbnN0ICAgICAgICBtYWtlRmFrZU1hcnNoYWxsZXI9KCk9PlxubWFrZU1hcnNoYWwodW5kZWZpbmVkLHVuZGVmaW5lZCx7XG5tYXJzaGFsU2F2ZUVycm9yOigpPT57IH19KTskaM2PX29uY2UubWFrZUZha2VNYXJzaGFsbGVyKG1ha2VGYWtlTWFyc2hhbGxlcik7XG5cbmhhcmRlbihtYWtlRmFrZU1hcnNoYWxsZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGFnb3JpYy9pbnRlcm5hbC9zcmMvdGVzdGluZy11dGlscy5qcyI6W1siZXZlbnRMb29wSXRlcmF0aW9uIiwiZXZlbnRMb29wSXRlcmF0aW9uIl1dfSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VGYWtlU3RvcmFnZSI6WyJtYWtlRmFrZVN0b3JhZ2UiXSwibWFrZUZha2VNYXJzaGFsbGVyIjpbIm1ha2VGYWtlTWFyc2hhbGxlciJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAACq/PJvB0AALwdAAAzAAAAQGFnb3JpYy9zbWFydC13YWxsZXQtdjAuNS4zL3NyYy9tYXJzaGFsLWNvbnRleHRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAYWdvcmljL3N0b3JlIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvdmF0cy9zcmMvbGliLWJvYXJkLmpzIl0sImV4cG9ydHMiOlsibWFrZUV4cG9ydENvbnRleHQiLCJtYWtlSW1wb3J0Q29udGV4dCIsIm1ha2VMb2dnaW5nUHJlc2VuY2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHEsSGFuZGxlZFByb21pc2UsbWFrZVNjYWxhck1hcFN0b3JlLEZhcixtYWtlTWFyc2hhbCxSZW1vdGFibGUsREVGQVVMVF9QUkVGSVg7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJIYW5kbGVkUHJvbWlzZVwiLCBbJGjNj19hID0+IChIYW5kbGVkUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm1ha2VTY2FsYXJNYXBTdG9yZVwiLCBbJGjNj19hID0+IChtYWtlU2NhbGFyTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dLFtcIlJlbW90YWJsZVwiLCBbJGjNj19hID0+IChSZW1vdGFibGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdHMvc3JjL2xpYi1ib2FyZC5qc1wiLCBbW1wiREVGQVVMVF9QUkVGSVhcIiwgWyRozY9fYSA9PiAoREVGQVVMVF9QUkVGSVggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCBpc0RlZmF1bHRCb2FyZElkPShzcGVjaW1lbik9PntcbnJldHVybiB0eXBlb2Ygc3BlY2ltZW49PT0nc3RyaW5nJyYmc3BlY2ltZW4uc3RhcnRzV2l0aChERUZBVUxUX1BSRUZJWCk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVdhbGxldFNsb3Q9KF90YWJsZXMsa2luZCxpZCk9PntcbmNvbnN0IGRpZ2l0cz0vKiAgICAgICAgICAgICAgICAgKi8gYCR7aWR9YDtcbnJldHVybiBgJHtraW5kfToke2RpZ2l0c31gO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZmluZEtleT0ocmVjb3JkLHByZWRpY2F0ZSk9PntcbmNvbnN0IGtleT1PYmplY3Qua2V5cyhyZWNvcmQpLmZpbmQocHJlZGljYXRlKTtcbnJldHVybiBrZXk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBwYXJzZVdhbGxldFNsb3Q9KHRhYmxlcyxzbG90KT0+e1xuY29uc3Qga2luZD1maW5kS2V5KHRhYmxlcywoayk9PnNsb3Quc3RhcnRzV2l0aCggYCR7a306YCkpO1xuY29uc3QgaWQ9a2luZD9OdW1iZXIoc2xvdC5zbGljZShraW5kLmxlbmd0aCsxKSk6TmFOO1xucmV0dXJue2tpbmQsaWR9O1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBpbml0U2xvdFZhbD0odGFibGUsc2xvdCx2YWwpPT57XG50YWJsZS5ieVNsb3QuaW5pdChzbG90LHZhbCk7XG50YWJsZS5ieVZhbC5pbml0KHZhbCxzbG90KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFeHBvcnRDb250ZXh0PSgpPT57XG5jb25zdCB3YWxsZXRPYmplY3RzPXtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnB1cnNlOntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfSxcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5wYXltZW50OntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfSxcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnVua25vd246e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9fTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYm9hcmRPYmplY3RzPXtcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3Qgc2xvdFRvVmFsPShzbG90LF9pZmFjZSk9PntcbmlmKGlzRGVmYXVsdEJvYXJkSWQoc2xvdCkmJmJvYXJkT2JqZWN0cy5ieVNsb3QuaGFzKHNsb3QpKXtcbnJldHVybiBib2FyZE9iamVjdHMuYnlTbG90LmdldChzbG90KTtcbiB9XG5jb25zdHtraW5kLGlkfT1wYXJzZVdhbGxldFNsb3Qod2FsbGV0T2JqZWN0cyxzbG90KTtcbmtpbmR8fEZhaWwgYGJhZCBzbG90IGtpbmQ6ICR7c2xvdH1gO1xuY29uc3QgdmFsPXdhbGxldE9iamVjdHNba2luZF0uYnlTbG90LmdldChpZCk7Ly9cbnJldHVybiB2YWw7XG4gfTtcblxubGV0IHVua25vd25Ob25jZT0wO1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCB2YWxUb1Nsb3Q9KHZhbCk9PntcbmlmKGJvYXJkT2JqZWN0cy5ieVZhbC5oYXModmFsKSl7XG5yZXR1cm4gYm9hcmRPYmplY3RzLmJ5VmFsLmdldCh2YWwpO1xuIH1cbmNvbnN0IGtpbmQ9ZmluZEtleSh3YWxsZXRPYmplY3RzLChrKT0+d2FsbGV0T2JqZWN0c1trXS5ieVZhbC5oYXModmFsKSk7XG5pZihraW5kKXtcbi8vXG5jb25zdCBpZD13YWxsZXRPYmplY3RzW2tpbmRdLmJ5VmFsLmdldCh2YWwpO1xucmV0dXJuIG1ha2VXYWxsZXRTbG90KHdhbGxldE9iamVjdHMsa2luZCxpZCk7XG4gfVxudW5rbm93bk5vbmNlKz0xO1xuY29uc3Qgc2xvdD1tYWtlV2FsbGV0U2xvdCh3YWxsZXRPYmplY3RzLCd1bmtub3duJyx1bmtub3duTm9uY2UpO1xuaW5pdFNsb3RWYWwod2FsbGV0T2JqZWN0cy51bmtub3duLHVua25vd25Ob25jZSx2YWwpO1xucmV0dXJuIHNsb3Q7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBtYWtlU2F2ZXI9KGtpbmQsdGFibGUpPT57XG5sZXQgbm9uY2U9MDtcbi8qICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2F2ZXI9KHZhbCk9Pntcbm5vbmNlKz0xO1xuaW5pdFNsb3RWYWwodGFibGUsbm9uY2UsdmFsKTtcbiB9O1xucmV0dXJuIHNhdmVyO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe1xuc2F2ZVB1cnNlQWN0aW9uczptYWtlU2F2ZXIoJ3B1cnNlJyx3YWxsZXRPYmplY3RzLnB1cnNlKSxcbnNhdmVQYXltZW50QWN0aW9uczptYWtlU2F2ZXIoJ3BheW1lbnQnLHdhbGxldE9iamVjdHMucGF5bWVudCksXG4vKlxuXG5cbiAgICAgKi9cbmluaXRQdXJzZUlkOihpZCxwdXJzZSk9PntcbmluaXRTbG90VmFsKHdhbGxldE9iamVjdHMucHVyc2UsaWQscHVyc2UpO1xuIH0sXG5wdXJzZUVudHJpZXM6d2FsbGV0T2JqZWN0cy5wdXJzZS5ieVNsb3QuZW50cmllcyxcbi8qXG5cblxuICAgICAqL1xuaW5pdEJvYXJkSWQ6KGlkLHZhbCk9PntcbmluaXRTbG90VmFsKGJvYXJkT2JqZWN0cyxpZCx2YWwpO1xuIH0sXG4vKlxuXG5cbiAgICAgKi9cbmVuc3VyZUJvYXJkSWQ6KGlkLHZhbCk9PntcbmlmKGJvYXJkT2JqZWN0cy5ieVZhbC5oYXModmFsKSl7XG5hc3NlcnQuZXF1YWwoYm9hcmRPYmplY3RzLmJ5VmFsLmdldCh2YWwpLGlkKTtcbnJldHVybjtcbiB9XG5pbml0U2xvdFZhbChib2FyZE9iamVjdHMsaWQsdmFsKTtcbiB9LFxuLi4ubWFrZU1hcnNoYWwodmFsVG9TbG90LHNsb3RUb1ZhbCx7c2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pfSk7XG5cbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UubWFrZUV4cG9ydENvbnRleHQobWFrZUV4cG9ydENvbnRleHQpO1xuXG5jb25zdCBkZWZhdWx0TWFrZVByZXNlbmNlPShpZmFjZSk9PntcbmNvbnN0IHNldmVyZWQ9IGBTRVZFUkVEOiAke2lmYWNlLnJlcGxhY2UoL15BbGxlZ2VkOiAvLCcnKX1gO1xucmV0dXJuIEZhcihzZXZlcmVkLHt9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSW1wb3J0Q29udGV4dD0obWFrZVByZXNlbmNlPWRlZmF1bHRNYWtlUHJlc2VuY2UpPT57XG5jb25zdCB3YWxsZXRPYmplY3RzPXtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnB1cnNlOntcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfSxcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xucGF5bWVudDp7XG5ieVNsb3Q6bWFrZVNjYWxhck1hcFN0b3JlKCksXG5ieVZhbDptYWtlU2NhbGFyTWFwU3RvcmUoKX0sXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnVua25vd246e1xuYnlTbG90Om1ha2VTY2FsYXJNYXBTdG9yZSgpLFxuYnlWYWw6bWFrZVNjYWxhck1hcFN0b3JlKCl9fTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYm9hcmRPYmplY3RzPXtcbmJ5U2xvdDptYWtlU2NhbGFyTWFwU3RvcmUoKSxcbmJ5VmFsOm1ha2VTY2FsYXJNYXBTdG9yZSgpfTtcblxuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlVmFsPSh0YWJsZSxzbG90LGlmYWNlKT0+e1xuaWYodGFibGUuYnlTbG90LmhhcyhzbG90KSl7XG5yZXR1cm4gdGFibGUuYnlTbG90LmdldChzbG90KTtcbiB9XG5jb25zdCB2YWw9bWFrZVByZXNlbmNlKGlmYWNlKTtcbmluaXRTbG90VmFsKHRhYmxlLHNsb3QsdmFsKTtcbnJldHVybiB2YWw7XG4gfTtcblxuY29uc3Qgc2xvdFRvVmFsPXtcbi8qXG5cblxuICAgICAqL1xuZnJvbUJvYXJkOihzbG90LGlmYWNlKT0+e1xuaXNEZWZhdWx0Qm9hcmRJZChzbG90KXx8RmFpbCBgYmFkIGJvYXJkIHNsb3QgJHtxKHNsb3QpfWA7XG5yZXR1cm4gcHJvdmlkZVZhbChib2FyZE9iamVjdHMsc2xvdCxpZmFjZSk7XG4gfSxcblxuLypcblxuXG4gICAgICovXG5mcm9tTXlXYWxsZXQ6KHNsb3QsaWZhY2UpPT57XG5pZighc2xvdCl7XG4vL1xucmV0dXJuIG1ha2VQcmVzZW5jZSggYCR7c2xvdH1gKTtcbiB9XG5jb25zdHtraW5kLGlkfT1wYXJzZVdhbGxldFNsb3Qod2FsbGV0T2JqZWN0cyxzbG90KTtcbnJldHVybiBraW5kP1xucHJvdmlkZVZhbCh3YWxsZXRPYmplY3RzW2tpbmRdLGlkLGlmYWNlKTpcbnNsb3RUb1ZhbC5mcm9tQm9hcmQoc2xvdCxpZmFjZSk7XG4gfX07XG5cblxuY29uc3QgdmFsVG9TbG90PXtcbmZyb21Cb2FyZDoodmFsKT0+Ym9hcmRPYmplY3RzLmJ5VmFsLmdldCh2YWwpLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnJvbU15V2FsbGV0Oih2YWwpPT57XG5jb25zdCBraW5kPWZpbmRLZXkod2FsbGV0T2JqZWN0cywoayk9PndhbGxldE9iamVjdHNba10uYnlWYWwuaGFzKHZhbCkpO1xuaWYoa2luZD09PXVuZGVmaW5lZCl7XG50aHJvdyBGYWlsIGBjYW5ub3Qgc2VyaWFsaXplIHVucmVnaXN0ZXJlZCAke3ZhbH1gO1xuIH1cblxuY29uc3QgaWQ9d2FsbGV0T2JqZWN0c1traW5kXS5ieVZhbC5nZXQodmFsKTtcbnJldHVybiBtYWtlV2FsbGV0U2xvdCh3YWxsZXRPYmplY3RzLGtpbmQsaWQpO1xuIH19O1xuXG5cbmNvbnN0IG1hcnNoYWw9e1xuZnJvbUJvYXJkOm1ha2VNYXJzaGFsKHZhbFRvU2xvdC5mcm9tQm9hcmQsc2xvdFRvVmFsLmZyb21Cb2FyZCx7XG5tYXJzaGFsTmFtZTonZnJvbUJvYXJkJyxcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KSxcblxuZnJvbU15V2FsbGV0Om1ha2VNYXJzaGFsKHZhbFRvU2xvdC5mcm9tTXlXYWxsZXQsc2xvdFRvVmFsLmZyb21NeVdhbGxldCx7XG5tYXJzaGFsTmFtZTonZnJvbU15V2FsbGV0JyxcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KX07XG5cblxuXG5yZXR1cm4gaGFyZGVuKHtcbi8qXG5cblxuICAgICAqL1xuaW5pdEJvYXJkSWQ6KGlkLHZhbCk9PntcbmluaXRTbG90VmFsKGJvYXJkT2JqZWN0cyxpZCx2YWwpO1xuIH0sXG4vKlxuXG5cbiAgICAgKi9cbmVuc3VyZUJvYXJkSWQ6KGlkLHZhbCk9PntcbmlmKGJvYXJkT2JqZWN0cy5ieVZhbC5oYXModmFsKSl7XG5hc3NlcnQuZXF1YWwoYm9hcmRPYmplY3RzLmJ5VmFsLmdldCh2YWwpLGlkKTtcbnJldHVybjtcbiB9XG5pbml0U2xvdFZhbChib2FyZE9iamVjdHMsaWQsdmFsKTtcbiB9LFxuZnJvbU15V2FsbGV0OkZhcignd2FsbGV0IG1hcnNoYWxsZXInLHsuLi5tYXJzaGFsLmZyb21NeVdhbGxldH0pLFxuZnJvbUJvYXJkOkZhcignYm9hcmQgbWFyc2hhbGxlcicsey4uLm1hcnNoYWwuZnJvbUJvYXJkfSl9KTtcblxuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VJbXBvcnRDb250ZXh0KG1ha2VJbXBvcnRDb250ZXh0KTtcbmNvbnN0IG1ha2VQcmVzZW5jZT0oaWZhY2UsaGFuZGxlcik9PntcbmxldCBvYmo7XG5cbnZvaWQgbmV3IEhhbmRsZWRQcm9taXNlKChyZXNvbHZlLHJlamVjdCxyZXNvbHZlV2l0aFByZXNlbmNlKT0+e1xub2JqPXJlc29sdmVXaXRoUHJlc2VuY2UoaGFuZGxlcik7XG4gfSk7XG5hc3NlcnQob2JqKTtcbnJldHVybiBSZW1vdGFibGUoaWZhY2UsdW5kZWZpbmVkLG9iaik7XG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTG9nZ2luZ1ByZXNlbmNlPShpZmFjZSxsb2cpPT57XG4vKiAgICAgICAgICAgICAgKi8gLy9cbmNvbnN0IGl0PW1ha2VQcmVzZW5jZShpZmFjZSx7XG5hcHBseU1ldGhvZDoodGFyZ2V0LG1ldGhvZCxhcmdzKT0+e1xubG9nKGhhcmRlbihbJ2FwcGx5TWV0aG9kJyx0YXJnZXQsbWV0aG9kLGFyZ3NdKSk7XG4gfSxcbmFwcGx5RnVuY3Rpb246KHRhcmdldCxhcmdzKT0+e1xubG9nKGhhcmRlbihbJ2FwcGx5RnVuY3Rpb24nLHRhcmdldCxhcmdzXSkpO1xuIH19KTtcblxucmV0dXJuIGl0O1xuIH07JGjNj19vbmNlLm1ha2VMb2dnaW5nUHJlc2VuY2UobWFrZUxvZ2dpbmdQcmVzZW5jZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlRXhwb3J0Q29udGV4dCI6WyJtYWtlRXhwb3J0Q29udGV4dCJdLCJtYWtlSW1wb3J0Q29udGV4dCI6WyJtYWtlSW1wb3J0Q29udGV4dCJdLCJtYWtlTG9nZ2luZ1ByZXNlbmNlIjpbIm1ha2VMb2dnaW5nUHJlc2VuY2UiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAoar9L8MNAADDDQAAIQAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAZW5kby9wYXR0ZXJucyIsIi4vc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qcyIsIi4vc3RvcmVzL3NjYWxhclNldFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzIiwiLi9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanMiLCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qcyIsIkBlbmRvL2V4byIsIi4vbGVnYWN5L2xlZ2FjeU1hcC5qcyIsIi4vbGVnYWN5L2xlZ2FjeVdlYWtNYXAuanMiLCIuL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5IiwiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzcyIsIm11c3RNYXRjaCIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3R5cGVzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgdHlwZWxlc3NNdXN0TWF0Y2g7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKHR5cGVsZXNzTXVzdE1hdGNoID0gJGjNj19hKV1dXV0sW1wiLi9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc2NhbGFyV2Vha01hcFN0b3JlLmpzXCIsIFtdXSxbXCIuL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qc1wiLCBbXV0sW1wiLi9zdG9yZXMvc3RvcmUtdXRpbHMuanNcIiwgW11dLFtcIkBlbmRvL2V4b1wiLCBbXV0sW1wiLi9sZWdhY3kvbGVnYWN5TWFwLmpzXCIsIFtdXSxbXCIuL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzXCIsIFtdXSxbXCIuL3R5cGVzLmpzXCIsIFtdXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG11c3RNYXRjaD10eXBlbGVzc011c3RNYXRjaDskaM2PX29uY2UubXVzdE1hdGNoKG11c3RNYXRjaCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3N0b3Jlcy9zY2FsYXJXZWFrU2V0U3RvcmUuanMiOltbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qcyI6W1sibWFrZVNjYWxhclNldFN0b3JlIiwibWFrZVNjYWxhclNldFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanMiOltbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIl1dLCIuL3N0b3Jlcy9zY2FsYXJNYXBTdG9yZS5qcyI6W1sibWFrZVNjYWxhck1hcFN0b3JlIiwibWFrZVNjYWxhck1hcFN0b3JlIl1dLCIuL3N0b3Jlcy9zdG9yZS11dGlscy5qcyI6W1sicHJvdmlkZUxhenkiLCJwcm92aWRlTGF6eSJdXSwiQGVuZG8vcGF0dGVybnMiOltbImlzS2V5IiwiaXNLZXkiXSxbImFzc2VydEtleSIsImFzc2VydEtleSJdLFsiYXNzZXJ0U2NhbGFyS2V5IiwiYXNzZXJ0U2NhbGFyS2V5Il0sWyJtYWtlQ29weVNldCIsIm1ha2VDb3B5U2V0Il0sWyJnZXRDb3B5U2V0S2V5cyIsImdldENvcHlTZXRLZXlzIl0sWyJtYWtlQ29weUJhZyIsIm1ha2VDb3B5QmFnIl0sWyJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyIsIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIl0sWyJnZXRDb3B5QmFnRW50cmllcyIsImdldENvcHlCYWdFbnRyaWVzIl0sWyJtYWtlQ29weU1hcCIsIm1ha2VDb3B5TWFwIl0sWyJnZXRDb3B5TWFwRW50cmllcyIsImdldENvcHlNYXBFbnRyaWVzIl0sWyJjb2VyY2VUb0VsZW1lbnRzIiwiY29lcmNlVG9FbGVtZW50cyJdLFsiY29lcmNlVG9CYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIl0sWyJjb21wYXJlS2V5cyIsImNvbXBhcmVLZXlzIl0sWyJrZXlMVCIsImtleUxUIl0sWyJrZXlMVEUiLCJrZXlMVEUiXSxbImtleUVRIiwia2V5RVEiXSxbImtleUdURSIsImtleUdURSJdLFsia2V5R1QiLCJrZXlHVCJdLFsiZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNJc1N1cGVyc2V0Il0sWyJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzRGlzam9pbnQiXSxbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzQ29tcGFyZSJdLFsiZWxlbWVudHNVbmlvbiIsImVsZW1lbnRzVW5pb24iXSxbImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiJdLFsiZWxlbWVudHNJbnRlcnNlY3Rpb24iLCJlbGVtZW50c0ludGVyc2VjdGlvbiJdLFsiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IiwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0Il0sWyJzZXRJc1N1cGVyc2V0Iiwic2V0SXNTdXBlcnNldCJdLFsic2V0SXNEaXNqb2ludCIsInNldElzRGlzam9pbnQiXSxbInNldENvbXBhcmUiLCJzZXRDb21wYXJlIl0sWyJzZXRVbmlvbiIsInNldFVuaW9uIl0sWyJzZXREaXNqb2ludFVuaW9uIiwic2V0RGlzam9pbnRVbmlvbiJdLFsic2V0SW50ZXJzZWN0aW9uIiwic2V0SW50ZXJzZWN0aW9uIl0sWyJzZXREaXNqb2ludFN1YnRyYWN0Iiwic2V0RGlzam9pbnRTdWJ0cmFjdCJdLFsiYmFnSXNTdXBlcmJhZyIsImJhZ0lzU3VwZXJiYWciXSxbImJhZ0NvbXBhcmUiLCJiYWdDb21wYXJlIl0sWyJiYWdVbmlvbiIsImJhZ1VuaW9uIl0sWyJiYWdJbnRlcnNlY3Rpb24iLCJiYWdJbnRlcnNlY3Rpb24iXSxbImJhZ0Rpc2pvaW50U3VidHJhY3QiLCJiYWdEaXNqb2ludFN1YnRyYWN0Il0sWyJNIiwiTSJdLFsiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIl0sWyJpc1BhdHRlcm4iLCJpc1BhdHRlcm4iXSxbImFzc2VydFBhdHRlcm4iLCJhc3NlcnRQYXR0ZXJuIl0sWyJtYXRjaGVzIiwibWF0Y2hlcyJdLFsiaXNDb3B5U2V0IiwiaXNDb3B5U2V0Il0sWyJpc0NvcHlNYXAiLCJpc0NvcHlNYXAiXV0sIkBlbmRvL2V4byI6W1siaW5pdEVtcHR5IiwiaW5pdEVtcHR5Il0sWyJkZWZpbmVFeG9DbGFzcyIsImRlZmluZUV4b0NsYXNzIl0sWyJkZWZpbmVFeG9DbGFzc0tpdCIsImRlZmluZUV4b0NsYXNzS2l0Il0sWyJtYWtlRXhvIiwibWFrZUV4byJdXSwiLi9sZWdhY3kvbGVnYWN5TWFwLmpzIjpbWyJtYWtlTGVnYWN5TWFwIiwibWFrZUxlZ2FjeU1hcCJdXSwiLi9sZWdhY3kvbGVnYWN5V2Vha01hcC5qcyI6W1sibWFrZUxlZ2FjeVdlYWtNYXAiLCJtYWtlTGVnYWN5V2Vha01hcCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtdXN0TWF0Y2giOlsibXVzdE1hdGNoIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAM7ll0hkBQAAZAUAACwAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvbGVnYWN5L2xlZ2FjeU1hcC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlTGVnYWN5TWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUxlZ2FjeU1hcD0odGFnPSdrZXknKT0+e1xuY29uc3QgbT1uZXcgTWFwKCk7XG5jb25zdCBhc3NlcnRLZXlEb2VzTm90RXhpc3Q9KGtleSk9PlxuIW0uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7a2V5fWA7XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9PlxubS5oYXMoa2V5KXx8RmFpbCBgJHtxKHRhZyl9IG5vdCBmb3VuZDogJHtrZXl9YDtcbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4gbS5oYXMoa2V5KTtcbiB9LFxuaW5pdDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RG9lc05vdEV4aXN0KGtleSk7XG5tLnNldChrZXksdmFsdWUpO1xuIH0sXG5nZXQ6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xucmV0dXJuIG0uZ2V0KGtleSk7XG4gfSxcbnNldDooa2V5LHZhbHVlKT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5tLnNldChrZXksdmFsdWUpO1xuIH0sXG5kZWxldGU6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xubS5kZWxldGUoa2V5KTtcbiB9LFxua2V5czooKT0+bS5rZXlzKCksXG52YWx1ZXM6KCk9Pm0udmFsdWVzKCksXG5lbnRyaWVzOigpPT5tLmVudHJpZXMoKSxcbmdldFNpemU6KCk9Pm0uc2l6ZSxcbmNsZWFyOigpPT5tLmNsZWFyKCl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VMZWdhY3lNYXAobWFrZUxlZ2FjeU1hcCk7XG5oYXJkZW4obWFrZUxlZ2FjeU1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTGVnYWN5TWFwIjpbIm1ha2VMZWdhY3lNYXAiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAbfFZIyYFAAAmBQAAMAAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9sZWdhY3kvbGVnYWN5V2Vha01hcC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlTGVnYWN5V2Vha01hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTGVnYWN5V2Vha01hcD0odGFnPSdrZXknKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgd209bmV3IFdlYWtNYXAoKTtcbmNvbnN0IGFzc2VydEtleURvZXNOb3RFeGlzdD0oa2V5KT0+XG4hd20uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7a2V5fWA7XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9Plxud20uaGFzKGtleSl8fEZhaWwgYCR7cSh0YWcpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIHdtLmhhcyhrZXkpO1xuIH0sXG5pbml0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlEb2VzTm90RXhpc3Qoa2V5KTtcbndtLnNldChrZXksdmFsdWUpO1xuIH0sXG5nZXQ6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xuLy9cbnJldHVybiAoLyogICAgICAgICAgICAqL3dtLmdldChrZXkpKTtcbiB9LFxuc2V0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbndtLnNldChrZXksdmFsdWUpO1xuIH0sXG5kZWxldGU6KGtleSk9PntcbmFzc2VydEtleUV4aXN0cyhrZXkpO1xud20uZGVsZXRlKGtleSk7XG4gfX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUxlZ2FjeVdlYWtNYXAobWFrZUxlZ2FjeVdlYWtNYXApO1xuaGFyZGVuKG1ha2VMZWdhY3lXZWFrTWFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VMZWdhY3lXZWFrTWFwIjpbIm1ha2VMZWdhY3lXZWFrTWFwIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIWebmbLEAAAyxAAADEAAABAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhck1hcFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9tYXJzaGFsIiwiQGVuZG8vcGF0dGVybnMiLCIuL3NjYWxhcldlYWtNYXBTdG9yZS5qcyIsIi4vc3RvcmUtdXRpbHMuanMiXSwiZXhwb3J0cyI6WyJtYWtlTWFwU3RvcmVNZXRob2RzIiwibWFrZVNjYWxhck1hcFN0b3JlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYXIsYXNzZXJ0UGFzc2FibGUsZmlsdGVySXRlcmFibGUsbWFwSXRlcmFibGUsY29tcGFyZVJhbmssYXNzZXJ0U2NhbGFyS2V5LG1ha2VDb3B5TWFwLG1hdGNoZXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4sbWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMsbWFrZUN1cnJlbnRLZXlzS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcImZpbHRlckl0ZXJhYmxlXCIsIFskaM2PX2EgPT4gKGZpbHRlckl0ZXJhYmxlID0gJGjNj19hKV1dLFtcIm1hcEl0ZXJhYmxlXCIsIFskaM2PX2EgPT4gKG1hcEl0ZXJhYmxlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiY29tcGFyZVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wiYXNzZXJ0U2NhbGFyS2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydFNjYWxhcktleSA9ICRozY9fYSldXSxbXCJtYWtlQ29weU1hcFwiLCBbJGjNj19hID0+IChtYWtlQ29weU1hcCA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV0sW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXR0ZXJuXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhdHRlcm4gPSAkaM2PX2EpXV1dXSxbXCIuL3NjYWxhcldlYWtNYXBTdG9yZS5qc1wiLCBbW1wibWFrZVdlYWtNYXBTdG9yZU1ldGhvZHNcIiwgWyRozY9fYSA9PiAobWFrZVdlYWtNYXBTdG9yZU1ldGhvZHMgPSAkaM2PX2EpXV1dXSxbXCIuL3N0b3JlLXV0aWxzLmpzXCIsIFtbXCJtYWtlQ3VycmVudEtleXNLaXRcIiwgWyRozY9fYSA9PiAobWFrZUN1cnJlbnRLZXlzS2l0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1hcFN0b3JlTWV0aG9kcz0oXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydEtleU9rVG9EZWxldGU9dW5kZWZpbmVkLFxudGFnPSdrZXknKT0+XG57XG5jb25zdHthc3NlcnRVcGRhdGVPbkFkZCxhc3NlcnRVcGRhdGVPbkRlbGV0ZSxpdGVyYWJsZUtleXN9PVxubWFrZUN1cnJlbnRLZXlzS2l0KFxuKCk9PmpzbWFwLmtleXMoKSxcbihrKT0+anNtYXAuaGFzKGspLFxuY29tcGFyZVJhbmssXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlLFxudGFnKTtcblxuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IGtleXM9KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQpe1xucmV0dXJuIGl0ZXJhYmxlS2V5cztcbiB9XG5jb25zdCBmaWx0ZXI9KGspPT57XG5pZihrZXlQYXR0IT09dW5kZWZpbmVkJiYhbWF0Y2hlcyhrLGtleVBhdHQpKXtcbnJldHVybiBmYWxzZTtcbiB9XG4vL1xuaWYodmFsdWVQYXR0IT09dW5kZWZpbmVkJiYhbWF0Y2hlcyhqc21hcC5nZXQoayksdmFsdWVQYXR0KSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcbnJldHVybiBmaWx0ZXJJdGVyYWJsZShpdGVyYWJsZUtleXMsZmlsdGVyKTtcbiB9O1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHZhbHVlcz0oa2V5UGF0dD11bmRlZmluZWQsdmFsdWVQYXR0PXVuZGVmaW5lZCk9PlxubWFwSXRlcmFibGUoa2V5cyhrZXlQYXR0LHZhbHVlUGF0dCksKGspPT4vKiAgICAgICAgICAgICovanNtYXAuZ2V0KGspKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBlbnRyaWVzPShrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5tYXBJdGVyYWJsZShrZXlzKGtleVBhdHQsdmFsdWVQYXR0KSwoayk9PltcbmssXG4vKiAgICAgICAgICAgICovanNtYXAuZ2V0KGspXSk7XG5cblxucmV0dXJuIGhhcmRlbih7XG4uLi5tYWtlV2Vha01hcFN0b3JlTWV0aG9kcyhcbmpzbWFwLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxudGFnKSxcblxua2V5cyxcbnZhbHVlcyxcbmVudHJpZXMsXG5cbnNuYXBzaG90OihrZXlQYXR0PXVuZGVmaW5lZCx2YWx1ZVBhdHQ9dW5kZWZpbmVkKT0+XG5tYWtlQ29weU1hcChlbnRyaWVzKGtleVBhdHQsdmFsdWVQYXR0KSksXG5cbmdldFNpemU6KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQmJnZhbHVlUGF0dD09PXVuZGVmaW5lZD9cbmpzbWFwLnNpemU6XG5bLi4ua2V5cyhrZXlQYXR0LHZhbHVlUGF0dCldLmxlbmd0aCxcblxuY2xlYXI6KGtleVBhdHQ9dW5kZWZpbmVkLHZhbHVlUGF0dD11bmRlZmluZWQpPT57XG5pZihrZXlQYXR0PT09dW5kZWZpbmVkJiZ2YWx1ZVBhdHQ9PT11bmRlZmluZWQpe1xuanNtYXAuY2xlYXIoKTtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIGtleXMoa2V5UGF0dCx2YWx1ZVBhdHQpKXtcbmpzbWFwLmRlbGV0ZShrZXkpO1xuIH1cbiB9fSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZU1hcFN0b3JlTWV0aG9kcyhtYWtlTWFwU3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyTWFwU3RvcmU9KFxudGFnPSdrZXknLFxue2tleVNoYXBlPXVuZGVmaW5lZCx2YWx1ZVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzbWFwPW5ldyBNYXAoKTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbmFzc2VydFBhdHRlcm4oa2V5U2hhcGUpO1xuIH1cbmlmKHZhbHVlU2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybih2YWx1ZVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtWT2tUb1NldD0oX2tleSx2YWx1ZSk9Pntcbi8vXG4vL1xuaGFyZGVuKHZhbHVlKTtcblxuYXNzZXJ0UGFzc2FibGUodmFsdWUpO1xuaWYodmFsdWVTaGFwZSE9PXVuZGVmaW5lZCl7XG5tdXN0TWF0Y2godmFsdWUsdmFsdWVTaGFwZSwnbWFwU3RvcmUgdmFsdWUnKTtcbiB9XG4gfTtcblxuY29uc3QgYXNzZXJ0S1ZPa1RvQWRkPShrZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xuXG5hc3NlcnRTY2FsYXJLZXkoa2V5KTtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ21hcFN0b3JlIGtleScpO1xuIH1cbmFzc2VydEtWT2tUb1NldChrZXksdmFsdWUpO1xuIH07XG5cbnJldHVybiBGYXIoIGBzY2FsYXIgTWFwU3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlTWFwU3RvcmVNZXRob2RzKFxuanNtYXAsXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG51bmRlZmluZWQsXG50YWcpfSk7XG5cblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJNYXBTdG9yZShtYWtlU2NhbGFyTWFwU3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJNYXBTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlTWFwU3RvcmVNZXRob2RzIjpbIm1ha2VNYXBTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhck1hcFN0b3JlIjpbIm1ha2VTY2FsYXJNYXBTdG9yZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABCTH0e/AsAAPwLAAAxAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIiwiLi9zY2FsYXJXZWFrU2V0U3RvcmUuanMiLCIuL3N0b3JlLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsibWFrZVNjYWxhclNldFN0b3JlIiwibWFrZVNldFN0b3JlTWV0aG9kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFyLGZpbHRlckl0ZXJhYmxlLGNvbXBhcmVSYW5rLGFzc2VydFNjYWxhcktleSxtYWtlQ29weVNldCxtYXRjaGVzLG11c3RNYXRjaCxhc3NlcnRQYXR0ZXJuLG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzLG1ha2VDdXJyZW50S2V5c0tpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJmaWx0ZXJJdGVyYWJsZVwiLCBbJGjNj19hID0+IChmaWx0ZXJJdGVyYWJsZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImNvbXBhcmVSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImFzc2VydFNjYWxhcktleVwiLCBbJGjNj19hID0+IChhc3NlcnRTY2FsYXJLZXkgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlTZXRcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlTZXQgPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dXV0sW1wiLi9zY2FsYXJXZWFrU2V0U3RvcmUuanNcIiwgW1tcIm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzXCIsIFskaM2PX2EgPT4gKG1ha2VXZWFrU2V0U3RvcmVNZXRob2RzID0gJGjNj19hKV1dXV0sW1wiLi9zdG9yZS11dGlscy5qc1wiLCBbW1wibWFrZUN1cnJlbnRLZXlzS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VDdXJyZW50S2V5c0tpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVNldFN0b3JlTWV0aG9kcz0oXG5qc3NldCxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlPXVuZGVmaW5lZCxcbmtleU5hbWU9J2tleScpPT5cbntcbmNvbnN0e2Fzc2VydFVwZGF0ZU9uQWRkLGFzc2VydFVwZGF0ZU9uRGVsZXRlLGl0ZXJhYmxlS2V5c309XG5tYWtlQ3VycmVudEtleXNLaXQoXG4oKT0+anNzZXQua2V5cygpLFxuKGspPT5qc3NldC5oYXMoayksXG5jb21wYXJlUmFuayxcbmFzc2VydEtleU9rVG9BZGQsXG5hc3NlcnRLZXlPa1RvRGVsZXRlLFxua2V5TmFtZSk7XG5cblxuLypcblxuXG4gICAqL1xuY29uc3Qga2V5cz0oa2V5UGF0dD11bmRlZmluZWQpPT5cbmtleVBhdHQ9PT11bmRlZmluZWQ/XG5pdGVyYWJsZUtleXM6XG5maWx0ZXJJdGVyYWJsZShpdGVyYWJsZUtleXMsKGspPT5tYXRjaGVzKGssa2V5UGF0dCkpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbi4uLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKFxuanNzZXQsXG5hc3NlcnRVcGRhdGVPbkFkZCxcbmFzc2VydFVwZGF0ZU9uRGVsZXRlLFxua2V5TmFtZSksXG5cblxua2V5cyxcblxudmFsdWVzOmtleXMsXG5cbnNuYXBzaG90OihrZXlQYXR0PXVuZGVmaW5lZCk9Pm1ha2VDb3B5U2V0KGtleXMoa2V5UGF0dCkpLFxuXG5nZXRTaXplOihrZXlQYXR0PXVuZGVmaW5lZCk9Plxua2V5UGF0dD09PXVuZGVmaW5lZD9qc3NldC5zaXplOlsuLi5rZXlzKGtleVBhdHQpXS5sZW5ndGgsXG5cbmNsZWFyOihrZXlQYXR0PXVuZGVmaW5lZCk9PntcbmlmKGtleVBhdHQ9PT11bmRlZmluZWQpe1xuanNzZXQuY2xlYXIoKTtcbiB9XG5mb3IoY29uc3Qga2V5IG9mIGtleXMoa2V5UGF0dCkpe1xuanNzZXQuZGVsZXRlKGtleSk7XG4gfVxuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VTZXRTdG9yZU1ldGhvZHMobWFrZVNldFN0b3JlTWV0aG9kcyk7XG5jb25zdCAgICAgICAgbWFrZVNjYWxhclNldFN0b3JlPShcbnRhZz0na2V5JyxcbntrZXlTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc3NldD1uZXcgU2V0KCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtleU9rVG9BZGQ9KGtleSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5cbmFzc2VydFNjYWxhcktleShrZXkpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnc2V0U3RvcmUga2V5Jyk7XG4gfVxuIH07XG5cbnJldHVybiBGYXIoIGBzY2FsYXIgU2V0U3RvcmUgb2YgJHtxKHRhZyl9YCx7XG4uLi5tYWtlU2V0U3RvcmVNZXRob2RzKGpzc2V0LGFzc2VydEtleU9rVG9BZGQsdW5kZWZpbmVkLHRhZyl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJTZXRTdG9yZShtYWtlU2NhbGFyU2V0U3RvcmUpO1xuaGFyZGVuKG1ha2VTY2FsYXJTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlU2V0U3RvcmVNZXRob2RzIjpbIm1ha2VTZXRTdG9yZU1ldGhvZHMiXSwibWFrZVNjYWxhclNldFN0b3JlIjpbIm1ha2VTY2FsYXJTZXRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADG/C1l3w0AAN8NAAA1AAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJXZWFrTWFwU3RvcmUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSIsIm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsLEZhcixhc3NlcnRQYXNzYWJsZSxwYXNzU3R5bGVPZixnZXRDb3B5TWFwRW50cmllcyxtdXN0TWF0Y2gsYXNzZXJ0UGF0dGVybixpc0NvcHlNYXA7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcImdldENvcHlNYXBFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdldENvcHlNYXBFbnRyaWVzID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGF0dGVyblwiLCBbJGjNj19hID0+IChhc3NlcnRQYXR0ZXJuID0gJGjNj19hKV1dLFtcImlzQ29weU1hcFwiLCBbJGjNj19hID0+IChpc0NvcHlNYXAgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlV2Vha01hcFN0b3JlTWV0aG9kcz0oXG5qc21hcCxcbmFzc2VydEtWT2tUb0FkZCxcbmFzc2VydEtWT2tUb1NldCxcbmFzc2VydEtleU9rVG9EZWxldGU9dW5kZWZpbmVkLFxua2V5TmFtZT0na2V5Jyk9Plxue1xuY29uc3QgYXNzZXJ0S2V5RG9lc05vdEV4aXN0PShrZXkpPT5cbiFqc21hcC5oYXMoa2V5KXx8RmFpbCBgJHtxKGtleU5hbWUpfSBhbHJlYWR5IHJlZ2lzdGVyZWQ6ICR7a2V5fWA7XG5cbmNvbnN0IGFzc2VydEtleUV4aXN0cz0oa2V5KT0+XG5qc21hcC5oYXMoa2V5KXx8RmFpbCBgJHtxKGtleU5hbWUpfSBub3QgZm91bmQ6ICR7a2V5fWA7XG5cbnJldHVybiBoYXJkZW4oe1xuaGFzOihrZXkpPT57XG4vL1xuLy9cbi8vXG5yZXR1cm4ganNtYXAuaGFzKGtleSk7XG4gfSxcbmdldDooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG4vL1xucmV0dXJuICgvKiAgICAgICAgICAgICovanNtYXAuZ2V0KGtleSkpO1xuIH0sXG5cbmluaXQ6KGtleSx2YWx1ZSk9PntcbmFzc2VydEtleURvZXNOb3RFeGlzdChrZXkpO1xuYXNzZXJ0S1ZPa1RvQWRkKGtleSx2YWx1ZSk7XG5qc21hcC5zZXQoa2V5LHZhbHVlKTtcbiB9LFxuc2V0OihrZXksdmFsdWUpPT57XG5hc3NlcnRLZXlFeGlzdHMoa2V5KTtcbmFzc2VydEtWT2tUb1NldChrZXksdmFsdWUpO1xuanNtYXAuc2V0KGtleSx2YWx1ZSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5pZihhc3NlcnRLZXlPa1RvRGVsZXRlIT09dW5kZWZpbmVkKXtcbmFzc2VydEtleU9rVG9EZWxldGUoa2V5KTtcbiB9XG5qc21hcC5kZWxldGUoa2V5KTtcbiB9LFxuXG5hZGRBbGw6KGVudHJpZXMpPT57XG5pZih0eXBlb2YgZW50cmllc1tTeW1ib2wuaXRlcmF0b3JdIT09J2Z1bmN0aW9uJyl7XG5pZihPYmplY3QuaXNGcm96ZW4oZW50cmllcykmJmlzQ29weU1hcChlbnRyaWVzKSl7XG4vL1xuZW50cmllcz1nZXRDb3B5TWFwRW50cmllcyhlbnRyaWVzKTtcbiB9ZWxzZXtcbkZhaWwgYHByb3ZpZGVkIGRhdGEgc291cmNlIGlzIG5vdCBpdGVyYWJsZTogJHtlbnRyaWVzfWA7XG4gfVxuIH1cbmZvcihjb25zdFtrZXksdmFsdWVdb2YvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovZW50cmllcyl7XG4vL1xuYXNzZXJ0S1ZPa1RvQWRkKGtleSx2YWx1ZSk7XG5qc21hcC5zZXQoa2V5LHZhbHVlKTtcbiB9XG4gfX0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKG1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKTtcbmNvbnN0ICAgICAgICBtYWtlU2NhbGFyV2Vha01hcFN0b3JlPShcbnRhZz0na2V5Jyxcbntsb25nTGl2ZWQ9dHJ1ZSxrZXlTaGFwZT11bmRlZmluZWQsdmFsdWVTaGFwZT11bmRlZmluZWR9PXt9KT0+XG57XG5jb25zdCBqc21hcD1uZXcobG9uZ0xpdmVkP1dlYWtNYXA6TWFwKSgpO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xuYXNzZXJ0UGF0dGVybihrZXlTaGFwZSk7XG4gfVxuaWYodmFsdWVTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKHZhbHVlU2hhcGUpO1xuIH1cblxuY29uc3QgYXNzZXJ0S1ZPa1RvU2V0PShfa2V5LHZhbHVlKT0+e1xuLy9cbi8vXG5oYXJkZW4odmFsdWUpO1xuXG5hc3NlcnRQYXNzYWJsZSh2YWx1ZSk7XG5pZih2YWx1ZVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaCh2YWx1ZSx2YWx1ZVNoYXBlLCd3ZWFrTWFwU3RvcmUgdmFsdWUnKTtcbiB9XG4gfTtcblxuY29uc3QgYXNzZXJ0S1ZPa1RvQWRkPShrZXksdmFsdWUpPT57XG4vL1xuLy9cbmhhcmRlbihrZXkpO1xucGFzc1N0eWxlT2Yoa2V5KT09PSdyZW1vdGFibGUnfHxcbkZhaWwgYE9ubHkgcmVtb3RhYmxlcyBjYW4gYmUga2V5cyBvZiBzY2FsYXIgV2Vha01hcFN0b3JlczogJHtrZXl9YDtcbmlmKGtleVNoYXBlIT09dW5kZWZpbmVkKXtcbm11c3RNYXRjaChrZXksa2V5U2hhcGUsJ3dlYWtNYXBTdG9yZSBrZXknKTtcbiB9XG5hc3NlcnRLVk9rVG9TZXQoa2V5LHZhbHVlKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFdlYWtNYXBTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VXZWFrTWFwU3RvcmVNZXRob2RzKFxuanNtYXAsXG5hc3NlcnRLVk9rVG9BZGQsXG5hc3NlcnRLVk9rVG9TZXQsXG51bmRlZmluZWQsXG50YWcpfSk7XG5cblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUobWFrZVNjYWxhcldlYWtNYXBTdG9yZSk7XG5oYXJkZW4obWFrZVNjYWxhcldlYWtNYXBTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlV2Vha01hcFN0b3JlTWV0aG9kcyI6WyJtYWtlV2Vha01hcFN0b3JlTWV0aG9kcyJdLCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlIjpbIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAhi++xKIKAACiCgAANQAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyV2Vha1NldFN0b3JlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9wYXR0ZXJucyJdLCJleHBvcnRzIjpbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiLCJtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHEsRmFpbCxGYXIscGFzc1N0eWxlT2YsZ2V0Q29weVNldEtleXMsbXVzdE1hdGNoLGFzc2VydFBhdHRlcm4saXNDb3B5U2V0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3BhdHRlcm5zXCIsIFtbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjNj19hID0+IChnZXRDb3B5U2V0S2V5cyA9ICRozY9fYSldXSxbXCJtdXN0TWF0Y2hcIiwgWyRozY9fYSA9PiAobXVzdE1hdGNoID0gJGjNj19hKV1dLFtcImFzc2VydFBhdHRlcm5cIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGF0dGVybiA9ICRozY9fYSldXSxbXCJpc0NvcHlTZXRcIiwgWyRozY9fYSA9PiAoaXNDb3B5U2V0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtTZXRTdG9yZU1ldGhvZHM9KFxuanNzZXQsXG5hc3NlcnRLZXlPa1RvQWRkLFxuYXNzZXJ0S2V5T2tUb0RlbGV0ZT11bmRlZmluZWQsXG5rZXlOYW1lPSdrZXknKT0+XG57XG5jb25zdCBhc3NlcnRLZXlFeGlzdHM9KGtleSk9PlxuanNzZXQuaGFzKGtleSl8fEZhaWwgYCR7cShrZXlOYW1lKX0gbm90IGZvdW5kOiAke2tleX1gO1xuXG5yZXR1cm4gaGFyZGVuKHtcbmhhczooa2V5KT0+e1xuLy9cbi8vXG4vL1xucmV0dXJuIGpzc2V0LmhhcyhrZXkpO1xuIH0sXG5cbmFkZDooa2V5KT0+e1xuYXNzZXJ0S2V5T2tUb0FkZChrZXkpO1xuanNzZXQuYWRkKGtleSk7XG4gfSxcbmRlbGV0ZTooa2V5KT0+e1xuYXNzZXJ0S2V5RXhpc3RzKGtleSk7XG5pZihhc3NlcnRLZXlPa1RvRGVsZXRlIT09dW5kZWZpbmVkKXtcbmFzc2VydEtleU9rVG9EZWxldGUoa2V5KTtcbiB9XG5qc3NldC5kZWxldGUoa2V5KTtcbiB9LFxuXG5hZGRBbGw6KGtleXMpPT57XG5pZih0eXBlb2Yga2V5c1tTeW1ib2wuaXRlcmF0b3JdIT09J2Z1bmN0aW9uJyl7XG5pZihPYmplY3QuaXNGcm96ZW4oa2V5cykmJmlzQ29weVNldChrZXlzKSl7XG4vL1xua2V5cz1nZXRDb3B5U2V0S2V5cyhrZXlzKTtcbiB9ZWxzZXtcbkZhaWwgYHByb3ZpZGVkIGRhdGEgc291cmNlIGlzIG5vdCBpdGVyYWJsZTogJHtrZXlzfWA7XG4gfVxuIH1cbmZvcihjb25zdCBrZXkgb2YvKiAgICAgICAgICAgICAgICAgICAgICAqL2tleXMpe1xuYXNzZXJ0S2V5T2tUb0FkZChrZXkpO1xuanNzZXQuYWRkKGtleSk7XG4gfVxuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UubWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMobWFrZVdlYWtTZXRTdG9yZU1ldGhvZHMpO1xuY29uc3QgICAgICAgIG1ha2VTY2FsYXJXZWFrU2V0U3RvcmU9KFxudGFnPSdrZXknLFxue2xvbmdMaXZlZD10cnVlLGtleVNoYXBlPXVuZGVmaW5lZH09e30pPT5cbntcbmNvbnN0IGpzc2V0PW5ldyhsb25nTGl2ZWQ/V2Vha1NldDpTZXQpKCk7XG5pZihrZXlTaGFwZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnRQYXR0ZXJuKGtleVNoYXBlKTtcbiB9XG5cbmNvbnN0IGFzc2VydEtleU9rVG9BZGQ9KGtleSk9Pntcbi8vXG4vL1xuaGFyZGVuKGtleSk7XG5wYXNzU3R5bGVPZihrZXkpPT09J3JlbW90YWJsZSd8fFxuRmFpbCBgT25seSByZW1vdGFibGVzIGNhbiBiZSBrZXlzIG9mIHNjYWxhciBXZWFrU3RvcmVzOiAke2tleX1gO1xuaWYoa2V5U2hhcGUhPT11bmRlZmluZWQpe1xubXVzdE1hdGNoKGtleSxrZXlTaGFwZSwnd2Vha1NldFN0b3JlIGtleScpO1xuIH1cbiB9O1xuXG5yZXR1cm4gRmFyKCBgc2NhbGFyIFdlYWtTZXRTdG9yZSBvZiAke3EodGFnKX1gLHtcbi4uLm1ha2VXZWFrU2V0U3RvcmVNZXRob2RzKGpzc2V0LGFzc2VydEtleU9rVG9BZGQsdW5kZWZpbmVkLHRhZyl9KTtcblxuIH07JGjNj19vbmNlLm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUobWFrZVNjYWxhcldlYWtTZXRTdG9yZSk7XG5oYXJkZW4obWFrZVNjYWxhcldlYWtTZXRTdG9yZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyI6WyJtYWtlV2Vha1NldFN0b3JlTWV0aG9kcyJdLCJtYWtlU2NhbGFyV2Vha1NldFN0b3JlIjpbIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAxQKMM9oOAADaDgAALgAAAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc3RvcmUtdXRpbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL3BhdHRlcm5zIl0sImV4cG9ydHMiOlsiYXBwZW5kVG9TdG9yZWRBcnJheSIsImlzQ29weU1hcCIsImlzQ29weVNldCIsIm1ha2VBdG9taWNQcm92aWRlciIsIm1ha2VDdXJyZW50S2V5c0tpdCIsInByb3ZpZGVMYXp5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLEZhcixNLG1hdGNoZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcGF0dGVybnNcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYXRjaGVzXCIsIFskaM2PX2EgPT4gKG1hdGNoZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuICovXG5cbi8vXG4vL1xuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldD0ocyk9Pm1hdGNoZXMocyxNLnNldCgpKTtcblxuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmlzQ29weVNldChpc0NvcHlTZXQpO1xuY29uc3QgICAgICAgIGlzQ29weU1hcD0obSk9Pm1hdGNoZXMobSxNLm1hcCgpKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLmlzQ29weU1hcChpc0NvcHlNYXApO1xuY29uc3QgICAgICAgIG1ha2VDdXJyZW50S2V5c0tpdD0oXG5nZXRSYXdLZXlzLFxuY2hlY2tIYXMsXG5jb21wYXJlLFxuYXNzZXJ0T2tUb0FkZCxcbmFzc2VydE9rVG9EZWxldGU9dW5kZWZpbmVkLFxua2V5TmFtZT0na2V5Jyk9Plxue1xubGV0IHVwZGF0ZUNvdW50PTA7XG5sZXQgc29ydGVkS2V5c01lbW87XG5cbmNvbnN0IGFzc2VydFVwZGF0ZU9uQWRkPShrLHY9dW5kZWZpbmVkKT0+e1xuYXNzZXJ0T2tUb0FkZChrLHYpO1xudXBkYXRlQ291bnQrPTE7XG5zb3J0ZWRLZXlzTWVtbz11bmRlZmluZWQ7XG4gfTtcblxuY29uc3QgYXNzZXJ0VXBkYXRlT25EZWxldGU9KGspPT5hc3NlcnRPa1RvRGVsZXRlJiZhc3NlcnRPa1RvRGVsZXRlKGspO1xuXG5jb25zdCBnZXRTb3J0ZWRLZXlzPSgpPT57XG5pZihzb3J0ZWRLZXlzTWVtbz09PXVuZGVmaW5lZCl7XG5zb3J0ZWRLZXlzTWVtbz1oYXJkZW4oWy4uLmdldFJhd0tleXMoKV0uc29ydChjb21wYXJlKSk7XG4gfVxucmV0dXJuIHNvcnRlZEtleXNNZW1vO1xuIH07XG5cbmNvbnN0IGl0ZXJhYmxlS2V5cz1GYXIoJ0l0ZXJhYmxlIG9mIGtleXMnLHtcbltTeW1ib2wuaXRlcmF0b3JdOigpPT57XG5jb25zdCBnZW5lcmF0aW9uPXVwZGF0ZUNvdW50O1xuZ2V0U29ydGVkS2V5cygpO1xuY29uc3QgbGVuPXNvcnRlZEtleXNNZW1vLmxlbmd0aDtcbmxldCBpPTA7XG5yZXR1cm4gRmFyKCdJdGVyYXRvciBvZiBrZXlzJyx7XG5uZXh0OigpPT57XG5nZW5lcmF0aW9uPT09dXBkYXRlQ291bnR8fEZhaWwgYFN0b3JlICR7cShrZXlOYW1lKX0gY3Vyc29yIHN0YWxlYDtcbi8vXG4vL1xuZm9yKDs7KXtcbmlmKGk8bGVuKXtcbmNvbnN0IHZhbHVlPXNvcnRlZEtleXNNZW1vW2ldO1xuaSs9MTtcbmlmKGNoZWNrSGFzKHZhbHVlKSl7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfVxuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOnVuZGVmaW5lZH0pO1xuIH1cbiB9XG4gfX0pO1xuXG4gfX0pO1xuXG5cbnJldHVybiBoYXJkZW4oe1xuYXNzZXJ0VXBkYXRlT25BZGQsXG5hc3NlcnRVcGRhdGVPbkRlbGV0ZSxcbml0ZXJhYmxlS2V5c30pO1xuXG4gfTskaM2PX29uY2UubWFrZUN1cnJlbnRLZXlzS2l0KG1ha2VDdXJyZW50S2V5c0tpdCk7XG5oYXJkZW4obWFrZUN1cnJlbnRLZXlzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJvdmlkZUxhenk9KG1hcFN0b3JlLGtleSxtYWtlVmFsdWUpPT57XG5pZighbWFwU3RvcmUuaGFzKGtleSkpe1xubWFwU3RvcmUuaW5pdChrZXksbWFrZVZhbHVlKGtleSkpO1xuIH1cbnJldHVybiBtYXBTdG9yZS5nZXQoa2V5KTtcbiB9OyRozY9fb25jZS5wcm92aWRlTGF6eShwcm92aWRlTGF6eSk7XG5oYXJkZW4ocHJvdmlkZUxhenkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQXRvbWljUHJvdmlkZXI9KHN0b3JlKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwZW5kaW5nPW5ldyBNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUFzeW5jPShrZXksbWFrZVZhbHVlLGZpbmlzaFZhbHVlKT0+e1xuaWYoc3RvcmUuaGFzKGtleSkpe1xucmV0dXJuIFByb21pc2UucmVzb2x2ZShzdG9yZS5nZXQoa2V5KSk7XG4gfVxuaWYoIXBlbmRpbmcuaGFzKGtleSkpe1xuY29uc3QgdmFsUD1tYWtlVmFsdWUoa2V5KS5cbnRoZW4oKHYpPT57XG5zdG9yZS5pbml0KGtleSx2KTtcbnJldHVybiB2O1xuIH0pLlxudGhlbigodik9PntcbmlmKGZpbmlzaFZhbHVlKXtcbnJldHVybiBmaW5pc2hWYWx1ZShrZXksdikudGhlbigoKT0+dik7XG4gfVxucmV0dXJuIHY7XG4gfSkuXG5maW5hbGx5KCgpPT57XG5wZW5kaW5nLmRlbGV0ZShrZXkpO1xuIH0pO1xucGVuZGluZy5zZXQoa2V5LHZhbFApO1xuIH1cbmNvbnN0IHZhbFA9cGVuZGluZy5nZXQoa2V5KTtcbmFzc2VydCh2YWxQKTtcbnJldHVybiB2YWxQO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe3Byb3ZpZGVBc3luY30pO1xuIH07JGjNj19vbmNlLm1ha2VBdG9taWNQcm92aWRlcihtYWtlQXRvbWljUHJvdmlkZXIpO1xuaGFyZGVuKG1ha2VBdG9taWNQcm92aWRlcik7XG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXBwZW5kVG9TdG9yZWRBcnJheT0obWFwU3RvcmUsa2V5LGl0ZW0pPT57XG5pZihtYXBTdG9yZS5oYXMoa2V5KSl7XG5jb25zdCBleHRhbnQ9bWFwU3RvcmUuZ2V0KGtleSk7XG5tYXBTdG9yZS5zZXQoa2V5LGhhcmRlbihbLi4uZXh0YW50LGl0ZW1dKSk7XG4gfWVsc2V7XG5tYXBTdG9yZS5pbml0KGtleSxoYXJkZW4oW2l0ZW1dKSk7XG4gfVxuIH07JGjNj19vbmNlLmFwcGVuZFRvU3RvcmVkQXJyYXkoYXBwZW5kVG9TdG9yZWRBcnJheSk7XG5oYXJkZW4oYXBwZW5kVG9TdG9yZWRBcnJheSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc0NvcHlTZXQiOlsiaXNDb3B5U2V0Il0sImlzQ29weU1hcCI6WyJpc0NvcHlNYXAiXSwibWFrZUN1cnJlbnRLZXlzS2l0IjpbIm1ha2VDdXJyZW50S2V5c0tpdCJdLCJwcm92aWRlTGF6eSI6WyJwcm92aWRlTGF6eSJdLCJtYWtlQXRvbWljUHJvdmlkZXIiOlsibWFrZUF0b21pY1Byb3ZpZGVyIl0sImFwcGVuZFRvU3RvcmVkQXJyYXkiOlsiYXBwZW5kVG9TdG9yZWRBcnJheSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAFREsmeQEAAHkBAAAhAAAAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAG8blIzPFgAAzxYAACgAAABAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvZXhvLXV0aWxzLmpzeyJpbXBvcnRzIjpbIkBhZ29yaWMvc3RvcmUiLCIuL3ZhdC1kYXRhLWJpbmRpbmdzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lRHVyYWJsZUV4b0NsYXNzIiwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiaWdub3JlQ29udGV4dCIsIm1ha2VFeG9VdGlscyIsInByZXBhcmVFeG8iLCJwcmVwYXJlRXhvQ2xhc3MiLCJwcmVwYXJlRXhvQ2xhc3NLaXQiLCJwcmVwYXJlS2luZCIsInByZXBhcmVLaW5kTXVsdGkiLCJwcmVwYXJlU2luZ2xldG9uIiwicHJvdmlkZUtpbmRIYW5kbGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBpbml0RW1wdHkscHJvdmlkZSxnbG9iYWxWYXREYXRhOyRozY9faW1wb3J0cyhbW1wiQGFnb3JpYy9zdG9yZVwiLCBbW1wiaW5pdEVtcHR5XCIsIFskaM2PX2EgPT4gKGluaXRFbXB0eSA9ICRozY9fYSldXV1dLFtcIi4vdmF0LWRhdGEtYmluZGluZ3MuanNcIiwgW1tcInByb3ZpZGVcIiwgWyRozY9fYSA9PiAocHJvdmlkZSA9ICRozY9fYSldXSxbXCJWYXREYXRhXCIsIFskaM2PX2EgPT4gKGdsb2JhbFZhdERhdGEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuLy9cbi8qXG5cbiAqL1xuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlnbm9yZUNvbnRleHQ9XG4oZm4pPT5cbihfY29udGV4dCwuLi5hcmdzKT0+XG5mbiguLi5hcmdzKTskaM2PX29uY2UuaWdub3JlQ29udGV4dChpZ25vcmVDb250ZXh0KTtcbmhhcmRlbihpZ25vcmVDb250ZXh0KTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZUV4b1V0aWxzPShWYXREYXRhKT0+e1xuY29uc3R7XG5kZWZpbmVLaW5kLFxuZGVmaW5lS2luZE11bHRpLFxuZGVmaW5lRHVyYWJsZUtpbmQsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpLFxubWFrZUtpbmRIYW5kbGV9PVxuVmF0RGF0YTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVLaW5kSGFuZGxlPShiYWdnYWdlLGtpbmROYW1lKT0+XG5wcm92aWRlKGJhZ2dhZ2UsIGAke2tpbmROYW1lfV9raW5kSGFuZGxlYCwoKT0+bWFrZUtpbmRIYW5kbGUoa2luZE5hbWUpKTtcbmhhcmRlbihwcm92aWRlS2luZEhhbmRsZSk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVLaW5kPShcbmJhZ2dhZ2UsXG5raW5kTmFtZSxcbmluaXQsXG5iZWhhdmlvcixcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVLaW5kKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVLaW5kKTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgcHJlcGFyZUtpbmRNdWx0aT0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpKFxucHJvdmlkZUtpbmRIYW5kbGUoYmFnZ2FnZSxraW5kTmFtZSksXG5pbml0LFxuYmVoYXZpb3IsXG5vcHRpb25zKTtcblxuaGFyZGVuKHByZXBhcmVLaW5kTXVsdGkpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZVZpcnR1YWxFeG9DbGFzcz0odGFnLGludGVyZmFjZUd1YXJkLGluaXQsbWV0aG9kcyxvcHRpb25zKT0+XG4vL1xuZGVmaW5lS2luZCh0YWcsaW5pdCxtZXRob2RzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmR9KTtcblxuaGFyZGVuKGRlZmluZVZpcnR1YWxFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0PShcbnRhZyxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpPT5cblxuLy9cbmRlZmluZUtpbmRNdWx0aSh0YWcsaW5pdCxmYWNldHMse1xuLi4ub3B0aW9ucyxcbnRoaXNmdWxNZXRob2RzOnRydWUsXG5pbnRlcmZhY2VHdWFyZEtpdH0pO1xuXG5oYXJkZW4oZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWZpbmVEdXJhYmxlRXhvQ2xhc3M9KFxua2luZEhhbmRsZSxcbmludGVyZmFjZUd1YXJkLFxuaW5pdCxcbm1ldGhvZHMsXG5vcHRpb25zKT0+XG5cbi8vXG5kZWZpbmVEdXJhYmxlS2luZChraW5kSGFuZGxlLGluaXQsbWV0aG9kcyx7XG4uLi5vcHRpb25zLFxudGhpc2Z1bE1ldGhvZHM6dHJ1ZSxcbmludGVyZmFjZUd1YXJkfSk7XG5cbmhhcmRlbihkZWZpbmVEdXJhYmxlRXhvQ2xhc3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdD0oXG5raW5kSGFuZGxlLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxuZmFjZXRzLFxub3B0aW9ucyk9PlxuXG4vL1xuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aShraW5kSGFuZGxlLGluaXQsZmFjZXRzLHtcbi4uLm9wdGlvbnMsXG50aGlzZnVsTWV0aG9kczp0cnVlLFxuaW50ZXJmYWNlR3VhcmRLaXR9KTtcblxuaGFyZGVuKGRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcmVwYXJlRXhvQ2xhc3M9KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG5cbmRlZmluZUR1cmFibGVFeG9DbGFzcyhcbnByb3ZpZGVLaW5kSGFuZGxlKGJhZ2dhZ2Usa2luZE5hbWUpLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUV4b0NsYXNzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG9DbGFzc0tpdD0oXG5iYWdnYWdlLFxua2luZE5hbWUsXG5pbnRlcmZhY2VHdWFyZEtpdCxcbmluaXQsXG5mYWNldHMsXG5vcHRpb25zPXVuZGVmaW5lZCk9PlxuXG5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQoXG5wcm92aWRlS2luZEhhbmRsZShiYWdnYWdlLGtpbmROYW1lKSxcbmludGVyZmFjZUd1YXJkS2l0LFxuaW5pdCxcbmZhY2V0cyxcbm9wdGlvbnMpO1xuXG5oYXJkZW4ocHJlcGFyZUV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVFeG89KFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5tZXRob2RzLFxub3B0aW9ucz11bmRlZmluZWQpPT5cbntcbmNvbnN0IG1ha2VTaW5nbGV0b249cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbmtpbmROYW1lLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0RW1wdHksXG5tZXRob2RzLFxub3B0aW9ucyk7XG5cblxucmV0dXJuIHByb3ZpZGUoYmFnZ2FnZSwgYCR7a2luZE5hbWV9X3NpbmdsZXRvbmAsKCk9Pm1ha2VTaW5nbGV0b24oKSk7XG4gfTtcbmhhcmRlbihwcmVwYXJlRXhvKTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVTaW5nbGV0b249KGJhZ2dhZ2Usa2luZE5hbWUsbWV0aG9kcyxvcHRpb25zPXVuZGVmaW5lZCk9PlxucHJlcGFyZUV4byhiYWdnYWdlLGtpbmROYW1lLHVuZGVmaW5lZCxtZXRob2RzLG9wdGlvbnMpO1xuaGFyZGVuKHByZXBhcmVTaW5nbGV0b24pO1xuXG5yZXR1cm4gaGFyZGVuKHtcbmRlZmluZVZpcnR1YWxFeG9DbGFzcyxcbmRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCxcbmRlZmluZUR1cmFibGVFeG9DbGFzcyxcbmRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG9DbGFzcyxcbnByZXBhcmVFeG9DbGFzc0tpdCxcbnByZXBhcmVFeG8sXG5cbnByZXBhcmVTaW5nbGV0b24sXG5wcm92aWRlS2luZEhhbmRsZSxcbnByZXBhcmVLaW5kLFxucHJlcGFyZUtpbmRNdWx0aX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUV4b1V0aWxzKG1ha2VFeG9VdGlscyk7XG5cbmNvbnN0IGdsb2JhbEV4b1V0aWxzPW1ha2VFeG9VdGlscyhnbG9iYWxWYXREYXRhKTtcblxuY29uc3QgICAgICAge1xuZGVmaW5lVmlydHVhbEV4b0NsYXNzLFxuZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0LFxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzLFxuZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0LFxucHJlcGFyZUV4b0NsYXNzLFxucHJlcGFyZUV4b0NsYXNzS2l0LFxucHJlcGFyZUV4byxcbnByZXBhcmVTaW5nbGV0b259PVxuZ2xvYmFsRXhvVXRpbHM7XG5cbi8qXG5cbiAqLyRozY9fb25jZS5kZWZpbmVWaXJ0dWFsRXhvQ2xhc3MoZGVmaW5lVmlydHVhbEV4b0NsYXNzKTskaM2PX29uY2UuZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0KGRlZmluZVZpcnR1YWxFeG9DbGFzc0tpdCk7JGjNj19vbmNlLmRlZmluZUR1cmFibGVFeG9DbGFzcyhkZWZpbmVEdXJhYmxlRXhvQ2xhc3MpOyRozY9fb25jZS5kZWZpbmVEdXJhYmxlRXhvQ2xhc3NLaXQoZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0KTskaM2PX29uY2UucHJlcGFyZUV4b0NsYXNzKHByZXBhcmVFeG9DbGFzcyk7JGjNj19vbmNlLnByZXBhcmVFeG9DbGFzc0tpdChwcmVwYXJlRXhvQ2xhc3NLaXQpOyRozY9fb25jZS5wcmVwYXJlRXhvKHByZXBhcmVFeG8pOyRozY9fb25jZS5wcmVwYXJlU2luZ2xldG9uKHByZXBhcmVTaW5nbGV0b24pO1xuY29uc3QgICAgICAge3Byb3ZpZGVLaW5kSGFuZGxlLHByZXBhcmVLaW5kLHByZXBhcmVLaW5kTXVsdGl9PVxuZ2xvYmFsRXhvVXRpbHM7JGjNj19vbmNlLnByb3ZpZGVLaW5kSGFuZGxlKHByb3ZpZGVLaW5kSGFuZGxlKTskaM2PX29uY2UucHJlcGFyZUtpbmQocHJlcGFyZUtpbmQpOyRozY9fb25jZS5wcmVwYXJlS2luZE11bHRpKHByZXBhcmVLaW5kTXVsdGkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaWdub3JlQ29udGV4dCI6WyJpZ25vcmVDb250ZXh0Il0sIm1ha2VFeG9VdGlscyI6WyJtYWtlRXhvVXRpbHMiXSwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIjpbImRlZmluZVZpcnR1YWxFeG9DbGFzcyJdLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0Il0sImRlZmluZUR1cmFibGVFeG9DbGFzcyI6WyJkZWZpbmVEdXJhYmxlRXhvQ2xhc3MiXSwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IjpbImRlZmluZUR1cmFibGVFeG9DbGFzc0tpdCJdLCJwcmVwYXJlRXhvQ2xhc3MiOlsicHJlcGFyZUV4b0NsYXNzIl0sInByZXBhcmVFeG9DbGFzc0tpdCI6WyJwcmVwYXJlRXhvQ2xhc3NLaXQiXSwicHJlcGFyZUV4byI6WyJwcmVwYXJlRXhvIl0sInByZXBhcmVTaW5nbGV0b24iOlsicHJlcGFyZVNpbmdsZXRvbiJdLCJwcm92aWRlS2luZEhhbmRsZSI6WyJwcm92aWRlS2luZEhhbmRsZSJdLCJwcmVwYXJlS2luZCI6WyJwcmVwYXJlS2luZCJdLCJwcmVwYXJlS2luZE11bHRpIjpbInByZXBhcmVLaW5kTXVsdGkiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA5yjUjNcIAADXCAAAJAAAAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9pbmRleC5qc3siaW1wb3J0cyI6WyJAYWdvcmljL3N0b3JlIiwiLi92YXQtZGF0YS1iaW5kaW5ncy5qcyIsIi4vZXhvLXV0aWxzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzS2l0IiwibWFrZVNjYWxhck1hcFN0b3JlIiwibWFrZVNjYWxhck1hcFN0b3JlIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIiwicHJvdmlkZVByb21pc2VXYXRjaGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIkBhZ29yaWMvc3RvcmVcIiwgW11dLFtcIi4vdmF0LWRhdGEtYmluZGluZ3MuanNcIiwgW11dLFtcIi4vZXhvLXV0aWxzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGFnb3JpYy9zdG9yZSI6W1siTSIsIk0iXSxbIm1ha2VTY2FsYXJNYXBTdG9yZSIsIm1ha2VTY2FsYXJNYXBTdG9yZSJdLFsibWFrZVNjYWxhcldlYWtNYXBTdG9yZSIsIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJTZXRTdG9yZSIsIm1ha2VTY2FsYXJTZXRTdG9yZSJdLFsibWFrZVNjYWxhcldlYWtTZXRTdG9yZSIsIm1ha2VTY2FsYXJXZWFrU2V0U3RvcmUiXV0sIi4vdmF0LWRhdGEtYmluZGluZ3MuanMiOltbIm1ha2VLaW5kSGFuZGxlIiwibWFrZUtpbmRIYW5kbGUiXSxbInByb3ZpZGVQcm9taXNlV2F0Y2hlciIsInByb3ZpZGVQcm9taXNlV2F0Y2hlciJdLFsid2F0Y2hQcm9taXNlIiwid2F0Y2hQcm9taXNlIl0sWyJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiXSxbIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIl0sWyJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiXSxbIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIl0sWyJjYW5CZUR1cmFibGUiLCJjYW5CZUR1cmFibGUiXSxbInBpY2tGYWNldCIsInBpY2tGYWNldCJdLFsicGFydGlhbEFzc2lnbiIsInBhcnRpYWxBc3NpZ24iXSxbInByb3ZpZGUiLCJwcm92aWRlIl0sWyJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVNYXBTdG9yZSJdLFsicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUiLCJwcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSJdLFsicHJvdmlkZUR1cmFibGVTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiXSxbInByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiXSxbImRlZmluZUtpbmQiLCJkZWZpbmVLaW5kIl0sWyJkZWZpbmVLaW5kTXVsdGkiLCJkZWZpbmVLaW5kTXVsdGkiXSxbImRlZmluZUR1cmFibGVLaW5kIiwiZGVmaW5lRHVyYWJsZUtpbmQiXSxbImRlZmluZUR1cmFibGVLaW5kTXVsdGkiLCJkZWZpbmVEdXJhYmxlS2luZE11bHRpIl1dLCIuL2V4by11dGlscy5qcyI6W1siZGVmaW5lVmlydHVhbEV4b0NsYXNzIiwiZGVmaW5lVmlydHVhbEV4b0NsYXNzIl0sWyJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiLCJkZWZpbmVWaXJ0dWFsRXhvQ2xhc3NLaXQiXSxbImRlZmluZUR1cmFibGVFeG9DbGFzcyIsImRlZmluZUR1cmFibGVFeG9DbGFzcyJdLFsiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0IiwiZGVmaW5lRHVyYWJsZUV4b0NsYXNzS2l0Il0sWyJwcmVwYXJlRXhvQ2xhc3MiLCJwcmVwYXJlRXhvQ2xhc3MiXSxbInByZXBhcmVFeG9DbGFzc0tpdCIsInByZXBhcmVFeG9DbGFzc0tpdCJdLFsicHJlcGFyZUV4byIsInByZXBhcmVFeG8iXSxbInByZXBhcmVTaW5nbGV0b24iLCJwcmVwYXJlU2luZ2xldG9uIl0sWyJpZ25vcmVDb250ZXh0IiwiaWdub3JlQ29udGV4dCJdLFsicHJvdmlkZUtpbmRIYW5kbGUiLCJwcm92aWRlS2luZEhhbmRsZSJdLFsicHJlcGFyZUtpbmQiLCJwcmVwYXJlS2luZCJdLFsicHJlcGFyZUtpbmRNdWx0aSIsInByZXBhcmVLaW5kTXVsdGkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAN4ZagPbFgAA2xYAADAAAABAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvdmF0LWRhdGEtYmluZGluZ3MuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9zdG9yZSJdLCJleHBvcnRzIjpbIlZhdERhdGEiLCJjYW5CZUR1cmFibGUiLCJkZWZpbmVEdXJhYmxlS2luZCIsImRlZmluZUR1cmFibGVLaW5kTXVsdGkiLCJkZWZpbmVLaW5kIiwiZGVmaW5lS2luZE11bHRpIiwibWFrZUtpbmRIYW5kbGUiLCJtYWtlU2NhbGFyQmlnTWFwU3RvcmUiLCJtYWtlU2NhbGFyQmlnU2V0U3RvcmUiLCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIiwibWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSIsIm1ha2VTdG9yZVV0aWxzIiwicGFydGlhbEFzc2lnbiIsInBpY2tGYWNldCIsInByb3ZpZGUiLCJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVTZXRTdG9yZSIsInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlIiwicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUiLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiLCJ3YXRjaFByb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHByb3ZpZGVMYXp5OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJwcm92aWRlTGF6eVwiLCBbJGjNj19hID0+IChwcm92aWRlTGF6eSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICovXG5sZXQgVmF0RGF0YUdsb2JhbDtcbmlmKCdWYXREYXRhJ2luIGdsb2JhbFRoaXMpe1xuZ2xvYmFsVGhpcy5WYXREYXRhfHxGYWlsIGBWYXREYXRhIGRlZmluZWQgaW4gZ2xvYmFsIGFzIG51bGwgb3IgdW5kZWZpbmVkYDtcbi8vXG5WYXREYXRhR2xvYmFsPS8qICAgICAgICAgICAgICAqL2dsb2JhbFRoaXMuVmF0RGF0YTtcbiB9ZWxzZXtcbi8vXG4vL1xuLy9cbmNvbnN0IHVuYXZhaWxhYmxlPSgpPT5GYWlsIGBWYXREYXRhIHVuYXZhaWxhYmxlYDtcblZhdERhdGFHbG9iYWw9e1xuZGVmaW5lS2luZDp1bmF2YWlsYWJsZSxcbmRlZmluZUtpbmRNdWx0aTp1bmF2YWlsYWJsZSxcbmRlZmluZUR1cmFibGVLaW5kOnVuYXZhaWxhYmxlLFxuZGVmaW5lRHVyYWJsZUtpbmRNdWx0aTp1bmF2YWlsYWJsZSxcbm1ha2VLaW5kSGFuZGxlOnVuYXZhaWxhYmxlLFxucHJvdmlkZVByb21pc2VXYXRjaGVyOnVuYXZhaWxhYmxlLFxud2F0Y2hQcm9taXNlOnVuYXZhaWxhYmxlLFxubWFrZVNjYWxhckJpZ01hcFN0b3JlOnVuYXZhaWxhYmxlLFxubWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZTp1bmF2YWlsYWJsZSxcbm1ha2VTY2FsYXJCaWdTZXRTdG9yZTp1bmF2YWlsYWJsZSxcbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmU6dW5hdmFpbGFibGUsXG5jYW5CZUR1cmFibGU6dW5hdmFpbGFibGV9O1xuXG4gfVxuXG5jb25zdCBWYXREYXRhRXhwb3J0PVZhdERhdGFHbG9iYWw7JGjNj19vbmNlLlZhdERhdGFFeHBvcnQoVmF0RGF0YUV4cG9ydCk7XG5cblxuLypcblxuICovXG5jb25zdCAgICAgICB7XG5kZWZpbmVLaW5kLFxuZGVmaW5lS2luZE11bHRpLFxuZGVmaW5lRHVyYWJsZUtpbmQsXG5kZWZpbmVEdXJhYmxlS2luZE11bHRpfT1cblZhdERhdGFHbG9iYWw7JGjNj19vbmNlLmRlZmluZUtpbmQoZGVmaW5lS2luZCk7JGjNj19vbmNlLmRlZmluZUtpbmRNdWx0aShkZWZpbmVLaW5kTXVsdGkpOyRozY9fb25jZS5kZWZpbmVEdXJhYmxlS2luZChkZWZpbmVEdXJhYmxlS2luZCk7JGjNj19vbmNlLmRlZmluZUR1cmFibGVLaW5kTXVsdGkoZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSk7XG5cbmNvbnN0ICAgICAgIHtcbm1ha2VLaW5kSGFuZGxlLFxucHJvdmlkZVByb21pc2VXYXRjaGVyLFxud2F0Y2hQcm9taXNlLFxubWFrZVNjYWxhckJpZ01hcFN0b3JlLFxubWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZSxcbm1ha2VTY2FsYXJCaWdTZXRTdG9yZSxcbm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUsXG5jYW5CZUR1cmFibGV9PVxuVmF0RGF0YUdsb2JhbDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLm1ha2VLaW5kSGFuZGxlKG1ha2VLaW5kSGFuZGxlKTskaM2PX29uY2UucHJvdmlkZVByb21pc2VXYXRjaGVyKHByb3ZpZGVQcm9taXNlV2F0Y2hlcik7JGjNj19vbmNlLndhdGNoUHJvbWlzZSh3YXRjaFByb21pc2UpOyRozY9fb25jZS5tYWtlU2NhbGFyQmlnTWFwU3RvcmUobWFrZVNjYWxhckJpZ01hcFN0b3JlKTskaM2PX29uY2UubWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZShtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlKTskaM2PX29uY2UubWFrZVNjYWxhckJpZ1NldFN0b3JlKG1ha2VTY2FsYXJCaWdTZXRTdG9yZSk7JGjNj19vbmNlLm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUobWFrZVNjYWxhckJpZ1dlYWtTZXRTdG9yZSk7JGjNj19vbmNlLmNhbkJlRHVyYWJsZShjYW5CZUR1cmFibGUpO1xuY29uc3QgICAgICAgIHBpY2tGYWNldD1cbihtYWtlcixmYWNldE5hbWUpPT5cbiguLi5hcmdzKT0+XG5tYWtlciguLi5hcmdzKVtmYWNldE5hbWVdOyRozY9fb25jZS5waWNrRmFjZXQocGlja0ZhY2V0KTtcbmhhcmRlbihwaWNrRmFjZXQpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcGFydGlhbEFzc2lnbj0odGFyZ2V0LHNvdXJjZSk9Pntcbk9iamVjdC5hc3NpZ24odGFyZ2V0LHNvdXJjZSk7XG4gfTskaM2PX29uY2UucGFydGlhbEFzc2lnbihwYXJ0aWFsQXNzaWduKTtcbmhhcmRlbihwYXJ0aWFsQXNzaWduKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBwcm92aWRlPVxuLy9cbi8qXG5cblxuXG5cblxuICAgKi9wcm92aWRlTGF6eTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UucHJvdmlkZShwcm92aWRlKTtcbmNvbnN0ICAgICAgICBtYWtlU3RvcmVVdGlscz0oVmF0RGF0YSk9PntcbmNvbnN0e1xuLy9cbm1ha2VTY2FsYXJCaWdNYXBTdG9yZSxcbi8vXG5tYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlLFxuLy9cbm1ha2VTY2FsYXJCaWdTZXRTdG9yZSxcbi8vXG5tYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlfT1cblZhdERhdGE7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVNYXBTdG9yZT0oYmFnZ2FnZSxuYW1lLG9wdGlvbnM9e30pPT5cbnByb3ZpZGUoYmFnZ2FnZSxuYW1lLCgpPT5cbm1ha2VTY2FsYXJCaWdNYXBTdG9yZShuYW1lLHtkdXJhYmxlOnRydWUsLi4ub3B0aW9uc30pKTtcblxuaGFyZGVuKHByb3ZpZGVEdXJhYmxlTWFwU3RvcmUpO1xuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlPShiYWdnYWdlLG5hbWUsb3B0aW9ucz17fSk9PlxucHJvdmlkZShiYWdnYWdlLG5hbWUsKCk9PlxubWFrZVNjYWxhckJpZ1dlYWtNYXBTdG9yZShuYW1lLHtkdXJhYmxlOnRydWUsLi4ub3B0aW9uc30pKTtcblxuaGFyZGVuKHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBwcm92aWRlRHVyYWJsZVNldFN0b3JlPShiYWdnYWdlLG5hbWUsb3B0aW9ucz17fSk9PlxucHJvdmlkZShiYWdnYWdlLG5hbWUsKCk9PlxubWFrZVNjYWxhckJpZ1NldFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVTZXRTdG9yZSk7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgcHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmU9KGJhZ2dhZ2UsbmFtZSxvcHRpb25zPXt9KT0+XG5wcm92aWRlKGJhZ2dhZ2UsbmFtZSwoKT0+XG5tYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlKG5hbWUse2R1cmFibGU6dHJ1ZSwuLi5vcHRpb25zfSkpO1xuXG5oYXJkZW4ocHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbnByb3ZpZGVEdXJhYmxlTWFwU3RvcmUsXG5wcm92aWRlRHVyYWJsZVdlYWtNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlU2V0U3RvcmUsXG5wcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZX0pO1xuXG4gfTskaM2PX29uY2UubWFrZVN0b3JlVXRpbHMobWFrZVN0b3JlVXRpbHMpO1xuXG5jb25zdCBnbG9iYWxTdG9yZVV0aWxzPW1ha2VTdG9yZVV0aWxzKFZhdERhdGFHbG9iYWwpO1xuY29uc3QgICAgICAge1xucHJvdmlkZUR1cmFibGVNYXBTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLFxucHJvdmlkZUR1cmFibGVTZXRTdG9yZSxcbnByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlfT1cbmdsb2JhbFN0b3JlVXRpbHM7JGjNj19vbmNlLnByb3ZpZGVEdXJhYmxlTWFwU3RvcmUocHJvdmlkZUR1cmFibGVNYXBTdG9yZSk7JGjNj19vbmNlLnByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlKTskaM2PX29uY2UucHJvdmlkZUR1cmFibGVTZXRTdG9yZShwcm92aWRlRHVyYWJsZVNldFN0b3JlKTskaM2PX29uY2UucHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUocHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVmF0RGF0YSI6WyJWYXREYXRhRXhwb3J0Il0sImRlZmluZUtpbmQiOlsiZGVmaW5lS2luZCJdLCJkZWZpbmVLaW5kTXVsdGkiOlsiZGVmaW5lS2luZE11bHRpIl0sImRlZmluZUR1cmFibGVLaW5kIjpbImRlZmluZUR1cmFibGVLaW5kIl0sImRlZmluZUR1cmFibGVLaW5kTXVsdGkiOlsiZGVmaW5lRHVyYWJsZUtpbmRNdWx0aSJdLCJtYWtlS2luZEhhbmRsZSI6WyJtYWtlS2luZEhhbmRsZSJdLCJwcm92aWRlUHJvbWlzZVdhdGNoZXIiOlsicHJvdmlkZVByb21pc2VXYXRjaGVyIl0sIndhdGNoUHJvbWlzZSI6WyJ3YXRjaFByb21pc2UiXSwibWFrZVNjYWxhckJpZ01hcFN0b3JlIjpbIm1ha2VTY2FsYXJCaWdNYXBTdG9yZSJdLCJtYWtlU2NhbGFyQmlnV2Vha01hcFN0b3JlIjpbIm1ha2VTY2FsYXJCaWdXZWFrTWFwU3RvcmUiXSwibWFrZVNjYWxhckJpZ1NldFN0b3JlIjpbIm1ha2VTY2FsYXJCaWdTZXRTdG9yZSJdLCJtYWtlU2NhbGFyQmlnV2Vha1NldFN0b3JlIjpbIm1ha2VTY2FsYXJCaWdXZWFrU2V0U3RvcmUiXSwiY2FuQmVEdXJhYmxlIjpbImNhbkJlRHVyYWJsZSJdLCJwaWNrRmFjZXQiOlsicGlja0ZhY2V0Il0sInBhcnRpYWxBc3NpZ24iOlsicGFydGlhbEFzc2lnbiJdLCJwcm92aWRlIjpbInByb3ZpZGUiXSwibWFrZVN0b3JlVXRpbHMiOlsibWFrZVN0b3JlVXRpbHMiXSwicHJvdmlkZUR1cmFibGVNYXBTdG9yZSI6WyJwcm92aWRlRHVyYWJsZU1hcFN0b3JlIl0sInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlIjpbInByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlIl0sInByb3ZpZGVEdXJhYmxlU2V0U3RvcmUiOlsicHJvdmlkZUR1cmFibGVTZXRTdG9yZSJdLCJwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSI6WyJwcm92aWRlRHVyYWJsZVdlYWtTZXRTdG9yZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABzeL2uZREAAGURAAAfAAAAQGFnb3JpYy92YXRzLXYwLjE1LjEvc3JjL2NyYy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiQ1JDIiwiY3JjMSIsImNyYzEwIiwiY3JjMTYiLCJjcmMyNCIsImNyYzMyIiwiY3JjMzJjIiwiY3JjNiIsImNyYzgiLCJtb2RlbHMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cbiAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdCBlbmNvZGVyPW5ldyBUZXh0RW5jb2RlcigpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICovXG5mdW5jdGlvbiBjb252ZXJ0KGRhdGEpe1xuaWYodHlwZW9mIGRhdGE9PT0nbnVtYmVyJyl7XG5jb25zdCBieXRlcz1bXTtcbi8vXG4vL1xud2hpbGUoZGF0YT4wfHxieXRlcy5sZW5ndGg8NCl7XG5ieXRlcy51bnNoaWZ0KGRhdGElMjU2KTtcbmRhdGE9TWF0aC5mbG9vcihkYXRhLzI1Nik7XG4gfVxucmV0dXJuIG5ldyBVaW50OEFycmF5KGJ5dGVzKTtcbiB9ZWxzZSBpZih0eXBlb2YgZGF0YT09PSdzdHJpbmcnKXtcbnJldHVybiBlbmNvZGVyLmVuY29kZShkYXRhKTtcbiB9ZWxzZSBpZihBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkpe1xucmV0dXJuIG5ldyBVaW50OEFycmF5KGRhdGEuYnVmZmVyLGRhdGEuYnl0ZU9mZnNldCxkYXRhLmJ5dGVMZW5ndGgpO1xuIH1lbHNlIGlmKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7XG5yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoZGF0YSk7XG4gfVxudGhyb3cgVHlwZUVycm9yKFxuIGBjcmMgcmVxdWlyZXMgMzIgYml0IG51bWJlciwgYSBzdHJpbmcgb3IgVHlwZWRBcnJheSBmb3IgaW5wdXRgKTtcblxuIH1cblxuLypcblxuXG4gKi9cbmZ1bmN0aW9uIG1pcnJvcihkYXRhLHdpZHRoKXtcbmxldCByZXM9MDtcbmZvcihsZXQgaT0wO2k8d2lkdGg7aSs9MSl7XG5yZXM9cmVzPDwxfGRhdGEmMTtcbmRhdGE+Pj0xO1xuIH1cbnJldHVybiByZXM7XG4gfVxuXG5jbGFzcyAgICAgICAgQ1JDe1xuLypcblxuXG5cblxuXG4gICAqL1xuICAgICAgICAgICBjb25zdHJ1Y3Rvcih3aWR0aCxwb2x5LHhvckluLHhvck91dCxyZWZsZWN0KXtcbnRoaXMud2lkdGg9d2lkdGg7XG50aGlzLnBvbHk9cG9seTtcbnRoaXMueG9ySW49eG9ySW47XG50aGlzLnJlZmxlY3RlZFhvckluPW1pcnJvcih4b3JJbix3aWR0aCk7XG50aGlzLnhvck91dD14b3JPdXQ7XG50aGlzLnJlZmxlY3Q9cmVmbGVjdDtcbnRoaXMubXNiTWFzaz0xPDx0aGlzLndpZHRoLTE7XG50aGlzLm1hc2s9dGhpcy5tc2JNYXNrLTE8PDF8MTtcbnRoaXMuY3JjU2hpZnQ9dGhpcy53aWR0aDw4PzgtdGhpcy53aWR0aDowO1xudGhpcy5zaGlmdGVkWG9ySW49dGhpcy54b3JJbjw8dGhpcy5jcmNTaGlmdDtcblxuY29uc3QgdGFibGU9dGhpcy5nZW5UYWJsZSgpO1xudGhpcy50YWJsZT10YWJsZTtcblxuaWYodGhpcy53aWR0aD09PTgmJiF0aGlzLnhvckluJiYhdGhpcy54b3JPdXQmJiF0aGlzLnJlZmxlY3Qpe1xuLyogICAgICAgICAgICAgICAgICAgICAqL1xudGhpcy5jYWxjdWxhdGU9ZnVuY3Rpb24gY2FsY3VsYXRlKGRhdGEpe1xuY29uc3QgYnVmZmVyPWNvbnZlcnQoZGF0YSk7XG5sZXQgY3JjPTA7XG5mb3IobGV0IGk9MDtpPGJ1ZmZlci5sZW5ndGg7aSs9MSl7XG5jcmM9dGFibGVbY3JjXmJ1ZmZlcltpXV07XG4gfVxucmV0dXJuIGNyYztcbiB9O1xuIH1cbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgIGNhbGN1bGF0ZShkYXRhKXtcbmNvbnN0IGJ1ZmZlcj1jb252ZXJ0KGRhdGEpO1xubGV0IGNyYztcbmNvbnN0e3RhYmxlLHdpZHRoLGNyY1NoaWZ0LG1hc2t9PXRoaXM7XG5pZih0aGlzLnJlZmxlY3Qpe1xuY3JjPXRoaXMucmVmbGVjdGVkWG9ySW47XG5mb3IobGV0IGk9MDtpPGJ1ZmZlci5sZW5ndGg7aSs9MSl7XG5jb25zdCBieXRlPWJ1ZmZlcltpXTtcbmNyYz0odGFibGVbKGNyY15ieXRlKSYweGZmXV5jcmM+Pj44KSZtYXNrO1xuIH1cbiB9ZWxzZXtcbmNyYz10aGlzLnNoaWZ0ZWRYb3JJbjtcbmZvcihsZXQgaT0wO2k8YnVmZmVyLmxlbmd0aDtpKz0xKXtcbmNyYz1cbnRhYmxlWyhjcmM+PndpZHRoLTgrY3JjU2hpZnReYnVmZmVyW2ldKSYweGZmXTw8XG5jcmNTaGlmdF5cbmNyYzw8OC1jcmNTaGlmdCZtYXNrPDxjcmNTaGlmdDtcbiB9XG5jcmM+Pj1jcmNTaGlmdDtcbiB9XG5jcmNePXRoaXMueG9yT3V0O1xucmV0dXJuIGNyYz4+PjA7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlTm9UYWJsZShkYXRhKXtcbmNvbnN0IGJ1ZmZlcj1jb252ZXJ0KGRhdGEpO1xubGV0IGNyYz10aGlzLnhvckluO1xuZm9yKGxldCBpPTA7aTxidWZmZXIubGVuZ3RoO2krPTEpe1xubGV0IG9jdGV0PWJ1ZmZlcltpXTtcbmlmKHRoaXMucmVmbGVjdClvY3RldD1taXJyb3Iob2N0ZXQsOCk7XG5mb3IobGV0IGo9MDtqPDg7ais9MSl7XG5sZXQgdG9wYml0PWNyYyZ0aGlzLm1zYk1hc2s7XG5pZihvY3RldCYweDgwPj5qKXRvcGJpdF49dGhpcy5tc2JNYXNrO1xuY3JjPDw9MTtcbmlmKHRvcGJpdCljcmNePXRoaXMucG9seTtcbiB9XG5jcmMmPXRoaXMubWFzaztcbiB9XG5pZih0aGlzLnJlZmxlY3QpY3JjPW1pcnJvcihjcmMsdGhpcy53aWR0aCk7XG5jcmNePXRoaXMueG9yT3V0O1xucmV0dXJuIGNyYz4+PjA7XG4gfVxuXG4gICAgICAgIGdlblRhYmxlKCl7XG5jb25zdCB0YWJsZUxlbmd0aD0yNTY7XG5jb25zdCB0YWJsZT1bXTtcbmZvcihsZXQgaT0wO2k8dGFibGVMZW5ndGg7aSs9MSl7XG5sZXQgcmVnPWk7XG5pZih0aGlzLnJlZmxlY3QpcmVnPW1pcnJvcihyZWcsOCk7XG5yZWc8PD10aGlzLndpZHRoLTgrdGhpcy5jcmNTaGlmdDtcbmZvcihsZXQgaj0wO2o8ODtqKz0xKXtcbmlmKChyZWcmdGhpcy5tc2JNYXNrPDx0aGlzLmNyY1NoaWZ0KSE9PTApe1xucmVnPDw9MTtcbnJlZ149dGhpcy5wb2x5PDx0aGlzLmNyY1NoaWZ0O1xuIH1lbHNle1xucmVnPDw9MTtcbiB9XG4gfVxuaWYodGhpcy5yZWZsZWN0KVxucmVnPW1pcnJvcihyZWc+PnRoaXMuY3JjU2hpZnQsdGhpcy53aWR0aCk8PHRoaXMuY3JjU2hpZnQ7XG5yZWc9cmVnPj50aGlzLmNyY1NoaWZ0JnRoaXMubWFzaztcbnRhYmxlW2ldPXJlZz4+PjA7XG4gfVxucmV0dXJuIG5ldyBJbnQzMkFycmF5KHRhYmxlKTtcbiB9fSRozY9fb25jZS4gQ1JDKENSQyk7XG5cblxuY29uc3QgICAgICAgIGNyYzE9bmV3IENSQygxLDB4MDEsMHgwMCwweDAwLGZhbHNlKTskaM2PX29uY2UuY3JjMShjcmMxKTtcbmNvbnN0ICAgICAgICBjcmM2PW5ldyBDUkMoNiwweDJmLDB4MDAsMHgwMCxmYWxzZSk7JGjNj19vbmNlLmNyYzYoY3JjNik7XG5jb25zdCAgICAgICAgY3JjOD1uZXcgQ1JDKDgsMHgwNywweDAwLDB4MDAsZmFsc2UpOyRozY9fb25jZS5jcmM4KGNyYzgpO1xuY29uc3QgICAgICAgIGNyYzEwPW5ldyBDUkMoMTAsMHgyMzMsMHgwMDAwLDB4MDAwMCxmYWxzZSk7JGjNj19vbmNlLmNyYzEwKGNyYzEwKTtcbmNvbnN0ICAgICAgICBjcmMxNj1uZXcgQ1JDKDE2LDB4ODAwNSwweDAwMDAsMHgwMDAwLHRydWUpOyRozY9fb25jZS5jcmMxNihjcmMxNik7XG5jb25zdCAgICAgICAgY3JjMjQ9bmV3IENSQygyNCwweDg2NGNmYiwweGI3MDRjZSwweDAwMDAwMCxmYWxzZSk7JGjNj19vbmNlLmNyYzI0KGNyYzI0KTtcbmNvbnN0ICAgICAgICBjcmMzMj1uZXcgQ1JDKDMyLDB4MDRjMTFkYjcsMHhmZmZmZmZmZiwweGZmZmZmZmZmLHRydWUpOyRozY9fb25jZS5jcmMzMihjcmMzMik7XG5jb25zdCAgICAgICAgY3JjMzJjPW5ldyBDUkMoMzIsMHgxZWRjNmY0MSwweGZmZmZmZmZmLDB4ZmZmZmZmZmYsdHJ1ZSk7JGjNj19vbmNlLmNyYzMyYyhjcmMzMmMpO1xuXG5jb25zdCAgICAgICAgbW9kZWxzPXtjcmMxLGNyYzYsY3JjOCxjcmMxMCxjcmMxNixjcmMyNCxjcmMzMixjcmMzMmN9OyRozY9fb25jZS5tb2RlbHMobW9kZWxzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkNSQyI6WyJDUkMiXSwiY3JjMSI6WyJjcmMxIl0sImNyYzYiOlsiY3JjNiJdLCJjcmM4IjpbImNyYzgiXSwiY3JjMTAiOlsiY3JjMTAiXSwiY3JjMTYiOlsiY3JjMTYiXSwiY3JjMjQiOlsiY3JjMjQiXSwiY3JjMzIiOlsiY3JjMzIiXSwiY3JjMzJjIjpbImNyYzMyYyJdLCJtb2RlbHMiOlsibW9kZWxzIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJILW25jIQAAYyEAACUAAABAYWdvcmljL3ZhdHMtdjAuMTUuMS9zcmMvbGliLWJvYXJkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBhZ29yaWMvbm90aWZpZXIiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy96b2Uvc3JjL2NvbnRyYWN0U3VwcG9ydC9yZWNvcmRlci5qcyIsIkBlbmRvL2ZhciIsIkBlbmRvL21hcnNoYWwiLCIuL2NyYy5qcyJdLCJleHBvcnRzIjpbIkRFRkFVTFRfQ1JDX0RJR0lUUyIsIkRFRkFVTFRfUFJFRklYIiwicHJlcGFyZUJvYXJkS2l0IiwicHJlcGFyZVJlY29yZGVyRmFjdG9yeSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydCxGYWlsLHEscHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0LE0sbWFrZVNjYWxhckJpZ01hcFN0b3JlLHByZXBhcmVFeG9DbGFzc0tpdCxkZWZpbmVSZWNvcmRlcktpdCxwcmVwYXJlUmVjb3JkZXIsRSxGYXIsaXNSZW1vdGFibGUsbWFrZU1hcnNoYWwsY3JjNjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaM2PX2EgPT4gKGFzc2VydCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wicHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0XCIsIFskaM2PX2EgPT4gKHByZXBhcmVEdXJhYmxlUHVibGlzaEtpdCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ01hcFN0b3JlID0gJGjNj19hKV1dLFtcInByZXBhcmVFeG9DbGFzc0tpdFwiLCBbJGjNj19hID0+IChwcmVwYXJlRXhvQ2xhc3NLaXQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3pvZS9zcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzXCIsIFtbXCJkZWZpbmVSZWNvcmRlcktpdFwiLCBbJGjNj19hID0+IChkZWZpbmVSZWNvcmRlcktpdCA9ICRozY9fYSldXSxbXCJwcmVwYXJlUmVjb3JkZXJcIiwgWyRozY9fYSA9PiAocHJlcGFyZVJlY29yZGVyID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZmFyXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcImlzUmVtb3RhYmxlXCIsIFskaM2PX2EgPT4gKGlzUmVtb3RhYmxlID0gJGjNj19hKV1dLFtcIm1ha2VNYXJzaGFsXCIsIFskaM2PX2EgPT4gKG1ha2VNYXJzaGFsID0gJGjNj19hKV1dXV0sW1wiLi9jcmMuanNcIiwgW1tcImNyYzZcIiwgWyRozY9fYSA9PiAoY3JjNiA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuICovXG5cbmNvbnN0ICAgICAgICBERUZBVUxUX0NSQ19ESUdJVFM9MjskaM2PX29uY2UuREVGQVVMVF9DUkNfRElHSVRTKERFRkFVTFRfQ1JDX0RJR0lUUyk7XG5jb25zdCAgICAgICAgREVGQVVMVF9QUkVGSVg9J2JvYXJkMCc7XG5cbi8vXG4vL1xuJGjNj19vbmNlLkRFRkFVTFRfUFJFRklYKERFRkFVTFRfUFJFRklYKTtjb25zdCBDYXBEYXRhU2hhcGU9e2JvZHk6TS5zdHJpbmcoKSxzbG90czpNLmFycmF5KCl9O1xuY29uc3QgTWFyc2hhbEk9TS5pbnRlcmZhY2UoJ01hcnNoYWxsZXInLHtcbnRvQ2FwRGF0YTpNLmNhbGwoTS5hbnkoKSkucmV0dXJucyhDYXBEYXRhU2hhcGUpLFxuc2VyaWFsaXplOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKENhcERhdGFTaGFwZSksXG5mcm9tQ2FwRGF0YTpNLmNhbGwoQ2FwRGF0YVNoYXBlKS5yZXR1cm5zKE0uYW55KCkpLFxudW5zZXJpYWxpemU6TS5jYWxsKENhcERhdGFTaGFwZSkucmV0dXJucyhNLmFueSgpKX0pO1xuXG5cbmNvbnN0IElkU2hhcGU9TS5zdHJpbmcoKTtcbmNvbnN0IFZhbFNoYXBlPU0uc2NhbGFyKCk7XG5jb25zdCBCb2FyZEtpdElLaXQ9e1xuYm9hcmQ6TS5pbnRlcmZhY2UoJ0JvYXJkJyx7XG5oYXM6TS5jYWxsKFZhbFNoYXBlKS5yZXR1cm5zKE0uYm9vbGVhbigpKSxcbmdldFZhbHVlOk0uY2FsbChJZFNoYXBlKS5yZXR1cm5zKFZhbFNoYXBlKSxcbmxvb2t1cDpNLmNhbGwoKS5yZXN0KE0uYXJyYXlPZihJZFNoYXBlKSkucmV0dXJucyhNLnByb21pc2UoKSksXG5nZXRJZDpNLmNhbGwoVmFsU2hhcGUpLnJldHVybnMoSWRTaGFwZSksXG5pZHM6TS5jYWxsKCkucmV0dXJucyhNLmFycmF5T2YoSWRTaGFwZSkpLFxuZ2V0UHVibGlzaGluZ01hcnNoYWxsZXI6TS5jYWxsKCkucmV0dXJucyhNLnJlbW90YWJsZSgpKSxcbmdldFJlYWRvbmx5TWFyc2hhbGxlcjpNLmNhbGwoKS5yZXR1cm5zKE0ucmVtb3RhYmxlKCkpfSksXG5cbnB1Ymxpc2hpbmdNYXJzaGFsbGVyOk1hcnNoYWxJLFxucmVhZG9ubHlNYXJzaGFsbGVyOk1hcnNoYWxJfTtcblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGNhbGNDcmM9KGRhdGEsY3JjRGlnaXRzKT0+e1xuLy9cbi8vXG5jb25zdCBjcmM9Y3JjNi5jYWxjdWxhdGUoZGF0YSkrMTtcbmNvbnN0IGNyY1N0cj1jcmMudG9TdHJpbmcoKS5wYWRTdGFydChjcmNEaWdpdHMsJzAnKTtcbmFzc2VydChjcmNTdHIubGVuZ3RoPD1jcmNEaWdpdHMsIGBDUkMgdG9vIGJpZyBmb3IgaXRzIGJyaXRjaGVzICR7Y3JjU3RyfWApO1xucmV0dXJuIGNyY1N0cjtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuXG4vL1xuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBpbml0RHVyYWJsZUJvYXJkU3RhdGU9KFxuaW5pdFNlcXVlbmNlPTAsXG57cHJlZml4PURFRkFVTFRfUFJFRklYLGNyY0RpZ2l0cz1ERUZBVUxUX0NSQ19ESUdJVFN9PXt9KT0+XG57XG5jb25zdCBpbW11dGFibGU9e3ByZWZpeCxjcmNEaWdpdHN9O1xuXG5jb25zdCBsYXN0U2VxdWVuY2U9QmlnSW50KGluaXRTZXF1ZW5jZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpZFRvVmFsPW1ha2VTY2FsYXJCaWdNYXBTdG9yZSgnaWRUb1ZhbCcse1xuZHVyYWJsZTp0cnVlLFxua2V5U2hhcGU6SWRTaGFwZSxcbnZhbHVlU2hhcGU6VmFsU2hhcGV9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdmFsVG9JZD1tYWtlU2NhbGFyQmlnTWFwU3RvcmUoJ3ZhbFRvSWQnLHtcbmR1cmFibGU6dHJ1ZSxcbmtleVNoYXBlOlZhbFNoYXBlLFxudmFsdWVTaGFwZTpJZFNoYXBlfSk7XG5cblxuY29uc3QgbXV0YWJsZT17bGFzdFNlcXVlbmNlLGlkVG9WYWwsdmFsVG9JZH07XG5cbnJldHVybntcbi4uLmltbXV0YWJsZSxcbi4uLm11dGFibGV9O1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuICovXG5jb25zdCBnZXRJZD0odmFsdWUsc3RhdGUpPT57XG5jb25zdHtpZFRvVmFsLHZhbFRvSWQscHJlZml4LGNyY0RpZ2l0c309c3RhdGU7XG5pZighaXNSZW1vdGFibGUodmFsdWUpKXtcbkZhaWwgYEJvYXJkIGNhbm5vdCBjcmVhdGUgaWQgZm9yIG5vbi1yZW1vdGFibGVgO1xuIH1cblxuaWYodmFsVG9JZC5oYXModmFsdWUpKXtcbnJldHVybiB2YWxUb0lkLmdldCh2YWx1ZSk7XG4gfVxuXG5zdGF0ZS5sYXN0U2VxdWVuY2UrPTFuO1xuY29uc3Qgc2VxPXN0YXRlLmxhc3RTZXF1ZW5jZTtcblxuY29uc3QgY3JjSW5wdXQ9IGAke3ByZWZpeH0ke3NlcX1gO1xuY29uc3QgY3JjPWNhbGNDcmMoY3JjSW5wdXQsY3JjRGlnaXRzKTtcblxuY29uc3QgaWQ9IGAke3ByZWZpeH0ke2NyY30ke3NlcX1gO1xuXG52YWxUb0lkLmluaXQodmFsdWUsaWQpO1xuaWRUb1ZhbC5pbml0KGlkLHZhbHVlKTtcbnJldHVybiBpZDtcbiB9O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgZ2V0VmFsdWU9KGlkLHtwcmVmaXgsY3JjRGlnaXRzLGlkVG9WYWx9KT0+e1xuaWQuc3RhcnRzV2l0aChwcmVmaXgpfHxGYWlsIGBpZCBtdXN0IHN0YXJ0IHdpdGggJHtxKHByZWZpeCl9OiAke2lkfWA7XG5jb25zdCBkaWdpdHM9aWQuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4vL1xuY29uc3QgRElHSVRTX1JFR0VYUD1uZXcgUmVnRXhwKCBgXlswLTldeyR7Y3JjRGlnaXRzKzF9LH0kYCk7XG5ESUdJVFNfUkVHRVhQLnRlc3QoZGlnaXRzKXx8XG5GYWlsIGBpZCBtdXN0IGVuZCBpbiBhdCBsZWFzdCAke3EoY3JjRGlnaXRzKzEpfSBkaWdpdHM6ICR7aWR9YDtcblxuaWYoaWRUb1ZhbC5oYXMoaWQpKXtcbnJldHVybiBpZFRvVmFsLmdldChpZCk7XG4gfVxuXG5jb25zdCBhbGxlZ2VkQ3JjPWRpZ2l0cy5zbGljZSgwLGNyY0RpZ2l0cyk7XG5cbmNvbnN0IHNlcT1kaWdpdHMuc2xpY2UoY3JjRGlnaXRzKTtcbmNvbnN0IGNyY0lucHV0PSBgJHtwcmVmaXh9JHtzZXF9YDtcbmNvbnN0IGNyYz1jYWxjQ3JjKGNyY0lucHV0LGNyY0RpZ2l0cyk7XG5cbmFsbGVnZWRDcmM9PT1jcmN8fEZhaWwgYGlkIGlzIHByb2JhYmx5IGEgdHlwbywgY2Fubm90IHZlcmlmeSBDUkM6ICR7aWR9YDtcbi8vXG50aHJvdyBGYWlsIGBib2FyZCBkb2VzIG5vdCBoYXZlIGlkOiAke2lkfWA7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1ha2VTbG90VG9WYWw9KHN0YXRlKT0+e1xuY29uc3QgaWZhY2VBbGxlZ2VkUHJlZml4PSdBbGxlZ2VkOiAnO1xuY29uc3QgaWZhY2VJbmFjY2Vzc2libGVQcmVmaXg9J1NFVkVSRUQ6ICc7XG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3Qgc2xvdFRvVmFsPShzbG90LGlmYWNlKT0+e1xuaWYoc2xvdCE9PW51bGwpe1xucmV0dXJuIGdldFZhbHVlKHNsb3Qsc3RhdGUpO1xuIH1cblxuLy9cbmlmKHR5cGVvZiBpZmFjZT09PSdzdHJpbmcnJiZpZmFjZS5zdGFydHNXaXRoKGlmYWNlQWxsZWdlZFByZWZpeCkpe1xuaWZhY2U9aWZhY2Uuc2xpY2UoaWZhY2VBbGxlZ2VkUHJlZml4Lmxlbmd0aCk7XG4gfVxucmV0dXJuIEZhciggYCR7aWZhY2VJbmFjY2Vzc2libGVQcmVmaXh9JHtpZmFjZX1gLHt9KTtcbiB9O1xucmV0dXJuIHNsb3RUb1ZhbDtcbiB9O1xuXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0IG1ha2VSZWFkb25seU1hcnNoYWxsZXI9KHN0YXRlKT0+e1xuY29uc3R7dmFsVG9JZH09c3RhdGU7XG5jb25zdCBzbG90VG9WYWw9bWFrZVNsb3RUb1ZhbChzdGF0ZSk7XG5jb25zdCB2YWxUb1Nsb3Q9KHZhbCk9PntcbmlmKCF2YWxUb0lkLmhhcyh2YWwpKXtcbi8vXG5yZXR1cm4gbnVsbDtcbiB9XG5cbi8vXG5yZXR1cm4gdmFsVG9JZC5nZXQodmFsKTtcbiB9O1xucmV0dXJuIG1ha2VNYXJzaGFsKHZhbFRvU2xvdCxzbG90VG9WYWwse1xuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pO1xuXG4gfTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1ha2VQdWJsaXNoaW5nTWFyc2hhbGxlcj0oc3RhdGUpPT57XG5jb25zdCBzbG90VG9WYWw9bWFrZVNsb3RUb1ZhbChzdGF0ZSk7XG4vL1xuY29uc3QgdmFsVG9TbG90PSh2YWwpPT5nZXRJZCh2YWwsc3RhdGUpO1xucmV0dXJuIG1ha2VNYXJzaGFsKHZhbFRvU2xvdCxzbG90VG9WYWwse1xuc2VyaWFsaXplQm9keUZvcm1hdDonc21hbGxjYXBzJ30pO1xuXG4gfTtcbi8vXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlQm9hcmRLaXQ9KGJhZ2dhZ2UpPT57XG5yZXR1cm4gcHJlcGFyZUV4b0NsYXNzS2l0KFxuYmFnZ2FnZSxcbidCb2FyZCcsXG5Cb2FyZEtpdElLaXQsXG5pbml0RHVyYWJsZUJvYXJkU3RhdGUsXG57XG5ib2FyZDp7XG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5nZXRJZCh2YWx1ZSl7XG5yZXR1cm4gZ2V0SWQodmFsdWUsdGhpcy5zdGF0ZSk7XG4gfSxcbi8qXG5cblxuICAgICAgICAgKi9cbmdldFZhbHVlKGlkKXtcbnJldHVybiBnZXRWYWx1ZShpZCx0aGlzLnN0YXRlKTtcbiB9LFxuLypcblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xuICAgICAgYXN5bmMgbG9va3VwKC4uLnBhdGgpe1xuY29uc3R7XG5mYWNldHM6e2JvYXJkfX09XG50aGlzO1xuaWYocGF0aC5sZW5ndGg9PT0wKXtcbnJldHVybiBib2FyZDtcbiB9XG5jb25zdFtmaXJzdCwuLi5yZXN0XT1wYXRoO1xuLyogICAgICAgICAgICAgICovXG5jb25zdCBmaXJzdFZhbHVlPWJvYXJkLmdldFZhbHVlKC8qICAgICAgICAgICAgICAgICAgKi9maXJzdCk7XG5pZihyZXN0Lmxlbmd0aD09PTApe1xucmV0dXJuIGZpcnN0VmFsdWU7XG4gfVxucmV0dXJuIEUoZmlyc3RWYWx1ZSkubG9va3VwKC4uLnJlc3QpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuaGFzKHZhbCl7XG5jb25zdHtzdGF0ZX09dGhpcztcbnJldHVybiBzdGF0ZS52YWxUb0lkLmhhcyh2YWwpO1xuIH0sXG5pZHMoKXtcbmNvbnN0e3N0YXRlfT10aGlzO1xucmV0dXJuIGhhcmRlbihbLi4uc3RhdGUuaWRUb1ZhbC5rZXlzKCldKTtcbiB9LFxuLypcblxuXG4gICAgICAgICAqL1xuZ2V0UHVibGlzaGluZ01hcnNoYWxsZXIoKXtcbnJldHVybiB0aGlzLmZhY2V0cy5wdWJsaXNoaW5nTWFyc2hhbGxlcjtcbiB9LFxuLypcblxuXG5cblxuXG5cbiAgICAgICAgICovXG5nZXRSZWFkb25seU1hcnNoYWxsZXIoKXtcbnJldHVybiB0aGlzLmZhY2V0cy5yZWFkb25seU1hcnNoYWxsZXI7XG4gfX0sXG5cbnJlYWRvbmx5TWFyc2hhbGxlcjp7XG50b0NhcERhdGEodmFsKXtcbmNvbnN0IHJlYWRvbmx5PW1ha2VSZWFkb25seU1hcnNoYWxsZXIodGhpcy5zdGF0ZSk7XG5yZXR1cm4gcmVhZG9ubHkudG9DYXBEYXRhKHZhbCk7XG4gfSxcbmZyb21DYXBEYXRhKGRhdGEpe1xuY29uc3QgcmVhZG9ubHk9bWFrZVJlYWRvbmx5TWFyc2hhbGxlcih0aGlzLnN0YXRlKTtcbnJldHVybiByZWFkb25seS5mcm9tQ2FwRGF0YShkYXRhKTtcbiB9LFxuc2VyaWFsaXplKGRhdGEpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnJlYWRvbmx5TWFyc2hhbGxlci50b0NhcERhdGEoZGF0YSk7XG4gfSxcbnVuc2VyaWFsaXplKGRhdGEpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnJlYWRvbmx5TWFyc2hhbGxlci5mcm9tQ2FwRGF0YShkYXRhKTtcbiB9fSxcblxucHVibGlzaGluZ01hcnNoYWxsZXI6e1xudG9DYXBEYXRhKHZhbCl7XG5jb25zdCBwdWJsaXNoaW5nPW1ha2VQdWJsaXNoaW5nTWFyc2hhbGxlcih0aGlzLnN0YXRlKTtcbnJldHVybiBwdWJsaXNoaW5nLnRvQ2FwRGF0YSh2YWwpO1xuIH0sXG5mcm9tQ2FwRGF0YShkYXRhKXtcbmNvbnN0IHB1Ymxpc2hpbmc9bWFrZVB1Ymxpc2hpbmdNYXJzaGFsbGVyKHRoaXMuc3RhdGUpO1xucmV0dXJuIHB1Ymxpc2hpbmcuZnJvbUNhcERhdGEoZGF0YSk7XG4gfSxcbnNlcmlhbGl6ZShkYXRhKXtcbnJldHVybiB0aGlzLmZhY2V0cy5wdWJsaXNoaW5nTWFyc2hhbGxlci50b0NhcERhdGEoZGF0YSk7XG4gfSxcbnVuc2VyaWFsaXplKGRhdGEpe1xucmV0dXJuIHRoaXMuZmFjZXRzLnB1Ymxpc2hpbmdNYXJzaGFsbGVyLmZyb21DYXBEYXRhKGRhdGEpO1xuIH19fSk7XG5cblxuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovJGjNj19vbmNlLnByZXBhcmVCb2FyZEtpdChwcmVwYXJlQm9hcmRLaXQpO1xuY29uc3QgICAgICAgIHByZXBhcmVSZWNvcmRlckZhY3Rvcnk9KHpvbmUpPT57XG5jb25zdCBiYWdnYWdlPXpvbmUubWFwU3RvcmUoIGBSZWNvcmRlciBCYWdnYWdlYCk7XG5jb25zdCBtYWtlRHVyYWJsZVB1Ymxpc2hLaXQ9cHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0KFxuYmFnZ2FnZSxcbidEdXJhYmxlUHVibGlzaEtpdCcpO1xuXG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmVSZWNvcmRlcktpdD0obGFiZWwsbWFyc2hhbGxlcik9PntcbmNvbnN0IG15Wm9uZT16b25lLnN1YlpvbmUobGFiZWwpO1xuY29uc3QgbWFrZVJlY29yZGVyPXByZXBhcmVSZWNvcmRlcihcbm15Wm9uZS5tYXBTdG9yZSggYFJlY29yZGVyIEJhZ2dhZ2U6ICR7bGFiZWx9YCksXG5tYXJzaGFsbGVyKTtcblxucmV0dXJuIGRlZmluZVJlY29yZGVyS2l0KHttYWtlUmVjb3JkZXIsbWFrZUR1cmFibGVQdWJsaXNoS2l0fSk7XG4gfTtcblxucmV0dXJuIHByZXBhcmVSZWNvcmRlcktpdDtcbiB9OyRozY9fb25jZS5wcmVwYXJlUmVjb3JkZXJGYWN0b3J5KHByZXBhcmVSZWNvcmRlckZhY3RvcnkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiREVGQVVMVF9DUkNfRElHSVRTIjpbIkRFRkFVTFRfQ1JDX0RJR0lUUyJdLCJERUZBVUxUX1BSRUZJWCI6WyJERUZBVUxUX1BSRUZJWCJdLCJwcmVwYXJlQm9hcmRLaXQiOlsicHJlcGFyZUJvYXJkS2l0Il0sInByZXBhcmVSZWNvcmRlckZhY3RvcnkiOlsicHJlcGFyZVJlY29yZGVyRmFjdG9yeSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAfT6jC5QsAAOULAAAtAAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9hY3Rpb25zLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2V2ZW50dWFsLXNlbmQiXSwiZXhwb3J0cyI6WyJtYWtlUGF5bWVudEFjdGlvbnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlUHJvbWlzZUtpdCxGYXIsRTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbmNvbnN0ICAgICAgICBtYWtlUGF5bWVudEFjdGlvbnM9KHtcbmdldEJyYW5kUmVjb3JkLFxuZ2V0UHVyc2VCeVBldG5hbWUsXG5nZXRSZWNvcmQsXG51cGRhdGVSZWNvcmQsXG5nZXRBdXRvRGVwb3NpdFB1cnNlLFxuZ2V0SXNzdWVyQm9hcmRJZH0pPT5cbntcbmNvbnN0IGRlcG9zaXRlZFBLPW1ha2VQcm9taXNlS2l0KCk7XG5cbnJldHVybiBGYXIoJ3BheW1lbnQgYWN0aW9ucycse1xuZGVwb3NpdDphc3luYyhwdXJzZU9yUGV0bmFtZT11bmRlZmluZWQpPT57XG5jb25zdCBvbGRQYXltZW50UmVjb3JkPWdldFJlY29yZCgpO1xuY29uc3R7YnJhbmQscGF5bWVudH09b2xkUGF5bWVudFJlY29yZDtcbmFzc2VydChwYXltZW50KTtcblxuLyogICAgICAgICAgICAgICAgKi9cbmxldCBwdXJzZTtcbmlmKHB1cnNlT3JQZXRuYW1lPT09dW5kZWZpbmVkKXtcbmNvbnN0IGF1dG9EZXBvc2l0UHVyc2U9Z2V0QXV0b0RlcG9zaXRQdXJzZShicmFuZCk7XG5pZighYXV0b0RlcG9zaXRQdXJzZSl7XG4vL1xucmV0dXJuIGRlcG9zaXRlZFBLLnByb21pc2U7XG4gfVxuLy9cbnB1cnNlPWdldEF1dG9EZXBvc2l0UHVyc2UoYnJhbmQpO1xuIH1lbHNlIGlmKFxuQXJyYXkuaXNBcnJheShwdXJzZU9yUGV0bmFtZSl8fFxudHlwZW9mIHB1cnNlT3JQZXRuYW1lPT09J3N0cmluZycpXG57XG5wdXJzZT1nZXRQdXJzZUJ5UGV0bmFtZShwdXJzZU9yUGV0bmFtZSk7XG4gfWVsc2V7XG5wdXJzZT1wdXJzZU9yUGV0bmFtZTtcbiB9XG5jb25zdCBicmFuZFJlY29yZD1nZXRCcmFuZFJlY29yZChicmFuZCk7XG51cGRhdGVSZWNvcmQoey4uLm9sZFBheW1lbnRSZWNvcmQsc3RhdHVzOidwZW5kaW5nJ30sYnJhbmRSZWNvcmQpO1xuLy9cbkUocHVyc2UpLlxuZGVwb3NpdChwYXltZW50KS5cbnRoZW4oXG4oZGVwb3NpdGVkQW1vdW50KT0+e1xudXBkYXRlUmVjb3JkKFxue1xuLi4uZ2V0UmVjb3JkKCksXG4vL1xucGF5bWVudDp1bmRlZmluZWQsXG5zdGF0dXM6J2RlcG9zaXRlZCcsXG5kZXBvc2l0ZWRBbW91bnR9LFxuXG5icmFuZFJlY29yZCk7XG5cbmRlcG9zaXRlZFBLLnJlc29sdmUoZGVwb3NpdGVkQW1vdW50KTtcbiB9LFxuKGUpPT57XG5jb25zb2xlLmVycm9yKFxuJ0Vycm9yIGRlcG9zaXRpbmcgcGF5bWVudCBpbicsXG5wdXJzZU9yUGV0bmFtZXx8J2RlZmF1bHQgcHVyc2UnLFxuZSk7XG5cbmlmKHB1cnNlT3JQZXRuYW1lPT09dW5kZWZpbmVkKXtcbi8vXG4vL1xudXBkYXRlUmVjb3JkKHtcbi4uLmdldFJlY29yZCgpLFxuc3RhdHVzOnVuZGVmaW5lZH0pO1xuXG5kZXBvc2l0ZWRQSy5yZWplY3QoZSk7XG4gfWVsc2V7XG4vL1xuLy9cbmRlcG9zaXRlZFBLLnJlc29sdmUoZ2V0UmVjb3JkKCkuYWN0aW9ucy5kZXBvc2l0KHVuZGVmaW5lZCkpO1xuIH1cbiB9KTtcblxucmV0dXJuIGRlcG9zaXRlZFBLLnByb21pc2U7XG4gfSxcbnJlZnJlc2g6YXN5bmMoKT0+e1xuY29uc3Qgb2xkUGF5bWVudFJlY29yZD1nZXRSZWNvcmQoKTtcbmNvbnN0e2JyYW5kLGlzc3VlcixwYXltZW50fT1vbGRQYXltZW50UmVjb3JkO1xuY29uc3QgYnJhbmRSZWNvcmQ9Z2V0QnJhbmRSZWNvcmQoYnJhbmQpO1xuaWYoIWJyYW5kUmVjb3JkKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbmlmKCFpc3N1ZXIpe1xudXBkYXRlUmVjb3JkKFxue1xuLi4ub2xkUGF5bWVudFJlY29yZCxcbmlzc3VlckJvYXJkSWQ6Z2V0SXNzdWVyQm9hcmRJZChicmFuZFJlY29yZC5pc3N1ZXIpfSxcblxuYnJhbmRSZWNvcmQpO1xuXG5yZXR1cm4gdHJ1ZTtcbiB9XG5cbmlmKCFwYXltZW50KXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbmNvbnN0IGlzTGl2ZT1hd2FpdCBFKGlzc3VlcikuaXNMaXZlKHBheW1lbnQpO1xuaWYoaXNMaXZlKXtcbnJldHVybiBmYWxzZTtcbiB9XG5cbnVwZGF0ZVJlY29yZCh7XG4uLi5vbGRQYXltZW50UmVjb3JkLFxuLy9cbnBheW1lbnQ6dW5kZWZpbmVkLFxuc3RhdHVzOidleHBpcmVkJ30pO1xuXG5yZXR1cm4gdHJ1ZTtcbiB9LFxuZ2V0QW1vdW50T2Y6YXN5bmMoKT0+e1xuY29uc3Qgb2xkUGF5bWVudFJlY29yZD1nZXRSZWNvcmQoKTtcbmNvbnN0e2lzc3VlcixwYXltZW50fT1vbGRQYXltZW50UmVjb3JkO1xuYXNzZXJ0KGlzc3Vlcik7XG5hc3NlcnQocGF5bWVudCk7XG5cbi8vXG5jb25zdCBsYXN0QW1vdW50PWF3YWl0IEUoaXNzdWVyKS5nZXRBbW91bnRPZihwYXltZW50KTtcblxudXBkYXRlUmVjb3JkKHtcbi4uLm9sZFBheW1lbnRSZWNvcmQsXG5sYXN0QW1vdW50fSk7XG5cbnJldHVybiB0cnVlO1xuIH19KTtcblxuIH07JGjNj19vbmNlLm1ha2VQYXltZW50QWN0aW9ucyhtYWtlUGF5bWVudEFjdGlvbnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVBheW1lbnRBY3Rpb25zIjpbIm1ha2VQYXltZW50QWN0aW9ucyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABTChau1wIAANcCAAA1AAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9iaWdpbnRTdHJpbmdpZnkuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImJpZ2ludFN0cmluZ2lmeSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIGJpZ2ludFN0cmluZ2lmeT0oeCk9PlxuSlNPTi5zdHJpbmdpZnkoeCwoX2tleSx2YWx1ZSk9PntcbmlmKHR5cGVvZiB2YWx1ZSE9PSdiaWdpbnQnKXtcbi8vXG5yZXR1cm4gdmFsdWU7XG4gfVxuaWYodmFsdWU8PUJpZ0ludChOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikpe1xuLy9cbnJldHVybiBOdW1iZXIodmFsdWUpO1xuIH1cbi8vXG4vL1xucmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gfSk7JGjNj19vbmNlLmJpZ2ludFN0cmluZ2lmeShiaWdpbnRTdHJpbmdpZnkpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYmlnaW50U3RyaW5naWZ5IjpbImJpZ2ludFN0cmluZ2lmeSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABZFOv2iQkAAIkJAAAuAAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9kYXRlLW5vdy5qc3siaW1wb3J0cyI6WyJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGFnb3JpYy9ub3RpZmllciIsIkBlbmRvL3Byb21pc2Uta2l0Il0sImV4cG9ydHMiOlsiREVGQVVMVF9USU1FUl9ERVZJQ0VfU0NBTEUiLCJERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCIsIm1ha2VUaW1lckRldmljZURhdGVOb3ciLCJtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsb2JzZXJ2ZU5vdGlmaWVyLG1ha2VQcm9taXNlS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wib2JzZXJ2ZU5vdGlmaWVyXCIsIFskaM2PX2EgPT4gKG9ic2VydmVOb3RpZmllciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5jb25zdCAgICAgICAgREVGQVVMVF9USU1FUl9TRVJWSUNFX1BPTExfSU5URVJWQUw9NjBfMDAwbjskaM2PX29uY2UuREVGQVVMVF9USU1FUl9TRVJWSUNFX1BPTExfSU5URVJWQUwoREVGQVVMVF9USU1FUl9TRVJWSUNFX1BPTExfSU5URVJWQUwpO1xuY29uc3QgICAgICAgIERFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFPTE7XG5cbi8vXG4vL1xuJGjNj19vbmNlLkRFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFKERFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFKTtjb25zdCBtYWtlVGltZXJEZXZpY2VEYXRlTm93PVxuKEQsdGltZXJEZXZpY2UsdGltZXJEZXZpY2VTY2FsZT1ERUZBVUxUX1RJTUVSX0RFVklDRV9TQ0FMRSk9PlxuKCk9PntcbmNvbnN0IHN0YW1wPUQodGltZXJEZXZpY2UpLmdldExhc3RQb2xsZWQoKTtcbmNvbnN0IGxhc3RQb2xsZWRTdGFtcD1wYXJzZUludCggYCR7c3RhbXB9YCwxMCkqdGltZXJEZXZpY2VTY2FsZTtcbnJldHVybiBsYXN0UG9sbGVkU3RhbXA7XG4gfTtcblxuLy9cbi8vXG4kaM2PX29uY2UubWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyhtYWtlVGltZXJEZXZpY2VEYXRlTm93KTtjb25zdCBtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdz0oXG50aW1lclNlcnZpY2UsXG50aW1lclBvbGxJbnRlcnZhbD1ERUZBVUxUX1RJTUVSX1NFUlZJQ0VfUE9MTF9JTlRFUlZBTCk9Plxue1xubGV0IGxhc3RQb2xsZWRTdGFtcD1OYU47XG5jb25zdCBkYXRlTm93PSgpPT5sYXN0UG9sbGVkU3RhbXA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkYXRlTm93UEs9bWFrZVByb21pc2VLaXQoKTtcblxuLy9cbmNvbnN0IG9ic2VydmVUaW1lcj1hc3luYygpPT57XG5jb25zdCBvYnNlcnZlcj17XG51cGRhdGVTdGF0ZShzdGFtcCl7XG5sYXN0UG9sbGVkU3RhbXA9cGFyc2VJbnQoIGAke3N0YW1wfWAsMTApO1xuZGF0ZU5vd1BLLnJlc29sdmUoZGF0ZU5vdyk7XG4gfX07XG5cblxuLy9cbmNvbnN0IHN0YW1wPWF3YWl0IEUodGltZXJTZXJ2aWNlKS5nZXRDdXJyZW50VGltZXN0YW1wKCk7XG5vYnNlcnZlci51cGRhdGVTdGF0ZShzdGFtcCk7XG5cbi8vXG4vL1xuY29uc3QgdGltZXJOb3RpZmllcj1FKHRpbWVyU2VydmljZSkubWFrZU5vdGlmaWVyKDBuLHRpbWVyUG9sbEludGVydmFsKTtcblxuLy9cbmF3YWl0IG9ic2VydmVOb3RpZmllcih0aW1lck5vdGlmaWVyLG9ic2VydmVyKTtcbiB9O1xuXG5vYnNlcnZlVGltZXIoKS5jYXRjaCgoZSk9PmRhdGVOb3dQSy5yZWplY3QoZSkpO1xuXG4vL1xucmV0dXJuIGRhdGVOb3dQSy5wcm9taXNlO1xuIH07JGjNj19vbmNlLm1ha2VUaW1lclNlcnZpY2VEYXRlTm93KG1ha2VUaW1lclNlcnZpY2VEYXRlTm93KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IkRFRkFVTFRfVElNRVJfU0VSVklDRV9QT0xMX0lOVEVSVkFMIjpbIkRFRkFVTFRfVElNRVJfU0VSVklDRV9QT0xMX0lOVEVSVkFMIl0sIkRFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFIjpbIkRFRkFVTFRfVElNRVJfREVWSUNFX1NDQUxFIl0sIm1ha2VUaW1lckRldmljZURhdGVOb3ciOlsibWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyJdLCJtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyI6WyJtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADAr+p1CRMAAAkTAAA6AAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9maW5kT3JNYWtlSW52aXRhdGlvbi5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAZW5kby9ldmVudHVhbC1zZW5kIiwiQGVuZG8vbWFyc2hhbCIsIkBhZ29yaWMvZXJ0cCJdLCJleHBvcnRzIjpbImZpbmRPck1ha2VJbnZpdGF0aW9uIiwibWFrZUlkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEZhaWwscSxFLHBhc3NTdHlsZU9mLEFtb3VudE1hdGg7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL21hcnNoYWxcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5jb25zdCAgICAgICAgbWFrZUlkPShkYXBwT3JpZ2luLHJhd0lkKT0+IGAke2RhcHBPcmlnaW59IyR7cmF3SWR9YDskaM2PX29uY2UubWFrZUlkKG1ha2VJZCk7XG5cbmNvbnN0IGFzc2VydEZpcnN0Q2FwQVNDSUk9KHN0cik9PntcbmFzc2VydC50eXBlb2Yoc3RyLCdzdHJpbmcnKTtcbmNvbnN0IGZpcnN0Q2FwQVNDSUk9L15bQS1aXVthLXpBLVowLTlfJF0qJC87XG5maXJzdENhcEFTQ0lJLnRlc3Qoc3RyKXx8XG5GYWlsIGBUaGUgc3RyaW5nICR7cShcbnN0cilcbiB9IG11c3QgYmUgYW4gYXNjaWkgaWRlbnRpZmllciBzdGFydGluZyB3aXRoIHVwcGVyIGNhc2UuYDtcbnN0ciE9PSdOYU4nJiZzdHIhPT0nSW5maW5pdHknfHxcbkZhaWwgYGtleXdvcmQgJHtxKHN0cil9IG11c3Qgbm90IGJlIGEgbnVtYmVyJ3MgbmFtZWA7XG4gfTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgZmluZEJ5Qm9hcmRJZD1hc3luYyhpbnZpdGF0aW9uUHVyc2VCYWxhbmNlLHtib2FyZCxib2FyZElkfSk9PntcbmFzc2VydC50eXBlb2YoYm9hcmRJZCwnc3RyaW5nJyk7XG5jb25zdCBpbnZpdGF0aW9uSGFuZGxlPWF3YWl0IEUoYm9hcmQpLmdldFZhbHVlKGJvYXJkSWQpO1xuY29uc3QgbWF0Y2g9KGVsZW1lbnQpPT5lbGVtZW50LmhhbmRsZT09PWludml0YXRpb25IYW5kbGU7XG5jb25zdCBtYXRjaGluZ1ZhbHVlPWludml0YXRpb25QdXJzZUJhbGFuY2UudmFsdWUuZmluZChtYXRjaCk7XG5tYXRjaGluZ1ZhbHVlfHxGYWlsIGBDYW5ub3QgZmluZCBpbnZpdGF0aW9uIGNvcnJlc3BvbmRpbmcgdG8gJHtxKGJvYXJkSWQpfWA7XG5cbnJldHVybiBoYXJkZW4oW21hdGNoaW5nVmFsdWVdKTtcbiB9O1xuXG4vL1xuLy9cbi8qXG5cblxuICovXG5jb25zdCBmaW5kQnlLZXlWYWx1ZVBhaXJzPWFzeW5jKGludml0YXRpb25QdXJzZUJhbGFuY2Usa3ZzKT0+e1xuLy9cbi8vXG4vL1xuY29uc3QgbWF0Y2hlcz0oaW52aXRhdGlvbkRldGFpbCk9PlxuT2JqZWN0LmVudHJpZXMoa3ZzKS5ldmVyeShcbihba2V5LHZhbHVlXSk9Pmludml0YXRpb25EZXRhaWxba2V5XT09PXZhbHVlKTtcblxuXG5jb25zdCBtYXRjaGluZ1ZhbHVlPWludml0YXRpb25QdXJzZUJhbGFuY2UudmFsdWUuZmluZChtYXRjaGVzKTtcbm1hdGNoaW5nVmFsdWV8fEZhaWwgYENhbm5vdCBmaW5kIGludml0YXRpb24gY29ycmVzcG9uZGluZyB0byAke3Eoa3ZzKX1gO1xucmV0dXJuIGhhcmRlbihbbWF0Y2hpbmdWYWx1ZV0pO1xuIH07XG5cbmNvbnN0IG1ha2VGaW5kSW52aXRhdGlvbj0oaW52aXRhdGlvblB1cnNlLGludml0YXRpb25CcmFuZCk9PntcbmNvbnN0IGZpbmRJbnZpdGF0aW9uPWFzeW5jKHF1ZXJ5Rm4scXVlcnlQYXJhbXMpPT57XG5jb25zdCBwdXJzZUJhbGFuY2U9YXdhaXQgRShpbnZpdGF0aW9uUHVyc2UpLmdldEN1cnJlbnRBbW91bnQoKTtcbmNvbnN0IHZhbHVlPWF3YWl0IHF1ZXJ5Rm4ocHVyc2VCYWxhbmNlLHF1ZXJ5UGFyYW1zKTtcbmNvbnN0IGludml0YXRpb25BbW91bnQ9QW1vdW50TWF0aC5tYWtlKGludml0YXRpb25CcmFuZCx2YWx1ZSk7XG5jb25zdCBpbnZpdGF0aW9uUD1FKGludml0YXRpb25QdXJzZSkud2l0aGRyYXcoaW52aXRhdGlvbkFtb3VudCk7XG5yZXR1cm4gaW52aXRhdGlvblA7XG4gfTtcbnJldHVybiBmaW5kSW52aXRhdGlvbjtcbiB9O1xuXG5jb25zdCBtYWtlQ29udGludWluZ0ludml0YXRpb249YXN5bmMoXG5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LFxuZGFwcE9yaWdpbixcbntwcmlvck9mZmVySWQ6cmF3UHJpb3JPZmZlcklkLGRlc2NyaXB0aW9ufSk9Plxue1xuYXNzZXJ0Rmlyc3RDYXBBU0NJSShkZXNjcmlwdGlvbik7XG5cbmNvbnN0IHByaW9yT2ZmZXJJZD1tYWtlSWQoZGFwcE9yaWdpbixyYXdQcmlvck9mZmVySWQpO1xuY29uc3Qgb2ZmZXJSZXN1bHQ9YXdhaXQgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQocHJpb3JPZmZlcklkKS5wcm9taXNlO1xuYXNzZXJ0KFxucGFzc1N0eWxlT2Yob2ZmZXJSZXN1bHQpPT09J2NvcHlSZWNvcmQnLFxuIGBvZmZlclJlc3VsdCBtdXN0IGJlIGEgcmVjb3JkIHRvIGhhdmUgYW4gaW52aXRhdGlvbk1ha2VycyBwcm9wZXJ0eWApO1xuXG5hc3NlcnQoXG5vZmZlclJlc3VsdC5pbnZpdGF0aW9uTWFrZXJzLFxuIGBvZmZlclJlc3VsdCBkb2VzIG5vdCBoYXZlIGFuIGludml0YXRpb25NYWtlcnMgcHJvcGVydHlgKTtcblxuXG5jb25zdCBpbnZpdGF0aW9uUD1FKG9mZmVyUmVzdWx0Lmludml0YXRpb25NYWtlcnMpW2Rlc2NyaXB0aW9uXSgpO1xucmV0dXJuIGludml0YXRpb25QO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbnZpdGF0aW9uPWFzeW5jKFxuaW52aXRhdGlvbk1ha2VyLFxuaW5zdGFuY2VIYW5kbGVCb2FyZElkLFxuYm9hcmQsXG56b2UpPT5cbntcbmNvbnN0IGluc3RhbmNlPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5FKGJvYXJkKS5nZXRWYWx1ZShpbnN0YW5jZUhhbmRsZUJvYXJkSWQpO1xuXG5jb25zdCBwdWJsaWNGYWNldD1FKHpvZSkuZ2V0UHVibGljRmFjZXQoaW5zdGFuY2UpO1xuY29uc3R7bWV0aG9kLGFyZ3M9W119PWludml0YXRpb25NYWtlcjtcblxucmV0dXJuIEUocHVibGljRmFjZXQpW21ldGhvZF0oLi4uYXJncyk7XG4gfTtcblxuY29uc3QgICAgICAgIGZpbmRPck1ha2VJbnZpdGF0aW9uPWFzeW5jKFxuaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdCxcbmJvYXJkLFxuem9lLFxuaW52aXRhdGlvblB1cnNlLFxuaW52aXRhdGlvbkJyYW5kLFxub2ZmZXIpPT5cbntcbmlmKG9mZmVyLmludml0YXRpb24pe1xuLy9cbnJldHVybiBvZmZlci5pbnZpdGF0aW9uO1xuIH1cblxuY29uc3QgZmluZEludml0YXRpb249bWFrZUZpbmRJbnZpdGF0aW9uKGludml0YXRpb25QdXJzZSxpbnZpdGF0aW9uQnJhbmQpO1xuXG4vL1xuaWYob2ZmZXIuaW52aXRlSGFuZGxlQm9hcmRJZCl7XG5jb25zdCBxdWVyeVBhcmFtcz17XG5ib2FyZCxcbmJvYXJkSWQ6b2ZmZXIuaW52aXRlSGFuZGxlQm9hcmRJZH07XG5cbnJldHVybiBmaW5kSW52aXRhdGlvbihmaW5kQnlCb2FyZElkLHF1ZXJ5UGFyYW1zKTtcbiB9XG5cbi8vXG5pZihvZmZlci5pbnZpdGF0aW9uSGFuZGxlQm9hcmRJZCl7XG5jb25zdCBxdWVyeVBhcmFtcz17XG5ib2FyZCxcbmJvYXJkSWQ6b2ZmZXIuaW52aXRhdGlvbkhhbmRsZUJvYXJkSWR9O1xuXG5yZXR1cm4gZmluZEludml0YXRpb24oZmluZEJ5Qm9hcmRJZCxxdWVyeVBhcmFtcyk7XG4gfVxuXG5pZihvZmZlci5pbnZpdGF0aW9uTWFrZXIpe1xucmV0dXJuIG1ha2VJbnZpdGF0aW9uKFxub2ZmZXIuaW52aXRhdGlvbk1ha2VyLFxub2ZmZXIuaW5zdGFuY2VIYW5kbGVCb2FyZElkLFxuYm9hcmQsXG56b2UpO1xuXG4gfVxuXG5pZihvZmZlci5pbnZpdGF0aW9uUXVlcnkpe1xucmV0dXJuIGZpbmRJbnZpdGF0aW9uKGZpbmRCeUtleVZhbHVlUGFpcnMsb2ZmZXIuaW52aXRhdGlvblF1ZXJ5KTtcbiB9XG5cbmlmKG9mZmVyLmNvbnRpbnVpbmdJbnZpdGF0aW9uKXtcbmNvbnN0IGRhcHBPcmlnaW49XG5vZmZlci5yZXF1ZXN0Q29udGV4dCYmb2ZmZXIucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbj9cbm9mZmVyLnJlcXVlc3RDb250ZXh0LmRhcHBPcmlnaW46XG4gYHVua25vd25gO1xucmV0dXJuIG1ha2VDb250aW51aW5nSW52aXRhdGlvbihcbmlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQsXG5kYXBwT3JpZ2luLFxub2ZmZXIuY29udGludWluZ0ludml0YXRpb24pO1xuXG4gfVxuXG50aHJvdyBGYWlsIGBubyBpbnZpdGF0aW9uIHdhcyBmb3VuZCBvciBtYWRlIGZvciB0aGlzIG9mZmVyICR7b2ZmZXIuaWR9YDtcbiB9OyRozY9fb25jZS5maW5kT3JNYWtlSW52aXRhdGlvbihmaW5kT3JNYWtlSW52aXRhdGlvbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlSWQiOlsibWFrZUlkIl0sImZpbmRPck1ha2VJbnZpdGF0aW9uIjpbImZpbmRPck1ha2VJbnZpdGF0aW9uIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAFRqpSl6AgAAegIAADQAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2ludGVybmFsLXR5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuICovXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA8ZgIBMsIAADLCAAAMQAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvaXNzdWVyVGFibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBhZ29yaWMvc3RvcmUiLCIuL2ludGVybmFsLXR5cGVzLmpzIl0sImV4cG9ydHMiOlsibWFrZUlzc3VlclRhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0LEUsbWFrZVNjYWxhcldlYWtNYXBTdG9yZTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYXNzZXJ0XCIsIFskaM2PX2EgPT4gKGFzc2VydCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm1ha2VTY2FsYXJXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhcldlYWtNYXBTdG9yZSA9ICRozY9fYSldXV1dLFtcIi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlSXNzdWVyVGFibGU9KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBicmFuZFRvSXNzdWVyUmVjb3JkPW1ha2VTY2FsYXJXZWFrTWFwU3RvcmUoJ2JyYW5kJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3VlclRvSXNzdWVyUmVjb3JkPW1ha2VTY2FsYXJXZWFrTWFwU3RvcmUoJ2lzc3VlcicpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNzdWVyVGFibGU9e1xuaGFzQnlCcmFuZDpicmFuZFRvSXNzdWVyUmVjb3JkLmhhcyxcbmdldEJ5QnJhbmQ6YnJhbmRUb0lzc3VlclJlY29yZC5nZXQsXG5oYXNCeUlzc3Vlcjppc3N1ZXJUb0lzc3VlclJlY29yZC5oYXMsXG5nZXRCeUlzc3Vlcjppc3N1ZXJUb0lzc3VlclJlY29yZC5nZXQsXG4vL1xuLy9cbmluaXRJc3N1ZXI6YXN5bmMoaXNzdWVyUCxhZGRNZXRhPSh4KT0+eCk9PntcbmNvbnN0IGJyYW5kUD1FKGlzc3VlclApLmdldEJyYW5kKCk7XG5jb25zdCBicmFuZElzc3Vlck1hdGNoUD1FKGJyYW5kUCkuaXNNeUlzc3Vlcihpc3N1ZXJQKTtcbmNvbnN0IGRpc3BsYXlJbmZvUD1FKGJyYW5kUCkuZ2V0RGlzcGxheUluZm8oKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0W2lzc3VlcixicmFuZCxicmFuZElzc3Vlck1hdGNoLGRpc3BsYXlJbmZvXT1hd2FpdCBQcm9taXNlLmFsbChbXG5pc3N1ZXJQLFxuYnJhbmRQLFxuYnJhbmRJc3N1ZXJNYXRjaFAsXG5kaXNwbGF5SW5mb1BdKTtcblxuLy9cblxuaWYoaXNzdWVyVG9Jc3N1ZXJSZWNvcmQuaGFzKGlzc3Vlcikpe1xucmV0dXJuIGlzc3VlclRvSXNzdWVyUmVjb3JkLmdldChpc3N1ZXIpO1xuIH1cbmFzc2VydChcbmJyYW5kSXNzdWVyTWF0Y2gsXG4gYGlzc3VlciB3YXMgdXNpbmcgYSBicmFuZCB3aGljaCB3YXMgbm90IGl0cyBvd25gKTtcblxuaXNzdWVyVGFibGUuaW5pdElzc3VlckJ5UmVjb3JkKFxuYWRkTWV0YSh7XG5icmFuZCxcbmlzc3VlcixcbmFzc2V0S2luZDpkaXNwbGF5SW5mby5hc3NldEtpbmQsXG5kaXNwbGF5SW5mb30pKTtcblxuXG5yZXR1cm4gaXNzdWVyVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG4gfSxcbmluaXRJc3N1ZXJCeVJlY29yZDooaXNzdWVyUmVjb3JkKT0+e1xuY29uc3R7YnJhbmQsaXNzdWVyfT1pc3N1ZXJSZWNvcmQ7XG5icmFuZFRvSXNzdWVyUmVjb3JkLmluaXQoYnJhbmQsaXNzdWVyUmVjb3JkKTtcbmlzc3VlclRvSXNzdWVyUmVjb3JkLmluaXQoaXNzdWVyLGlzc3VlclJlY29yZCk7XG4gfX07XG5cblxucmV0dXJuIGlzc3VlclRhYmxlO1xuIH07JGjNj19vbmNlLm1ha2VJc3N1ZXJUYWJsZShtYWtlSXNzdWVyVGFibGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZUlzc3VlclRhYmxlIjpbIm1ha2VJc3N1ZXJUYWJsZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACAbAFkNB4AADQeAAAzAAAAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9saWItZGVoeWRyYXRlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIkBlbmRvL21hcnNoYWwiLCJAYWdvcmljL3N0b3JlIl0sImV4cG9ydHMiOlsiaXNQYXRoIiwibWFrZURlaHlkcmF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQsRmFpbCxxLG1ha2VNYXJzaGFsLG1hcEl0ZXJhYmxlLG1ha2VMZWdhY3lNYXAsbWFrZVNjYWxhck1hcFN0b3JlOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJhc3NlcnRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0ID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXSxbXCJtYXBJdGVyYWJsZVwiLCBbJGjNj19hID0+IChtYXBJdGVyYWJsZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm1ha2VMZWdhY3lNYXBcIiwgWyRozY9fYSA9PiAobWFrZUxlZ2FjeU1hcCA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhck1hcFN0b3JlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1BhdGg9KHgpPT57XG5pZighQXJyYXkuaXNBcnJheSh4KSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxueC5sZW5ndGg+MHx8RmFpbCBgUGF0aCAke3EoeCl9IG11c3Qgbm90IGJlIGVtcHR5YDtcbmZvcihjb25zdCBuYW1lIG9mIHgpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmlzUGF0aChpc1BhdGgpO1xuXG5jb25zdCBJTVBMT0RFX1BSRUZJWD0nSUU6JztcblxuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIG1ha2VEZWh5ZHJhdG9yPShpbml0aWFsVW5uYW1lZENvdW50PTApPT57XG5sZXQgdW5uYW1lZENvdW50PWluaXRpYWxVbm5hbWVkQ291bnQ7XG5cbi8vXG5jb25zdCBwZXRuYW1lS2luZFRvTWFwcGluZz1tYWtlTGVnYWN5TWFwKCdwZXRuYW1lS2luZCcpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2VhcmNoT3JkZXI9W107XG5cbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgdmFsVG9QYXRocz1tYWtlU2NhbGFyTWFwU3RvcmUoJ3ZhbHVlJyk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGV4cGxvZGU9KGRhdGEpPT57XG5kYXRhLnN0YXJ0c1dpdGgoSU1QTE9ERV9QUkVGSVgpfHxcbkZhaWwgYGV4cGxvZGVkIHN0cmluZyAke2RhdGF9IG11c3Qgc3RhcnQgd2l0aCAke3EoSU1QTE9ERV9QUkVGSVgpfWA7XG5jb25zdCBzdHJvbmduYW1lPUpTT04ucGFyc2UoZGF0YS5zbGljZShJTVBMT0RFX1BSRUZJWC5sZW5ndGgpKTtcbmlmKCFpc1BhdGgoc3Ryb25nbmFtZSkpe1xucmV0dXJuIHN0cm9uZ25hbWU7XG4gfVxuY29uc3R7dmFsVG9QZXRuYW1lOnJvb3RUb1BldG5hbWV9PWVkZ2VNYXBwaW5nO1xuY29uc3QgcGV0bmFtZT1yb290VG9QZXRuYW1lLmdldChzdHJvbmduYW1lWzBdKTtcbmFzc2VydCghaXNQYXRoKHBldG5hbWUpKTtcbnN0cm9uZ25hbWVbMF09cGV0bmFtZTtcbnJldHVybiBoYXJkZW4oc3Ryb25nbmFtZSk7XG4gfTtcblxuLypcblxuXG4gICAqL1xuY29uc3QgaW1wbG9kZT0oc3Ryb25nbmFtZSk9PntcbmlmKCFpc1BhdGgoc3Ryb25nbmFtZSkpe1xucmV0dXJuIGAke0lNUExPREVfUFJFRklYfSR7SlNPTi5zdHJpbmdpZnkoc3Ryb25nbmFtZSl9YDtcbiB9XG5cbi8vXG5jb25zdCBwYXRoPVsuLi5zdHJvbmduYW1lXTtcbmNvbnN0e3BldG5hbWVUb1ZhbDpwZXRuYW1lVG9Sb290fT1lZGdlTWFwcGluZztcbmlmKCFwZXRuYW1lVG9Sb290LmhhcyhwYXRoWzBdKSl7XG4vL1xuRmFpbCBgRWRnZW5hbWUgZm9yICR7cShwYXRoWzBdKX0gcGV0bmFtZSBub3QgZm91bmRgO1xuIH1cbmNvbnN0IHJvb3Q9cGV0bmFtZVRvUm9vdC5nZXQocGF0aFswXSk7XG5wYXRoWzBdPXJvb3Q7XG5cbnJldHVybiBgJHtJTVBMT0RFX1BSRUZJWH0ke0pTT04uc3RyaW5naWZ5KHBhdGgpfWA7XG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBtYWtlTWFwcGluZz0oa2luZCx7dXNlTGVnYWN5TWFwPWZhbHNlfT17fSk9PntcbnR5cGVvZiBraW5kPT09J3N0cmluZyd8fCBga2luZCAke2tpbmR9IG11c3QgYmUgYSBzdHJpbmdgO1xuY29uc3QgbWFrZU1hcD11c2VMZWdhY3lNYXA/bWFrZUxlZ2FjeU1hcDptYWtlU2NhbGFyTWFwU3RvcmU7XG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByYXdWYWxUb1BldG5hbWU9bWFrZU1hcCgndmFsdWUnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB2YWxUb1BldG5hbWU9e1xuLi4ucmF3VmFsVG9QZXRuYW1lLFxuc2V0KGtleSx2YWwpe1xucmF3VmFsVG9QZXRuYW1lLnNldChrZXksaW1wbG9kZSh2YWwpKTtcbiB9LFxuaW5pdChrZXksdmFsKXtcbnJhd1ZhbFRvUGV0bmFtZS5pbml0KGtleSxpbXBsb2RlKHZhbCkpO1xuIH0sXG5nZXQoa2V5KXtcbnJldHVybiBleHBsb2RlKHJhd1ZhbFRvUGV0bmFtZS5nZXQoa2V5KSk7XG4gfSxcbmVudHJpZXMoKXtcbnJldHVybiBtYXBJdGVyYWJsZShyYXdWYWxUb1BldG5hbWUuZW50cmllcygpLChba2V5LHZhbF0pPT5bXG5rZXksXG5leHBsb2RlKHZhbCldKTtcblxuIH0sXG52YWx1ZXMoKXtcbnJldHVybiBtYXBJdGVyYWJsZShyYXdWYWxUb1BldG5hbWUudmFsdWVzKCksKHZhbCk9PmV4cGxvZGUodmFsKSk7XG4gfX07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmF3UGV0bmFtZVRvVmFsPW1ha2VTY2FsYXJNYXBTdG9yZSgncGV0bmFtZScpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcGV0bmFtZVRvVmFsPXtcbi4uLnJhd1BldG5hbWVUb1ZhbCxcbmluaXQoa2V5LHZhbCl7XG5yZXR1cm4gcmF3UGV0bmFtZVRvVmFsLmluaXQoaW1wbG9kZShrZXkpLHZhbCk7XG4gfSxcbnNldChrZXksdmFsKXtcbnJldHVybiByYXdQZXRuYW1lVG9WYWwuc2V0KGltcGxvZGUoa2V5KSx2YWwpO1xuIH0sXG5oYXMoa2V5KXtcbnRyeXtcbnJldHVybiByYXdQZXRuYW1lVG9WYWwuaGFzKGltcGxvZGUoa2V5KSk7XG4gfWNhdGNoKGUpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfSxcbmdldChrZXkpe1xucmV0dXJuIHJhd1BldG5hbWVUb1ZhbC5nZXQoaW1wbG9kZShrZXkpKTtcbiB9LFxuZGVsZXRlKGtleSl7XG5yZXR1cm4gcmF3UGV0bmFtZVRvVmFsLmRlbGV0ZShpbXBsb2RlKGtleSkpO1xuIH0sXG5rZXlzKCl7XG5yZXR1cm4gbWFwSXRlcmFibGUocmF3UGV0bmFtZVRvVmFsLmtleXMoKSwoa2V5KT0+ZXhwbG9kZShrZXkpKTtcbiB9LFxuZW50cmllcygpe1xucmV0dXJuIG1hcEl0ZXJhYmxlKHJhd1BldG5hbWVUb1ZhbC5lbnRyaWVzKCksKFtrZXksdmFsXSk9PltcbmV4cGxvZGUoa2V5KSxcbnZhbF0pO1xuXG4gfX07XG5cblxuLypcblxuXG4gICAgICovXG5jb25zdCBhZGRQYXRoPShwYXRoLHZhbCk9PntcbmlzUGF0aChwYXRoKXx8RmFpbCBgcGF0aCAke3EocGF0aCl9IG11c3QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5nc2A7XG5cbmlmKCF2YWxUb1BldG5hbWUuaGFzKHZhbCkmJmVkZ2VNYXBwaW5nLnZhbFRvUGV0bmFtZS5oYXMocGF0aFswXSkpe1xuLy9cbi8vXG52YWxUb1BldG5hbWUuaW5pdCh2YWwscGF0aCk7XG4gfVxuXG4vL1xuaWYoIXZhbFRvUGF0aHMuaGFzKHZhbCkpe1xudmFsVG9QYXRocy5pbml0KHZhbCxoYXJkZW4oW3BhdGhdKSk7XG5yZXR1cm47XG4gfVxuY29uc3QgcGF0aHM9dmFsVG9QYXRocy5nZXQodmFsKTtcblxuLy9cbmNvbnN0IGZvdW5kPXBhdGhzLmZpbmQoKGVuYW1lKT0+e1xuaWYoZW5hbWUubGVuZ3RoIT09cGF0aC5sZW5ndGgpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmZvcihsZXQgaT0wO2k8ZW5hbWUubGVuZ3RoO2krPTEpe1xuaWYoZW5hbWVbaV0hPT1wYXRoW2ldKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfSk7XG5cbi8vXG5pZighZm91bmQpe1xudmFsVG9QYXRocy5zZXQodmFsLGhhcmRlbihbLi4ucGF0aHMscGF0aF0pKTtcbiB9XG4gfTtcblxuY29uc3QgYWRkUGV0bmFtZT0ocGV0bmFtZSx2YWwpPT57XG5pZihwZXRuYW1lVG9WYWwuaGFzKHBldG5hbWUpJiZwZXRuYW1lVG9WYWwuZ2V0KHBldG5hbWUpPT09dmFsKXtcbnJldHVybjtcbiB9XG4hcGV0bmFtZVRvVmFsLmhhcyhwZXRuYW1lKXx8RmFpbCBgcGV0bmFtZSAke3BldG5hbWV9IGlzIGFscmVhZHkgaW4gdXNlYDtcbiF2YWxUb1BldG5hbWUuaGFzKHZhbCl8fEZhaWwgYHZhbCAke3ZhbH0gYWxyZWFkeSBoYXMgYSBwZXRuYW1lYDtcbnBldG5hbWVUb1ZhbC5pbml0KHBldG5hbWUsdmFsKTtcbnZhbFRvUGV0bmFtZS5pbml0KHZhbCxwZXRuYW1lKTtcblxuaWYoaXNQYXRoKHBldG5hbWUpKXtcbmFkZFBhdGgocGV0bmFtZSx2YWwpO1xuIH1cbiB9O1xuXG5jb25zdCByZW5hbWVQZXRuYW1lPShwZXRuYW1lLHZhbCk9PntcbnZhbFRvUGV0bmFtZS5oYXModmFsKXx8XG5GYWlsIGB2YWwgJHt2YWx9IGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IG5hbWVkLCB3b3VsZCB5b3UgbGlrZSB0byBhZGQgaXQgaW5zdGVhZD9gO1xuIXBldG5hbWVUb1ZhbC5oYXMocGV0bmFtZSl8fEZhaWwgYHBldG5hbWUgJHtwZXRuYW1lfSBpcyBhbHJlYWR5IGluIHVzZWA7XG4vL1xuY29uc3Qgb2xkUGV0bmFtZT12YWxUb1BldG5hbWUuZ2V0KHZhbCk7XG5wZXRuYW1lVG9WYWwuZGVsZXRlKG9sZFBldG5hbWUpO1xudmFsVG9QZXRuYW1lLmRlbGV0ZSh2YWwpO1xuXG4vL1xucGV0bmFtZVRvVmFsLmluaXQocGV0bmFtZSx2YWwpO1xudmFsVG9QZXRuYW1lLmluaXQodmFsLHBldG5hbWUpO1xuIH07XG5cbi8qXG5cblxuXG4gICAgICovXG5jb25zdCBzdWdnZXN0UGV0bmFtZT0ocGV0bmFtZSx2YWwpPT57XG5pZih2YWxUb1BldG5hbWUuaGFzKHZhbCkpe1xuLy9cbnJldHVybiB2YWxUb1BldG5hbWUuZ2V0KHZhbCk7XG4gfVxuXG4vL1xubGV0IHVuaXF1ZVBhdGg9cGV0bmFtZTtcbmxldCBub25jZT0yO1xud2hpbGUocGV0bmFtZVRvVmFsLmhhcyh1bmlxdWVQYXRoKSl7XG4vL1xuaWYoaXNQYXRoKHBldG5hbWUpKXtcbnVuaXF1ZVBhdGg9Wy4uLnBldG5hbWUsIGAke25vbmNlfWBdO1xuIH1lbHNle1xudW5pcXVlUGF0aD0gYCR7cGV0bmFtZX0ke25vbmNlfWA7XG4gfVxubm9uY2UrPTE7XG4gfVxuXG4vL1xuLy9cbi8vXG5hZGRQZXRuYW1lKHVuaXF1ZVBhdGgsdmFsKTtcbnJldHVybiB1bmlxdWVQYXRoO1xuIH07XG5cbmNvbnN0IGRlbGV0ZVBldG5hbWU9KHBldG5hbWUpPT57XG5wZXRuYW1lVG9WYWwuaGFzKHBldG5hbWUpfHxcbkZhaWwgYHBldG5hbWUgJHtxKFxucGV0bmFtZSlcbiB9IGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IG5hbWVkLCB3b3VsZCB5b3UgbGlrZSB0byBhZGQgaXQgaW5zdGVhZD9gO1xuXG4vL1xuY29uc3QgdmFsPXBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSk7XG5wZXRuYW1lVG9WYWwuZGVsZXRlKHBldG5hbWUpO1xudmFsVG9QZXRuYW1lLmRlbGV0ZSh2YWwpO1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hcHBpbmc9aGFyZGVuKHtcbmltcGxvZGUsXG5leHBsb2RlLFxudmFsVG9QZXRuYW1lLFxudmFsVG9QYXRocyxcbnBldG5hbWVUb1ZhbCxcbmFkZFBldG5hbWUsXG5hZGRQYXRoLFxucmVuYW1lUGV0bmFtZSxcbmRlbGV0ZVBldG5hbWUsXG5zdWdnZXN0UGV0bmFtZSxcbmtpbmR9KTtcblxucGV0bmFtZUtpbmRUb01hcHBpbmcuaW5pdChraW5kLG1hcHBpbmcpO1xucmV0dXJuIG1hcHBpbmc7XG4gfTtcblxuY29uc3QgZWRnZU1hcHBpbmc9bWFrZU1hcHBpbmcoJ2VkZ2UnKTtcbmNvbnN0IHVubmFtZWRNYXBwaW5nPW1ha2VNYXBwaW5nKCd1bm5hbWVkJyk7XG5cbmNvbnN0IGFkZFRvVW5uYW1lZD0odmFsKT0+e1xudW5uYW1lZENvdW50Kz0xO1xuY29uc3QgcGxhY2Vob2xkZXI9IGB1bm5hbWVkLSR7dW5uYW1lZENvdW50fWA7XG51bm5hbWVkTWFwcGluZy5hZGRQZXRuYW1lKHBsYWNlaG9sZGVyLHZhbCk7XG5jb25zdCBwbGFjZWhvbGRlck5hbWU9aGFyZGVuKHtcbmtpbmQ6J3VubmFtZWQnLFxucGV0bmFtZTpwbGFjZWhvbGRlcn0pO1xuXG5yZXR1cm4gcGxhY2Vob2xkZXJOYW1lO1xuIH07XG5cbi8vXG4vL1xuY29uc3QgY29udmVydFZhbFRvTmFtZT0odmFsKT0+e1xuZm9yKGxldCBpPTA7aTxzZWFyY2hPcmRlci5sZW5ndGg7aSs9MSl7XG5jb25zdCBraW5kPXNlYXJjaE9yZGVyW2ldO1xuY29uc3R7dmFsVG9QZXRuYW1lfT1wZXRuYW1lS2luZFRvTWFwcGluZy5nZXQoa2luZCk7XG5pZih2YWxUb1BldG5hbWUuaGFzKHZhbCkpe1xucmV0dXJuIGhhcmRlbih7XG5raW5kLFxucGV0bmFtZTp2YWxUb1BldG5hbWUuZ2V0KHZhbCl9KTtcblxuIH1cbiB9XG4vL1xuLy9cbmlmKHVubmFtZWRNYXBwaW5nLnZhbFRvUGV0bmFtZS5oYXModmFsKSl7XG5yZXR1cm4gaGFyZGVuKHtcbmtpbmQ6J3VubmFtZWQnLFxucGV0bmFtZTp1bm5hbWVkTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KHZhbCl9KTtcblxuIH1cbi8vXG5jb25zdCBwbGFjZWhvbGRlck5hbWU9YWRkVG9Vbm5hbWVkKHZhbCk7XG5yZXR1cm4gcGxhY2Vob2xkZXJOYW1lO1xuIH07XG5cbmNvbnN0IGNvbnZlcnROYW1lVG9WYWw9KHtraW5kLHBldG5hbWV9LF9pZmFjZT11bmRlZmluZWQpPT57XG5jb25zdHtwZXRuYW1lVG9WYWx9PXBldG5hbWVLaW5kVG9NYXBwaW5nLmdldChraW5kKTtcbnJldHVybiBwZXRuYW1lVG9WYWwuZ2V0KHBldG5hbWUpO1xuIH07XG5cbmNvbnN0e3RvQ2FwRGF0YTpkZWh5ZHJhdGUsZnJvbUNhcERhdGE6aHlkcmF0ZX09bWFrZU1hcnNoYWwoXG5jb252ZXJ0VmFsVG9OYW1lLFxuY29udmVydE5hbWVUb1ZhbCxcbntcbm1hcnNoYWxOYW1lOidoeWRyYXRpb24nLFxuLy9cbi8vXG5lcnJvcklkTnVtOjMwXzAwMCxcbnNlcmlhbGl6ZUJvZHlGb3JtYXQ6J3NtYWxsY2Fwcyd9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmh5ZHJhdGUsXG5kZWh5ZHJhdGUsXG5lZGdlTWFwcGluZyxcbi8qXG5cblxuXG5cbiAgICAgKi9cbm1ha2VNYXBwaW5nOihraW5kLGxlZ2FjeU9wdGlvbnM9dW5kZWZpbmVkKT0+e1xuY29uc3QgbWFwcGluZz1tYWtlTWFwcGluZyhraW5kLGxlZ2FjeU9wdGlvbnMpO1xuc2VhcmNoT3JkZXIucHVzaChraW5kKTtcbnJldHVybiBtYXBwaW5nO1xuIH19KTtcblxuIH07JGjNj19vbmNlLm1ha2VEZWh5ZHJhdG9yKG1ha2VEZWh5ZHJhdG9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzUGF0aCI6WyJpc1BhdGgiXSwibWFrZURlaHlkcmF0b3IiOlsibWFrZURlaHlkcmF0b3IiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA7z/q6F6lAABepQAAMAAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvbGliLXdhbGxldC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCJAYWdvcmljL2NhY2hlIiwiQGFnb3JpYy9pbnRlcm5hbCIsIkBhZ29yaWMvaW50ZXJuYWwvc3JjL3N0b3JhZ2UtdGVzdC11dGlscy5qcyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGFnb3JpYy9lcnRwIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL21hcnNoYWwiLCJAZW5kby9uYXQiLCJAYWdvcmljL25vdGlmaWVyIiwiQGVuZG8vcHJvbWlzZS1raXQiLCJAYWdvcmljL3NtYXJ0LXdhbGxldC9zcmMvbWFyc2hhbC1jb250ZXh0cy5qcyIsIi4vaXNzdWVyVGFibGUuanMiLCIuL2xpYi1kZWh5ZHJhdGUuanMiLCIuL2ZpbmRPck1ha2VJbnZpdGF0aW9uLmpzIiwiLi9iaWdpbnRTdHJpbmdpZnkuanMiLCIuL2FjdGlvbnMuanMiLCIuL2ludGVybmFsLXR5cGVzLmpzIl0sImV4cG9ydHMiOlsibWFrZVdhbGxldFJvb3QiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnQscSxGYWlsLG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yLG9iamVjdE1hcCxXYWxsZXROYW1lLHNsb3RTdHJpbmdVbnNlcmlhbGl6ZSxtYWtlTGVnYWN5TWFwLG1ha2VTY2FsYXJNYXBTdG9yZSxtYWtlU2NhbGFyV2Vha01hcFN0b3JlLG1ha2VTY2FsYXJCaWdNYXBTdG9yZSxBbW91bnRNYXRoLEUscGFzc1N0eWxlT2YsRmFyLG1hcEl0ZXJhYmxlLE5hdCxtYWtlTm90aWZpZXJGcm9tU3Vic2NyaWJlcixtYWtlTm90aWZpZXJLaXQsb2JzZXJ2ZUl0ZXJhdGlvbixvYnNlcnZlTm90aWZpZXIsc3Vic2NyaWJlRWFjaCxtYWtlUHJvbWlzZUtpdCxtYWtlRXhwb3J0Q29udGV4dCxtYWtlSXNzdWVyVGFibGUsbWFrZURlaHlkcmF0b3IsbWFrZUlkLGZpbmRPck1ha2VJbnZpdGF0aW9uLGJpZ2ludFN0cmluZ2lmeSxtYWtlUGF5bWVudEFjdGlvbnM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcImFzc2VydFwiLCBbJGjNj19hID0+IChhc3NlcnQgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvY2FjaGVcIiwgW1tcIm1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9pbnRlcm5hbFwiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXSxbXCJXYWxsZXROYW1lXCIsIFskaM2PX2EgPT4gKFdhbGxldE5hbWUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsL3NyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanNcIiwgW1tcInNsb3RTdHJpbmdVbnNlcmlhbGl6ZVwiLCBbJGjNj19hID0+IChzbG90U3RyaW5nVW5zZXJpYWxpemUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3N0b3JlXCIsIFtbXCJtYWtlTGVnYWN5TWFwXCIsIFskaM2PX2EgPT4gKG1ha2VMZWdhY3lNYXAgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJtYWtlU2NhbGFyV2Vha01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJtYWtlU2NhbGFyQmlnTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAobWFrZVNjYWxhckJpZ01hcFN0b3JlID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9lcnRwXCIsIFtbXCJBbW91bnRNYXRoXCIsIFskaM2PX2EgPT4gKEFtb3VudE1hdGggPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcIm1hcEl0ZXJhYmxlXCIsIFskaM2PX2EgPT4gKG1hcEl0ZXJhYmxlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbmF0XCIsIFtbXCJOYXRcIiwgWyRozY9fYSA9PiAoTmF0ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllclwiLCBbW1wibWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXJcIiwgWyRozY9fYSA9PiAobWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIgPSAkaM2PX2EpXV0sW1wibWFrZU5vdGlmaWVyS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VOb3RpZmllcktpdCA9ICRozY9fYSldXSxbXCJvYnNlcnZlSXRlcmF0aW9uXCIsIFskaM2PX2EgPT4gKG9ic2VydmVJdGVyYXRpb24gPSAkaM2PX2EpXV0sW1wib2JzZXJ2ZU5vdGlmaWVyXCIsIFskaM2PX2EgPT4gKG9ic2VydmVOb3RpZmllciA9ICRozY9fYSldXSxbXCJzdWJzY3JpYmVFYWNoXCIsIFskaM2PX2EgPT4gKHN1YnNjcmliZUVhY2ggPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wibWFrZVByb21pc2VLaXRcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2VLaXQgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3NtYXJ0LXdhbGxldC9zcmMvbWFyc2hhbC1jb250ZXh0cy5qc1wiLCBbW1wibWFrZUV4cG9ydENvbnRleHRcIiwgWyRozY9fYSA9PiAobWFrZUV4cG9ydENvbnRleHQgPSAkaM2PX2EpXV1dXSxbXCIuL2lzc3VlclRhYmxlLmpzXCIsIFtbXCJtYWtlSXNzdWVyVGFibGVcIiwgWyRozY9fYSA9PiAobWFrZUlzc3VlclRhYmxlID0gJGjNj19hKV1dXV0sW1wiLi9saWItZGVoeWRyYXRlLmpzXCIsIFtbXCJtYWtlRGVoeWRyYXRvclwiLCBbJGjNj19hID0+IChtYWtlRGVoeWRyYXRvciA9ICRozY9fYSldXV1dLFtcIi4vZmluZE9yTWFrZUludml0YXRpb24uanNcIiwgW1tcIm1ha2VJZFwiLCBbJGjNj19hID0+IChtYWtlSWQgPSAkaM2PX2EpXV0sW1wiZmluZE9yTWFrZUludml0YXRpb25cIiwgWyRozY9fYSA9PiAoZmluZE9yTWFrZUludml0YXRpb24gPSAkaM2PX2EpXV1dXSxbXCIuL2JpZ2ludFN0cmluZ2lmeS5qc1wiLCBbW1wiYmlnaW50U3RyaW5naWZ5XCIsIFskaM2PX2EgPT4gKGJpZ2ludFN0cmluZ2lmeSA9ICRozY9fYSldXV1dLFtcIi4vYWN0aW9ucy5qc1wiLCBbW1wibWFrZVBheW1lbnRBY3Rpb25zXCIsIFskaM2PX2EgPT4gKG1ha2VQYXltZW50QWN0aW9ucyA9ICRozY9fYSldXV1dLFtcIi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KG1ha2VXYWxsZXRSb290LCAnbmFtZScsIHt2YWx1ZTogXCJtYWtlV2FsbGV0Um9vdFwifSk7JGjNj19vbmNlLm1ha2VXYWxsZXRSb290KG1ha2VXYWxsZXRSb290KTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8vXG5jb25zdCBub0FjdGlvblN0YXRlQ2hhbmdlSGFuZGxlcj0oX25ld1N0YXRlKT0+eyB9O1xuXG5jb25zdCBjbXA9KGEsYik9PntcbmlmKGE+Yil7XG5yZXR1cm4gMTtcbiB9XG5pZihhPT09Yil7XG5yZXR1cm4gMDtcbiB9XG5yZXR1cm4tMTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZVdhbGxldFJvb3Qoe1xuem9lLFxuYm9hcmQsXG5hZ29yaWNOYW1lcyxcbm5hbWVzQnlBZGRyZXNzLFxubXlBZGRyZXNzTmFtZUFkbWluLFxucHVyc2VzU3RhdGVDaGFuZ2VIYW5kbGVyPW5vQWN0aW9uU3RhdGVDaGFuZ2VIYW5kbGVyLFxuaW5ib3hTdGF0ZUNoYW5nZUhhbmRsZXI9bm9BY3Rpb25TdGF0ZUNoYW5nZUhhbmRsZXIsXG5kYXRlTm93PXVuZGVmaW5lZH0pXG57XG5hc3NlcnQobXlBZGRyZXNzTmFtZUFkbWluLCdtaXNzaW5nIG15QWRkcmVzc05hbWVBZG1pbicpO1xuXG5sZXQgbGFzdElkPTA7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhZGRNZXRhPShyZWNvcmQpPT57XG5jb25zdHttZXRhOm9sZE1ldGE9e319PXJlY29yZDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1ldGE9ey4uLm9sZE1ldGF9O1xuaWYoIW1ldGEuaWQpe1xuLy9cbmxhc3RJZCs9MTtcbm1ldGEuaWQ9bGFzdElkO1xuIH1cbmlmKGRhdGVOb3cpe1xuY29uc3Qgbm93U3RhbXA9ZGF0ZU5vdygpO1xuaWYoIW1ldGEuY3JlYXRpb25TdGFtcCl7XG4vL1xubWV0YS5jcmVhdGlvblN0YW1wPW5vd1N0YW1wO1xuIH1cbm1ldGEudXBkYXRlZFN0YW1wPW5vd1N0YW1wO1xuIH1cbnJldHVybnsuLi5yZWNvcmQsbWV0YX07XG4gfTtcblxuY29uc3QgY29udGV4dD1tYWtlRXhwb3J0Q29udGV4dCgpO1xuXG4vL1xuLy9cbmNvbnN0e21ha2VNYXBwaW5nLGRlaHlkcmF0ZSxlZGdlTWFwcGluZ309bWFrZURlaHlkcmF0b3IoKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZU1hcHBpbmc9bWFrZU1hcHBpbmcoJ3B1cnNlJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRNYXBwaW5nPW1ha2VNYXBwaW5nKCdicmFuZCcpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29udGFjdE1hcHBpbmc9bWFrZU1hcHBpbmcoXG4nY29udGFjdCcsXG57dXNlTGVnYWN5TWFwOnRydWV9Ly9cbik7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5zdGFuY2VNYXBwaW5nPW1ha2VNYXBwaW5nKCdpbnN0YW5jZScpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpbnN0YWxsYXRpb25NYXBwaW5nPW1ha2VNYXBwaW5nKCdpbnN0YWxsYXRpb24nKTtcblxuY29uc3QgYnJhbmRUYWJsZT1tYWtlSXNzdWVyVGFibGUoKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3VlclRvQm9hcmRJZD1tYWtlU2NhbGFyV2Vha01hcFN0b3JlKCdpc3N1ZXInKTtcblxuLy9cbmNvbnN0IGluaXRJc3N1ZXJUb0JvYXJkSWQ9YXN5bmMoaXNzdWVyLGJyYW5kKT0+e1xuaWYoaXNzdWVyVG9Cb2FyZElkLmhhcyhpc3N1ZXIpKXtcbi8vXG5yZXR1cm4gaXNzdWVyVG9Cb2FyZElkLmdldChpc3N1ZXIpO1xuIH1cblxuLy9cbmNvbnN0W2lzc3VlckJvYXJkSWQsYnJhbmRCb2FyZElkXT1hd2FpdCBQcm9taXNlLmFsbChbXG5FKGJvYXJkKS5nZXRJZChpc3N1ZXIpLFxuRShib2FyZCkuZ2V0SWQoYnJhbmQpXSk7XG5cbmlmKGlzc3VlclRvQm9hcmRJZC5oYXMoaXNzdWVyKSl7XG4vL1xucmV0dXJuIGlzc3VlclRvQm9hcmRJZC5nZXQoaXNzdWVyKTtcbiB9XG5cbi8vXG4vL1xuY29udGV4dC5lbnN1cmVCb2FyZElkKGlzc3VlckJvYXJkSWQsaXNzdWVyKTtcbmNvbnRleHQuaW5pdEJvYXJkSWQoYnJhbmRCb2FyZElkLGJyYW5kKTtcblxuLy9cbmlzc3VlclRvQm9hcmRJZC5pbml0KGlzc3Vlcixpc3N1ZXJCb2FyZElkKTtcbnJldHVybiBpc3N1ZXJCb2FyZElkO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZVRvQnJhbmQ9bWFrZVNjYWxhcldlYWtNYXBTdG9yZSgncHVyc2UnKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBicmFuZFRvRGVwb3NpdEZhY2V0SWQ9bWFrZVNjYWxhck1hcFN0b3JlKCdicmFuZCcpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2U9bWFrZVNjYWxhck1hcFN0b3JlKCdicmFuZCcpO1xuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpZFRvT2ZmZXI9bWFrZVNjYWxhck1hcFN0b3JlKCdvZmZlcklkJyk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vL1xuY29uc3QgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdD1tYWtlTGVnYWN5TWFwKCdpZCcpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGludml0YXRpb25IYW5kbGVUb09mZmVyUmVzdWx0PVxubWFrZVNjYWxhcldlYWtNYXBTdG9yZSgnaW52aXRhdGlvbkhhbmRsZScpO1xuXG4vL1xuY29uc3QgaWRUb0NvbXBpbGVkT2ZmZXJQPW5ldyBNYXAoKTtcbmNvbnN0IGlkVG9Db21wbGV0ZT1uZXcgTWFwKCk7XG5jb25zdCBpZFRvU2VhdD1uZXcgTWFwKCk7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwdXJzZXNTdGF0ZT1uZXcgTWFwKCk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcHVyc2VzRnVsbFN0YXRlPW5ldyBNYXAoKTtcbmNvbnN0IGluYm94U3RhdGU9bmV3IE1hcCgpO1xuXG4vKlxuXG5cblxuICAgKi9cbmxldCB6b2VJbnZpdGVQdXJzZTtcblxuY29uc3QgWk9FX0lOVklURV9CUkFORF9QRVROQU1FPSd6b2UgaW52aXRlJztcblxuZnVuY3Rpb24gZ2V0U29ydGVkVmFsdWVzKG1hcCl7XG5jb25zdCBlbnRyaWVzPVsuLi5tYXAuZW50cmllcygpXTtcbi8vXG5jb25zdCB2YWx1ZXM9ZW50cmllcy5cbnNvcnQoKFtpZDFdLFtpZDJdKT0+Y21wKGlkMSxpZDIpKS5cbm1hcCgoW19pZCx2YWx1ZV0pPT52YWx1ZSk7XG5cbnJldHVybiBiaWdpbnRTdHJpbmdpZnkoaGFyZGVuKHZhbHVlcykpO1xuIH1cblxuZnVuY3Rpb24gZ2V0UHVyc2VzU3RhdGUoKXtcbnJldHVybiBnZXRTb3J0ZWRWYWx1ZXMocHVyc2VzU3RhdGUpO1xuIH1cblxuZnVuY3Rpb24gZ2V0SW5ib3hTdGF0ZSgpe1xucmV0dXJuIGdldFNvcnRlZFZhbHVlcyhpbmJveFN0YXRlKTtcbiB9XG5cbi8vXG4vL1xuLy9cbmNvbnN0IGZpbGxJblNsb3RzPXNsb3RTdHJpbmdVbnNlcmlhbGl6ZTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3R7bm90aWZpZXI6b2ZmZXJzTm90aWZpZXIsdXBkYXRlcjpvZmZlcnNVcGRhdGVyfT1tYWtlTm90aWZpZXJLaXQoXG5bXSk7XG5cblxuY29uc3R7cHVyc2VzTm90aWZpZXIsYXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyLHB1cnNlc1VwZGF0ZXJ9PSgoKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdHtub3RpZmllcjppcG4sdXBkYXRlcjppcHV9PW1ha2VOb3RpZmllcktpdChbXSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0e25vdGlmaWVyOmFwbix1cGRhdGVyOmFwdX09bWFrZU5vdGlmaWVyS2l0KFtdKTtcbi8vXG4vKlxuXG5cbiAgICAgKi9cbmNvbnN0IGlubmVyRmlsdGVyPSh7XG5icmFuZCxcbmJyYW5kQm9hcmRJZCxcbmRlcG9zaXRCb2FyZElkLFxuYnJhbmRQZXRuYW1lLFxucHVyc2VQZXRuYW1lLFxuZGlzcGxheUluZm8sXG52YWx1ZSxcbmN1cnJlbnRBbW91bnRTbG90cyxcbmN1cnJlbnRBbW91bnR9KT0+XG5cbmhhcmRlbih7XG5icmFuZCxcbmJyYW5kQm9hcmRJZCxcbi4uLihkZXBvc2l0Qm9hcmRJZCYme2RlcG9zaXRCb2FyZElkfSksXG5icmFuZFBldG5hbWUsXG5wdXJzZVBldG5hbWUsXG4uLi4oZGlzcGxheUluZm8mJntkaXNwbGF5SW5mb30pLFxudmFsdWUsXG5jdXJyZW50QW1vdW50U2xvdHMsXG5jdXJyZW50QW1vdW50fSk7XG5cbmNvbnN0IGZpbHRlcj0oc3RhdGUpPT5zdGF0ZS5tYXAoaW5uZXJGaWx0ZXIpO1xuY29uc3QgcHU9RmFyKCdwdXJzZXNVcGRhdGVyJyx7XG51cGRhdGVTdGF0ZToobmV3U3RhdGUpPT57XG5pcHUudXBkYXRlU3RhdGUobmV3U3RhdGUpO1xuYXB1LnVwZGF0ZVN0YXRlKGZpbHRlcihuZXdTdGF0ZSkpO1xuIH0sXG5maW5pc2g6KGZpbmFsU3RhdGUpPT57XG5pcHUuZmluaXNoKGZpbmFsU3RhdGUpO1xuYXB1LmZpbmlzaChmaWx0ZXIoZmluYWxTdGF0ZSkpO1xuIH0sXG5mYWlsOihyZWFzb24pPT57XG5pcHUuZmFpbChyZWFzb24pO1xuYXB1LmZhaWwocmVhc29uKTtcbiB9fSk7XG5cbnJldHVybiBoYXJkZW4oe1xucHVyc2VzTm90aWZpZXI6aXBuLFxuYXR0ZW51YXRlZFB1cnNlc05vdGlmaWVyOmFwbixcbnB1cnNlc1VwZGF0ZXI6cHV9KTtcblxuIH0pKCk7XG5cbi8qXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVB1cnNlc1N0YXRlKHB1cnNlUGV0bmFtZSxwdXJzZSl7XG5jb25zdCBwdXJzZUtleT1wdXJzZU1hcHBpbmcuaW1wbG9kZShwdXJzZVBldG5hbWUpO1xuZm9yKGNvbnN0IGtleSBvZiBwdXJzZXNTdGF0ZS5rZXlzKCkpe1xuaWYoIXB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuaGFzKHB1cnNlTWFwcGluZy5leHBsb2RlKGtleSkpKXtcbnB1cnNlc1N0YXRlLmRlbGV0ZShrZXkpO1xuIH1cbiB9XG5jb25zdCBjdXJyZW50QW1vdW50PWF3YWl0IEUocHVyc2UpLmdldEN1cnJlbnRBbW91bnQoKTtcbmNvbnN0e3ZhbHVlLGJyYW5kfT1jdXJyZW50QW1vdW50O1xuY29uc3QgYnJhbmRQZXRuYW1lPWJyYW5kTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KGJyYW5kKTtcbmNvbnN0IGRlaHlkcmF0ZWRDdXJyZW50QW1vdW50PWRlaHlkcmF0ZShjdXJyZW50QW1vdW50KTtcbmNvbnN0IGJyYW5kQm9hcmRJZD1hd2FpdCBFKGJvYXJkKS5nZXRJZChicmFuZCk7XG5cbmxldCBkZXBvc2l0Qm9hcmRJZDtcbmlmKFxuYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaGFzKGJyYW5kKSYmXG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5nZXQoYnJhbmQpPT09cHVyc2UmJlxuYnJhbmRUb0RlcG9zaXRGYWNldElkLmhhcyhicmFuZCkpXG57XG4vL1xuZGVwb3NpdEJvYXJkSWQ9YnJhbmRUb0RlcG9zaXRGYWNldElkLmdldChicmFuZCk7XG4gfVxuXG5jb25zdCBpc3N1ZXJSZWNvcmQ9XG5icmFuZFRhYmxlLmhhc0J5QnJhbmQoYnJhbmQpJiZicmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xuLypcblxuICAgICAqL1xuY29uc3QganN0YXRlPWFkZE1ldGEoe1xuLi4ucHVyc2VzU3RhdGUuZ2V0KHB1cnNlS2V5KSxcbmJyYW5kLFxuYnJhbmRCb2FyZElkLFxuLi4uKGRlcG9zaXRCb2FyZElkJiZ7ZGVwb3NpdEJvYXJkSWR9KSxcbmJyYW5kUGV0bmFtZSxcbnB1cnNlUGV0bmFtZSxcbmRpc3BsYXlJbmZvOmlzc3VlclJlY29yZCYmaXNzdWVyUmVjb3JkLmRpc3BsYXlJbmZvLFxudmFsdWUsXG5jdXJyZW50QW1vdW50U2xvdHM6ZGVoeWRyYXRlZEN1cnJlbnRBbW91bnQsXG5jdXJyZW50QW1vdW50OmZpbGxJblNsb3RzKGRlaHlkcmF0ZWRDdXJyZW50QW1vdW50KX0pO1xuXG5wdXJzZXNTdGF0ZS5zZXQocHVyc2VLZXksanN0YXRlKTtcblxucHVyc2VzRnVsbFN0YXRlLnNldChcbnB1cnNlLFxuaGFyZGVuKHtcbi4uLmpzdGF0ZSxcbnB1cnNlLFxuYnJhbmQsXG5hY3Rpb25zOkZhcigncHVyc2UuYWN0aW9ucycse1xuLy9cbiAgICAgIGFzeW5jIHNlbmQocmVjZWl2ZXJQLHNlbmRWYWx1ZSl7XG5jb25zdCBhbW91bnQ9QW1vdW50TWF0aC5tYWtlKGJyYW5kLHNlbmRWYWx1ZSk7XG5jb25zdCBwYXltZW50PWF3YWl0IEUocHVyc2UpLndpdGhkcmF3KGFtb3VudCk7XG50cnl7XG5hd2FpdCBFKHJlY2VpdmVyUCkucmVjZWl2ZShwYXltZW50KTtcbiB9Y2F0Y2goZSl7XG4vL1xuYXdhaXQgRShwdXJzZSkuZGVwb3NpdChwYXltZW50KTtcbnRocm93IGU7XG4gfVxuIH0sXG4gICAgICBhc3luYyByZWNlaXZlKHBheW1lbnRQKXtcbmNvbnN0IHBheW1lbnQ9YXdhaXQgcGF5bWVudFA7XG5yZXR1cm4gRShwdXJzZSkuZGVwb3NpdChwYXltZW50KTtcbiB9LFxuZGVwb3NpdChwYXltZW50LGFtb3VudD11bmRlZmluZWQpe1xucmV0dXJuIEUocHVyc2UpLmRlcG9zaXQocGF5bWVudCxhbW91bnQpO1xuIH19KX0pKTtcblxuXG5cbnB1cnNlc1VwZGF0ZXIudXBkYXRlU3RhdGUoWy4uLnB1cnNlc0Z1bGxTdGF0ZS52YWx1ZXMoKV0pO1xucHVyc2VzU3RhdGVDaGFuZ2VIYW5kbGVyKGdldFB1cnNlc1N0YXRlKCkpO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWxsUHVyc2VTdGF0ZSgpe1xucmV0dXJuIFByb21pc2UuYWxsKFxubWFwSXRlcmFibGUocHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCksKFtwZXRuYW1lLHB1cnNlXSk9PlxudXBkYXRlUHVyc2VzU3RhdGUocGV0bmFtZSxwdXJzZSkpKTtcblxuXG4gfVxuXG5jb25zdCBkaXNwbGF5PSh2YWx1ZSk9PmZpbGxJblNsb3RzKGRlaHlkcmF0ZShoYXJkZW4odmFsdWUpKSk7XG5cbmNvbnN0IGV4cGFuZEludml0YXRpb25CcmFuZHM9YXN5bmMoaW52aXRhdGlvbkRldGFpbHMpPT57XG4vL1xuY29uc3R7ZmVlfT1pbnZpdGF0aW9uRGV0YWlscztcbmlmKCFmZWUpe1xucmV0dXJuIGludml0YXRpb25EZXRhaWxzO1xuIH1cblxuLy9cbmNvbnN0IGRpc3BsYXlJbmZvPWF3YWl0IEUoRSh6b2UpLmdldEZlZUlzc3VlcigpKS5nZXREaXNwbGF5SW5mbygpO1xuY29uc3QgYXVnbWVudGVkRGV0YWlscz17XG4uLi5pbnZpdGF0aW9uRGV0YWlscyxcbmZlZTp7Li4uZmVlLGRpc3BsYXlJbmZvfX07XG5cbnJldHVybiBkaXNwbGF5KGF1Z21lbnRlZERldGFpbHMpO1xuIH07XG5cbmNvbnN0IGRpc3BsYXlQcm9wb3NhbD0ocHJvcG9zYWxUZW1wbGF0ZSk9PntcbmNvbnN0e1xud2FudCxcbmdpdmUsXG5leGl0PXtvbkRlbWFuZDpudWxsfSxcbmFyZ3VtZW50czphcmdzfT1cbnByb3Bvc2FsVGVtcGxhdGU7XG5jb25zdCBkaXNwbGF5UmVjb3JkPShwdXJzZVBldG5hbWVWYWx1ZUtleXdvcmRSZWNvcmQpPT57XG5pZihwdXJzZVBldG5hbWVWYWx1ZUtleXdvcmRSZWNvcmQ9PT11bmRlZmluZWQpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5yZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuT2JqZWN0LmVudHJpZXMocHVyc2VQZXRuYW1lVmFsdWVLZXl3b3JkUmVjb3JkKS5tYXAoXG4oW2tleXdvcmQse3B1cnNlUGV0bmFtZSx2YWx1ZSxhbW91bnQscHVyc2V9XSk9PntcbmlmKCFhbW91bnQpe1xucHVyc2U9Z2V0UHVyc2UocHVyc2VQZXRuYW1lKTtcbmFtb3VudD17dmFsdWV9O1xuIH1lbHNle1xucHVyc2VQZXRuYW1lPXB1cnNlTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KHB1cnNlKTtcbiB9XG5cbmNvbnN0IGJyYW5kPXB1cnNlVG9CcmFuZC5nZXQocHVyc2UpO1xuY29uc3QgaXNzdWVyUmVjb3JkPVxuYnJhbmRUYWJsZS5oYXNCeUJyYW5kKGJyYW5kKSYmYnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcbmFtb3VudD1oYXJkZW4oe1xuLi4uYW1vdW50LFxuYnJhbmQsXG5kaXNwbGF5SW5mbzppc3N1ZXJSZWNvcmQmJmlzc3VlclJlY29yZC5kaXNwbGF5SW5mb30pO1xuXG5jb25zdCBkaXNwbGF5QW1vdW50PWRpc3BsYXkoYW1vdW50KTtcbnJldHVybltcbmtleXdvcmQsXG57XG5wdXJzZVBldG5hbWUsXG5wdXJzZSxcbmFtb3VudDpkaXNwbGF5QW1vdW50fV07XG5cblxuIH0pKTtcblxuXG4gfTtcbmNvbnN0IHByb3Bvc2FsRm9yRGlzcGxheT17XG53YW50OmRpc3BsYXlSZWNvcmQod2FudCksXG5naXZlOmRpc3BsYXlSZWNvcmQoZ2l2ZSksXG5leGl0fTtcblxuaWYoYXJncyE9PXVuZGVmaW5lZCl7XG5wcm9wb3NhbEZvckRpc3BsYXkuYXJndW1lbnRzPWRpc3BsYXkoYXJncyk7XG4gfVxucmV0dXJuIHByb3Bvc2FsRm9yRGlzcGxheTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBwcnVuZU9mZmVyV2hlbkluYWN0aXZlPShpZCk9PntcbmFzc2VydChpbmJveFN0YXRlLmhhcyhpZCkpO1xuY29uc3Qgb2ZmZXI9aW5ib3hTdGF0ZS5nZXQoaWQpO1xuY29uc3R7c3RhdHVzfT1vZmZlcjtcblxuc3dpdGNoKHN0YXR1cyl7XG5jYXNlJ2RlY2xpbmUnOlxuY2FzZSdjYW5jZWwnOlxuY2FzZSdyZWplY3RlZCc6XG5pbmJveFN0YXRlLmRlbGV0ZShpZCk7XG5yZXR1cm47XG5jYXNlJ2FjY2VwdCc6XG5hc3NlcnQoaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5oYXMoaWQpKTtcbnZvaWQgRS53aGVuKGlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQuZ2V0KGlkKS5wcm9taXNlLChyZXN1bHQpPT57XG5jb25zdCBzdHlsZT1wYXNzU3R5bGVPZihyZXN1bHQpO1xuY29uc3QgYWN0aXZlPVxuc3R5bGU9PT0ncmVtb3RhYmxlJ3x8XG5zdHlsZT09PSdjb3B5UmVjb3JkJyYmJ2ludml0YXRpb25NYWtlcnMnaW4gcmVzdWx0O1xuaWYoIWFjdGl2ZSl7XG5pbmJveFN0YXRlLmRlbGV0ZShpZCk7XG4gfVxuIH0pO1xuYnJlYWs7XG5jYXNlJ3BlbmRpbmcnOlxuY2FzZSdjb21wbGV0ZSc6XG5kZWZhdWx0On1cblxuIH07XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUluYm94U3RhdGUoaWQsb2ZmZXIsZG9QdXNoPXRydWUpe1xuLy9cbmNvbnN0e3Byb3Bvc2FsVGVtcGxhdGV9PW9mZmVyO1xuY29uc3R7aW5zdGFuY2UsaW5zdGFsbGF0aW9uLGludml0YXRpb25EZXRhaWxzfT1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmlmKCFpbnN0YW5jZXx8IWluc3RhbGxhdGlvbil7XG4vL1xuLy9cbnJldHVybjtcbiB9XG5jb25zdCBpbnN0YW5jZURpc3BsYXk9ZGlzcGxheShpbnN0YW5jZSk7XG5jb25zdCBpbnN0YWxsYXRpb25EaXNwbGF5PWRpc3BsYXkoaW5zdGFsbGF0aW9uKTtcbmNvbnN0IGFscmVhZHlEaXNwbGF5ZWQ9XG5pbmJveFN0YXRlLmhhcyhpZCkmJmluYm94U3RhdGUuZ2V0KGlkKS5wcm9wb3NhbEZvckRpc3BsYXk7XG5cbmNvbnN0IGF1Z21lbnRlZEludml0YXRpb25EZXRhaWxzPVxuYXdhaXQgZXhwYW5kSW52aXRhdGlvbkJyYW5kcyhpbnZpdGF0aW9uRGV0YWlscyk7XG5cbmNvbnN0IG9mZmVyRm9yRGlzcGxheT17XG4uLi5vZmZlcixcbi8vXG4vL1xuLy9cbmFjdGlvbnM6dW5kZWZpbmVkLFxuaW5zdGFsbGF0aW9uOnVuZGVmaW5lZCxcbmluc3RhbmNlOnVuZGVmaW5lZCxcbnByb3Bvc2FsVGVtcGxhdGUsXG5pbnZpdGF0aW9uRGV0YWlsczpkaXNwbGF5KGF1Z21lbnRlZEludml0YXRpb25EZXRhaWxzKSxcbmluc3RhbmNlUGV0bmFtZTppbnN0YW5jZURpc3BsYXkucGV0bmFtZSxcbmluc3RhbGxhdGlvblBldG5hbWU6aW5zdGFsbGF0aW9uRGlzcGxheS5wZXRuYW1lLFxucHJvcG9zYWxGb3JEaXNwbGF5OmRpc3BsYXlQcm9wb3NhbChhbHJlYWR5RGlzcGxheWVkfHxwcm9wb3NhbFRlbXBsYXRlKX07XG5cblxuaW5ib3hTdGF0ZS5zZXQoaWQsb2ZmZXJGb3JEaXNwbGF5KTtcbmlmKGRvUHVzaCl7XG4vL1xub2ZmZXJzVXBkYXRlci51cGRhdGVTdGF0ZShbb2ZmZXJGb3JEaXNwbGF5XSk7XG5pbmJveFN0YXRlQ2hhbmdlSGFuZGxlcihnZXRJbmJveFN0YXRlKCkpO1xuIH1cbnBydW5lT2ZmZXJXaGVuSW5hY3RpdmUoaWQpO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWxsSW5ib3hTdGF0ZSgpe1xuYXdhaXQgUHJvbWlzZS5hbGwoXG5BcnJheS5mcm9tKGluYm94U3RhdGUuZW50cmllcygpKS5tYXAoKFtpZCxvZmZlcl0pPT5cbi8vXG51cGRhdGVJbmJveFN0YXRlKGlkLG9mZmVyLGZhbHNlKSkpO1xuXG5cbi8vXG5vZmZlcnNVcGRhdGVyLnVwZGF0ZVN0YXRlKFsuLi5pbmJveFN0YXRlLnZhbHVlcygpXSk7XG5pbmJveFN0YXRlQ2hhbmdlSGFuZGxlcihnZXRJbmJveFN0YXRlKCkpO1xuIH1cblxuY29uc3R7dXBkYXRlcjppc3N1ZXJzVXBkYXRlcixub3RpZmllcjppc3N1ZXJzTm90aWZpZXJ9PVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5tYWtlTm90aWZpZXJLaXQoW10pO1xuXG5cbmZ1bmN0aW9uIHVwZGF0ZUFsbElzc3VlcnNTdGF0ZSgpe1xuaXNzdWVyc1VwZGF0ZXIudXBkYXRlU3RhdGUoXG5bLi4uYnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCldLm1hcCgoW3BldG5hbWUsYnJhbmRdKT0+e1xuY29uc3QgaXNzdWVyUmVjb3JkPWJyYW5kVGFibGUuZ2V0QnlCcmFuZChicmFuZCk7XG5yZXR1cm5bXG5wZXRuYW1lLFxue1xuLi4uaXNzdWVyUmVjb3JkLFxuaXNzdWVyQm9hcmRJZDppc3N1ZXJUb0JvYXJkSWQuZ2V0KGlzc3VlclJlY29yZC5pc3N1ZXIpfV07XG5cblxuIH0pKTtcblxuIH1cblxuLy9cbi8vXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVBbGxTdGF0ZSgpe1xudXBkYXRlQWxsSXNzdWVyc1N0YXRlKCk7XG5hd2FpdCB1cGRhdGVBbGxQdXJzZVN0YXRlKCk7XG5hd2FpdCB1cGRhdGVBbGxJbmJveFN0YXRlKCk7XG4gfVxuXG4vL1xuLy9cbmZ1bmN0aW9uIHVwZGF0ZU9yUmVzdWJzY3JpYmUoaWQsc2VhdCx1cGRhdGUpe1xuY29uc3R7dXBkYXRlQ291bnR9PXVwZGF0ZTtcbmFzc2VydCh1cGRhdGVDb3VudD09PXVuZGVmaW5lZCk7XG5pZFRvU2VhdC5kZWxldGUoaWQpO1xuXG5jb25zdCBvZmZlcj1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmNvbnN0IGNvbXBsZXRlZE9mZmVyPWFkZE1ldGEoe1xuLi4ub2ZmZXIsXG5zdGF0dXM6J2NvbXBsZXRlJ30pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLGNvbXBsZXRlZE9mZmVyKTtcbnZvaWQgdXBkYXRlSW5ib3hTdGF0ZShpZCxjb21wbGV0ZWRPZmZlcik7XG4gfVxuXG4vKlxuXG5cblxuXG4gICAqL1xuZnVuY3Rpb24gc3Vic2NyaWJlVG9VcGRhdGVzKGlkLHNlYXQpe1xucmV0dXJuIEUoRShzZWF0KS5nZXRFeGl0U3Vic2NyaWJlcigpKS5cbnN1YnNjcmliZUFmdGVyKCkuXG50aGVuKCh1cGRhdGUpPT51cGRhdGVPclJlc3Vic2NyaWJlKGlkLHNlYXQsdXBkYXRlKSk7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBleGVjdXRlT2ZmZXIoY29tcGlsZWRPZmZlclApe1xuLy9cbi8vXG4vL1xuY29uc3R7XG5pbnZpdGVQLFxucHVyc2VLZXl3b3JkUmVjb3JkLFxucHJvcG9zYWwsXG5hcmd1bWVudHM6YXJnc309XG5hd2FpdCBjb21waWxlZE9mZmVyUDtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBheW1lbnRUb1B1cnNlPW5ldyBNYXAoKTtcblxuLy9cbi8vXG5jb25zdCBrZXl3b3JkUGF5bWVudFBzPU9iamVjdC5lbnRyaWVzKHByb3Bvc2FsLmdpdmV8fGhhcmRlbih7fSkpLm1hcChcbmFzeW5jKFtrZXl3b3JkLGFtb3VudF0pPT57XG5jb25zdCBwdXJzZT1wdXJzZUtleXdvcmRSZWNvcmRba2V5d29yZF07XG5wdXJzZSE9PXVuZGVmaW5lZHx8XG5GYWlsIGBwdXJzZSB3YXMgbm90IGZvdW5kIGZvciBrZXl3b3JkICR7cShrZXl3b3JkKX1gO1xuXG5jb25zdCBwYXltZW50PWF3YWl0IEUocHVyc2UpLndpdGhkcmF3KGFtb3VudCk7XG5wYXltZW50VG9QdXJzZS5zZXQocGF5bWVudCxwdXJzZSk7XG5yZXR1cm5ba2V5d29yZCxwYXltZW50XTtcbiB9KTtcblxuXG4vL1xuLy9cbmNvbnN0IHRyeVJlY2xhaW1pbmdXaXRoZHJhd25QYXltZW50cz0oKT0+XG4vL1xuLy9cblByb21pc2UuYWxsU2V0dGxlZChcbmtleXdvcmRQYXltZW50UHMubWFwKGFzeW5jKGtleXdvcmRQYXltZW50UCk9Pntcbi8vXG4vL1xuY29uc3RbX2tleXdvcmQscGF5bWVudF09YXdhaXQga2V5d29yZFBheW1lbnRQO1xuXG4vL1xuY29uc3QgcHVyc2U9cGF5bWVudFRvUHVyc2UuZ2V0KHBheW1lbnQpO1xuaWYocHVyc2U9PT11bmRlZmluZWQpe1xuLy9cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuXG4vL1xudHJ5e1xucmV0dXJuIGFkZFBheW1lbnQocGF5bWVudCxwdXJzZSk7XG4gfWZpbmFsbHl7XG4vL1xucGF5bWVudFRvUHVyc2UuZGVsZXRlKHBheW1lbnQpO1xuIH1cbiB9KSk7XG5cblxuLy9cbi8vXG5jb25zdCB3aXRoZHJhd0FsbFBheW1lbnRzPVByb21pc2UuYWxsKGtleXdvcmRQYXltZW50UHMpO1xud2l0aGRyYXdBbGxQYXltZW50cy5jYXRjaCh0cnlSZWNsYWltaW5nV2l0aGRyYXduUGF5bWVudHMpO1xuXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbmNvbnN0IHBheW1lbnRLZXl3b3Jkcz1hd2FpdCB3aXRoZHJhd0FsbFBheW1lbnRzO1xuXG5jb25zdCBwYXltZW50S2V5d29yZFJlY29yZD1oYXJkZW4oT2JqZWN0LmZyb21FbnRyaWVzKHBheW1lbnRLZXl3b3JkcykpO1xuXG5jb25zdCBzZWF0PUUoem9lKS5vZmZlcihcbmludml0ZVAsXG5oYXJkZW4ocHJvcG9zYWwpLFxucGF5bWVudEtleXdvcmRSZWNvcmQsXG5hcmdzKTtcblxuLy9cbi8vXG52b2lkIHNlYXQuZmluYWxseSh0cnlSZWNsYWltaW5nV2l0aGRyYXduUGF5bWVudHMpO1xuXG4vL1xuLy9cbmNvbnN0IGRlcG9zaXRlZFA9RShzZWF0KS5cbmdldFBheW91dHMoKS5cbnRoZW4oKHBheW91dE9iaik9PntcbnJldHVybiBQcm9taXNlLmFsbChcbk9iamVjdC5lbnRyaWVzKHBheW91dE9iaikubWFwKChba2V5d29yZCxwYXlvdXRQXSk9Pntcbi8vXG4vL1xuY29uc3QgcHVyc2VPclVuZGVmaW5lZD1wdXJzZUtleXdvcmRSZWNvcmRba2V5d29yZF07XG5cbnJldHVybiBhZGRQYXltZW50KHBheW91dFAscHVyc2VPclVuZGVmaW5lZCk7XG4gfSkpO1xuXG4gfSk7XG5cbi8vXG4vL1xuLy9cbnZvaWQgZGVwb3NpdGVkUC5maW5hbGx5KHRyeVJlY2xhaW1pbmdXaXRoZHJhd25QYXltZW50cyk7XG5cbi8vXG4vL1xucmV0dXJue2RlcG9zaXRlZFAsc2VhdH07XG4gfVxuXG4vL1xuXG5jb25zdCBhZGRJc3N1ZXI9YXN5bmMocGV0bmFtZUZvckJyYW5kLGlzc3VlclAsbWFrZVB1cnNlPWZhbHNlKT0+e1xuY29uc3QgaXNzdWVyPWF3YWl0IGlzc3VlclA7XG5jb25zdCByZWNQPWJyYW5kVGFibGUuaGFzQnlJc3N1ZXIoaXNzdWVyKT9cbmJyYW5kVGFibGUuZ2V0QnlJc3N1ZXIoaXNzdWVyKTpcbmJyYW5kVGFibGUuaW5pdElzc3Vlcihpc3N1ZXIsYWRkTWV0YSk7XG5jb25zdHticmFuZH09YXdhaXQgcmVjUDtcbmF3YWl0IGluaXRJc3N1ZXJUb0JvYXJkSWQoaXNzdWVyLGJyYW5kKTtcbmNvbnN0IGFkZEJyYW5kUGV0bmFtZT0oKT0+e1xubGV0IHA7XG5jb25zdCBhbHJlYWR5PWJyYW5kTWFwcGluZy52YWxUb1BldG5hbWUuaGFzKGJyYW5kKTtcbnBldG5hbWVGb3JCcmFuZD1icmFuZE1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZUZvckJyYW5kLGJyYW5kKTtcbmlmKCFhbHJlYWR5JiZtYWtlUHVyc2Upe1xucD1tYWtlRW1wdHlQdXJzZShwZXRuYW1lRm9yQnJhbmQscGV0bmFtZUZvckJyYW5kLHRydWUpO1xuIH1lbHNle1xucD1Qcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcbiB9XG5yZXR1cm4gRS53aGVuKHAsKF8pPT5wZXRuYW1lRm9yQnJhbmQpO1xuIH07XG5yZXR1cm4gYWRkQnJhbmRQZXRuYW1lKCkudGhlbihhc3luYyhicmFuZE5hbWUpPT57XG5hd2FpdCB1cGRhdGVBbGxJc3N1ZXJzU3RhdGUoKTtcbnJldHVybiBicmFuZE5hbWU7XG4gfSk7XG4gfTtcblxuY29uc3QgcHVibGlzaElzc3Vlcj1hc3luYyhicmFuZCk9PntcbmNvbnN0e2lzc3Vlcn09YnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcbmNvbnN0IGlzc3VlckJvYXJkSWQ9YXdhaXQgaW5pdElzc3VlclRvQm9hcmRJZChpc3N1ZXIsYnJhbmQpO1xudXBkYXRlQWxsSXNzdWVyc1N0YXRlKCk7XG5yZXR1cm4gaXNzdWVyQm9hcmRJZDtcbiB9O1xuXG5jb25zdHt1cGRhdGVyOmNvbnRhY3RzVXBkYXRlcixub3RpZmllcjpjb250YWN0c05vdGlmaWVyfT1cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5tYWtlTm90aWZpZXJLaXQoW10pO1xuXG5cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgYWRkQ29udGFjdD1hc3luYyhwZXRuYW1lLGFjdGlvbnMsYWRkcmVzcz11bmRlZmluZWQpPT57XG4vL1xuY29uc3QgYWxyZWFkeT1hd2FpdCBFKGJvYXJkKS5oYXMoYWN0aW9ucyk7XG4vKiAgICAgICAgICAgICAgKi9cbmxldCBkZXBvc2l0RmFjZXQ7XG5pZihhbHJlYWR5KXtcbmRlcG9zaXRGYWNldD1hY3Rpb25zO1xuIH1lbHNle1xuZGVwb3NpdEZhY2V0PUZhcihXYWxsZXROYW1lLmRlcG9zaXRGYWNldCx7XG5yZWNlaXZlKHBheW1lbnRQKXtcbnJldHVybiBFKGFjdGlvbnMpLnJlY2VpdmUocGF5bWVudFApO1xuIH19KTtcblxuIH1cbmNvbnN0IGRlcG9zaXRCb2FyZElkPWF3YWl0IEUoYm9hcmQpLmdldElkKGRlcG9zaXRGYWNldCk7XG5jb25zdCBmb3VuZD1bLi4uY29udGFjdE1hcHBpbmcucGV0bmFtZVRvVmFsLmVudHJpZXMoKV0uZmluZChcbihbX3BuLHtkZXBvc2l0Qm9hcmRJZDpkYmlkfV0pPT5kZXBvc2l0Qm9hcmRJZD09PWRiaWQpO1xuXG4hZm91bmR8fFxuRmFpbCBgJHtxKGZvdW5kJiZmb3VuZFswXSl9IGlzIGFscmVhZHkgdGhlIHBldG5hbWUgZm9yIGJvYXJkIElEICR7cShcbmRlcG9zaXRCb2FyZElkKVxuIH1gO1xuXG5jb25zdCBjb250YWN0PWhhcmRlbihcbmFkZE1ldGEoe1xuYWN0aW9ucyxcbmFkZHJlc3MsXG5kZXBvc2l0Qm9hcmRJZH0pKTtcblxuXG5cbmNvbnRhY3RNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKHBldG5hbWUsY29udGFjdCk7XG5jb250YWN0c1VwZGF0ZXIudXBkYXRlU3RhdGUoWy4uLmNvbnRhY3RNYXBwaW5nLnBldG5hbWVUb1ZhbC5lbnRyaWVzKCldKTtcbnJldHVybiBjb250YWN0O1xuIH07XG5cbmNvbnN0IGFkZEluc3RhbmNlPShwZXRuYW1lLGluc3RhbmNlSGFuZGxlKT0+e1xuLy9cbi8vXG4vL1xucGV0bmFtZT1pbnN0YW5jZU1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZSxpbnN0YW5jZUhhbmRsZSk7XG4vL1xudm9pZCB1cGRhdGVBbGxTdGF0ZSgpO1xucmV0dXJuIGBpbnN0YW5jZSAke3EocGV0bmFtZSl9IHN1Y2Nlc3NmdWxseSBhZGRlZCB0byB3YWxsZXRgO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBpbnRlcm5hbFVuc2FmZUltcG9ydFB1cnNlPWFzeW5jKFxuYnJhbmRQZXRuYW1lLFxucGV0bmFtZUZvclB1cnNlLFxuZGVmYXVsdEF1dG9EZXBvc2l0LFxucHVyc2VUb0ltcG9ydCk9Plxue1xuY29uc3QgYnJhbmQ9YnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQoYnJhbmRQZXRuYW1lKTtcbmNvbnN0e2lzc3Vlcn09YnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcblxuLyogICAgICAgICAgICAgICAgKi9cbmNvbnN0IHB1cnNlPWF3YWl0KHB1cnNlVG9JbXBvcnR8fEUoaXNzdWVyKS5tYWtlRW1wdHlQdXJzZSgpKTtcblxucHVyc2VUb0JyYW5kLmluaXQocHVyc2UsYnJhbmQpO1xucGV0bmFtZUZvclB1cnNlPXB1cnNlTWFwcGluZy5zdWdnZXN0UGV0bmFtZShwZXRuYW1lRm9yUHVyc2UscHVyc2UpO1xuXG5pZihkZWZhdWx0QXV0b0RlcG9zaXQmJiFicmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5oYXMoYnJhbmQpKXtcbi8vXG4vL1xuYXdhaXQgZG9FbmFibGVBdXRvRGVwb3NpdChwZXRuYW1lRm9yUHVyc2UsZmFsc2UpO1xuIH1cblxuYXdhaXQgdXBkYXRlUHVyc2VzU3RhdGUocGV0bmFtZUZvclB1cnNlLHB1cnNlKTtcblxuLy9cbnZvaWQgb2JzZXJ2ZU5vdGlmaWVyKEUocHVyc2UpLmdldEN1cnJlbnRBbW91bnROb3RpZmllcigpLHtcbnVwZGF0ZVN0YXRlKF9iYWxhbmNlKXtcbnVwZGF0ZVB1cnNlc1N0YXRlKHB1cnNlTWFwcGluZy52YWxUb1BldG5hbWUuZ2V0KHB1cnNlKSxwdXJzZSkuY2F0Y2goXG4oZSk9PmNvbnNvbGUuZXJyb3IoJ2Nhbm5vdCB1cGRhdGVTdGF0ZScsZSkpO1xuXG4gfSxcbmZhaWwocmVhc29uKXtcbmNvbnNvbGUuZXJyb3IoIGBmYWlsZWQgdXBkYXRlU3RhdGUgb2JzZXJ2ZXJgLHJlYXNvbik7XG4gfX0pO1xuXG5cbnJldHVybiBwZXRuYW1lRm9yUHVyc2U7XG4gfTtcblxuLy9cbi8qXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZUVtcHR5UHVyc2U9KFxuYnJhbmRQZXRuYW1lLFxucGV0bmFtZUZvclB1cnNlLFxuZGVmYXVsdEF1dG9EZXBvc2l0PXRydWUpPT5cblxuaW50ZXJuYWxVbnNhZmVJbXBvcnRQdXJzZShcbmJyYW5kUGV0bmFtZSxcbnBldG5hbWVGb3JQdXJzZSxcbmRlZmF1bHRBdXRvRGVwb3NpdCxcbnVuZGVmaW5lZCk7XG5cblxuLypcblxuXG4gICAqL1xuYXN5bmMgZnVuY3Rpb24gZGVwb3NpdChwdXJzZVBldG5hbWUscGF5bWVudCl7XG5jb25zdCBwdXJzZT1wdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldChwdXJzZVBldG5hbWUpO1xucmV0dXJuIEUocHVyc2UpLmRlcG9zaXQocGF5bWVudCk7XG4gfVxuXG5mdW5jdGlvbiBnZXRQdXJzZXMoKXtcbnJldHVyblsuLi5wdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmVudHJpZXMoKV07XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmZ1bmN0aW9uIGdldFB1cnNlKHB1cnNlUGV0bmFtZSl7XG5yZXR1cm4gcHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocHVyc2VQZXRuYW1lKTtcbiB9XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnVuY3Rpb24gZ2V0UHVyc2VJc3N1ZXIocHVyc2VQZXRuYW1lKXtcbmNvbnN0IHB1cnNlPXB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHB1cnNlUGV0bmFtZSk7XG5jb25zdCBicmFuZD1wdXJzZVRvQnJhbmQuZ2V0KHB1cnNlKTtcbmNvbnN0e2lzc3Vlcn09YnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKTtcbnJldHVybiBpc3N1ZXI7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZnVuY3Rpb24gZ2V0T2ZmZXJzKHtvcmlnaW49bnVsbH09e30pe1xuLy9cbnJldHVyblsuLi5pZFRvT2ZmZXIuZW50cmllcygpXS5cbmZpbHRlcihcbihbX2lkLG9mZmVyXSk9Plxub3JpZ2luPT09bnVsbHx8XG5vZmZlci5yZXF1ZXN0Q29udGV4dCYmb2ZmZXIucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbj09PW9yaWdpbikuXG5cbnNvcnQoKFtpZDFdLFtpZDJdKT0+Y21wKGlkMSxpZDIpKS5cbm1hcCgoW19pZCxvZmZlcl0pPT5oYXJkZW4ob2ZmZXIpKTtcbiB9XG5cbmNvbnN0IGNvbXBpbGVQcm9wb3NhbD0ocHJvcG9zYWxUZW1wbGF0ZSk9PntcbmNvbnN0e1xud2FudD1oYXJkZW4oe30pLFxuZ2l2ZT1oYXJkZW4oe30pLFxuZXhpdD17b25EZW1hbmQ6bnVsbH0sXG5hcmd1bWVudHM6YXJnc309XG5wcm9wb3NhbFRlbXBsYXRlO1xuXG5jb25zdCBwdXJzZUtleXdvcmRSZWNvcmQ9e307XG5cbmNvbnN0IGNvbXBpbGU9KGFtb3VudEtleXdvcmRSZWNvcmQpPT57XG5yZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuT2JqZWN0LmVudHJpZXMoYW1vdW50S2V5d29yZFJlY29yZCkubWFwKFxuKFtrZXl3b3JkLHtwdXJzZVBldG5hbWUsdmFsdWV9XSk9Pntcbi8vXG5pZih0eXBlb2YgdmFsdWU9PT0nbnVtYmVyJyl7XG52YWx1ZT1OYXQodmFsdWUpO1xuIH1cbmNvbnN0IHB1cnNlPWdldFB1cnNlKHB1cnNlUGV0bmFtZSk7XG5wdXJzZUtleXdvcmRSZWNvcmRba2V5d29yZF09cHVyc2U7XG5jb25zdCBicmFuZD1wdXJzZVRvQnJhbmQuZ2V0KHB1cnNlKTtcblxucmV0dXJuW2tleXdvcmQse2JyYW5kLHZhbHVlfV07XG4gfSkpO1xuXG5cbiB9O1xuXG5jb25zdCBwcm9wb3NhbD17XG53YW50OmNvbXBpbGUod2FudCksXG5naXZlOmNvbXBpbGUoZ2l2ZSksXG5leGl0fTtcblxuXG5yZXR1cm57cHJvcG9zYWwsYXJndW1lbnRzOmFyZ3MscHVyc2VLZXl3b3JkUmVjb3JkfTtcbiB9O1xuXG5jb25zdCBjb21waWxlT2ZmZXI9YXN5bmMob2ZmZXIpPT57XG5jb25zdHtcbnByb3Bvc2FsLFxucHVyc2VLZXl3b3JkUmVjb3JkLFxuYXJndW1lbnRzOmFyZ3N9PVxuY29tcGlsZVByb3Bvc2FsKG9mZmVyLnByb3Bvc2FsVGVtcGxhdGUpO1xuXG5jb25zdCB6b2VJc3N1ZXI9aXNzdWVyTWFuYWdlci5nZXQoWk9FX0lOVklURV9CUkFORF9QRVROQU1FKTtcbmNvbnN0e2JyYW5kOmludml0YXRpb25CcmFuZH09YnJhbmRUYWJsZS5nZXRCeUlzc3Vlcih6b2VJc3N1ZXIpO1xuY29uc3QgaW52aXRhdGlvblA9ZmluZE9yTWFrZUludml0YXRpb24oXG5pZFRvT2ZmZXJSZXN1bHRQcm9taXNlS2l0LFxuYm9hcmQsXG56b2UsXG56b2VJbnZpdGVQdXJzZSxcbmludml0YXRpb25CcmFuZCxcbm9mZmVyKTtcblxuXG5jb25zdCBpbnZpdGF0aW9uRGV0YWlscz1hd2FpdCBFKHpvZSkuZ2V0SW52aXRhdGlvbkRldGFpbHMoaW52aXRhdGlvblApO1xuY29uc3R7aW5zdGFsbGF0aW9uLGluc3RhbmNlfT1pbnZpdGF0aW9uRGV0YWlscztcblxuY29uc3QgY29tcGlsZWQ9e1xuYXJndW1lbnRzOmFyZ3MsXG5wcm9wb3NhbCxcbmludml0ZVA6aW52aXRhdGlvblAsXG5wdXJzZUtleXdvcmRSZWNvcmQsXG5pbnZpdGF0aW9uRGV0YWlscyxcbmluc3RhbGxhdGlvbixcbmluc3RhbmNlfTtcblxucmV0dXJuIGNvbXBpbGVkO1xuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGRhcHBPcmlnaW5zPW1ha2VTY2FsYXJNYXBTdG9yZSgnZGFwcE9yaWdpbicpO1xuY29uc3R7bm90aWZpZXI6ZGFwcHNOb3RpZmllcix1cGRhdGVyOmRhcHBzVXBkYXRlcn09XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZU5vdGlmaWVyS2l0KFtdKTtcblxuY29uc3QgdXBkYXRlRGFwcD0oZGFwcFJlY29yZCk9PntcbmhhcmRlbihhZGRNZXRhKGRhcHBSZWNvcmQpKTtcbmRhcHBPcmlnaW5zLnNldChkYXBwUmVjb3JkLm9yaWdpbixkYXBwUmVjb3JkKTtcbmRhcHBzVXBkYXRlci51cGRhdGVTdGF0ZShbLi4uZGFwcE9yaWdpbnMudmFsdWVzKCldKTtcbiB9O1xuXG5jb25zdCBkZWxldGVEYXBwPSh7b3JpZ2lufSk9PntcbmRhcHBPcmlnaW5zLmRlbGV0ZShvcmlnaW4pO1xuZGFwcHNVcGRhdGVyLnVwZGF0ZVN0YXRlKFsuLi5kYXBwT3JpZ2lucy52YWx1ZXMoKV0pO1xuIH07XG5cbmNvbnN0IHNoYXJlZENhY2hlQ29vcmRpbmF0b3I9bWFrZVNjYWxhclN0b3JlQ29vcmRpbmF0b3IoXG5tYWtlU2NhbGFyQmlnTWFwU3RvcmUoIGBzaGFyZWQgY2FjaGVgKSk7XG5cblxuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckRhcHBBcHByb3ZhbChcbnN1Z2dlc3RlZFBldG5hbWUsXG5vcmlnaW4sXG5ub3RZZXRFbmFibGVkPSgpPT57IH0pXG57XG5sZXQgZGFwcFJlY29yZDtcbmlmKGRhcHBPcmlnaW5zLmhhcyhvcmlnaW4pKXtcbmRhcHBSZWNvcmQ9ZGFwcE9yaWdpbnMuZ2V0KG9yaWdpbik7XG4gfWVsc2V7XG5sZXQgcmVzb2x2ZTtcbmxldCByZWplY3Q7XG5sZXQgYXBwcm92YWxQO1xuXG5jb25zdCBjYWNoZUNvb3JkaW5hdG9yPW1ha2VTY2FsYXJTdG9yZUNvb3JkaW5hdG9yKFxubWFrZVNjYWxhckJpZ01hcFN0b3JlKCBgb3JpZ2luICR7b3JpZ2lufSBjYWNoZWApKTtcblxuZGFwcFJlY29yZD1hZGRNZXRhKHtcbnN1Z2dlc3RlZFBldG5hbWUsXG5wZXRuYW1lOnN1Z2dlc3RlZFBldG5hbWUsXG5vcmlnaW4sXG5jYWNoZUNvb3JkaW5hdG9yLFxuYXBwcm92YWxQLFxuZW5hYmxlOmZhbHNlLFxuYWN0aW9uczpGYXIoJ2RhcHAuYWN0aW9ucycse1xuc2V0UGV0bmFtZShwZXRuYW1lKXtcbmlmKGRhcHBSZWNvcmQucGV0bmFtZT09PXBldG5hbWUpe1xucmV0dXJuIGRhcHBSZWNvcmQuYWN0aW9ucztcbiB9XG5pZihlZGdlTWFwcGluZy52YWxUb1BldG5hbWUuaGFzKG9yaWdpbikpe1xuZWRnZU1hcHBpbmcucmVuYW1lUGV0bmFtZShwZXRuYW1lLG9yaWdpbik7XG4gfWVsc2V7XG5wZXRuYW1lPWVkZ2VNYXBwaW5nLnN1Z2dlc3RQZXRuYW1lKHBldG5hbWUsb3JpZ2luKTtcbiB9XG5kYXBwUmVjb3JkPWFkZE1ldGEoe1xuLi4uZGFwcFJlY29yZCxcbnBldG5hbWV9KTtcblxudXBkYXRlRGFwcChkYXBwUmVjb3JkKTtcbnZvaWQgdXBkYXRlQWxsU3RhdGUoKTtcbnJldHVybiBkYXBwUmVjb3JkLmFjdGlvbnM7XG4gfSxcbmVuYWJsZSgpe1xuLy9cbmRhcHBSZWNvcmQ9YWRkTWV0YSh7XG4uLi5kYXBwUmVjb3JkLFxuZW5hYmxlOnRydWV9KTtcblxuZWRnZU1hcHBpbmcuc3VnZ2VzdFBldG5hbWUoZGFwcFJlY29yZC5wZXRuYW1lLG9yaWdpbik7XG51cGRhdGVEYXBwKGRhcHBSZWNvcmQpO1xuXG4vL1xucmVzb2x2ZSgpO1xucmV0dXJuIGRhcHBSZWNvcmQuYWN0aW9ucztcbiB9LFxuZGlzYWJsZShyZWFzb249dW5kZWZpbmVkKXtcbi8vXG5pZihyZWplY3Qpe1xucmVqZWN0KHJlYXNvbik7XG4gfVxuLy9cbih7cmVzb2x2ZSxyZWplY3QscHJvbWlzZTphcHByb3ZhbFB9PW1ha2VQcm9taXNlS2l0KCkpO1xuZGFwcFJlY29yZD1hZGRNZXRhKHtcbi4uLmRhcHBSZWNvcmQsXG5lbmFibGU6ZmFsc2UsXG5hcHByb3ZhbFB9KTtcblxudXBkYXRlRGFwcChkYXBwUmVjb3JkKTtcbnJldHVybiBkYXBwUmVjb3JkLmFjdGlvbnM7XG4gfSxcbmRlbGV0ZSgpe1xuaWYocmVqZWN0KXtcbnJlamVjdCgnRGFwcCBkZWxldGVkJyk7XG4gfVxuZGVsZXRlRGFwcChkYXBwUmVjb3JkKTtcbiB9fSl9KTtcblxuXG5cbi8vXG5kYXBwT3JpZ2lucy5pbml0KG9yaWdpbixkYXBwUmVjb3JkKTtcblxuLy9cbmRhcHBSZWNvcmQuYWN0aW9ucy5kaXNhYmxlKCk7XG4gfVxuXG5pZighZGFwcFJlY29yZC5lbmFibGUpe1xubm90WWV0RW5hYmxlZCgpO1xuIH1cbmF3YWl0IGRhcHBSZWNvcmQuYXBwcm92YWxQO1xuLy9cbi8vXG5yZXR1cm4gZGFwcE9yaWdpbnMuZ2V0KG9yaWdpbik7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBhZGRPZmZlcihyYXdPZmZlcixyZXF1ZXN0Q29udGV4dD17fSl7XG5jb25zdCBkYXBwT3JpZ2luPVxucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbnx8cmVxdWVzdENvbnRleHQub3JpZ2lufHwndW5rbm93bic7XG5jb25zdHtpZDpyYXdJZH09cmF3T2ZmZXI7XG5jb25zdCBpZD1tYWtlSWQoZGFwcE9yaWdpbixyYXdJZCk7XG5jb25zdCBvZmZlcj1oYXJkZW4oXG5hZGRNZXRhKHtcbi4uLnJhd09mZmVyLFxucmF3SWQsXG5pZCxcbnJlcXVlc3RDb250ZXh0OnsuLi5yZXF1ZXN0Q29udGV4dCxkYXBwT3JpZ2lufSxcbnN0YXR1czp1bmRlZmluZWR9KSk7XG5cblxuaWRUb09mZmVyLmluaXQoaWQsb2ZmZXIpO1xuaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5pbml0KGlkLG1ha2VQcm9taXNlS2l0KCkpO1xuYXdhaXQgdXBkYXRlSW5ib3hTdGF0ZShpZCxvZmZlcik7XG5cbi8vXG5jb25zdCBjb21waWxlZE9mZmVyUD1jb21waWxlT2ZmZXIob2ZmZXIpO1xuaWRUb0NvbXBpbGVkT2ZmZXJQLnNldChpZCxjb21waWxlZE9mZmVyUCk7XG5cbi8vXG5hd2FpdCB1cGRhdGVJbmJveFN0YXRlKGlkLGlkVG9PZmZlci5nZXQoaWQpKTtcbmNvbnN0e2luc3RhbGxhdGlvbixpbnN0YW5jZSxpbnZpdGF0aW9uRGV0YWlsc309YXdhaXQgY29tcGlsZWRPZmZlclA7XG5cbmlmKCFpZFRvT2ZmZXIuaGFzKGlkKSl7XG5yZXR1cm4gcmF3SWQ7XG4gfVxuaWRUb09mZmVyLnNldChcbmlkLFxuaGFyZGVuKFxuYWRkTWV0YSh7XG4uLi5pZFRvT2ZmZXIuZ2V0KGlkKSxcbmluc3RhbGxhdGlvbixcbmluc3RhbmNlLFxuaW52aXRhdGlvbkRldGFpbHN9KSkpO1xuXG5cblxuYXdhaXQgdXBkYXRlSW5ib3hTdGF0ZShpZCxpZFRvT2ZmZXIuZ2V0KGlkKSk7XG5yZXR1cm4gcmF3SWQ7XG4gfVxuXG5mdW5jdGlvbiBjb25zdW1tYXRlZChvZmZlcil7XG5pZihvZmZlci5zdGF0dXMhPT11bmRlZmluZWQpe1xucmV0dXJuIHRydWU7XG4gfVxuaWYob2ZmZXIuYWN0aW9ucyl7XG5FKG9mZmVyLmFjdGlvbnMpLmhhbmRsZWQob2ZmZXIpO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGRlY2xpbmVPZmZlcihpZCl7XG5jb25zdCBvZmZlcj1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmlmKGNvbnN1bW1hdGVkKG9mZmVyKSl7XG5yZXR1cm47XG4gfVxuXG4vL1xuY29uc3QgZGVjbGluZWRPZmZlcj1hZGRNZXRhKHtcbi4uLm9mZmVyLFxuc3RhdHVzOidkZWNsaW5lJ30pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLGRlY2xpbmVkT2ZmZXIpO1xudm9pZCB1cGRhdGVJbmJveFN0YXRlKGlkLGRlY2xpbmVkT2ZmZXIpO1xuXG4vL1xuY29uc3QgY29tcGlsZWRPZmZlclA9aWRUb0NvbXBpbGVkT2ZmZXJQLmdldChpZCk7XG5pZighY29tcGlsZWRPZmZlclApe1xucmV0dXJuO1xuIH1cblxuYXdhaXQgYWRkUGF5bWVudChFLmdldChjb21waWxlZE9mZmVyUCkuaW52aXRlUCkuY2F0Y2goY29uc29sZS5lcnJvcik7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBjYW5jZWxPZmZlcihpZCl7XG5jb25zdCBjb21wbGV0ZUZuPWlkVG9Db21wbGV0ZS5nZXQoaWQpO1xuaWYoIWNvbXBsZXRlRm4pe1xucmV0dXJuIGZhbHNlO1xuIH1cblxuY29tcGxldGVGbigpLlxudGhlbigoXyk9PntcbmlkVG9Db21wbGV0ZS5kZWxldGUoaWQpO1xuY29uc3Qgb2ZmZXI9aWRUb09mZmVyLmdldChpZCk7XG5jb25zdCBjYW5jZWxsZWRPZmZlcj1hZGRNZXRhKHtcbi4uLm9mZmVyLFxuc3RhdHVzOidjYW5jZWwnfSk7XG5cbmlkVG9PZmZlci5zZXQoaWQsY2FuY2VsbGVkT2ZmZXIpO1xucmV0dXJuIHVwZGF0ZUluYm94U3RhdGUoaWQsY2FuY2VsbGVkT2ZmZXIpO1xuIH0pLlxuY2F0Y2goKGUpPT5jb25zb2xlLmVycm9yKCBgQ2Fubm90IGNhbmNlbCBvZmZlciAke2lkfTpgLGUpKTtcblxucmV0dXJuIHRydWU7XG4gfVxuXG5hc3luYyBmdW5jdGlvbiBhY2NlcHRPZmZlcihpZCl7XG5jb25zdCBvZmZlcj1pZFRvT2ZmZXIuZ2V0KGlkKTtcbmlmKGNvbnN1bW1hdGVkKG9mZmVyKSl7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZXQ9e307XG5sZXQgYWxyZWFkeVJlc29sdmVkPWZhbHNlO1xuY29uc3QgcmVqZWN0ZWQ9KGUpPT57XG5pZihhbHJlYWR5UmVzb2x2ZWQpe1xucmV0dXJuO1xuIH1cbmNvbnN0IHJlamVjdE9mZmVyPWFkZE1ldGEoe1xuLi4ub2ZmZXIsXG5zdGF0dXM6J3JlamVjdGVkJyxcbmVycm9yOiBgJHtlfWB9KTtcblxuaWRUb09mZmVyLnNldChpZCxyZWplY3RPZmZlcik7XG52b2lkIHVwZGF0ZUluYm94U3RhdGUoaWQscmVqZWN0T2ZmZXIpO1xuIH07XG5cbmF3YWl0IG51bGw7XG50cnl7XG5jb25zdCBwZW5kaW5nT2ZmZXI9YWRkTWV0YSh7XG4uLi5vZmZlcixcbnN0YXR1czoncGVuZGluZyd9KTtcblxuaWRUb09mZmVyLnNldChpZCxwZW5kaW5nT2ZmZXIpO1xudm9pZCB1cGRhdGVJbmJveFN0YXRlKGlkLHBlbmRpbmdPZmZlcik7XG5jb25zdCBjb21waWxlZE9mZmVyPWF3YWl0IGlkVG9Db21waWxlZE9mZmVyUC5nZXQoaWQpO1xuXG5jb25zdHtkZXBvc2l0ZWRQLHNlYXR9PWF3YWl0IGV4ZWN1dGVPZmZlcihjb21waWxlZE9mZmVyKTtcblxuaWRUb0NvbXBsZXRlLnNldChpZCwoKT0+e1xuYWxyZWFkeVJlc29sdmVkPXRydWU7XG5yZXR1cm4gRShzZWF0KS50cnlFeGl0KCk7XG4gfSk7XG5pZFRvU2VhdC5zZXQoaWQsc2VhdCk7XG4vL1xuLy9cbnZvaWQgRShzZWF0KS5cbmhhc0V4aXRlZCgpLlxudGhlbigoZXhpdGVkKT0+e1xuaWYoIWV4aXRlZCl7XG5yZXR1cm4gc3Vic2NyaWJlVG9VcGRhdGVzKGlkLHNlYXQpO1xuIH1cbiB9KTtcblxuY29uc3Qgb2ZmZXJSZXN1bHRQPUUoc2VhdCkuZ2V0T2ZmZXJSZXN1bHQoKTtcbmlkVG9PZmZlclJlc3VsdFByb21pc2VLaXQuZ2V0KGlkKS5yZXNvbHZlKG9mZmVyUmVzdWx0UCk7XG5cbnJldD17XG5kZXBvc2l0ZWRQLFxuZGFwcENvbnRleHQ6b2ZmZXIuZGFwcENvbnRleHR9O1xuXG5cbi8vXG5kZXBvc2l0ZWRQLlxudGhlbigoXyk9Pntcbi8vXG5pZighYWxyZWFkeVJlc29sdmVkKXtcbmFscmVhZHlSZXNvbHZlZD10cnVlO1xuY29uc3QgYWNjZXB0ZWRPZmZlcj1hZGRNZXRhKHtcbi4uLnBlbmRpbmdPZmZlcixcbnN0YXR1czonYWNjZXB0J30pO1xuXG5pZFRvT2ZmZXIuc2V0KGlkLGFjY2VwdGVkT2ZmZXIpO1xudm9pZCB1cGRhdGVJbmJveFN0YXRlKGlkLGFjY2VwdGVkT2ZmZXIpO1xuIH1cbiB9KS5cbmNhdGNoKHJlamVjdGVkKTtcbiB9Y2F0Y2goZSl7XG5pZihvZmZlci5hY3Rpb25zKXtcbkUob2ZmZXIuYWN0aW9ucykuZXJyb3Iob2ZmZXIsZSk7XG4gfVxucmVqZWN0ZWQoZSk7XG50aHJvdyBlO1xuIH1cbnJldHVybiByZXQ7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpZFRvUGF5bWVudFJlY29yZD1tYWtlU2NhbGFyTWFwU3RvcmUoJ3BheW1lbnRJZCcpO1xuY29uc3R7dXBkYXRlcjpwYXltZW50c1VwZGF0ZXIsbm90aWZpZXI6cGF5bWVudHNOb3RpZmllcn09XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovbWFrZU5vdGlmaWVyS2l0KFtdKTtcbi8qXG5cbiAgICovXG5jb25zdCB1cGRhdGVQYXltZW50UmVjb3JkPSh7YWN0aW9ucywuLi5wcmVEaXNwbGF5fSk9Pntcbi8vXG4vL1xuZGVsZXRlIHByZURpc3BsYXkuZGlzcGxheVBheW1lbnQ7XG5jb25zdCBkaXNwbGF5UGF5bWVudD1maWxsSW5TbG90cyhkZWh5ZHJhdGUoaGFyZGVuKHByZURpc3BsYXkpKSk7XG5jb25zdCBwYXltZW50UmVjb3JkPWFkZE1ldGEoe1xuLi4ucHJlRGlzcGxheSxcbmFjdGlvbnMsXG5kaXNwbGF5UGF5bWVudH0pO1xuXG5jb25zdHtpZH09cGF5bWVudFJlY29yZC5tZXRhO1xuaWRUb1BheW1lbnRSZWNvcmQuc2V0KGlkLGhhcmRlbihwYXltZW50UmVjb3JkKSk7XG5wYXltZW50c1VwZGF0ZXIudXBkYXRlU3RhdGUoW3BheW1lbnRSZWNvcmRdKTtcbiB9O1xuXG5jb25zdCBtYWtlUGF5bWVudEFjdGlvbnNGb3JJZD0oaWQpPT5cbm1ha2VQYXltZW50QWN0aW9ucyh7XG5nZXRSZWNvcmQ6KCk9PmlkVG9QYXltZW50UmVjb3JkLmdldChpZCksXG51cGRhdGVSZWNvcmQ6KHJlY29yZCx3aXRob3V0TWV0YT17fSk9Pntcbi8vXG4vL1xudXBkYXRlUGF5bWVudFJlY29yZCh7Li4ud2l0aG91dE1ldGEsLi4uYWRkTWV0YShyZWNvcmQpfSk7XG4gfSxcbmdldEJyYW5kUmVjb3JkOihicmFuZCk9PlxuYnJhbmRUYWJsZS5oYXNCeUJyYW5kKGJyYW5kKSYmYnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKSxcbmdldFB1cnNlQnlQZXRuYW1lOihwZXRuYW1lKT0+cHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSksXG5nZXRBdXRvRGVwb3NpdFB1cnNlOihiKT0+XG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5oYXMoYik/XG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5nZXQoYik6XG51bmRlZmluZWQsXG5nZXRJc3N1ZXJCb2FyZElkOmlzc3VlclRvQm9hcmRJZC5nZXR9KTtcblxuXG4vKlxuXG5cbiAgICovXG5jb25zdCBhZGRQYXltZW50PWFzeW5jKHBheW1lbnRQLGRlcG9zaXRUbz11bmRlZmluZWQpPT57XG4vL1xuY29uc3RbcGF5bWVudCxicmFuZF09YXdhaXQgUHJvbWlzZS5hbGwoW1xucGF5bWVudFAsXG5FKHBheW1lbnRQKS5nZXRBbGxlZ2VkQnJhbmQoKV0pO1xuXG5cbmNvbnN0IGJhc2VQYXltZW50UmVjb3JkPWFkZE1ldGEoe1xucGF5bWVudCxcbmJyYW5kfSk7XG5cbmNvbnN0e2lkfT1iYXNlUGF5bWVudFJlY29yZC5tZXRhO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBwYXltZW50UmVjb3JkPXtcbi4uLmJhc2VQYXltZW50UmVjb3JkLFxuYWN0aW9uczptYWtlUGF5bWVudEFjdGlvbnNGb3JJZChpZCl9O1xuXG5pZFRvUGF5bWVudFJlY29yZC5pbml0KGlkLGhhcmRlbihwYXltZW50UmVjb3JkKSk7XG5cbmNvbnN0IHJlZnJlc2hlZD1hd2FpdCBwYXltZW50UmVjb3JkLmFjdGlvbnMucmVmcmVzaCgpO1xuaWYoIXJlZnJlc2hlZCl7XG4vL1xudXBkYXRlUGF5bWVudFJlY29yZChwYXltZW50UmVjb3JkKTtcbiB9XG5cbi8vXG5hd2FpdCBwYXltZW50UmVjb3JkLmFjdGlvbnMuZGVwb3NpdChkZXBvc2l0VG8pO1xuIH07XG5cbmxldCBzZWxmQ29udGFjdFA7XG5hc3luYyBmdW5jdGlvbiBnZXREZXBvc2l0RmFjZXRJZChfYnJhbmRCb2FyZElkKXtcbi8vXG5yZXR1cm4gRS5nZXQoc2VsZkNvbnRhY3RQKS5kZXBvc2l0Qm9hcmRJZDtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGRpc2FibGVBdXRvRGVwb3NpdChwdXJzZVBldG5hbWUpe1xuY29uc3QgcHVyc2U9cHVyc2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocHVyc2VQZXRuYW1lKTtcbmNvbnN0IGJyYW5kPXB1cnNlVG9CcmFuZC5nZXQocHVyc2UpO1xuaWYoXG4hYnJhbmRUb0F1dG9EZXBvc2l0UHVyc2UuaGFzKGJyYW5kKXx8XG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5nZXQoYnJhbmQpIT09cHVyc2UpXG57XG5yZXR1cm47XG4gfVxuXG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5kZWxldGUoYnJhbmQpO1xuYXdhaXQgdXBkYXRlQWxsUHVyc2VTdGF0ZSgpO1xuIH1cblxuY29uc3QgcGVuZGluZ0VuYWJsZUF1dG9EZXBvc2l0cz1tYWtlU2NhbGFyTWFwU3RvcmUoJ2JyYW5kJyk7XG5hc3luYyBmdW5jdGlvbiBkb0VuYWJsZUF1dG9EZXBvc2l0KHB1cnNlUGV0bmFtZSx1cGRhdGVTdGF0ZSl7XG5jb25zdCBwdXJzZT1wdXJzZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldChwdXJzZVBldG5hbWUpO1xuY29uc3QgYnJhbmQ9cHVyc2VUb0JyYW5kLmdldChwdXJzZSk7XG5pZihicmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5oYXMoYnJhbmQpKXtcbmJyYW5kVG9BdXRvRGVwb3NpdFB1cnNlLnNldChicmFuZCxwdXJzZSk7XG4gfWVsc2V7XG5icmFuZFRvQXV0b0RlcG9zaXRQdXJzZS5pbml0KGJyYW5kLHB1cnNlKTtcbiB9XG5cbmF3YWl0IG51bGw7XG5pZih1cGRhdGVTdGF0ZSl7XG5hd2FpdCB1cGRhdGVBbGxQdXJzZVN0YXRlKCk7XG4gfVxuXG5jb25zdCBwZW5kaW5nUD1cbnBlbmRpbmdFbmFibGVBdXRvRGVwb3NpdHMuaGFzKGJyYW5kKSYmXG5wZW5kaW5nRW5hYmxlQXV0b0RlcG9zaXRzLmdldChicmFuZCk7XG5pZihwZW5kaW5nUCl7XG5yZXR1cm4gcGVuZGluZ1A7XG4gfVxuXG5jb25zdCBib2FyZElkUD1FLmdldChzZWxmQ29udGFjdFApLmRlcG9zaXRCb2FyZElkO1xucGVuZGluZ0VuYWJsZUF1dG9EZXBvc2l0cy5pbml0KGJyYW5kLGJvYXJkSWRQKTtcbmNvbnN0IGJvYXJkSWQ9YXdhaXQgYm9hcmRJZFA7XG5icmFuZFRvRGVwb3NpdEZhY2V0SWQuaW5pdChicmFuZCxib2FyZElkKTtcblxuaWYodXBkYXRlU3RhdGUpe1xuYXdhaXQgdXBkYXRlQWxsUHVyc2VTdGF0ZSgpO1xuIH1cbnJldHVybiBib2FyZElkUDtcbiB9XG5cbi8qXG5cblxuXG5cbiAgICovXG5mdW5jdGlvbiBhY2NlcHRQZXRuYW1lKFxuYWNjZXB0Rm4sXG5zdWdnZXN0ZWRQZXRuYW1lLFxuYm9hcmRJZCxcbmRhcHBPcmlnaW49dW5kZWZpbmVkKVxue1xuLyogICAgICAgICAgICAgICAgICAqL1xubGV0IHBldG5hbWU7XG5pZihkYXBwT3JpZ2luPT09dW5kZWZpbmVkKXtcbnBldG5hbWU9c3VnZ2VzdGVkUGV0bmFtZTtcbiB9ZWxzZXtcbmNvbnN0IGVkZ2VuYW1lPWVkZ2VNYXBwaW5nLnZhbFRvUGV0bmFtZS5nZXQoZGFwcE9yaWdpbik7XG4vL1xucGV0bmFtZT1bZWRnZW5hbWUsc3VnZ2VzdGVkUGV0bmFtZV07XG4gfVxuXG5yZXR1cm4gRShib2FyZCkuXG5nZXRWYWx1ZShib2FyZElkKS5cbnRoZW4oKHZhbHVlKT0+e1xuY29udGV4dC5lbnN1cmVCb2FyZElkKGJvYXJkSWQsdmFsdWUpO1xucmV0dXJuIGFjY2VwdEZuKHBldG5hbWUsdmFsdWUpO1xuIH0pO1xuIH1cblxuLypcblxuXG5cbiAgICovXG5hc3luYyBmdW5jdGlvbiBzdWdnZXN0SXNzdWVyKFxuc3VnZ2VzdGVkUGV0bmFtZSxcbmlzc3VlckJvYXJkSWQsXG5kYXBwT3JpZ2luPXVuZGVmaW5lZClcbntcbi8vXG4vL1xuLy9cbnJldHVybiBhY2NlcHRQZXRuYW1lKFxuLy9cbihwZXRuYW1lLHZhbHVlKT0+YWRkSXNzdWVyKHBldG5hbWUsdmFsdWUsdHJ1ZSksXG5zdWdnZXN0ZWRQZXRuYW1lLFxuaXNzdWVyQm9hcmRJZCxcbmRhcHBPcmlnaW4pO1xuXG4gfVxuXG4vKlxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIHN1Z2dlc3RJbnN0YW5jZShcbnN1Z2dlc3RlZFBldG5hbWUsXG5pbnN0YW5jZUhhbmRsZUJvYXJkSWQsXG5kYXBwT3JpZ2luPXVuZGVmaW5lZClcbntcbi8vXG4vL1xuLy9cblxucmV0dXJuIGFjY2VwdFBldG5hbWUoXG5hZGRJbnN0YW5jZSxcbnN1Z2dlc3RlZFBldG5hbWUsXG5pbnN0YW5jZUhhbmRsZUJvYXJkSWQsXG5kYXBwT3JpZ2luKTtcblxuIH1cblxuLypcblxuXG5cbiAgICovXG5hc3luYyBmdW5jdGlvbiBzdWdnZXN0SW5zdGFsbGF0aW9uKFxuc3VnZ2VzdGVkUGV0bmFtZSxcbmluc3RhbGxhdGlvbkhhbmRsZUJvYXJkSWQsXG5kYXBwT3JpZ2luPXVuZGVmaW5lZClcbntcbi8vXG4vL1xuLy9cbnJldHVybiBhY2NlcHRQZXRuYW1lKFxuaW5zdGFsbGF0aW9uTWFuYWdlci5hZGQsXG5zdWdnZXN0ZWRQZXRuYW1lLFxuaW5zdGFsbGF0aW9uSGFuZGxlQm9hcmRJZCxcbmRhcHBPcmlnaW4pO1xuXG4gfVxuXG5mdW5jdGlvbiBnZXRCcmFuZChwZXRuYW1lKXtcbmNvbnN0IGJyYW5kPWJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KHBldG5hbWUpO1xucmV0dXJuIGJyYW5kO1xuIH1cblxuZnVuY3Rpb24gZ2V0QnJhbmRQZXRuYW1lcyhicmFuZHMpe1xucmV0dXJuIGJyYW5kcy5tYXAoYnJhbmRNYXBwaW5nLnZhbFRvUGV0bmFtZS5nZXQpO1xuIH1cblxuZnVuY3Rpb24gZ2V0U2VsZkNvbnRhY3QoKXtcbnJldHVybiBzZWxmQ29udGFjdFA7XG4gfVxuXG5jb25zdCBtYWtlTWFuYWdlcj0ocGV0bmFtZU1hcHBpbmcsbWFuYWdlclR5cGUpPT57XG5jb25zdCBtYW5hZ2VyPUZhcihtYW5hZ2VyVHlwZSx7XG5yZW5hbWU6YXN5bmMocGV0bmFtZSx0aGluZyk9PntcbnBldG5hbWVNYXBwaW5nLnJlbmFtZVBldG5hbWUocGV0bmFtZSx0aGluZyk7XG5hd2FpdCB1cGRhdGVBbGxTdGF0ZSgpO1xuIH0sXG5nZXQ6cGV0bmFtZU1hcHBpbmcucGV0bmFtZVRvVmFsLmdldCxcbmdldEFsbDpwZXRuYW1lTWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcyxcbmFkZDphc3luYyhwZXRuYW1lLHRoaW5nKT0+e1xucGV0bmFtZU1hcHBpbmcuc3VnZ2VzdFBldG5hbWUocGV0bmFtZSx0aGluZyk7XG5hd2FpdCB1cGRhdGVBbGxTdGF0ZSgpO1xuIH19KTtcblxucmV0dXJuIG1hbmFnZXI7XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5zdGFsbGF0aW9uTWFuYWdlcj1tYWtlTWFuYWdlcihcbmluc3RhbGxhdGlvbk1hcHBpbmcsXG4nSW5zdGFsbGF0aW9uTWFuYWdlcicpO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaW5zdGFuY2VNYW5hZ2VyPW1ha2VNYW5hZ2VyKGluc3RhbmNlTWFwcGluZywnSW5zdGFuY2VNYW5hZ2VyJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzc3Vlck1hbmFnZXI9RmFyKCdJc3N1ZXJNYW5hZ2VyJyx7XG5yZW5hbWU6YXN5bmMocGV0bmFtZSxpc3N1ZXIpPT57XG5icmFuZFRhYmxlLmhhc0J5SXNzdWVyKGlzc3Vlcil8fFxuRmFpbCBgaXNzdWVyIGhhcyBub3QgYmVlbiBwcmV2aW91c2x5IGFkZGVkYDtcbmNvbnN0IGJyYW5kUmVjb3JkPWJyYW5kVGFibGUuZ2V0QnlJc3N1ZXIoaXNzdWVyKTtcbmJyYW5kTWFwcGluZy5yZW5hbWVQZXRuYW1lKHBldG5hbWUsYnJhbmRSZWNvcmQuYnJhbmQpO1xuYXdhaXQgdXBkYXRlQWxsU3RhdGUoKTtcbiB9LFxuZ2V0OihwZXRuYW1lKT0+e1xuY29uc3QgYnJhbmQ9YnJhbmRNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQocGV0bmFtZSk7XG5yZXR1cm4gYnJhbmRUYWJsZS5nZXRCeUJyYW5kKGJyYW5kKS5pc3N1ZXI7XG4gfSxcbmdldEFsbDooKT0+e1xucmV0dXJuWy4uLmJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZW50cmllcygpXS5tYXAoXG4oW3BldG5hbWUsYnJhbmRdKT0+e1xuY29uc3R7aXNzdWVyfT1icmFuZFRhYmxlLmdldEJ5QnJhbmQoYnJhbmQpO1xucmV0dXJuW3BldG5hbWUsaXNzdWVyXTtcbiB9KTtcblxuIH0sXG5hZGQ6YXN5bmMocGV0bmFtZSxpc3N1ZXJQKT0+e1xuY29uc3R7YnJhbmQsaXNzdWVyfT1hd2FpdCBicmFuZFRhYmxlLmluaXRJc3N1ZXIoaXNzdWVyUCxhZGRNZXRhKTtcbmF3YWl0IGluaXRJc3N1ZXJUb0JvYXJkSWQoaXNzdWVyLGJyYW5kKTtcbmJyYW5kTWFwcGluZy5zdWdnZXN0UGV0bmFtZShwZXRuYW1lLGJyYW5kKTtcbmF3YWl0IHVwZGF0ZUFsbElzc3VlcnNTdGF0ZSgpO1xuIH19KTtcblxuXG5mdW5jdGlvbiBnZXRJbnN0YWxsYXRpb25NYW5hZ2VyKCl7XG5yZXR1cm4gaW5zdGFsbGF0aW9uTWFuYWdlcjtcbiB9XG5cbmZ1bmN0aW9uIGdldEluc3RhbmNlTWFuYWdlcigpe1xucmV0dXJuIGluc3RhbmNlTWFuYWdlcjtcbiB9XG5cbmZ1bmN0aW9uIGdldElzc3Vlck1hbmFnZXIoKXtcbnJldHVybiBpc3N1ZXJNYW5hZ2VyO1xuIH1cblxuYXN5bmMgZnVuY3Rpb24gc2F2ZU9mZmVyUmVzdWx0KGludml0YXRpb25IYW5kbGUsb2ZmZXJSZXN1bHQpe1xuaW52aXRhdGlvbkhhbmRsZVRvT2ZmZXJSZXN1bHQuaW5pdChpbnZpdGF0aW9uSGFuZGxlLG9mZmVyUmVzdWx0KTtcbiB9XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE9mZmVyUmVzdWx0KGludml0YXRpb25IYW5kbGUpe1xucmV0dXJuIGludml0YXRpb25IYW5kbGVUb09mZmVyUmVzdWx0LmdldChpbnZpdGF0aW9uSGFuZGxlKTtcbiB9XG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFVJTm90aWZpZXIocmF3SWQsZGFwcE9yaWdpbj0ndW5rbm93bicpe1xuY29uc3QgaWQ9bWFrZUlkKGRhcHBPcmlnaW4scmF3SWQpO1xuY29uc3Qgb2ZmZXJSZXN1bHQ9YXdhaXQgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQoaWQpLnByb21pc2U7XG5hc3NlcnQoXG5wYXNzU3R5bGVPZihvZmZlclJlc3VsdCk9PT0nY29weVJlY29yZCcsXG4gYG9mZmVyUmVzdWx0IG11c3QgYmUgYSByZWNvcmQgdG8gaGF2ZSBhIHVpTm90aWZpZXJgKTtcblxub2ZmZXJSZXN1bHQudWlOb3RpZmllcnx8RmFpbCBgb2ZmZXJSZXN1bHQgZG9lcyBub3QgaGF2ZSBhIHVpTm90aWZpZXJgO1xucmV0dXJuIG9mZmVyUmVzdWx0LnVpTm90aWZpZXI7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFB1YmxpY1N1YnNjcmliZXJzKHJhd0lkLGRhcHBPcmlnaW49J3Vua25vd24nKXtcbmNvbnN0IGlkPW1ha2VJZChkYXBwT3JpZ2luLHJhd0lkKTtcblxuY29uc3Qgb2ZmZXJSZXN1bHQ9YXdhaXQgaWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQoaWQpLnByb21pc2U7XG5hc3NlcnQoXG5wYXNzU3R5bGVPZihvZmZlclJlc3VsdCk9PT0nY29weVJlY29yZCcsXG4gYG9mZmVyUmVzdWx0ICR7b2ZmZXJSZXN1bHR9IG11c3QgYmUgYSByZWNvcmQgdG8gaGF2ZSBwdWJsaWNTdWJzY3JpYmVyc2ApO1xuXG5cbmNvbnN0e3B1YmxpY1N1YnNjcmliZXJzfT1vZmZlclJlc3VsdDtcbnB1YmxpY1N1YnNjcmliZXJzfHxcbkZhaWwgYG9mZmVyUmVzdWx0ICR7b2ZmZXJSZXN1bHR9IGRvZXMgbm90IGhhdmUgcHVibGljU3Vic2NyaWJlcnNgO1xucGFzc1N0eWxlT2YocHVibGljU3Vic2NyaWJlcnMpPT09J2NvcHlSZWNvcmQnfHxcbkZhaWwgYHB1YmxpY1N1YnNjcmliZXJzICR7cHVibGljU3Vic2NyaWJlcnN9IG11c3QgYmUgYSByZWNvcmRgO1xuXG5yZXR1cm4gcHVibGljU3Vic2NyaWJlcnM7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFB1YmxpY05vdGlmaWVycyhyYXdJZCxkYXBwT3JpZ2luPSd1bmtub3duJyl7XG5jb25zdCBwdWJsaWNTdWJzY3JpYmVycz1hd2FpdCBnZXRQdWJsaWNTdWJzY3JpYmVycyhyYXdJZCxkYXBwT3JpZ2luKTtcbnJldHVybiBvYmplY3RNYXAocHVibGljU3Vic2NyaWJlcnMsbWFrZU5vdGlmaWVyRnJvbVN1YnNjcmliZXIpO1xuIH1cblxuLy9cbi8vXG5jb25zdCBjcmVhdGVSb290TG9va3Vwcz0oKT0+e1xuY29uc3Qgcm9vdFBhdGhUb0xvb2t1cD1tYWtlTGVnYWN5TWFwKCdsb29rdXBzJyk7XG5cbi8qXG5cblxuICAgICAqL1xuY29uc3QgbWFrZUxvb2t1cD0oa2luZCxsb29rdXApPT57XG5yb290UGF0aFRvTG9va3VwLmluaXQoXG5raW5kLFxuRmFyKCBgJHtraW5kfUxvb2t1cGAse1xubG9va3VwfSkpO1xuXG5cbiB9O1xuXG4vL1xuLy9cbmNvbnN0IHBldG5hbWVPclBhdGg9XG4obG9va3VwKT0+XG4oLi4ucGF0aCk9PntcbnRyeXtcbmlmKHBhdGgubGVuZ3RoPT09MSl7XG4vL1xucmV0dXJuIGxvb2t1cChwYXRoWzBdKTtcbiB9XG4gfWNhdGNoKGUpe1xuLy9cbiB9XG5yZXR1cm4gbG9va3VwKHBhdGgpO1xuIH07XG5cbm1ha2VMb29rdXAoJ2JyYW5kJyxwZXRuYW1lT3JQYXRoKGJyYW5kTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KSk7XG5tYWtlTG9va3VwKCdjb250YWN0JyxwZXRuYW1lT3JQYXRoKGNvbnRhY3RNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQpKTtcbm1ha2VMb29rdXAoJ2lzc3VlcicscGV0bmFtZU9yUGF0aChpc3N1ZXJNYW5hZ2VyLmdldCkpO1xubWFrZUxvb2t1cCgnaW5zdGFuY2UnLHBldG5hbWVPclBhdGgoaW5zdGFuY2VNYXBwaW5nLnBldG5hbWVUb1ZhbC5nZXQpKTtcbm1ha2VMb29rdXAoXG4naW5zdGFsbGF0aW9uJyxcbnBldG5hbWVPclBhdGgoaW5zdGFsbGF0aW9uTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KSk7XG5cbm1ha2VMb29rdXAoJ3B1cnNlJyxwZXRuYW1lT3JQYXRoKHB1cnNlTWFwcGluZy5wZXRuYW1lVG9WYWwuZ2V0KSk7XG5cbi8vXG5jb25zdCBpZE9ubHk9XG4oa2luZCxsb29rdXApPT5cbiguLi5wYXRoKT0+e1xucGF0aC5sZW5ndGg9PT0xfHxcbkZhaWwgYCR7cShcbmtpbmQpXG4gfSBsb29rdXAgbXVzdCBiZSBjYWxsZWQgd2l0aCBhIHNpbmdsZSBvZmZlciBJRCwgbm90ICR7cGF0aH1gO1xucmV0dXJuIGxvb2t1cChwYXRoWzBdKTtcbiB9O1xubWFrZUxvb2t1cCgnb2ZmZXInLGlkT25seSgnb2ZmZXInLGlkVG9PZmZlci5nZXQpKTtcbm1ha2VMb29rdXAoXG4nb2ZmZXJSZXN1bHQnLFxuaWRPbmx5KCdvZmZlclJlc3VsdCcsKGlkKT0+aWRUb09mZmVyUmVzdWx0UHJvbWlzZUtpdC5nZXQoaWQpLnByb21pc2UpKTtcblxuXG5yZXR1cm4gcm9vdFBhdGhUb0xvb2t1cDtcbiB9O1xuXG5jb25zdCBmaXJzdFBhdGhUb0xvb2t1cD1jcmVhdGVSb290TG9va3VwcygpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hcnNoYWxsZXI9aGFyZGVuKHtcbmZyb21DYXBEYXRhOmNvbnRleHQuZnJvbUNhcERhdGEsXG50b0NhcERhdGE6Y29udGV4dC50b0NhcERhdGEsXG51bnNlcmlhbGl6ZTpjb250ZXh0LmZyb21DYXBEYXRhLFxuc2VyaWFsaXplOmNvbnRleHQudG9DYXBEYXRhfSk7XG5cblxuY29uc3QgaGFuZGxlQWNjZXB0T2ZmZXJBY3Rpb249YXN5bmMob2ZmZXIpPT57XG5jb25zdHtyZXF1ZXN0Q29udGV4dH09b2ZmZXI7XG5jb25zdCByYXdJZD1hd2FpdCBhZGRPZmZlcihvZmZlcixyZXF1ZXN0Q29udGV4dCk7XG5jb25zdCBkYXBwT3JpZ2luPVxucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbnx8cmVxdWVzdENvbnRleHQub3JpZ2lufHwndW5rbm93bic7XG5yZXR1cm4gYWNjZXB0T2ZmZXIoIGAke2RhcHBPcmlnaW59IyR7cmF3SWR9YCk7XG4gfTtcblxuY29uc3QgaGFuZGxlU3VnZ2VzdElzc3VlckFjdGlvbj0oe3BldG5hbWUsYm9hcmRJZH0pPT5cbnN1Z2dlc3RJc3N1ZXIocGV0bmFtZSxib2FyZElkKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLypcblxuXG4gICAqL1xuY29uc3QgcGVyZm9ybUFjdGlvbj0ob2JqKT0+e1xuY29uc3R7dHlwZSxkYXRhfT1KU09OLnBhcnNlKG9iai5zcGVuZEFjdGlvbik7XG5zd2l0Y2godHlwZSl7XG5jYXNlJ2FjY2VwdE9mZmVyJzpcbnJldHVybiBoYW5kbGVBY2NlcHRPZmZlckFjdGlvbihkYXRhKTtcbmNhc2Unc3VnZ2VzdElzc3Vlcic6XG5yZXR1cm4gaGFuZGxlU3VnZ2VzdElzc3VlckFjdGlvbihkYXRhKTtcbmRlZmF1bHQ6XG50aHJvdyBFcnJvciggYFVua25vd24gd2FsbGV0IGFjdGlvbiAke3R5cGV9YCk7fVxuXG4gfTtcblxuY29uc3Qgd2FsbGV0PUZhcignd2FsbGV0Jyx7XG5sb29rdXA6KC4uLnBhdGgpPT57XG4vL1xuaWYocGF0aC5sZW5ndGg9PT0wKXtcbnJldHVybiB3YWxsZXQ7XG4gfVxuY29uc3RbZmlyc3QsLi4ucmVtYWluaW5nXT1wYXRoO1xuY29uc3QgZmlyc3RWYWx1ZT1maXJzdFBhdGhUb0xvb2t1cC5nZXQoZmlyc3QpO1xuaWYocmVtYWluaW5nLmxlbmd0aD09PTApe1xucmV0dXJuIGZpcnN0VmFsdWU7XG4gfVxucmV0dXJuIEUoZmlyc3RWYWx1ZSkubG9va3VwKC4uLnJlbWFpbmluZyk7XG4gfSxcbmdldE1hcnNoYWxsZXI6KCk9Pm1hcnNoYWxsZXIsXG5nZXREYXBwQ2FjaGVDb29yZGluYXRvcjooZGFwcE9yaWdpbik9PlxuZGFwcE9yaWdpbnMuZ2V0KGRhcHBPcmlnaW4pLmNhY2hlQ29vcmRpbmF0b3IsXG5nZXRDYWNoZUNvb3JkaW5hdG9yOigpPT5zaGFyZWRDYWNoZUNvb3JkaW5hdG9yLFxuc2F2ZU9mZmVyUmVzdWx0LFxuZ2V0T2ZmZXJSZXN1bHQsXG53YWl0Rm9yRGFwcEFwcHJvdmFsLFxuZ2V0RGFwcHNOb3RpZmllcigpe1xucmV0dXJuIGRhcHBzTm90aWZpZXI7XG4gfSxcbmdldFB1cnNlc05vdGlmaWVyKCl7XG5yZXR1cm4gcHVyc2VzTm90aWZpZXI7XG4gfSxcbmdldEF0dGVudWF0ZWRQdXJzZXNOb3RpZmllcigpe1xucmV0dXJuIGF0dGVudWF0ZWRQdXJzZXNOb3RpZmllcjtcbiB9LFxuZ2V0SXNzdWVyc05vdGlmaWVyKCl7XG5yZXR1cm4gaXNzdWVyc05vdGlmaWVyO1xuIH0sXG5nZXRPZmZlcnNOb3RpZmllcigpe1xucmV0dXJuIG9mZmVyc05vdGlmaWVyO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmFkZElzc3Vlcjppc3N1ZXJNYW5hZ2VyLmFkZCxcbmdldEJyYW5kLFxuZ2V0QnJhbmRQZXRuYW1lcyxcbnB1Ymxpc2hJc3N1ZXIsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuYWRkSW5zdGFuY2U6aW5zdGFuY2VNYW5hZ2VyLmFkZCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuYWRkSW5zdGFsbGF0aW9uOmluc3RhbGxhdGlvbk1hbmFnZXIuYWRkLFxuZ2V0SW5zdGFsbGF0aW9uTWFuYWdlcixcbmdldEluc3RhbmNlTWFuYWdlcixcbmdldElzc3Vlck1hbmFnZXIsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJlbmFtZUlzc3Vlcjppc3N1ZXJNYW5hZ2VyLnJlbmFtZSxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZW5hbWVJbnN0YW5jZTppbnN0YW5jZU1hbmFnZXIucmVuYW1lLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5yZW5hbWVJbnN0YWxsYXRpb246aW5zdGFsbGF0aW9uTWFuYWdlci5yZW5hbWUsXG5nZXRTZWxmQ29udGFjdCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRJbnN0YW5jZTppbnN0YW5jZU1hbmFnZXIuZ2V0LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRJbnN0YWxsYXRpb246aW5zdGFsbGF0aW9uTWFuYWdlci5nZXQsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldEluc3RhbGxhdGlvbnM6aW5zdGFsbGF0aW9uTWFuYWdlci5nZXRBbGwsXG5tYWtlRW1wdHlQdXJzZSxcbmRlcG9zaXQsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmdldElzc3Vlcjppc3N1ZXJNYW5hZ2VyLmdldCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0SXNzdWVyczppc3N1ZXJNYW5hZ2VyLmdldEFsbCxcbmdldFB1cnNlcyxcbmdldFB1cnNlLFxuZ2V0UHVyc2VJc3N1ZXIsXG5hZGRPZmZlcixcbmRlY2xpbmVPZmZlcixcbmNhbmNlbE9mZmVyLFxuYWNjZXB0T2ZmZXIsXG5nZXRPZmZlcnMsXG5nZXRTZWF0OihpZCk9PmlkVG9TZWF0LmdldChpZCksXG5nZXRTZWF0czooaWRzKT0+aWRzLm1hcCh3YWxsZXQuZ2V0U2VhdCksXG5lbmFibGVBdXRvRGVwb3NpdChwdXJzZVBldG5hbWUpe1xuLy9cbnJldHVybiBkb0VuYWJsZUF1dG9EZXBvc2l0KHB1cnNlUGV0bmFtZSx0cnVlKTtcbiB9LFxuZGlzYWJsZUF1dG9EZXBvc2l0LFxucGVyZm9ybUFjdGlvbixcbmdldERlcG9zaXRGYWNldElkLFxuc3VnZ2VzdElzc3VlcixcbnN1Z2dlc3RJbnN0YW5jZSxcbnN1Z2dlc3RJbnN0YWxsYXRpb24sXG5hZGRDb250YWN0LFxuZ2V0Q29udGFjdHNOb3RpZmllcigpe1xucmV0dXJuIGNvbnRhY3RzTm90aWZpZXI7XG4gfSxcbmFkZFBheW1lbnQsXG5nZXRQYXltZW50c05vdGlmaWVyKCl7XG5yZXR1cm4gcGF5bWVudHNOb3RpZmllcjtcbiB9LFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRVSU5vdGlmaWVyLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5nZXRQdWJsaWNOb3RpZmllcnMsXG5nZXRQdWJsaWNTdWJzY3JpYmVycyxcbmdldFpvZSgpe1xucmV0dXJuIHpvZTtcbiB9LFxuZ2V0Qm9hcmQoKXtcbnJldHVybiBib2FyZDtcbiB9LFxuZ2V0QWdvcmljTmFtZXMoLi4ucGF0aCl7XG5pZighYWdvcmljTmFtZXMpe1xudGhyb3cgRmFpbCBgYWdvcmljTmFtZXMgd2FzIG5vdCBzdXBwbGllZCB0byB0aGUgd2FsbGV0IG1ha2VyYDtcbiB9XG5yZXR1cm4gRShhZ29yaWNOYW1lcykubG9va3VwKC4uLnBhdGgpO1xuIH0sXG5nZXROYW1lc0J5QWRkcmVzcyguLi5wYXRoKXtcbmlmKG5hbWVzQnlBZGRyZXNzPT09dW5kZWZpbmVkKXtcbi8vXG4vL1xudGhyb3cgRmFpbCBgbmFtZXNCeUFkZHJlc3Mgd2FzIG5vdCBzdXBwbGllZCB0byB0aGUgd2FsbGV0IG1ha2VyYDtcbiB9XG5yZXR1cm4gRShuYW1lc0J5QWRkcmVzcykubG9va3VwKC4uLnBhdGgpO1xuIH19KTtcblxuXG5jb25zdCBpbml0aWFsaXplPWFzeW5jKCk9Pntcbi8vXG5jb25zdCBzZWxmRGVwb3NpdEZhY2V0PUZhcignY29udGFjdCcse1xucmVjZWl2ZShwYXltZW50KXtcbnJldHVybiBhZGRQYXltZW50KHBheW1lbnQpO1xuIH19KTtcblxuXG5jb25zdCBhZGRyZXNzPWF3YWl0IEUobXlBZGRyZXNzTmFtZUFkbWluKS5nZXRNeUFkZHJlc3MoKTtcbi8vXG5zZWxmQ29udGFjdFA9YWRkQ29udGFjdCgnU2VsZicsc2VsZkRlcG9zaXRGYWNldCxhZGRyZXNzKTtcblxuLy9cbmNvbnN0IFpPRV9JTlZJVEVfUFVSU0VfUEVUTkFNRT0nRGVmYXVsdCBab2UgaW52aXRlIHB1cnNlJztcbmNvbnN0IGludml0ZUlzc3VlclA9RSh6b2UpLmdldEludml0YXRpb25Jc3N1ZXIoKTtcbmNvbnN0IGFkZFpvZUlzc3Vlcj0oaXNzdWVyUCk9PlxuaXNzdWVyTWFuYWdlci5hZGQoWk9FX0lOVklURV9CUkFORF9QRVROQU1FLGlzc3VlclApO1xuY29uc3QgbWFrZUludml0ZVB1cnNlPSgpPT5cbndhbGxldC5tYWtlRW1wdHlQdXJzZShaT0VfSU5WSVRFX0JSQU5EX1BFVE5BTUUsWk9FX0lOVklURV9QVVJTRV9QRVROQU1FKTtcbmNvbnN0IGFkZEludml0ZURlcG9zaXRGYWNldD0oKT0+XG5FKHdhbGxldCkuZW5hYmxlQXV0b0RlcG9zaXQoWk9FX0lOVklURV9QVVJTRV9QRVROQU1FKTtcblxuYXdhaXQgYWRkWm9lSXNzdWVyKGludml0ZUlzc3VlclApLlxudGhlbihtYWtlSW52aXRlUHVyc2UpLlxudGhlbihhZGRJbnZpdGVEZXBvc2l0RmFjZXQpO1xuem9lSW52aXRlUHVyc2U9d2FsbGV0LmdldFB1cnNlKFpPRV9JTlZJVEVfUFVSU0VfUEVUTkFNRSk7XG5cbmF3YWl0IEUobXlBZGRyZXNzTmFtZUFkbWluKS51cGRhdGUoXG5XYWxsZXROYW1lLmRlcG9zaXRGYWNldCxcbnNlbGZEZXBvc2l0RmFjZXQpO1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBpbXBvcnRCYW5rQXNzZXRzPWFzeW5jKGJhbmspPT57XG52b2lkIG9ic2VydmVJdGVyYXRpb24oXG5zdWJzY3JpYmVFYWNoKEUoYmFuaykuZ2V0QXNzZXRTdWJzY3JpcHRpb24oKSksXG5oYXJkZW4oe1xuICAgICAgYXN5bmMgdXBkYXRlU3RhdGUoe3Byb3Bvc2VkTmFtZSxpc3N1ZXJOYW1lLGlzc3VlcixicmFuZH0pe1xuYXdhaXQgbnVsbDtcbnRyeXtcbmlzc3Vlck5hbWU9YXdhaXQgYWRkSXNzdWVyKGlzc3Vlck5hbWUsaXNzdWVyKTtcbmNvbnN0IHB1cnNlPWF3YWl0IEUoYmFuaykuZ2V0UHVyc2UoYnJhbmQpO1xuLy9cbmF3YWl0IGludGVybmFsVW5zYWZlSW1wb3J0UHVyc2UoXG5pc3N1ZXJOYW1lLFxucHJvcG9zZWROYW1lLFxudHJ1ZSxcbnB1cnNlKTtcblxuIH1jYXRjaChlKXtcbmNvbnNvbGUuZXJyb3IoJy8vLyBjb3VsZCBub3QgYWRkIGJhbmsgYXNzZXQgcHVyc2UnLGUse1xuaXNzdWVyTmFtZSxcbnByb3Bvc2VkTmFtZSxcbmlzc3VlcixcbmJyYW5kfSk7XG5cbiB9XG4gfX0pKS5cblxuZmluYWxseSgoKT0+Y29uc29sZS5lcnJvcignLy8vIFRoaXMgaXMgdGhlIGVuZCBvZiB0aGUgYmFuayBhc3NldHMnKSk7XG4gfTtcbnJldHVybntcbmFkbWluOndhbGxldCxcbmluaXRpYWxpemVkOmluaXRpYWxpemUoKSxcbmltcG9ydEJhbmtBc3NldHN9O1xuXG4gfVxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VXYWxsZXRSb290IjpbIm1ha2VXYWxsZXRSb290Il19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAL/k3V7oAgAA6AIAACwAAABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL3B1YnN1Yi5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBmdW5jdGlvbiAgICAgICAgICAgICAgICBtYWtlUHVic3ViKEUpe1xubGV0IGxhc3RQdWJsaXNoZWQ7XG5jb25zdCBzdWJzY3JpYmVycz1bXTtcblxucmV0dXJuIGhhcmRlbih7XG5zdWJzY3JpYmUocyl7XG5zdWJzY3JpYmVycy5wdXNoKHMpO1xuaWYobGFzdFB1Ymxpc2hlZCE9PXVuZGVmaW5lZCl7XG5FKHMpLm5vdGlmeShsYXN0UHVibGlzaGVkKTtcbiB9XG4gfSxcbnB1Ymxpc2gobSl7XG5sYXN0UHVibGlzaGVkPW07XG5mb3IoY29uc3QgcyBvZiBzdWJzY3JpYmVycyl7XG5FKHMpLm5vdGlmeShtKTtcbiB9XG4gfX0pO1xuXG4gfSRozY9fb25jZS5kZWZhdWx0KCAgICAgbWFrZVB1YnN1Yik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAApcHj38A1AADANQAALAAAAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvd2FsbGV0LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9tYXJzaGFsIiwiQGFnb3JpYy9pbnRlcm5hbC9zcmMvanMtdXRpbHMuanMiLCJAYWdvcmljL25vdGlmaWVyIiwiLi9saWItd2FsbGV0LmpzIiwiLi9wdWJzdWIuanMiLCIuL2JpZ2ludFN0cmluZ2lmeS5qcyIsIi4vZGF0ZS1ub3cuanMiLCIuL2ludGVybmFsLXR5cGVzLmpzIl0sImV4cG9ydHMiOlsiYnVpbGRSb290T2JqZWN0IiwiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEUsRmFyLGRlZXBDb3B5SnNvbmFibGUsbWFrZU5vdGlmaWVyS2l0LG9ic2VydmVJdGVyYXRpb24sbWFrZVdhbGxldFJvb3QscHVic3ViLGJpZ2ludFN0cmluZ2lmeSxtYWtlVGltZXJEZXZpY2VEYXRlTm93LG1ha2VUaW1lclNlcnZpY2VEYXRlTm93OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvaW50ZXJuYWwvc3JjL2pzLXV0aWxzLmpzXCIsIFtbXCJkZWVwQ29weUpzb25hYmxlXCIsIFskaM2PX2EgPT4gKGRlZXBDb3B5SnNvbmFibGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyXCIsIFtbXCJtYWtlTm90aWZpZXJLaXRcIiwgWyRozY9fYSA9PiAobWFrZU5vdGlmaWVyS2l0ID0gJGjNj19hKV1dLFtcIm9ic2VydmVJdGVyYXRpb25cIiwgWyRozY9fYSA9PiAob2JzZXJ2ZUl0ZXJhdGlvbiA9ICRozY9fYSldXV1dLFtcIi4vbGliLXdhbGxldC5qc1wiLCBbW1wibWFrZVdhbGxldFJvb3RcIiwgWyRozY9fYSA9PiAobWFrZVdhbGxldFJvb3QgPSAkaM2PX2EpXV1dXSxbXCIuL3B1YnN1Yi5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjNj19hID0+IChwdWJzdWIgPSAkaM2PX2EpXV1dXSxbXCIuL2JpZ2ludFN0cmluZ2lmeS5qc1wiLCBbW1wiYmlnaW50U3RyaW5naWZ5XCIsIFskaM2PX2EgPT4gKGJpZ2ludFN0cmluZ2lmeSA9ICRozY9fYSldXV1dLFtcIi4vZGF0ZS1ub3cuanNcIiwgW1tcIm1ha2VUaW1lckRldmljZURhdGVOb3dcIiwgWyRozY9fYSA9PiAobWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyA9ICRozY9fYSldXSxbXCJtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vd1wiLCBbJGjNj19hID0+IChtYWtlVGltZXJTZXJ2aWNlRGF0ZU5vdyA9ICRozY9fYSldXV1dLFtcIi4vaW50ZXJuYWwtdHlwZXMuanNcIiwgW11dXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGJ1aWxkUm9vdE9iamVjdCwgJ25hbWUnLCB7dmFsdWU6IFwiYnVpbGRSb290T2JqZWN0XCJ9KTskaM2PX29uY2UuYnVpbGRSb290T2JqZWN0KGJ1aWxkUm9vdE9iamVjdCk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5mdW5jdGlvbiAgICAgICAgYnVpbGRSb290T2JqZWN0KHZhdFBvd2Vycyl7XG4vL1xuY29uc3R7RH09dmF0UG93ZXJzfHx7fTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgd2FsbGV0Um9vdDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB3YWxsZXRBZG1pbjtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBwdXJzZXNTdGF0ZT1bXTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW5ib3hTdGF0ZT1bXTtcbmxldCBodHRwO1xuXG5jb25zdCBicmlkZ2VIYW5kbGVzPW5ldyBTZXQoKTtcbmNvbnN0IG9mZmVyU3Vic2NyaXB0aW9ucz1uZXcgTWFwKCk7XG5cbmNvbnN0IGh0dHBTZW5kPShvYmosY2hhbm5lbEhhbmRsZXMpPT5cbkUoaHR0cCkuc2VuZChkZWVwQ29weUpzb25hYmxlKG9iaiksY2hhbm5lbEhhbmRsZXMpO1xuXG5jb25zdCBwdXNoT2ZmZXJTdWJzY3JpcHRpb25zPShjaGFubmVsSGFuZGxlLG9mZmVycyk9PntcbmNvbnN0IHN1YnM9b2ZmZXJTdWJzY3JpcHRpb25zLmdldChjaGFubmVsSGFuZGxlKTtcbmZvcihjb25zdHtvcmlnaW4sc3RhdHVzfW9mIHN1YnN8fFtdKXtcbi8vXG5jb25zdCByZXN1bHQ9aGFyZGVuKFxub2ZmZXJzLmZpbHRlcihcbihvZmZlcik9PlxuKHN0YXR1cz09PW51bGx8fG9mZmVyLnN0YXR1cz09PXN0YXR1cykmJlxub2ZmZXIucmVxdWVzdENvbnRleHQmJlxub2ZmZXIucmVxdWVzdENvbnRleHQub3JpZ2luPT09b3JpZ2luKSk7XG5cblxuaHR0cFNlbmQoXG57XG50eXBlOid3YWxsZXRPZmZlckRlc2NyaXB0aW9ucycsXG5kYXRhOnJlc3VsdH0sXG5cbltjaGFubmVsSGFuZGxlXSk7XG5cbiB9XG4gfTtcblxuY29uc3Qgc3Vic2NyaWJlVG9PZmZlcnM9KGNoYW5uZWxIYW5kbGUse29yaWdpbixzdGF0dXM9bnVsbH0pPT57XG5sZXQgc3Vicz1vZmZlclN1YnNjcmlwdGlvbnMuZ2V0KGNoYW5uZWxIYW5kbGUpO1xuaWYoIXN1YnMpe1xuc3Vicz1bXTtcbm9mZmVyU3Vic2NyaXB0aW9ucy5zZXQoY2hhbm5lbEhhbmRsZSxzdWJzKTtcbiB9XG5zdWJzLnB1c2goe29yaWdpbixzdGF0dXN9KTtcbnB1c2hPZmZlclN1YnNjcmlwdGlvbnMoY2hhbm5lbEhhbmRsZSxpbmJveFN0YXRlKTtcbiB9O1xuXG5jb25zdHtwdWJsaXNoOnB1cnNlc1B1Ymxpc2gsc3Vic2NyaWJlOnB1cnNlc1N1YnNjcmliZX09cHVic3ViKEUpO1xuY29uc3R7dXBkYXRlcjppbmJveFVwZGF0ZXIsbm90aWZpZXI6b2ZmZXJOb3RpZmllcn09XG5tYWtlTm90aWZpZXJLaXQoaW5ib3hTdGF0ZSk7XG5jb25zdHtwdWJsaXNoOmluYm94UHVibGlzaCxzdWJzY3JpYmU6aW5ib3hTdWJzY3JpYmV9PXB1YnN1YihFKTtcblxuY29uc3Qgbm90aWZpZXJzPWhhcmRlbih7XG5nZXRJbmJveE5vdGlmaWVyKCl7XG5yZXR1cm4gb2ZmZXJOb3RpZmllcjtcbiB9fSk7XG5cblxuLypcblxuICAgKi9cbmFzeW5jIGZ1bmN0aW9uIHN0YXJ0dXAoe1xuem9lLFxuYm9hcmQsXG5hZ29yaWNOYW1lcyxcbm5hbWVzQnlBZGRyZXNzLFxubXlBZGRyZXNzTmFtZUFkbWluLFxudGltZXJEZXZpY2UsXG50aW1lckRldmljZVNjYWxlLFxubG9jYWxUaW1lclNlcnZpY2UsXG5sb2NhbFRpbWVyUG9sbEludGVydmFsfSlcbntcbmFzc2VydChteUFkZHJlc3NOYW1lQWRtaW4sJ21pc3NpbmcgbXlBZGRyZXNzTmFtZUFkbWluJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGRhdGVOb3dQO1xuaWYodGltZXJEZXZpY2Upe1xuZGF0ZU5vd1A9bWFrZVRpbWVyRGV2aWNlRGF0ZU5vdyhELHRpbWVyRGV2aWNlLHRpbWVyRGV2aWNlU2NhbGUpO1xuIH1cbmlmKGxvY2FsVGltZXJTZXJ2aWNlKXtcbmRhdGVOb3dQPW1ha2VUaW1lclNlcnZpY2VEYXRlTm93KFxubG9jYWxUaW1lclNlcnZpY2UsXG5sb2NhbFRpbWVyUG9sbEludGVydmFsKTtcblxuIH1cblxuY29uc3QgZGF0ZU5vdz1hd2FpdCBkYXRlTm93UDtcbmNvbnN0IHc9bWFrZVdhbGxldFJvb3Qoe1xuYWdvcmljTmFtZXMsXG5uYW1lc0J5QWRkcmVzcyxcbm15QWRkcmVzc05hbWVBZG1pbixcbnpvZSxcbmJvYXJkLFxucHVyc2VzU3RhdGVDaGFuZ2VIYW5kbGVyOnB1cnNlc1B1Ymxpc2gsXG5pbmJveFN0YXRlQ2hhbmdlSGFuZGxlcjppbmJveFB1Ymxpc2gsXG5kYXRlTm93fSk7XG5cbmNvbnNvbGUuZGVidWcoJ3dhaXRpbmcgZm9yIHdhbGxldCB0byBpbml0aWFsaXplJyk7XG5hd2FpdCB3LmluaXRpYWxpemVkO1xuY29uc29sZS5kZWJ1Zygnd2FsbGV0IGluaXRpYWxpemVkJyk7XG53YWxsZXRBZG1pbj13LmFkbWluO1xud2FsbGV0Um9vdD13O1xuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlQnJpZGdlPShhcHByb3ZlLGRhcHBPcmlnaW4sbWV0YT17fSk9PntcbmFzeW5jIGZ1bmN0aW9uKm1ha2VBcHByb3ZlZE5vdGlmaWVyKHNvdXJjZU5vdGlmaWVyKXtcbmF3YWl0IGFwcHJvdmUoKTtcbmZvciBhd2FpdChjb25zdCBzdGF0ZSBvZiBzb3VyY2VOb3RpZmllcil7XG5hd2FpdCBhcHByb3ZlKCk7XG55aWVsZCBzdGF0ZTtcbiB9XG4gfVxuaGFyZGVuKG1ha2VBcHByb3ZlZE5vdGlmaWVyKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBicmlkZ2U9RmFyKCdicmlkZ2UnLHtcbiAgICAgIGFzeW5jIGdldFB1cnNlc05vdGlmaWVyKCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5jb25zdCBwdXJzZXNOb3RpZmllcj13YWxsZXRBZG1pbi5nZXRBdHRlbnVhdGVkUHVyc2VzTm90aWZpZXIoKTtcbmNvbnN0e25vdGlmaWVyLHVwZGF0ZXJ9PW1ha2VOb3RpZmllcktpdCgpO1xudm9pZCBvYnNlcnZlSXRlcmF0aW9uKG1ha2VBcHByb3ZlZE5vdGlmaWVyKHB1cnNlc05vdGlmaWVyKSx1cGRhdGVyKTtcbnJldHVybiBub3RpZmllcjtcbiB9LFxuICAgICAgYXN5bmMgZ2V0Q2FjaGVDb29yZGluYXRvcigpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldERhcHBDYWNoZUNvb3JkaW5hdG9yKGRhcHBPcmlnaW4pO1xuIH0sXG4gICAgICBhc3luYyBnZXRJc3N1ZXJzTm90aWZpZXIoKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRJc3N1ZXJzTm90aWZpZXIoKTtcbiB9LFxuICAgICAgYXN5bmMgYWRkT2ZmZXIob2ZmZXIpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmFkZE9mZmVyKG9mZmVyLHsuLi5tZXRhLGRhcHBPcmlnaW59KTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0T2ZmZXJzTm90aWZpZXIoc3RhdHVzPW51bGwpe1xuYXdhaXQgYXBwcm92ZSgpO1xuY29uc3R7bm90aWZpZXIsdXBkYXRlcn09bWFrZU5vdGlmaWVyS2l0KGluYm94U3RhdGUpO1xuY29uc3QgZmlsdGVyPShvZmZlcik9PlxuKHN0YXR1cz09PW51bGx8fG9mZmVyLnN0YXR1cz09PXN0YXR1cykmJlxub2ZmZXIucmVxdWVzdENvbnRleHQmJlxub2ZmZXIucmVxdWVzdENvbnRleHQuZGFwcE9yaWdpbj09PWRhcHBPcmlnaW47XG5jb25zdCBmaWx0ZXJlZE9mZmVycz0ob2ZmZXJzKT0+e1xucmV0dXJuIG9mZmVycy5maWx0ZXIoZmlsdGVyKS5tYXAoKHtyYXdJZCwuLi52fSk9Pih7XG4uLi52LFxuaWQ6cmF3SWR9KSk7XG5cbiB9O1xuXG52b2lkIG9ic2VydmVJdGVyYXRpb24obWFrZUFwcHJvdmVkTm90aWZpZXIob2ZmZXJOb3RpZmllcikse1xudXBkYXRlU3RhdGUob2ZmZXJzKXtcbnVwZGF0ZXIudXBkYXRlU3RhdGUoZmlsdGVyZWRPZmZlcnMob2ZmZXJzKSk7XG4gfSxcbmZpbmlzaChvZmZlcnMpe1xudXBkYXRlci5maW5pc2goZmlsdGVyZWRPZmZlcnMob2ZmZXJzKSk7XG4gfSxcbmZhaWwoZSl7XG51cGRhdGVyLmZhaWwoZSk7XG4gfX0pO1xuXG5yZXR1cm4gbm90aWZpZXI7XG4gfSxcbiAgICAgIGFzeW5jIGdldERlcG9zaXRGYWNldElkKGJyYW5kQm9hcmRJZCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0RGVwb3NpdEZhY2V0SWQoYnJhbmRCb2FyZElkKTtcbiB9LFxuICAgICAgYXN5bmMgc3VnZ2VzdElzc3VlcihwZXRuYW1lLGJvYXJkSWQpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLnN1Z2dlc3RJc3N1ZXIocGV0bmFtZSxib2FyZElkLGRhcHBPcmlnaW4pO1xuIH0sXG4gICAgICBhc3luYyBzdWdnZXN0SW5zdGFsbGF0aW9uKHBldG5hbWUsYm9hcmRJZCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uc3VnZ2VzdEluc3RhbGxhdGlvbihwZXRuYW1lLGJvYXJkSWQsZGFwcE9yaWdpbik7XG4gfSxcbiAgICAgIGFzeW5jIHN1Z2dlc3RJbnN0YW5jZShwZXRuYW1lLGJvYXJkSWQpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLnN1Z2dlc3RJbnN0YW5jZShwZXRuYW1lLGJvYXJkSWQsZGFwcE9yaWdpbik7XG4gfSxcbiAgICAgIGFzeW5jIGdldFVJTm90aWZpZXIocmF3SWQpe1xuYXdhaXQgYXBwcm92ZSgpO1xucmV0dXJuIHdhbGxldEFkbWluLmdldFVJTm90aWZpZXIocmF3SWQsZGFwcE9yaWdpbik7XG4gfSxcbiAgICAgIGFzeW5jIGdldFB1YmxpY05vdGlmaWVycyhyYXdJZCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0UHVibGljTm90aWZpZXJzKHJhd0lkLGRhcHBPcmlnaW4pO1xuIH0sXG4gICAgICBhc3luYyBnZXRab2UoKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRab2UoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0Qm9hcmQoKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRCb2FyZCgpO1xuIH0sXG4gICAgICBhc3luYyBnZXRBZ29yaWNOYW1lcyguLi5wYXRoKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRBZ29yaWNOYW1lcyguLi5wYXRoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0TmFtZXNCeUFkZHJlc3MoLi4ucGF0aCl7XG5hd2FpdCBhcHByb3ZlKCk7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0TmFtZXNCeUFkZHJlc3MoLi4ucGF0aCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldEJyYW5kUGV0bmFtZXMoYnJhbmRzKXtcbmF3YWl0IGFwcHJvdmUoKTtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRCcmFuZFBldG5hbWVzKGJyYW5kcyk7XG4gfX0pO1xuXG5yZXR1cm4gYnJpZGdlO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZWFwcHJvdmVkQnJpZGdlPUZhcigncHJlYXBwcm92ZWRCcmlkZ2UnLHtcbi8qXG5cblxuICAgICAqL1xuYWRkT2ZmZXIob2ZmZXIsbWV0YSl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uYWRkT2ZmZXIob2ZmZXIsbWV0YSk7XG4gfSxcbmdldERlcG9zaXRGYWNldElkKGJyYW5kQm9hcmRJZCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0RGVwb3NpdEZhY2V0SWQoYnJhbmRCb2FyZElkKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0T2ZmZXJzTm90aWZpZXIoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRPZmZlcnNOb3RpZmllcigpO1xuIH0sXG4gICAgICBhc3luYyBnZXRQdXJzZXNOb3RpZmllcigpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldEF0dGVudWF0ZWRQdXJzZXNOb3RpZmllcigpO1xuIH0sXG4gICAgICBhc3luYyBnZXRJc3N1ZXJzTm90aWZpZXIoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRJc3N1ZXJzTm90aWZpZXIoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0Q2FjaGVDb29yZGluYXRvcigpe1xucmV0dXJuIHdhbGxldEFkbWluLmdldENhY2hlQ29vcmRpbmF0b3IoKTtcbiB9LFxuc3VnZ2VzdEluc3RhbGxhdGlvbihwZXRuYW1lLGluc3RhbGxhdGlvbkJvYXJkSWQpe1xucmV0dXJuIHdhbGxldEFkbWluLnN1Z2dlc3RJbnN0YWxsYXRpb24ocGV0bmFtZSxpbnN0YWxsYXRpb25Cb2FyZElkKTtcbiB9LFxuc3VnZ2VzdEluc3RhbmNlKHBldG5hbWUsaW5zdGFuY2VCb2FyZElkKXtcbnJldHVybiB3YWxsZXRBZG1pbi5zdWdnZXN0SW5zdGFuY2UocGV0bmFtZSxpbnN0YW5jZUJvYXJkSWQpO1xuIH0sXG5zdWdnZXN0SXNzdWVyKHBldG5hbWUsaXNzdWVyQm9hcmRJZCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uc3VnZ2VzdElzc3VlcihwZXRuYW1lLGlzc3VlckJvYXJkSWQpO1xuIH0sXG5nZXRVSU5vdGlmaWVyKHJhd0lkKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRVSU5vdGlmaWVyKHJhd0lkKTtcbiB9LFxuZ2V0UHVibGljTm90aWZpZXJzKHJhd0lkKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRQdWJsaWNOb3RpZmllcnMocmF3SWQpO1xuIH0sXG4gICAgICBhc3luYyBnZXRab2UoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRab2UoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0Qm9hcmQoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRCb2FyZCgpO1xuIH0sXG4gICAgICBhc3luYyBnZXRBZ29yaWNOYW1lcyguLi5wYXRoKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRBZ29yaWNOYW1lcyguLi5wYXRoKTtcbiB9LFxuICAgICAgYXN5bmMgZ2V0TmFtZXNCeUFkZHJlc3MoLi4ucGF0aCl7XG5yZXR1cm4gd2FsbGV0QWRtaW4uZ2V0TmFtZXNCeUFkZHJlc3MoLi4ucGF0aCk7XG4gfSxcbiAgICAgIGFzeW5jIGdldEJyYW5kUGV0bmFtZXMoYnJhbmRzKXtcbnJldHVybiB3YWxsZXRBZG1pbi5nZXRCcmFuZFBldG5hbWVzKGJyYW5kcyk7XG4gfX0pO1xuXG5oYXJkZW4ocHJlYXBwcm92ZWRCcmlkZ2UpO1xuXG5hc3luYyBmdW5jdGlvbiBnZXRXYWxsZXQoYmFuayl7XG5hd2FpdCB3YWxsZXRSb290LmltcG9ydEJhbmtBc3NldHMoYmFuayk7XG5cbi8qXG5cbiAgICAgKi9cbmNvbnN0IHdhbGxldD1GYXIoJ3dhbGxldCcse1xuYWRkUGF5bWVudDp3YWxsZXRBZG1pbi5hZGRQYXltZW50LFxuICAgICAgYXN5bmMgZ2V0U2NvcGVkQnJpZGdlKHN1Z2dlc3RlZERhcHBQZXRuYW1lLGRhcHBPcmlnaW4pe1xuY29uc3QgYXBwcm92ZT1hc3luYygpPT57XG5hd2FpdCB3YWxsZXRBZG1pbi53YWl0Rm9yRGFwcEFwcHJvdmFsKFxuc3VnZ2VzdGVkRGFwcFBldG5hbWUsXG5kYXBwT3JpZ2luKTtcblxuIH07XG5cbnJldHVybiBtYWtlQnJpZGdlKGFwcHJvdmUsZGFwcE9yaWdpbik7XG4gfSxcbiAgICAgIGFzeW5jIGdldEJyaWRnZSgpe1xucmV0dXJuIHByZWFwcHJvdmVkQnJpZGdlO1xuIH0sXG5nZXREZXBvc2l0RmFjZXRJZDp3YWxsZXRBZG1pbi5nZXREZXBvc2l0RmFjZXRJZCxcbmdldEFkbWluRmFjZXQoKXtcbnJldHVybiBGYXIoJ2FkbWluRmFjZXQnLHtcbi4uLndhbGxldEFkbWluLFxuLi4ubm90aWZpZXJzLFxuZ2V0U2NvcGVkQnJpZGdlOndhbGxldC5nZXRTY29wZWRCcmlkZ2V9KTtcblxuIH0sXG5nZXRJc3N1ZXI6d2FsbGV0QWRtaW4uZ2V0SXNzdWVyLFxuZ2V0SXNzdWVyczp3YWxsZXRBZG1pbi5nZXRJc3N1ZXJzLFxuZ2V0UHVyc2U6d2FsbGV0QWRtaW4uZ2V0UHVyc2UsXG5nZXRQdXJzZXM6d2FsbGV0QWRtaW4uZ2V0UHVyc2VzLFxuXG5nZXRNYXJzaGFsbGVyOndhbGxldEFkbWluLmdldE1hcnNoYWxsZXIsXG5cbmxvb2t1cDp3YWxsZXRBZG1pbi5sb29rdXB9KTtcblxucmV0dXJuIGhhcmRlbih3YWxsZXQpO1xuIH1cblxuZnVuY3Rpb24gc2V0SFRUUE9iamVjdChvKXtcbmh0dHA9bztcbiB9XG5cbmZ1bmN0aW9uIHN0YXJ0U3Vic2NyaXB0aW9ucygpe1xuLy9cbi8vXG5wdXJzZXNTdWJzY3JpYmUoXG5oYXJkZW4oe1xubm90aWZ5KG0pe1xucHVyc2VzU3RhdGU9SlNPTi5wYXJzZShtKTtcbiB9fSkpO1xuXG5cblxuLy9cbi8vXG5pbmJveFN1YnNjcmliZShcbmhhcmRlbih7XG5ub3RpZnkobSl7XG5pbmJveFN0YXRlPUpTT04ucGFyc2UobSk7XG5pbmJveFVwZGF0ZXIudXBkYXRlU3RhdGUoaW5ib3hTdGF0ZSk7XG5pZihodHRwKXtcbi8vXG5mb3IoY29uc3QgY2hhbm5lbEhhbmRsZSBvZiBvZmZlclN1YnNjcmlwdGlvbnMua2V5cygpKXtcbnB1c2hPZmZlclN1YnNjcmlwdGlvbnMoY2hhbm5lbEhhbmRsZSxpbmJveFN0YXRlKTtcbiB9XG4gfVxuIH19KSk7XG5cblxuIH1cblxuZnVuY3Rpb24gZ2V0QnJpZGdlVVJMSGFuZGxlcigpe1xucmV0dXJuIEZhcignYnJpZGdlVVJMSGFuZGxlcicse1xuLypcblxuXG5cblxuXG5cblxuXG4gICAgICAgKi9cblxuLypcblxuXG5cblxuXG4gICAgICAgKi9cbiAgICAgIGFzeW5jIGdldEJvb3RzdHJhcChvdGhlclNpZGUsbWV0YSxvYmope1xuY29uc3R7ZGFwcE9yaWdpbj1tZXRhLm9yaWdpbn09b2JqO1xuY29uc3Qgc3VnZ2VzdGVkRGFwcFBldG5hbWU9U3RyaW5nKFxubWV0YS5xdWVyeSYmbWV0YS5xdWVyeS5zdWdnZXN0ZWREYXBwUGV0bmFtZXx8XG5tZXRhLmRhcHBPcmlnaW58fFxuZGFwcE9yaWdpbik7XG5cblxuY29uc3QgYXBwcm92ZT1hc3luYygpPT57XG5sZXQgbm90WWV0RW5hYmxlZD1mYWxzZTtcbmF3YWl0IHdhbGxldEFkbWluLndhaXRGb3JEYXBwQXBwcm92YWwoXG5zdWdnZXN0ZWREYXBwUGV0bmFtZSxcbmRhcHBPcmlnaW4sXG4oKT0+e1xubm90WWV0RW5hYmxlZD10cnVlO1xuRShvdGhlclNpZGUpLlxubmVlZERhcHBBcHByb3ZhbChkYXBwT3JpZ2luLHN1Z2dlc3RlZERhcHBQZXRuYW1lKS5cbmNhdGNoKChfKT0+eyB9KTtcbiB9KTtcblxuaWYobm90WWV0RW5hYmxlZCl7XG5hd2FpdCBFKG90aGVyU2lkZSkuZGFwcEFwcHJvdmVkKGRhcHBPcmlnaW4pO1xuIH1cbiB9O1xuXG5yZXR1cm4gbWFrZUJyaWRnZShhcHByb3ZlLGRhcHBPcmlnaW4sbWV0YSk7XG4gfSxcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgKi9cbmdldENvbW1hbmRIYW5kbGVyKCl7XG5yZXR1cm4gRmFyKCdjb21tYW5kSGFuZGxlcicse1xub25PcGVuKF9vYmosbWV0YSl7XG5icmlkZ2VIYW5kbGVzLmFkZChtZXRhLmNoYW5uZWxIYW5kbGUpO1xuIH0sXG5vbkNsb3NlKF9vYmosbWV0YSl7XG5icmlkZ2VIYW5kbGVzLmRlbGV0ZShtZXRhLmNoYW5uZWxIYW5kbGUpO1xub2ZmZXJTdWJzY3JpcHRpb25zLmRlbGV0ZShtZXRhLmNoYW5uZWxIYW5kbGUpO1xuIH0sXG5cbiAgICAgIGFzeW5jIG9uTWVzc2FnZShvYmosbWV0YSl7XG5jb25zdHtcbnR5cGUsXG5kYXBwT3JpZ2luPW1ldGEub3JpZ2luLFxuc3VnZ2VzdGVkRGFwcFBldG5hbWU9bWV0YS5xdWVyeSYmXG5tZXRhLnF1ZXJ5LnN1Z2dlc3RlZERhcHBQZXRuYW1lfHxcbm9iai5kYXBwT3JpZ2lufHxcbm1ldGEub3JpZ2lufT1cbm9iajtcblxuLy9cbmxldCBuZWVkQXBwcm92YWw9ZmFsc2U7XG5hd2FpdCB3YWxsZXRBZG1pbi53YWl0Rm9yRGFwcEFwcHJvdmFsKFxuc3VnZ2VzdGVkRGFwcFBldG5hbWUsXG5kYXBwT3JpZ2luLFxuKCk9Pntcbm5lZWRBcHByb3ZhbD10cnVlO1xuaHR0cFNlbmQoXG57XG50eXBlOid3YWxsZXROZWVkRGFwcEFwcHJvdmFsJyxcbmRhdGE6e1xuZGFwcE9yaWdpbixcbnN1Z2dlc3RlZERhcHBQZXRuYW1lfX0sXG5cblxuW21ldGEuY2hhbm5lbEhhbmRsZV0pO1xuXG4gfSk7XG5cbmlmKG5lZWRBcHByb3ZhbCl7XG5odHRwU2VuZChcbntcbnR5cGU6J3dhbGxldEhhdmVEYXBwQXBwcm92YWwnLFxuZGF0YTp7XG5kYXBwT3JpZ2lufX0sXG5cblxuW21ldGEuY2hhbm5lbEhhbmRsZV0pO1xuXG4gfVxuXG5zd2l0Y2godHlwZSl7XG5jYXNlJ3dhbGxldEdldFB1cnNlcyc6e1xucmV0dXJue1xudHlwZTond2FsbGV0VXBkYXRlUHVyc2VzJyxcbmRhdGE6YmlnaW50U3RyaW5naWZ5KHB1cnNlc1N0YXRlKX07XG5cbiB9XG5jYXNlJ3dhbGxldEFkZE9mZmVyJzp7XG5sZXQgaGFuZGxlZD1mYWxzZTtcbmNvbnN0IGFjdGlvbnM9RmFyKCdhY3Rpb25zJyx7XG5oYW5kbGVkKG9mZmVyKXtcbmlmKGhhbmRsZWQpe1xucmV0dXJuO1xuIH1cbmhhbmRsZWQ9dHJ1ZTtcbmh0dHBTZW5kKFxue1xudHlwZTond2FsbGV0T2ZmZXJIYW5kbGVkJyxcbmRhdGE6b2ZmZXIuaWR9LFxuXG5bbWV0YS5jaGFubmVsSGFuZGxlXSk7XG5cbiB9fSk7XG5cbnJldHVybntcbnR5cGU6J3dhbGxldE9mZmVyQWRkZWQnLFxuZGF0YTphd2FpdCB3YWxsZXRBZG1pbi5hZGRPZmZlcihcbnsuLi5vYmouZGF0YSxhY3Rpb25zfSxcbnsuLi5tZXRhLGRhcHBPcmlnaW59KX07XG5cblxuIH1cblxuY2FzZSd3YWxsZXRTdWJzY3JpYmVPZmZlcnMnOntcbmNvbnN0e3N0YXR1cz1udWxsfT1vYmo7XG5jb25zdHtjaGFubmVsSGFuZGxlfT1tZXRhO1xuXG5pZighY2hhbm5lbEhhbmRsZSl7XG5yZXR1cm57XG50eXBlOid3YWxsZXRTdWJzY3JpYmVkT2ZmZXJzJyxcbmRhdGE6ZmFsc2V9O1xuXG4gfVxuXG4vL1xuc3Vic2NyaWJlVG9PZmZlcnMoY2hhbm5lbEhhbmRsZSx7XG5vcmlnaW46ZGFwcE9yaWdpbixcbnN0YXR1c30pO1xuXG5yZXR1cm57XG50eXBlOid3YWxsZXRTdWJzY3JpYmVkT2ZmZXJzJyxcbmRhdGE6dHJ1ZX07XG5cbiB9XG5cbmNhc2Und2FsbGV0R2V0T2ZmZXJzJzp7XG5jb25zdHtzdGF0dXM9bnVsbH09b2JqO1xuXG4vL1xubGV0IHJlc3VsdD1hd2FpdCB3YWxsZXRBZG1pbi5nZXRPZmZlcnMoe1xub3JpZ2luOmRhcHBPcmlnaW59KTtcblxuaWYoc3RhdHVzIT09bnVsbCl7XG4vL1xucmVzdWx0PWhhcmRlbihcbnJlc3VsdC5maWx0ZXIoKG9mZmVyKT0+b2ZmZXIuc3RhdHVzPT09c3RhdHVzKSk7XG5cbiB9XG5cbnJldHVybntcbnR5cGU6J3dhbGxldE9mZmVyRGVzY3JpcHRpb25zJyxcbmRhdGE6cmVzdWx0fTtcblxuIH1cblxuY2FzZSd3YWxsZXRHZXREZXBvc2l0RmFjZXRJZCc6e1xuY29uc3R7YnJhbmRCb2FyZElkfT1vYmo7XG5jb25zdCByZXN1bHQ9XG5hd2FpdCB3YWxsZXRBZG1pbi5nZXREZXBvc2l0RmFjZXRJZChicmFuZEJvYXJkSWQpO1xucmV0dXJue1xudHlwZTond2FsbGV0RGVwb3NpdEZhY2V0SWRSZXNwb25zZScsXG5kYXRhOnJlc3VsdH07XG5cbiB9XG5cbmNhc2Und2FsbGV0U3VnZ2VzdElzc3Vlcic6e1xuY29uc3R7cGV0bmFtZSxib2FyZElkfT1vYmo7XG5jb25zdCByZXN1bHQ9YXdhaXQgd2FsbGV0QWRtaW4uc3VnZ2VzdElzc3VlcihcbnBldG5hbWUsXG5ib2FyZElkLFxuZGFwcE9yaWdpbik7XG5cbnJldHVybntcbnR5cGU6J3dhbGxldFN1Z2dlc3RJc3N1ZXJSZXNwb25zZScsXG5kYXRhOnJlc3VsdH07XG5cbiB9XG5cbmNhc2Und2FsbGV0U3VnZ2VzdEluc3RhbmNlJzp7XG5jb25zdHtwZXRuYW1lLGJvYXJkSWR9PW9iajtcbmNvbnN0IHJlc3VsdD1hd2FpdCB3YWxsZXRBZG1pbi5zdWdnZXN0SW5zdGFuY2UoXG5wZXRuYW1lLFxuYm9hcmRJZCxcbmRhcHBPcmlnaW4pO1xuXG5yZXR1cm57XG50eXBlOid3YWxsZXRTdWdnZXN0SW5zdGFuY2VSZXNwb25zZScsXG5kYXRhOnJlc3VsdH07XG5cbiB9XG5cbmNhc2Und2FsbGV0U3VnZ2VzdEluc3RhbGxhdGlvbic6e1xuY29uc3R7cGV0bmFtZSxib2FyZElkfT1vYmo7XG5jb25zdCByZXN1bHQ9YXdhaXQgd2FsbGV0QWRtaW4uc3VnZ2VzdEluc3RhbGxhdGlvbihcbnBldG5hbWUsXG5ib2FyZElkLFxuZGFwcE9yaWdpbik7XG5cbnJldHVybntcbnR5cGU6J3dhbGxldFN1Z2dlc3RJbnN0YWxsYXRpb25SZXNwb25zZScsXG5kYXRhOnJlc3VsdH07XG5cbiB9XG5cbmRlZmF1bHQ6XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTt9XG5cbiB9fSk7XG5cbiB9fSk7XG5cbiB9XG5cbnN0YXJ0U3Vic2NyaXB0aW9ucygpO1xuXG5mdW5jdGlvbiBnZXRDb21tYW5kSGFuZGxlciguLi5wYXJhbXMpe1xuY29uc29sZS5kZWJ1ZyhcbidnZXRDb21tYW5kSGFuZGxlciBjYWxsZWQgaW4gd2FsbGV0LCBidXQgZG9lcyBub3QgZXhpc3QnLFxucGFyYW1zKTtcblxuIH1cblxucmV0dXJuIEZhcigncm9vdCcse1xuc3RhcnR1cCxcbmdldFdhbGxldCxcbnNldEhUVFBPYmplY3QsXG5nZXRCcmlkZ2VVUkxIYW5kbGVyLFxuZ2V0Q29tbWFuZEhhbmRsZXJ9KTtcblxuIH1cblxuLypcblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICAgICAgICAgIHNwYXduKHRlcm1zLF9pbnZpdGVNYWtlcil7XG5jb25zdCB3YWxsZXRWYXQ9YnVpbGRSb290T2JqZWN0KCk7XG5yZXR1cm4gd2FsbGV0VmF0LnN0YXJ0dXAodGVybXMpLnRoZW4oKF8pPT53YWxsZXRWYXQpO1xuIH0kaM2PX29uY2UuZGVmYXVsdCggICAgIHNwYXduKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZmF1bHQiOlsiZGVmYXVsdCJdLCJidWlsZFJvb3RPYmplY3QiOlsiYnVpbGRSb290T2JqZWN0Il19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAHB5q0ZdGQAAXRkAADMAAABAYWdvcmljL3pvZS12MC4yNi4yL3NyYy9jb250cmFjdFN1cHBvcnQvcmVjb3JkZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGFnb3JpYy9pbnRlcm5hbCIsIkBhZ29yaWMvbm90aWZpZXIiLCJAYWdvcmljL25vdGlmaWVyL3Rvb2xzL3Rlc3RTdXBwb3J0cy5qcyIsIkBhZ29yaWMvc3RvcmUiLCJAYWdvcmljL3ZhdC1kYXRhIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCJdLCJleHBvcnRzIjpbIlJlY29yZGVyS2l0U2hhcGUiLCJkZWZpbmVFUmVjb3JkZXJLaXQiLCJkZWZpbmVSZWNvcmRlcktpdCIsInByZXBhcmVNb2NrUmVjb3JkZXJLaXRNYWtlcnMiLCJwcmVwYXJlUmVjb3JkZXIiLCJwcmVwYXJlUmVjb3JkZXJLaXQiLCJwcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLFN0b3JhZ2VOb2RlU2hhcGUscHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0LG1ha2VGYWtlTWFyc2hhbGxlcixtYWtlRmFrZVN0b3JhZ2UsbXVzdE1hdGNoLE0sbWFrZVNjYWxhckJpZ01hcFN0b3JlLHByZXBhcmVFeG9DbGFzcyxFOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL2ludGVybmFsXCIsIFtbXCJTdG9yYWdlTm9kZVNoYXBlXCIsIFskaM2PX2EgPT4gKFN0b3JhZ2VOb2RlU2hhcGUgPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL25vdGlmaWVyXCIsIFtbXCJwcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUR1cmFibGVQdWJsaXNoS2l0ID0gJGjNj19hKV1dXV0sW1wiQGFnb3JpYy9ub3RpZmllci90b29scy90ZXN0U3VwcG9ydHMuanNcIiwgW1tcIm1ha2VGYWtlTWFyc2hhbGxlclwiLCBbJGjNj19hID0+IChtYWtlRmFrZU1hcnNoYWxsZXIgPSAkaM2PX2EpXV0sW1wibWFrZUZha2VTdG9yYWdlXCIsIFskaM2PX2EgPT4gKG1ha2VGYWtlU3RvcmFnZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvc3RvcmVcIiwgW1tcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV1dXSxbXCJAYWdvcmljL3ZhdC1kYXRhXCIsIFtbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhckJpZ01hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJCaWdNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJlcGFyZVJlY29yZGVyPShiYWdnYWdlLG1hcnNoYWxsZXIpPT57XG5jb25zdCBtYWtlUmVjb3JkZXI9cHJlcGFyZUV4b0NsYXNzKFxuYmFnZ2FnZSxcbidSZWNvcmRlcicsXG5NLmludGVyZmFjZSgnUmVjb3JkZXInLHtcbmdldFN0b3JhZ2VOb2RlOk0uY2FsbCgpLnJldHVybnMoU3RvcmFnZU5vZGVTaGFwZSksXG5nZXRTdG9yYWdlUGF0aDpNLmNhbGwoKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbndyaXRlOk0uY2FsbChNLmFueSgpKS5yZXR1cm5zKE0ucHJvbWlzZSgpKSxcbndyaXRlRmluYWw6TS5jYWxsKE0uYW55KCkpLnJldHVybnMoTS5wcm9taXNlKCkpfSksXG5cbi8qXG5cblxuXG5cbiAgICAgKi9cbihcbnB1Ymxpc2hlcixcbnN0b3JhZ2VOb2RlLFxudmFsdWVTaGFwZT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL00uYW55KCkpPT5cbntcbnJldHVybntcbmNsb3NlZDpmYWxzZSxcbnB1Ymxpc2hlcixcbnN0b3JhZ2VOb2RlLFxuc3RvcmFnZVBhdGg6LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovdW5kZWZpbmVkLFxudmFsdWVTaGFwZX07XG5cbiB9LFxue1xuZ2V0U3RvcmFnZU5vZGUoKXtcbnJldHVybiB0aGlzLnN0YXRlLnN0b3JhZ2VOb2RlO1xuIH0sXG4vKlxuXG5cblxuICAgICAgICovXG4gICAgICBhc3luYyBnZXRTdG9yYWdlUGF0aCgpe1xuY29uc3R7c3RvcmFnZVBhdGg6aGVsZFBhdGh9PXRoaXMuc3RhdGU7XG4vL1xuYXdhaXQgbnVsbDtcbmlmKGhlbGRQYXRoIT09dW5kZWZpbmVkKXtcbnJldHVybiBoZWxkUGF0aDtcbiB9XG5jb25zdCBwYXRoPWF3YWl0IEUodGhpcy5zdGF0ZS5zdG9yYWdlTm9kZSkuZ2V0UGF0aCgpO1xudGhpcy5zdGF0ZS5zdG9yYWdlUGF0aD1wYXRoO1xucmV0dXJuIHBhdGg7XG4gfSxcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgd3JpdGUodmFsdWUpe1xuY29uc3R7Y2xvc2VkLHB1Ymxpc2hlcixzdG9yYWdlTm9kZSx2YWx1ZVNoYXBlfT10aGlzLnN0YXRlO1xuIWNsb3NlZHx8RmFpbCBgY2Fubm90IHdyaXRlIHRvIGNsb3NlZCByZWNvcmRlcmA7XG5tdXN0TWF0Y2godmFsdWUsdmFsdWVTaGFwZSk7XG5jb25zdCBlbmNvZGVkPWF3YWl0IEUobWFyc2hhbGxlcikudG9DYXBEYXRhKHZhbHVlKTtcbmNvbnN0IHNlcmlhbGl6ZWQ9SlNPTi5zdHJpbmdpZnkoZW5jb2RlZCk7XG5hd2FpdCBFKHN0b3JhZ2VOb2RlKS5zZXRWYWx1ZShzZXJpYWxpemVkKTtcblxuLy9cbnJldHVybiBwdWJsaXNoZXIucHVibGlzaCh2YWx1ZSk7XG4gfSxcbi8qXG5cblxuXG5cbiAgICAgICAqL1xuICAgICAgYXN5bmMgd3JpdGVGaW5hbCh2YWx1ZSl7XG5jb25zdHtjbG9zZWQscHVibGlzaGVyLHN0b3JhZ2VOb2RlLHZhbHVlU2hhcGV9PXRoaXMuc3RhdGU7XG4hY2xvc2VkfHxGYWlsIGBjYW5ub3Qgd3JpdGUgdG8gY2xvc2VkIHJlY29yZGVyYDtcbm11c3RNYXRjaCh2YWx1ZSx2YWx1ZVNoYXBlKTtcbmNvbnN0IGVuY29kZWQ9YXdhaXQgRShtYXJzaGFsbGVyKS50b0NhcERhdGEodmFsdWUpO1xuY29uc3Qgc2VyaWFsaXplZD1KU09OLnN0cmluZ2lmeShlbmNvZGVkKTtcbmF3YWl0IEUoc3RvcmFnZU5vZGUpLnNldFZhbHVlKHNlcmlhbGl6ZWQpO1xuXG4vL1xudGhpcy5zdGF0ZS5jbG9zZWQ9dHJ1ZTtcbnJldHVybiBwdWJsaXNoZXIuZmluaXNoKHZhbHVlKTtcbiB9fSk7XG5cblxuXG5yZXR1cm4gbWFrZVJlY29yZGVyO1xuIH07JGjNj19vbmNlLnByZXBhcmVSZWNvcmRlcihwcmVwYXJlUmVjb3JkZXIpO1xuaGFyZGVuKHByZXBhcmVSZWNvcmRlcik7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmluZVJlY29yZGVyS2l0PSh7bWFrZVJlY29yZGVyLG1ha2VEdXJhYmxlUHVibGlzaEtpdH0pPT57XG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgbWFrZVJlY29yZGVyS2l0PShzdG9yYWdlTm9kZSx2YWx1ZVNoYXBlKT0+e1xuY29uc3R7c3Vic2NyaWJlcixwdWJsaXNoZXJ9PW1ha2VEdXJhYmxlUHVibGlzaEtpdCgpO1xuY29uc3QgcmVjb3JkZXI9bWFrZVJlY29yZGVyKFxucHVibGlzaGVyLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnN0b3JhZ2VOb2RlLFxuXG52YWx1ZVNoYXBlKTtcblxucmV0dXJuIGhhcmRlbih7c3Vic2NyaWJlcixyZWNvcmRlcn0pO1xuIH07XG5yZXR1cm4gbWFrZVJlY29yZGVyS2l0O1xuIH07XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovJGjNj19vbmNlLmRlZmluZVJlY29yZGVyS2l0KGRlZmluZVJlY29yZGVyS2l0KTtcbmNvbnN0ICAgICAgICBkZWZpbmVFUmVjb3JkZXJLaXQ9KHttYWtlUmVjb3JkZXIsbWFrZUR1cmFibGVQdWJsaXNoS2l0fSk9Pntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlRVJlY29yZGVyS2l0PShzdG9yYWdlTm9kZVAsdmFsdWVTaGFwZSk9PntcbmNvbnN0e3B1Ymxpc2hlcixzdWJzY3JpYmVyfT1tYWtlRHVyYWJsZVB1Ymxpc2hLaXQoKTtcbmNvbnN0IHJlY29yZGVyUD1FLndoZW4oc3RvcmFnZU5vZGVQLChzdG9yYWdlTm9kZSk9PlxubWFrZVJlY29yZGVyKFxucHVibGlzaGVyLFxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovc3RvcmFnZU5vZGUsXG52YWx1ZVNoYXBlKSk7XG5cblxucmV0dXJue3N1YnNjcmliZXIscmVjb3JkZXJQfTtcbiB9O1xucmV0dXJuIG1ha2VFUmVjb3JkZXJLaXQ7XG4gfTskaM2PX29uY2UuZGVmaW5lRVJlY29yZGVyS2l0KGRlZmluZUVSZWNvcmRlcktpdCk7XG5oYXJkZW4oZGVmaW5lRVJlY29yZGVyS2l0KTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBwcmVwYXJlUmVjb3JkZXJLaXQ9KGJhZ2dhZ2UsbWFyc2hhbGxlcik9PntcbmNvbnN0IG1ha2VEdXJhYmxlUHVibGlzaEtpdD1wcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQoXG5iYWdnYWdlLFxuJ0R1cmFibGUgUHVibGlzaCBLaXQnKTtcblxuY29uc3QgbWFrZVJlY29yZGVyPXByZXBhcmVSZWNvcmRlcihiYWdnYWdlLG1hcnNoYWxsZXIpO1xucmV0dXJuIGRlZmluZVJlY29yZGVyS2l0KHttYWtlRHVyYWJsZVB1Ymxpc2hLaXQsbWFrZVJlY29yZGVyfSk7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5wcmVwYXJlUmVjb3JkZXJLaXQocHJlcGFyZVJlY29yZGVyS2l0KTtcbmNvbnN0ICAgICAgICBwcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnM9KGJhZ2dhZ2UsbWFyc2hhbGxlcik9PntcbmNvbnN0IG1ha2VEdXJhYmxlUHVibGlzaEtpdD1wcmVwYXJlRHVyYWJsZVB1Ymxpc2hLaXQoXG5iYWdnYWdlLFxuJ0R1cmFibGUgUHVibGlzaCBLaXQnKTtcblxuY29uc3QgbWFrZVJlY29yZGVyPXByZXBhcmVSZWNvcmRlcihiYWdnYWdlLG1hcnNoYWxsZXIpO1xuXG5jb25zdCBtYWtlUmVjb3JkZXJLaXQ9ZGVmaW5lUmVjb3JkZXJLaXQoe1xubWFrZVJlY29yZGVyLFxubWFrZUR1cmFibGVQdWJsaXNoS2l0fSk7XG5cbmNvbnN0IG1ha2VFUmVjb3JkZXJLaXQ9ZGVmaW5lRVJlY29yZGVyS2l0KHtcbm1ha2VSZWNvcmRlcixcbm1ha2VEdXJhYmxlUHVibGlzaEtpdH0pO1xuXG5cbnJldHVybntcbm1ha2VEdXJhYmxlUHVibGlzaEtpdCxcbm1ha2VSZWNvcmRlcixcbm1ha2VSZWNvcmRlcktpdCxcbm1ha2VFUmVjb3JkZXJLaXR9O1xuXG4gfTtcblxuLypcblxuICovJGjNj19vbmNlLnByZXBhcmVSZWNvcmRlcktpdE1ha2VycyhwcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnMpO1xuY29uc3QgICAgICAgIHByZXBhcmVNb2NrUmVjb3JkZXJLaXRNYWtlcnM9KCk9PntcbmNvbnN0IGJhZ2dhZ2U9bWFrZVNjYWxhckJpZ01hcFN0b3JlKCdtb2NrIHJlY29yZGVyIGJhZ2dhZ2UnKTtcbmNvbnN0IG1hcnNoYWxsZXI9bWFrZUZha2VNYXJzaGFsbGVyKCk7XG5yZXR1cm57XG4uLi5wcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnMoYmFnZ2FnZSxtYXJzaGFsbGVyKSxcbnN0b3JhZ2VOb2RlOm1ha2VGYWtlU3RvcmFnZSgnbW9jayByZWNvcmRlciBzdG9yYWdlJyl9O1xuXG4gfTskaM2PX29uY2UucHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2VycyhwcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzKTtcblxuY29uc3QgICAgICAgIFJlY29yZGVyS2l0U2hhcGU9e1xucmVjb3JkZXI6TS5yZW1vdGFibGUoKSxcbnN1YnNjcmliZXI6TS5yZW1vdGFibGUoKX07JGjNj19vbmNlLlJlY29yZGVyS2l0U2hhcGUoUmVjb3JkZXJLaXRTaGFwZSk7XG5cbmhhcmRlbihSZWNvcmRlcktpdFNoYXBlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InByZXBhcmVSZWNvcmRlciI6WyJwcmVwYXJlUmVjb3JkZXIiXSwiZGVmaW5lUmVjb3JkZXJLaXQiOlsiZGVmaW5lUmVjb3JkZXJLaXQiXSwiZGVmaW5lRVJlY29yZGVyS2l0IjpbImRlZmluZUVSZWNvcmRlcktpdCJdLCJwcmVwYXJlUmVjb3JkZXJLaXQiOlsicHJlcGFyZVJlY29yZGVyS2l0Il0sInByZXBhcmVSZWNvcmRlcktpdE1ha2VycyI6WyJwcmVwYXJlUmVjb3JkZXJLaXRNYWtlcnMiXSwicHJlcGFyZU1vY2tSZWNvcmRlcktpdE1ha2VycyI6WyJwcmVwYXJlTW9ja1JlY29yZGVyS2l0TWFrZXJzIl0sIlJlY29yZGVyS2l0U2hhcGUiOlsiUmVjb3JkZXJLaXRTaGFwZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD94zlxtwEAALcBAAAeAAAAQGFnb3JpYy96b25lLXYwLjIuMi9kdXJhYmxlLmpzeyJpbXBvcnRzIjpbIi4vc3JjL2R1cmFibGUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9kdXJhYmxlLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2R1cmFibGUuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAvR5yejkRAAA5EQAAIgAAAEBhZ29yaWMvem9uZS12MC4yLjIvc3JjL2R1cmFibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBhZ29yaWMvdmF0LWRhdGEiLCJAYWdvcmljL2Jhc2Utem9uZSJdLCJleHBvcnRzIjpbIm1ha2VEdXJhYmxlWm9uZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwsRmFyLGlzUGFzc2FibGUsY2FuQmVEdXJhYmxlLG1ha2VTY2FsYXJNYXBTdG9yZSxwcmVwYXJlRXhvLHByZXBhcmVFeG9DbGFzcyxwcmVwYXJlRXhvQ2xhc3NLaXQscHJvdmlkZUR1cmFibGVNYXBTdG9yZSxwcm92aWRlRHVyYWJsZVNldFN0b3JlLHByb3ZpZGVEdXJhYmxlV2Vha01hcFN0b3JlLHByb3ZpZGVEdXJhYmxlV2Vha1NldFN0b3JlLHdhdGNoUHJvbWlzZSxrZXlzLG1ha2VPbmNlS2l0OyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dLFtcImlzUGFzc2FibGVcIiwgWyRozY9fYSA9PiAoaXNQYXNzYWJsZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvdmF0LWRhdGFcIiwgW1tcImNhbkJlRHVyYWJsZVwiLCBbJGjNj19hID0+IChjYW5CZUR1cmFibGUgPSAkaM2PX2EpXV0sW1wibWFrZVNjYWxhck1hcFN0b3JlXCIsIFskaM2PX2EgPT4gKG1ha2VTY2FsYXJNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG8gPSAkaM2PX2EpXV0sW1wicHJlcGFyZUV4b0NsYXNzXCIsIFskaM2PX2EgPT4gKHByZXBhcmVFeG9DbGFzcyA9ICRozY9fYSldXSxbXCJwcmVwYXJlRXhvQ2xhc3NLaXRcIiwgWyRozY9fYSA9PiAocHJlcGFyZUV4b0NsYXNzS2l0ID0gJGjNj19hKV1dLFtcInByb3ZpZGVEdXJhYmxlTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVNYXBTdG9yZSA9ICRozY9fYSldXSxbXCJwcm92aWRlRHVyYWJsZVNldFN0b3JlXCIsIFskaM2PX2EgPT4gKHByb3ZpZGVEdXJhYmxlU2V0U3RvcmUgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUgPSAkaM2PX2EpXV0sW1wicHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmVcIiwgWyRozY9fYSA9PiAocHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUgPSAkaM2PX2EpXV0sW1wid2F0Y2hQcm9taXNlXCIsIFskaM2PX2EgPT4gKHdhdGNoUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIkBhZ29yaWMvYmFzZS16b25lXCIsIFtbXCJhZ29yaWNWYXREYXRhS2V5c1wiLCBbJGjNj19hID0+IChrZXlzID0gJGjNj19hKV1dLFtcIm1ha2VPbmNlS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VPbmNlS2l0ID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzU3RvcmFibGU9KHNwZWNpbWVuKT0+aXNQYXNzYWJsZShzcGVjaW1lbikmJmNhbkJlRHVyYWJsZShzcGVjaW1lbik7XG5oYXJkZW4oaXNTdG9yYWJsZSk7XG5cbi8qXG5cbiAqL1xuY29uc3QgYXR0YWNoRHVyYWJsZVN0b3Jlcz0oZ2V0QmFnZ2FnZSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hcFN0b3JlPShsYWJlbCxvcHRpb25zKT0+e1xuY29uc3QgYmFnZ2FnZT1nZXRCYWdnYWdlKCk7XG5jb25zdCByZXQ9cHJvdmlkZUR1cmFibGVNYXBTdG9yZShiYWdnYWdlLGxhYmVsLG9wdGlvbnMpO1xucmV0dXJuIHJldDtcbiB9O1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2V0U3RvcmU9KGxhYmVsLG9wdGlvbnMpPT5cbnByb3ZpZGVEdXJhYmxlU2V0U3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdlYWtTZXRTdG9yZT0obGFiZWwsb3B0aW9ucyk9PlxucHJvdmlkZUR1cmFibGVXZWFrU2V0U3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHdlYWtNYXBTdG9yZT0obGFiZWwsb3B0aW9ucyk9PlxucHJvdmlkZUR1cmFibGVXZWFrTWFwU3RvcmUoZ2V0QmFnZ2FnZSgpLGxhYmVsLG9wdGlvbnMpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnJldHVybiBGYXIoJ2R1cmFibGVTdG9yZXMnLHtcbmRldGFjaGVkOigpPT5kZXRhY2hlZER1cmFibGVTdG9yZXMsXG5pc1N0b3JhYmxlLFxubWFwU3RvcmUsXG5zZXRTdG9yZSxcbndlYWtNYXBTdG9yZSxcbndlYWtTZXRTdG9yZX0pO1xuXG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBkZXRhY2hlZER1cmFibGVTdG9yZXM9YXR0YWNoRHVyYWJsZVN0b3JlcygoKT0+XG5tYWtlU2NhbGFyTWFwU3RvcmUoJ2RldGFjaGVkJykpO1xuXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUR1cmFibGVab25lPShiYWdnYWdlLGJhc2VMYWJlbD0nZHVyYWJsZVpvbmUnKT0+e1xuYmFnZ2FnZXx8RmFpbCBgYmFnZ2FnZSByZXF1aXJlZGA7XG5cbmNvbnN0IGF0dGFjaGVkU3RvcmVzPWF0dGFjaER1cmFibGVTdG9yZXMoKCk9PmJhZ2dhZ2UpO1xuXG5jb25zdHttYWtlT25jZSx3cmFwUHJvdmlkZXJ9PW1ha2VPbmNlS2l0KFxuYmFzZUxhYmVsLFxuYXR0YWNoZWRTdG9yZXMsXG5iYWdnYWdlKTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBleG9DbGFzcz0oLi4uYXJncyk9PnByZXBhcmVFeG9DbGFzcyhiYWdnYWdlLC4uLmFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbi8vXG5jb25zdCBleG9DbGFzc0tpdD0oLi4uYXJncyk9PnByZXBhcmVFeG9DbGFzc0tpdChiYWdnYWdlLC4uLmFyZ3MpO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGV4bz0oLi4uYXJncyk9PnByZXBhcmVFeG8oYmFnZ2FnZSwuLi5hcmdzKTtcblxuY29uc3Qgc3ViWm9uZVN0b3JlPXdyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy5tYXBTdG9yZSxrZXlzLnpvbmUpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHN1YlpvbmU9KGxhYmVsLG9wdGlvbnM9e30pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3ViQmFnZ2FnZT1zdWJab25lU3RvcmUobGFiZWwsb3B0aW9ucyk7XG5yZXR1cm4gbWFrZUR1cmFibGVab25lKHN1YkJhZ2dhZ2UsIGAke2Jhc2VMYWJlbH0uJHtsYWJlbH1gKTtcbiB9O1xuXG5yZXR1cm4gRmFyKCdkdXJhYmxlWm9uZScse1xuZXhvOndyYXBQcm92aWRlcihleG8sa2V5cy5leG8pLFxuZXhvQ2xhc3M6d3JhcFByb3ZpZGVyKGV4b0NsYXNzLGtleXMuZXhvQ2xhc3MpLFxuZXhvQ2xhc3NLaXQ6d3JhcFByb3ZpZGVyKGV4b0NsYXNzS2l0LGtleXMuZXhvQ2xhc3NLaXQpLFxuc3ViWm9uZSxcblxubWFrZU9uY2UsXG53YXRjaFByb21pc2UsXG5kZXRhY2hlZDphdHRhY2hlZFN0b3Jlcy5kZXRhY2hlZCxcbmlzU3RvcmFibGU6YXR0YWNoZWRTdG9yZXMuaXNTdG9yYWJsZSxcblxubWFwU3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLm1hcFN0b3JlLGtleXMuc3RvcmUpLFxuc2V0U3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLnNldFN0b3JlLGtleXMuc3RvcmUpLFxud2Vha01hcFN0b3JlOndyYXBQcm92aWRlcihhdHRhY2hlZFN0b3Jlcy53ZWFrTWFwU3RvcmUsa2V5cy5zdG9yZSksXG53ZWFrU2V0U3RvcmU6d3JhcFByb3ZpZGVyKGF0dGFjaGVkU3RvcmVzLndlYWtTZXRTdG9yZSxrZXlzLnN0b3JlKX0pO1xuXG4gfTskaM2PX29uY2UubWFrZUR1cmFibGVab25lKG1ha2VEdXJhYmxlWm9uZSk7XG5oYXJkZW4obWFrZUR1cmFibGVab25lKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VEdXJhYmxlWm9uZSI6WyJtYWtlRHVyYWJsZVpvbmUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAKjJjOPYEAAD2BAAAKwAAAEBlbmRvL2NvbW1vbi12MS4yLjkvYXBwbHktbGFiZWxpbmctZXJyb3IuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiLi90aHJvdy1sYWJlbGVkLmpzIl0sImV4cG9ydHMiOlsiYXBwbHlMYWJlbGluZ0Vycm9yIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxpc1Byb21pc2UsdGhyb3dMYWJlbGVkOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vcHJvbWlzZS1raXRcIiwgW1tcImlzUHJvbWlzZVwiLCBbJGjNj19hID0+IChpc1Byb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3Rocm93LWxhYmVsZWQuanNcIiwgW1tcInRocm93TGFiZWxlZFwiLCBbJGjNj19hID0+ICh0aHJvd0xhYmVsZWQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXBwbHlMYWJlbGluZ0Vycm9yPShmdW5jLGFyZ3MsbGFiZWw9dW5kZWZpbmVkKT0+e1xuaWYobGFiZWw9PT11bmRlZmluZWQpe1xucmV0dXJuIGZ1bmMoLi4uYXJncyk7XG4gfVxubGV0IHJlc3VsdDtcbnRyeXtcbnJlc3VsdD1mdW5jKC4uLmFyZ3MpO1xuIH1jYXRjaChlcnIpe1xudGhyb3dMYWJlbGVkKGVycixsYWJlbCk7XG4gfVxuaWYoaXNQcm9taXNlKHJlc3VsdCkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIEUud2hlbihyZXN1bHQsdW5kZWZpbmVkLChyZWFzb24pPT50aHJvd0xhYmVsZWQocmVhc29uLGxhYmVsKSk7XG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9OyRozY9fb25jZS5hcHBseUxhYmVsaW5nRXJyb3IoYXBwbHlMYWJlbGluZ0Vycm9yKTtcbmhhcmRlbihhcHBseUxhYmVsaW5nRXJyb3IpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXBwbHlMYWJlbGluZ0Vycm9yIjpbImFwcGx5TGFiZWxpbmdFcnJvciJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAJf6BMiwQAAIsEAAAqAAAAQGVuZG8vY29tbW9uLXYxLjIuOS9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImZyb21VbmlxdWVFbnRyaWVzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV1dKTsgICBcblxuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGZyb21VbmlxdWVFbnRyaWVzPShhbGxFbnRyaWVzKT0+e1xuY29uc3QgZW50cmllc0FycmF5PVsuLi5hbGxFbnRyaWVzXTtcbmNvbnN0IHJlc3VsdD1oYXJkZW4oZnJvbUVudHJpZXMoZW50cmllc0FycmF5KSk7XG5pZihvd25LZXlzKHJlc3VsdCkubGVuZ3RoPT09ZW50cmllc0FycmF5Lmxlbmd0aCl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbmNvbnN0IG5hbWVzPW5ldyBTZXQoKTtcbmZvcihjb25zdFtuYW1lLF9db2YgZW50cmllc0FycmF5KXtcbmlmKG5hbWVzLmhhcyhuYW1lKSl7XG5GYWlsIGBjb2xsaXNpb24gb24gcHJvcGVydHkgbmFtZSAke3EobmFtZSl9OiAke2VudHJpZXNBcnJheX1gO1xuIH1cbm5hbWVzLmFkZChuYW1lKTtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogZmFpbGVkIHRvIGNyZWF0ZSBvYmplY3QgZnJvbSB1bmlxdWUgZW50cmllc2A7XG4gfTskaM2PX29uY2UuZnJvbVVuaXF1ZUVudHJpZXMoZnJvbVVuaXF1ZUVudHJpZXMpO1xuaGFyZGVuKGZyb21VbmlxdWVFbnRyaWVzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImZyb21VbmlxdWVFbnRyaWVzIjpbImZyb21VbmlxdWVFbnRyaWVzIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAL0YEu1mAgAAZgIAACQAAABAZW5kby9jb21tb24tdjEuMi45L2lkZW50LWNoZWNrZXIuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImlkZW50Q2hlY2tlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaWRlbnRDaGVja2VyPShjb25kLF9kZXRhaWxzKT0+Y29uZDskaM2PX29uY2UuaWRlbnRDaGVja2VyKGlkZW50Q2hlY2tlcik7XG5oYXJkZW4oaWRlbnRDaGVja2VyKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlkZW50Q2hlY2tlciI6WyJpZGVudENoZWNrZXIiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAJPZsEacCAACnAgAAJgAAAEBlbmRvL2NvbW1vbi12MS4yLjkvbGlzdC1kaWZmZXJlbmNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJsaXN0RGlmZmVyZW5jZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbGlzdERpZmZlcmVuY2U9KGxlZnRMaXN0LHJpZ2h0TGlzdCk9PntcbmNvbnN0IHJpZ2h0U2V0PW5ldyBTZXQocmlnaHRMaXN0KTtcbnJldHVybiBsZWZ0TGlzdC5maWx0ZXIoKGVsZW1lbnQpPT4hcmlnaHRTZXQuaGFzKGVsZW1lbnQpKTtcbiB9OyRozY9fb25jZS5saXN0RGlmZmVyZW5jZShsaXN0RGlmZmVyZW5jZSk7XG5oYXJkZW4obGlzdERpZmZlcmVuY2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibGlzdERpZmZlcmVuY2UiOlsibGlzdERpZmZlcmVuY2UiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAydMyyIwDAACMAwAAKgAAAEBlbmRvL2NvbW1vbi12MS4yLjkvbWFrZS1hcnJheS1pdGVyYXRvci5qc3siaW1wb3J0cyI6WyIuL21ha2UtaXRlcmF0b3IuanMiXSwiZXhwb3J0cyI6WyJtYWtlQXJyYXlJdGVyYXRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VJdGVyYXRvcjskaM2PX2ltcG9ydHMoW1tcIi4vbWFrZS1pdGVyYXRvci5qc1wiLCBbW1wibWFrZUl0ZXJhdG9yXCIsIFskaM2PX2EgPT4gKG1ha2VJdGVyYXRvciA9ICRozY9fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUFycmF5SXRlcmF0b3I9KGFycik9PntcbmNvbnN0e2xlbmd0aH09YXJyO1xubGV0IGk9MDtcbnJldHVybiBtYWtlSXRlcmF0b3IoKCk9Pntcbi8qICAgICAgICAgICAgKi9cbmxldCB2YWx1ZTtcbmlmKGk8bGVuZ3RoKXtcbnZhbHVlPWFycltpXTtcbmkrPTE7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfVxuLy9cbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZX0pO1xuIH0pO1xuIH07JGjNj19vbmNlLm1ha2VBcnJheUl0ZXJhdG9yKG1ha2VBcnJheUl0ZXJhdG9yKTtcbmhhcmRlbihtYWtlQXJyYXlJdGVyYXRvcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJtYWtlQXJyYXlJdGVyYXRvciI6WyJtYWtlQXJyYXlJdGVyYXRvciJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAtci2caAIAAGgCAAAkAAAAQGVuZG8vY29tbW9uLXYxLjIuOS9tYWtlLWl0ZXJhdG9yLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlSXRlcmF0b3IiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlSXRlcmF0b3I9KG5leHQpPT57XG5jb25zdCBpdGVyPWhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+aXRlcixcbm5leHR9KTtcblxucmV0dXJuIGl0ZXI7XG4gfTskaM2PX29uY2UubWFrZUl0ZXJhdG9yKG1ha2VJdGVyYXRvcik7XG5oYXJkZW4obWFrZUl0ZXJhdG9yKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VJdGVyYXRvciI6WyJtYWtlSXRlcmF0b3IiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAACs9TrDEDAAAxAwAAIQAAAEBlbmRvL2NvbW1vbi12MS4yLjkvb2JqZWN0LW1hcC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsib2JqZWN0TWFwIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIGNvbnN0e2VudHJpZXMsZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgb2JqZWN0TWFwPShvcmlnaW5hbCxtYXBGbik9PntcbmNvbnN0IGVudHM9ZW50cmllcyhvcmlnaW5hbCk7XG5jb25zdCBtYXBFbnRzPWVudHMubWFwKFxuKFtrLHZdKT0+LyogICAgICAgICAgICAgICAgICAgICAgICovW2ssbWFwRm4odixrKV0pO1xuXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL2hhcmRlbihmcm9tRW50cmllcyhtYXBFbnRzKSkpO1xuIH07JGjNj19vbmNlLm9iamVjdE1hcChvYmplY3RNYXApO1xuaGFyZGVuKG9iamVjdE1hcCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJvYmplY3RNYXAiOlsib2JqZWN0TWFwIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAIZK65wQBAAAEAQAACYAAABAZW5kby9jb21tb24tdjEuMi45L29iamVjdC1tZXRhLW1hcC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsib2JqZWN0TWV0YU1hcCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBjb25zdHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLGNyZWF0ZSxmcm9tRW50cmllc309T2JqZWN0O1xuY29uc3R7b3duS2V5c309UmVmbGVjdDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBvYmplY3RNZXRhTWFwPShcbm9yaWdpbmFsLFxubWV0YU1hcEZuLFxucHJvdG89T2JqZWN0LnByb3RvdHlwZSk9Plxue1xuY29uc3QgZGVzY3M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvcmlnaW5hbCk7XG5jb25zdCBrZXlzPW93bktleXMob3JpZ2luYWwpO1xuXG5jb25zdCBkZXNjRW50cmllcz0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5rZXlzLlxubWFwKChrZXkpPT5ba2V5LG1ldGFNYXBGbihkZXNjc1trZXldLGtleSldKS5cbmZpbHRlcigoW19rZXksb3B0RGVzY10pPT5vcHREZXNjIT09dW5kZWZpbmVkKTtcblxucmV0dXJuIGhhcmRlbihjcmVhdGUocHJvdG8sZnJvbUVudHJpZXMoZGVzY0VudHJpZXMpKSk7XG4gfTskaM2PX29uY2Uub2JqZWN0TWV0YU1hcChvYmplY3RNZXRhTWFwKTtcbmhhcmRlbihvYmplY3RNZXRhTWFwKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im9iamVjdE1ldGFNYXAiOlsib2JqZWN0TWV0YU1hcCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC7uRglEAQAABAEAAAkAAAAQGVuZG8vY29tbW9uLXYxLjIuOS90aHJvdy1sYWJlbGVkLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbInRocm93TGFiZWxlZCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IFgsbWFrZUVycm9yLGFubm90YXRlRXJyb3I7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJtYWtlRXJyb3JcIiwgWyRozY9fYSA9PiAobWFrZUVycm9yID0gJGjNj19hKV1dLFtcImFubm90YXRlRXJyb3JcIiwgWyRozY9fYSA9PiAoYW5ub3RhdGVFcnJvciA9ICRozY9fYSldXV1dXSk7ICAgXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB0aHJvd0xhYmVsZWQ9KFxuaW5uZXJFcnIsXG5sYWJlbCxcbmVyckNvbnN0cnVjdG9yPXVuZGVmaW5lZCxcbm9wdGlvbnM9dW5kZWZpbmVkKT0+XG57XG5pZih0eXBlb2YgbGFiZWw9PT0nbnVtYmVyJyl7XG5sYWJlbD0gYFske2xhYmVsfV1gO1xuIH1cbmNvbnN0IG91dGVyRXJyPW1ha2VFcnJvcihcbiBgJHtsYWJlbH06ICR7aW5uZXJFcnIubWVzc2FnZX1gLFxuZXJyQ29uc3RydWN0b3IsXG5vcHRpb25zKTtcblxuYW5ub3RhdGVFcnJvcihvdXRlckVycixYIGBDYXVzZWQgYnkgJHtpbm5lckVycn1gKTtcbnRocm93IG91dGVyRXJyO1xuIH07JGjNj19vbmNlLnRocm93TGFiZWxlZCh0aHJvd0xhYmVsZWQpO1xuaGFyZGVuKHRocm93TGFiZWxlZCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ0aHJvd0xhYmVsZWQiOlsidGhyb3dMYWJlbGVkIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAOnrrYHDAQAAwwEAACEAAABAZW5kby9lbnYtb3B0aW9ucy12MS4xLjgvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvZW52LW9wdGlvbnMuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3NyYy9lbnYtb3B0aW9ucy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9lbnYtb3B0aW9ucy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAVnGiQGw4AABsOAAArAAAAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44L3NyYy9lbnYtb3B0aW9ucy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyIsImdldEVudmlyb25tZW50T3B0aW9uIiwiZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCIsIm1ha2VFbnZpcm9ubWVudENhcHRvciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvKiAgICAgICAgICAgICAgICAgICAqL1xuLy9cblxuLy9cbi8vXG5cbi8vXG4vL1xuLy9cblxuY29uc3R7ZnJlZXplfT1PYmplY3Q7XG5jb25zdHthcHBseX09UmVmbGVjdDtcblxuLy9cbi8vXG5jb25zdCB1bmN1cnJ5VGhpcz1cbihmbik9PlxuKHJlY2VpdmVyLC4uLmFyZ3MpPT5cbmFwcGx5KGZuLHJlY2VpdmVyLGFyZ3MpO1xuY29uc3QgYXJyYXlQdXNoPXVuY3VycnlUaGlzKEFycmF5LnByb3RvdHlwZS5wdXNoKTtcbmNvbnN0IGFycmF5SW5jbHVkZXM9dW5jdXJyeVRoaXMoQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzKTtcbmNvbnN0IHN0cmluZ1NwbGl0PXVuY3VycnlUaGlzKFN0cmluZy5wcm90b3R5cGUuc3BsaXQpO1xuXG5jb25zdCBxPUpTT04uc3RyaW5naWZ5O1xuXG5jb25zdCBGYWlsPShsaXRlcmFscywuLi5hcmdzKT0+e1xubGV0IG1zZz1saXRlcmFsc1swXTtcbmZvcihsZXQgaT0wO2k8YXJncy5sZW5ndGg7aSs9MSl7XG5tc2c9IGAke21zZ30ke2FyZ3NbaV19JHtsaXRlcmFsc1tpKzFdfWA7XG4gfVxudGhyb3cgRXJyb3IobXNnKTtcbiB9O1xuXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVudmlyb25tZW50Q2FwdG9yPShhR2xvYmFsLGRyb3BOYW1lcz1mYWxzZSk9PntcbmNvbnN0IGNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcz1bXTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZ2V0RW52aXJvbm1lbnRPcHRpb249KFxub3B0aW9uTmFtZSxcbmRlZmF1bHRTZXR0aW5nLFxub3B0T3RoZXJWYWx1ZXM9dW5kZWZpbmVkKT0+XG57XG50eXBlb2Ygb3B0aW9uTmFtZT09PSdzdHJpbmcnfHxcbkZhaWwgYEVudmlyb25tZW50IG9wdGlvbiBuYW1lICR7cShvcHRpb25OYW1lKX0gbXVzdCBiZSBhIHN0cmluZy5gO1xudHlwZW9mIGRlZmF1bHRTZXR0aW5nPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIGRlZmF1bHQgc2V0dGluZyAke3EoXG5kZWZhdWx0U2V0dGluZylcbiB9IG11c3QgYmUgYSBzdHJpbmcuYDtcblxuLyogICAgICAgICAgICAgICAgICovXG5sZXQgc2V0dGluZz1kZWZhdWx0U2V0dGluZztcbmNvbnN0IGdsb2JhbFByb2Nlc3M9YUdsb2JhbC5wcm9jZXNzfHx1bmRlZmluZWQ7XG5jb25zdCBnbG9iYWxFbnY9XG50eXBlb2YgZ2xvYmFsUHJvY2Vzcz09PSdvYmplY3QnJiZnbG9iYWxQcm9jZXNzLmVudnx8dW5kZWZpbmVkO1xuaWYodHlwZW9mIGdsb2JhbEVudj09PSdvYmplY3QnKXtcbmlmKG9wdGlvbk5hbWUgaW4gZ2xvYmFsRW52KXtcbmlmKCFkcm9wTmFtZXMpe1xuYXJyYXlQdXNoKGNhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcyxvcHRpb25OYW1lKTtcbiB9XG5jb25zdCBvcHRpb25WYWx1ZT1nbG9iYWxFbnZbb3B0aW9uTmFtZV07XG4vL1xudHlwZW9mIG9wdGlvblZhbHVlPT09J3N0cmluZyd8fFxuRmFpbCBgRW52aXJvbm1lbnQgb3B0aW9uIG5hbWVkICR7cShcbm9wdGlvbk5hbWUpXG4gfSwgaWYgcHJlc2VudCwgbXVzdCBoYXZlIGEgY29ycmVzcG9uZGluZyBzdHJpbmcgdmFsdWUsIGdvdCAke3EoXG5vcHRpb25WYWx1ZSlcbiB9YDtcbnNldHRpbmc9b3B0aW9uVmFsdWU7XG4gfVxuIH1cbm9wdE90aGVyVmFsdWVzPT09dW5kZWZpbmVkfHxcbnNldHRpbmc9PT1kZWZhdWx0U2V0dGluZ3x8XG5hcnJheUluY2x1ZGVzKG9wdE90aGVyVmFsdWVzLHNldHRpbmcpfHxcbkZhaWwgYFVucmVjb2duaXplZCAke3Eob3B0aW9uTmFtZSl9IHZhbHVlICR7cShcbnNldHRpbmcpXG4gfS4gRXhwZWN0ZWQgb25lIG9mICR7cShbZGVmYXVsdFNldHRpbmcsLi4ub3B0T3RoZXJWYWx1ZXNdKX1gO1xucmV0dXJuIHNldHRpbmc7XG4gfTtcbmZyZWV6ZShnZXRFbnZpcm9ubWVudE9wdGlvbik7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGdldEVudmlyb25tZW50T3B0aW9uc0xpc3Q9KG9wdGlvbk5hbWUpPT57XG5jb25zdCBvcHRpb249Z2V0RW52aXJvbm1lbnRPcHRpb24ob3B0aW9uTmFtZSwnJyk7XG5yZXR1cm4gZnJlZXplKG9wdGlvbj09PScnP1tdOnN0cmluZ1NwbGl0KG9wdGlvbiwnLCcpKTtcbiB9O1xuZnJlZXplKGdldEVudmlyb25tZW50T3B0aW9uc0xpc3QpO1xuXG5jb25zdCBlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzPShvcHRpb25OYW1lLGVsZW1lbnQpPT5cbmFycmF5SW5jbHVkZXMoZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdChvcHRpb25OYW1lKSxlbGVtZW50KTtcblxuY29uc3QgZ2V0Q2FwdHVyZWRFbnZpcm9ubWVudE9wdGlvbk5hbWVzPSgpPT57XG5yZXR1cm4gZnJlZXplKFsuLi5jYXB0dXJlZEVudmlyb25tZW50T3B0aW9uTmFtZXNdKTtcbiB9O1xuZnJlZXplKGdldENhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lcyk7XG5cbnJldHVybiBmcmVlemUoe1xuZ2V0RW52aXJvbm1lbnRPcHRpb24sXG5nZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0LFxuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyxcbmdldENhcHR1cmVkRW52aXJvbm1lbnRPcHRpb25OYW1lc30pO1xuXG4gfTskaM2PX29uY2UubWFrZUVudmlyb25tZW50Q2FwdG9yKG1ha2VFbnZpcm9ubWVudENhcHRvcik7XG5mcmVlemUobWFrZUVudmlyb25tZW50Q2FwdG9yKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgIHtcbmdldEVudmlyb25tZW50T3B0aW9uLFxuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCxcbmVudmlyb25tZW50T3B0aW9uc0xpc3RIYXN9PVxubWFrZUVudmlyb25tZW50Q2FwdG9yKGdsb2JhbFRoaXMsdHJ1ZSk7JGjNj19vbmNlLmdldEVudmlyb25tZW50T3B0aW9uKGdldEVudmlyb25tZW50T3B0aW9uKTskaM2PX29uY2UuZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdChnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0KTskaM2PX29uY2UuZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyhlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VFbnZpcm9ubWVudENhcHRvciI6WyJtYWtlRW52aXJvbm1lbnRDYXB0b3IiXSwiZ2V0RW52aXJvbm1lbnRPcHRpb24iOlsiZ2V0RW52aXJvbm1lbnRPcHRpb24iXSwiZ2V0RW52aXJvbm1lbnRPcHRpb25zTGlzdCI6WyJnZXRFbnZpcm9ubWVudE9wdGlvbnNMaXN0Il0sImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXMiOlsiZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABatbqADggAAA4IAAAcAAAAQGVuZG8vZXJyb3JzLXYxLjIuOS9pbmRleC5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsiRmFpbCIsIlgiLCJhbm5vdGF0ZUVycm9yIiwiYXNzZXJ0IiwiYiIsImJhcmUiLCJtYWtlRXJyb3IiLCJub3RlIiwicSIsInF1b3RlIiwicmVkYWN0ZWQiLCJ0aHJvd1JlZGFjdGVkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8qICAgICAgICAgICAgICAgICAgICovXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG5cbmNvbnN0IGdsb2JhbEFzc2VydD1nbG9iYWxUaGlzLmFzc2VydDtcblxuaWYoZ2xvYmFsQXNzZXJ0PT09dW5kZWZpbmVkKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQsIGltcG9ydCAnc2VzJyBiZWZvcmUgJ0BlbmRvL2Vycm9ycydgKTtcblxuIH1cblxuY29uc3QgbWlzc2luZz0vKiAgICAgICAgICAgICAgICAqL1tcbid0eXBlb2YnLFxuJ2Vycm9yJyxcbidmYWlsJyxcbidlcXVhbCcsXG4nc3RyaW5nJyxcbidub3RlJyxcbidkZXRhaWxzJyxcbidGYWlsJyxcbidxdW90ZScsXG4vL1xuLy9cbi8vXG4vL1xuJ21ha2VBc3NlcnQnXS5cbmZpbHRlcigobmFtZSk9Pmdsb2JhbEFzc2VydFtuYW1lXT09PXVuZGVmaW5lZCk7XG5pZihtaXNzaW5nLmxlbmd0aD4wKXtcbnRocm93IEVycm9yKFxuIGBDYW5ub3QgaW5pdGlhbGl6ZSBAZW5kby9lcnJvcnMsIG1pc3NpbmcgZ2xvYmFsVGhpcy5hc3NlcnQgbWV0aG9kcyAke21pc3Npbmcuam9pbihcbicsICcpXG4gfWApO1xuXG4gfVxuXG4vL1xuLy9cbi8vXG5jb25zdHtcbmJhcmUsXG5kZXRhaWxzOnJlZGFjdGVkLFxuZXJyb3I6bWFrZUVycm9yLFxuRmFpbDp0aHJvd1JlZGFjdGVkLFxubWFrZUFzc2VydDpfb21pdHRlZE1ha2VBc3NlcnQsXG5ub3RlLFxucXVvdGUsXG4uLi5hc3NlcnRpb25zfT1cbmdsb2JhbEFzc2VydDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLy9cbiRozY9fb25jZS5yZWRhY3RlZChyZWRhY3RlZCk7JGjNj19vbmNlLm1ha2VFcnJvcihtYWtlRXJyb3IpOyRozY9fb25jZS50aHJvd1JlZGFjdGVkKHRocm93UmVkYWN0ZWQpOyRozY9fb25jZS5ub3RlKG5vdGUpOyRozY9fb25jZS5xdW90ZShxdW90ZSk7Y29uc3QgYXNzZXJ0PSh2YWx1ZSxvcHREZXRhaWxzLGVyckNvbnRydWN0b3Isb3B0aW9ucyk9PlxuZ2xvYmFsQXNzZXJ0KHZhbHVlLG9wdERldGFpbHMsZXJyQ29udHJ1Y3RvcixvcHRpb25zKTskaM2PX29uY2UuYXNzZXJ0KGFzc2VydCk7XG5PYmplY3QuYXNzaWduKGFzc2VydCxhc3NlcnRpb25zKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgYmFyZU9yUXVvdGU9YmFyZXx8cXVvdGU7XG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8kaM2PX29uY2UuYmFyZU9yUXVvdGUoYmFyZU9yUXVvdGUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsicmVkYWN0ZWQiOlsicmVkYWN0ZWQiXSwiWCI6WyJyZWRhY3RlZCJdLCJtYWtlRXJyb3IiOlsibWFrZUVycm9yIl0sInRocm93UmVkYWN0ZWQiOlsidGhyb3dSZWRhY3RlZCJdLCJGYWlsIjpbInRocm93UmVkYWN0ZWQiXSwibm90ZSI6WyJub3RlIl0sImFubm90YXRlRXJyb3IiOlsibm90ZSJdLCJxdW90ZSI6WyJxdW90ZSJdLCJxIjpbInF1b3RlIl0sImFzc2VydCI6WyJhc3NlcnQiXSwiYmFyZSI6WyJiYXJlT3JRdW90ZSJdLCJiIjpbImJhcmVPclF1b3RlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMwZHYRMEQAATBEAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjMuMC9zcmMvRS5qc3siaW1wb3J0cyI6WyIuL3RyYWNrLXR1cm5zLmpzIiwiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZGVmYXVsdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHRyYWNrVHVybnMsbWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyOyRozY9faW1wb3J0cyhbW1wiLi90cmFjay10dXJucy5qc1wiLCBbW1widHJhY2tUdXJuc1wiLCBbJGjNj19hID0+ICh0cmFja1R1cm5zID0gJGjNj19hKV1dXV0sW1wiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzXCIsIFtbXCJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXJcIiwgWyRozY9fYSA9PiAobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5jb25zdHtkZXRhaWxzOlgscXVvdGU6cSxGYWlsLGVycm9yOm1ha2VFcnJvcn09YXNzZXJ0O1xuY29uc3R7YXNzaWduLGZyZWV6ZX09T2JqZWN0O1xuXG4vKlxuXG4gKi9cblxuY29uc3Qgb25TZW5kPW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19TRU5EX0JSRUFLUE9JTlRTJyk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBiYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyPXtcbnNldChfdGFyZ2V0LF9wcm9wLF92YWx1ZSl7XG5yZXR1cm4gZmFsc2U7XG4gfSxcbmlzRXh0ZW5zaWJsZShfdGFyZ2V0KXtcbnJldHVybiBmYWxzZTtcbiB9LFxuc2V0UHJvdG90eXBlT2YoX3RhcmdldCxfdmFsdWUpe1xucmV0dXJuIGZhbHNlO1xuIH0sXG5kZWxldGVQcm9wZXJ0eShfdGFyZ2V0LF9wcm9wKXtcbnJldHVybiBmYWxzZTtcbiB9fTtcblxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFUHJveHlIYW5kbGVyPShyZWNpcGllbnQsSGFuZGxlZFByb21pc2UpPT5cbmhhcmRlbih7XG4uLi5iYXNlRnJlZXphYmxlUHJveHlIYW5kbGVyLFxuZ2V0OihfdGFyZ2V0LHByb3BlcnR5S2V5LHJlY2VpdmVyKT0+e1xucmV0dXJuIGhhcmRlbihcbntcbi8vXG4vL1xuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbltwcm9wZXJ0eUtleV0oLi4uYXJncyl7XG5pZih0aGlzIT09cmVjZWl2ZXIpe1xuLy9cbnJldHVybiBIYW5kbGVkUHJvbWlzZS5yZWplY3QoXG5tYWtlRXJyb3IoXG5YIGBVbmV4cGVjdGVkIHJlY2VpdmVyIGZvciBcIiR7cShwcm9wZXJ0eUtleSl9XCIgbWV0aG9kIG9mIEUoJHtxKFxucmVjaXBpZW50KVxuIH0pYCkpO1xuXG5cbiB9XG5cbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHByb3BlcnR5S2V5KSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxucmV0dXJuIEhhbmRsZWRQcm9taXNlLmFwcGx5TWV0aG9kKHJlY2lwaWVudCxwcm9wZXJ0eUtleSxhcmdzKTtcbiB9XG4vL1xufVtwcm9wZXJ0eUtleV0pO1xuXG4gfSxcbmFwcGx5OihfdGFyZ2V0LF90aGlzQXJnLGFyZ0FycmF5PVtdKT0+e1xuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsdW5kZWZpbmVkKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbiB9XG5yZXR1cm4gSGFuZGxlZFByb21pc2UuYXBwbHlGdW5jdGlvbihyZWNpcGllbnQsYXJnQXJyYXkpO1xuIH0sXG5oYXM6KF90YXJnZXQsX3ApPT57XG4vL1xucmV0dXJuIHRydWU7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFU2VuZE9ubHlQcm94eUhhbmRsZXI9KHJlY2lwaWVudCxIYW5kbGVkUHJvbWlzZSk9PlxuaGFyZGVuKHtcbi4uLmJhc2VGcmVlemFibGVQcm94eUhhbmRsZXIsXG5nZXQ6KF90YXJnZXQscHJvcGVydHlLZXkscmVjZWl2ZXIpPT57XG5yZXR1cm4gaGFyZGVuKFxue1xuLy9cbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5bcHJvcGVydHlLZXldKC4uLmFyZ3Mpe1xuLy9cbnRoaXM9PT1yZWNlaXZlcnx8XG5GYWlsIGBVbmV4cGVjdGVkIHJlY2VpdmVyIGZvciBcIiR7cShcbnByb3BlcnR5S2V5KVxuIH1cIiBtZXRob2Qgb2YgRS5zZW5kT25seSgke3EocmVjaXBpZW50KX0pYDtcbmlmKG9uU2VuZCYmb25TZW5kLnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHByb3BlcnR5S2V5KSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbi8vXG4gfVxuSGFuZGxlZFByb21pc2UuYXBwbHlNZXRob2RTZW5kT25seShyZWNpcGllbnQscHJvcGVydHlLZXksYXJncyk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbi8vXG59W3Byb3BlcnR5S2V5XSk7XG5cbiB9LFxuYXBwbHk6KF90YXJnZXQsX3RoaXNBcmcsYXJnc0FycmF5PVtdKT0+e1xuaWYob25TZW5kJiZvblNlbmQuc2hvdWxkQnJlYWtwb2ludChyZWNpcGllbnQsdW5kZWZpbmVkKSl7XG4vL1xuZGVidWdnZXI7Ly9cbi8vXG4vL1xuLy9cbiB9XG5IYW5kbGVkUHJvbWlzZS5hcHBseUZ1bmN0aW9uU2VuZE9ubHkocmVjaXBpZW50LGFyZ3NBcnJheSk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH0sXG5oYXM6KF90YXJnZXQsX3ApPT57XG4vL1xucmV0dXJuIHRydWU7XG4gfX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VFR2V0UHJveHlIYW5kbGVyPSh4LEhhbmRsZWRQcm9taXNlKT0+XG5oYXJkZW4oe1xuLi4uYmFzZUZyZWV6YWJsZVByb3h5SGFuZGxlcixcbmhhczooX3RhcmdldCxfcHJvcCk9PnRydWUsXG5nZXQ6KF90YXJnZXQscHJvcCk9PkhhbmRsZWRQcm9taXNlLmdldCh4LHByb3ApfSk7XG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBmdW5jVGFyZ2V0PWZyZWV6ZSgoKT0+eyB9KTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG9ialRhcmdldD1mcmVlemUoe19fcHJvdG9fXzpudWxsfSk7XG5cbi8qXG5cbiAqL1xuY29uc3QgbWFrZUU9KEhhbmRsZWRQcm9taXNlKT0+e1xucmV0dXJuIGhhcmRlbihcbmFzc2lnbihcbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAqL1xuLy9cbih4KT0+bmV3IFByb3h5KGZ1bmNUYXJnZXQsbWFrZUVQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpLFxue1xuLypcblxuXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG4vL1xuZ2V0Oih4KT0+bmV3IFByb3h5KG9ialRhcmdldCxtYWtlRUdldFByb3h5SGFuZGxlcih4LEhhbmRsZWRQcm9taXNlKSksXG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5yZXNvbHZlOkhhbmRsZWRQcm9taXNlLnJlc29sdmUsXG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICAgICAgICovXG5zZW5kT25seTooeCk9PlxuLy9cbm5ldyBQcm94eShmdW5jVGFyZ2V0LG1ha2VFU2VuZE9ubHlQcm94eUhhbmRsZXIoeCxIYW5kbGVkUHJvbWlzZSkpLFxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG4gICAgICAgICAqL1xud2hlbjooeCxvbmZ1bGZpbGxlZCxvbnJlamVjdGVkKT0+XG5IYW5kbGVkUHJvbWlzZS5yZXNvbHZlKHgpLnRoZW4oXG4uLi50cmFja1R1cm5zKFtvbmZ1bGZpbGxlZCxvbnJlamVjdGVkXSkpfSkpO1xuXG5cblxuXG4gfTtcblxuY29uc3R7ZGVmYXVsdDokY82PX2RlZmF1bHR9PXtkZWZhdWx0Om1ha2VFfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZWZhdWx0KCRjzY9fZGVmYXVsdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWZhdWx0IjpbImRlZmF1bHQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABURLJnkBAAB5AQAAKQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wL3NyYy9leHBvcnRzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALbVu7bZDAAA2QwAACcAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjMuMC9zcmMvbG9jYWwuanN7ImltcG9ydHMiOlsiLi9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzIl0sImV4cG9ydHMiOlsiZ2V0TWV0aG9kTmFtZXMiLCJsb2NhbEFwcGx5RnVuY3Rpb24iLCJsb2NhbEFwcGx5TWV0aG9kIiwibG9jYWxHZXQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXI7JGjNj19pbXBvcnRzKFtbXCIuL21lc3NhZ2UtYnJlYWtwb2ludHMuanNcIiwgW1tcIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlclwiLCBbJGjNj19hID0+IChtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtkZXRhaWxzOlgscXVvdGU6cSxGYWlsfT1hc3NlcnQ7XG5cbmNvbnN0e2dldE93blByb3BlcnR5RGVzY3JpcHRvcnMsZ2V0UHJvdG90eXBlT2YsZnJlZXplfT1PYmplY3Q7XG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuXG5jb25zdCBudHlwZW9mPShzcGVjaW1lbik9PnNwZWNpbWVuPT09bnVsbD8nbnVsbCc6dHlwZW9mIHNwZWNpbWVuO1xuXG5jb25zdCBvbkRlbGl2ZXJ5PW1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlcignRU5ET19ERUxJVkVSWV9CUkVBS1BPSU5UUycpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzT2JqZWN0PSh2YWwpPT5PYmplY3QodmFsKT09PXZhbDtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGNvbXBhcmVTdHJpbmdpZmllZD0oYSxiKT0+e1xuaWYodHlwZW9mIGE9PT10eXBlb2YgYil7XG5jb25zdCBsZWZ0PVN0cmluZyhhKTtcbmNvbnN0IHJpZ2h0PVN0cmluZyhiKTtcbi8vXG5yZXR1cm4gbGVmdDxyaWdodD8tMTpsZWZ0PnJpZ2h0PzE6MDtcbiB9XG5pZih0eXBlb2YgYT09PSdzeW1ib2wnKXtcbmFzc2VydCh0eXBlb2YgYj09PSdzdHJpbmcnKTtcbnJldHVybi0xO1xuIH1cbmFzc2VydCh0eXBlb2YgYT09PSdzdHJpbmcnKTtcbmFzc2VydCh0eXBlb2YgYj09PSdzeW1ib2wnKTtcbnJldHVybiAxO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0TWV0aG9kTmFtZXM9KHZhbCk9PntcbmxldCBsYXllcj12YWw7XG5jb25zdCBuYW1lcz1uZXcgU2V0KCk7Ly9cbndoaWxlKGxheWVyIT09bnVsbCYmbGF5ZXIhPT1PYmplY3QucHJvdG90eXBlKXtcbi8vXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGxheWVyKTtcbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoZGVzY3MpKXtcbi8vXG4vL1xuaWYodHlwZW9mIHZhbFtuYW1lXT09PSdmdW5jdGlvbicpe1xubmFtZXMuYWRkKG5hbWUpO1xuIH1cbiB9XG5pZighaXNPYmplY3QodmFsKSl7XG5icmVhaztcbiB9XG5sYXllcj1nZXRQcm90b3R5cGVPZihsYXllcik7XG4gfVxucmV0dXJuIGhhcmRlbihbLi4ubmFtZXNdLnNvcnQoY29tcGFyZVN0cmluZ2lmaWVkKSk7XG4gfTtcbi8vXG4vL1xuJGjNj19vbmNlLmdldE1ldGhvZE5hbWVzKGdldE1ldGhvZE5hbWVzKTtmcmVlemUoZ2V0TWV0aG9kTmFtZXMpO1xuXG5jb25zdCAgICAgICAgbG9jYWxBcHBseUZ1bmN0aW9uPShyZWNpcGllbnQsYXJncyk9PntcbnR5cGVvZiByZWNpcGllbnQ9PT0nZnVuY3Rpb24nfHxcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGludm9rZSB0YXJnZXQgYXMgYSBmdW5jdGlvbjsgdHlwZW9mIHRhcmdldCBpcyAke3EoXG5udHlwZW9mKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LHVuZGVmaW5lZCkpe1xuLy9cbmRlYnVnZ2VyOy8vXG4vL1xuLy9cbi8vXG4vL1xuIH1cbmNvbnN0IHJlc3VsdD1hcHBseShyZWNpcGllbnQsdW5kZWZpbmVkLGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5RnVuY3Rpb24obG9jYWxBcHBseUZ1bmN0aW9uKTtcblxuY29uc3QgICAgICAgIGxvY2FsQXBwbHlNZXRob2Q9KHJlY2lwaWVudCxtZXRob2ROYW1lLGFyZ3MpPT57XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkfHxtZXRob2ROYW1lPT09bnVsbCl7XG4vL1xucmV0dXJuIGxvY2FsQXBwbHlGdW5jdGlvbihyZWNpcGllbnQsYXJncyk7XG4gfVxuaWYocmVjaXBpZW50PT09dW5kZWZpbmVkfHxyZWNpcGllbnQ9PT1udWxsKXtcbmFzc2VydC5mYWlsKFxuWCBgQ2Fubm90IGRlbGl2ZXIgJHtxKG1ldGhvZE5hbWUpfSB0byB0YXJnZXQ7IHR5cGVvZiB0YXJnZXQgaXMgJHtxKFxubnR5cGVvZihyZWNpcGllbnQpKVxuIH1gLFxuVHlwZUVycm9yKTtcblxuIH1cbmNvbnN0IGZuPXJlY2lwaWVudFttZXRob2ROYW1lXTtcbmlmKGZuPT09dW5kZWZpbmVkKXtcbmFzc2VydC5mYWlsKFxuWCBgdGFyZ2V0IGhhcyBubyBtZXRob2QgJHtxKG1ldGhvZE5hbWUpfSwgaGFzICR7cShcbmdldE1ldGhvZE5hbWVzKHJlY2lwaWVudCkpXG4gfWAsXG5UeXBlRXJyb3IpO1xuXG4gfVxuY29uc3QgZnR5cGU9bnR5cGVvZihmbik7XG50eXBlb2YgZm49PT0nZnVuY3Rpb24nfHxcbkZhaWwgYGludm9rZWQgbWV0aG9kICR7cShtZXRob2ROYW1lKX0gaXMgbm90IGEgZnVuY3Rpb247IGl0IGlzIGEgJHtxKFxuZnR5cGUpXG4gfWA7XG5pZihvbkRlbGl2ZXJ5JiZvbkRlbGl2ZXJ5LnNob3VsZEJyZWFrcG9pbnQocmVjaXBpZW50LG1ldGhvZE5hbWUpKXtcbi8vXG5kZWJ1Z2dlcjsvL1xuLy9cbi8vXG4vL1xuLy9cbiB9XG5jb25zdCByZXN1bHQ9YXBwbHkoZm4scmVjaXBpZW50LGFyZ3MpO1xucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5sb2NhbEFwcGx5TWV0aG9kKGxvY2FsQXBwbHlNZXRob2QpO1xuXG5jb25zdCAgICAgICAgbG9jYWxHZXQ9KHQsa2V5KT0+dFtrZXldOyRozY9fb25jZS5sb2NhbEdldChsb2NhbEdldCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRNZXRob2ROYW1lcyI6WyJnZXRNZXRob2ROYW1lcyJdLCJsb2NhbEFwcGx5RnVuY3Rpb24iOlsibG9jYWxBcHBseUZ1bmN0aW9uIl0sImxvY2FsQXBwbHlNZXRob2QiOlsibG9jYWxBcHBseU1ldGhvZCJdLCJsb2NhbEdldCI6WyJsb2NhbEdldCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABsDJjOGA0AABgNAAA1AAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiXSwiZXhwb3J0cyI6WyJtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vudi1vcHRpb25zXCIsIFtbXCJnZXRFbnZpcm9ubWVudE9wdGlvblwiLCBbJGjNj19hID0+IChnZXRFbnZpcm9ubWVudE9wdGlvbiA9ICRozY9fYSldXV1dXSk7ICAgXG5cbmNvbnN0e3F1b3RlOnEsRmFpbH09YXNzZXJ0O1xuXG5jb25zdHtoYXNPd24sZnJlZXplLGVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuLypcblxuXG5cblxuXG4gKi9cbi8qXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgaXNKU09OUmVjb3JkPSh2YWwpPT5cbnR5cGVvZiB2YWw9PT0nb2JqZWN0JyYmdmFsIT09bnVsbCYmIUFycmF5LmlzQXJyYXkodmFsKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc2ltcGxpZnlUYWc9KHRhZyk9PntcbmZvcihjb25zdCBwcmVmaXggb2ZbJ0FsbGVnZWQ6ICcsJ0RlYnVnTmFtZTogJ10pe1xuaWYodGFnLnN0YXJ0c1dpdGgocHJlZml4KSl7XG5yZXR1cm4gdGFnLnNsaWNlKHByZWZpeC5sZW5ndGgpO1xuIH1cbiB9XG5yZXR1cm4gdGFnO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyPShvcHRpb25OYW1lKT0+e1xubGV0IGJyZWFrcG9pbnRzPUpTT04ucGFyc2UoZ2V0RW52aXJvbm1lbnRPcHRpb24ob3B0aW9uTmFtZSwnbnVsbCcpKTtcblxuaWYoYnJlYWtwb2ludHM9PT1udWxsKXtcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCBicmVha3BvaW50c1RhYmxlO1xuXG5jb25zdCBnZXRCcmVha3BvaW50cz0oKT0+YnJlYWtwb2ludHM7XG5mcmVlemUoZ2V0QnJlYWtwb2ludHMpO1xuXG5jb25zdCBzZXRCcmVha3BvaW50cz0obmV3QnJlYWtwb2ludHM9YnJlYWtwb2ludHMpPT57XG5pc0pTT05SZWNvcmQobmV3QnJlYWtwb2ludHMpfHxcbkZhaWwgYEV4cGVjdGVkICR7cShvcHRpb25OYW1lKX0gb3B0aW9uIHRvIGJlIGEgSlNPTiBicmVha3BvaW50cyByZWNvcmRgO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBuZXdCcmVha3BvaW50c1RhYmxlPXtfX3Byb3RvX186bnVsbH07XG5cbmZvcihjb25zdFt0YWcsbWV0aG9kQlBzXW9mIGVudHJpZXMobmV3QnJlYWtwb2ludHMpKXtcbnRhZz09PXNpbXBsaWZ5VGFnKHRhZyl8fFxuRmFpbCBgSnVzdCB1c2Ugc2ltcGxlIHRhZyAke3Eoc2ltcGxpZnlUYWcodGFnKSl9IHJhdGhlciB0aGFuICR7cSh0YWcpfWA7XG5pc0pTT05SZWNvcmQobWV0aG9kQlBzKXx8XG5GYWlsIGBFeHBlY3RlZCAke3Eob3B0aW9uTmFtZSl9IG9wdGlvbidzICR7cShcbnRhZylcbiB9IHRvIGJlIGEgSlNPTiBtZXRob2RzIGJyZWFrcG9pbnRzIHJlY29yZGA7XG5mb3IoY29uc3RbbWV0aG9kTmFtZSxjb3VudF1vZiBlbnRyaWVzKG1ldGhvZEJQcykpe1xuY291bnQ9PT0nKid8fFxudHlwZW9mIGNvdW50PT09J251bWJlcicmJlxuTnVtYmVyLmlzU2FmZUludGVnZXIoY291bnQpJiZcbmNvdW50Pj0wfHxcbkZhaWwgYEV4cGVjdGVkICR7cShvcHRpb25OYW1lKX0gb3B0aW9uJ3MgJHtxKHRhZyl9LiR7cShcbm1ldGhvZE5hbWUpXG4gfSB0byBiZSBcIipcIiBvciBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyYDtcblxuY29uc3QgY2xhc3NCUHM9aGFzT3duKG5ld0JyZWFrcG9pbnRzVGFibGUsbWV0aG9kTmFtZSk/XG5uZXdCcmVha3BvaW50c1RhYmxlW21ldGhvZE5hbWVdOlxubmV3QnJlYWtwb2ludHNUYWJsZVttZXRob2ROYW1lXT17XG4vL1xuX19wcm90b19fOm51bGx9O1xuXG5jbGFzc0JQc1t0YWddPWNvdW50O1xuIH1cbiB9XG5icmVha3BvaW50cz1uZXdCcmVha3BvaW50cztcbmJyZWFrcG9pbnRzVGFibGU9bmV3QnJlYWtwb2ludHNUYWJsZTtcbiB9O1xuZnJlZXplKHNldEJyZWFrcG9pbnRzKTtcblxuY29uc3Qgc2hvdWxkQnJlYWtwb2ludD0ocmVjaXBpZW50LG1ldGhvZE5hbWUpPT57XG5pZihtZXRob2ROYW1lPT09dW5kZWZpbmVkfHxtZXRob2ROYW1lPT09bnVsbCl7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IGNsYXNzQlBzPWJyZWFrcG9pbnRzVGFibGVbbWV0aG9kTmFtZV18fGJyZWFrcG9pbnRzVGFibGVbJyonXTtcbmlmKGNsYXNzQlBzPT09dW5kZWZpbmVkKXtcbnJldHVybiBmYWxzZTtcbiB9XG5sZXQgdGFnPXNpbXBsaWZ5VGFnKHJlY2lwaWVudFtTeW1ib2wudG9TdHJpbmdUYWddKTtcbmxldCBjb3VudD1jbGFzc0JQc1t0YWddO1xuaWYoY291bnQ9PT11bmRlZmluZWQpe1xudGFnPScqJztcbmNvdW50PWNsYXNzQlBzW3RhZ107XG5pZihjb3VudD09PXVuZGVmaW5lZCl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbmlmKGNvdW50PT09JyonKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKGNvdW50PT09MCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5hc3NlcnQodHlwZW9mIGNvdW50PT09J251bWJlcicmJmNvdW50Pj0xKTtcbmNsYXNzQlBzW3RhZ109Y291bnQtMTtcbnJldHVybiBmYWxzZTtcbiB9O1xuZnJlZXplKHNob3VsZEJyZWFrcG9pbnQpO1xuXG5jb25zdCBicmVha3BvaW50VGVzdGVyPWZyZWV6ZSh7XG5nZXRCcmVha3BvaW50cyxcbnNldEJyZWFrcG9pbnRzLFxuc2hvdWxkQnJlYWtwb2ludH0pO1xuXG5icmVha3BvaW50VGVzdGVyLnNldEJyZWFrcG9pbnRzKCk7XG5yZXR1cm4gYnJlYWtwb2ludFRlc3RlcjtcbiB9OyRozY9fb25jZS5tYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIobWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyKTtcbmZyZWV6ZShtYWtlTWVzc2FnZUJyZWFrcG9pbnRUZXN0ZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1lc3NhZ2VCcmVha3BvaW50VGVzdGVyIjpbIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAC9O78lYgMAAGIDAAApAAAAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAvc3JjL25vLXNoaW0uanN7ImltcG9ydHMiOlsiLi9FLmpzIiwiLi9leHBvcnRzLmpzIl0sImV4cG9ydHMiOlsiRSIsIkhhbmRsZWRQcm9taXNlIl0sInJlZXhwb3J0cyI6WyIuL2V4cG9ydHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlRTskaM2PX2ltcG9ydHMoW1tcIi4vRS5qc1wiLCBbW1wiZGVmYXVsdFwiLCBbJGjNj19hID0+IChtYWtlRSA9ICRozY9fYSldXV1dLFtcIi4vZXhwb3J0cy5qc1wiLCBbXV1dKTsgICBcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0IGhwPUhhbmRsZWRQcm9taXNlOyRozY9fb25jZS5ocChocCk7XG5jb25zdCAgICAgICAgRT1tYWtlRShocCk7JGjNj19vbmNlLkUoRSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJIYW5kbGVkUHJvbWlzZSI6WyJocCJdLCJFIjpbIkUiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAApJpQMo4JAACOCQAALQAAAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wL3NyYy90cmFjay10dXJucy5qc3siaW1wb3J0cyI6WyJAZW5kby9lbnYtb3B0aW9ucyJdLCJleHBvcnRzIjpbInRyYWNrVHVybnMiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixlbnZpcm9ubWVudE9wdGlvbnNMaXN0SGFzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dLFtcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRozY9fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxubGV0IGhpZGRlblByaW9yRXJyb3I7XG5sZXQgaGlkZGVuQ3VycmVudFR1cm49MDtcbmxldCBoaWRkZW5DdXJyZW50RXZlbnQ9MDtcblxuLy9cbmNvbnN0IFZFUkJPU0U9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCd0cmFjay10dXJucycpO1xuXG4vL1xuLy9cbmNvbnN0IEVOQUJMRUQ9XG5nZXRFbnZpcm9ubWVudE9wdGlvbignVFJBQ0tfVFVSTlMnLCdkaXNhYmxlZCcsWydlbmFibGVkJ10pPT09J2VuYWJsZWQnO1xuXG4vL1xuLy9cbi8vXG4vL1xuXG5jb25zdCBhZGRSZWplY3Rpb25Ob3RlPShkZXRhaWxzTm90ZSk9PihyZWFzb24pPT57XG5pZihyZWFzb24gaW5zdGFuY2VvZiBFcnJvcil7XG5nbG9iYWxUaGlzLmFzc2VydC5ub3RlKHJlYXNvbixkZXRhaWxzTm90ZSk7XG4gfVxuaWYoVkVSQk9TRSl7XG5jb25zb2xlLmxvZygnUkVKRUNURUQgYXQgdG9wIG9mIGV2ZW50IGxvb3AnLHJlYXNvbik7XG4gfVxuIH07XG5cbmNvbnN0IHdyYXBGdW5jdGlvbj1cbihmdW5jLHNlbmRpbmdFcnJvcixYKT0+XG4oLi4uYXJncyk9PntcbmhpZGRlblByaW9yRXJyb3I9c2VuZGluZ0Vycm9yO1xuaGlkZGVuQ3VycmVudFR1cm4rPTE7XG5oaWRkZW5DdXJyZW50RXZlbnQ9MDtcbnRyeXtcbmxldCByZXN1bHQ7XG50cnl7XG5yZXN1bHQ9ZnVuYyguLi5hcmdzKTtcbiB9Y2F0Y2goZXJyKXtcbmlmKGVyciBpbnN0YW5jZW9mIEVycm9yKXtcbmdsb2JhbFRoaXMuYXNzZXJ0Lm5vdGUoXG5lcnIsXG5YIGBUaHJvd24gZnJvbTogJHtoaWRkZW5QcmlvckVycm9yfToke2hpZGRlbkN1cnJlbnRUdXJufS4ke2hpZGRlbkN1cnJlbnRFdmVudH1gKTtcblxuIH1cbmlmKFZFUkJPU0Upe1xuY29uc29sZS5sb2coJ1RIUk9XTiB0byB0b3Agb2YgZXZlbnQgbG9vcCcsZXJyKTtcbiB9XG50aHJvdyBlcnI7XG4gfVxuLy9cbmNvbnN0IGRldGFpbHNOb3RlPVggYFJlamVjdGlvbiBmcm9tOiAke2hpZGRlblByaW9yRXJyb3J9OiR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWA7XG5Qcm9taXNlLnJlc29sdmUocmVzdWx0KS5jYXRjaChhZGRSZWplY3Rpb25Ob3RlKGRldGFpbHNOb3RlKSk7XG5yZXR1cm4gcmVzdWx0O1xuIH1maW5hbGx5e1xuaGlkZGVuUHJpb3JFcnJvcj11bmRlZmluZWQ7XG4gfVxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRyYWNrVHVybnM9KGZ1bmNzKT0+e1xuaWYoIUVOQUJMRUR8fHR5cGVvZiBnbG9iYWxUaGlzPT09J3VuZGVmaW5lZCd8fCFnbG9iYWxUaGlzLmFzc2VydCl7XG5yZXR1cm4gZnVuY3M7XG4gfVxuY29uc3R7ZGV0YWlsczpYLG5vdGU6YW5ub3RhdGVFcnJvcn09Z2xvYmFsVGhpcy5hc3NlcnQ7XG5cbmhpZGRlbkN1cnJlbnRFdmVudCs9MTtcbmNvbnN0IHNlbmRpbmdFcnJvcj1FcnJvcihcbiBgRXZlbnQ6ICR7aGlkZGVuQ3VycmVudFR1cm59LiR7aGlkZGVuQ3VycmVudEV2ZW50fWApO1xuXG5pZihoaWRkZW5QcmlvckVycm9yIT09dW5kZWZpbmVkKXtcbmFubm90YXRlRXJyb3Ioc2VuZGluZ0Vycm9yLFggYENhdXNlZCBieTogJHtoaWRkZW5QcmlvckVycm9yfWApO1xuIH1cblxucmV0dXJuICgvKiAgICAgICAgICAgICovXG5mdW5jcy5tYXAoKGZ1bmMpPT5mdW5jJiZ3cmFwRnVuY3Rpb24oZnVuYyxzZW5kaW5nRXJyb3IsWCkpKTtcblxuIH07XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS50cmFja1R1cm5zKHRyYWNrVHVybnMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsidHJhY2tUdXJucyI6WyJ0cmFja1R1cm5zIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAH+mlRyFAgAAhQIAACMAAABAZW5kby9ldmVudHVhbC1zZW5kLXYxLjMuMC91dGlscy5qc3siaW1wb3J0cyI6WyIuL3NyYy9sb2NhbC5qcyIsIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiXSwiZXhwb3J0cyI6W251bGwsbnVsbF0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2xvY2FsLmpzXCIsIFtdXSxbXCIuL3NyYy9tZXNzYWdlLWJyZWFrcG9pbnRzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMvbG9jYWwuanMiOltbImdldE1ldGhvZE5hbWVzIiwiZ2V0TWV0aG9kTmFtZXMiXV0sIi4vc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanMiOltbIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciIsIm1ha2VNZXNzYWdlQnJlYWtwb2ludFRlc3RlciJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAGLmEvoECAACBAgAAGQAAAEBlbmRvL2V4by12MS41LjgvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvZXhvLW1ha2Vycy5qcyIsIi4vc3JjL3R5cGVzLmpzIiwiLi9zcmMvZ2V0LWludGVyZmFjZS5qcyJdLCJleHBvcnRzIjpbbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy9leG8tbWFrZXJzLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvZXhvLW1ha2Vycy5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIi4vc3JjL2dldC1pbnRlcmZhY2UuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6eyIuL3NyYy9nZXQtaW50ZXJmYWNlLmpzIjpbWyJHRVRfSU5URVJGQUNFX0dVQVJEIiwiR0VUX0lOVEVSRkFDRV9HVUFSRCJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAdkoX8AYVAAAGFQAAIgAAAEBlbmRvL2V4by12MS41Ljgvc3JjL2V4by1tYWtlcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vY29tbW9uL29iamVjdC1tYXAuanMiLCJAZW5kby9lbnYtb3B0aW9ucyIsIkBlbmRvL2Vycm9ycyIsIi4vZXhvLXRvb2xzLmpzIl0sImV4cG9ydHMiOlsiZGVmaW5lRXhvQ2xhc3MiLCJkZWZpbmVFeG9DbGFzc0tpdCIsImluaXRFbXB0eSIsIm1ha2VFeG8iXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBvYmplY3RNYXAsZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyxGYWlsLHEsZGVmZW5kUHJvdG90eXBlLGRlZmVuZFByb3RvdHlwZUtpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImVudmlyb25tZW50T3B0aW9uc0xpc3RIYXNcIiwgWyRozY9fYSA9PiAoZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vZXhvLXRvb2xzLmpzXCIsIFtbXCJkZWZlbmRQcm90b3R5cGVcIiwgWyRozY9fYSA9PiAoZGVmZW5kUHJvdG90eXBlID0gJGjNj19hKV1dLFtcImRlZmVuZFByb3RvdHlwZUtpdFwiLCBbJGjNj19hID0+IChkZWZlbmRQcm90b3R5cGVLaXQgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtjcmVhdGUsc2VhbCxmcmVlemUsZGVmaW5lUHJvcGVydHksdmFsdWVzfT1PYmplY3Q7XG5cbi8vXG5jb25zdCBMQUJFTF9JTlNUQU5DRVM9ZW52aXJvbm1lbnRPcHRpb25zTGlzdEhhcygnREVCVUcnLCdsYWJlbC1pbnN0YW5jZXMnKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBtYWtlU2VsZj0ocHJvdG8saW5zdGFuY2VDb3VudCk9PntcbmNvbnN0IHNlbGY9Y3JlYXRlKHByb3RvKTtcbmlmKExBQkVMX0lOU1RBTkNFUyl7XG5kZWZpbmVQcm9wZXJ0eShzZWxmLFN5bWJvbC50b1N0cmluZ1RhZyx7XG52YWx1ZTogYCR7cHJvdG9bU3ltYm9sLnRvU3RyaW5nVGFnXX0jJHtpbnN0YW5jZUNvdW50fWAsXG53cml0YWJsZTpmYWxzZSxcbmVudW1lcmFibGU6ZmFsc2UsXG5jb25maWd1cmFibGU6ZmFsc2V9KTtcblxuIH1cbnJldHVybiBoYXJkZW4oc2VsZik7XG4gfTtcblxuY29uc3QgZW1wdHlSZWNvcmQ9aGFyZGVuKHt9KTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaW5pdEVtcHR5PSgpPT5lbXB0eVJlY29yZDtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuaW5pdEVtcHR5KGluaXRFbXB0eSk7XG5jb25zdCAgICAgICAgZGVmaW5lRXhvQ2xhc3M9KFxudGFnLFxuaW50ZXJmYWNlR3VhcmQsXG5pbml0LFxubWV0aG9kcyxcbm9wdGlvbnM9e30pPT5cbntcbmhhcmRlbihtZXRob2RzKTtcbmNvbnN0e1xuZmluaXNoPXVuZGVmaW5lZCxcbnJlY2VpdmVBbXBsaWZpZXI9dW5kZWZpbmVkLFxucmVjZWl2ZUluc3RhbmNlVGVzdGVyPXVuZGVmaW5lZH09XG5vcHRpb25zO1xucmVjZWl2ZUFtcGxpZmllcj09PXVuZGVmaW5lZHx8XG5GYWlsIGBPbmx5IGZhY2V0cyBvZiBhbiBleG8gY2xhc3Mga2l0IGNhbiBiZSBhbXBsaWZpZWQgJHtxKHRhZyl9YDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0TWFwPW5ldyBXZWFrTWFwKCk7XG5jb25zdCBwcm90bz1kZWZlbmRQcm90b3R5cGUoXG50YWcsXG4oc2VsZik9Pi8qICAgICAgICAgICAgICAqL2NvbnRleHRNYXAuZ2V0KHNlbGYpLFxubWV0aG9kcyxcbnRydWUsXG5pbnRlcmZhY2VHdWFyZCk7XG5cbmxldCBpbnN0YW5jZUNvdW50PTA7XG4vKlxuXG4gICAqL1xuY29uc3QgbWFrZUluc3RhbmNlPSguLi5hcmdzKT0+e1xuLy9cbmNvbnN0IHN0YXRlPXNlYWwoaW5pdCguLi5hcmdzKSk7XG5pbnN0YW5jZUNvdW50Kz0xO1xuY29uc3Qgc2VsZj1tYWtlU2VsZihwcm90byxpbnN0YW5jZUNvdW50KTtcblxuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb250ZXh0PWZyZWV6ZSh7c3RhdGUsc2VsZn0pO1xuY29udGV4dE1hcC5zZXQoc2VsZixjb250ZXh0KTtcbmlmKGZpbmlzaCl7XG5maW5pc2goY29udGV4dCk7XG4gfVxucmV0dXJuIHNlbGY7XG4gfTtcblxuaWYocmVjZWl2ZUluc3RhbmNlVGVzdGVyKXtcbi8qICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlzSW5zdGFuY2U9KGV4byxmYWNldE5hbWU9dW5kZWZpbmVkKT0+e1xuZmFjZXROYW1lPT09dW5kZWZpbmVkfHxcbkZhaWwgYGZhY2V0TmFtZSBjYW4gb25seSBiZSB1c2VkIHdpdGggYW4gZXhvIGNsYXNzIGtpdDogJHtxKFxudGFnKVxuIH0gaGFzIG5vIGZhY2V0ICR7cShmYWNldE5hbWUpfWA7XG5yZXR1cm4gY29udGV4dE1hcC5oYXMoZXhvKTtcbiB9O1xuaGFyZGVuKGlzSW5zdGFuY2UpO1xucmVjZWl2ZUluc3RhbmNlVGVzdGVyKGlzSW5zdGFuY2UpO1xuIH1cblxucmV0dXJuIGhhcmRlbihtYWtlSW5zdGFuY2UpO1xuIH07JGjNj19vbmNlLmRlZmluZUV4b0NsYXNzKGRlZmluZUV4b0NsYXNzKTtcbmhhcmRlbihkZWZpbmVFeG9DbGFzcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVmaW5lRXhvQ2xhc3NLaXQ9KFxudGFnLFxuaW50ZXJmYWNlR3VhcmRLaXQsXG5pbml0LFxubWV0aG9kc0tpdCxcbm9wdGlvbnM9e30pPT5cbntcbmhhcmRlbihtZXRob2RzS2l0KTtcbmNvbnN0e1xuZmluaXNoPXVuZGVmaW5lZCxcbnJlY2VpdmVBbXBsaWZpZXI9dW5kZWZpbmVkLFxucmVjZWl2ZUluc3RhbmNlVGVzdGVyPXVuZGVmaW5lZH09XG5vcHRpb25zO1xuY29uc3QgY29udGV4dE1hcEtpdD1vYmplY3RNYXAobWV0aG9kc0tpdCwoKT0+bmV3IFdlYWtNYXAoKSk7XG5jb25zdCBnZXRDb250ZXh0S2l0PW9iamVjdE1hcChcbmNvbnRleHRNYXBLaXQsXG4oY29udGV4dE1hcCk9PihmYWNldCk9PmNvbnRleHRNYXAuZ2V0KGZhY2V0KSk7XG5cbmNvbnN0IHByb3RvdHlwZUtpdD1kZWZlbmRQcm90b3R5cGVLaXQoXG50YWcsXG5nZXRDb250ZXh0S2l0LFxubWV0aG9kc0tpdCxcbnRydWUsXG5pbnRlcmZhY2VHdWFyZEtpdCk7XG5cbmxldCBpbnN0YW5jZUNvdW50PTA7XG4vKlxuXG4gICAqL1xuY29uc3QgbWFrZUluc3RhbmNlS2l0PSguLi5hcmdzKT0+e1xuLy9cbmNvbnN0IHN0YXRlPXNlYWwoaW5pdCguLi5hcmdzKSk7XG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgY29udGV4dD17c3RhdGUsZmFjZXRzOm51bGx9O1xuaW5zdGFuY2VDb3VudCs9MTtcbmNvbnN0IGZhY2V0cz1vYmplY3RNYXAocHJvdG90eXBlS2l0LChwcm90byxmYWNldE5hbWUpPT57XG5jb25zdCBzZWxmPW1ha2VTZWxmKHByb3RvLGluc3RhbmNlQ291bnQpO1xuY29udGV4dE1hcEtpdFtmYWNldE5hbWVdLnNldChzZWxmLGNvbnRleHQpO1xucmV0dXJuIHNlbGY7XG4gfSk7XG5jb250ZXh0LmZhY2V0cz1mYWNldHM7XG4vL1xuZnJlZXplKGNvbnRleHQpO1xuaWYoZmluaXNoKXtcbmZpbmlzaChjb250ZXh0KTtcbiB9XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICAgKi9jb250ZXh0LmZhY2V0cyk7XG4gfTtcblxuaWYocmVjZWl2ZUFtcGxpZmllcil7XG4vKiAgICAgICAgICAgICAgICAgICovXG5jb25zdCBhbXBsaWZ5PShleG9GYWNldCk9PntcbmZvcihjb25zdCBjb250ZXh0TWFwIG9mIHZhbHVlcyhjb250ZXh0TWFwS2l0KSl7XG5pZihjb250ZXh0TWFwLmhhcyhleG9GYWNldCkpe1xuY29uc3R7ZmFjZXRzfT1jb250ZXh0TWFwLmdldChleG9GYWNldCk7XG5yZXR1cm4gZmFjZXRzO1xuIH1cbiB9XG50aHJvdyBGYWlsIGBNdXN0IGJlIGEgZmFjZXQgb2YgJHtxKHRhZyl9OiAke2V4b0ZhY2V0fWA7XG4gfTtcbmhhcmRlbihhbXBsaWZ5KTtcbnJlY2VpdmVBbXBsaWZpZXIoYW1wbGlmeSk7XG4gfVxuXG5pZihyZWNlaXZlSW5zdGFuY2VUZXN0ZXIpe1xuLyogICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgaXNJbnN0YW5jZT0oZXhvRmFjZXQsZmFjZXROYW1lPXVuZGVmaW5lZCk9PntcbmlmKGZhY2V0TmFtZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gdmFsdWVzKGNvbnRleHRNYXBLaXQpLnNvbWUoKGNvbnRleHRNYXApPT5cbmNvbnRleHRNYXAuaGFzKGV4b0ZhY2V0KSk7XG5cbiB9XG5hc3NlcnQudHlwZW9mKGZhY2V0TmFtZSwnc3RyaW5nJyk7XG5jb25zdCBjb250ZXh0TWFwPWNvbnRleHRNYXBLaXRbZmFjZXROYW1lXTtcbmNvbnRleHRNYXAhPT11bmRlZmluZWR8fFxuRmFpbCBgZXhvIGNsYXNzIGtpdCAke3EodGFnKX0gaGFzIG5vIGZhY2V0IG5hbWVkICR7cShmYWNldE5hbWUpfWA7XG5yZXR1cm4gY29udGV4dE1hcC5oYXMoZXhvRmFjZXQpO1xuIH07XG5oYXJkZW4oaXNJbnN0YW5jZSk7XG5yZWNlaXZlSW5zdGFuY2VUZXN0ZXIoaXNJbnN0YW5jZSk7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKG1ha2VJbnN0YW5jZUtpdCk7XG4gfTskaM2PX29uY2UuZGVmaW5lRXhvQ2xhc3NLaXQoZGVmaW5lRXhvQ2xhc3NLaXQpO1xuaGFyZGVuKGRlZmluZUV4b0NsYXNzS2l0KTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRXhvPSh0YWcsaW50ZXJmYWNlR3VhcmQsbWV0aG9kcyxvcHRpb25zPXVuZGVmaW5lZCk9PntcbmNvbnN0IG1ha2VJbnN0YW5jZT1kZWZpbmVFeG9DbGFzcyhcbnRhZyxcbmludGVyZmFjZUd1YXJkLFxuaW5pdEVtcHR5LFxubWV0aG9kcyxcbm9wdGlvbnMpO1xuXG5yZXR1cm4gbWFrZUluc3RhbmNlKCk7XG4gfTskaM2PX29uY2UubWFrZUV4byhtYWtlRXhvKTtcbmhhcmRlbihtYWtlRXhvKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImluaXRFbXB0eSI6WyJpbml0RW1wdHkiXSwiZGVmaW5lRXhvQ2xhc3MiOlsiZGVmaW5lRXhvQ2xhc3MiXSwiZGVmaW5lRXhvQ2xhc3NLaXQiOlsiZGVmaW5lRXhvQ2xhc3NLaXQiXSwibWFrZUV4byI6WyJtYWtlRXhvIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAACMF/cgVMAAAFTAAACEAAABAZW5kby9leG8tdjEuNS44L3NyYy9leG8tdG9vbHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9mYXIiLCJAZW5kby9wYXR0ZXJucyIsIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vZ2V0LWludGVyZmFjZS5qcyJdLCJleHBvcnRzIjpbImRlZmVuZFByb3RvdHlwZSIsImRlZmVuZFByb3RvdHlwZUtpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldE1ldGhvZE5hbWVzLGhhc093blByb3BlcnR5T2YsdG9UaHJvd2FibGUsRSxGYXIsbXVzdE1hdGNoLE0saXNBd2FpdEFyZ0d1YXJkLGlzUmF3R3VhcmQsZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQsZ2V0TWV0aG9kR3VhcmRQYXlsb2FkLGdldEludGVyZmFjZUd1YXJkUGF5bG9hZCxnZXRDb3B5TWFwRW50cmllcyxsaXN0RGlmZmVyZW5jZSxvYmplY3RNYXAscSxGYWlsLEdFVF9JTlRFUkZBQ0VfR1VBUkQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjNj19hID0+IChnZXRNZXRob2ROYW1lcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJ0b1Rocm93YWJsZVwiLCBbJGjNj19hID0+ICh0b1Rocm93YWJsZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2ZhclwiLCBbW1wiRVwiLCBbJGjNj19hID0+IChFID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXR0ZXJuc1wiLCBbW1wibXVzdE1hdGNoXCIsIFskaM2PX2EgPT4gKG11c3RNYXRjaCA9ICRozY9fYSldXSxbXCJNXCIsIFskaM2PX2EgPT4gKE0gPSAkaM2PX2EpXV0sW1wiaXNBd2FpdEFyZ0d1YXJkXCIsIFskaM2PX2EgPT4gKGlzQXdhaXRBcmdHdWFyZCA9ICRozY9fYSldXSxbXCJpc1Jhd0d1YXJkXCIsIFskaM2PX2EgPT4gKGlzUmF3R3VhcmQgPSAkaM2PX2EpXV0sW1wiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQgPSAkaM2PX2EpXV0sW1wiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkXCIsIFskaM2PX2EgPT4gKGdldE1ldGhvZEd1YXJkUGF5bG9hZCA9ICRozY9fYSldXSxbXCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWRcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkID0gJGjNj19hKV1dLFtcImdldENvcHlNYXBFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGdldENvcHlNYXBFbnRyaWVzID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2xpc3QtZGlmZmVyZW5jZS5qc1wiLCBbW1wibGlzdERpZmZlcmVuY2VcIiwgWyRozY9fYSA9PiAobGlzdERpZmZlcmVuY2UgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vZ2V0LWludGVyZmFjZS5qc1wiLCBbW1wiR0VUX0lOVEVSRkFDRV9HVUFSRFwiLCBbJGjNj19hID0+IChHRVRfSU5URVJGQUNFX0dVQVJEID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHthcHBseSxvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZGVmaW5lUHJvcGVydGllcyxmcm9tRW50cmllc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgUmF3TWV0aG9kR3VhcmQ9TS5jYWxsKCkucmVzdChNLnJhdygpKS5yZXR1cm5zKE0ucmF3KCkpO1xuXG5jb25zdCBSRURBQ1RFRF9SQVdfQVJHPSc8cmVkYWN0ZWQgcmF3IGFyZz4nO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgUGFzc2FibGVNZXRob2RHdWFyZD1NLmNhbGwoKS5yZXN0KE0uYW55KCkpLnJldHVybnMoTS5hbnkoKSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgZGVmZW5kU3luY0FyZ3M9KHN5bmNBcmdzLG1hdGNoQ29uZmlnLGxhYmVsPXVuZGVmaW5lZCk9PntcbmNvbnN0e1xuZGVjbGFyZWRMZW4sXG5oYXNSZXN0QXJnR3VhcmQsXG5yZXN0QXJnR3VhcmRJc1JhdyxcbnBhcmFtc1BhdHRlcm4sXG5yZWRhY3RlZEluZGljZXN9PVxubWF0Y2hDb25maWc7XG5cbi8vXG4vL1xubGV0IG1hdGNoYWJsZUFyZ3M9c3luY0FyZ3M7XG5pZihyZXN0QXJnR3VhcmRJc1JhdyYmc3luY0FyZ3MubGVuZ3RoPmRlY2xhcmVkTGVuKXtcbmNvbnN0IHJlc3RMZW49c3luY0FyZ3MubGVuZ3RoLWRlY2xhcmVkTGVuO1xuY29uc3QgcmVkYWN0ZWRSZXN0PUFycmF5KHJlc3RMZW4pLmZpbGwoUkVEQUNURURfUkFXX0FSRyk7XG5tYXRjaGFibGVBcmdzPVsuLi5zeW5jQXJncy5zbGljZSgwLGRlY2xhcmVkTGVuKSwuLi5yZWRhY3RlZFJlc3RdO1xuIH1lbHNlIGlmKFxucmVkYWN0ZWRJbmRpY2VzLmxlbmd0aD4wJiZcbnJlZGFjdGVkSW5kaWNlc1swXTxzeW5jQXJncy5sZW5ndGgpXG57XG4vL1xuLy9cbm1hdGNoYWJsZUFyZ3M9Wy4uLnN5bmNBcmdzXTtcbiB9XG5cbmZvcihjb25zdCBpIG9mIHJlZGFjdGVkSW5kaWNlcyl7XG5pZihpPj1tYXRjaGFibGVBcmdzLmxlbmd0aCl7XG5icmVhaztcbiB9XG5tYXRjaGFibGVBcmdzW2ldPVJFREFDVEVEX1JBV19BUkc7XG4gfVxuXG5tdXN0TWF0Y2goaGFyZGVuKG1hdGNoYWJsZUFyZ3MpLHBhcmFtc1BhdHRlcm4sbGFiZWwpO1xuXG5pZihoYXNSZXN0QXJnR3VhcmQpe1xucmV0dXJuIHN5bmNBcmdzO1xuIH1cbnN5bmNBcmdzLmxlbmd0aDw9ZGVjbGFyZWRMZW58fFxuRmFpbCBgJHtxKGxhYmVsKX0gYWNjZXB0cyBhdCBtb3N0ICR7cShkZWNsYXJlZExlbil9IGFyZ3VtZW50cywgbm90ICR7cShcbnN5bmNBcmdzLmxlbmd0aClcbiB9OiAke3N5bmNBcmdzfWA7XG5yZXR1cm4gc3luY0FyZ3M7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBidWlsZE1hdGNoQ29uZmlnPShtZXRob2RHdWFyZFBheWxvYWQpPT57XG5jb25zdHtcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkUGF5bG9hZDtcblxuY29uc3QgbWF0Y2hhYmxlQXJnR3VhcmRzPVsuLi5hcmdHdWFyZHMsLi4ub3B0aW9uYWxBcmdHdWFyZHNdO1xuXG5jb25zdCByZWRhY3RlZEluZGljZXM9W107XG5mb3IobGV0IGk9MDtpPG1hdGNoYWJsZUFyZ0d1YXJkcy5sZW5ndGg7aSs9MSl7XG5pZihpc1Jhd0d1YXJkKG1hdGNoYWJsZUFyZ0d1YXJkc1tpXSkpe1xubWF0Y2hhYmxlQXJnR3VhcmRzW2ldPVJFREFDVEVEX1JBV19BUkc7XG5yZWRhY3RlZEluZGljZXMucHVzaChpKTtcbiB9XG4gfVxuXG4vL1xubGV0IG1hdGNoYWJsZVJlc3RBcmdHdWFyZD1yZXN0QXJnR3VhcmQ7XG5pZihpc1Jhd0d1YXJkKG1hdGNoYWJsZVJlc3RBcmdHdWFyZCkpe1xubWF0Y2hhYmxlUmVzdEFyZ0d1YXJkPU0uYXJyYXlPZihSRURBQ1RFRF9SQVdfQVJHKTtcbiB9XG5jb25zdCBtYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQ9aGFyZGVuKHtcbi4uLm1ldGhvZEd1YXJkUGF5bG9hZCxcbmFyZ0d1YXJkczptYXRjaGFibGVBcmdHdWFyZHMuc2xpY2UoMCxhcmdHdWFyZHMubGVuZ3RoKSxcbm9wdGlvbmFsQXJnR3VhcmRzOm1hdGNoYWJsZUFyZ0d1YXJkcy5zbGljZShhcmdHdWFyZHMubGVuZ3RoKSxcbnJlc3RBcmdHdWFyZDptYXRjaGFibGVSZXN0QXJnR3VhcmR9KTtcblxuXG5jb25zdCBwYXJhbXNQYXR0ZXJuPU0uc3BsaXRBcnJheShcbm1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZC5hcmdHdWFyZHMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQub3B0aW9uYWxBcmdHdWFyZHMsXG5tYXRjaGFibGVNZXRob2RHdWFyZFBheWxvYWQucmVzdEFyZ0d1YXJkKTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmRlY2xhcmVkTGVuOm1hdGNoYWJsZUFyZ0d1YXJkcy5sZW5ndGgsXG5oYXNSZXN0QXJnR3VhcmQ6cmVzdEFyZ0d1YXJkIT09dW5kZWZpbmVkLFxucmVzdEFyZ0d1YXJkSXNSYXc6cmVzdEFyZ0d1YXJkIT09bWF0Y2hhYmxlUmVzdEFyZ0d1YXJkLFxucGFyYW1zUGF0dGVybixcbnJlZGFjdGVkSW5kaWNlcyxcbm1hdGNoYWJsZU1ldGhvZEd1YXJkUGF5bG9hZH0pO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZFN5bmNNZXRob2Q9KFxuZ2V0Q29udGV4dCxcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmRQYXlsb2FkLFxubGFiZWwpPT5cbntcbmNvbnN0e3JldHVybkd1YXJkfT1tZXRob2RHdWFyZFBheWxvYWQ7XG5jb25zdCBpc1Jhd1JldHVybj1pc1Jhd0d1YXJkKHJldHVybkd1YXJkKTtcbmNvbnN0IG1hdGNoQ29uZmlnPWJ1aWxkTWF0Y2hDb25maWcobWV0aG9kR3VhcmRQYXlsb2FkKTtcbmNvbnN0e3N5bmNNZXRob2R9PXtcbi8vXG5zeW5jTWV0aG9kKC4uLnN5bmNBcmdzKXtcbnRyeXtcbmNvbnN0IGNvbnRleHQ9Z2V0Q29udGV4dCh0aGlzKTtcbi8vXG5jb25zdCByZWFsQXJncz1kZWZlbmRTeW5jQXJncyhzeW5jQXJncyxtYXRjaENvbmZpZyxsYWJlbCk7XG5jb25zdCByZXN1bHQ9YXBwbHkoYmVoYXZpb3JNZXRob2QsY29udGV4dCxyZWFsQXJncyk7XG5pZighaXNSYXdSZXR1cm4pe1xubXVzdE1hdGNoKGhhcmRlbihyZXN1bHQpLHJldHVybkd1YXJkLCBgJHtsYWJlbH06IHJlc3VsdGApO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfWNhdGNoKHRocm93blRoaW5nKXtcbnRocm93IHRvVGhyb3dhYmxlKHRocm93blRoaW5nKTtcbiB9XG4gfX07XG5cbnJldHVybiBzeW5jTWV0aG9kO1xuIH07XG5cbi8qXG5cbiAqL1xuY29uc3QgZGVzeW5jPShtZXRob2RHdWFyZFBheWxvYWQpPT57XG5jb25zdHtcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPVtdLFxucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkUGF5bG9hZDtcbiFpc0F3YWl0QXJnR3VhcmQocmVzdEFyZ0d1YXJkKXx8XG5GYWlsIGBSZXN0IGFyZ3MgbWF5IG5vdCBiZSBhd2FpdGVkOiAke3Jlc3RBcmdHdWFyZH1gO1xuY29uc3QgcmF3QXJnR3VhcmRzPVsuLi5hcmdHdWFyZHMsLi4ub3B0aW9uYWxBcmdHdWFyZHNdO1xuXG5jb25zdCBhd2FpdEluZGV4ZXM9W107XG5mb3IobGV0IGk9MDtpPHJhd0FyZ0d1YXJkcy5sZW5ndGg7aSs9MSl7XG5jb25zdCBhcmdHdWFyZD1yYXdBcmdHdWFyZHNbaV07XG5pZihpc0F3YWl0QXJnR3VhcmQoYXJnR3VhcmQpKXtcbnJhd0FyZ0d1YXJkc1tpXT1nZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZChhcmdHdWFyZCkuYXJnR3VhcmQ7XG5hd2FpdEluZGV4ZXMucHVzaChpKTtcbiB9XG4gfVxucmV0dXJue1xuYXdhaXRJbmRleGVzLFxucmF3TWV0aG9kR3VhcmRQYXlsb2FkOntcbi4uLm1ldGhvZEd1YXJkUGF5bG9hZCxcbmFyZ0d1YXJkczpyYXdBcmdHdWFyZHMuc2xpY2UoMCxhcmdHdWFyZHMubGVuZ3RoKSxcbm9wdGlvbmFsQXJnR3VhcmRzOnJhd0FyZ0d1YXJkcy5zbGljZShhcmdHdWFyZHMubGVuZ3RoKX19O1xuXG5cbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlZmVuZEFzeW5jTWV0aG9kPShcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKT0+XG57XG5jb25zdHtyZXR1cm5HdWFyZH09bWV0aG9kR3VhcmRQYXlsb2FkO1xuY29uc3QgaXNSYXdSZXR1cm49aXNSYXdHdWFyZChyZXR1cm5HdWFyZCk7XG5cbmNvbnN0e2F3YWl0SW5kZXhlcyxyYXdNZXRob2RHdWFyZFBheWxvYWR9PWRlc3luYyhtZXRob2RHdWFyZFBheWxvYWQpO1xuY29uc3QgbWF0Y2hDb25maWc9YnVpbGRNYXRjaENvbmZpZyhyYXdNZXRob2RHdWFyZFBheWxvYWQpO1xuXG5jb25zdHthc3luY01ldGhvZH09e1xuLy9cbmFzeW5jTWV0aG9kKC4uLmFyZ3Mpe1xuY29uc3QgYXdhaXRMaXN0PVtdO1xuZm9yKGNvbnN0IGkgb2YgYXdhaXRJbmRleGVzKXtcbmlmKGk+PWFyZ3MubGVuZ3RoKXtcbmJyZWFrO1xuIH1cbmF3YWl0TGlzdC5wdXNoKGFyZ3NbaV0pO1xuIH1cbmNvbnN0IHA9UHJvbWlzZS5hbGwoYXdhaXRMaXN0KTtcbmNvbnN0IHN5bmNBcmdzPVsuLi5hcmdzXTtcbmNvbnN0IHJlc3VsdFA9RS53aGVuKFxucCxcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLyhhd2FpdGVkQXJncyk9PntcbmZvcihsZXQgaj0wO2o8YXdhaXRlZEFyZ3MubGVuZ3RoO2orPTEpe1xuc3luY0FyZ3NbYXdhaXRJbmRleGVzW2pdXT1hd2FpdGVkQXJnc1tqXTtcbiB9XG4vL1xuLy9cbmNvbnN0IGNvbnRleHQ9Z2V0Q29udGV4dCh0aGlzKTtcbmNvbnN0IHJlYWxBcmdzPWRlZmVuZFN5bmNBcmdzKHN5bmNBcmdzLG1hdGNoQ29uZmlnLGxhYmVsKTtcbnJldHVybiBhcHBseShiZWhhdmlvck1ldGhvZCxjb250ZXh0LHJlYWxBcmdzKTtcbiB9KTtcblxucmV0dXJuIEUud2hlbihyZXN1bHRQLChmdWxmaWxsbWVudCk9PntcbmlmKCFpc1Jhd1JldHVybil7XG5tdXN0TWF0Y2goaGFyZGVuKGZ1bGZpbGxtZW50KSxyZXR1cm5HdWFyZCwgYCR7bGFiZWx9OiByZXN1bHRgKTtcbiB9XG5yZXR1cm4gZnVsZmlsbG1lbnQ7XG4gfSkuY2F0Y2goKHJlYXNvbik9PlxuLy9cbi8vXG5Qcm9taXNlLnJlamVjdCh0b1Rocm93YWJsZShyZWFzb24pKSk7XG5cbiB9fTtcblxucmV0dXJuIGFzeW5jTWV0aG9kO1xuIH07XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBkZWZlbmRNZXRob2Q9KGdldENvbnRleHQsYmVoYXZpb3JNZXRob2QsbWV0aG9kR3VhcmQsbGFiZWwpPT57XG5jb25zdCBtZXRob2RHdWFyZFBheWxvYWQ9Z2V0TWV0aG9kR3VhcmRQYXlsb2FkKG1ldGhvZEd1YXJkKTtcbmNvbnN0e2NhbGxLaW5kfT1tZXRob2RHdWFyZFBheWxvYWQ7XG5pZihjYWxsS2luZD09PSdzeW5jJyl7XG5yZXR1cm4gZGVmZW5kU3luY01ldGhvZChcbmdldENvbnRleHQsXG5iZWhhdmlvck1ldGhvZCxcbm1ldGhvZEd1YXJkUGF5bG9hZCxcbmxhYmVsKTtcblxuIH1lbHNle1xuYXNzZXJ0KGNhbGxLaW5kPT09J2FzeW5jJyk7XG5yZXR1cm4gZGVmZW5kQXN5bmNNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZFBheWxvYWQsXG5sYWJlbCk7XG5cbiB9XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBiaW5kTWV0aG9kPShcbm1ldGhvZFRhZyxcbmNvbnRleHRQcm92aWRlcixcbmJlaGF2aW9yTWV0aG9kLFxubWV0aG9kR3VhcmQpPT5cbntcbmFzc2VydC50eXBlb2YoYmVoYXZpb3JNZXRob2QsJ2Z1bmN0aW9uJyk7XG5cbi8qXG5cblxuICAgKi9cbmNvbnN0IGdldENvbnRleHQ9KHJlcHJlc2VudGF0aXZlKT0+e1xucmVwcmVzZW50YXRpdmV8fFxuLy9cbkZhaWwgYE1ldGhvZCAke21ldGhvZFRhZ30gY2FsbGVkIHdpdGhvdXQgJ3RoaXMnIG9iamVjdGA7XG5jb25zdCBjb250ZXh0PWNvbnRleHRQcm92aWRlcihyZXByZXNlbnRhdGl2ZSk7XG5pZihjb250ZXh0PT09dW5kZWZpbmVkKXtcbnRocm93IEZhaWwgYCR7cShcbm1ldGhvZFRhZylcbiB9IG1heSBvbmx5IGJlIGFwcGxpZWQgdG8gYSB2YWxpZCBpbnN0YW5jZTogJHtyZXByZXNlbnRhdGl2ZX1gO1xuIH1cbnJldHVybiBjb250ZXh0O1xuIH07XG5cbmNvbnN0IG1ldGhvZD1kZWZlbmRNZXRob2QoXG5nZXRDb250ZXh0LFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZCxcbm1ldGhvZFRhZyk7XG5cblxuZGVmaW5lUHJvcGVydGllcyhtZXRob2Qse1xubmFtZTp7dmFsdWU6bWV0aG9kVGFnfSxcbmxlbmd0aDp7dmFsdWU6YmVoYXZpb3JNZXRob2QubGVuZ3RofX0pO1xuXG5yZXR1cm4gbWV0aG9kO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZlbmRQcm90b3R5cGU9KFxudGFnLFxuY29udGV4dFByb3ZpZGVyLFxuYmVoYXZpb3JNZXRob2RzLFxudGhpc2Z1bE1ldGhvZHM9ZmFsc2UsXG5pbnRlcmZhY2VHdWFyZD11bmRlZmluZWQpPT5cbntcbmNvbnN0IHByb3RvdHlwZT17fTtcbmNvbnN0IG1ldGhvZE5hbWVzPWdldE1ldGhvZE5hbWVzKGJlaGF2aW9yTWV0aG9kcykuZmlsdGVyKFxuLy9cbi8vXG4oa2V5KT0+e1xuaWYoa2V5IT09J2NvbnN0cnVjdG9yJyl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCBjb25zdHJ1Y3Rvcj1iZWhhdmlvck1ldGhvZHMuY29uc3RydWN0b3I7XG5yZXR1cm4hKFxuY29uc3RydWN0b3IucHJvdG90eXBlJiZcbmNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj09PWNvbnN0cnVjdG9yKTtcblxuIH0pO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IG1ldGhvZEd1YXJkcztcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZGVmYXVsdEd1YXJkcztcbmlmKGludGVyZmFjZUd1YXJkKXtcbmNvbnN0e1xuaW50ZXJmYWNlTmFtZSxcbm1ldGhvZEd1YXJkczptZyxcbnN5bWJvbE1ldGhvZEd1YXJkcyxcbnNsb3BweSxcbmRlZmF1bHRHdWFyZHM6ZGc9c2xvcHB5PydwYXNzYWJsZSc6ZGVmYXVsdEd1YXJkc309XG5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoaW50ZXJmYWNlR3VhcmQpO1xubWV0aG9kR3VhcmRzPWhhcmRlbih7XG4uLi5tZyxcbi4uLihzeW1ib2xNZXRob2RHdWFyZHMmJlxuZnJvbUVudHJpZXMoZ2V0Q29weU1hcEVudHJpZXMoc3ltYm9sTWV0aG9kR3VhcmRzKSkpfSk7XG5cbmRlZmF1bHRHdWFyZHM9ZGc7XG57XG5jb25zdCBtZXRob2RHdWFyZE5hbWVzPW93bktleXMobWV0aG9kR3VhcmRzKTtcbmNvbnN0IHVuaW1wbGVtZW50ZWQ9bGlzdERpZmZlcmVuY2UobWV0aG9kR3VhcmROYW1lcyxtZXRob2ROYW1lcyk7XG51bmltcGxlbWVudGVkLmxlbmd0aD09PTB8fFxuRmFpbCBgbWV0aG9kcyAke3EodW5pbXBsZW1lbnRlZCl9IG5vdCBpbXBsZW1lbnRlZCBieSAke3EodGFnKX1gO1xuaWYoZGVmYXVsdEd1YXJkcz09PXVuZGVmaW5lZCl7XG5jb25zdCB1bmd1YXJkZWQ9bGlzdERpZmZlcmVuY2UobWV0aG9kTmFtZXMsbWV0aG9kR3VhcmROYW1lcyk7XG51bmd1YXJkZWQubGVuZ3RoPT09MHx8XG5GYWlsIGBtZXRob2RzICR7cSh1bmd1YXJkZWQpfSBub3QgZ3VhcmRlZCBieSAke3EoaW50ZXJmYWNlTmFtZSl9YDtcbiB9XG4gfVxuIH1cblxuZm9yKGNvbnN0IHByb3Agb2YgbWV0aG9kTmFtZXMpe1xuY29uc3Qgb3JpZ2luYWxNZXRob2Q9YmVoYXZpb3JNZXRob2RzW3Byb3BdO1xuY29uc3R7c2hpZnRlZE1ldGhvZH09e1xuc2hpZnRlZE1ldGhvZCguLi5hcmdzKXtcbnJldHVybiBvcmlnaW5hbE1ldGhvZCh0aGlzLC4uLmFyZ3MpO1xuIH19O1xuXG5jb25zdCBiZWhhdmlvck1ldGhvZD10aGlzZnVsTWV0aG9kcz9vcmlnaW5hbE1ldGhvZDpzaGlmdGVkTWV0aG9kO1xuLy9cbi8vXG5sZXQgbWV0aG9kR3VhcmQ9bWV0aG9kR3VhcmRzJiZtZXRob2RHdWFyZHNbcHJvcF07XG5pZighbWV0aG9kR3VhcmQpe1xuc3dpdGNoKGRlZmF1bHRHdWFyZHMpe1xuY2FzZSB1bmRlZmluZWQ6e1xuaWYodGhpc2Z1bE1ldGhvZHMpe1xubWV0aG9kR3VhcmQ9UGFzc2FibGVNZXRob2RHdWFyZDtcbiB9ZWxzZXtcbm1ldGhvZEd1YXJkPVJhd01ldGhvZEd1YXJkO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UncGFzc2FibGUnOntcbm1ldGhvZEd1YXJkPVBhc3NhYmxlTWV0aG9kR3VhcmQ7XG5icmVhaztcbiB9XG5jYXNlJ3Jhdyc6e1xubWV0aG9kR3VhcmQ9UmF3TWV0aG9kR3VhcmQ7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYFVucmVjb2duaXplZCBkZWZhdWx0R3VhcmRzICR7cShkZWZhdWx0R3VhcmRzKX1gO1xuIH19XG5cbiB9XG5wcm90b3R5cGVbcHJvcF09YmluZE1ldGhvZChcbiBgSW4gJHtxKHByb3ApfSBtZXRob2Qgb2YgKCR7dGFnfSlgLFxuY29udGV4dFByb3ZpZGVyLFxuYmVoYXZpb3JNZXRob2QsXG5tZXRob2RHdWFyZCk7XG5cbiB9XG5cbmlmKCFoYXNPd25Qcm9wZXJ0eU9mKHByb3RvdHlwZSxHRVRfSU5URVJGQUNFX0dVQVJEKSl7XG5jb25zdCBnZXRJbnRlcmZhY2VHdWFyZE1ldGhvZD17XG5bR0VUX0lOVEVSRkFDRV9HVUFSRF0oKXtcbi8vXG5yZXR1cm4gaW50ZXJmYWNlR3VhcmQ7XG4gfX1bXG5HRVRfSU5URVJGQUNFX0dVQVJEXTtcbnByb3RvdHlwZVtHRVRfSU5URVJGQUNFX0dVQVJEXT1iaW5kTWV0aG9kKFxuIGBJbiAke3EoR0VUX0lOVEVSRkFDRV9HVUFSRCl9IG1ldGhvZCBvZiAoJHt0YWd9KWAsXG5jb250ZXh0UHJvdmlkZXIsXG5nZXRJbnRlcmZhY2VHdWFyZE1ldGhvZCxcblBhc3NhYmxlTWV0aG9kR3VhcmQpO1xuXG4gfVxuXG5yZXR1cm4gRmFyKFxudGFnLFxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnByb3RvdHlwZSk7XG5cblxuIH07JGjNj19vbmNlLmRlZmVuZFByb3RvdHlwZShkZWZlbmRQcm90b3R5cGUpO1xuaGFyZGVuKGRlZmVuZFByb3RvdHlwZSk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBkZWZlbmRQcm90b3R5cGVLaXQ9KFxudGFnLFxuY29udGV4dFByb3ZpZGVyS2l0LFxuYmVoYXZpb3JNZXRob2RzS2l0LFxudGhpc2Z1bE1ldGhvZHM9ZmFsc2UsXG5pbnRlcmZhY2VHdWFyZEtpdD11bmRlZmluZWQpPT5cbntcbmNvbnN0IGZhY2V0TmFtZXM9b3duS2V5cyhiZWhhdmlvck1ldGhvZHNLaXQpLnNvcnQoKTtcbmZhY2V0TmFtZXMubGVuZ3RoPjF8fEZhaWwgYEEgbXVsdGktZmFjZXQgb2JqZWN0IG11c3QgaGF2ZSBtdWx0aXBsZSBmYWNldHNgO1xuaWYoaW50ZXJmYWNlR3VhcmRLaXQpe1xuY29uc3QgaW50ZXJmYWNlTmFtZXM9b3duS2V5cyhpbnRlcmZhY2VHdWFyZEtpdCk7XG5jb25zdCBleHRyYUludGVyZmFjZU5hbWVzPWxpc3REaWZmZXJlbmNlKGZhY2V0TmFtZXMsaW50ZXJmYWNlTmFtZXMpO1xuZXh0cmFJbnRlcmZhY2VOYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYEludGVyZmFjZXMgJHtxKGV4dHJhSW50ZXJmYWNlTmFtZXMpfSBub3QgaW1wbGVtZW50ZWQgYnkgJHtxKHRhZyl9YDtcbmNvbnN0IGV4dHJhRmFjZXROYW1lcz1saXN0RGlmZmVyZW5jZShpbnRlcmZhY2VOYW1lcyxmYWNldE5hbWVzKTtcbmV4dHJhRmFjZXROYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYEZhY2V0cyAke3EoZXh0cmFGYWNldE5hbWVzKX0gb2YgJHtxKHRhZyl9IG5vdCBndWFyZGVkIGJ5IGludGVyZmFjZXNgO1xuIH1cbmNvbnN0IGNvbnRleHRNYXBOYW1lcz1vd25LZXlzKGNvbnRleHRQcm92aWRlcktpdCk7XG5jb25zdCBleHRyYUNvbnRleHROYW1lcz1saXN0RGlmZmVyZW5jZShmYWNldE5hbWVzLGNvbnRleHRNYXBOYW1lcyk7XG5leHRyYUNvbnRleHROYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYENvbnRleHRzICR7cShleHRyYUNvbnRleHROYW1lcyl9IG5vdCBpbXBsZW1lbnRlZCBieSAke3EodGFnKX1gO1xuY29uc3QgZXh0cmFGYWNldE5hbWVzPWxpc3REaWZmZXJlbmNlKGNvbnRleHRNYXBOYW1lcyxmYWNldE5hbWVzKTtcbmV4dHJhRmFjZXROYW1lcy5sZW5ndGg9PT0wfHxcbkZhaWwgYEZhY2V0cyAke3EoZXh0cmFGYWNldE5hbWVzKX0gb2YgJHtxKHRhZyl9IG1pc3NpbmcgY29udGV4dHNgO1xuY29uc3QgcHJvdG9LaXQ9b2JqZWN0TWFwKGJlaGF2aW9yTWV0aG9kc0tpdCwoYmVoYXZpb3JNZXRob2RzLGZhY2V0TmFtZSk9PlxuZGVmZW5kUHJvdG90eXBlKFxuIGAke3RhZ30gJHtTdHJpbmcoZmFjZXROYW1lKX1gLFxuY29udGV4dFByb3ZpZGVyS2l0W2ZhY2V0TmFtZV0sXG5iZWhhdmlvck1ldGhvZHMsXG50aGlzZnVsTWV0aG9kcyxcbmludGVyZmFjZUd1YXJkS2l0JiZpbnRlcmZhY2VHdWFyZEtpdFtmYWNldE5hbWVdKSk7XG5cblxucmV0dXJuIHByb3RvS2l0O1xuIH07JGjNj19vbmNlLmRlZmVuZFByb3RvdHlwZUtpdChkZWZlbmRQcm90b3R5cGVLaXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmZW5kUHJvdG90eXBlIjpbImRlZmVuZFByb3RvdHlwZSJdLCJkZWZlbmRQcm90b3R5cGVLaXQiOlsiZGVmZW5kUHJvdG90eXBlS2l0Il19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAANeWUP5lAgAAZQIAACUAAABAZW5kby9leG8tdjEuNS44L3NyYy9nZXQtaW50ZXJmYWNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJHRVRfSU5URVJGQUNFX0dVQVJEIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIC8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgR0VUX0lOVEVSRkFDRV9HVUFSRD0nX19nZXRJbnRlcmZhY2VHdWFyZF9fJztcblxuLypcblxuXG5cblxuXG5cblxuICovJGjNj19vbmNlLkdFVF9JTlRFUkZBQ0VfR1VBUkQoR0VUX0lOVEVSRkFDRV9HVUFSRCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJHRVRfSU5URVJGQUNFX0dVQVJEIjpbIkdFVF9JTlRFUkZBQ0VfR1VBUkQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABURLJnkBAAB5AQAAHQAAAEBlbmRvL2V4by12MS41Ljgvc3JjL3R5cGVzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW10pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAVESyZ5AQAAeQEAACAAAABAZW5kby9mYXItdjEuMS4xMC9zcmMvZXhwb3J0cy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABSckKpuQIAALkCAAAeAAAAQGVuZG8vZmFyLXYxLjEuMTAvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2V2ZW50dWFsLXNlbmQiLCJAZW5kby9wYXNzLXN0eWxlIiwiLi9leHBvcnRzLmpzIl0sImV4cG9ydHMiOlsiZ2V0SW50ZXJmYWNlT2YiLCJnZXRJbnRlcmZhY2VPZiIsbnVsbF0sInJlZXhwb3J0cyI6WyIuL2V4cG9ydHMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXZlbnR1YWwtc2VuZFwiLCBbXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbXV0sW1wiLi9leHBvcnRzLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiQGVuZG8vZXZlbnR1YWwtc2VuZCI6W1siRSIsIkUiXV0sIkBlbmRvL3Bhc3Mtc3R5bGUiOltbIkZhciIsIkZhciJdLFsiZ2V0SW50ZXJmYWNlT2YiLCJnZXRJbnRlcmZhY2VPZiJdLFsicGFzc1N0eWxlT2YiLCJwYXNzU3R5bGVPZiJdXX0sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAWX9kFqMHAACjBwAAHQAAAEBlbmRvL21hcnNoYWwtdjEuNi4zL2luZGV4LmpzeyJpbXBvcnRzIjpbIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyIsIi4vc3JjL21hcnNoYWwuanMiLCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyIsIi4vc3JjL21hcnNoYWwtanVzdGluLmpzIiwiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiLCIuL3NyYy9yYW5rT3JkZXIuanMiLCIuL3NyYy90eXBlcy5qcyIsIkBlbmRvL3Bhc3Mtc3R5bGUiXSwiZXhwb3J0cyI6WyJhc3NlcnRSYW5rU29ydGVkIiwiYXNzZXJ0UmFua1NvcnRlZCIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsInBhcnNlIiwicGFyc2UiLG51bGwsbnVsbCxudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvdHlwZXMuanMiLCJAZW5kby9wYXNzLXN0eWxlIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qc1wiLCBbXV0sW1wiLi9zcmMvbWFyc2hhbC5qc1wiLCBbXV0sW1wiLi9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanNcIiwgW11dLFtcIi4vc3JjL21hcnNoYWwtanVzdGluLmpzXCIsIFtdXSxbXCIuL3NyYy9lbmNvZGVQYXNzYWJsZS5qc1wiLCBbXV0sW1wiLi9zcmMvcmFua09yZGVyLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV0sW1wiQGVuZG8vcGFzcy1zdHlsZVwiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2VuY29kZVRvQ2FwRGF0YS5qcyI6W1siUUNMQVNTIiwiUUNMQVNTIl1dLCIuL3NyYy9tYXJzaGFsLmpzIjpbWyJtYWtlTWFyc2hhbCIsIm1ha2VNYXJzaGFsIl1dLCIuL3NyYy9tYXJzaGFsLXN0cmluZ2lmeS5qcyI6W1sic3RyaW5naWZ5Iiwic3RyaW5naWZ5Il0sWyJwYXJzZSIsInBhcnNlIl1dLCIuL3NyYy9tYXJzaGFsLWp1c3Rpbi5qcyI6W1siZGVjb2RlVG9KdXN0aW4iLCJkZWNvZGVUb0p1c3RpbiJdXSwiLi9zcmMvZW5jb2RlUGFzc2FibGUuanMiOltbIm1ha2VQYXNzYWJsZUtpdCIsIm1ha2VQYXNzYWJsZUtpdCJdLFsibWFrZUVuY29kZVBhc3NhYmxlIiwibWFrZUVuY29kZVBhc3NhYmxlIl0sWyJtYWtlRGVjb2RlUGFzc2FibGUiLCJtYWtlRGVjb2RlUGFzc2FibGUiXSxbImlzRW5jb2RlZFJlbW90YWJsZSIsImlzRW5jb2RlZFJlbW90YWJsZSJdLFsiemVyb1BhZCIsInplcm9QYWQiXSxbInJlY29yZE5hbWVzIiwicmVjb3JkTmFtZXMiXSxbInJlY29yZFZhbHVlcyIsInJlY29yZFZhbHVlcyJdXSwiLi9zcmMvcmFua09yZGVyLmpzIjpbWyJ0cml2aWFsQ29tcGFyYXRvciIsInRyaXZpYWxDb21wYXJhdG9yIl0sWyJhc3NlcnRSYW5rU29ydGVkIiwiYXNzZXJ0UmFua1NvcnRlZCJdLFsiY29tcGFyZVJhbmsiLCJjb21wYXJlUmFuayJdLFsiaXNSYW5rU29ydGVkIiwiaXNSYW5rU29ydGVkIl0sWyJzb3J0QnlSYW5rIiwic29ydEJ5UmFuayJdLFsiY29tcGFyZUFudGlSYW5rIiwiY29tcGFyZUFudGlSYW5rIl0sWyJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCIsIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0Il0sWyJnZXRQYXNzU3R5bGVDb3ZlciIsImdldFBhc3NTdHlsZUNvdmVyIl0sWyJpbnRlcnNlY3RSYW5rQ292ZXJzIiwiaW50ZXJzZWN0UmFua0NvdmVycyJdLFsidW5pb25SYW5rQ292ZXJzIiwidW5pb25SYW5rQ292ZXJzIl1dLCJAZW5kby9wYXNzLXN0eWxlIjpbWyJkZWVwbHlGdWxmaWxsZWQiLCJkZWVwbHlGdWxmaWxsZWQiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKpdDamIQwAAiEMAACoAAABAZW5kby9tYXJzaGFsLXYxLjYuMy9zcmMvZW5jb2RlUGFzc2FibGUuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImlzRW5jb2RlZFJlbW90YWJsZSIsIm1ha2VEZWNvZGVQYXNzYWJsZSIsIm1ha2VFbmNvZGVQYXNzYWJsZSIsIm1ha2VQYXNzYWJsZUtpdCIsInBhc3NTdHlsZVByZWZpeGVzIiwicmVjb3JkTmFtZXMiLCJyZWNvcmRWYWx1ZXMiLCJ6ZXJvUGFkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0VGFnLG1ha2VUYWdnZWQscGFzc1N0eWxlT2YsYXNzZXJ0UmVjb3JkLGlzRXJyb3JMaWtlLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsYixxLEZhaWw7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJhc3NlcnRSZWNvcmRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmVjb3JkID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dLFtcIm5hbWVGb3JQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChuYW1lRm9yUGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiYlwiLCBbJGjNj19hID0+IChiID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e2Zyb21FbnRyaWVzLGlzfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vL1xuY29uc3QgckMwPS9bXFx4MDAtXFx4MUZdLztcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBnZXRTdWZmaXg9KHN0cixpbmRleCk9PmluZGV4PT09MD9zdHI6c3RyLnN1YnN0cmluZyhpbmRleCk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHJlY29yZE5hbWVzPShyZWNvcmQpPT5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuaGFyZGVuKC8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhyZWNvcmQpLnNvcnQoKS5yZXZlcnNlKCkpOyRozY9fb25jZS5yZWNvcmROYW1lcyhyZWNvcmROYW1lcyk7XG5oYXJkZW4ocmVjb3JkTmFtZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICByZWNvcmRWYWx1ZXM9KHJlY29yZCxuYW1lcyk9PlxuaGFyZGVuKG5hbWVzLm1hcCgobmFtZSk9PnJlY29yZFtuYW1lXSkpOyRozY9fb25jZS5yZWNvcmRWYWx1ZXMocmVjb3JkVmFsdWVzKTtcbmhhcmRlbihyZWNvcmRWYWx1ZXMpO1xuXG5jb25zdCB6ZXJvZXM9QXJyYXkoMTYpLlxuZmlsbCh1bmRlZmluZWQpLlxubWFwKChfLGkpPT4nMCcucmVwZWF0KGkpKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHplcm9QYWQ9KG4sc2l6ZSk9PntcbmNvbnN0IG5TdHI9IGAke259YDtcbmNvbnN0IGZpbGxMZW49c2l6ZS1uU3RyLmxlbmd0aDtcbmlmKGZpbGxMZW49PT0wKXJldHVybiBuU3RyO1xuYXNzZXJ0KGZpbGxMZW4+MCYmZmlsbExlbjx6ZXJvZXMubGVuZ3RoKTtcbnJldHVybiBgJHt6ZXJvZXNbZmlsbExlbl19JHtuU3RyfWA7XG4gfTskaM2PX29uY2UuemVyb1BhZCh6ZXJvUGFkKTtcbmhhcmRlbih6ZXJvUGFkKTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBhc051bWJlcj1uZXcgRmxvYXQ2NEFycmF5KDEpO1xuY29uc3QgYXNCaXRzPW5ldyBCaWdVaW50NjRBcnJheShhc051bWJlci5idWZmZXIpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG5jb25zdCBDYW5vbmljYWxOYU5CaXRzPSdmZmY4MDAwMDAwMDAwMDAwJztcblxuLypcblxuXG4gKi9cbmNvbnN0IGVuY29kZUJpbmFyeTY0PShuKT0+e1xuLy9cbmlmKGlzKG4sLTApKXtcbm49MDtcbiB9ZWxzZSBpZihpcyhuLE5hTikpe1xucmV0dXJuIGBmJHtDYW5vbmljYWxOYU5CaXRzfWA7XG4gfVxuYXNOdW1iZXJbMF09bjtcbmxldCBiaXRzPWFzQml0c1swXTtcbmlmKG48MCl7XG5iaXRzXj0weGZmZmZmZmZmZmZmZmZmZmZuO1xuIH1lbHNle1xuYml0c149MHg4MDAwMDAwMDAwMDAwMDAwbjtcbiB9XG5yZXR1cm4gYGYke3plcm9QYWQoYml0cy50b1N0cmluZygxNiksMTYpfWA7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlQmluYXJ5NjQ9KGVuY29kZWQsc2tpcD0wKT0+e1xuZW5jb2RlZC5jaGFyQXQoc2tpcCk9PT0nZid8fEZhaWwgYEVuY29kZWQgbnVtYmVyIGV4cGVjdGVkOiAke2VuY29kZWR9YDtcbmxldCBiaXRzPUJpZ0ludCggYDB4JHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpfWApO1xuaWYoZW5jb2RlZC5jaGFyQXQoc2tpcCsxKTwnOCcpe1xuYml0c149MHhmZmZmZmZmZmZmZmZmZmZmbjtcbiB9ZWxzZXtcbmJpdHNePTB4ODAwMDAwMDAwMDAwMDAwMG47XG4gfVxuYXNCaXRzWzBdPWJpdHM7XG5jb25zdCByZXN1bHQ9YXNOdW1iZXJbMF07XG4haXMocmVzdWx0LC0wKXx8XG5GYWlsIGBVbmV4cGVjdGVkIG5lZ2F0aXZlIHplcm86ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgZW5jb2RlQmlnSW50PShuKT0+e1xuY29uc3QgYWJzPW48MG4/LW46bjtcbmNvbnN0IG5EaWdpdHM9YWJzLnRvU3RyaW5nKCkubGVuZ3RoO1xuY29uc3QgbERpZ2l0cz1uRGlnaXRzLnRvU3RyaW5nKCkubGVuZ3RoO1xuaWYobjwwbil7XG5yZXR1cm4gYG4ke1xuLy9cbi8vXG4nIycucmVwZWF0KGxEaWdpdHMtMSlcbiB9JHtcbi8vXG4oMTAqKmxEaWdpdHMtbkRpZ2l0cykudG9TdHJpbmcoKS5wYWRTdGFydChsRGlnaXRzLCcwJylcbiB9OiR7XG4vL1xuKDEwbioqQmlnSW50KG5EaWdpdHMpK24pLnRvU3RyaW5nKCkucGFkU3RhcnQobkRpZ2l0cywnMCcpXG4gfWA7XG4gfWVsc2V7XG5yZXR1cm4gYHAke1xuLy9cbi8vXG4nficucmVwZWF0KGxEaWdpdHMtMSlcbiB9JHtcbi8vXG5uRGlnaXRzXG4gfToke1xuLy9cbm5cbiB9YDtcbiB9XG4gfTtcblxuY29uc3QgckJpZ0ludFBheWxvYWQ9LyhbMC05XSspKDooWzAtOV0rJHwpfCkvcztcblxuLypcblxuXG4gKi9cbmNvbnN0IGRlY29kZUJpZ0ludD0oZW5jb2RlZCk9PntcbmNvbnN0IHR5cGVQcmVmaXg9ZW5jb2RlZC5jaGFyQXQoMCk7Ly9cbnR5cGVQcmVmaXg9PT0ncCd8fFxudHlwZVByZWZpeD09PSduJ3x8XG5GYWlsIGBFbmNvZGVkIGJpZ2ludCBleHBlY3RlZDogJHtlbmNvZGVkfWA7XG5cbmNvbnN0e1xuaW5kZXg6bERpZ2l0cyxcbjE6c25EaWdpdHMsXG4yOnRhaWwsXG4zOmRpZ2l0c309XG5lbmNvZGVkLm1hdGNoKHJCaWdJbnRQYXlsb2FkKXx8RmFpbCBgRGlnaXQgY291bnQgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xuXG5zbkRpZ2l0cy5sZW5ndGg9PT1sRGlnaXRzfHxcbkZhaWwgYFVuYXJ5LXByZWZpeGVkIGRlY2ltYWwgZGlnaXQgY291bnQgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xubGV0IG5EaWdpdHM9cGFyc2VJbnQoc25EaWdpdHMsMTApO1xuaWYodHlwZVByZWZpeD09PSduJyl7XG4vL1xuLy9cbm5EaWdpdHM9MTAqKi8qICAgICAgICAgICAgICAgICAqL2xEaWdpdHMtbkRpZ2l0cztcbiB9XG5cbnRhaWwuY2hhckF0KDApPT09JzonfHxGYWlsIGBTZXBhcmF0b3IgZXhwZWN0ZWQ6ICR7ZW5jb2RlZH1gO1xuZGlnaXRzLmxlbmd0aD09PW5EaWdpdHN8fFxuRmFpbCBgRml4ZWQtbGVuZ3RoIGRpZ2l0IHNlcXVlbmNlIGV4cGVjdGVkOiAke2VuY29kZWR9YDtcbmxldCBuPUJpZ0ludChkaWdpdHMpO1xuaWYodHlwZVByZWZpeD09PSduJyl7XG4vL1xuLy9cbm49LSgxMG4qKkJpZ0ludChuRGlnaXRzKS1uKTtcbiB9XG5cbnJldHVybiBuO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3Qgc3RyaW5nRXNjYXBlcz1BcnJheSgweDIyKS5cbmZpbGwodW5kZWZpbmVkKS5cbm1hcCgoXyxjcCk9PntcbnN3aXRjaChTdHJpbmcuZnJvbUNoYXJDb2RlKGNwKSl7XG5jYXNlJyAnOlxucmV0dXJuJyFfJztcbmNhc2UnISc6XG5yZXR1cm4nIXwnO1xuZGVmYXVsdDpcbnJldHVybiBgISR7U3RyaW5nLmZyb21DaGFyQ29kZShjcCsweDIxKX1gO31cblxuIH0pO1xuc3RyaW5nRXNjYXBlc1snXicuY2hhckNvZGVBdCgwKV09J19AJztcbnN0cmluZ0VzY2FwZXNbJ18nLmNoYXJDb2RlQXQoMCldPSdfXyc7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGVuY29kZUNvbXBhY3RTdHJpbmdTdWZmaXg9KHN0cik9Plxuc3RyLnJlcGxhY2UoL1tcXDAtIV5fXS9nLChjaCk9PnN0cmluZ0VzY2FwZXNbY2guY2hhckNvZGVBdCgwKV0pO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBkZWNvZGVDb21wYWN0U3RyaW5nU3VmZml4PShlbmNvZGVkKT0+e1xucmV0dXJuIGVuY29kZWQucmVwbGFjZSgvKFtcXDAtIV9dKSgufFxcbik/L2csKGVzYyxwcmVmaXgsc3VmZml4KT0+e1xuc3dpdGNoKGVzYyl7XG5jYXNlJyFfJzpcbnJldHVybicgJztcbmNhc2UnIXwnOlxucmV0dXJuJyEnO1xuY2FzZSdfQCc6XG5yZXR1cm4nXic7XG5jYXNlJ19fJzpcbnJldHVybidfJztcbmRlZmF1bHQ6e1xuY29uc3QgY2g9LyogICAgICAgICAgICAgICAgICovc3VmZml4O1xuLy9cbi8vXG5wcmVmaXg9PT0nIScmJnN1ZmZpeCE9PXVuZGVmaW5lZCYmY2g+PSchJyYmY2g8PSdAJ3x8XG5GYWlsIGBpbnZhbGlkIHN0cmluZyBlc2NhcGU6ICR7cShlc2MpfWA7XG5yZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShjaC5jaGFyQ29kZUF0KDApLTB4MjEpO1xuIH19XG5cbiB9KTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBlbmNvZGVMZWdhY3lTdHJpbmdTdWZmaXg9KHN0cik9PnN0cjtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZGVjb2RlTGVnYWN5U3RyaW5nU3VmZml4PShlbmNvZGVkKT0+ZW5jb2RlZDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVDb21wYWN0QXJyYXk9KGFycmF5LGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgY2hhcnM9WydeJ107XG5mb3IoY29uc3QgZWxlbWVudCBvZiBhcnJheSl7XG5jb25zdCBlbmM9ZW5jb2RlUGFzc2FibGUoZWxlbWVudCk7XG5jaGFycy5wdXNoKGVuYywnICcpO1xuIH1cbnJldHVybiBjaGFycy5qb2luKCcnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGRlY29kZUNvbXBhY3RBcnJheT0oZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwPTApPT57XG5jb25zdCBlbGVtZW50cz1bXTtcbmxldCBkZXB0aD0wO1xuLy9cbi8vXG5sZXQgbmV4dEluZGV4PXNraXArMTtcbmxldCBjdXJyZW50RWxlbWVudFN0YXJ0PXNraXArMTtcbmZvcihjb25zdHswOmNoLGluZGV4Oml9b2YgZW5jb2RlZC5tYXRjaEFsbCgvW1xcXiBdL2cpKXtcbmNvbnN0IGluZGV4PS8qICAgICAgICAgICAgICAgICAqL2k7XG5pZihpbmRleDw9c2tpcCl7XG5pZihpbmRleD09PXNraXApe1xuY2g9PT0nXid8fEZhaWwgYEVuY29kZWQgYXJyYXkgZXhwZWN0ZWQ6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9XG4gfWVsc2UgaWYoY2g9PT0nXicpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5kZXB0aCs9MTtcbiB9ZWxzZXtcbi8vXG5pZihpbmRleD09PW5leHRJbmRleCl7XG4vL1xuZGVwdGgtPTE7XG5kZXB0aD49MHx8XG4vL1xuRmFpbCBgdW5leHBlY3RlZCBhcnJheSBlbGVtZW50IHRlcm1pbmF0b3I6ICR7ZW5jb2RlZC5zbGljZShza2lwLGluZGV4KzIpfWA7XG4gfVxuaWYoZGVwdGg9PT0wKXtcbi8vXG5lbGVtZW50cy5wdXNoKFxuZGVjb2RlUGFzc2FibGUoZW5jb2RlZC5zbGljZShjdXJyZW50RWxlbWVudFN0YXJ0LGluZGV4KSkpO1xuXG5jdXJyZW50RWxlbWVudFN0YXJ0PWluZGV4KzE7XG4gfVxuIH1cbi8vXG5uZXh0SW5kZXg9aW5kZXgrMTtcbiB9XG5kZXB0aD09PTB8fEZhaWwgYHVudGVybWluYXRlZCBhcnJheTogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xubmV4dEluZGV4PT09ZW5jb2RlZC5sZW5ndGh8fFxuRmFpbCBgdW50ZXJtaW5hdGVkIGFycmF5IGVsZW1lbnQ6ICR7Z2V0U3VmZml4KFxuZW5jb2RlZCxcbmN1cnJlbnRFbGVtZW50U3RhcnQpXG4gfWA7XG5yZXR1cm4gaGFyZGVuKGVsZW1lbnRzKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBlbmNvZGVMZWdhY3lBcnJheT0oYXJyYXksZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBjaGFycz1bJ1snXTtcbmZvcihjb25zdCBlbGVtZW50IG9mIGFycmF5KXtcbmNvbnN0IGVuYz1lbmNvZGVQYXNzYWJsZShlbGVtZW50KTtcbmZvcihjb25zdCBjIG9mIGVuYyl7XG5pZihjPT09J1xcdTAwMDAnfHxjPT09J1xcdTAwMDEnKXtcbmNoYXJzLnB1c2goJ1xcdTAwMDEnKTtcbiB9XG5jaGFycy5wdXNoKGMpO1xuIH1cbmNoYXJzLnB1c2goJ1xcdTAwMDAnKTtcbiB9XG5yZXR1cm4gY2hhcnMuam9pbignJyk7XG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWNvZGVMZWdhY3lBcnJheT0oZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwPTApPT57XG5jb25zdCBlbGVtZW50cz1bXTtcbmNvbnN0IGVsZW1DaGFycz1bXTtcbi8vXG4vL1xubGV0IHN0aWxsVG9Ta2lwPXNraXArMTtcbmxldCBpbkVzY2FwZT1mYWxzZTtcbmZvcihjb25zdCBjIG9mIGVuY29kZWQpe1xuaWYoc3RpbGxUb1NraXA+MCl7XG5zdGlsbFRvU2tpcC09MTtcbmlmKHN0aWxsVG9Ta2lwPT09MCl7XG5jPT09J1snfHxGYWlsIGBFbmNvZGVkIGFycmF5IGV4cGVjdGVkOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG4gfVxuIH1lbHNlIGlmKGluRXNjYXBlKXtcbmM9PT0nXFx1MDAwMCd8fFxuYz09PSdcXHUwMDAxJ3x8XG5GYWlsIGBVbmV4cGVjdGVkIGNoYXJhY3RlciBhZnRlciB1MDAwMSBlc2NhcGU6ICR7Y31gO1xuZWxlbUNoYXJzLnB1c2goYyk7XG4gfWVsc2UgaWYoYz09PSdcXHUwMDAwJyl7XG5jb25zdCBlbmNvZGVkRWxlbWVudD1lbGVtQ2hhcnMuam9pbignJyk7XG5lbGVtQ2hhcnMubGVuZ3RoPTA7XG5jb25zdCBlbGVtZW50PWRlY29kZVBhc3NhYmxlKGVuY29kZWRFbGVtZW50KTtcbmVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gfWVsc2UgaWYoYz09PSdcXHUwMDAxJyl7XG5pbkVzY2FwZT10cnVlO1xuLy9cbmNvbnRpbnVlO1xuIH1lbHNle1xuZWxlbUNoYXJzLnB1c2goYyk7XG4gfVxuaW5Fc2NhcGU9ZmFsc2U7XG4gfVxuIWluRXNjYXBlfHxGYWlsIGB1bmV4cGVjdGVkIGVuZCBvZiBlbmNvZGluZyAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5lbGVtQ2hhcnMubGVuZ3RoPT09MHx8XG5GYWlsIGBlbmNvZGluZyB0ZXJtaW5hdGVkIGVhcmx5OiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5yZXR1cm4gaGFyZGVuKGVsZW1lbnRzKTtcbiB9O1xuXG5jb25zdCBlbmNvZGVSZWNvcmQ9KHJlY29yZCxlbmNvZGVBcnJheSxlbmNvZGVQYXNzYWJsZSk9PntcbmNvbnN0IG5hbWVzPXJlY29yZE5hbWVzKHJlY29yZCk7XG5jb25zdCB2YWx1ZXM9cmVjb3JkVmFsdWVzKHJlY29yZCxuYW1lcyk7XG5yZXR1cm4gYCgke2VuY29kZUFycmF5KGhhcmRlbihbbmFtZXMsdmFsdWVzXSksZW5jb2RlUGFzc2FibGUpfWA7XG4gfTtcblxuY29uc3QgZGVjb2RlUmVjb3JkPShlbmNvZGVkLGRlY29kZUFycmF5LGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmFzc2VydChlbmNvZGVkLmNoYXJBdChza2lwKT09PScoJyk7XG4vL1xuLy9cbmNvbnN0IHVuemlwcGVkRW50cmllcz1kZWNvZGVBcnJheShlbmNvZGVkLGRlY29kZVBhc3NhYmxlLHNraXArMSk7XG51bnppcHBlZEVudHJpZXMubGVuZ3RoPT09Mnx8XG5GYWlsIGBleHBlY3RlZCBrZXlzLHZhbHVlcyBwYWlyOiAke2dldFN1ZmZpeChlbmNvZGVkLHNraXApfWA7XG5jb25zdFtrZXlzLHZhbHNdPXVuemlwcGVkRW50cmllcztcblxucGFzc1N0eWxlT2Yoa2V5cyk9PT0nY29weUFycmF5JyYmXG5wYXNzU3R5bGVPZih2YWxzKT09PSdjb3B5QXJyYXknJiZcbmtleXMubGVuZ3RoPT09dmFscy5sZW5ndGgmJlxua2V5cy5ldmVyeSgoa2V5KT0+dHlwZW9mIGtleT09PSdzdHJpbmcnKXx8XG5GYWlsIGBub3QgYSB2YWxpZCByZWNvcmQgZW5jb2Rpbmc6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0IG1hcEVudHJpZXM9a2V5cy5tYXAoKGtleSxpKT0+W2tleSx2YWxzW2ldXSk7XG5jb25zdCByZWNvcmQ9aGFyZGVuKGZyb21FbnRyaWVzKG1hcEVudHJpZXMpKTtcbmFzc2VydFJlY29yZChyZWNvcmQsJ2RlY29kZWQgcmVjb3JkJyk7XG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbmNvbnN0IGVuY29kZVRhZ2dlZD0odGFnZ2VkLGVuY29kZUFycmF5LGVuY29kZVBhc3NhYmxlKT0+XG4gYDoke2VuY29kZUFycmF5KGhhcmRlbihbZ2V0VGFnKHRhZ2dlZCksdGFnZ2VkLnBheWxvYWRdKSxlbmNvZGVQYXNzYWJsZSl9YDtcblxuY29uc3QgZGVjb2RlVGFnZ2VkPShlbmNvZGVkLGRlY29kZUFycmF5LGRlY29kZVBhc3NhYmxlLHNraXA9MCk9PntcbmFzc2VydChlbmNvZGVkLmNoYXJBdChza2lwKT09PSc6Jyk7XG4vL1xuLy9cbmNvbnN0IHRhZ2dlZFBheWxvYWQ9ZGVjb2RlQXJyYXkoZW5jb2RlZCxkZWNvZGVQYXNzYWJsZSxza2lwKzEpO1xudGFnZ2VkUGF5bG9hZC5sZW5ndGg9PT0yfHxcbkZhaWwgYGV4cGVjdGVkIHRhZyxwYXlsb2FkIHBhaXI6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbmNvbnN0W3RhZyxwYXlsb2FkXT10YWdnZWRQYXlsb2FkO1xucGFzc1N0eWxlT2YodGFnKT09PSdzdHJpbmcnfHxcbkZhaWwgYG5vdCBhIHZhbGlkIHRhZ2dlZCBlbmNvZGluZzogJHtnZXRTdWZmaXgoZW5jb2RlZCxza2lwKX1gO1xucmV0dXJuIG1ha2VUYWdnZWQodGFnLHBheWxvYWQpO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVSZW1vdGFibGU9KHVuc2FmZUVuY29kZVJlbW90YWJsZSx2ZXJpZnlFbmNvZGluZyk9PntcbmNvbnN0IGVuY29kZVJlbW90YWJsZT0ocixpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZVJlbW90YWJsZShyLGlubmVyRW5jb2RlKTtcbnR5cGVvZiBlbmNvZGluZz09PSdzdHJpbmcnJiZlbmNvZGluZy5jaGFyQXQoMCk9PT0ncid8fFxuRmFpbCBgUmVtb3RhYmxlIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcInJcIjogJHtlbmNvZGluZ31gO1xudmVyaWZ5RW5jb2RpbmcoZW5jb2RpbmcsJ1JlbW90YWJsZScpO1xucmV0dXJuIGVuY29kaW5nO1xuIH07XG5yZXR1cm4gZW5jb2RlUmVtb3RhYmxlO1xuIH07XG5cbmNvbnN0IG1ha2VFbmNvZGVQcm9taXNlPSh1bnNhZmVFbmNvZGVQcm9taXNlLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlUHJvbWlzZT0ocCxpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZVByb21pc2UocCxpbm5lckVuY29kZSk7XG50eXBlb2YgZW5jb2Rpbmc9PT0nc3RyaW5nJyYmZW5jb2RpbmcuY2hhckF0KDApPT09Jz8nfHxcbkZhaWwgYFByb21pc2UgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiP1wiOiAke2VuY29kaW5nfWA7XG52ZXJpZnlFbmNvZGluZyhlbmNvZGluZywnUHJvbWlzZScpO1xucmV0dXJuIGVuY29kaW5nO1xuIH07XG5yZXR1cm4gZW5jb2RlUHJvbWlzZTtcbiB9O1xuXG5jb25zdCBtYWtlRW5jb2RlRXJyb3I9KHVuc2FmZUVuY29kZUVycm9yLHZlcmlmeUVuY29kaW5nKT0+e1xuY29uc3QgZW5jb2RlRXJyb3I9KGVycixpbm5lckVuY29kZSk9PntcbmNvbnN0IGVuY29kaW5nPXVuc2FmZUVuY29kZUVycm9yKGVycixpbm5lckVuY29kZSk7XG50eXBlb2YgZW5jb2Rpbmc9PT0nc3RyaW5nJyYmZW5jb2RpbmcuY2hhckF0KDApPT09JyEnfHxcbkZhaWwgYEVycm9yIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcIiFcIjogJHtlbmNvZGluZ31gO1xudmVyaWZ5RW5jb2RpbmcoZW5jb2RpbmcsJ0Vycm9yJyk7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfTtcbnJldHVybiBlbmNvZGVFcnJvcjtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbm5lckVuY29kZT0oZW5jb2RlU3RyaW5nU3VmZml4LGVuY29kZUFycmF5LG9wdGlvbnMpPT57XG5jb25zdHtcbmVuY29kZVJlbW90YWJsZTp1bnNhZmVFbmNvZGVSZW1vdGFibGUsXG5lbmNvZGVQcm9taXNlOnVuc2FmZUVuY29kZVByb21pc2UsXG5lbmNvZGVFcnJvcjp1bnNhZmVFbmNvZGVFcnJvcixcbnZlcmlmeUVuY29kaW5nPSgpPT57IH19PVxub3B0aW9ucztcbmNvbnN0IGVuY29kZVJlbW90YWJsZT1tYWtlRW5jb2RlUmVtb3RhYmxlKFxudW5zYWZlRW5jb2RlUmVtb3RhYmxlLFxudmVyaWZ5RW5jb2RpbmcpO1xuXG5jb25zdCBlbmNvZGVQcm9taXNlPW1ha2VFbmNvZGVQcm9taXNlKHVuc2FmZUVuY29kZVByb21pc2UsdmVyaWZ5RW5jb2RpbmcpO1xuY29uc3QgZW5jb2RlRXJyb3I9bWFrZUVuY29kZUVycm9yKHVuc2FmZUVuY29kZUVycm9yLHZlcmlmeUVuY29kaW5nKTtcblxuY29uc3QgaW5uZXJFbmNvZGU9KHBhc3NhYmxlKT0+e1xuaWYoaXNFcnJvckxpa2UocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gZW5jb2RlRXJyb3IocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihwYXNzYWJsZSk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnbnVsbCc6e1xucmV0dXJuJ3YnO1xuIH1cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4neic7XG4gfVxuY2FzZSdudW1iZXInOntcbnJldHVybiBlbmNvZGVCaW5hcnk2NChwYXNzYWJsZSk7XG4gfVxuY2FzZSdzdHJpbmcnOntcbnJldHVybiBgcyR7ZW5jb2RlU3RyaW5nU3VmZml4KHBhc3NhYmxlKX1gO1xuIH1cbmNhc2UnYm9vbGVhbic6e1xucmV0dXJuIGBiJHtwYXNzYWJsZX1gO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5yZXR1cm4gZW5jb2RlQmlnSW50KHBhc3NhYmxlKTtcbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xucmV0dXJuIGVuY29kZVJlbW90YWJsZShwYXNzYWJsZSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSdlcnJvcic6e1xucmV0dXJuIGVuY29kZUVycm9yKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBlbmNvZGVQcm9taXNlKHBhc3NhYmxlLGlubmVyRW5jb2RlKTtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuLy9cbmNvbnN0IG5hbWU9bmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG5yZXR1cm4gYHkke2VuY29kZVN0cmluZ1N1ZmZpeChuYW1lKX1gO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5yZXR1cm4gZW5jb2RlQXJyYXkocGFzc2FibGUsaW5uZXJFbmNvZGUpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xucmV0dXJuIGVuY29kZVJlY29yZChwYXNzYWJsZSxlbmNvZGVBcnJheSxpbm5lckVuY29kZSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybiBlbmNvZGVUYWdnZWQocGFzc2FibGUsZW5jb2RlQXJyYXksaW5uZXJFbmNvZGUpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgYSAke3EocGFzc1N0eWxlKX0gY2Fubm90IGJlIHVzZWQgYXMgYSBjb2xsZWN0aW9uIHBhc3NhYmxlYDtcbiB9fVxuXG4gfTtcbnJldHVybiBpbm5lckVuY29kZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgbGliZXJhbERlY29kZXJzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICove1xuZGVjb2RlUmVtb3RhYmxlOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkLFxuZGVjb2RlUHJvbWlzZTooX2VuY29kaW5nLF9pbm5lckRlY29kZSk9PnVuZGVmaW5lZCxcbmRlY29kZUVycm9yOihfZW5jb2RpbmcsX2lubmVyRGVjb2RlKT0+dW5kZWZpbmVkfTtcblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZUlubmVyRGVjb2RlPShkZWNvZGVTdHJpbmdTdWZmaXgsZGVjb2RlQXJyYXksb3B0aW9ucyk9PntcbmNvbnN0e2RlY29kZVJlbW90YWJsZSxkZWNvZGVQcm9taXNlLGRlY29kZUVycm9yfT1vcHRpb25zO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGlubmVyRGVjb2RlPShlbmNvZGVkLHNraXA9MCk9PntcbnN3aXRjaChlbmNvZGVkLmNoYXJBdChza2lwKSl7XG5jYXNlJ3YnOntcbnJldHVybiBudWxsO1xuIH1cbmNhc2Uneic6e1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jYXNlJ2YnOntcbnJldHVybiBkZWNvZGVCaW5hcnk2NChlbmNvZGVkLHNraXApO1xuIH1cbmNhc2Uncyc6e1xucmV0dXJuIGRlY29kZVN0cmluZ1N1ZmZpeChnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpKTtcbiB9XG5jYXNlJ2InOntcbmNvbnN0IHN1YnN0cmluZz1nZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpO1xuaWYoc3Vic3RyaW5nPT09J3RydWUnKXtcbnJldHVybiB0cnVlO1xuIH1lbHNlIGlmKHN1YnN0cmluZz09PSdmYWxzZScpe1xucmV0dXJuIGZhbHNlO1xuIH1cbnRocm93IEZhaWwgYGV4cGVjdGVkIGVuY29kZWQgYm9vbGVhbiB0byBiZSBcImJ0cnVlXCIgb3IgXCJiZmFsc2VcIjogJHtzdWJzdHJpbmd9YDtcbiB9XG5jYXNlJ24nOlxuY2FzZSdwJzp7XG5yZXR1cm4gZGVjb2RlQmlnSW50KGdldFN1ZmZpeChlbmNvZGVkLHNraXApKTtcbiB9XG5jYXNlJ3InOntcbnJldHVybiBkZWNvZGVSZW1vdGFibGUoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UnPyc6e1xucmV0dXJuIGRlY29kZVByb21pc2UoZ2V0U3VmZml4KGVuY29kZWQsc2tpcCksaW5uZXJEZWNvZGUpO1xuIH1cbmNhc2UnISc6e1xucmV0dXJuIGRlY29kZUVycm9yKGdldFN1ZmZpeChlbmNvZGVkLHNraXApLGlubmVyRGVjb2RlKTtcbiB9XG5jYXNlJ3knOntcbi8vXG5jb25zdCBuYW1lPWRlY29kZVN0cmluZ1N1ZmZpeChnZXRTdWZmaXgoZW5jb2RlZCxza2lwKzEpKTtcbnJldHVybiBwYXNzYWJsZVN5bWJvbEZvck5hbWUobmFtZSk7XG4gfVxuY2FzZSdbJzpcbmNhc2UnXic6e1xuLy9cbnJldHVybiBkZWNvZGVBcnJheShlbmNvZGVkLGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmNhc2UnKCc6e1xucmV0dXJuIGRlY29kZVJlY29yZChlbmNvZGVkLGRlY29kZUFycmF5LGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmNhc2UnOic6e1xucmV0dXJuIGRlY29kZVRhZ2dlZChlbmNvZGVkLGRlY29kZUFycmF5LGlubmVyRGVjb2RlLHNraXApO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgRmFpbCBgaW52YWxpZCBkYXRhYmFzZSBrZXk6ICR7Z2V0U3VmZml4KGVuY29kZWQsc2tpcCl9YDtcbiB9fVxuXG4gfTtcbnJldHVybiBpbm5lckRlY29kZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVBhc3NhYmxlS2l0PShvcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGU9KHIsXyk9PkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke3J9YCxcbmVuY29kZVByb21pc2U9KHAsXyk9PkZhaWwgYHByb21pc2UgdW5leHBlY3RlZDogJHtwfWAsXG5lbmNvZGVFcnJvcj0oZXJyLF8pPT5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke2Vycn1gLFxuZm9ybWF0PSdsZWdhY3lPcmRlcmVkJyxcblxuZGVjb2RlUmVtb3RhYmxlPShlbmNvZGluZyxfKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YCxcbmRlY29kZVByb21pc2U9KGVuY29kaW5nLF8pPT5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YCxcbmRlY29kZUVycm9yPShlbmNvZGluZyxfKT0+RmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlbmNvZGluZ31gfT1cbm9wdGlvbnM7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgZW5jb2RlUGFzc2FibGU7XG5jb25zdCBlbmNvZGVPcHRpb25zPXtlbmNvZGVSZW1vdGFibGUsZW5jb2RlUHJvbWlzZSxlbmNvZGVFcnJvcixmb3JtYXR9O1xuaWYoZm9ybWF0PT09J2NvbXBhY3RPcmRlcmVkJyl7XG5jb25zdCBsaWJlcmFsRGVjb2RlPW1ha2VJbm5lckRlY29kZShcbmRlY29kZUNvbXBhY3RTdHJpbmdTdWZmaXgsXG5kZWNvZGVDb21wYWN0QXJyYXksXG5saWJlcmFsRGVjb2RlcnMpO1xuXG4vKlxuXG5cblxuICAgICAqL1xuY29uc3QgdmVyaWZ5RW5jb2Rpbmc9KGVuY29kaW5nLGxhYmVsKT0+e1xuIWVuY29kaW5nLm1hdGNoKHJDMCl8fFxuRmFpbCBgJHtiKFxubGFiZWwpXG4gfSBlbmNvZGluZyBtdXN0IG5vdCBjb250YWluIGEgQzAgY29udHJvbCBjaGFyYWN0ZXI6ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IGRlY29kZWQ9ZGVjb2RlQ29tcGFjdEFycmF5KCBgXnYgJHtlbmNvZGluZ30gdiBgLGxpYmVyYWxEZWNvZGUpO1xuaXNBcnJheShkZWNvZGVkKSYmXG5kZWNvZGVkLmxlbmd0aD09PTMmJlxuZGVjb2RlZFswXT09PW51bGwmJlxuZGVjb2RlZFsyXT09PW51bGx8fFxuRmFpbCBgJHtiKGxhYmVsKX0gZW5jb2RpbmcgbXVzdCBiZSBlbWJlZGRhYmxlOiAke2VuY29kaW5nfWA7XG4gfTtcbmNvbnN0IGVuY29kZUNvbXBhY3Q9bWFrZUlubmVyRW5jb2RlKFxuZW5jb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmVuY29kZUNvbXBhY3RBcnJheSxcbnsuLi5lbmNvZGVPcHRpb25zLHZlcmlmeUVuY29kaW5nfSk7XG5cbmVuY29kZVBhc3NhYmxlPShwYXNzYWJsZSk9PiBgfiR7ZW5jb2RlQ29tcGFjdChwYXNzYWJsZSl9YDtcbiB9ZWxzZSBpZihmb3JtYXQ9PT0nbGVnYWN5T3JkZXJlZCcpe1xuZW5jb2RlUGFzc2FibGU9bWFrZUlubmVyRW5jb2RlKFxuZW5jb2RlTGVnYWN5U3RyaW5nU3VmZml4LFxuZW5jb2RlTGVnYWN5QXJyYXksXG5lbmNvZGVPcHRpb25zKTtcblxuIH1lbHNle1xudGhyb3cgRmFpbCBgVW5yZWNvZ25pemVkIGZvcm1hdDogJHtxKGZvcm1hdCl9YDtcbiB9XG5cbmNvbnN0IGRlY29kZU9wdGlvbnM9e2RlY29kZVJlbW90YWJsZSxkZWNvZGVQcm9taXNlLGRlY29kZUVycm9yfTtcbmNvbnN0IGRlY29kZUNvbXBhY3Q9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlQ29tcGFjdFN0cmluZ1N1ZmZpeCxcbmRlY29kZUNvbXBhY3RBcnJheSxcbmRlY29kZU9wdGlvbnMpO1xuXG5jb25zdCBkZWNvZGVMZWdhY3k9bWFrZUlubmVyRGVjb2RlKFxuZGVjb2RlTGVnYWN5U3RyaW5nU3VmZml4LFxuZGVjb2RlTGVnYWN5QXJyYXksXG5kZWNvZGVPcHRpb25zKTtcblxuY29uc3QgZGVjb2RlUGFzc2FibGU9KGVuY29kZWQpPT57XG4vL1xuLy9cbi8vXG5pZihlbmNvZGVkLmNoYXJBdCgwKT09PSd+Jyl7XG5yZXR1cm4gZGVjb2RlQ29tcGFjdChlbmNvZGVkLDEpO1xuIH1cbnJldHVybiBkZWNvZGVMZWdhY3koZW5jb2RlZCk7XG4gfTtcblxucmV0dXJuIGhhcmRlbih7ZW5jb2RlUGFzc2FibGUsZGVjb2RlUGFzc2FibGV9KTtcbiB9OyRozY9fb25jZS5tYWtlUGFzc2FibGVLaXQobWFrZVBhc3NhYmxlS2l0KTtcbmhhcmRlbihtYWtlUGFzc2FibGVLaXQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VFbmNvZGVQYXNzYWJsZT0oZW5jb2RlT3B0aW9ucyk9PntcbmNvbnN0e2VuY29kZVBhc3NhYmxlfT1tYWtlUGFzc2FibGVLaXQoZW5jb2RlT3B0aW9ucyk7XG5yZXR1cm4gZW5jb2RlUGFzc2FibGU7XG4gfTskaM2PX29uY2UubWFrZUVuY29kZVBhc3NhYmxlKG1ha2VFbmNvZGVQYXNzYWJsZSk7XG5oYXJkZW4obWFrZUVuY29kZVBhc3NhYmxlKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRGVjb2RlUGFzc2FibGU9KGRlY29kZU9wdGlvbnMpPT57XG5jb25zdHtkZWNvZGVQYXNzYWJsZX09bWFrZVBhc3NhYmxlS2l0KGRlY29kZU9wdGlvbnMpO1xucmV0dXJuIGRlY29kZVBhc3NhYmxlO1xuIH07JGjNj19vbmNlLm1ha2VEZWNvZGVQYXNzYWJsZShtYWtlRGVjb2RlUGFzc2FibGUpO1xuaGFyZGVuKG1ha2VEZWNvZGVQYXNzYWJsZSk7XG5cbmNvbnN0ICAgICAgICBpc0VuY29kZWRSZW1vdGFibGU9KGVuY29kZWQpPT5lbmNvZGVkLmNoYXJBdCgwKT09PSdyJzskaM2PX29uY2UuaXNFbmNvZGVkUmVtb3RhYmxlKGlzRW5jb2RlZFJlbW90YWJsZSk7XG5oYXJkZW4oaXNFbmNvZGVkUmVtb3RhYmxlKTtcblxuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhc3NTdHlsZVByZWZpeGVzPXtcbmVycm9yOichJyxcbmNvcHlSZWNvcmQ6JygnLFxudGFnZ2VkOic6JyxcbnByb21pc2U6Jz8nLFxuY29weUFycmF5OidbXicsXG5ib29sZWFuOidiJyxcbm51bWJlcjonZicsXG5iaWdpbnQ6J25wJyxcbnJlbW90YWJsZToncicsXG5zdHJpbmc6J3MnLFxubnVsbDondicsXG5zeW1ib2w6J3knLFxuLy9cbi8vXG4vL1xudW5kZWZpbmVkOid6J307JGjNj19vbmNlLnBhc3NTdHlsZVByZWZpeGVzKHBhc3NTdHlsZVByZWZpeGVzKTtcblxuT2JqZWN0LnNldFByb3RvdHlwZU9mKHBhc3NTdHlsZVByZWZpeGVzLG51bGwpO1xuaGFyZGVuKHBhc3NTdHlsZVByZWZpeGVzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7InJlY29yZE5hbWVzIjpbInJlY29yZE5hbWVzIl0sInJlY29yZFZhbHVlcyI6WyJyZWNvcmRWYWx1ZXMiXSwiemVyb1BhZCI6WyJ6ZXJvUGFkIl0sIm1ha2VQYXNzYWJsZUtpdCI6WyJtYWtlUGFzc2FibGVLaXQiXSwibWFrZUVuY29kZVBhc3NhYmxlIjpbIm1ha2VFbmNvZGVQYXNzYWJsZSJdLCJtYWtlRGVjb2RlUGFzc2FibGUiOlsibWFrZURlY29kZVBhc3NhYmxlIl0sImlzRW5jb2RlZFJlbW90YWJsZSI6WyJpc0VuY29kZWRSZW1vdGFibGUiXSwicGFzc1N0eWxlUHJlZml4ZXMiOlsicGFzc1N0eWxlUHJlZml4ZXMiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA2bp8M4EiAACBIgAAKwAAAEBlbmRvL21hcnNoYWwtdjEuNi4zL3NyYy9lbmNvZGVUb0NhcERhdGEuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIlFDTEFTUyIsIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSIsIm1ha2VFbmNvZGVUb0NhcERhdGEiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixpc0Vycm9yTGlrZSxtYWtlVGFnZ2VkLGlzT2JqZWN0LGdldFRhZyxoYXNPd25Qcm9wZXJ0eU9mLGFzc2VydFBhc3NhYmxlU3ltYm9sLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxwYXNzYWJsZVN5bWJvbEZvck5hbWUsWCxGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJpc0Vycm9yTGlrZVwiLCBbJGjNj19hID0+IChpc0Vycm9yTGlrZSA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJwYXNzYWJsZVN5bWJvbEZvck5hbWVcIiwgWyRozY9fYSA9PiAocGFzc2FibGVTeW1ib2xGb3JOYW1lID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyxcbmRlZmluZVByb3BlcnRpZXMsXG5pcyxcbmVudHJpZXMsXG5mcm9tRW50cmllcyxcbmZyZWV6ZX09XG5PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBRQ0xBU1M9J0BxY2xhc3MnOyRozY9fb25jZS5RQ0xBU1MoUUNMQVNTKTtcblxuXG4vKlxuXG5cbiAqL1xuY29uc3QgaGFzUUNsYXNzPShlbmNvZGVkKT0+aGFzT3duUHJvcGVydHlPZihlbmNvZGVkLFFDTEFTUyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IHFjbGFzc01hdGNoZXM9KGVuY29kZWQscWNsYXNzKT0+XG5pc09iamVjdChlbmNvZGVkKSYmXG4haXNBcnJheShlbmNvZGVkKSYmXG5oYXNRQ2xhc3MoZW5jb2RlZCkmJlxuZW5jb2RlZFtRQ0xBU1NdPT09cWNsYXNzO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YT0ocmVtKT0+RmFpbCBgcmVtb3RhYmxlIHVuZXhwZWN0ZWQ6ICR7cmVtfWA7XG5cbmNvbnN0IGRvbnRFbmNvZGVQcm9taXNlVG9DYXBEYXRhPShwcm9tKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Byb219YDtcblxuY29uc3QgZG9udEVuY29kZUVycm9yVG9DYXBEYXRhPShlcnIpPT5GYWlsIGBlcnJvciBvYmplY3QgdW5leHBlY3RlZDogJHtlcnJ9YDtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlRW5jb2RlVG9DYXBEYXRhPShlbmNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGVUb0NhcERhdGE9ZG9udEVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YSxcbmVuY29kZVByb21pc2VUb0NhcERhdGE9ZG9udEVuY29kZVByb21pc2VUb0NhcERhdGEsXG5lbmNvZGVFcnJvclRvQ2FwRGF0YT1kb250RW5jb2RlRXJyb3JUb0NhcERhdGF9PVxuZW5jb2RlT3B0aW9ucztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGVuY29kZVRvQ2FwRGF0YVJlY3VyPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhc3NhYmxlKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdudWxsJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ3N0cmluZyc6e1xuLy9cbnJldHVybiBwYXNzYWJsZTtcbiB9XG5jYXNlJ3VuZGVmaW5lZCc6e1xucmV0dXJue1tRQ0xBU1NdOid1bmRlZmluZWQnfTtcbiB9XG5jYXNlJ251bWJlcic6e1xuLy9cbmlmKE51bWJlci5pc05hTihwYXNzYWJsZSkpe1xucmV0dXJue1tRQ0xBU1NdOidOYU4nfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PUluZmluaXR5KXtcbnJldHVybntbUUNMQVNTXTonSW5maW5pdHknfTtcbiB9ZWxzZSBpZihwYXNzYWJsZT09PS1JbmZpbml0eSl7XG5yZXR1cm57W1FDTEFTU106Jy1JbmZpbml0eSd9O1xuIH1cbi8vXG5yZXR1cm4gaXMocGFzc2FibGUsLTApPzA6cGFzc2FibGU7XG4gfVxuY2FzZSdiaWdpbnQnOntcbnJldHVybntcbltRQ0xBU1NdOidiaWdpbnQnLFxuZGlnaXRzOlN0cmluZyhwYXNzYWJsZSl9O1xuXG4gfVxuY2FzZSdzeW1ib2wnOntcbmFzc2VydFBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbmNvbnN0IG5hbWU9LyogICAgICAgICAgICAgICAgICovbmFtZUZvclBhc3NhYmxlU3ltYm9sKHBhc3NhYmxlKTtcbnJldHVybntcbltRQ0xBU1NdOidzeW1ib2wnLFxubmFtZX07XG5cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbmlmKGhhc093blByb3BlcnR5T2YocGFzc2FibGUsUUNMQVNTKSl7XG4vL1xuY29uc3R7W1FDTEFTU106cWNsYXNzVmFsdWUsLi4ucmVzdH09cGFzc2FibGU7XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PXtcbltRQ0xBU1NdOidoaWxiZXJ0Jyxcbm9yaWdpbmFsOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHFjbGFzc1ZhbHVlKX07XG5cbmlmKG93bktleXMocmVzdCkubGVuZ3RoPj0xKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJlc3VsdC5yZXN0PWVuY29kZVRvQ2FwRGF0YVJlY3VyKGZyZWV6ZShyZXN0KSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9XG4vL1xuLy9cbi8vXG5jb25zdCBuYW1lcz1vd25LZXlzKHBhc3NhYmxlKS5zb3J0KCk7XG5yZXR1cm4gZnJvbUVudHJpZXMoXG5uYW1lcy5tYXAoKG5hbWUpPT5bbmFtZSxlbmNvZGVUb0NhcERhdGFSZWN1cihwYXNzYWJsZVtuYW1lXSldKSk7XG5cbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xucmV0dXJuIHBhc3NhYmxlLm1hcChlbmNvZGVUb0NhcERhdGFSZWN1cik7XG4gfVxuY2FzZSd0YWdnZWQnOntcbnJldHVybntcbltRQ0xBU1NdOid0YWdnZWQnLFxudGFnOmdldFRhZyhwYXNzYWJsZSksXG5wYXlsb2FkOmVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlLnBheWxvYWQpfTtcblxuIH1cbmNhc2UncmVtb3RhYmxlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVJlbW90YWJsZVRvQ2FwRGF0YShcbnBhc3NhYmxlLFxuZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuXG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ3Nsb3QnKSl7XG5yZXR1cm4gZW5jb2RlZDtcbiB9XG4vL1xudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFJlbW90YWJsZSBlbmNvZGluZyBtdXN0IGJlIGFuIG9iamVjdCB3aXRoICR7cShcblFDTEFTUylcbiB9ICR7cSgnc2xvdCcpfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdwcm9taXNlJzp7XG5jb25zdCBlbmNvZGVkPWVuY29kZVByb21pc2VUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpO1xuaWYocWNsYXNzTWF0Y2hlcyhlbmNvZGVkLCdzbG90Jykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IFByb21pc2UgZW5jb2RpbmcgbXVzdCBiZSBhbiBvYmplY3Qgd2l0aCAke3EoXG5RQ0xBU1MsXG4nc2xvdCcpXG4gfTogJHtlbmNvZGVkfWA7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZW5jb2RlZD1lbmNvZGVFcnJvclRvQ2FwRGF0YShwYXNzYWJsZSxlbmNvZGVUb0NhcERhdGFSZWN1cik7XG5pZihxY2xhc3NNYXRjaGVzKGVuY29kZWQsJ2Vycm9yJykpe1xucmV0dXJuIGVuY29kZWQ7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IEVycm9yIGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0IHdpdGggJHtxKFxuUUNMQVNTLFxuJ2Vycm9yJylcbiB9OiAke2VuY29kZWR9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IFVucmVjb2duaXplZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfTtcbmNvbnN0IGVuY29kZVRvQ2FwRGF0YT0ocGFzc2FibGUpPT57XG5pZihpc0Vycm9yTGlrZShwYXNzYWJsZSkpe1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBoYXJkZW4oZW5jb2RlRXJyb3JUb0NhcERhdGEocGFzc2FibGUsZW5jb2RlVG9DYXBEYXRhUmVjdXIpKTtcbiB9XG5yZXR1cm4gaGFyZGVuKGVuY29kZVRvQ2FwRGF0YVJlY3VyKHBhc3NhYmxlKSk7XG4gfTtcbnJldHVybiBoYXJkZW4oZW5jb2RlVG9DYXBEYXRhKTtcbiB9OyRozY9fb25jZS5tYWtlRW5jb2RlVG9DYXBEYXRhKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuaGFyZGVuKG1ha2VFbmNvZGVUb0NhcERhdGEpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShzbG90RW5jb2RpbmcpPT5cbkZhaWwgYHJlbW90YWJsZSBvciBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7c2xvdEVuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0oZXJyb3JFbmNvZGluZyk9PlxuRmFpbCBgZXJyb3IgdW5leHBlY3RlZDogJHtlcnJvckVuY29kaW5nfWA7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZUZyb21DYXBEYXRhPShkZWNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT1kb250RGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE9ZG9udERlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhLFxuZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT1kb250RGVjb2RlRXJyb3JGcm9tQ2FwRGF0YX09XG5kZWNvZGVPcHRpb25zO1xuXG5kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YT09PWRlY29kZVByb21pc2VGcm9tQ2FwRGF0YXx8XG5GYWlsIGBBbiBpbXBsZW1lbnRhdGlvbiByZXN0cmljdGlvbiBmb3Igbm93OiBJZiBlaXRoZXIgZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEgb3IgZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhIGlzIHByb3ZpZGVkLCBib3RoIG11c3QgYmUgcHJvdmlkZWQgYW5kIHRoZXkgbXVzdCBiZSB0aGUgc2FtZTogJHtxKFxuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGEpXG4gfSB2cyAke3EoZGVjb2RlUHJvbWlzZUZyb21DYXBEYXRhKX1gO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGVGcm9tQ2FwRGF0YT0oanNvbkVuY29kZWQpPT57XG5pZighaXNPYmplY3QoanNvbkVuY29kZWQpKXtcbi8vXG5yZXR1cm4ganNvbkVuY29kZWQ7XG4gfVxuaWYoaXNBcnJheShqc29uRW5jb2RlZCkpe1xucmV0dXJuIGpzb25FbmNvZGVkLm1hcCgoZW5jb2RlZFZhbCk9PmRlY29kZUZyb21DYXBEYXRhKGVuY29kZWRWYWwpKTtcbiB9ZWxzZSBpZihoYXNRQ2xhc3MoanNvbkVuY29kZWQpKXtcbmNvbnN0IHFjbGFzcz1qc29uRW5jb2RlZFtRQ0xBU1NdO1xudHlwZW9mIHFjbGFzcz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgJHtxKFFDTEFTUyl9IHR5cGVvZiAke3EodHlwZW9mIHFjbGFzcyl9YDtcbnN3aXRjaChxY2xhc3Mpe1xuLy9cbmNhc2UndW5kZWZpbmVkJzp7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbmNhc2UnTmFOJzp7XG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnSW5maW5pdHknOntcbnJldHVybiBJbmZpbml0eTtcbiB9XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuLUluZmluaXR5O1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PWpzb25FbmNvZGVkO1xudHlwZW9mIGRpZ2l0cz09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZGlnaXRzIHR5cGVvZiAke3EodHlwZW9mIGRpZ2l0cyl9YDtcbnJldHVybiBCaWdJbnQoZGlnaXRzKTtcbiB9XG5jYXNlJ0BAYXN5bmNJdGVyYXRvcic6e1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvcjtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuY29uc3R7bmFtZX09anNvbkVuY29kZWQ7XG5yZXR1cm4gcGFzc2FibGVTeW1ib2xGb3JOYW1lKG5hbWUpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09anNvbkVuY29kZWQ7XG5yZXR1cm4gbWFrZVRhZ2dlZCh0YWcsZGVjb2RlRnJvbUNhcERhdGEocGF5bG9hZCkpO1xuIH1cbmNhc2Unc2xvdCc6e1xuLy9cbi8vXG4vL1xuY29uc3QgZGVjb2RlZD1kZWNvZGVSZW1vdGFibGVGcm9tQ2FwRGF0YShcbmpzb25FbmNvZGVkLFxuZGVjb2RlRnJvbUNhcERhdGEpO1xuXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGRlY29kZWQ7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZGVjb2RlZD1kZWNvZGVFcnJvckZyb21DYXBEYXRhKFxuanNvbkVuY29kZWQsXG5kZWNvZGVGcm9tQ2FwRGF0YSk7XG5cbmlmKHBhc3NTdHlsZU9mKGRlY29kZWQpPT09J2Vycm9yJyl7XG5yZXR1cm4gZGVjb2RlZDtcbiB9XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YSBvcHRpb24gbXVzdCByZXR1cm4gYW4gZXJyb3I6ICR7ZGVjb2RlZH1gO1xuIH1cbmNhc2UnaGlsYmVydCc6e1xuY29uc3R7b3JpZ2luYWwscmVzdH09anNvbkVuY29kZWQ7XG5oYXNPd25Qcm9wZXJ0eU9mKGpzb25FbmNvZGVkLCdvcmlnaW5hbCcpfHxcbkZhaWwgYEludmFsaWQgSGlsYmVydCBIb3RlbCBlbmNvZGluZyAke2pzb25FbmNvZGVkfWA7XG4vL1xuY29uc3QgcmVzdWx0PXtbUUNMQVNTXTpkZWNvZGVGcm9tQ2FwRGF0YShvcmlnaW5hbCl9O1xuaWYoaGFzT3duUHJvcGVydHlPZihqc29uRW5jb2RlZCwncmVzdCcpKXtcbmNvbnN0IGlzTm9uRW1wdHlPYmplY3Q9XG50eXBlb2YgcmVzdD09PSdvYmplY3QnJiZcbnJlc3QhPT1udWxsJiZcbm93bktleXMocmVzdCkubGVuZ3RoPj0xO1xuaWYoIWlzTm9uRW1wdHlPYmplY3Qpe1xudGhyb3cgRmFpbCBgUmVzdCBlbmNvZGluZyBtdXN0IGJlIGEgbm9uLWVtcHR5IG9iamVjdDogJHtyZXN0fWA7XG4gfVxuY29uc3QgcmVzdE9iaj1kZWNvZGVGcm9tQ2FwRGF0YShyZXN0KTtcbi8vXG4vL1xuLy9cbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RPYmosUUNMQVNTKXx8XG5GYWlsIGBSZXN0IG11c3Qgbm90IGNvbnRhaW4gaXRzIG93biBkZWZpbml0aW9uIG9mICR7cShRQ0xBU1MpfWA7XG5kZWZpbmVQcm9wZXJ0aWVzKHJlc3VsdCxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHJlc3RPYmopKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH1cbi8vXG5jYXNlJ2liaWQnOntcbnRocm93IEZhaWwgYFRoZSBjYXBEYXRhIHByb3RvY29sIG5vIGxvbmdlciBzdXBwb3J0cyAke3EoUUNMQVNTKX0gJHtxKFxucWNsYXNzKVxuIH1gO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH1lbHNle1xuYXNzZXJ0KHR5cGVvZiBqc29uRW5jb2RlZD09PSdvYmplY3QnJiZqc29uRW5jb2RlZCE9PW51bGwpO1xuY29uc3QgZGVjb2RlRW50cnk9KFtuYW1lLGVuY29kZWRWYWxdKT0+e1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSAke3EobmFtZSl9IG9mICR7anNvbkVuY29kZWR9IG11c3QgYmUgYSBzdHJpbmdgO1xucmV0dXJuW25hbWUsZGVjb2RlRnJvbUNhcERhdGEoZW5jb2RlZFZhbCldO1xuIH07XG5jb25zdCBkZWNvZGVkRW50cmllcz1lbnRyaWVzKGpzb25FbmNvZGVkKS5tYXAoZGVjb2RlRW50cnkpO1xucmV0dXJuIGZyb21FbnRyaWVzKGRlY29kZWRFbnRyaWVzKTtcbiB9XG4gfTtcbnJldHVybiBoYXJkZW4oZGVjb2RlRnJvbUNhcERhdGEpO1xuIH07JGjNj19vbmNlLm1ha2VEZWNvZGVGcm9tQ2FwRGF0YShtYWtlRGVjb2RlRnJvbUNhcERhdGEpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiUUNMQVNTIjpbIlFDTEFTUyJdLCJtYWtlRW5jb2RlVG9DYXBEYXRhIjpbIm1ha2VFbmNvZGVUb0NhcERhdGEiXSwibWFrZURlY29kZUZyb21DYXBEYXRhIjpbIm1ha2VEZWNvZGVGcm9tQ2FwRGF0YSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD7iZ7NXSIAAF0iAAAtAAAAQGVuZG8vbWFyc2hhbC12MS42LjMvc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Bhc3Mtc3R5bGUiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJtYWtlRGVjb2RlRnJvbVNtYWxsY2FwcyIsIm1ha2VFbmNvZGVUb1NtYWxsY2FwcyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IHBhc3NTdHlsZU9mLGlzRXJyb3JMaWtlLG1ha2VUYWdnZWQsZ2V0VGFnLGhhc093blByb3BlcnR5T2YsYXNzZXJ0UGFzc2FibGVTeW1ib2wsbmFtZUZvclBhc3NhYmxlU3ltYm9sLHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxYLEZhaWwscTskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJhc3NlcnRQYXNzYWJsZVN5bWJvbFwiLCBbJGjNj19hID0+IChhc3NlcnRQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJuYW1lRm9yUGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAobmFtZUZvclBhc3NhYmxlU3ltYm9sID0gJGjNj19hKV1dLFtcInBhc3NhYmxlU3ltYm9sRm9yTmFtZVwiLCBbJGjNj19hID0+IChwYXNzYWJsZVN5bWJvbEZvck5hbWUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e2lzLGVudHJpZXMsZnJvbUVudHJpZXN9PU9iamVjdDtcblxuY29uc3QgQkFORz0nIScuY2hhckNvZGVBdCgwKTtcbmNvbnN0IERBU0g9Jy0nLmNoYXJDb2RlQXQoMCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHN0YXJ0c1NwZWNpYWw9KGVuY29kZWRTdHIpPT57XG5pZihlbmNvZGVkU3RyPT09Jycpe1xucmV0dXJuIGZhbHNlO1xuIH1cbi8vXG5jb25zdCBjb2RlPWVuY29kZWRTdHIuY2hhckNvZGVBdCgwKTtcbi8vXG5yZXR1cm4gQkFORzw9Y29kZSYmY29kZTw9REFTSDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cblxuY29uc3QgZG9udEVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzPShyZW0pPT5cbkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke3JlbX1gO1xuXG5jb25zdCBkb250RW5jb2RlUHJvbWlzZVRvU21hbGxjYXBzPShwcm9tKT0+RmFpbCBgcHJvbWlzZSB1bmV4cGVjdGVkOiAke3Byb219YDtcblxuY29uc3QgZG9udEVuY29kZUVycm9yVG9TbWFsbGNhcHM9KGVycik9PlxuRmFpbCBgZXJyb3Igb2JqZWN0IHVuZXhwZWN0ZWQ6ICR7cShlcnIpfWA7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUVuY29kZVRvU21hbGxjYXBzPShlbmNvZGVPcHRpb25zPXt9KT0+e1xuY29uc3R7XG5lbmNvZGVSZW1vdGFibGVUb1NtYWxsY2Fwcz1kb250RW5jb2RlUmVtb3RhYmxlVG9TbWFsbGNhcHMsXG5lbmNvZGVQcm9taXNlVG9TbWFsbGNhcHM9ZG9udEVuY29kZVByb21pc2VUb1NtYWxsY2FwcyxcbmVuY29kZUVycm9yVG9TbWFsbGNhcHM9ZG9udEVuY29kZUVycm9yVG9TbWFsbGNhcHN9PVxuZW5jb2RlT3B0aW9ucztcblxuY29uc3QgYXNzZXJ0RW5jb2RlZEVycm9yPShlbmNvZGluZyk9PntcbnR5cGVvZiBlbmNvZGluZz09PSdvYmplY3QnJiZoYXNPd25Qcm9wZXJ0eU9mKGVuY29kaW5nLCcjZXJyb3InKXx8XG5GYWlsIGBpbnRlcm5hbDogRXJyb3IgZW5jb2RpbmcgbXVzdCBoYXZlIFwiI2Vycm9yXCIgcHJvcGVydHk6ICR7cShcbmVuY29kaW5nKVxuIH1gO1xuLy9cbmNvbnN0IG1lc3NhZ2U9ZW5jb2RpbmdbJyNlcnJvciddO1xudHlwZW9mIG1lc3NhZ2U9PT0nc3RyaW5nJyYmKFxuIXN0YXJ0c1NwZWNpYWwobWVzc2FnZSl8fG1lc3NhZ2UuY2hhckF0KDApPT09JyEnKXx8XG5GYWlsIGBpbnRlcm5hbDogRXJyb3IgZW5jb2RpbmcgbXVzdCBoYXZlIHN0cmluZyBtZXNzYWdlOiAke3EobWVzc2FnZSl9YDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgZW5jb2RlVG9TbWFsbGNhcHNSZWN1cj0ocGFzc2FibGUpPT57XG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihwYXNzYWJsZSk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOntcbi8vXG5yZXR1cm4gcGFzc2FibGU7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmlmKHN0YXJ0c1NwZWNpYWwocGFzc2FibGUpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIGAhJHtwYXNzYWJsZX1gO1xuIH1cbi8vXG5yZXR1cm4gcGFzc2FibGU7XG4gfVxuY2FzZSd1bmRlZmluZWQnOntcbnJldHVybicjdW5kZWZpbmVkJztcbiB9XG5jYXNlJ251bWJlcic6e1xuLy9cbmlmKE51bWJlci5pc05hTihwYXNzYWJsZSkpe1xucmV0dXJuJyNOYU4nO1xuIH1lbHNlIGlmKHBhc3NhYmxlPT09SW5maW5pdHkpe1xucmV0dXJuJyNJbmZpbml0eSc7XG4gfWVsc2UgaWYocGFzc2FibGU9PT0tSW5maW5pdHkpe1xucmV0dXJuJyMtSW5maW5pdHknO1xuIH1cbi8vXG5yZXR1cm4gaXMocGFzc2FibGUsLTApPzA6cGFzc2FibGU7XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0IHN0cj1TdHJpbmcocGFzc2FibGUpO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgKi9wYXNzYWJsZTwwbj9zdHI6YCske3N0cn1gKTtcbiB9XG5jYXNlJ3N5bWJvbCc6e1xuYXNzZXJ0UGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xuY29uc3QgbmFtZT0vKiAgICAgICAgICAgICAgICAgKi9uYW1lRm9yUGFzc2FibGVTeW1ib2wocGFzc2FibGUpO1xucmV0dXJuIGAlJHtuYW1lfWA7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbi8vXG5jb25zdCBuYW1lcz1vd25LZXlzKHBhc3NhYmxlKS5zb3J0KCk7XG5yZXR1cm4gZnJvbUVudHJpZXMoXG5uYW1lcy5tYXAoKG5hbWUpPT5bXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKG5hbWUpLFxuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihwYXNzYWJsZVtuYW1lXSldKSk7XG5cblxuIH1cbmNhc2UnY29weUFycmF5Jzp7XG5yZXR1cm4gcGFzc2FibGUubWFwKGVuY29kZVRvU21hbGxjYXBzUmVjdXIpO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5yZXR1cm57XG4nI3RhZyc6ZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihnZXRUYWcocGFzc2FibGUpKSxcbnBheWxvYWQ6ZW5jb2RlVG9TbWFsbGNhcHNSZWN1cihwYXNzYWJsZS5wYXlsb2FkKX07XG5cbiB9XG5jYXNlJ3JlbW90YWJsZSc6e1xuY29uc3QgcmVzdWx0PWVuY29kZVJlbW90YWJsZVRvU21hbGxjYXBzKFxucGFzc2FibGUsXG5lbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcblxuaWYodHlwZW9mIHJlc3VsdD09PSdzdHJpbmcnJiZyZXN1bHQuY2hhckF0KDApPT09JyQnKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuLy9cbnRocm93IEZhaWwgYGludGVybmFsOiBSZW1vdGFibGUgZW5jb2RpbmcgbXVzdCBzdGFydCB3aXRoIFwiJFwiOiAke3Jlc3VsdH1gO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xuY29uc3QgcmVzdWx0PWVuY29kZVByb21pc2VUb1NtYWxsY2FwcyhcbnBhc3NhYmxlLFxuZW5jb2RlVG9TbWFsbGNhcHNSZWN1cik7XG5cbmlmKHR5cGVvZiByZXN1bHQ9PT0nc3RyaW5nJyYmcmVzdWx0LmNoYXJBdCgwKT09PScmJyl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbnRocm93IEZhaWwgYGludGVybmFsOiBQcm9taXNlIGVuY29kaW5nIG11c3Qgc3RhcnQgd2l0aCBcIiZcIjogJHtyZXN1bHR9YDtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdCByZXN1bHQ9ZW5jb2RlRXJyb3JUb1NtYWxsY2FwcyhwYXNzYWJsZSxlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKTtcbmFzc2VydEVuY29kZWRFcnJvcihyZXN1bHQpO1xucmV0dXJuIHJlc3VsdDtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFxuWCBgaW50ZXJuYWw6IFVucmVjb2duaXplZCBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfTtcbmNvbnN0IGVuY29kZVRvU21hbGxjYXBzPShwYXNzYWJsZSk9PntcbmlmKGlzRXJyb3JMaWtlKHBhc3NhYmxlKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgcmVzdWx0PWhhcmRlbihcbmVuY29kZUVycm9yVG9TbWFsbGNhcHMocGFzc2FibGUsZW5jb2RlVG9TbWFsbGNhcHNSZWN1cikpO1xuXG5hc3NlcnRFbmNvZGVkRXJyb3IocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfVxucmV0dXJuIGhhcmRlbihlbmNvZGVUb1NtYWxsY2Fwc1JlY3VyKHBhc3NhYmxlKSk7XG4gfTtcbnJldHVybiBoYXJkZW4oZW5jb2RlVG9TbWFsbGNhcHMpO1xuIH07JGjNj19vbmNlLm1ha2VFbmNvZGVUb1NtYWxsY2FwcyhtYWtlRW5jb2RlVG9TbWFsbGNhcHMpO1xuaGFyZGVuKG1ha2VFbmNvZGVUb1NtYWxsY2Fwcyk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG5jb25zdCBkb250RGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcpPT5cbkZhaWwgYHJlbW90YWJsZSB1bmV4cGVjdGVkOiAke2VuY29kaW5nfWA7XG5jb25zdCBkb250RGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+XG5GYWlsIGBwcm9taXNlIHVuZXhwZWN0ZWQ6ICR7ZW5jb2Rpbmd9YDtcbmNvbnN0IGRvbnREZWNvZGVFcnJvckZyb21TbWFsbGNhcHM9KGVuY29kaW5nKT0+XG5GYWlsIGBlcnJvciB1bmV4cGVjdGVkOiAke3EoZW5jb2RpbmcpfWA7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZURlY29kZUZyb21TbWFsbGNhcHM9KGRlY29kZU9wdGlvbnM9e30pPT57XG5jb25zdHtcbmRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHM9ZG9udERlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVQcm9taXNlRnJvbVNtYWxsY2Fwcz1kb250RGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMsXG5kZWNvZGVFcnJvckZyb21TbWFsbGNhcHM9ZG9udERlY29kZUVycm9yRnJvbVNtYWxsY2Fwc309XG5kZWNvZGVPcHRpb25zO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGVGcm9tU21hbGxjYXBzPShlbmNvZGluZyk9PntcbnN3aXRjaCh0eXBlb2YgZW5jb2Rpbmcpe1xuY2FzZSdib29sZWFuJzpcbmNhc2UnbnVtYmVyJzp7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmlmKCFzdGFydHNTcGVjaWFsKGVuY29kaW5nKSl7XG5yZXR1cm4gZW5jb2Rpbmc7XG4gfVxuY29uc3QgYz1lbmNvZGluZy5jaGFyQXQoMCk7XG5zd2l0Y2goYyl7XG5jYXNlJyEnOntcbi8vXG5yZXR1cm4gZW5jb2Rpbmcuc2xpY2UoMSk7XG4gfVxuY2FzZSclJzp7XG5yZXR1cm4gcGFzc2FibGVTeW1ib2xGb3JOYW1lKGVuY29kaW5nLnNsaWNlKDEpKTtcbiB9XG5jYXNlJyMnOntcbnN3aXRjaChlbmNvZGluZyl7XG5jYXNlJyN1bmRlZmluZWQnOntcbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuY2FzZScjTmFOJzp7XG5yZXR1cm4gTmFOO1xuIH1cbmNhc2UnI0luZmluaXR5Jzp7XG5yZXR1cm4gSW5maW5pdHk7XG4gfVxuY2FzZScjLUluZmluaXR5Jzp7XG5yZXR1cm4tSW5maW5pdHk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYHVua25vd24gY29uc3RhbnQgXCIke3EoZW5jb2RpbmcpfVwiYCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfVxuY2FzZScrJzpcbmNhc2UnLSc6e1xucmV0dXJuIEJpZ0ludChlbmNvZGluZyk7XG4gfVxuY2FzZSckJzp7XG5jb25zdCByZXN1bHQ9ZGVjb2RlUmVtb3RhYmxlRnJvbVNtYWxsY2FwcyhcbmVuY29kaW5nLFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG5cbi8vXG5pZihwYXNzU3R5bGVPZihyZXN1bHQpIT09J3JlbW90YWJsZScpe1xuRmFpbCBgaW50ZXJuYWw6IGRlY29kZVJlbW90YWJsZUZyb21TbWFsbGNhcHMgb3B0aW9uIG11c3QgcmV0dXJuIGEgcmVtb3RhYmxlOiAke3Jlc3VsdH1gO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfVxuY2FzZScmJzp7XG5jb25zdCByZXN1bHQ9ZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHMoXG5lbmNvZGluZyxcbmRlY29kZUZyb21TbWFsbGNhcHMpO1xuXG5pZihwYXNzU3R5bGVPZihyZXN1bHQpIT09J3Byb21pc2UnKXtcbkZhaWwgYGludGVybmFsOiBkZWNvZGVQcm9taXNlRnJvbVNtYWxsY2FwcyBvcHRpb24gbXVzdCByZXR1cm4gYSBwcm9taXNlOiAke3Jlc3VsdH1gO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBTcGVjaWFsIGNoYXIgJHtxKFxuYylcbiB9IHJlc2VydmVkIGZvciBmdXR1cmUgdXNlOiAke2VuY29kaW5nfWA7XG4gfX1cblxuIH1cbmNhc2Unb2JqZWN0Jzp7XG5pZihlbmNvZGluZz09PW51bGwpe1xucmV0dXJuIGVuY29kaW5nO1xuIH1cblxuaWYoaXNBcnJheShlbmNvZGluZykpe1xucmV0dXJuIGVuY29kaW5nLm1hcCgodmFsKT0+ZGVjb2RlRnJvbVNtYWxsY2Fwcyh2YWwpKTtcbiB9XG5cbmlmKGhhc093blByb3BlcnR5T2YoZW5jb2RpbmcsJyN0YWcnKSl7XG5jb25zdHsnI3RhZyc6dGFnLHBheWxvYWQsLi4ucmVzdH09ZW5jb2Rpbmc7XG50eXBlb2YgdGFnPT09J3N0cmluZyd8fFxuRmFpbCBgVmFsdWUgb2YgXCIjdGFnXCIsIHRoZSB0YWcsIG11c3QgYmUgYSBzdHJpbmc6ICR7ZW5jb2Rpbmd9YDtcbm93bktleXMocmVzdCkubGVuZ3RoPT09MHx8XG5GYWlsIGAjdGFnIHJlY29yZCB1bmV4cGVjdGVkIHByb3BlcnRpZXM6ICR7cShvd25LZXlzKHJlc3QpKX1gO1xucmV0dXJuIG1ha2VUYWdnZWQoXG5kZWNvZGVGcm9tU21hbGxjYXBzKHRhZyksXG5kZWNvZGVGcm9tU21hbGxjYXBzKHBheWxvYWQpKTtcblxuIH1cblxuaWYoaGFzT3duUHJvcGVydHlPZihlbmNvZGluZywnI2Vycm9yJykpe1xuY29uc3QgcmVzdWx0PWRlY29kZUVycm9yRnJvbVNtYWxsY2FwcyhcbmVuY29kaW5nLFxuZGVjb2RlRnJvbVNtYWxsY2Fwcyk7XG5cbnBhc3NTdHlsZU9mKHJlc3VsdCk9PT0nZXJyb3InfHxcbkZhaWwgYGludGVybmFsOiBkZWNvZGVFcnJvckZyb21TbWFsbGNhcHMgb3B0aW9uIG11c3QgcmV0dXJuIGFuIGVycm9yOiAke3Jlc3VsdH1gO1xucmV0dXJuIHJlc3VsdDtcbiB9XG5cbmNvbnN0IGRlY29kZUVudHJ5PShbZW5jb2RlZE5hbWUsZW5jb2RlZFZhbF0pPT57XG50eXBlb2YgZW5jb2RlZE5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBQcm9wZXJ0eSBuYW1lICR7cShcbmVuY29kZWROYW1lKVxuIH0gb2YgJHtlbmNvZGluZ30gbXVzdCBiZSBhIHN0cmluZ2A7XG5lbmNvZGVkTmFtZS5jaGFyQXQoMCkhPT0nIyd8fFxuRmFpbCBgVW5yZWNvZ25pemVkIHJlY29yZCB0eXBlICR7cShlbmNvZGVkTmFtZSl9OiAke2VuY29kaW5nfWA7XG5jb25zdCBuYW1lPWRlY29kZUZyb21TbWFsbGNhcHMoZW5jb2RlZE5hbWUpO1xudHlwZW9mIG5hbWU9PT0nc3RyaW5nJ3x8XG5GYWlsIGBEZWNvZGVkIHByb3BlcnR5IG5hbWUgJHtuYW1lfSBmcm9tICR7ZW5jb2Rpbmd9IG11c3QgYmUgYSBzdHJpbmdgO1xucmV0dXJuW25hbWUsZGVjb2RlRnJvbVNtYWxsY2FwcyhlbmNvZGVkVmFsKV07XG4gfTtcbmNvbnN0IGRlY29kZWRFbnRyaWVzPWVudHJpZXMoZW5jb2RpbmcpLm1hcChkZWNvZGVFbnRyeSk7XG5yZXR1cm4gZnJvbUVudHJpZXMoZGVjb2RlZEVudHJpZXMpO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoXG5YIGBpbnRlcm5hbDogdW5yZWNvZ25pemVkIEpTT04gdHlwZW9mICR7cShcbnR5cGVvZiBlbmNvZGluZylcbiB9OiAke2VuY29kaW5nfWAsXG5UeXBlRXJyb3IpO1xuXG4gfX1cblxuIH07XG5yZXR1cm4gaGFyZGVuKGRlY29kZUZyb21TbWFsbGNhcHMpO1xuIH07JGjNj19vbmNlLm1ha2VEZWNvZGVGcm9tU21hbGxjYXBzKG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VFbmNvZGVUb1NtYWxsY2FwcyI6WyJtYWtlRW5jb2RlVG9TbWFsbGNhcHMiXSwibWFrZURlY29kZUZyb21TbWFsbGNhcHMiOlsibWFrZURlY29kZUZyb21TbWFsbGNhcHMiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAMsUIJT8jAAA/IwAAKgAAAEBlbmRvL21hcnNoYWwtdjEuNi4zL3NyYy9tYXJzaGFsLWp1c3Rpbi5qc3siaW1wb3J0cyI6WyJAZW5kby9uYXQiLCJAZW5kby9wYXNzLXN0eWxlIiwiQGVuZG8vZXJyb3JzIiwiLi9lbmNvZGVUb0NhcERhdGEuanMiXSwiZXhwb3J0cyI6WyJkZWNvZGVUb0p1c3RpbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IE5hdCxnZXRFcnJvckNvbnN0cnVjdG9yLGlzT2JqZWN0LHBhc3NhYmxlU3ltYm9sRm9yTmFtZSxxLFgsRmFpbCxRQ0xBU1M7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9uYXRcIiwgW1tcIk5hdFwiLCBbJGjNj19hID0+IChOYXQgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wYXNzLXN0eWxlXCIsIFtbXCJnZXRFcnJvckNvbnN0cnVjdG9yXCIsIFskaM2PX2EgPT4gKGdldEVycm9yQ29uc3RydWN0b3IgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV0sW1wicGFzc2FibGVTeW1ib2xGb3JOYW1lXCIsIFskaM2PX2EgPT4gKHBhc3NhYmxlU3ltYm9sRm9yTmFtZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2VuY29kZVRvQ2FwRGF0YS5qc1wiLCBbW1wiUUNMQVNTXCIsIFskaM2PX2EgPT4gKFFDTEFTUyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7b3duS2V5c309UmVmbGVjdDtcbmNvbnN0e2lzQXJyYXl9PUFycmF5O1xuY29uc3R7c3RyaW5naWZ5OnF1b3RlfT1KU09OO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VZZXNJbmRlbnRlcj0oKT0+e1xuY29uc3Qgc3RyaW5ncz1bXTtcbmxldCBsZXZlbD0wO1xubGV0IG5lZWRTcGFjZT1mYWxzZTtcbmNvbnN0IGxpbmU9KCk9Pntcbm5lZWRTcGFjZT1mYWxzZTtcbnJldHVybiBzdHJpbmdzLnB1c2goJ1xcbicsJyAgJy5yZXBlYXQobGV2ZWwpKTtcbiB9O1xucmV0dXJuIGhhcmRlbih7XG5vcGVuOihvcGVuQnJhY2tldCk9PntcbmxldmVsKz0xO1xuaWYobmVlZFNwYWNlKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbm5lZWRTcGFjZT1mYWxzZTtcbnJldHVybiBzdHJpbmdzLnB1c2gob3BlbkJyYWNrZXQpO1xuIH0sXG5saW5lLFxubmV4dDoodG9rZW4pPT57XG5pZihuZWVkU3BhY2UmJnRva2VuIT09JywnKXtcbnN0cmluZ3MucHVzaCgnICcpO1xuIH1cbm5lZWRTcGFjZT10cnVlO1xucmV0dXJuIHN0cmluZ3MucHVzaCh0b2tlbik7XG4gfSxcbmNsb3NlOihjbG9zZUJyYWNrZXQpPT57XG5hc3NlcnQobGV2ZWw+PTEpO1xubGV2ZWwtPTE7XG5saW5lKCk7XG5yZXR1cm4gc3RyaW5ncy5wdXNoKGNsb3NlQnJhY2tldCk7XG4gfSxcbmRvbmU6KCk9PntcbmFzc2VydC5lcXVhbChsZXZlbCwwKTtcbnJldHVybiBzdHJpbmdzLmpvaW4oJycpO1xuIH19KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBiYWRQYWlyUGF0dGVybj0vXig/Olxcd1xcd3w8PHw+PnxcXCtcXCt8LS18PCF8LT4pJC87XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VOb0luZGVudGVyPSgpPT57XG4vKiAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc3RyaW5ncz1bXTtcbnJldHVybiBoYXJkZW4oe1xub3Blbjoob3BlbkJyYWNrZXQpPT5zdHJpbmdzLnB1c2gob3BlbkJyYWNrZXQpLFxubGluZTooKT0+c3RyaW5ncy5sZW5ndGgsXG5uZXh0Oih0b2tlbik9PntcbmlmKHN0cmluZ3MubGVuZ3RoPj0xKXtcbmNvbnN0IGxhc3Q9c3RyaW5nc1tzdHJpbmdzLmxlbmd0aC0xXTtcbi8vXG5pZihsYXN0Lmxlbmd0aD49MSYmdG9rZW4ubGVuZ3RoPj0xKXtcbmNvbnN0IHBhaXI9IGAke2xhc3RbbGFzdC5sZW5ndGgtMV19JHt0b2tlblswXX1gO1xuaWYoYmFkUGFpclBhdHRlcm4udGVzdChwYWlyKSl7XG5zdHJpbmdzLnB1c2goJyAnKTtcbiB9XG4gfVxuIH1cbnJldHVybiBzdHJpbmdzLnB1c2godG9rZW4pO1xuIH0sXG5jbG9zZTooY2xvc2VCcmFja2V0KT0+e1xuaWYoc3RyaW5ncy5sZW5ndGg+PTEmJnN0cmluZ3Nbc3RyaW5ncy5sZW5ndGgtMV09PT0nLCcpe1xuc3RyaW5ncy5wb3AoKTtcbiB9XG5yZXR1cm4gc3RyaW5ncy5wdXNoKGNsb3NlQnJhY2tldCk7XG4gfSxcbmRvbmU6KCk9PnN0cmluZ3Muam9pbignJyl9KTtcblxuIH07XG5cbmNvbnN0IGlkZW50UGF0dGVybj0vXlthLXpBLVpdXFx3KiQvO1xuaGFyZGVuKGlkZW50UGF0dGVybik7XG5jb25zdCBBdEF0UHJlZml4UGF0dGVybj0vXkBAKC4qKSQvO1xuaGFyZGVuKEF0QXRQcmVmaXhQYXR0ZXJuKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBkZWNvZGVUb0p1c3Rpbj0oZW5jb2Rpbmcsc2hvdWxkSW5kZW50PWZhbHNlLHNsb3RzPVtdKT0+e1xuLypcblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHByZXBhcmU9KHJhd1RyZWUpPT57XG5pZighaXNPYmplY3QocmF3VHJlZSkpe1xucmV0dXJuO1xuIH1cbi8vXG5hc3NlcnQudHlwZW9mKHJhd1RyZWUsJ29iamVjdCcpO1xuYXNzZXJ0KHJhd1RyZWUhPT1udWxsKTtcbmlmKFFDTEFTUyBpbiByYXdUcmVlKXtcbmNvbnN0IHFjbGFzcz1yYXdUcmVlW1FDTEFTU107XG50eXBlb2YgcWNsYXNzPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBxY2xhc3MgdHlwZW9mICR7cSh0eXBlb2YgcWNsYXNzKX1gO1xuYXNzZXJ0KCFpc0FycmF5KHJhd1RyZWUpKTtcbnN3aXRjaChyYXdUcmVlWydAcWNsYXNzJ10pe1xuY2FzZSd1bmRlZmluZWQnOlxuY2FzZSdOYU4nOlxuY2FzZSdJbmZpbml0eSc6XG5jYXNlJy1JbmZpbml0eSc6e1xucmV0dXJuO1xuIH1cbmNhc2UnYmlnaW50Jzp7XG5jb25zdHtkaWdpdHN9PXJhd1RyZWU7XG50eXBlb2YgZGlnaXRzPT09J3N0cmluZyd8fFxuRmFpbCBgaW52YWxpZCBkaWdpdHMgdHlwZW9mICR7cSh0eXBlb2YgZGlnaXRzKX1gO1xucmV0dXJuO1xuIH1cbmNhc2UnQEBhc3luY0l0ZXJhdG9yJzp7XG5yZXR1cm47XG4gfVxuY2FzZSdzeW1ib2wnOntcbmNvbnN0e25hbWV9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKG5hbWUsJ3N0cmluZycpO1xuY29uc3Qgc3ltPXBhc3NhYmxlU3ltYm9sRm9yTmFtZShuYW1lKTtcbmFzc2VydC50eXBlb2Yoc3ltLCdzeW1ib2wnKTtcbnJldHVybjtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3R7dGFnLHBheWxvYWR9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKHRhZywnc3RyaW5nJyk7XG5wcmVwYXJlKHBheWxvYWQpO1xucmV0dXJuO1xuIH1cbmNhc2Unc2xvdCc6e1xuY29uc3R7aW5kZXgsaWZhY2V9PXJhd1RyZWU7XG5hc3NlcnQudHlwZW9mKGluZGV4LCdudW1iZXInKTtcbk5hdChpbmRleCk7XG5pZihpZmFjZSE9PXVuZGVmaW5lZCl7XG5hc3NlcnQudHlwZW9mKGlmYWNlLCdzdHJpbmcnKTtcbiB9XG5yZXR1cm47XG4gfVxuY2FzZSdoaWxiZXJ0Jzp7XG5jb25zdHtvcmlnaW5hbCxyZXN0fT1yYXdUcmVlO1xuJ29yaWdpbmFsJ2luIHJhd1RyZWV8fFxuRmFpbCBgSW52YWxpZCBIaWxiZXJ0IEhvdGVsIGVuY29kaW5nICR7cmF3VHJlZX1gO1xucHJlcGFyZShvcmlnaW5hbCk7XG5pZigncmVzdCdpbiByYXdUcmVlKXtcbmlmKHR5cGVvZiByZXN0IT09J29iamVjdCcpe1xudGhyb3cgRmFpbCBgUmVzdCAke3Jlc3R9IGVuY29kaW5nIG11c3QgYmUgYW4gb2JqZWN0YDtcbiB9XG5pZihyZXN0PT09bnVsbCl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBub3QgYmUgbnVsbGA7XG4gfVxuaWYoaXNBcnJheShyZXN0KSl7XG50aHJvdyBGYWlsIGBSZXN0ICR7cmVzdH0gZW5jb2RpbmcgbXVzdCBub3QgYmUgYW4gYXJyYXlgO1xuIH1cbmlmKFFDTEFTUyBpbiByZXN0KXtcbnRocm93IEZhaWwgYFJlc3QgZW5jb2RpbmcgJHtyZXN0fSBtdXN0IG5vdCBjb250YWluICR7cShRQ0xBU1MpfWA7XG4gfVxuY29uc3QgbmFtZXM9b3duS2V5cyhyZXN0KTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbnR5cGVvZiBuYW1lPT09J3N0cmluZyd8fFxuRmFpbCBgUHJvcGVydHkgbmFtZSAke25hbWV9IG9mICR7cmF3VHJlZX0gbXVzdCBiZSBhIHN0cmluZ2A7XG5wcmVwYXJlKHJlc3RbbmFtZV0pO1xuIH1cbiB9XG5yZXR1cm47XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3R7bmFtZSxtZXNzYWdlfT1yYXdUcmVlO1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGVycm9yIG5hbWUgdHlwZW9mICR7cSh0eXBlb2YgbmFtZSl9YDtcbiB9XG5nZXRFcnJvckNvbnN0cnVjdG9yKG5hbWUpIT09dW5kZWZpbmVkfHxcbkZhaWwgYE11c3QgYmUgdGhlIG5hbWUgb2YgYW4gRXJyb3IgY29uc3RydWN0b3IgJHtuYW1lfWA7XG50eXBlb2YgbWVzc2FnZT09PSdzdHJpbmcnfHxcbkZhaWwgYGludmFsaWQgZXJyb3IgbWVzc2FnZSB0eXBlb2YgJHtxKHR5cGVvZiBtZXNzYWdlKX1gO1xucmV0dXJuO1xuIH1cblxuZGVmYXVsdDp7XG5hc3NlcnQuZmFpbChYIGB1bnJlY29nbml6ZWQgJHtxKFFDTEFTUyl9ICR7cShxY2xhc3MpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfWVsc2UgaWYoaXNBcnJheShyYXdUcmVlKSl7XG5jb25zdHtsZW5ndGh9PXJhd1RyZWU7XG5mb3IobGV0IGk9MDtpPGxlbmd0aDtpKz0xKXtcbnByZXBhcmUocmF3VHJlZVtpXSk7XG4gfVxuIH1lbHNle1xuY29uc3QgbmFtZXM9b3duS2V5cyhyYXdUcmVlKTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbmlmKHR5cGVvZiBuYW1lIT09J3N0cmluZycpe1xudGhyb3cgRmFpbCBgUHJvcGVydHkgbmFtZSAke25hbWV9IG9mICR7cmF3VHJlZX0gbXVzdCBiZSBhIHN0cmluZ2A7XG4gfVxucHJlcGFyZShyYXdUcmVlW25hbWVdKTtcbiB9XG4gfVxuIH07XG5cbmNvbnN0IG1ha2VJbmRlbnRlcj1zaG91bGRJbmRlbnQ/bWFrZVllc0luZGVudGVyOm1ha2VOb0luZGVudGVyO1xubGV0IG91dD1tYWtlSW5kZW50ZXIoKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBkZWNvZGU9KHJhd1RyZWUpPT57XG4vL1xucmV0dXJuIHJlY3VyKHJhd1RyZWUpO1xuIH07XG5cbmNvbnN0IGRlY29kZVByb3BlcnR5PShuYW1lLHZhbHVlKT0+e1xub3V0LmxpbmUoKTtcbmlmKG5hbWU9PT0nX19wcm90b19fJyl7XG4vL1xuLy9cbi8vXG4vL1xub3V0Lm5leHQoIGBbXCJfX3Byb3RvX19cIl06YCk7XG4gfWVsc2UgaWYoaWRlbnRQYXR0ZXJuLnRlc3QobmFtZSkpe1xub3V0Lm5leHQoIGAke25hbWV9OmApO1xuIH1lbHNle1xub3V0Lm5leHQoIGAke3F1b3RlKG5hbWUpfTpgKTtcbiB9XG5kZWNvZGUodmFsdWUpO1xub3V0Lm5leHQoJywnKTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgcmVjdXI9KHJhd1RyZWUpPT57XG5pZighaXNPYmplY3QocmF3VHJlZSkpe1xuLy9cbnJldHVybiBvdXQubmV4dChxdW90ZShyYXdUcmVlKSk7XG4gfVxuLy9cbmFzc2VydC50eXBlb2YocmF3VHJlZSwnb2JqZWN0Jyk7XG5hc3NlcnQocmF3VHJlZSE9PW51bGwpO1xuaWYoUUNMQVNTIGluIHJhd1RyZWUpe1xuY29uc3QgcWNsYXNzPXJhd1RyZWVbUUNMQVNTXTtcbmFzc2VydC50eXBlb2YocWNsYXNzLCdzdHJpbmcnKTtcbmFzc2VydCghaXNBcnJheShyYXdUcmVlKSk7XG4vL1xuLy9cbi8vXG5zd2l0Y2gocmF3VHJlZVsnQHFjbGFzcyddKXtcbi8vXG5jYXNlJ3VuZGVmaW5lZCc6XG5jYXNlJ05hTic6XG5jYXNlJ0luZmluaXR5JzpcbmNhc2UnLUluZmluaXR5Jzp7XG4vL1xucmV0dXJuIG91dC5uZXh0KHFjbGFzcyk7XG4gfVxuY2FzZSdiaWdpbnQnOntcbmNvbnN0e2RpZ2l0c309cmF3VHJlZTtcbmFzc2VydC50eXBlb2YoZGlnaXRzLCdzdHJpbmcnKTtcbnJldHVybiBvdXQubmV4dCggYCR7QmlnSW50KGRpZ2l0cyl9bmApO1xuIH1cbmNhc2UnQEBhc3luY0l0ZXJhdG9yJzp7XG4vL1xucmV0dXJuIG91dC5uZXh0KCdTeW1ib2wuYXN5bmNJdGVyYXRvcicpO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5jb25zdHtuYW1lfT1yYXdUcmVlO1xuYXNzZXJ0LnR5cGVvZihuYW1lLCdzdHJpbmcnKTtcbmNvbnN0IHN5bT1wYXNzYWJsZVN5bWJvbEZvck5hbWUobmFtZSk7XG5hc3NlcnQudHlwZW9mKHN5bSwnc3ltYm9sJyk7XG5jb25zdCByZWdpc3RlcmVkTmFtZT1TeW1ib2wua2V5Rm9yKHN5bSk7XG5pZihyZWdpc3RlcmVkTmFtZT09PXVuZGVmaW5lZCl7XG5jb25zdCBtYXRjaD1BdEF0UHJlZml4UGF0dGVybi5leGVjKG5hbWUpO1xuYXNzZXJ0KG1hdGNoIT09bnVsbCk7XG5jb25zdCBzdWZmaXg9bWF0Y2hbMV07XG5hc3NlcnQoU3ltYm9sW3N1ZmZpeF09PT1zeW0pO1xuYXNzZXJ0KGlkZW50UGF0dGVybi50ZXN0KHN1ZmZpeCkpO1xucmV0dXJuIG91dC5uZXh0KCBgU3ltYm9sLiR7c3VmZml4fWApO1xuIH1cbnJldHVybiBvdXQubmV4dCggYFN5bWJvbC5mb3IoJHtxdW90ZShyZWdpc3RlcmVkTmFtZSl9KWApO1xuIH1cbmNhc2UndGFnZ2VkJzp7XG5jb25zdHt0YWcscGF5bG9hZH09cmF3VHJlZTtcbm91dC5uZXh0KCBgbWFrZVRhZ2dlZCgke3F1b3RlKHRhZyl9LGApO1xuZGVjb2RlKHBheWxvYWQpO1xucmV0dXJuIG91dC5uZXh0KCcpJyk7XG4gfVxuXG5jYXNlJ3Nsb3QnOntcbmxldHtpZmFjZX09cmF3VHJlZTtcbmNvbnN0IGluZGV4PU51bWJlcihOYXQocmF3VHJlZS5pbmRleCkpO1xuY29uc3QgbmVzdGVkUmVuZGVyPShhcmcpPT57XG5jb25zdCBvbGRPdXQ9b3V0O1xudHJ5e1xub3V0PW1ha2VOb0luZGVudGVyKCk7XG5kZWNvZGUoYXJnKTtcbnJldHVybiBvdXQuZG9uZSgpO1xuIH1maW5hbGx5e1xub3V0PW9sZE91dDtcbiB9XG4gfTtcbmlmKGluZGV4PHNsb3RzLmxlbmd0aCl7XG5jb25zdCBzbG90PW5lc3RlZFJlbmRlcihzbG90c1tpbmRleF0pO1xuaWYoaWZhY2U9PT11bmRlZmluZWQpe1xucmV0dXJuIG91dC5uZXh0KCBgc2xvdFRvVmFsKCR7c2xvdH0pYCk7XG4gfVxuaWZhY2U9bmVzdGVkUmVuZGVyKGlmYWNlKTtcbnJldHVybiBvdXQubmV4dCggYHNsb3RUb1ZhbCgke3Nsb3R9LCR7aWZhY2V9KWApO1xuIH1lbHNlIGlmKGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBvdXQubmV4dCggYHNsb3QoJHtpbmRleH0pYCk7XG4gfVxuaWZhY2U9bmVzdGVkUmVuZGVyKGlmYWNlKTtcbnJldHVybiBvdXQubmV4dCggYHNsb3QoJHtpbmRleH0sJHtpZmFjZX0pYCk7XG4gfVxuXG5jYXNlJ2hpbGJlcnQnOntcbmNvbnN0e29yaWdpbmFsLHJlc3R9PXJhd1RyZWU7XG5vdXQub3BlbigneycpO1xuZGVjb2RlUHJvcGVydHkoUUNMQVNTLG9yaWdpbmFsKTtcbmlmKCdyZXN0J2luIHJhd1RyZWUpe1xuYXNzZXJ0LnR5cGVvZihyZXN0LCdvYmplY3QnKTtcbmFzc2VydChyZXN0IT09bnVsbCk7XG5jb25zdCBuYW1lcz1vd25LZXlzKHJlc3QpO1xuZm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe1xuaWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBQcm9wZXJ0eSBuYW1lICR7cShcbm5hbWUpXG4gfSBvZiAke3Jlc3R9IG11c3QgYmUgYSBzdHJpbmdgO1xuIH1cbmRlY29kZVByb3BlcnR5KG5hbWUscmVzdFtuYW1lXSk7XG4gfVxuIH1cbnJldHVybiBvdXQuY2xvc2UoJ30nKTtcbiB9XG5cbmNhc2UnZXJyb3InOntcbmNvbnN0e1xubmFtZSxcbm1lc3NhZ2UsXG5jYXVzZT11bmRlZmluZWQsXG5lcnJvcnM9dW5kZWZpbmVkfT1cbnJhd1RyZWU7XG5jYXVzZT09PXVuZGVmaW5lZHx8XG5GYWlsIGBlcnJvciBjYXVzZSBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbm5hbWUhPT0gYEFnZ3JlZ2F0ZUVycm9yYHx8XG5GYWlsIGBBZ2dyZWdhdGVFcnJvciBub3QgeWV0IGltcGxlbWVudGVkIGluIG1hcnNoYWwtanVzdGluYDtcbmVycm9ycz09PXVuZGVmaW5lZHx8XG5GYWlsIGBlcnJvciBlcnJvcnMgbm90IHlldCBpbXBsZW1lbnRlZCBpbiBtYXJzaGFsLWp1c3RpbmA7XG5yZXR1cm4gb3V0Lm5leHQoIGAke25hbWV9KCR7cXVvdGUobWVzc2FnZSl9KWApO1xuIH1cblxuZGVmYXVsdDp7XG50aHJvdyBhc3NlcnQuZmFpbChcblggYHVucmVjb2duaXplZCAke3EoUUNMQVNTKX0gJHtxKHFjbGFzcyl9YCxcblR5cGVFcnJvcik7XG5cbiB9fVxuXG4gfWVsc2UgaWYoaXNBcnJheShyYXdUcmVlKSl7XG5jb25zdHtsZW5ndGh9PXJhd1RyZWU7XG5pZihsZW5ndGg9PT0wKXtcbnJldHVybiBvdXQubmV4dCgnW10nKTtcbiB9ZWxzZXtcbm91dC5vcGVuKCdbJyk7XG5mb3IobGV0IGk9MDtpPGxlbmd0aDtpKz0xKXtcbm91dC5saW5lKCk7XG5kZWNvZGUocmF3VHJlZVtpXSk7XG5vdXQubmV4dCgnLCcpO1xuIH1cbnJldHVybiBvdXQuY2xvc2UoJ10nKTtcbiB9XG4gfWVsc2V7XG4vL1xuLy9cbmNvbnN0IG5hbWVzPS8qICAgICAgICAgICAgICAgICAgICovb3duS2V5cyhyYXdUcmVlKTtcbmlmKG5hbWVzLmxlbmd0aD09PTApe1xucmV0dXJuIG91dC5uZXh0KCd7fScpO1xuIH1lbHNle1xub3V0Lm9wZW4oJ3snKTtcbmZvcihjb25zdCBuYW1lIG9mIG5hbWVzKXtcbmRlY29kZVByb3BlcnR5KG5hbWUscmF3VHJlZVtuYW1lXSk7XG4gfVxucmV0dXJuIG91dC5jbG9zZSgnfScpO1xuIH1cbiB9XG4gfTtcbnByZXBhcmUoZW5jb2RpbmcpO1xuZGVjb2RlKGVuY29kaW5nKTtcbnJldHVybiBvdXQuZG9uZSgpO1xuIH07JGjNj19vbmNlLmRlY29kZVRvSnVzdGluKGRlY29kZVRvSnVzdGluKTtcbmhhcmRlbihkZWNvZGVUb0p1c3Rpbik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJkZWNvZGVUb0p1c3RpbiI6WyJkZWNvZGVUb0p1c3RpbiJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAATlrJl7QYAAO0GAAAtAAAAQGVuZG8vbWFyc2hhbC12MS42LjMvc3JjL21hcnNoYWwtc3RyaW5naWZ5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vbWFyc2hhbC5qcyJdLCJleHBvcnRzIjpbInBhcnNlIiwic3RyaW5naWZ5Il0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxtYWtlTWFyc2hhbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9tYXJzaGFsLmpzXCIsIFtbXCJtYWtlTWFyc2hhbFwiLCBbJGjNj19hID0+IChtYWtlTWFyc2hhbCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7ZnJlZXplfT1PYmplY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZG9Ob3RDb252ZXJ0VmFsVG9TbG90PSh2YWwpPT5cbkZhaWwgYE1hcnNoYWwncyBzdHJpbmdpZnkgcmVqZWN0cyBwcmVzZW5jZXMgYW5kIHByb21pc2VzICR7dmFsfWA7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZG9Ob3RDb252ZXJ0U2xvdFRvVmFsPShzbG90LF9pZmFjZSk9PlxuRmFpbCBgTWFyc2hhbCdzIHBhcnNlIG11c3Qgbm90IGVuY29kZSBhbnkgc2xvdHMgJHtzbG90fWA7XG5cbmNvbnN0IGJhZEFycmF5SGFuZGxlcj1oYXJkZW4oe1xuZ2V0OihfdGFyZ2V0LG5hbWUsX3JlY2VpdmVyKT0+e1xuaWYobmFtZT09PSdsZW5ndGgnKXtcbnJldHVybiAwO1xuIH1cbi8vXG50aHJvdyBGYWlsIGBNYXJzaGFsJ3MgcGFyc2UgbXVzdCBub3QgZW5jb2RlIGFueSBzbG90IHBvc2l0aW9ucyAke25hbWV9YDtcbiB9fSk7XG5cblxuLypcblxuXG5cblxuICovXG5jb25zdCBhcnJheVRhcmdldD1mcmVlemUoLyogICAgICAgICAgICAgICAgKi9bXSk7XG5jb25zdCBiYWRBcnJheT1uZXcgUHJveHkoYXJyYXlUYXJnZXQsYmFkQXJyYXlIYW5kbGVyKTtcblxuY29uc3R7c2VyaWFsaXplLHVuc2VyaWFsaXplfT1tYWtlTWFyc2hhbChcbmRvTm90Q29udmVydFZhbFRvU2xvdCxcbmRvTm90Q29udmVydFNsb3RUb1ZhbCxcbntcbmVycm9yVGFnZ2luZzonb2ZmJyxcbi8vXG5zZXJpYWxpemVCb2R5Rm9ybWF0OidjYXBkYXRhJ30pO1xuXG5cblxuLypcblxuXG4gKi9cbmNvbnN0IHN0cmluZ2lmeT0odmFsKT0+c2VyaWFsaXplKHZhbCkuYm9keTskaM2PX29uY2Uuc3RyaW5naWZ5KHN0cmluZ2lmeSk7XG5oYXJkZW4oc3RyaW5naWZ5KTtcblxuLypcblxuXG4gKi9cbmNvbnN0IHBhcnNlPShzdHIpPT5cbnVuc2VyaWFsaXplKFxuLy9cbi8vXG4vL1xuZnJlZXplKHtcbmJvZHk6c3RyLFxuc2xvdHM6YmFkQXJyYXl9KSk7JGjNj19vbmNlLnBhcnNlKHBhcnNlKTtcblxuXG5oYXJkZW4ocGFyc2UpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsic3RyaW5naWZ5IjpbInN0cmluZ2lmeSJdLCJwYXJzZSI6WyJwYXJzZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACVgA3CWScAAFknAAAjAAAAQGVuZG8vbWFyc2hhbC12MS42LjMvc3JjL21hcnNoYWwuanN7ImltcG9ydHMiOlsiQGVuZG8vbmF0IiwiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiLi9lbmNvZGVUb0NhcERhdGEuanMiLCIuL2VuY29kZVRvU21hbGxjYXBzLmpzIl0sImV4cG9ydHMiOlsibWFrZU1hcnNoYWwiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBOYXQsYXNzZXJ0UGFzc2FibGUsZ2V0SW50ZXJmYWNlT2YsZ2V0RXJyb3JDb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eU9mLHRvUGFzc2FibGVFcnJvcixYLEZhaWwscSxtYWtlRXJyb3IsYW5ub3RhdGVFcnJvcixvYmplY3RNYXAsUUNMQVNTLG1ha2VFbmNvZGVUb0NhcERhdGEsbWFrZURlY29kZUZyb21DYXBEYXRhLG1ha2VEZWNvZGVGcm9tU21hbGxjYXBzLG1ha2VFbmNvZGVUb1NtYWxsY2FwczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL25hdFwiLCBbW1wiTmF0XCIsIFskaM2PX2EgPT4gKE5hdCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcImdldEludGVyZmFjZU9mXCIsIFskaM2PX2EgPT4gKGdldEludGVyZmFjZU9mID0gJGjNj19hKV1dLFtcImdldEVycm9yQ29uc3RydWN0b3JcIiwgWyRozY9fYSA9PiAoZ2V0RXJyb3JDb25zdHJ1Y3RvciA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1widG9QYXNzYWJsZUVycm9yXCIsIFskaM2PX2EgPT4gKHRvUGFzc2FibGVFcnJvciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qc1wiLCBbW1wib2JqZWN0TWFwXCIsIFskaM2PX2EgPT4gKG9iamVjdE1hcCA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlVG9DYXBEYXRhLmpzXCIsIFtbXCJRQ0xBU1NcIiwgWyRozY9fYSA9PiAoUUNMQVNTID0gJGjNj19hKV1dLFtcIm1ha2VFbmNvZGVUb0NhcERhdGFcIiwgWyRozY9fYSA9PiAobWFrZUVuY29kZVRvQ2FwRGF0YSA9ICRozY9fYSldXSxbXCJtYWtlRGVjb2RlRnJvbUNhcERhdGFcIiwgWyRozY9fYSA9PiAobWFrZURlY29kZUZyb21DYXBEYXRhID0gJGjNj19hKV1dXV0sW1wiLi9lbmNvZGVUb1NtYWxsY2Fwcy5qc1wiLCBbW1wibWFrZURlY29kZUZyb21TbWFsbGNhcHNcIiwgWyRozY9fYSA9PiAobWFrZURlY29kZUZyb21TbWFsbGNhcHMgPSAkaM2PX2EpXV0sW1wibWFrZUVuY29kZVRvU21hbGxjYXBzXCIsIFskaM2PX2EgPT4gKG1ha2VFbmNvZGVUb1NtYWxsY2FwcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG5jb25zdHtkZWZpbmVQcm9wZXJ0aWVzfT1PYmplY3Q7XG5jb25zdHtpc0FycmF5fT1BcnJheTtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdFZhbFRvU2xvdEZuPSh4KT0+eDtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZGVmYXVsdFNsb3RUb1ZhbEZuPSh4LF8pPT54O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlTWFyc2hhbD0oXG5jb252ZXJ0VmFsVG9TbG90PWRlZmF1bHRWYWxUb1Nsb3RGbixcbmNvbnZlcnRTbG90VG9WYWw9ZGVmYXVsdFNsb3RUb1ZhbEZuLFxue1xuZXJyb3JUYWdnaW5nPSdvbicsXG5tYXJzaGFsTmFtZT0nYW5vbi1tYXJzaGFsJyxcbi8vXG4vL1xuZXJyb3JJZE51bT0xMDAwMCxcbi8vXG4vL1xubWFyc2hhbFNhdmVFcnJvcj0oZXJyKT0+XG5jb25zb2xlLmxvZygnVGVtcG9yYXJ5IGxvZ2dpbmcgb2Ygc2VudCBlcnJvcicsZXJyKSxcbi8vXG4vL1xuc2VyaWFsaXplQm9keUZvcm1hdD0nY2FwZGF0YSd9PVxue30pPT5cbntcbmFzc2VydC50eXBlb2YobWFyc2hhbE5hbWUsJ3N0cmluZycpO1xuZXJyb3JUYWdnaW5nPT09J29uJ3x8XG5lcnJvclRhZ2dpbmc9PT0nb2ZmJ3x8XG5GYWlsIGBUaGUgZXJyb3JUYWdnaW5nIG9wdGlvbiBjYW4gb25seSBiZSBcIm9uXCIgb3IgXCJvZmZcIiAke2Vycm9yVGFnZ2luZ31gO1xuY29uc3QgbmV4dEVycm9ySWQ9KCk9PntcbmVycm9ySWROdW0rPTE7XG5yZXR1cm4gYGVycm9yOiR7bWFyc2hhbE5hbWV9IyR7ZXJyb3JJZE51bX1gO1xuIH07XG5cbi8qXG5cbiAgICovXG5jb25zdCB0b0NhcERhdGE9KHJvb3QpPT57XG5jb25zdCBzbG90cz1bXTtcbi8vXG5jb25zdCBzbG90TWFwPW5ldyBNYXAoKTtcblxuLypcblxuXG4gICAgICovXG5jb25zdCBlbmNvZGVTbG90Q29tbW9uPShwYXNzYWJsZSk9PntcbmxldCBpbmRleD1zbG90TWFwLmdldChwYXNzYWJsZSk7XG5pZihpbmRleCE9PXVuZGVmaW5lZCl7XG4vL1xuYXNzZXJ0LnR5cGVvZihpbmRleCwnbnVtYmVyJyk7XG5yZXR1cm4gaGFyZGVuKHtpbmRleCxyZXBlYXQ6dHJ1ZX0pO1xuIH1cblxuaW5kZXg9c2xvdHMubGVuZ3RoO1xuY29uc3Qgc2xvdD1jb252ZXJ0VmFsVG9TbG90KHBhc3NhYmxlKTtcbnNsb3RzLnB1c2goc2xvdCk7XG5zbG90TWFwLnNldChwYXNzYWJsZSxpbmRleCk7XG5yZXR1cm4gaGFyZGVuKHtpbmRleCxyZXBlYXQ6ZmFsc2V9KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICAgKi9cbmNvbnN0IGVuY29kZUVycm9yQ29tbW9uPShlcnIsZW5jb2RlUmVjdXIpPT57XG5jb25zdCBtZXNzYWdlPWVuY29kZVJlY3VyKCBgJHtlcnIubWVzc2FnZX1gKTtcbmFzc2VydC50eXBlb2YobWVzc2FnZSwnc3RyaW5nJyk7XG5jb25zdCBuYW1lPWVuY29kZVJlY3VyKCBgJHtlcnIubmFtZX1gKTtcbmFzc2VydC50eXBlb2YobmFtZSwnc3RyaW5nJyk7XG4vL1xuLy9cbi8vXG5pZihlcnJvclRhZ2dpbmc9PT0nb24nKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5jb25zdCBlcnJvcklkPWVuY29kZVJlY3VyKG5leHRFcnJvcklkKCkpO1xuYXNzZXJ0LnR5cGVvZihlcnJvcklkLCdzdHJpbmcnKTtcbmFubm90YXRlRXJyb3IoZXJyLFggYFNlbnQgYXMgJHtlcnJvcklkfWApO1xubWFyc2hhbFNhdmVFcnJvcihlcnIpO1xucmV0dXJuIGhhcmRlbih7ZXJyb3JJZCxtZXNzYWdlLG5hbWV9KTtcbiB9ZWxzZXtcbnJldHVybiBoYXJkZW4oe21lc3NhZ2UsbmFtZX0pO1xuIH1cbiB9O1xuXG5pZihzZXJpYWxpemVCb2R5Rm9ybWF0PT09J2NhcGRhdGEnKXtcbi8qXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RUb0NhcERhdGE9KHBhc3NhYmxlLGlmYWNlPXVuZGVmaW5lZCk9PntcbmNvbnN0e2luZGV4LHJlcGVhdH09ZW5jb2RlU2xvdENvbW1vbihwYXNzYWJsZSk7XG5cbmlmKHJlcGVhdD09PXRydWV8fGlmYWNlPT09dW5kZWZpbmVkKXtcbnJldHVybiBoYXJkZW4oe1tRQ0xBU1NdOidzbG90JyxpbmRleH0pO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J3Nsb3QnLGlmYWNlLGluZGV4fSk7XG4gfVxuIH07XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhPSh2YWwsX2VuY29kZVJlY3VyKT0+XG5lbmNvZGVTbG90VG9DYXBEYXRhKHZhbCxnZXRJbnRlcmZhY2VPZih2YWwpKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YT0ocHJvbWlzZSxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb0NhcERhdGEocHJvbWlzZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgICAgICovXG5jb25zdCBlbmNvZGVFcnJvclRvQ2FwRGF0YT0oZXJyLGVuY29kZVJlY3VyKT0+e1xuY29uc3QgZXJyRGF0YT1lbmNvZGVFcnJvckNvbW1vbihlcnIsZW5jb2RlUmVjdXIpO1xucmV0dXJuIGhhcmRlbih7W1FDTEFTU106J2Vycm9yJywuLi5lcnJEYXRhfSk7XG4gfTtcblxuY29uc3QgZW5jb2RlVG9DYXBEYXRhPW1ha2VFbmNvZGVUb0NhcERhdGEoe1xuZW5jb2RlUmVtb3RhYmxlVG9DYXBEYXRhLFxuZW5jb2RlUHJvbWlzZVRvQ2FwRGF0YSxcbmVuY29kZUVycm9yVG9DYXBEYXRhfSk7XG5cblxuY29uc3QgZW5jb2RlZD1lbmNvZGVUb0NhcERhdGEocm9vdCk7XG5jb25zdCBib2R5PUpTT04uc3RyaW5naWZ5KGVuY29kZWQpO1xucmV0dXJuIGhhcmRlbih7XG5ib2R5LFxuc2xvdHN9KTtcblxuIH1lbHNlIGlmKHNlcmlhbGl6ZUJvZHlGb3JtYXQ9PT0nc21hbGxjYXBzJyl7XG4vKlxuXG5cblxuXG4gICAgICAgKi9cbmNvbnN0IGVuY29kZVNsb3RUb1NtYWxsY2Fwcz0ocHJlZml4LHBhc3NhYmxlLGlmYWNlPXVuZGVmaW5lZCk9PntcbmNvbnN0e2luZGV4LHJlcGVhdH09ZW5jb2RlU2xvdENvbW1vbihwYXNzYWJsZSk7XG5cbi8vXG5pZihyZXBlYXQ9PT10cnVlfHxpZmFjZT09PXVuZGVmaW5lZCl7XG5yZXR1cm4gYCR7cHJlZml4fSR7aW5kZXh9YDtcbiB9XG5yZXR1cm4gYCR7cHJlZml4fSR7aW5kZXh9LiR7aWZhY2V9YDtcbiB9O1xuXG5jb25zdCBlbmNvZGVSZW1vdGFibGVUb1NtYWxsY2Fwcz0ocmVtb3RhYmxlLF9lbmNvZGVSZWN1cik9PlxuZW5jb2RlU2xvdFRvU21hbGxjYXBzKCckJyxyZW1vdGFibGUsZ2V0SW50ZXJmYWNlT2YocmVtb3RhYmxlKSk7XG5cbmNvbnN0IGVuY29kZVByb21pc2VUb1NtYWxsY2Fwcz0ocHJvbWlzZSxfZW5jb2RlUmVjdXIpPT5cbmVuY29kZVNsb3RUb1NtYWxsY2FwcygnJicscHJvbWlzZSk7XG5cbmNvbnN0IGVuY29kZUVycm9yVG9TbWFsbGNhcHM9KGVycixlbmNvZGVSZWN1cik9PntcbmNvbnN0IGVyckRhdGE9ZW5jb2RlRXJyb3JDb21tb24oZXJyLGVuY29kZVJlY3VyKTtcbmNvbnN0e21lc3NhZ2UsLi4ucmVzdH09ZXJyRGF0YTtcbnJldHVybiBoYXJkZW4oeycjZXJyb3InOm1lc3NhZ2UsLi4ucmVzdH0pO1xuIH07XG5cbmNvbnN0IGVuY29kZVRvU21hbGxjYXBzPW1ha2VFbmNvZGVUb1NtYWxsY2Fwcyh7XG5lbmNvZGVSZW1vdGFibGVUb1NtYWxsY2FwcyxcbmVuY29kZVByb21pc2VUb1NtYWxsY2FwcyxcbmVuY29kZUVycm9yVG9TbWFsbGNhcHN9KTtcblxuXG5jb25zdCBlbmNvZGVkPWVuY29kZVRvU21hbGxjYXBzKHJvb3QpO1xuY29uc3Qgc21hbGxjYXBzQm9keT1KU09OLnN0cmluZ2lmeShlbmNvZGVkKTtcbnJldHVybiBoYXJkZW4oe1xuLy9cbi8vXG5ib2R5OiBgIyR7c21hbGxjYXBzQm9keX1gLFxuc2xvdHN9KTtcblxuIH1lbHNle1xuLy9cbnRocm93IEZhaWwgYFVucmVjb2duaXplZCBzZXJpYWxpemVCb2R5Rm9ybWF0OiAke3Eoc2VyaWFsaXplQm9keUZvcm1hdCl9YDtcbiB9XG4gfTtcblxuY29uc3QgbWFrZUZ1bGxSZXZpdmU9KHNsb3RzKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHZhbE1hcD1uZXcgTWFwKCk7XG5cbi8qXG5cblxuICAgICAqL1xuY29uc3QgZGVjb2RlU2xvdENvbW1vbj0oc2xvdERhdGEpPT57XG5jb25zdHtpZmFjZT11bmRlZmluZWQsaW5kZXgsLi4ucmVzdH09c2xvdERhdGE7XG5vd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuRmFpbCBgdW5leHBlY3RlZCBlbmNvZGVkIHNsb3QgcHJvcGVydGllcyAke3Eob3duS2V5cyhyZXN0KSl9YDtcbmNvbnN0IGV4dGFudD12YWxNYXAuZ2V0KGluZGV4KTtcbmlmKGV4dGFudCl7XG5yZXR1cm4gZXh0YW50O1xuIH1cbi8vXG4vL1xuY29uc3Qgc2xvdD1zbG90c1tOdW1iZXIoTmF0KGluZGV4KSldO1xuY29uc3QgdmFsPWNvbnZlcnRTbG90VG9WYWwoc2xvdCxpZmFjZSk7XG52YWxNYXAuc2V0KGluZGV4LHZhbCk7XG5yZXR1cm4gdmFsO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gICAgICovXG5jb25zdCBkZWNvZGVFcnJvckNvbW1vbj0oZXJyRGF0YSxkZWNvZGVSZWN1cik9PntcbmNvbnN0e1xuZXJyb3JJZD11bmRlZmluZWQsXG5tZXNzYWdlLFxubmFtZSxcbmNhdXNlPXVuZGVmaW5lZCxcbmVycm9ycz11bmRlZmluZWQsXG4uLi5yZXN0fT1cbmVyckRhdGE7XG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgZE5hbWU9ZGVjb2RlUmVjdXIobmFtZSk7XG5jb25zdCBkTWVzc2FnZT1kZWNvZGVSZWN1cihtZXNzYWdlKTtcbi8vXG5jb25zdCBkRXJyb3JJZD0vKiAgICAgICAgICAgICAgICAgKi9lcnJvcklkJiZkZWNvZGVSZWN1cihlcnJvcklkKTtcbmlmKHR5cGVvZiBkTmFtZSE9PSdzdHJpbmcnKXtcbnRocm93IEZhaWwgYGludmFsaWQgZXJyb3IgbmFtZSB0eXBlb2YgJHtxKHR5cGVvZiBkTmFtZSl9YDtcbiB9XG5pZih0eXBlb2YgZE1lc3NhZ2UhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnZhbGlkIGVycm9yIG1lc3NhZ2UgdHlwZW9mICR7cSh0eXBlb2YgZE1lc3NhZ2UpfWA7XG4gfVxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvcihkTmFtZSl8fEVycm9yO1xuY29uc3QgZXJyb3JOYW1lPVxuZEVycm9ySWQ9PT11bmRlZmluZWQ/XG4gYFJlbW90ZSR7ZXJyQ29uc3RydWN0b3IubmFtZX1gOlxuIGBSZW1vdGUke2VyckNvbnN0cnVjdG9yLm5hbWV9KCR7ZEVycm9ySWR9KWA7XG5jb25zdCBvcHRpb25zPXtcbmVycm9yTmFtZSxcbnNhbml0aXplOmZhbHNlfTtcblxuaWYoY2F1c2Upe1xub3B0aW9ucy5jYXVzZT1kZWNvZGVSZWN1cihjYXVzZSk7XG4gfVxuaWYoZXJyb3JzKXtcbm9wdGlvbnMuZXJyb3JzPWRlY29kZVJlY3VyKGVycm9ycyk7XG4gfVxuY29uc3QgcmF3RXJyb3I9bWFrZUVycm9yKGRNZXNzYWdlLGVyckNvbnN0cnVjdG9yLG9wdGlvbnMpO1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGRlc2NzPW9iamVjdE1hcChyZXN0LChkYXRhKT0+KHtcbnZhbHVlOmRlY29kZVJlY3VyKGRhdGEpLFxud3JpdGFibGU6ZmFsc2UsXG5lbnVtZXJhYmxlOmZhbHNlLFxuY29uZmlndXJhYmxlOmZhbHNlfSkpO1xuXG5kZWZpbmVQcm9wZXJ0aWVzKHJhd0Vycm9yLGRlc2NzKTtcbmhhcmRlbihyYXdFcnJvcik7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKHJhd0Vycm9yKTtcbiB9O1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGRlY29kZVJlbW90YWJsZU9yUHJvbWlzZUZyb21DYXBEYXRhPShyYXdUcmVlLF9kZWNvZGVSZWN1cik9PntcbmNvbnN0e1tRQ0xBU1NdOl8sLi4uc2xvdERhdGF9PXJhd1RyZWU7XG5yZXR1cm4gZGVjb2RlU2xvdENvbW1vbihzbG90RGF0YSk7XG4gfTtcblxuY29uc3QgZGVjb2RlRXJyb3JGcm9tQ2FwRGF0YT0ocmF3VHJlZSxkZWNvZGVSZWN1cik9PntcbmNvbnN0e1tRQ0xBU1NdOl8sLi4uZXJyRGF0YX09cmF3VHJlZTtcbnJldHVybiBkZWNvZGVFcnJvckNvbW1vbihlcnJEYXRhLGRlY29kZVJlY3VyKTtcbiB9O1xuXG5jb25zdCByZXZpdmVGcm9tQ2FwRGF0YT1tYWtlRGVjb2RlRnJvbUNhcERhdGEoe1xuZGVjb2RlUmVtb3RhYmxlRnJvbUNhcERhdGE6ZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVQcm9taXNlRnJvbUNhcERhdGE6ZGVjb2RlUmVtb3RhYmxlT3JQcm9taXNlRnJvbUNhcERhdGEsXG5kZWNvZGVFcnJvckZyb21DYXBEYXRhfSk7XG5cblxuY29uc3QgbWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzPShwcmVmaXgpPT57XG4vKlxuXG5cblxuICAgICAgICovXG5yZXR1cm4oc3RyaW5nRW5jb2RpbmcsX2RlY29kZVJlY3VyKT0+e1xuYXNzZXJ0KHN0cmluZ0VuY29kaW5nLmNoYXJBdCgwKT09PXByZWZpeCk7XG4vL1xuY29uc3QgaT1zdHJpbmdFbmNvZGluZy5pbmRleE9mKCcuJyk7XG5jb25zdCBpbmRleD1OdW1iZXIoc3RyaW5nRW5jb2Rpbmcuc2xpY2UoMSxpPDA/dW5kZWZpbmVkOmkpKTtcbi8vXG5jb25zdCBpZmFjZT1pPDA/dW5kZWZpbmVkOnN0cmluZ0VuY29kaW5nLnNsaWNlKGkrMSk7XG5yZXR1cm4gZGVjb2RlU2xvdENvbW1vbih7aWZhY2UsaW5kZXh9KTtcbiB9O1xuIH07XG5jb25zdCBkZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzPW1ha2VEZWNvZGVTbG90RnJvbVNtYWxsY2FwcygnJCcpO1xuY29uc3QgZGVjb2RlUHJvbWlzZUZyb21TbWFsbGNhcHM9bWFrZURlY29kZVNsb3RGcm9tU21hbGxjYXBzKCcmJyk7XG5cbmNvbnN0IGRlY29kZUVycm9yRnJvbVNtYWxsY2Fwcz0oZW5jb2RpbmcsZGVjb2RlUmVjdXIpPT57XG5jb25zdHsnI2Vycm9yJzptZXNzYWdlLC4uLnJlc3RFcnJEYXRhfT1lbmNvZGluZztcbiFoYXNPd25Qcm9wZXJ0eU9mKHJlc3RFcnJEYXRhLCdtZXNzYWdlJyl8fFxuRmFpbCBgdW5leHBlY3RlZCBlbmNvZGVkIGVycm9yIHByb3BlcnR5ICR7cSgnbWVzc2FnZScpfWA7XG5yZXR1cm4gZGVjb2RlRXJyb3JDb21tb24oe21lc3NhZ2UsLi4ucmVzdEVyckRhdGF9LGRlY29kZVJlY3VyKTtcbiB9O1xuXG5jb25zdCByZXZpdmVGcm9tU21hbGxjYXBzPW1ha2VEZWNvZGVGcm9tU21hbGxjYXBzKHtcbi8vXG5kZWNvZGVSZW1vdGFibGVGcm9tU21hbGxjYXBzLFxuLy9cbmRlY29kZVByb21pc2VGcm9tU21hbGxjYXBzLFxuZGVjb2RlRXJyb3JGcm9tU21hbGxjYXBzfSk7XG5cblxucmV0dXJuIGhhcmRlbih7cmV2aXZlRnJvbUNhcERhdGEscmV2aXZlRnJvbVNtYWxsY2Fwc30pO1xuIH07XG5cbi8qXG5cbiAgICovXG5jb25zdCBmcm9tQ2FwRGF0YT0oZGF0YSk9PntcbmNvbnN0e2JvZHksc2xvdHN9PWRhdGE7XG50eXBlb2YgYm9keT09PSdzdHJpbmcnfHxcbkZhaWwgYHVuc2VyaWFsaXplKCkgZ2l2ZW4gbm9uLWNhcGRhdGEgKC5ib2R5IGlzICR7Ym9keX0sIG5vdCBzdHJpbmcpYDtcbmlzQXJyYXkoZGF0YS5zbG90cyl8fFxuRmFpbCBgdW5zZXJpYWxpemUoKSBnaXZlbiBub24tY2FwZGF0YSAoLnNsb3RzIGFyZSBub3QgQXJyYXkpYDtcbmNvbnN0e3Jldml2ZUZyb21DYXBEYXRhLHJldml2ZUZyb21TbWFsbGNhcHN9PW1ha2VGdWxsUmV2aXZlKHNsb3RzKTtcbmxldCByZXN1bHQ7XG4vL1xuaWYoYm9keS5jaGFyQXQoMCk9PT0nIycpe1xuY29uc3Qgc21hbGxjYXBzQm9keT1ib2R5LnNsaWNlKDEpO1xuY29uc3QgZW5jb2Rpbmc9aGFyZGVuKEpTT04ucGFyc2Uoc21hbGxjYXBzQm9keSkpO1xucmVzdWx0PWhhcmRlbihyZXZpdmVGcm9tU21hbGxjYXBzKGVuY29kaW5nKSk7XG4gfWVsc2V7XG5jb25zdCByYXdUcmVlPWhhcmRlbihKU09OLnBhcnNlKGJvZHkpKTtcbnJlc3VsdD1oYXJkZW4ocmV2aXZlRnJvbUNhcERhdGEocmF3VHJlZSkpO1xuIH1cbi8vXG4vL1xuLy9cbmFzc2VydFBhc3NhYmxlKHJlc3VsdCk7XG5yZXR1cm4gKC8qICAgICAgICAgICAgICAgICAgICAgICovcmVzdWx0KTtcbiB9O1xuXG5yZXR1cm4gaGFyZGVuKHtcbnRvQ2FwRGF0YSxcbmZyb21DYXBEYXRhLFxuXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbnNlcmlhbGl6ZTp0b0NhcERhdGEsXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG51bnNlcmlhbGl6ZTpmcm9tQ2FwRGF0YX0pO1xuXG4gfTskaM2PX29uY2UubWFrZU1hcnNoYWwobWFrZU1hcnNoYWwpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZU1hcnNoYWwiOlsibWFrZU1hcnNoYWwiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAyA8wyssnAADLJwAAJQAAAEBlbmRvL21hcnNoYWwtdjEuNi4zL3NyYy9yYW5rT3JkZXIuanN7ImltcG9ydHMiOlsiQGVuZG8vcGFzcy1zdHlsZSIsIkBlbmRvL2Vycm9ycyIsIi4vZW5jb2RlUGFzc2FibGUuanMiXSwiZXhwb3J0cyI6WyJGdWxsUmFua0NvdmVyIiwiYXNzZXJ0UmFua1NvcnRlZCIsImNvbXBhcmF0b3JNaXJyb3JJbWFnZSIsImNvbXBhcmVBbnRpUmFuayIsImNvbXBhcmVSYW5rIiwiY292ZXJlZEVudHJpZXMiLCJnZXRJbmRleENvdmVyIiwiZ2V0UGFzc1N0eWxlQ292ZXIiLCJpbnRlcnNlY3RSYW5rQ292ZXJzIiwiaXNSYW5rU29ydGVkIiwibWFrZUNvbXBhcmF0b3JLaXQiLCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCIsInNvcnRCeVJhbmsiLCJ0cml2aWFsQ29tcGFyYXRvciIsInVuaW9uUmFua0NvdmVycyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGdldFRhZyxwYXNzU3R5bGVPZixuYW1lRm9yUGFzc2FibGVTeW1ib2wsRmFpbCxxLHBhc3NTdHlsZVByZWZpeGVzLHJlY29yZE5hbWVzLHJlY29yZFZhbHVlczskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Bhc3Mtc3R5bGVcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vZW5jb2RlUGFzc2FibGUuanNcIiwgW1tcInBhc3NTdHlsZVByZWZpeGVzXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZVByZWZpeGVzID0gJGjNj19hKV1dLFtcInJlY29yZE5hbWVzXCIsIFskaM2PX2EgPT4gKHJlY29yZE5hbWVzID0gJGjNj19hKV1dLFtcInJlY29yZFZhbHVlc1wiLCBbJGjNj19hID0+IChyZWNvcmRWYWx1ZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG4vKlxuXG5cbiAqL1xuXG5jb25zdHtlbnRyaWVzLGZyb21FbnRyaWVzLHNldFByb3RvdHlwZU9mLGlzfT1PYmplY3Q7XG5cbi8qXG5cblxuXG4gKi9cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IHNhbWVWYWx1ZVplcm89KHgseSk9Png9PT15fHxpcyh4LHkpO1xuXG5jb25zdCAgICAgICAgdHJpdmlhbENvbXBhcmF0b3I9KGxlZnQscmlnaHQpPT5cbi8vXG5sZWZ0PHJpZ2h0Py0xOmxlZnQ9PT1yaWdodD8wOjE7XG5cbi8qXG5cbiAqLyRozY9fb25jZS50cml2aWFsQ29tcGFyYXRvcih0cml2aWFsQ29tcGFyYXRvcik7XG5cbmNvbnN0IHBhc3NTdHlsZVJhbmtzPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5mcm9tRW50cmllcyhcbmVudHJpZXMocGFzc1N0eWxlUHJlZml4ZXMpXG4vL1xuLnNvcnQoKFtfbGVmdFN0eWxlLGxlZnRQcmVmaXhlc10sW19yaWdodFN0eWxlLHJpZ2h0UHJlZml4ZXNdKT0+e1xucmV0dXJuIHRyaXZpYWxDb21wYXJhdG9yKGxlZnRQcmVmaXhlcyxyaWdodFByZWZpeGVzKTtcbiB9KS5cbm1hcCgoW3Bhc3NTdHlsZSxwcmVmaXhlc10saW5kZXgpPT57XG4vL1xuLy9cbi8vXG5wcmVmaXhlcz09PVsuLi5wcmVmaXhlc10uc29ydCgpLmpvaW4oJycpfHxcbkZhaWwgYHVuc29ydGVkIHByZWZpeGVzIGZvciBwYXNzU3R5bGUgJHtxKHBhc3NTdHlsZSl9OiAke3EocHJlZml4ZXMpfWA7XG5jb25zdCBjb3Zlcj1bXG5wcmVmaXhlcy5jaGFyQXQoMCksXG5TdHJpbmcuZnJvbUNoYXJDb2RlKHByZWZpeGVzLmNoYXJDb2RlQXQocHJlZml4ZXMubGVuZ3RoLTEpKzEpXTtcblxucmV0dXJuW3Bhc3NTdHlsZSx7aW5kZXgsY292ZXJ9XTtcbiB9KSk7XG5cblxuc2V0UHJvdG90eXBlT2YocGFzc1N0eWxlUmFua3MsbnVsbCk7XG5oYXJkZW4ocGFzc1N0eWxlUmFua3MpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0UGFzc1N0eWxlQ292ZXI9KHBhc3NTdHlsZSk9PnBhc3NTdHlsZVJhbmtzW3Bhc3NTdHlsZV0uY292ZXI7JGjNj19vbmNlLmdldFBhc3NTdHlsZUNvdmVyKGdldFBhc3NTdHlsZUNvdmVyKTtcbmhhcmRlbihnZXRQYXNzU3R5bGVDb3Zlcik7XG5cbi8qXG5cbiAqL1xuY29uc3QgbWVtb09mU29ydGVkPW5ldyBXZWFrTWFwKCk7XG5cbi8qXG5cbiAqL1xuY29uc3QgY29tcGFyYXRvck1pcnJvckltYWdlcz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29tcGFyYXRvcktpdD0oY29tcGFyZVJlbW90YWJsZXM9KF94LF95KT0+TmFOKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNvbXBhcmF0b3I9KGxlZnQscmlnaHQpPT57XG5pZihzYW1lVmFsdWVaZXJvKGxlZnQscmlnaHQpKXtcbnJldHVybiAwO1xuIH1cbmNvbnN0IGxlZnRTdHlsZT1wYXNzU3R5bGVPZihsZWZ0KTtcbmNvbnN0IHJpZ2h0U3R5bGU9cGFzc1N0eWxlT2YocmlnaHQpO1xuaWYobGVmdFN0eWxlIT09cmlnaHRTdHlsZSl7XG5yZXR1cm4gdHJpdmlhbENvbXBhcmF0b3IoXG5wYXNzU3R5bGVSYW5rc1tsZWZ0U3R5bGVdLmluZGV4LFxucGFzc1N0eWxlUmFua3NbcmlnaHRTdHlsZV0uaW5kZXgpO1xuXG4gfVxuLypcblxuICAgICAqL1xuc3dpdGNoKGxlZnRTdHlsZSl7XG5jYXNlJ3JlbW90YWJsZSc6e1xucmV0dXJuIGNvbXBhcmVSZW1vdGFibGVzKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xuLy9cbi8vXG5yZXR1cm4gMDtcbiB9XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOntcbi8vXG4vL1xuaWYobGVmdDxyaWdodCl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbmFzc2VydChsZWZ0PnJpZ2h0KTtcbnJldHVybiAxO1xuIH1cbiB9XG5jYXNlJ3N5bWJvbCc6e1xucmV0dXJuIGNvbXBhcmF0b3IoXG5uYW1lRm9yUGFzc2FibGVTeW1ib2wobGVmdCksXG5uYW1lRm9yUGFzc2FibGVTeW1ib2wocmlnaHQpKTtcblxuIH1cbmNhc2UnbnVtYmVyJzp7XG4vL1xuaWYoTnVtYmVyLmlzTmFOKGxlZnQpKXtcbmFzc2VydCghTnVtYmVyLmlzTmFOKHJpZ2h0KSk7XG5yZXR1cm4gMTtcbiB9ZWxzZSBpZihOdW1iZXIuaXNOYU4ocmlnaHQpKXtcbnJldHVybi0xO1xuIH1cbi8vXG4vL1xuaWYobGVmdDxyaWdodCl7XG5yZXR1cm4tMTtcbiB9ZWxzZXtcbmFzc2VydChsZWZ0PnJpZ2h0KTtcbnJldHVybiAxO1xuIH1cbiB9XG5jYXNlJ2NvcHlSZWNvcmQnOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IGxlZnROYW1lcz1yZWNvcmROYW1lcyhsZWZ0KTtcbmNvbnN0IHJpZ2h0TmFtZXM9cmVjb3JkTmFtZXMocmlnaHQpO1xuXG5jb25zdCByZXN1bHQ9Y29tcGFyYXRvcihsZWZ0TmFtZXMscmlnaHROYW1lcyk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuY29uc3QgbGVmdFZhbHVlcz1yZWNvcmRWYWx1ZXMobGVmdCxsZWZ0TmFtZXMpO1xuY29uc3QgcmlnaHRWYWx1ZXM9cmVjb3JkVmFsdWVzKHJpZ2h0LHJpZ2h0TmFtZXMpO1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdFZhbHVlcyxyaWdodFZhbHVlcyk7XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG5jb25zdCBsZW49TWF0aC5taW4obGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xuY29uc3QgcmVzdWx0PWNvbXBhcmF0b3IobGVmdFtpXSxyaWdodFtpXSk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbi8vXG4vL1xucmV0dXJuIGNvbXBhcmF0b3IobGVmdC5sZW5ndGgscmlnaHQubGVuZ3RoKTtcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuLy9cbmNvbnN0IGxhYmVsQ29tcD1jb21wYXJhdG9yKGdldFRhZyhsZWZ0KSxnZXRUYWcocmlnaHQpKTtcbmlmKGxhYmVsQ29tcCE9PTApe1xucmV0dXJuIGxhYmVsQ29tcDtcbiB9XG5yZXR1cm4gY29tcGFyYXRvcihsZWZ0LnBheWxvYWQscmlnaHQucGF5bG9hZCk7XG4gfVxuZGVmYXVsdDp7XG50aHJvdyBGYWlsIGBVbnJlY29nbml6ZWQgcGFzc1N0eWxlOiAke3EobGVmdFN0eWxlKX1gO1xuIH19XG5cbi8qICAgICAgICAgICAgICAgKi9cbiB9O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgb3V0ZXJDb21wYXJhdG9yPSh4LHkpPT5cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL2NvbXBhcmF0b3IoeCx5KXx8MDtcblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGFudGlDb21wYXJhdG9yPSh4LHkpPT5vdXRlckNvbXBhcmF0b3IoeSx4KTtcblxubWVtb09mU29ydGVkLnNldChvdXRlckNvbXBhcmF0b3IsbmV3IFdlYWtTZXQoKSk7XG5tZW1vT2ZTb3J0ZWQuc2V0KGFudGlDb21wYXJhdG9yLG5ldyBXZWFrU2V0KCkpO1xuY29tcGFyYXRvck1pcnJvckltYWdlcy5zZXQob3V0ZXJDb21wYXJhdG9yLGFudGlDb21wYXJhdG9yKTtcbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuc2V0KGFudGlDb21wYXJhdG9yLG91dGVyQ29tcGFyYXRvcik7XG5cbnJldHVybiBoYXJkZW4oe2NvbXBhcmF0b3I6b3V0ZXJDb21wYXJhdG9yLGFudGlDb21wYXJhdG9yfSk7XG4gfTtcbi8qXG5cblxuICovJGjNj19vbmNlLm1ha2VDb21wYXJhdG9yS2l0KG1ha2VDb21wYXJhdG9yS2l0KTtcbmNvbnN0ICAgICAgICBjb21wYXJhdG9yTWlycm9ySW1hZ2U9KGNvbXBhcmF0b3IpPT5cbmNvbXBhcmF0b3JNaXJyb3JJbWFnZXMuZ2V0KGNvbXBhcmF0b3IpO1xuXG4vKlxuXG5cblxuICovJGjNj19vbmNlLmNvbXBhcmF0b3JNaXJyb3JJbWFnZShjb21wYXJhdG9yTWlycm9ySW1hZ2UpO1xuY29uc3QgICAgICAgIGlzUmFua1NvcnRlZD0ocGFzc2FibGVzLGNvbXBhcmUpPT57XG5jb25zdCBzdWJNZW1vT2ZTb3J0ZWQ9bWVtb09mU29ydGVkLmdldChjb21wYXJlKTtcbmFzc2VydChzdWJNZW1vT2ZTb3J0ZWQhPT11bmRlZmluZWQpO1xuaWYoc3ViTWVtb09mU29ydGVkLmhhcyhwYXNzYWJsZXMpKXtcbnJldHVybiB0cnVlO1xuIH1cbmFzc2VydChwYXNzU3R5bGVPZihwYXNzYWJsZXMpPT09J2NvcHlBcnJheScpO1xuZm9yKGxldCBpPTE7aTxwYXNzYWJsZXMubGVuZ3RoO2krPTEpe1xuaWYoY29tcGFyZShwYXNzYWJsZXNbaS0xXSxwYXNzYWJsZXNbaV0pPj0xKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxuc3ViTWVtb09mU29ydGVkLmFkZChwYXNzYWJsZXMpO1xucmV0dXJuIHRydWU7XG4gfTskaM2PX29uY2UuaXNSYW5rU29ydGVkKGlzUmFua1NvcnRlZCk7XG5oYXJkZW4oaXNSYW5rU29ydGVkKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRSYW5rU29ydGVkPShzb3J0ZWQsY29tcGFyZSk9PlxuaXNSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKXx8XG4vL1xuLy9cbkZhaWwgYE11c3QgYmUgcmFuayBzb3J0ZWQ6ICR7c29ydGVkfSB2cyAke3NvcnRCeVJhbmsoc29ydGVkLGNvbXBhcmUpfWA7JGjNj19vbmNlLmFzc2VydFJhbmtTb3J0ZWQoYXNzZXJ0UmFua1NvcnRlZCk7XG5oYXJkZW4oYXNzZXJ0UmFua1NvcnRlZCk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHNvcnRCeVJhbms9KHBhc3NhYmxlcyxjb21wYXJlKT0+e1xuaWYoQXJyYXkuaXNBcnJheShwYXNzYWJsZXMpKXtcbmhhcmRlbihwYXNzYWJsZXMpO1xuLy9cbi8vXG4vL1xuaWYoaXNSYW5rU29ydGVkKHBhc3NhYmxlcyxjb21wYXJlKSl7XG5yZXR1cm4gcGFzc2FibGVzO1xuIH1cbiB9XG5jb25zdCB1bnNvcnRlZD1bLi4ucGFzc2FibGVzXTtcbnVuc29ydGVkLmZvckVhY2goaGFyZGVuKTtcbmNvbnN0IHNvcnRlZD11bnNvcnRlZC5zb3J0KGNvbXBhcmUpO1xuLy9cbi8vXG4vL1xuaWYoY29tcGFyZSh0cnVlLHVuZGVmaW5lZCk+MCl7XG5sZXQgaT1zb3J0ZWQubGVuZ3RoLTE7XG53aGlsZShpPj0wJiZzb3J0ZWRbaV09PT11bmRlZmluZWQpaS09MTtcbmNvbnN0IG49c29ydGVkLmxlbmd0aC1pLTE7XG5pZihuPjAmJm48c29ydGVkLmxlbmd0aCl7XG5zb3J0ZWQuY29weVdpdGhpbihuLDApO1xuc29ydGVkLmZpbGwoLyogICAgICAgICAgICAqL3VuZGVmaW5lZCwwLG4pO1xuIH1cbiB9XG5oYXJkZW4oc29ydGVkKTtcbmNvbnN0IHN1Yk1lbW9PZlNvcnRlZD1tZW1vT2ZTb3J0ZWQuZ2V0KGNvbXBhcmUpO1xuYXNzZXJ0KHN1Yk1lbW9PZlNvcnRlZCE9PXVuZGVmaW5lZCk7XG5zdWJNZW1vT2ZTb3J0ZWQuYWRkKHNvcnRlZCk7XG5yZXR1cm4gc29ydGVkO1xuIH07JGjNj19vbmNlLnNvcnRCeVJhbmsoc29ydEJ5UmFuayk7XG5oYXJkZW4oc29ydEJ5UmFuayk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCByYW5rU2VhcmNoPShzb3J0ZWQsY29tcGFyZSxrZXksYmlhcz0nbGVmdE1vc3QnKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChzb3J0ZWQsY29tcGFyZSk7XG5sZXQgbGVmdD0wO1xubGV0IHJpZ2h0PXNvcnRlZC5sZW5ndGg7XG53aGlsZShsZWZ0PHJpZ2h0KXtcbmNvbnN0IG09TWF0aC5mbG9vcigobGVmdCtyaWdodCkvMik7XG5jb25zdCBjb21wPWNvbXBhcmUoc29ydGVkW21dLGtleSk7XG5pZihjb21wPD0tMXx8Y29tcD09PTAmJmJpYXM9PT0ncmlnaHRNb3N0Jyl7XG5sZWZ0PW0rMTtcbiB9ZWxzZXtcbmFzc2VydChjb21wPj0xfHxjb21wPT09MCYmYmlhcz09PSdsZWZ0TW9zdCcpO1xucmlnaHQ9bTtcbiB9XG4gfVxucmV0dXJuIGJpYXM9PT0nbGVmdE1vc3QnP2xlZnQ6cmlnaHQtMTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbmRleENvdmVyPShzb3J0ZWQsY29tcGFyZSxbbGVmdEtleSxyaWdodEtleV0pPT57XG5hc3NlcnRSYW5rU29ydGVkKHNvcnRlZCxjb21wYXJlKTtcbmNvbnN0IGxlZnRJbmRleD1yYW5rU2VhcmNoKHNvcnRlZCxjb21wYXJlLGxlZnRLZXksJ2xlZnRNb3N0Jyk7XG5jb25zdCByaWdodEluZGV4PXJhbmtTZWFyY2goc29ydGVkLGNvbXBhcmUscmlnaHRLZXksJ3JpZ2h0TW9zdCcpO1xucmV0dXJuW2xlZnRJbmRleCxyaWdodEluZGV4XTtcbiB9OyRozY9fb25jZS5nZXRJbmRleENvdmVyKGdldEluZGV4Q292ZXIpO1xuaGFyZGVuKGdldEluZGV4Q292ZXIpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBGdWxsUmFua0NvdmVyPWhhcmRlbihbJycsJ3snXSk7XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuRnVsbFJhbmtDb3ZlcihGdWxsUmFua0NvdmVyKTtcbmNvbnN0ICAgICAgICBjb3ZlcmVkRW50cmllcz0oc29ydGVkLFtsZWZ0SW5kZXgscmlnaHRJbmRleF0pPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBpdGVyYWJsZT1oYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmxldCBpPWxlZnRJbmRleDtcbnJldHVybiBoYXJkZW4oe1xubmV4dDooKT0+e1xuaWYoaTw9cmlnaHRJbmRleCl7XG5jb25zdCBlbGVtZW50PXNvcnRlZFtpXTtcbmkrPTE7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZTpbaSxlbGVtZW50XSxkb25lOmZhbHNlfSk7XG4gfWVsc2V7XG5yZXR1cm4gaGFyZGVuKHt2YWx1ZTp1bmRlZmluZWQsZG9uZTp0cnVlfSk7XG4gfVxuIH19KTtcblxuIH19KTtcblxucmV0dXJuIGl0ZXJhYmxlO1xuIH07JGjNj19vbmNlLmNvdmVyZWRFbnRyaWVzKGNvdmVyZWRFbnRyaWVzKTtcbmhhcmRlbihjb3ZlcmVkRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYXhSYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKT49MD9hOmI7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtaW5SYW5rPShjb21wYXJlLGEsYik9PmNvbXBhcmUoYSxiKTw9MD9hOmI7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICB1bmlvblJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCB1bmlvblJhbmtDb3ZlclBhaXI9KFtsZWZ0QSxyaWdodEFdLFtsZWZ0QixyaWdodEJdKT0+W1xubWluUmFuayhjb21wYXJlLGxlZnRBLGxlZnRCKSxcbm1heFJhbmsoY29tcGFyZSxyaWdodEEscmlnaHRCKV07XG5cbnJldHVybiBjb3ZlcnMucmVkdWNlKHVuaW9uUmFua0NvdmVyUGFpcixbJ3snLCcnXSk7XG4gfTskaM2PX29uY2UudW5pb25SYW5rQ292ZXJzKHVuaW9uUmFua0NvdmVycyk7XG5oYXJkZW4odW5pb25SYW5rQ292ZXJzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGludGVyc2VjdFJhbmtDb3ZlcnM9KGNvbXBhcmUsY292ZXJzKT0+e1xuLypcblxuXG5cbiAgICovXG5jb25zdCBpbnRlcnNlY3RSYW5rQ292ZXJQYWlyPShbbGVmdEEscmlnaHRBXSxbbGVmdEIscmlnaHRCXSk9Pltcbm1heFJhbmsoY29tcGFyZSxsZWZ0QSxsZWZ0QiksXG5taW5SYW5rKGNvbXBhcmUscmlnaHRBLHJpZ2h0QildO1xuXG5yZXR1cm4gY292ZXJzLnJlZHVjZShpbnRlcnNlY3RSYW5rQ292ZXJQYWlyLFsnJywneyddKTtcbiB9OyRozY9fb25jZS5pbnRlcnNlY3RSYW5rQ292ZXJzKGludGVyc2VjdFJhbmtDb3ZlcnMpO1xuXG5jb25zdCAgICAgICB7Y29tcGFyYXRvcjpjb21wYXJlUmFuayxhbnRpQ29tcGFyYXRvcjpjb21wYXJlQW50aVJhbmt9PVxubWFrZUNvbXBhcmF0b3JLaXQoKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5jb21wYXJlUmFuayhjb21wYXJlUmFuayk7JGjNj19vbmNlLmNvbXBhcmVBbnRpUmFuayhjb21wYXJlQW50aVJhbmspO1xuY29uc3QgICAgICAgIG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0PShsb25nTGl2ZWQ9ZmFsc2UpPT57XG5sZXQgbnVtU2Vlbj0wO1xuLy9cbi8vXG4vL1xuY29uc3QgTWFwQ29uc3RydWN0b3I9bG9uZ0xpdmVkP1dlYWtNYXA6TWFwO1xuY29uc3Qgc2Vlbj1uZXcgTWFwQ29uc3RydWN0b3IoKTtcbmNvbnN0IHRhZz0ocik9PntcbmlmKHNlZW4uaGFzKHIpKXtcbnJldHVybiBzZWVuLmdldChyKTtcbiB9XG5udW1TZWVuKz0xO1xuc2Vlbi5zZXQocixudW1TZWVuKTtcbnJldHVybiBudW1TZWVuO1xuIH07XG5jb25zdCBjb21wYXJlUmVtb3RhYmxlcz0oeCx5KT0+Y29tcGFyZVJhbmsodGFnKHgpLHRhZyh5KSk7XG5yZXR1cm4gbWFrZUNvbXBhcmF0b3JLaXQoY29tcGFyZVJlbW90YWJsZXMpO1xuIH07JGjNj19vbmNlLm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KTtcbmhhcmRlbihtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJ0cml2aWFsQ29tcGFyYXRvciI6WyJ0cml2aWFsQ29tcGFyYXRvciJdLCJnZXRQYXNzU3R5bGVDb3ZlciI6WyJnZXRQYXNzU3R5bGVDb3ZlciJdLCJtYWtlQ29tcGFyYXRvcktpdCI6WyJtYWtlQ29tcGFyYXRvcktpdCJdLCJjb21wYXJhdG9yTWlycm9ySW1hZ2UiOlsiY29tcGFyYXRvck1pcnJvckltYWdlIl0sImlzUmFua1NvcnRlZCI6WyJpc1JhbmtTb3J0ZWQiXSwiYXNzZXJ0UmFua1NvcnRlZCI6WyJhc3NlcnRSYW5rU29ydGVkIl0sInNvcnRCeVJhbmsiOlsic29ydEJ5UmFuayJdLCJnZXRJbmRleENvdmVyIjpbImdldEluZGV4Q292ZXIiXSwiRnVsbFJhbmtDb3ZlciI6WyJGdWxsUmFua0NvdmVyIl0sImNvdmVyZWRFbnRyaWVzIjpbImNvdmVyZWRFbnRyaWVzIl0sInVuaW9uUmFua0NvdmVycyI6WyJ1bmlvblJhbmtDb3ZlcnMiXSwiaW50ZXJzZWN0UmFua0NvdmVycyI6WyJpbnRlcnNlY3RSYW5rQ292ZXJzIl0sImNvbXBhcmVSYW5rIjpbImNvbXBhcmVSYW5rIl0sImNvbXBhcmVBbnRpUmFuayI6WyJjb21wYXJlQW50aVJhbmsiXSwibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiOlsibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABURLJnkBAAB5AQAAIQAAAEBlbmRvL21hcnNoYWwtdjEuNi4zL3NyYy90eXBlcy5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABlUZZiiAUAAIgFAAAeAAAAQGVuZG8vbmF0LXY1LjAuMTQvc3JjL2luZGV4LmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJOYXQiLCJpc05hdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaXNOYXQsICduYW1lJywge3ZhbHVlOiBcImlzTmF0XCJ9KTskaM2PX29uY2UuaXNOYXQoaXNOYXQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShOYXQsICduYW1lJywge3ZhbHVlOiBcIk5hdFwifSk7JGjNj19vbmNlLk5hdChOYXQpOyAgIC8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiBpc05hdChhbGxlZ2VkTnVtKXtcbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J2JpZ2ludCcpe1xucmV0dXJuIGFsbGVnZWROdW0+PTA7XG4gfVxuaWYodHlwZW9mIGFsbGVnZWROdW0hPT0nbnVtYmVyJyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5yZXR1cm4gTnVtYmVyLmlzU2FmZUludGVnZXIoYWxsZWdlZE51bSkmJmFsbGVnZWROdW0+PTA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuZnVuY3Rpb24gTmF0KGFsbGVnZWROdW0pe1xuaWYodHlwZW9mIGFsbGVnZWROdW09PT0nYmlnaW50Jyl7XG5pZihhbGxlZ2VkTnVtPDApe1xudGhyb3cgUmFuZ2VFcnJvciggYCR7YWxsZWdlZE51bX0gaXMgbmVnYXRpdmVgKTtcbiB9XG5yZXR1cm4gYWxsZWdlZE51bTtcbiB9XG5cbmlmKHR5cGVvZiBhbGxlZ2VkTnVtPT09J251bWJlcicpe1xuaWYoIU51bWJlci5pc1NhZmVJbnRlZ2VyKGFsbGVnZWROdW0pKXtcbnRocm93IFJhbmdlRXJyb3IoIGAke2FsbGVnZWROdW19IGlzIG5vdCBhIHNhZmUgaW50ZWdlcmApO1xuIH1cbmlmKGFsbGVnZWROdW08MCl7XG50aHJvdyBSYW5nZUVycm9yKCBgJHthbGxlZ2VkTnVtfSBpcyBuZWdhdGl2ZWApO1xuIH1cbnJldHVybiBCaWdJbnQoYWxsZWdlZE51bSk7XG4gfVxuXG50aHJvdyBUeXBlRXJyb3IoXG4gYCR7YWxsZWdlZE51bX0gaXMgYSAke3R5cGVvZiBhbGxlZ2VkTnVtfSBidXQgbXVzdCBiZSBhIGJpZ2ludCBvciBhIG51bWJlcmApO1xuXG4gfVxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNOYXQiOlsiaXNOYXQiXSwiTmF0IjpbIk5hdCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABghYcIbgoAAG4KAAAgAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40LjgvaW5kZXguanN7ImltcG9ydHMiOlsiLi9zcmMvaXRlci1oZWxwZXJzLmpzIiwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3NyYy9lcnJvci5qcyIsIi4vc3JjL3JlbW90YWJsZS5qcyIsIi4vc3JjL3N5bWJvbC5qcyIsIi4vc3JjL3N0cmluZy5qcyIsIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIiwiLi9zcmMvbWFrZVRhZ2dlZC5qcyIsIi4vc3JjL21ha2UtZmFyLmpzIiwiLi9zcmMvdHlwZUd1YXJkcy5qcyIsIi4vc3JjL2RlZXBseUZ1bGZpbGxlZC5qcyIsIi4vc3JjL3R5cGVzLmpzIl0sImV4cG9ydHMiOlsiRmFyIiwiRmFyIiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJmaWx0ZXJJdGVyYWJsZSIsImZpbHRlckl0ZXJhYmxlIiwiaXNFcnJvckxpa2UiLCJpc0Vycm9yTGlrZSIsImlzT2JqZWN0IiwiaXNPYmplY3QiLCJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSIsImlzUGFzc2FibGVTeW1ib2wiLCJpc1Bhc3NhYmxlU3ltYm9sIixudWxsLG51bGxdLCJyZWV4cG9ydHMiOlsiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9zcmMvaXRlci1oZWxwZXJzLmpzXCIsIFtdXSxbXCIuL3NyYy9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvZXJyb3IuanNcIiwgW11dLFtcIi4vc3JjL3JlbW90YWJsZS5qc1wiLCBbXV0sW1wiLi9zcmMvc3ltYm9sLmpzXCIsIFtdXSxbXCIuL3NyYy9zdHJpbmcuanNcIiwgW11dLFtcIi4vc3JjL3Bhc3NTdHlsZU9mLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlVGFnZ2VkLmpzXCIsIFtdXSxbXCIuL3NyYy9tYWtlLWZhci5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZUd1YXJkcy5qc1wiLCBbXV0sW1wiLi9zcmMvZGVlcGx5RnVsZmlsbGVkLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7Ii4vc3JjL2l0ZXItaGVscGVycy5qcyI6W1sibWFwSXRlcmFibGUiLCJtYXBJdGVyYWJsZSJdLFsiZmlsdGVySXRlcmFibGUiLCJmaWx0ZXJJdGVyYWJsZSJdXSwiLi9zcmMvcGFzc1N0eWxlLWhlbHBlcnMuanMiOltbIlBBU1NfU1RZTEUiLCJQQVNTX1NUWUxFIl0sWyJpc09iamVjdCIsImlzT2JqZWN0Il0sWyJhc3NlcnRDaGVja2VyIiwiYXNzZXJ0Q2hlY2tlciJdLFsiZ2V0VGFnIiwiZ2V0VGFnIl0sWyJoYXNPd25Qcm9wZXJ0eU9mIiwiaGFzT3duUHJvcGVydHlPZiJdXSwiLi9zcmMvZXJyb3IuanMiOltbImdldEVycm9yQ29uc3RydWN0b3IiLCJnZXRFcnJvckNvbnN0cnVjdG9yIl0sWyJpc0Vycm9yTGlrZSIsImlzRXJyb3JMaWtlIl1dLCIuL3NyYy9yZW1vdGFibGUuanMiOltbImdldEludGVyZmFjZU9mIiwiZ2V0SW50ZXJmYWNlT2YiXV0sIi4vc3JjL3N5bWJvbC5qcyI6W1siYXNzZXJ0UGFzc2FibGVTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZVN5bWJvbCJdLFsiaXNQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiXSxbIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCIsIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCJdLFsicGFzc2FibGVTeW1ib2xGb3JOYW1lIiwicGFzc2FibGVTeW1ib2xGb3JOYW1lIl1dLCIuL3NyYy9zdHJpbmcuanMiOltbImlzV2VsbEZvcm1lZFN0cmluZyIsImlzV2VsbEZvcm1lZFN0cmluZyJdLFsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciXSxbImFzc2VydFBhc3NhYmxlU3RyaW5nIiwiYXNzZXJ0UGFzc2FibGVTdHJpbmciXV0sIi4vc3JjL3Bhc3NTdHlsZU9mLmpzIjpbWyJwYXNzU3R5bGVPZiIsInBhc3NTdHlsZU9mIl0sWyJpc1Bhc3NhYmxlIiwiaXNQYXNzYWJsZSJdLFsiYXNzZXJ0UGFzc2FibGUiLCJhc3NlcnRQYXNzYWJsZSJdLFsidG9QYXNzYWJsZUVycm9yIiwidG9QYXNzYWJsZUVycm9yIl0sWyJ0b1Rocm93YWJsZSIsInRvVGhyb3dhYmxlIl1dLCIuL3NyYy9tYWtlVGFnZ2VkLmpzIjpbWyJtYWtlVGFnZ2VkIiwibWFrZVRhZ2dlZCJdXSwiLi9zcmMvbWFrZS1mYXIuanMiOltbIlJlbW90YWJsZSIsIlJlbW90YWJsZSJdLFsiRmFyIiwiRmFyIl0sWyJUb0ZhckZ1bmN0aW9uIiwiVG9GYXJGdW5jdGlvbiJdLFsiR0VUX01FVEhPRF9OQU1FUyIsIkdFVF9NRVRIT0RfTkFNRVMiXV0sIi4vc3JjL3R5cGVHdWFyZHMuanMiOltbImFzc2VydFJlY29yZCIsImFzc2VydFJlY29yZCJdLFsiYXNzZXJ0Q29weUFycmF5IiwiYXNzZXJ0Q29weUFycmF5Il0sWyJhc3NlcnRSZW1vdGFibGUiLCJhc3NlcnRSZW1vdGFibGUiXSxbImlzUmVtb3RhYmxlIiwiaXNSZW1vdGFibGUiXSxbImlzUmVjb3JkIiwiaXNSZWNvcmQiXSxbImlzQ29weUFycmF5IiwiaXNDb3B5QXJyYXkiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJqP4mGDBgAAgwYAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvY29weUFycmF5LmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJDb3B5QXJyYXlIZWxwZXIiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLGFzc2VydENoZWNrZXIsZ2V0T3duRGF0YURlc2NyaXB0b3I7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJnZXRPd25EYXRhRGVzY3JpcHRvclwiLCBbJGjNj19hID0+IChnZXRPd25EYXRhRGVzY3JpcHRvciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cbmNvbnN0e2dldFByb3RvdHlwZU9mfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheSxwcm90b3R5cGU6YXJyYXlQcm90b3R5cGV9PUFycmF5O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjYW5CZVZhbGlkPShjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+XG5pc0FycmF5KGNhbmRpZGF0ZSl8fFxuISFjaGVjayYmY2hlY2soZmFsc2UsWCBgQXJyYXkgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIENvcHlBcnJheUhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidjb3B5QXJyYXknLFxuXG5jYW5CZVZhbGlkLFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlLHBhc3NTdHlsZU9mUmVjdXIpPT57XG5jYW5CZVZhbGlkKGNhbmRpZGF0ZSxhc3NlcnRDaGVja2VyKTtcbmdldFByb3RvdHlwZU9mKGNhbmRpZGF0ZSk9PT1hcnJheVByb3RvdHlwZXx8XG5hc3NlcnQuZmFpbChYIGBNYWxmb3JtZWQgYXJyYXk6ICR7Y2FuZGlkYXRlfWAsVHlwZUVycm9yKTtcbi8vXG4vL1xuY29uc3QgbGVuPS8qICAgICAgICAgICAgICAgICAqL1xuZ2V0T3duRGF0YURlc2NyaXB0b3IoY2FuZGlkYXRlLCdsZW5ndGgnLGZhbHNlLGFzc2VydENoZWNrZXIpLnZhbHVlO1xuXG4vL1xuLy9cbmZvcihsZXQgaT0wO2k8bGVuO2krPTEpe1xucGFzc1N0eWxlT2ZSZWN1cihcbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSxpLHRydWUsYXNzZXJ0Q2hlY2tlcikudmFsdWUpO1xuXG4gfVxuLy9cbm93bktleXMoY2FuZGlkYXRlKS5sZW5ndGg9PT1sZW4rMXx8XG5hc3NlcnQuZmFpbChYIGBBcnJheXMgbXVzdCBub3QgaGF2ZSBub24taW5kZXhlczogJHtjYW5kaWRhdGV9YCxUeXBlRXJyb3IpO1xuIH19KTskaM2PX29uY2UuQ29weUFycmF5SGVscGVyKENvcHlBcnJheUhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJDb3B5QXJyYXlIZWxwZXIiOlsiQ29weUFycmF5SGVscGVyIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAALY7xrxYCAAAWAgAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvY29weVJlY29yZC5qc3siaW1wb3J0cyI6WyIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiQ29weVJlY29yZEhlbHBlciJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsY2FuQmVNZXRob2QsZ2V0T3duRGF0YURlc2NyaXB0b3IsQ1g7JGjNj19pbXBvcnRzKFtbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiY2FuQmVNZXRob2RcIiwgWyRozY9fYSA9PiAoY2FuQmVNZXRob2QgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0UHJvdG90eXBlT2YscHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgY2hlY2tPYmplY3RQcm90b3R5cGU9KGNhbmRpZGF0ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG5nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpPT09b2JqZWN0UHJvdG90eXBlfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBSZWNvcmRzIG11c3QgaW5oZXJpdCBmcm9tIE9iamVjdC5wcm90b3R5cGU6ICR7Y2FuZGlkYXRlfWApO1xuXG4gfTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCBjaGVja1Byb3BlcnR5Q2FuQmVWYWxpZD0oY2FuZGlkYXRlLGtleSx2YWx1ZSxjaGVjaz11bmRlZmluZWQpPT57XG5yZXR1cm4oXG4odHlwZW9mIGtleT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUmVjb3JkcyBjYW4gb25seSBoYXZlIHN0cmluZy1uYW1lZCBwcm9wZXJ0aWVzOiAke2NhbmRpZGF0ZX1gKSYmKFxuIWNhbkJlTWV0aG9kKHZhbHVlKXx8XG4hIWNoZWNrJiZcbi8vXG5DWChcbmNoZWNrKVxuIGBSZWNvcmRzIGNhbm5vdCBjb250YWluIG5vbi1mYXIgZnVuY3Rpb25zIGJlY2F1c2UgdGhleSBtYXkgYmUgbWV0aG9kcyBvZiBhbiBpbXBsaWNpdCBSZW1vdGFibGU6ICR7Y2FuZGlkYXRlfWApKTtcblxuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgQ29weVJlY29yZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOidjb3B5UmVjb3JkJyxcblxuY2FuQmVWYWxpZDooY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbnJldHVybihcbmNoZWNrT2JqZWN0UHJvdG90eXBlKGNhbmRpZGF0ZSxjaGVjaykmJlxuLy9cbi8vXG5vd25LZXlzKGNhbmRpZGF0ZSkuZXZlcnkoKGtleSk9PlxuY2hlY2tQcm9wZXJ0eUNhbkJlVmFsaWQoY2FuZGlkYXRlLGtleSxjYW5kaWRhdGVba2V5XSxjaGVjaykpKTtcblxuXG4gfSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tPYmplY3RQcm90b3R5cGUoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuLy9cbmZvcihjb25zdCBuYW1lIG9mIG93bktleXMoY2FuZGlkYXRlKSl7XG5jb25zdHt2YWx1ZX09Z2V0T3duRGF0YURlc2NyaXB0b3IoXG5jYW5kaWRhdGUsXG5uYW1lLFxudHJ1ZSxcbmFzc2VydENoZWNrZXIpO1xuXG5jaGVja1Byb3BlcnR5Q2FuQmVWYWxpZChjYW5kaWRhdGUsbmFtZSx2YWx1ZSxhc3NlcnRDaGVja2VyKTtcbnBhc3NTdHlsZU9mUmVjdXIodmFsdWUpO1xuIH1cbiB9fSk7JGjNj19vbmNlLkNvcHlSZWNvcmRIZWxwZXIoQ29weVJlY29yZEhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJDb3B5UmVjb3JkSGVscGVyIjpbIkNvcHlSZWNvcmRIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAR4T6L4UKAACFCgAALgAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9kZWVwbHlGdWxmaWxsZWQuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0IiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyIsIi4vcGFzc1N0eWxlT2YuanMiLCIuL21ha2VUYWdnZWQuanMiXSwiZXhwb3J0cyI6WyJkZWVwbHlGdWxmaWxsZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHEsRSxpc1Byb21pc2UsZ2V0VGFnLGlzT2JqZWN0LHBhc3NTdHlsZU9mLG1ha2VUYWdnZWQ7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9ldmVudHVhbC1zZW5kXCIsIFtbXCJFXCIsIFskaM2PX2EgPT4gKEUgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9wcm9taXNlLWtpdFwiLCBbW1wiaXNQcm9taXNlXCIsIFskaM2PX2EgPT4gKGlzUHJvbWlzZSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiaXNPYmplY3RcIiwgWyRozY9fYSA9PiAoaXNPYmplY3QgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZU9mLmpzXCIsIFtbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXV1dLFtcIi4vbWFrZVRhZ2dlZC5qc1wiLCBbW1wibWFrZVRhZ2dlZFwiLCBbJGjNj19hID0+IChtYWtlVGFnZ2VkID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cbi8qXG5cbiAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7ZnJvbUVudHJpZXN9PU9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZGVlcGx5RnVsZmlsbGVkPWFzeW5jKHZhbCk9Pntcbi8vXG4vL1xuLy9cblxuaWYoIWlzT2JqZWN0KHZhbCkpe1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovdmFsKTtcbiB9XG5pZihpc1Byb21pc2UodmFsKSl7XG5yZXR1cm4gRS53aGVuKHZhbCwobm9ucCk9PmRlZXBseUZ1bGZpbGxlZChub25wKSk7XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHZhbCk7XG5zd2l0Y2gocGFzc1N0eWxlKXtcbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCBuYW1lcz0vKiAgICAgICAgICAgICAgICAgICAqL293bktleXMocmVjKTtcbmNvbnN0IHZhbFBzPW5hbWVzLm1hcCgobmFtZSk9PmRlZXBseUZ1bGZpbGxlZChyZWNbbmFtZV0pKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PlxuaGFyZGVuKGZyb21FbnRyaWVzKHZhbHMubWFwKChjLGkpPT5bbmFtZXNbaV0sY10pKSkpO1xuXG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbmNvbnN0IGFycj0vKiAgICAgICAgICAgICAgICAgICAgKi92YWw7XG5jb25zdCB2YWxQcz1hcnIubWFwKChwKT0+ZGVlcGx5RnVsZmlsbGVkKHApKTtcbi8vXG5yZXR1cm4gRS53aGVuKFByb21pc2UuYWxsKHZhbFBzKSwodmFscyk9PmhhcmRlbih2YWxzKSk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRnZD0vKiAgICAgICAgICAgICAgICAgICAgICovdmFsO1xuY29uc3QgdGFnPWdldFRhZyh0Z2QpO1xuLy9cbnJldHVybiBFLndoZW4oZGVlcGx5RnVsZmlsbGVkKHRnZC5wYXlsb2FkKSwocGF5bG9hZCk9PlxubWFrZVRhZ2dlZCh0YWcscGF5bG9hZCkpO1xuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmNvbnN0IHJlbT0vKiAgICAgICAgICAgICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIHJlbTtcbiB9XG5jYXNlJ2Vycm9yJzp7XG5jb25zdCBlcnI9LyogICAgICAgICAgICAgICAgKi92YWw7XG4vL1xucmV0dXJuIGVycjtcbiB9XG5jYXNlJ3Byb21pc2UnOntcbmNvbnN0IHByb209LyogICAgICAgICAgICAgICAgICAqLyAvKiAgICAgICAgICAgICAgICAgICovdmFsO1xucmV0dXJuIEUud2hlbihwcm9tLChub25wKT0+ZGVlcGx5RnVsZmlsbGVkKG5vbnApKTtcbiB9XG5kZWZhdWx0OntcbnRocm93IGFzc2VydC5mYWlsKFggYFVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShwYXNzU3R5bGUpfWAsVHlwZUVycm9yKTtcbiB9fVxuXG4gfTskaM2PX29uY2UuZGVlcGx5RnVsZmlsbGVkKGRlZXBseUZ1bGZpbGxlZCk7XG5oYXJkZW4oZGVlcGx5RnVsZmlsbGVkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImRlZXBseUZ1bGZpbGxlZCI6WyJkZWVwbHlGdWxmaWxsZWQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAvmDjY2MSAABjEgAAJAAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9lcnJvci5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiRXJyb3JIZWxwZXIiLCJjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvciIsImNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjIiwiZ2V0RXJyb3JDb25zdHJ1Y3RvciIsImlzRXJyb3JMaWtlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgcSxhc3NlcnRDaGVja2VyLENYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e2dldFByb3RvdHlwZU9mLGdldE93blByb3BlcnR5RGVzY3JpcHRvcnMsaGFzT3duLGVudHJpZXN9PU9iamVjdDtcblxuLy9cbi8vXG5jb25zdCBlcnJvckNvbnN0cnVjdG9ycz1uZXcgTWFwKFxuLy9cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbltcblsnRXJyb3InLEVycm9yXSxcblsnRXZhbEVycm9yJyxFdmFsRXJyb3JdLFxuWydSYW5nZUVycm9yJyxSYW5nZUVycm9yXSxcblsnUmVmZXJlbmNlRXJyb3InLFJlZmVyZW5jZUVycm9yXSxcblsnU3ludGF4RXJyb3InLFN5bnRheEVycm9yXSxcblsnVHlwZUVycm9yJyxUeXBlRXJyb3JdLFxuWydVUklFcnJvcicsVVJJRXJyb3JdXG5cbi8vXG4vL1xuLy9cbi8vXG5dKTtcblxuXG5pZih0eXBlb2YgQWdncmVnYXRlRXJyb3IhPT0ndW5kZWZpbmVkJyl7XG4vL1xuZXJyb3JDb25zdHJ1Y3RvcnMuc2V0KCdBZ2dyZWdhdGVFcnJvcicsQWdncmVnYXRlRXJyb3IpO1xuIH1cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRFcnJvckNvbnN0cnVjdG9yPShuYW1lKT0+ZXJyb3JDb25zdHJ1Y3RvcnMuZ2V0KG5hbWUpOyRozY9fb25jZS5nZXRFcnJvckNvbnN0cnVjdG9yKGdldEVycm9yQ29uc3RydWN0b3IpO1xuaGFyZGVuKGdldEVycm9yQ29uc3RydWN0b3IpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBjaGVja0Vycm9yTGlrZT0oY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9Pntcbi8vXG5yZXR1cm4oXG5jYW5kaWRhdGUgaW5zdGFuY2VvZiBFcnJvcnx8XG4hIWNoZWNrJiZDWChjaGVjaykgYEVycm9yIGV4cGVjdGVkOiAke2NhbmRpZGF0ZX1gKTtcblxuIH07XG5oYXJkZW4oY2hlY2tFcnJvckxpa2UpO1xuLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNFcnJvckxpa2U9KGNhbmRpZGF0ZSk9PmNoZWNrRXJyb3JMaWtlKGNhbmRpZGF0ZSk7JGjNj19vbmNlLmlzRXJyb3JMaWtlKGlzRXJyb3JMaWtlKTtcbmhhcmRlbihpc0Vycm9yTGlrZSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2M9KFxucHJvcE5hbWUsXG5kZXNjLFxucGFzc1N0eWxlT2ZSZWN1cixcbmNoZWNrPXVuZGVmaW5lZCk9Plxue1xuaWYoZGVzYy5lbnVtZXJhYmxlKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciAke3EoXG5wcm9wTmFtZSlcbiB9IG93biBwcm9wZXJ0eSBtdXN0IG5vdCBiZSBlbnVtZXJhYmxlOiAke2Rlc2N9YCk7XG5cbiB9XG5pZighaGFzT3duKGRlc2MsJ3ZhbHVlJykpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3QgYmUgYSBkYXRhIHByb3BlcnR5OiAke2Rlc2N9YCk7XG5cbiB9XG5jb25zdHt2YWx1ZX09ZGVzYztcbnN3aXRjaChwcm9wTmFtZSl7XG5jYXNlJ21lc3NhZ2UnOlxuY2FzZSdzdGFjayc6e1xucmV0dXJuKFxudHlwZW9mIHZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmc6ICR7dmFsdWV9YCk7XG5cbiB9XG5jYXNlJ2NhdXNlJzp7XG4vL1xucmV0dXJuIGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKHZhbHVlLHBhc3NTdHlsZU9mUmVjdXIsY2hlY2spO1xuIH1cbmNhc2UnZXJyb3JzJzp7XG5pZighQXJyYXkuaXNBcnJheSh2YWx1ZSl8fHBhc3NTdHlsZU9mUmVjdXIodmFsdWUpIT09J2NvcHlBcnJheScpe1xucmV0dXJuKFxuISFjaGVjayYmXG5DWChjaGVjaykgYFBhc3NhYmxlIEVycm9yICR7cShcbnByb3BOYW1lKVxuIH0gb3duIHByb3BlcnR5IG11c3QgYmUgYSBjb3B5QXJyYXk6ICR7dmFsdWV9YCk7XG5cbiB9XG5yZXR1cm4gdmFsdWUuZXZlcnkoKGVycik9PlxuLy9cbmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKGVycixwYXNzU3R5bGVPZlJlY3VyLGNoZWNrKSk7XG5cbiB9XG5kZWZhdWx0OntcbmJyZWFrO1xuIH19XG5cbnJldHVybihcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBQYXNzYWJsZSBFcnJvciBoYXMgZXh0cmEgdW5wYXNzZWQgcHJvcGVydHkgJHtxKHByb3BOYW1lKX1gKTtcblxuIH07JGjNj19vbmNlLmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKTtcbmhhcmRlbihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yPShcbmNhbmRpZGF0ZSxcbnBhc3NTdHlsZU9mUmVjdXIsXG5jaGVjaz11bmRlZmluZWQpPT5cbntcbmlmKCFjaGVja0Vycm9yTGlrZShjYW5kaWRhdGUsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdCBwcm90bz1nZXRQcm90b3R5cGVPZihjYW5kaWRhdGUpO1xuY29uc3R7bmFtZX09cHJvdG87XG5jb25zdCBlcnJDb25zdHJ1Y3Rvcj1nZXRFcnJvckNvbnN0cnVjdG9yKG5hbWUpO1xuaWYoZXJyQ29uc3RydWN0b3I9PT11bmRlZmluZWR8fGVyckNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PXByb3RvKXtcbnJldHVybihcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgUGFzc2FibGUgRXJyb3IgbXVzdCBpbmhlcml0IGZyb20gYW4gZXJyb3IgY2xhc3MgLnByb3RvdHlwZTogJHtjYW5kaWRhdGV9YCk7XG5cbiB9XG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGNhbmRpZGF0ZSk7XG5pZighKCdtZXNzYWdlJ2luIGRlc2NzKSl7XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFBhc3NhYmxlIEVycm9yIG11c3QgaGF2ZSBhbiBvd24gXCJtZXNzYWdlXCIgc3RyaW5nIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKTtcblxuIH1cblxucmV0dXJuIGVudHJpZXMoZGVzY3MpLmV2ZXJ5KChbcHJvcE5hbWUsZGVzY10pPT5cbmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKFxucHJvcE5hbWUsXG5kZXNjLFxucGFzc1N0eWxlT2ZSZWN1cixcbmNoZWNrKSk7XG5cblxuIH07JGjNj19vbmNlLmNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKGNoZWNrUmVjdXJzaXZlbHlQYXNzYWJsZUVycm9yKTtcbmhhcmRlbihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcik7XG5cbi8qXG5cbiAqL1xuY29uc3QgICAgICAgIEVycm9ySGVscGVyPWhhcmRlbih7XG5zdHlsZU5hbWU6J2Vycm9yJyxcblxuY2FuQmVWYWxpZDpjaGVja0Vycm9yTGlrZSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihjYW5kaWRhdGUscGFzc1N0eWxlT2ZSZWN1cixhc3NlcnRDaGVja2VyKX0pOyRozY9fb25jZS5FcnJvckhlbHBlcihFcnJvckhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRFcnJvckNvbnN0cnVjdG9yIjpbImdldEVycm9yQ29uc3RydWN0b3IiXSwiaXNFcnJvckxpa2UiOlsiaXNFcnJvckxpa2UiXSwiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MiOlsiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MiXSwiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IiOlsiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IiXSwiRXJyb3JIZWxwZXIiOlsiRXJyb3JIZWxwZXIiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAJuaYAb4FAAC+BQAAKwAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9pdGVyLWhlbHBlcnMuanN7ImltcG9ydHMiOlsiLi9tYWtlLWZhci5qcyJdLCJleHBvcnRzIjpbImZpbHRlckl0ZXJhYmxlIiwibWFwSXRlcmFibGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYXI7JGjNj19pbXBvcnRzKFtbXCIuL21ha2UtZmFyLmpzXCIsIFtbXCJGYXJcIiwgWyRozY9fYSA9PiAoRmFyID0gJGjNj19hKV1dXV1dKTsgICBcblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcEl0ZXJhYmxlPShiYXNlSXRlcmFibGUsZnVuYyk9PlxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbkZhcignbWFwcGVkIGl0ZXJhYmxlJyx7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuY29uc3QgYmFzZUl0ZXJhdG9yPWJhc2VJdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7XG5yZXR1cm4gRmFyKCdtYXBwZWQgaXRlcmF0b3InLHtcbm5leHQ6KCk9PntcbmNvbnN0e3ZhbHVlOmJhc2VWYWx1ZSxkb25lfT1iYXNlSXRlcmF0b3IubmV4dCgpO1xuY29uc3QgdmFsdWU9ZG9uZT9iYXNlVmFsdWU6ZnVuYyhiYXNlVmFsdWUpO1xucmV0dXJuIGhhcmRlbih7dmFsdWUsZG9uZX0pO1xuIH19KTtcblxuIH19KTskaM2PX29uY2UubWFwSXRlcmFibGUobWFwSXRlcmFibGUpO1xuXG5oYXJkZW4obWFwSXRlcmFibGUpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZmlsdGVySXRlcmFibGU9KGJhc2VJdGVyYWJsZSxwcmVkKT0+XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuRmFyKCdmaWx0ZXJlZCBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmNvbnN0IGJhc2VJdGVyYXRvcj1iYXNlSXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIEZhcignZmlsdGVyZWQgaXRlcmF0b3InLHtcbm5leHQ6KCk9PntcbmZvcig7Oyl7XG5jb25zdCByZXN1bHQ9YmFzZUl0ZXJhdG9yLm5leHQoKTtcbmNvbnN0e3ZhbHVlLGRvbmV9PXJlc3VsdDtcbmlmKGRvbmV8fHByZWQodmFsdWUpKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbiB9fSk7XG5cbiB9fSk7JGjNj19vbmNlLmZpbHRlckl0ZXJhYmxlKGZpbHRlckl0ZXJhYmxlKTtcblxuaGFyZGVuKGZpbHRlckl0ZXJhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1hcEl0ZXJhYmxlIjpbIm1hcEl0ZXJhYmxlIl0sImZpbHRlckl0ZXJhYmxlIjpbImZpbHRlckl0ZXJhYmxlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAlUzWBwEQAAcBEAACcAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvbWFrZS1mYXIuanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZC91dGlscy5qcyIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL3JlbW90YWJsZS5qcyJdLCJleHBvcnRzIjpbIkZhciIsIkdFVF9NRVRIT0RfTkFNRVMiLCJSZW1vdGFibGUiLCJUb0ZhckZ1bmN0aW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgZ2V0TWV0aG9kTmFtZXMscSxGYWlsLGFzc2VydENoZWNrZXIsUEFTU19TVFlMRSxhc3NlcnRJZmFjZSxnZXRJbnRlcmZhY2VPZixSZW1vdGFibGVIZWxwZXI7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9ldmVudHVhbC1zZW5kL3V0aWxzLmpzXCIsIFtbXCJnZXRNZXRob2ROYW1lc1wiLCBbJGjNj19hID0+IChnZXRNZXRob2ROYW1lcyA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV1dXSxbXCIuL3JlbW90YWJsZS5qc1wiLCBbW1wiYXNzZXJ0SWZhY2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0SWZhY2UgPSAkaM2PX2EpXV0sW1wiZ2V0SW50ZXJmYWNlT2ZcIiwgWyRozY9fYSA9PiAoZ2V0SW50ZXJmYWNlT2YgPSAkaM2PX2EpXV0sW1wiUmVtb3RhYmxlSGVscGVyXCIsIFskaM2PX2EgPT4gKFJlbW90YWJsZUhlbHBlciA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG5jb25zdHtwcm90b3R5cGU6ZnVuY3Rpb25Qcm90b3R5cGV9PUZ1bmN0aW9uO1xuY29uc3R7XG5nZXRQcm90b3R5cGVPZixcbnNldFByb3RvdHlwZU9mLFxuY3JlYXRlLFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1cbk9iamVjdDtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlUmVtb3RhYmxlUHJvdG89KHJlbW90YWJsZSxpZmFjZSk9PntcbmxldCBvbGRQcm90bz1nZXRQcm90b3R5cGVPZihyZW1vdGFibGUpO1xuaWYodHlwZW9mIHJlbW90YWJsZT09PSdvYmplY3QnKXtcbmlmKG9sZFByb3RvPT09bnVsbCl7XG5vbGRQcm90bz1vYmplY3RQcm90b3R5cGU7XG4gfVxub2xkUHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuRmFpbCBgRm9yIG5vdywgcmVtb3RhYmxlcyBjYW5ub3QgaW5oZXJpdCBmcm9tIGFueXRoaW5nIHVudXN1YWwsIGluICR7cmVtb3RhYmxlfWA7XG4gfWVsc2UgaWYodHlwZW9mIHJlbW90YWJsZT09PSdmdW5jdGlvbicpe1xub2xkUHJvdG8hPT1udWxsfHxcbkZhaWwgYE9yaWdpbmFsIGZ1bmN0aW9uIG11c3Qgbm90IGluaGVyaXQgZnJvbSBudWxsOiAke3JlbW90YWJsZX1gO1xub2xkUHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5nZXRQcm90b3R5cGVPZihvbGRQcm90byk9PT1mdW5jdGlvblByb3RvdHlwZXx8XG5GYWlsIGBGYXIgZnVuY3Rpb25zIG11c3Qgb3JpZ2luYWxseSBpbmhlcml0IGZyb20gRnVuY3Rpb24ucHJvdG90eXBlLCBpbiAke3JlbW90YWJsZX1gO1xuIH1lbHNle1xuRmFpbCBgdW5yZWNvZ25pemVkIHR5cGVvZiAke3JlbW90YWJsZX1gO1xuIH1cbnJldHVybiBoYXJkZW4oXG5jcmVhdGUob2xkUHJvdG8se1xuW1BBU1NfU1RZTEVdOnt2YWx1ZToncmVtb3RhYmxlJ30sXG5bU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6aWZhY2V9fSkpO1xuXG5cbiB9O1xuXG5jb25zdCBhc3NlcnRDYW5CZVJlbW90YWJsZT0oY2FuZGlkYXRlKT0+XG5SZW1vdGFibGVIZWxwZXIuY2FuQmVWYWxpZChjYW5kaWRhdGUsYXNzZXJ0Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBSZW1vdGFibGU9KFxuLy9cbmlmYWNlPSdSZW1vdGFibGUnLFxucHJvcHM9dW5kZWZpbmVkLFxucmVtb3RhYmxlPS8qICAgICAgICAgICAgKi97fSk9Plxue1xuYXNzZXJ0SWZhY2UoaWZhY2UpO1xuYXNzZXJ0KGlmYWNlKTtcbi8vXG4vL1xucHJvcHM9PT11bmRlZmluZWR8fEZhaWwgYFJlbW90YWJsZSBwcm9wcyBub3QgeWV0IGltcGxlbWVudGVkICR7cHJvcHN9YDtcblxuLy9cbmFzc2VydENhbkJlUmVtb3RhYmxlKHJlbW90YWJsZSk7XG5cbi8vXG4hKFBBU1NfU1RZTEUgaW4gcmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgbWFya2VkIGFzIGEgJHtxKFxucmVtb3RhYmxlW1BBU1NfU1RZTEVdKVxuIH1gO1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5oYXJkZW4uaXNGYWtlfHxcbi8vXG4haXNGcm96ZW4ocmVtb3RhYmxlKXx8XG5GYWlsIGBSZW1vdGFibGUgJHtyZW1vdGFibGV9IGlzIGFscmVhZHkgZnJvemVuYDtcbmNvbnN0IHJlbW90YWJsZVByb3RvPW1ha2VSZW1vdGFibGVQcm90byhyZW1vdGFibGUsaWZhY2UpO1xuXG4vL1xuLy9cbmNvbnN0IG11dGF0ZUhhcmRlbkFuZENoZWNrPSh0YXJnZXQpPT57XG4vL1xuc2V0UHJvdG90eXBlT2YodGFyZ2V0LHJlbW90YWJsZVByb3RvKTtcbmhhcmRlbih0YXJnZXQpO1xuYXNzZXJ0Q2FuQmVSZW1vdGFibGUodGFyZ2V0KTtcbiB9O1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2soe30pO1xuXG4vL1xubXV0YXRlSGFyZGVuQW5kQ2hlY2socmVtb3RhYmxlKTtcblxuLy9cbi8vXG5hc3NlcnQoaWZhY2UhPT11bmRlZmluZWQpOy8vXG5yZXR1cm4gKC8qICAgICAgICAgICAgICAqL3JlbW90YWJsZSk7XG4gfTskaM2PX29uY2UuUmVtb3RhYmxlKFJlbW90YWJsZSk7XG5oYXJkZW4oUmVtb3RhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEdFVF9NRVRIT0RfTkFNRVM9J19fZ2V0TWV0aG9kTmFtZXNfXyc7XG5cbi8qXG5cblxuXG5cbiAqLyRozY9fb25jZS5HRVRfTUVUSE9EX05BTUVTKEdFVF9NRVRIT0RfTkFNRVMpO1xuY29uc3QgZ2V0TWV0aG9kTmFtZXNNZXRob2Q9aGFyZGVuKHtcbltHRVRfTUVUSE9EX05BTUVTXSgpe1xucmV0dXJuIGdldE1ldGhvZE5hbWVzKHRoaXMpO1xuIH19KVtcbkdFVF9NRVRIT0RfTkFNRVNdO1xuXG5jb25zdCBnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3I9aGFyZGVuKHtcbnZhbHVlOmdldE1ldGhvZE5hbWVzTWV0aG9kLFxuZW51bWVyYWJsZTpmYWxzZSxcbmNvbmZpZ3VyYWJsZTpmYWxzZSxcbndyaXRhYmxlOmZhbHNlfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIEZhcj0oZmFyTmFtZSxyZW1vdGFibGU9dW5kZWZpbmVkKT0+e1xuY29uc3Qgcj1yZW1vdGFibGU9PT11bmRlZmluZWQ/LyogICAgICAgICAgICAqL3t9OnJlbW90YWJsZTtcbmlmKHR5cGVvZiByPT09J29iamVjdCcmJiEoR0VUX01FVEhPRF9OQU1FUyBpbiByKSl7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsR0VUX01FVEhPRF9OQU1FUyxnZXRNZXRob2ROYW1lc0Rlc2NyaXB0b3IpO1xuIH1cbnJldHVybiBSZW1vdGFibGUoIGBBbGxlZ2VkOiAke2Zhck5hbWV9YCx1bmRlZmluZWQscik7XG4gfTskaM2PX29uY2UuRmFyKEZhcik7XG5oYXJkZW4oRmFyKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRvRmFyRnVuY3Rpb249KGZhck5hbWUsZnVuYyk9PntcbmlmKGdldEludGVyZmFjZU9mKGZ1bmMpIT09dW5kZWZpbmVkKXtcbi8vXG5yZXR1cm4gZnVuYztcbiB9XG4vL1xucmV0dXJuIEZhcihmYXJOYW1lLCguLi5hcmdzKT0+ZnVuYyguLi5hcmdzKSk7XG4gfTskaM2PX29uY2UuVG9GYXJGdW5jdGlvbihUb0ZhckZ1bmN0aW9uKTtcbmhhcmRlbihUb0ZhckZ1bmN0aW9uKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlJlbW90YWJsZSI6WyJSZW1vdGFibGUiXSwiR0VUX01FVEhPRF9OQU1FUyI6WyJHRVRfTUVUSE9EX05BTUVTIl0sIkZhciI6WyJGYXIiXSwiVG9GYXJGdW5jdGlvbiI6WyJUb0ZhckZ1bmN0aW9uIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAEjNsTCvBAAArwQAACkAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvbWFrZVRhZ2dlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbIm1ha2VUYWdnZWQiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLFBBU1NfU1RZTEUsYXNzZXJ0UGFzc2FibGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcIlBBU1NfU1RZTEVcIiwgWyRozY9fYSA9PiAoUEFTU19TVFlMRSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlT2YuanNcIiwgW1tcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5jb25zdHtjcmVhdGUscHJvdG90eXBlOm9iamVjdFByb3RvdHlwZX09T2JqZWN0O1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VUYWdnZWQ9KHRhZyxwYXlsb2FkKT0+e1xudHlwZW9mIHRhZz09PSdzdHJpbmcnfHxcbkZhaWwgYFRoZSB0YWcgb2YgYSB0YWdnZWQgcmVjb3JkIG11c3QgYmUgYSBzdHJpbmc6ICR7dGFnfWA7XG5hc3NlcnRQYXNzYWJsZShoYXJkZW4ocGF5bG9hZCkpO1xucmV0dXJuIGhhcmRlbihcbmNyZWF0ZShvYmplY3RQcm90b3R5cGUse1xuW1BBU1NfU1RZTEVdOnt2YWx1ZTondGFnZ2VkJ30sXG5bU3ltYm9sLnRvU3RyaW5nVGFnXTp7dmFsdWU6dGFnfSxcbnBheWxvYWQ6e3ZhbHVlOnBheWxvYWQsZW51bWVyYWJsZTp0cnVlfX0pKTtcblxuXG4gfTskaM2PX29uY2UubWFrZVRhZ2dlZChtYWtlVGFnZ2VkKTtcbmhhcmRlbihtYWtlVGFnZ2VkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VUYWdnZWQiOlsibWFrZVRhZ2dlZCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABHps7qQxUAAEMVAAAwAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbIkNYIiwiUEFTU19TVFlMRSIsImFzc2VydENoZWNrZXIiLCJjYW5CZU1ldGhvZCIsImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiLCJjaGVja1Bhc3NTdHlsZSIsImNoZWNrVGFnUmVjb3JkIiwiZ2V0T3duRGF0YURlc2NyaXB0b3IiLCJnZXRUYWciLCJoYXNPd25Qcm9wZXJ0eU9mIiwiaXNPYmplY3QiLCJpc1R5cGVkQXJyYXkiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBYLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIlhcIiwgWyRozY9fYSA9PiAoWCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtwcm90b3R5cGU6ZnVuY3Rpb25Qcm90b3R5cGV9PUZ1bmN0aW9uO1xuY29uc3R7XG5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsXG5nZXRQcm90b3R5cGVPZixcbmhhc093blByb3BlcnR5Om9iamVjdEhhc093blByb3BlcnR5LFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlfT1cbk9iamVjdDtcbmNvbnN0e2FwcGx5fT1SZWZsZWN0O1xuY29uc3R7dG9TdHJpbmdUYWc6dG9TdHJpbmdUYWdTeW1ib2x9PVN5bWJvbDtcblxuY29uc3QgdHlwZWRBcnJheVByb3RvdHlwZT1nZXRQcm90b3R5cGVPZihVaW50OEFycmF5LnByb3RvdHlwZSk7XG5jb25zdCB0eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjPWdldE93blByb3BlcnR5RGVzY3JpcHRvcihcbnR5cGVkQXJyYXlQcm90b3R5cGUsXG50b1N0cmluZ1RhZ1N5bWJvbCk7XG5cbmFzc2VydCh0eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjKTtcbmNvbnN0IGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZz10eXBlZEFycmF5VG9TdHJpbmdUYWdEZXNjLmdldDtcbmFzc2VydCh0eXBlb2YgZ2V0VHlwZWRBcnJheVRvU3RyaW5nVGFnPT09J2Z1bmN0aW9uJyk7XG5cbmNvbnN0ICAgICAgICBoYXNPd25Qcm9wZXJ0eU9mPShvYmoscHJvcCk9PlxuYXBwbHkob2JqZWN0SGFzT3duUHJvcGVydHksb2JqLFtwcm9wXSk7JGjNj19vbmNlLmhhc093blByb3BlcnR5T2YoaGFzT3duUHJvcGVydHlPZik7XG5oYXJkZW4oaGFzT3duUHJvcGVydHlPZik7XG5cbi8vXG5jb25zdCAgICAgICAgaXNPYmplY3Q9KHZhbCk9Pk9iamVjdCh2YWwpPT09dmFsOyRozY9fb25jZS5pc09iamVjdChpc09iamVjdCk7XG5oYXJkZW4oaXNPYmplY3QpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNUeXBlZEFycmF5PShvYmplY3QpPT57XG4vL1xuY29uc3QgdGFnPWFwcGx5KGdldFR5cGVkQXJyYXlUb1N0cmluZ1RhZyxvYmplY3QsW10pO1xucmV0dXJuIHRhZyE9PXVuZGVmaW5lZDtcbiB9OyRozY9fb25jZS5pc1R5cGVkQXJyYXkoaXNUeXBlZEFycmF5KTtcbmhhcmRlbihpc1R5cGVkQXJyYXkpO1xuXG5jb25zdCAgICAgICAgUEFTU19TVFlMRT1TeW1ib2wuZm9yKCdwYXNzU3R5bGUnKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUEFTU19TVFlMRShQQVNTX1NUWUxFKTtcbmNvbnN0ICAgICAgICBjYW5CZU1ldGhvZD0oZnVuYyk9PlxudHlwZW9mIGZ1bmM9PT0nZnVuY3Rpb24nJiYhKFBBU1NfU1RZTEUgaW4gZnVuYyk7JGjNj19vbmNlLmNhbkJlTWV0aG9kKGNhbkJlTWV0aG9kKTtcbmhhcmRlbihjYW5CZU1ldGhvZCk7XG5cbi8qXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDaGVja2VyPShjb25kLGRldGFpbHMpPT57XG5hc3NlcnQoY29uZCxkZXRhaWxzKTtcbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmFzc2VydENoZWNrZXIoYXNzZXJ0Q2hlY2tlcik7XG5oYXJkZW4oYXNzZXJ0Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIENYPShjaGVjayk9PntcbmNvbnN0IHJlamVjdD0oVCwuLi5zdWJzKT0+Y2hlY2soZmFsc2UsWChULC4uLnN1YnMpKTtcbnJldHVybiByZWplY3Q7XG4gfTskaM2PX29uY2UuQ1goQ1gpO1xuaGFyZGVuKENYKTtcblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRPd25EYXRhRGVzY3JpcHRvcj0oXG5jYW5kaWRhdGUsXG5wcm9wTmFtZSxcbnNob3VsZEJlRW51bWVyYWJsZSxcbmNoZWNrKT0+XG57XG5jb25zdCBkZXNjPS8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGNhbmRpZGF0ZSxwcm9wTmFtZSk7XG5cbnJldHVybihkZXNjIT09dW5kZWZpbmVkfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgJHtxKHByb3BOYW1lKX0gcHJvcGVydHkgZXhwZWN0ZWQ6ICR7Y2FuZGlkYXRlfWApJiYoXG5oYXNPd25Qcm9wZXJ0eU9mKGRlc2MsJ3ZhbHVlJyl8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGAke3EocHJvcE5hbWUpfSBtdXN0IG5vdCBiZSBhbiBhY2Nlc3NvciBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YCkmJihcbnNob3VsZEJlRW51bWVyYWJsZT9cbmRlc2MuZW51bWVyYWJsZXx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYCR7cShwcm9wTmFtZSl9IG11c3QgYmUgYW4gZW51bWVyYWJsZSBwcm9wZXJ0eTogJHtjYW5kaWRhdGV9YDpcbiFkZXNjLmVudW1lcmFibGV8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGAke3EocHJvcE5hbWUpfSBtdXN0IG5vdCBiZSBhbiBlbnVtZXJhYmxlIHByb3BlcnR5OiAke2NhbmRpZGF0ZX1gKT9cbmRlc2M6XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gLyogICAgICAgICAgICAgICAgICAqL3VuZGVmaW5lZDtcbiB9OyRozY9fb25jZS5nZXRPd25EYXRhRGVzY3JpcHRvcihnZXRPd25EYXRhRGVzY3JpcHRvcik7XG5oYXJkZW4oZ2V0T3duRGF0YURlc2NyaXB0b3IpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0VGFnPSh0YWdSZWNvcmQpPT50YWdSZWNvcmRbU3ltYm9sLnRvU3RyaW5nVGFnXTskaM2PX29uY2UuZ2V0VGFnKGdldFRhZyk7XG5oYXJkZW4oZ2V0VGFnKTtcblxuY29uc3QgICAgICAgIGNoZWNrUGFzc1N0eWxlPShvYmoscGFzc1N0eWxlLGV4cGVjdGVkUGFzc1N0eWxlLGNoZWNrKT0+e1xucmV0dXJuKFxucGFzc1N0eWxlPT09ZXhwZWN0ZWRQYXNzU3R5bGV8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEV4cGVjdGVkICR7cShleHBlY3RlZFBhc3NTdHlsZSl9LCBub3QgJHtxKHBhc3NTdHlsZSl9OiAke29ian1gKTtcblxuIH07JGjNj19vbmNlLmNoZWNrUGFzc1N0eWxlKGNoZWNrUGFzc1N0eWxlKTtcbmhhcmRlbihjaGVja1Bhc3NTdHlsZSk7XG5cbmNvbnN0IG1ha2VDaGVja1RhZ1JlY29yZD0oY2hlY2tQcm90byk9Pntcbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja1RhZ1JlY29yZD0odGFnUmVjb3JkLGV4cGVjdGVkUGFzc1N0eWxlLGNoZWNrKT0+e1xucmV0dXJuKFxuKGlzT2JqZWN0KHRhZ1JlY29yZCl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEEgbm9uLW9iamVjdCBjYW5ub3QgYmUgYSB0YWdSZWNvcmQ6ICR7dGFnUmVjb3JkfWApJiYoXG5pc0Zyb3plbih0YWdSZWNvcmQpfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgQSB0YWdSZWNvcmQgbXVzdCBiZSBmcm96ZW46ICR7dGFnUmVjb3JkfWApJiYoXG4haXNBcnJheSh0YWdSZWNvcmQpfHxcbiEhY2hlY2smJkNYKGNoZWNrKSBgQW4gYXJyYXkgY2Fubm90IGJlIGEgdGFnUmVjb3JkOiAke3RhZ1JlY29yZH1gKSYmXG5jaGVja1Bhc3NTdHlsZShcbnRhZ1JlY29yZCxcbmdldE93bkRhdGFEZXNjcmlwdG9yKHRhZ1JlY29yZCxQQVNTX1NUWUxFLGZhbHNlLGNoZWNrKS52YWx1ZSxcbmV4cGVjdGVkUGFzc1N0eWxlLFxuY2hlY2spJiYoXG5cbnR5cGVvZiBnZXRPd25EYXRhRGVzY3JpcHRvcih0YWdSZWNvcmQsU3ltYm9sLnRvU3RyaW5nVGFnLGZhbHNlLGNoZWNrKS5cbnZhbHVlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBBIFtTeW1ib2wudG9TdHJpbmdUYWddLW5hbWVkIHByb3BlcnR5IG11c3QgYmUgYSBzdHJpbmc6ICR7dGFnUmVjb3JkfWApJiZcbmNoZWNrUHJvdG8odGFnUmVjb3JkLGdldFByb3RvdHlwZU9mKHRhZ1JlY29yZCksY2hlY2spKTtcblxuIH07XG5yZXR1cm4gaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcbiB9O1xuXG5jb25zdCAgICAgICAgY2hlY2tUYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1vYmplY3RQcm90b3R5cGV8fFxuISFjaGVjayYmXG5jaGVjayhmYWxzZSxYIGBBIHRhZ1JlY29yZCBtdXN0IGluaGVyaXQgZnJvbSBPYmplY3QucHJvdG90eXBlOiAke3ZhbH1gKSk7JGjNj19vbmNlLmNoZWNrVGFnUmVjb3JkKGNoZWNrVGFnUmVjb3JkKTtcblxuaGFyZGVuKGNoZWNrVGFnUmVjb3JkKTtcblxuY29uc3QgICAgICAgIGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQ9bWFrZUNoZWNrVGFnUmVjb3JkKFxuKHZhbCxwcm90byxjaGVjayk9PlxucHJvdG89PT1mdW5jdGlvblByb3RvdHlwZXx8XG5wcm90byE9PW51bGwmJmdldFByb3RvdHlwZU9mKHByb3RvKT09PWZ1bmN0aW9uUHJvdG90eXBlfHxcbiEhY2hlY2smJlxuY2hlY2soXG5mYWxzZSxcblggYEZvciBmdW5jdGlvbnMsIGEgdGFnUmVjb3JkIG11c3QgaW5oZXJpdCBmcm9tIEZ1bmN0aW9uLnByb3RvdHlwZTogJHt2YWx9YCkpOyRozY9fb25jZS5jaGVja0Z1bmN0aW9uVGFnUmVjb3JkKGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQpO1xuXG5cbmhhcmRlbihjaGVja0Z1bmN0aW9uVGFnUmVjb3JkKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Imhhc093blByb3BlcnR5T2YiOlsiaGFzT3duUHJvcGVydHlPZiJdLCJpc09iamVjdCI6WyJpc09iamVjdCJdLCJpc1R5cGVkQXJyYXkiOlsiaXNUeXBlZEFycmF5Il0sIlBBU1NfU1RZTEUiOlsiUEFTU19TVFlMRSJdLCJjYW5CZU1ldGhvZCI6WyJjYW5CZU1ldGhvZCJdLCJhc3NlcnRDaGVja2VyIjpbImFzc2VydENoZWNrZXIiXSwiQ1giOlsiQ1giXSwiZ2V0T3duRGF0YURlc2NyaXB0b3IiOlsiZ2V0T3duRGF0YURlc2NyaXB0b3IiXSwiZ2V0VGFnIjpbImdldFRhZyJdLCJjaGVja1Bhc3NTdHlsZSI6WyJjaGVja1Bhc3NTdHlsZSJdLCJjaGVja1RhZ1JlY29yZCI6WyJjaGVja1RhZ1JlY29yZCJdLCJjaGVja0Z1bmN0aW9uVGFnUmVjb3JkIjpbImNoZWNrRnVuY3Rpb25UYWdSZWNvcmQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAQ23Vyd8kAADfJAAAKgAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9wYXNzU3R5bGVPZi5qc3siaW1wb3J0cyI6WyJAZW5kby9wcm9taXNlLWtpdCIsIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiLCIuL2NvcHlBcnJheS5qcyIsIi4vY29weVJlY29yZC5qcyIsIi4vdGFnZ2VkLmpzIiwiLi9lcnJvci5qcyIsIi4vcmVtb3RhYmxlLmpzIiwiLi9zeW1ib2wuanMiLCIuL3NhZmUtcHJvbWlzZS5qcyIsIi4vc3RyaW5nLmpzIl0sImV4cG9ydHMiOlsiUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wiLCJhc3NlcnRQYXNzYWJsZSIsImlzUGFzc2FibGUiLCJwYXNzU3R5bGVPZiIsInRvUGFzc2FibGVFcnJvciIsInRvVGhyb3dhYmxlIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgaXNQcm9taXNlLFgsRmFpbCxxLGFubm90YXRlRXJyb3IsbWFrZUVycm9yLGlzT2JqZWN0LGlzVHlwZWRBcnJheSxQQVNTX1NUWUxFLENvcHlBcnJheUhlbHBlcixDb3B5UmVjb3JkSGVscGVyLFRhZ2dlZEhlbHBlcixFcnJvckhlbHBlcixjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyxjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcixnZXRFcnJvckNvbnN0cnVjdG9yLGlzRXJyb3JMaWtlLFJlbW90YWJsZUhlbHBlcixhc3NlcnRQYXNzYWJsZVN5bWJvbCxhc3NlcnRTYWZlUHJvbWlzZSxhc3NlcnRQYXNzYWJsZVN0cmluZzskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJhbm5vdGF0ZUVycm9yXCIsIFskaM2PX2EgPT4gKGFubm90YXRlRXJyb3IgPSAkaM2PX2EpXV0sW1wibWFrZUVycm9yXCIsIFskaM2PX2EgPT4gKG1ha2VFcnJvciA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImlzVHlwZWRBcnJheVwiLCBbJGjNj19hID0+IChpc1R5cGVkQXJyYXkgPSAkaM2PX2EpXV0sW1wiUEFTU19TVFlMRVwiLCBbJGjNj19hID0+IChQQVNTX1NUWUxFID0gJGjNj19hKV1dXV0sW1wiLi9jb3B5QXJyYXkuanNcIiwgW1tcIkNvcHlBcnJheUhlbHBlclwiLCBbJGjNj19hID0+IChDb3B5QXJyYXlIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlSZWNvcmQuanNcIiwgW1tcIkNvcHlSZWNvcmRIZWxwZXJcIiwgWyRozY9fYSA9PiAoQ29weVJlY29yZEhlbHBlciA9ICRozY9fYSldXV1dLFtcIi4vdGFnZ2VkLmpzXCIsIFtbXCJUYWdnZWRIZWxwZXJcIiwgWyRozY9fYSA9PiAoVGFnZ2VkSGVscGVyID0gJGjNj19hKV1dXV0sW1wiLi9lcnJvci5qc1wiLCBbW1wiRXJyb3JIZWxwZXJcIiwgWyRozY9fYSA9PiAoRXJyb3JIZWxwZXIgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2NcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JQcm9wZXJ0eURlc2MgPSAkaM2PX2EpXV0sW1wiY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3JcIiwgWyRozY9fYSA9PiAoY2hlY2tSZWN1cnNpdmVseVBhc3NhYmxlRXJyb3IgPSAkaM2PX2EpXV0sW1wiZ2V0RXJyb3JDb25zdHJ1Y3RvclwiLCBbJGjNj19hID0+IChnZXRFcnJvckNvbnN0cnVjdG9yID0gJGjNj19hKV1dLFtcImlzRXJyb3JMaWtlXCIsIFskaM2PX2EgPT4gKGlzRXJyb3JMaWtlID0gJGjNj19hKV1dXV0sW1wiLi9yZW1vdGFibGUuanNcIiwgW1tcIlJlbW90YWJsZUhlbHBlclwiLCBbJGjNj19hID0+IChSZW1vdGFibGVIZWxwZXIgPSAkaM2PX2EpXV1dXSxbXCIuL3N5bWJvbC5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTeW1ib2xcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTeW1ib2wgPSAkaM2PX2EpXV1dXSxbXCIuL3NhZmUtcHJvbWlzZS5qc1wiLCBbW1wiYXNzZXJ0U2FmZVByb21pc2VcIiwgWyRozY9fYSA9PiAoYXNzZXJ0U2FmZVByb21pc2UgPSAkaM2PX2EpXV1dXSxbXCIuL3N0cmluZy5qc1wiLCBbW1wiYXNzZXJ0UGFzc2FibGVTdHJpbmdcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UGFzc2FibGVTdHJpbmcgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5jb25zdHtpc0Zyb3plbixnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzLHZhbHVlc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuXG5jb25zdCBtYWtlSGVscGVyVGFibGU9KHBhc3NTdHlsZUhlbHBlcnMpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IEhlbHBlclRhYmxlPXtcbl9fcHJvdG9fXzpudWxsLFxuY29weUFycmF5OnVuZGVmaW5lZCxcbmNvcHlSZWNvcmQ6dW5kZWZpbmVkLFxudGFnZ2VkOnVuZGVmaW5lZCxcbmVycm9yOnVuZGVmaW5lZCxcbnJlbW90YWJsZTp1bmRlZmluZWR9O1xuXG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuY29uc3R7c3R5bGVOYW1lfT1oZWxwZXI7XG5zdHlsZU5hbWUgaW4gSGVscGVyVGFibGV8fEZhaWwgYFVucmVjb2duaXplZCBoZWxwZXI6ICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPT09dW5kZWZpbmVkfHxcbkZhaWwgYGNvbmZsaWN0aW5nIGhlbHBlcnMgZm9yICR7cShzdHlsZU5hbWUpfWA7XG5IZWxwZXJUYWJsZVtzdHlsZU5hbWVdPWhlbHBlcjtcbiB9XG5mb3IoY29uc3Qgc3R5bGVOYW1lIG9mIG93bktleXMoSGVscGVyVGFibGUpKXtcbkhlbHBlclRhYmxlW3N0eWxlTmFtZV0hPT11bmRlZmluZWR8fFxuRmFpbCBgbWlzc2luZyBoZWxwZXIgZm9yICR7cShzdHlsZU5hbWUpfWA7XG4gfVxuXG5yZXR1cm4gaGFyZGVuKEhlbHBlclRhYmxlKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgbWFrZVBhc3NTdHlsZU9mPShwYXNzU3R5bGVIZWxwZXJzKT0+e1xuY29uc3QgSGVscGVyVGFibGU9bWFrZUhlbHBlclRhYmxlKHBhc3NTdHlsZUhlbHBlcnMpO1xuY29uc3QgcmVtb3RhYmxlSGVscGVyPUhlbHBlclRhYmxlLnJlbW90YWJsZTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgcGFzc1N0eWxlTWVtbz1uZXcgV2Vha01hcCgpO1xuXG4vKlxuXG4gICAqL1xuLy9cbmNvbnN0IHBhc3NTdHlsZU9mPShwYXNzYWJsZSk9Pntcbi8vXG4vL1xuLy9cbmNvbnN0IGluUHJvZ3Jlc3M9bmV3IFNldCgpO1xuXG5jb25zdCBwYXNzU3R5bGVPZlJlY3VyPShpbm5lcik9PntcbmNvbnN0IGlubmVySXNPYmplY3Q9aXNPYmplY3QoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5jb25zdCBpbm5lclN0eWxlPXBhc3NTdHlsZU1lbW8uZ2V0KGlubmVyKTtcbmlmKGlubmVyU3R5bGUpe1xucmV0dXJuIGlubmVyU3R5bGU7XG4gfVxuIWluUHJvZ3Jlc3MuaGFzKGlubmVyKXx8XG5GYWlsIGBQYXNzLWJ5LWNvcHkgZGF0YSBjYW5ub3QgYmUgY3ljbGljICR7aW5uZXJ9YDtcbmluUHJvZ3Jlc3MuYWRkKGlubmVyKTtcbiB9XG4vL1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mSW50ZXJuYWwoaW5uZXIpO1xuaWYoaW5uZXJJc09iamVjdCl7XG5wYXNzU3R5bGVNZW1vLnNldChpbm5lcixwYXNzU3R5bGUpO1xuaW5Qcm9ncmVzcy5kZWxldGUoaW5uZXIpO1xuIH1cbnJldHVybiBwYXNzU3R5bGU7XG4gfTtcblxuY29uc3QgcGFzc1N0eWxlT2ZJbnRlcm5hbD0oaW5uZXIpPT57XG5jb25zdCB0eXBlc3RyPXR5cGVvZiBpbm5lcjtcbnN3aXRjaCh0eXBlc3RyKXtcbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnYm9vbGVhbic6XG5jYXNlJ251bWJlcic6XG5jYXNlJ2JpZ2ludCc6e1xucmV0dXJuIHR5cGVzdHI7XG4gfVxuY2FzZSdzdHJpbmcnOntcbmFzc2VydFBhc3NhYmxlU3RyaW5nKGlubmVyKTtcbnJldHVybidzdHJpbmcnO1xuIH1cbmNhc2Unc3ltYm9sJzp7XG5hc3NlcnRQYXNzYWJsZVN5bWJvbChpbm5lcik7XG5yZXR1cm4nc3ltYm9sJztcbiB9XG5jYXNlJ29iamVjdCc6e1xuaWYoaW5uZXI9PT1udWxsKXtcbnJldHVybidudWxsJztcbiB9XG5pZighaXNGcm96ZW4oaW5uZXIpKXtcbmFzc2VydC5mYWlsKFxuLy9cbi8vXG5pc1R5cGVkQXJyYXkoaW5uZXIpP1xuWCBgQ2Fubm90IHBhc3MgbXV0YWJsZSB0eXBlZCBhcnJheXMgbGlrZSAke2lubmVyfS5gOlxuWCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWApO1xuXG4gfVxuaWYoaXNQcm9taXNlKGlubmVyKSl7XG5hc3NlcnRTYWZlUHJvbWlzZShpbm5lcik7XG5yZXR1cm4ncHJvbWlzZSc7XG4gfVxudHlwZW9mIGlubmVyLnRoZW4hPT0nZnVuY3Rpb24nfHxcbkZhaWwgYENhbm5vdCBwYXNzIG5vbi1wcm9taXNlIHRoZW5hYmxlc2A7XG5jb25zdCBwYXNzU3R5bGVUYWc9aW5uZXJbUEFTU19TVFlMRV07XG5pZihwYXNzU3R5bGVUYWchPT11bmRlZmluZWQpe1xuYXNzZXJ0LnR5cGVvZihwYXNzU3R5bGVUYWcsJ3N0cmluZycpO1xuY29uc3QgaGVscGVyPUhlbHBlclRhYmxlW3Bhc3NTdHlsZVRhZ107XG5oZWxwZXIhPT11bmRlZmluZWR8fFxuRmFpbCBgVW5yZWNvZ25pemVkIFBhc3NTdHlsZTogJHtxKHBhc3NTdHlsZVRhZyl9YDtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiAoLyogICAgICAgICAgICAgICAgICAgICovcGFzc1N0eWxlVGFnKTtcbiB9XG5mb3IoY29uc3QgaGVscGVyIG9mIHBhc3NTdHlsZUhlbHBlcnMpe1xuaWYoaGVscGVyLmNhbkJlVmFsaWQoaW5uZXIpKXtcbmhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybiBoZWxwZXIuc3R5bGVOYW1lO1xuIH1cbiB9XG5yZW1vdGFibGVIZWxwZXIuYXNzZXJ0VmFsaWQoaW5uZXIscGFzc1N0eWxlT2ZSZWN1cik7XG5yZXR1cm4ncmVtb3RhYmxlJztcbiB9XG5jYXNlJ2Z1bmN0aW9uJzp7XG5pc0Zyb3plbihpbm5lcil8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLWZyb3plbiBvYmplY3RzIGxpa2UgJHtpbm5lcn0uIFVzZSBoYXJkZW4oKWA7XG50eXBlb2YgaW5uZXIudGhlbiE9PSdmdW5jdGlvbid8fFxuRmFpbCBgQ2Fubm90IHBhc3Mgbm9uLXByb21pc2UgdGhlbmFibGVzYDtcbnJlbW90YWJsZUhlbHBlci5hc3NlcnRWYWxpZChpbm5lcixwYXNzU3R5bGVPZlJlY3VyKTtcbnJldHVybidyZW1vdGFibGUnO1xuIH1cbmRlZmF1bHQ6e1xudGhyb3cgYXNzZXJ0LmZhaWwoWCBgVW5yZWNvZ25pemVkIHR5cGVvZiAke3EodHlwZXN0cil9YCxUeXBlRXJyb3IpO1xuIH19XG5cbiB9O1xuXG5yZXR1cm4gcGFzc1N0eWxlT2ZSZWN1cihwYXNzYWJsZSk7XG4gfTtcbnJldHVybiBoYXJkZW4ocGFzc1N0eWxlT2YpO1xuIH07XG5cbmNvbnN0ICAgICAgICBQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbD1TeW1ib2wuZm9yKCdAZW5kbyBwYXNzU3R5bGVPZicpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi8kaM2PX29uY2UuUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2woUGFzc1N0eWxlT2ZFbmRvd21lbnRTeW1ib2wpO1xuY29uc3QgICAgICAgIHBhc3NTdHlsZU9mPVxuZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpc1tQYXNzU3R5bGVPZkVuZG93bWVudFN5bWJvbF18fFxubWFrZVBhc3NTdHlsZU9mKFtcbkNvcHlBcnJheUhlbHBlcixcbkNvcHlSZWNvcmRIZWxwZXIsXG5UYWdnZWRIZWxwZXIsXG5FcnJvckhlbHBlcixcblJlbW90YWJsZUhlbHBlcl0pOyRozY9fb25jZS5wYXNzU3R5bGVPZihwYXNzU3R5bGVPZik7XG5cblxuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlPSh2YWwpPT57XG5wYXNzU3R5bGVPZih2YWwpOy8vXG4gfTskaM2PX29uY2UuYXNzZXJ0UGFzc2FibGUoYXNzZXJ0UGFzc2FibGUpO1xuaGFyZGVuKGFzc2VydFBhc3NhYmxlKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBpc1Bhc3NhYmxlPShzcGVjaW1lbik9PntcbnRyeXtcbi8vXG4vL1xucmV0dXJuIHBhc3NTdHlsZU9mKHNwZWNpbWVuKSE9PXVuZGVmaW5lZDtcbiB9Y2F0Y2goXyl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH07JGjNj19vbmNlLmlzUGFzc2FibGUoaXNQYXNzYWJsZSk7XG5oYXJkZW4oaXNQYXNzYWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGlzUGFzc2FibGVFcnJvclByb3BlcnR5RGVzYz0obmFtZSxkZXNjKT0+XG5jaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvclByb3BlcnR5RGVzYyhuYW1lLGRlc2MscGFzc1N0eWxlT2YpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHRvUGFzc2FibGVFcnJvcj0oZXJyKT0+e1xuaGFyZGVuKGVycik7XG5pZihjaGVja1JlY3Vyc2l2ZWx5UGFzc2FibGVFcnJvcihlcnIscGFzc1N0eWxlT2YpKXtcbnJldHVybiBlcnI7XG4gfVxuY29uc3R7bmFtZSxtZXNzYWdlfT1lcnI7XG5jb25zdHtjYXVzZTpjYXVzZURlc2MsZXJyb3JzOmVycm9yc0Rlc2N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhlcnIpO1xubGV0IGNhdXNlO1xubGV0IGVycm9ycztcbmlmKGNhdXNlRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdjYXVzZScsY2F1c2VEZXNjKSl7XG5jYXVzZT1jYXVzZURlc2MudmFsdWU7XG4gfVxuaWYoZXJyb3JzRGVzYyYmaXNQYXNzYWJsZUVycm9yUHJvcGVydHlEZXNjKCdlcnJvcnMnLGVycm9yc0Rlc2MpKXtcbmVycm9ycz1lcnJvcnNEZXNjLnZhbHVlO1xuIH1cblxuY29uc3QgZXJyQ29uc3RydWN0b3I9Z2V0RXJyb3JDb25zdHJ1Y3RvciggYCR7bmFtZX1gKXx8RXJyb3I7XG5jb25zdCBuZXdFcnJvcj1tYWtlRXJyb3IoIGAke21lc3NhZ2V9YCxlcnJDb25zdHJ1Y3Rvcix7XG4vL1xuY2F1c2UsXG5lcnJvcnN9KTtcblxuLy9cbmhhcmRlbihuZXdFcnJvcik7XG4vL1xuLy9cbi8vXG5hbm5vdGF0ZUVycm9yKG5ld0Vycm9yLFggYGNvcGllZCBmcm9tIGVycm9yICR7ZXJyfWApO1xucGFzc1N0eWxlT2YobmV3RXJyb3IpPT09J2Vycm9yJ3x8XG5GYWlsIGBFeHBlY3RlZCAke25ld0Vycm9yfSB0byBiZSBhIHBhc3NhYmxlIGVycm9yYDtcbnJldHVybiBuZXdFcnJvcjtcbiB9OyRozY9fb25jZS50b1Bhc3NhYmxlRXJyb3IodG9QYXNzYWJsZUVycm9yKTtcbmhhcmRlbih0b1Bhc3NhYmxlRXJyb3IpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgdG9UaHJvd2FibGU9KHNwZWNpbWVuKT0+e1xuaGFyZGVuKHNwZWNpbWVuKTtcbmlmKGlzRXJyb3JMaWtlKHNwZWNpbWVuKSl7XG5yZXR1cm4gdG9QYXNzYWJsZUVycm9yKC8qICAgICAgICAgICAgICAgICovc3BlY2ltZW4pO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihzcGVjaW1lbik7XG5pZihpc09iamVjdChzcGVjaW1lbikpe1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuY29uc3QgZWxlbWVudHM9LyogICAgICAgICAgICAgICAgICAgICovc3BlY2ltZW47XG5mb3IoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cyl7XG5lbGVtZW50PT09dG9UaHJvd2FibGUoZWxlbWVudCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7ZWxlbWVudH1gO1xuIH1cbmJyZWFrO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuY29uc3QgcmVjPS8qICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmZvcihjb25zdCB2YWwgb2YgdmFsdWVzKHJlYykpe1xudmFsPT09dG9UaHJvd2FibGUodmFsKXx8XG5GYWlsIGBuZXN0ZWQgdG9UaHJvd2FibGUgY29lcmNpb24gbm90IHlldCBzdXBwb3J0ZWQgJHt2YWx9YDtcbiB9XG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGc9LyogICAgICAgICAgICAgICAgICAgICAqL3NwZWNpbWVuO1xuY29uc3R7cGF5bG9hZH09dGc7XG5wYXlsb2FkPT09dG9UaHJvd2FibGUocGF5bG9hZCl8fFxuRmFpbCBgbmVzdGVkIHRvVGhyb3dhYmxlIGNvZXJjaW9uIG5vdCB5ZXQgc3VwcG9ydGVkICR7cGF5bG9hZH1gO1xuYnJlYWs7XG4gfVxuY2FzZSdlcnJvcic6e1xuY29uc3QgZXI9LyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbjtcbmVyPT09dG9UaHJvd2FibGUoZXIpfHxcbkZhaWwgYG5lc3RlZCB0b1Rocm93YWJsZSBjb2VyY2lvbiBub3QgeWV0IHN1cHBvcnRlZCAke2VyfWA7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYEEgJHtxKHBhc3NTdHlsZSl9IGlzIG5vdCB0aHJvd2FibGU6ICR7c3BlY2ltZW59YDtcbiB9fVxuXG4gfVxucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbik7XG4gfTskaM2PX29uY2UudG9UaHJvd2FibGUodG9UaHJvd2FibGUpO1xuaGFyZGVuKHRvVGhyb3dhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7IlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIjpbIlBhc3NTdHlsZU9mRW5kb3dtZW50U3ltYm9sIl0sInBhc3NTdHlsZU9mIjpbInBhc3NTdHlsZU9mIl0sImFzc2VydFBhc3NhYmxlIjpbImFzc2VydFBhc3NhYmxlIl0sImlzUGFzc2FibGUiOlsiaXNQYXNzYWJsZSJdLCJ0b1Bhc3NhYmxlRXJyb3IiOlsidG9QYXNzYWJsZUVycm9yIl0sInRvVGhyb3dhYmxlIjpbInRvVGhyb3dhYmxlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPZoi17VFwAA1RcAACgAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvcmVtb3RhYmxlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2Vycm9ycyIsIi4vcGFzc1N0eWxlLWhlbHBlcnMuanMiXSwiZXhwb3J0cyI6WyJSZW1vdGFibGVIZWxwZXIiLCJhc3NlcnRJZmFjZSIsImdldEludGVyZmFjZU9mIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxxLGFzc2VydENoZWNrZXIsY2FuQmVNZXRob2QsaGFzT3duUHJvcGVydHlPZixQQVNTX1NUWUxFLGNoZWNrVGFnUmVjb3JkLGNoZWNrRnVuY3Rpb25UYWdSZWNvcmQsaXNPYmplY3QsZ2V0VGFnLENYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV0sW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dXV0sW1wiLi9wYXNzU3R5bGUtaGVscGVycy5qc1wiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImNhbkJlTWV0aG9kXCIsIFskaM2PX2EgPT4gKGNhbkJlTWV0aG9kID0gJGjNj19hKV1dLFtcImhhc093blByb3BlcnR5T2ZcIiwgWyRozY9fYSA9PiAoaGFzT3duUHJvcGVydHlPZiA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV0sW1wiY2hlY2tUYWdSZWNvcmRcIiwgWyRozY9fYSA9PiAoY2hlY2tUYWdSZWNvcmQgPSAkaM2PX2EpXV0sW1wiY2hlY2tGdW5jdGlvblRhZ1JlY29yZFwiLCBbJGjNj19hID0+IChjaGVja0Z1bmN0aW9uVGFnUmVjb3JkID0gJGjNj19hKV1dLFtcImlzT2JqZWN0XCIsIFskaM2PX2EgPT4gKGlzT2JqZWN0ID0gJGjNj19hKV1dLFtcImdldFRhZ1wiLCBbJGjNj19hID0+IChnZXRUYWcgPSAkaM2PX2EpXV0sW1wiQ1hcIiwgWyRozY9fYSA9PiAoQ1ggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG5cbiAqL1xuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7aXNBcnJheX09QXJyYXk7XG5jb25zdHtcbmdldFByb3RvdHlwZU9mLFxuaXNGcm96ZW4sXG5wcm90b3R5cGU6b2JqZWN0UHJvdG90eXBlLFxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309XG5PYmplY3Q7XG5cbi8qXG5cblxuICovXG5jb25zdCBjaGVja0lmYWNlPShpZmFjZSxjaGVjayk9PntcbnJldHVybihcbi8vXG4odHlwZW9mIGlmYWNlPT09J3N0cmluZyd8fFxuISFjaGVjayYmXG5DWChcbmNoZWNrKVxuIGBGb3Igbm93LCBpbnRlcmZhY2UgJHtpZmFjZX0gbXVzdCBiZSBhIHN0cmluZzsgdW5pbXBsZW1lbnRlZGApJiYoXG5pZmFjZT09PSdSZW1vdGFibGUnfHxcbmlmYWNlLnN0YXJ0c1dpdGgoJ0FsbGVnZWQ6ICcpfHxcbmlmYWNlLnN0YXJ0c1dpdGgoJ0RlYnVnTmFtZTogJyl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYEZvciBub3csIGlmYWNlICR7cShcbmlmYWNlKVxuIH0gbXVzdCBiZSBcIlJlbW90YWJsZVwiIG9yIGJlZ2luIHdpdGggXCJBbGxlZ2VkOiBcIiBvciBcIkRlYnVnTmFtZTogXCI7IHVuaW1wbGVtZW50ZWRgKSk7XG5cbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydElmYWNlPShpZmFjZSk9PmNoZWNrSWZhY2UoaWZhY2UsYXNzZXJ0Q2hlY2tlcik7JGjNj19vbmNlLmFzc2VydElmYWNlKGFzc2VydElmYWNlKTtcbmhhcmRlbihhc3NlcnRJZmFjZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUmVtb3RhYmxlUHJvdG9PZj0ob3JpZ2luYWwsY2hlY2spPT57XG5pc09iamVjdChvcmlnaW5hbCl8fFxuRmFpbCBgUmVtb3RhYmxlcyBtdXN0IGJlIG9iamVjdHMgb3IgZnVuY3Rpb25zOiAke29yaWdpbmFsfWA7XG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgcHJvdG89Z2V0UHJvdG90eXBlT2Yob3JpZ2luYWwpO1xuaWYoXG5wcm90bz09PW9iamVjdFByb3RvdHlwZXx8XG5wcm90bz09PW51bGx8fFxucHJvdG89PT1GdW5jdGlvbi5wcm90b3R5cGUpXG57XG5yZXR1cm4oXG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgUmVtb3RhYmxlcyBtdXN0IGJlIGV4cGxpY2l0bHkgZGVjbGFyZWQ6ICR7cShvcmlnaW5hbCl9YCk7XG5cbiB9XG5cbmlmKHR5cGVvZiBvcmlnaW5hbD09PSdvYmplY3QnKXtcbmNvbnN0IHByb3RvUHJvdG89Z2V0UHJvdG90eXBlT2YocHJvdG8pO1xuaWYocHJvdG9Qcm90byE9PW9iamVjdFByb3RvdHlwZSYmcHJvdG9Qcm90byE9PW51bGwpe1xuLy9cbnJldHVybiBjaGVja1JlbW90YWJsZShwcm90byxjaGVjayk7XG4gfVxuaWYoIWNoZWNrVGFnUmVjb3JkKHByb3RvLCdyZW1vdGFibGUnLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1lbHNlIGlmKHR5cGVvZiBvcmlnaW5hbD09PSdmdW5jdGlvbicpe1xuaWYoIWNoZWNrRnVuY3Rpb25UYWdSZWNvcmQocHJvdG8sJ3JlbW90YWJsZScsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG4gfVxuXG4vL1xuY29uc3QgcGFzc1N0eWxlS2V5PS8qICAgICAgICAgICAgICAgICAgKi9QQVNTX1NUWUxFO1xuY29uc3QgdGFnS2V5PS8qICAgICAgICAgICAgICAgICAgKi9TeW1ib2wudG9TdHJpbmdUYWc7XG5jb25zdHtcbi8vXG5bLyogICAgICAgICAgICAgICAgICovcGFzc1N0eWxlS2V5XTpfcGFzc1N0eWxlRGVzYyxcblsvKiAgICAgICAgICAgICAgICAgKi90YWdLZXldOnt2YWx1ZTppZmFjZX0sXG4uLi5yZXN0RGVzY3N9PVxuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhwcm90byk7XG5cbnJldHVybihcbihvd25LZXlzKHJlc3REZXNjcykubGVuZ3RoPT09MHx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYFVuZXhwZWN0ZWQgcHJvcGVydGllcyBvbiBSZW1vdGFibGUgUHJvdG8gJHtvd25LZXlzKHJlc3REZXNjcyl9YCkmJlxuY2hlY2tJZmFjZShpZmFjZSxjaGVjaykpO1xuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjb25maXJtZWRSZW1vdGFibGVzPW5ldyBXZWFrU2V0KCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUmVtb3RhYmxlPSh2YWwsY2hlY2spPT57XG5pZihjb25maXJtZWRSZW1vdGFibGVzLmhhcyh2YWwpKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKCFpc0Zyb3plbih2YWwpKXtcbnJldHVybihcbiEhY2hlY2smJkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBub24tZnJvemVuIG9iamVjdHMgbGlrZSAke3ZhbH1gKTtcblxuIH1cbi8vXG5pZighUmVtb3RhYmxlSGVscGVyLmNhbkJlVmFsaWQodmFsLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3QgcmVzdWx0PWNoZWNrUmVtb3RhYmxlUHJvdG9PZih2YWwsY2hlY2spO1xuaWYocmVzdWx0KXtcbmNvbmZpcm1lZFJlbW90YWJsZXMuYWRkKHZhbCk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbnRlcmZhY2VPZj0odmFsKT0+e1xuaWYoXG4haXNPYmplY3QodmFsKXx8XG52YWxbUEFTU19TVFlMRV0hPT0ncmVtb3RhYmxlJ3x8XG4hY2hlY2tSZW1vdGFibGUodmFsKSlcbntcbi8vXG5yZXR1cm4gdW5kZWZpbmVkO1xuIH1cbi8vXG5yZXR1cm4gZ2V0VGFnKHZhbCk7XG4gfTskaM2PX29uY2UuZ2V0SW50ZXJmYWNlT2YoZ2V0SW50ZXJmYWNlT2YpO1xuaGFyZGVuKGdldEludGVyZmFjZU9mKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBSZW1vdGFibGVIZWxwZXI9aGFyZGVuKHtcbnN0eWxlTmFtZToncmVtb3RhYmxlJyxcblxuY2FuQmVWYWxpZDooY2FuZGlkYXRlLGNoZWNrPXVuZGVmaW5lZCk9PntcbmNvbnN0IHZhbGlkVHlwZT1cbihpc09iamVjdChjYW5kaWRhdGUpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIG5vbi1vYmplY3RzIGFzIFJlbW90YWJsZSAke2NhbmRpZGF0ZX1gKSYmKFxuIWlzQXJyYXkoY2FuZGlkYXRlKXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgY2Fubm90IHNlcmlhbGl6ZSBhcnJheXMgYXMgUmVtb3RhYmxlICR7Y2FuZGlkYXRlfWApO1xuaWYoIXZhbGlkVHlwZSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuXG5jb25zdCBkZXNjcz1nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGNhbmRpZGF0ZSk7XG5pZih0eXBlb2YgY2FuZGlkYXRlPT09J29iamVjdCcpe1xuLy9cbi8vXG5yZXR1cm4gb3duS2V5cyhkZXNjcykuZXZlcnkoKGtleSk9PntcbnJldHVybihcbi8vXG4oaGFzT3duUHJvcGVydHlPZihkZXNjc1svKiAgICAgICAgICAgICAgICAgKi9rZXldLCd2YWx1ZScpfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBjYW5ub3Qgc2VyaWFsaXplIFJlbW90YWJsZXMgd2l0aCBhY2Nlc3NvcnMgbGlrZSAke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGluICR7Y2FuZGlkYXRlfWApJiYoXG5rZXk9PT1TeW1ib2wudG9TdHJpbmdUYWcmJmNoZWNrSWZhY2UoY2FuZGlkYXRlW2tleV0sY2hlY2spfHxcbihjYW5CZU1ldGhvZChjYW5kaWRhdGVba2V5XSl8fFxuISFjaGVjayYmXG5DWChjaGVjaykgYGNhbm5vdCBzZXJpYWxpemUgUmVtb3RhYmxlcyB3aXRoIG5vbi1tZXRob2RzIGxpa2UgJHtxKFxuU3RyaW5nKGtleSkpXG4gfSBpbiAke2NhbmRpZGF0ZX1gKSYmKFxua2V5IT09UEFTU19TVFlMRXx8XG4hIWNoZWNrJiZcbkNYKGNoZWNrKSBgQSBwYXNzLWJ5LXJlbW90ZSBjYW5ub3Qgc2hhZG93ICR7cShQQVNTX1NUWUxFKX1gKSkpO1xuXG4gfSk7XG4gfWVsc2UgaWYodHlwZW9mIGNhbmRpZGF0ZT09PSdmdW5jdGlvbicpe1xuLy9cbi8vXG5jb25zdHtcbm5hbWU6bmFtZURlc2MsXG5sZW5ndGg6bGVuZ3RoRGVzYyxcbi8vXG5bU3ltYm9sLnRvU3RyaW5nVGFnXTp0b1N0cmluZ1RhZ0Rlc2MsXG4uLi5yZXN0RGVzY3N9PVxuZGVzY3M7XG5jb25zdCByZXN0S2V5cz1vd25LZXlzKHJlc3REZXNjcyk7XG5yZXR1cm4oXG4obmFtZURlc2MmJnR5cGVvZiBuYW1lRGVzYy52YWx1ZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goY2hlY2spIGBGYXIgZnVuY3Rpb24gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLCBpbiAke2NhbmRpZGF0ZX1gKSYmKFxubGVuZ3RoRGVzYyYmdHlwZW9mIGxlbmd0aERlc2MudmFsdWU9PT0nbnVtYmVyJ3x8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZhciBmdW5jdGlvbiBsZW5ndGggbXVzdCBiZSBhIG51bWJlciwgaW4gJHtjYW5kaWRhdGV9YCkmJihcbnRvU3RyaW5nVGFnRGVzYz09PXVuZGVmaW5lZHx8XG4odHlwZW9mIHRvU3RyaW5nVGFnRGVzYy52YWx1ZT09PSdzdHJpbmcnfHxcbiEhY2hlY2smJlxuQ1goXG5jaGVjaylcbiBgRmFyIGZ1bmN0aW9uIEBAdG9TdHJpbmdUYWcgbXVzdCBiZSBhIHN0cmluZywgaW4gJHtjYW5kaWRhdGV9YCkmJlxuY2hlY2tJZmFjZSh0b1N0cmluZ1RhZ0Rlc2MudmFsdWUsY2hlY2spKSYmKFxucmVzdEtleXMubGVuZ3RoPT09MHx8XG4hIWNoZWNrJiZcbkNYKFxuY2hlY2spXG4gYEZhciBmdW5jdGlvbnMgdW5leHBlY3RlZCBwcm9wZXJ0aWVzIGJlc2lkZXMgLm5hbWUgYW5kIC5sZW5ndGggJHtyZXN0S2V5c31gKSk7XG5cbiB9XG5yZXR1cm4hIWNoZWNrJiZDWChjaGVjaykgYHVucmVjb2duaXplZCB0eXBlb2YgJHtjYW5kaWRhdGV9YDtcbiB9LFxuXG5hc3NlcnRWYWxpZDooY2FuZGlkYXRlKT0+Y2hlY2tSZW1vdGFibGUoY2FuZGlkYXRlLGFzc2VydENoZWNrZXIpLFxuXG5ldmVyeTooX3Bhc3NhYmxlLF9mbik9PnRydWV9KTskaM2PX29uY2UuUmVtb3RhYmxlSGVscGVyKFJlbW90YWJsZUhlbHBlcik7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3NlcnRJZmFjZSI6WyJhc3NlcnRJZmFjZSJdLCJnZXRJbnRlcmZhY2VPZiI6WyJnZXRJbnRlcmZhY2VPZiJdLCJSZW1vdGFibGVIZWxwZXIiOlsiUmVtb3RhYmxlSGVscGVyIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAfx1kK1DAAAtQwAACsAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvc2FmZS1wcm9taXNlLmpzeyJpbXBvcnRzIjpbIkBlbmRvL3Byb21pc2Uta2l0IiwiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGUtaGVscGVycy5qcyJdLCJleHBvcnRzIjpbImFzc2VydFNhZmVQcm9taXNlIiwiaXNTYWZlUHJvbWlzZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGlzUHJvbWlzZSxxLGFzc2VydENoZWNrZXIsaGFzT3duUHJvcGVydHlPZixDWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJpc1Byb21pc2VcIiwgWyRozY9fYSA9PiAoaXNQcm9taXNlID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXSxbXCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiaGFzT3duUHJvcGVydHlPZlwiLCBbJGjNj19hID0+IChoYXNPd25Qcm9wZXJ0eU9mID0gJGjNj19hKV1dLFtcIkNYXCIsIFskaM2PX2EgPT4gKENYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cblxuY29uc3R7aXNGcm96ZW4sZ2V0UHJvdG90eXBlT2YsZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yfT1PYmplY3Q7XG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7dG9TdHJpbmdUYWd9PVN5bWJvbDtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgY2hlY2tQcm9taXNlT3duS2V5cz0ocHIsY2hlY2spPT57XG5jb25zdCBrZXlzPW93bktleXMocHIpO1xuXG5pZihrZXlzLmxlbmd0aD09PTApe1xucmV0dXJuIHRydWU7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgdW5rbm93bktleXM9a2V5cy5maWx0ZXIoXG4oa2V5KT0+dHlwZW9mIGtleSE9PSdzeW1ib2wnfHwhaGFzT3duUHJvcGVydHlPZihQcm9taXNlLnByb3RvdHlwZSxrZXkpKTtcblxuXG5pZih1bmtub3duS2V5cy5sZW5ndGghPT0wKXtcbnJldHVybiBDWChcbmNoZWNrKVxuIGAke3ByfSAtIE11c3Qgbm90IGhhdmUgYW55IG93biBwcm9wZXJ0aWVzOiAke3EodW5rbm93bktleXMpfWA7XG4gfVxuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tTYWZlT3duS2V5PShrZXkpPT57XG5pZihrZXk9PT10b1N0cmluZ1RhZyl7XG4vL1xuLy9cbmNvbnN0IHRhZ0Rlc2M9Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByLHRvU3RyaW5nVGFnKTtcbmFzc2VydCh0YWdEZXNjIT09dW5kZWZpbmVkKTtcbnJldHVybihcbihoYXNPd25Qcm9wZXJ0eU9mKHRhZ0Rlc2MsJ3ZhbHVlJyl8fFxuQ1goXG5jaGVjaylcbiBgT3duIEBAdG9TdHJpbmdUYWcgbXVzdCBiZSBhIGRhdGEgcHJvcGVydHksIG5vdCBhbiBhY2Nlc3NvcjogJHtxKHRhZ0Rlc2MpfWApJiYoXG50eXBlb2YgdGFnRGVzYy52YWx1ZT09PSdzdHJpbmcnfHxcbkNYKFxuY2hlY2spXG4gYE93biBAQHRvU3RyaW5nVGFnIHZhbHVlIG11c3QgYmUgYSBzdHJpbmc6ICR7cSh0YWdEZXNjLnZhbHVlKX1gKSYmKFxuIXRhZ0Rlc2MuZW51bWVyYWJsZXx8XG5DWChjaGVjaykgYE93biBAQHRvU3RyaW5nVGFnIG11c3Qgbm90IGJlIGVudW1lcmFibGU6ICR7cSh0YWdEZXNjKX1gKSk7XG5cbiB9XG5jb25zdCB2YWw9cHJba2V5XTtcbmlmKHZhbD09PXVuZGVmaW5lZHx8dHlwZW9mIHZhbD09PSdudW1iZXInKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKFxudHlwZW9mIHZhbD09PSdvYmplY3QnJiZcbnZhbCE9PW51bGwmJlxuaXNGcm96ZW4odmFsKSYmXG5nZXRQcm90b3R5cGVPZih2YWwpPT09T2JqZWN0LnByb3RvdHlwZSlcbntcbmNvbnN0IHN1YktleXM9b3duS2V5cyh2YWwpO1xuaWYoc3ViS2V5cy5sZW5ndGg9PT0wKXtcbnJldHVybiB0cnVlO1xuIH1cblxuaWYoXG5zdWJLZXlzLmxlbmd0aD09PTEmJlxuc3ViS2V5c1swXT09PSdkZXN0cm95ZWQnJiZcbnZhbC5kZXN0cm95ZWQ9PT1mYWxzZSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gQ1goXG5jaGVjaylcbiBgVW5leHBlY3RlZCBOb2RlIGFzeW5jX2hvb2tzIGFkZGl0aW9ucyB0byBwcm9taXNlOiAke3ByfS4ke3EoXG5TdHJpbmcoa2V5KSlcbiB9IGlzICR7dmFsfWA7XG4gfTtcblxucmV0dXJuIGtleXMuZXZlcnkoY2hlY2tTYWZlT3duS2V5KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgY2hlY2tTYWZlUHJvbWlzZT0ocHIsY2hlY2spPT57XG5yZXR1cm4oXG4oaXNGcm96ZW4ocHIpfHxDWChjaGVjaykgYCR7cHJ9IC0gTXVzdCBiZSBmcm96ZW5gKSYmKFxuaXNQcm9taXNlKHByKXx8Q1goY2hlY2spIGAke3ByfSAtIE11c3QgYmUgYSBwcm9taXNlYCkmJihcbmdldFByb3RvdHlwZU9mKHByKT09PVByb21pc2UucHJvdG90eXBlfHxcbkNYKGNoZWNrKSBgJHtwcn0gLSBNdXN0IGluaGVyaXQgZnJvbSBQcm9taXNlLnByb3RvdHlwZTogJHtxKFxuZ2V0UHJvdG90eXBlT2YocHIpKVxuIH1gKSYmXG5jaGVja1Byb21pc2VPd25LZXlzKC8qICAgICAgICAgICAgICAgICAgKi9wcixjaGVjaykpO1xuXG4gfTtcbmhhcmRlbihjaGVja1NhZmVQcm9taXNlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNTYWZlUHJvbWlzZT0ocHIpPT5jaGVja1NhZmVQcm9taXNlKHByLCh4KT0+eCk7JGjNj19vbmNlLmlzU2FmZVByb21pc2UoaXNTYWZlUHJvbWlzZSk7XG5oYXJkZW4oaXNTYWZlUHJvbWlzZSk7XG5cbmNvbnN0ICAgICAgICBhc3NlcnRTYWZlUHJvbWlzZT0ocHIpPT5jaGVja1NhZmVQcm9taXNlKHByLGFzc2VydENoZWNrZXIpOyRozY9fb25jZS5hc3NlcnRTYWZlUHJvbWlzZShhc3NlcnRTYWZlUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1NhZmVQcm9taXNlIjpbImlzU2FmZVByb21pc2UiXSwiYXNzZXJ0U2FmZVByb21pc2UiOlsiYXNzZXJ0U2FmZVByb21pc2UiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAALmnjqOEHAADhBwAAJQAAAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9zdHJpbmcuanN7ImltcG9ydHMiOlsiQGVuZG8vZW52LW9wdGlvbnMiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyIsImFzc2VydFdlbGxGb3JtZWRTdHJpbmciLCJpc1dlbGxGb3JtZWRTdHJpbmciXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBnZXRFbnZpcm9ubWVudE9wdGlvbixGYWlsOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vZW52LW9wdGlvbnNcIiwgW1tcImdldEVudmlyb25tZW50T3B0aW9uXCIsIFskaM2PX2EgPT4gKGdldEVudmlyb25tZW50T3B0aW9uID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cbi8vXG5jb25zdCBoYXNXZWxsRm9ybWVkU3RyaW5nTWV0aG9kPSEhU3RyaW5nLnByb3RvdHlwZS5pc1dlbGxGb3JtZWQ7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNXZWxsRm9ybWVkU3RyaW5nPWhhc1dlbGxGb3JtZWRTdHJpbmdNZXRob2Q/XG4oc3RyKT0+dHlwZW9mIHN0cj09PSdzdHJpbmcnJiZzdHIuaXNXZWxsRm9ybWVkKCk6XG4oc3RyKT0+e1xuaWYodHlwZW9mIHN0ciE9PSdzdHJpbmcnKXtcbnJldHVybiBmYWxzZTtcbiB9XG5mb3IoY29uc3QgY2ggb2Ygc3RyKXtcbi8vXG4vL1xuLy9cbmNvbnN0IGNwPS8qICAgICAgICAgICAgICAgICAqL2NoLmNvZGVQb2ludEF0KDApO1xuaWYoY3A+PTB4ZDgwMCYmY3A8PTB4ZGZmZil7XG4vL1xuLy9cbi8vXG5yZXR1cm4gZmFsc2U7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07JGjNj19vbmNlLmlzV2VsbEZvcm1lZFN0cmluZyhpc1dlbGxGb3JtZWRTdHJpbmcpO1xuaGFyZGVuKGlzV2VsbEZvcm1lZFN0cmluZyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgYXNzZXJ0V2VsbEZvcm1lZFN0cmluZz0oc3RyKT0+e1xuaXNXZWxsRm9ybWVkU3RyaW5nKHN0cil8fEZhaWwgYEV4cGVjdGVkIHdlbGwtZm9ybWVkIHVuaWNvZGUgc3RyaW5nOiAke3N0cn1gO1xuIH07JGjNj19vbmNlLmFzc2VydFdlbGxGb3JtZWRTdHJpbmcoYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5oYXJkZW4oYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyk7XG5cbmNvbnN0IE9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRT1cbmdldEVudmlyb25tZW50T3B0aW9uKCdPTkxZX1dFTExfRk9STUVEX1NUUklOR1NfUEFTU0FCTEUnLCdkaXNhYmxlZCcsW1xuJ2VuYWJsZWQnXSk9PT1cbidlbmFibGVkJztcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFBhc3NhYmxlU3RyaW5nPShzdHIpPT57XG50eXBlb2Ygc3RyPT09J3N0cmluZyd8fEZhaWwgYEV4cGVjdGVkIHN0cmluZyAke3N0cn1gO1xuIU9OTFlfV0VMTF9GT1JNRURfU1RSSU5HU19QQVNTQUJMRXx8YXNzZXJ0V2VsbEZvcm1lZFN0cmluZyhzdHIpO1xuIH07JGjNj19vbmNlLmFzc2VydFBhc3NhYmxlU3RyaW5nKGFzc2VydFBhc3NhYmxlU3RyaW5nKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZVN0cmluZyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1dlbGxGb3JtZWRTdHJpbmciOlsiaXNXZWxsRm9ybWVkU3RyaW5nIl0sImFzc2VydFdlbGxGb3JtZWRTdHJpbmciOlsiYXNzZXJ0V2VsbEZvcm1lZFN0cmluZyJdLCJhc3NlcnRQYXNzYWJsZVN0cmluZyI6WyJhc3NlcnRQYXNzYWJsZVN0cmluZyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAAFz1lyKwoAACsKAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3N5bWJvbC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJhc3NlcnRQYXNzYWJsZVN5bWJvbCIsImlzUGFzc2FibGVTeW1ib2wiLCJuYW1lRm9yUGFzc2FibGVTeW1ib2wiLCJwYXNzYWJsZVN5bWJvbEZvck5hbWUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBGYWlsLHE7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXSxbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG4gKi9cbmNvbnN0IHdlbGxLbm93blN5bWJvbE5hbWVzPW5ldyBNYXAoXG5vd25LZXlzKFN5bWJvbCkuXG5maWx0ZXIoXG4obmFtZSk9PnR5cGVvZiBuYW1lPT09J3N0cmluZycmJnR5cGVvZiBTeW1ib2xbbmFtZV09PT0nc3ltYm9sJykuXG5cbmZpbHRlcigobmFtZSk9Pntcbi8vXG4hbmFtZS5zdGFydHNXaXRoKCdAQCcpfHxcbkZhaWwgYERpZCBub3QgZXhwZWN0IFN5bWJvbCB0byBoYXZlIGEgc3ltYm9sLXZhbHVlZCBwcm9wZXJ0eSBuYW1lIHN0YXJ0aW5nIHdpdGggXCJAQFwiICR7cShcbm5hbWUpXG4gfWA7XG5yZXR1cm4gdHJ1ZTtcbiB9KVxuLy9cbi5tYXAoKG5hbWUpPT5bU3ltYm9sW25hbWVdLCBgQEAke25hbWV9YF0pKTtcblxuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQYXNzYWJsZVN5bWJvbD0oc3ltKT0+XG50eXBlb2Ygc3ltPT09J3N5bWJvbCcmJihcbnR5cGVvZiBTeW1ib2wua2V5Rm9yKHN5bSk9PT0nc3RyaW5nJ3x8d2VsbEtub3duU3ltYm9sTmFtZXMuaGFzKHN5bSkpOyRozY9fb25jZS5pc1Bhc3NhYmxlU3ltYm9sKGlzUGFzc2FibGVTeW1ib2wpO1xuaGFyZGVuKGlzUGFzc2FibGVTeW1ib2wpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0UGFzc2FibGVTeW1ib2w9KHN5bSk9PlxuaXNQYXNzYWJsZVN5bWJvbChzeW0pfHxcbkZhaWwgYE9ubHkgcmVnaXN0ZXJlZCBzeW1ib2xzIG9yIHdlbGwta25vd24gc3ltYm9scyBhcmUgcGFzc2FibGU6ICR7cShzeW0pfWA7JGjNj19vbmNlLmFzc2VydFBhc3NhYmxlU3ltYm9sKGFzc2VydFBhc3NhYmxlU3ltYm9sKTtcbmhhcmRlbihhc3NlcnRQYXNzYWJsZVN5bWJvbCk7XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG5hbWVGb3JQYXNzYWJsZVN5bWJvbD0oc3ltKT0+e1xuY29uc3QgbmFtZT1TeW1ib2wua2V5Rm9yKHN5bSk7XG5pZihuYW1lPT09dW5kZWZpbmVkKXtcbnJldHVybiB3ZWxsS25vd25TeW1ib2xOYW1lcy5nZXQoc3ltKTtcbiB9XG5pZihuYW1lLnN0YXJ0c1dpdGgoJ0BAJykpe1xucmV0dXJuIGBAQCR7bmFtZX1gO1xuIH1cbnJldHVybiBuYW1lO1xuIH07JGjNj19vbmNlLm5hbWVGb3JQYXNzYWJsZVN5bWJvbChuYW1lRm9yUGFzc2FibGVTeW1ib2wpO1xuaGFyZGVuKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCk7XG5cbmNvbnN0IEF0QXRQcmVmaXhQYXR0ZXJuPS9eQEAoLiopJC87XG5oYXJkZW4oQXRBdFByZWZpeFBhdHRlcm4pO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHBhc3NhYmxlU3ltYm9sRm9yTmFtZT0obmFtZSk9PntcbmlmKHR5cGVvZiBuYW1lIT09J3N0cmluZycpe1xucmV0dXJuIHVuZGVmaW5lZDtcbiB9XG5jb25zdCBtYXRjaD1BdEF0UHJlZml4UGF0dGVybi5leGVjKG5hbWUpO1xuaWYobWF0Y2gpe1xuY29uc3Qgc3VmZml4PW1hdGNoWzFdO1xuaWYoc3VmZml4LnN0YXJ0c1dpdGgoJ0BAJykpe1xucmV0dXJuIFN5bWJvbC5mb3Ioc3VmZml4KTtcbiB9ZWxzZXtcbmNvbnN0IHN5bT1TeW1ib2xbc3VmZml4XTtcbmlmKHR5cGVvZiBzeW09PT0nc3ltYm9sJyl7XG5yZXR1cm4gc3ltO1xuIH1cbkZhaWwgYFJlc2VydmVkIGZvciB3ZWxsIGtub3duIHN5bWJvbCAke3Eoc3VmZml4KX06ICR7cShuYW1lKX1gO1xuIH1cbiB9XG5yZXR1cm4gU3ltYm9sLmZvcihuYW1lKTtcbiB9OyRozY9fb25jZS5wYXNzYWJsZVN5bWJvbEZvck5hbWUocGFzc2FibGVTeW1ib2xGb3JOYW1lKTtcbmhhcmRlbihwYXNzYWJsZVN5bWJvbEZvck5hbWUpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiaXNQYXNzYWJsZVN5bWJvbCI6WyJpc1Bhc3NhYmxlU3ltYm9sIl0sImFzc2VydFBhc3NhYmxlU3ltYm9sIjpbImFzc2VydFBhc3NhYmxlU3ltYm9sIl0sIm5hbWVGb3JQYXNzYWJsZVN5bWJvbCI6WyJuYW1lRm9yUGFzc2FibGVTeW1ib2wiXSwicGFzc2FibGVTeW1ib2xGb3JOYW1lIjpbInBhc3NhYmxlU3ltYm9sRm9yTmFtZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADi+PtLQwcAAEMHAAAlAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3RhZ2dlZC5qc3siaW1wb3J0cyI6WyJAZW5kby9lcnJvcnMiLCIuL3Bhc3NTdHlsZS1oZWxwZXJzLmpzIl0sImV4cG9ydHMiOlsiVGFnZ2VkSGVscGVyIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRmFpbCxhc3NlcnRDaGVja2VyLGNoZWNrVGFnUmVjb3JkLFBBU1NfU1RZTEUsZ2V0T3duRGF0YURlc2NyaXB0b3IsY2hlY2tQYXNzU3R5bGU7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9lcnJvcnNcIiwgW1tcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlLWhlbHBlcnMuanNcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJjaGVja1RhZ1JlY29yZFwiLCBbJGjNj19hID0+IChjaGVja1RhZ1JlY29yZCA9ICRozY9fYSldXSxbXCJQQVNTX1NUWUxFXCIsIFskaM2PX2EgPT4gKFBBU1NfU1RZTEUgPSAkaM2PX2EpXV0sW1wiZ2V0T3duRGF0YURlc2NyaXB0b3JcIiwgWyRozY9fYSA9PiAoZ2V0T3duRGF0YURlc2NyaXB0b3IgPSAkaM2PX2EpXV0sW1wiY2hlY2tQYXNzU3R5bGVcIiwgWyRozY9fYSA9PiAoY2hlY2tQYXNzU3R5bGUgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuY29uc3R7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc309T2JqZWN0O1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIFRhZ2dlZEhlbHBlcj1oYXJkZW4oe1xuc3R5bGVOYW1lOid0YWdnZWQnLFxuXG5jYW5CZVZhbGlkOihjYW5kaWRhdGUsY2hlY2s9dW5kZWZpbmVkKT0+XG5jaGVja1Bhc3NTdHlsZShjYW5kaWRhdGUsY2FuZGlkYXRlW1BBU1NfU1RZTEVdLCd0YWdnZWQnLGNoZWNrKSxcblxuYXNzZXJ0VmFsaWQ6KGNhbmRpZGF0ZSxwYXNzU3R5bGVPZlJlY3VyKT0+e1xuY2hlY2tUYWdSZWNvcmQoY2FuZGlkYXRlLCd0YWdnZWQnLGFzc2VydENoZWNrZXIpO1xuXG4vL1xuY29uc3QgcGFzc1N0eWxlS2V5PS8qICAgICAgICAgICAgICAgICAgKi9QQVNTX1NUWUxFO1xuY29uc3QgdGFnS2V5PS8qICAgICAgICAgICAgICAgICAgKi9TeW1ib2wudG9TdHJpbmdUYWc7XG5jb25zdHtcbi8vXG5bLyogICAgICAgICAgICAgICAgICovcGFzc1N0eWxlS2V5XTpfcGFzc1N0eWxlRGVzYyxcblsvKiAgICAgICAgICAgICAgICAgKi90YWdLZXldOl9sYWJlbERlc2MsXG5wYXlsb2FkOl9wYXlsb2FkRGVzYywvL1xuLi4ucmVzdERlc2NzfT1cbmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoY2FuZGlkYXRlKTtcbm93bktleXMocmVzdERlc2NzKS5sZW5ndGg9PT0wfHxcbkZhaWwgYFVuZXhwZWN0ZWQgcHJvcGVydGllcyBvbiB0YWdnZWQgcmVjb3JkICR7b3duS2V5cyhyZXN0RGVzY3MpfWA7XG5cbi8vXG4vL1xucGFzc1N0eWxlT2ZSZWN1cihcbmdldE93bkRhdGFEZXNjcmlwdG9yKGNhbmRpZGF0ZSwncGF5bG9hZCcsdHJ1ZSxhc3NlcnRDaGVja2VyKS52YWx1ZSk7XG5cbiB9fSk7JGjNj19vbmNlLlRhZ2dlZEhlbHBlcihUYWdnZWRIZWxwZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiVGFnZ2VkSGVscGVyIjpbIlRhZ2dlZEhlbHBlciJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACKS8Q2JwkAACcJAAApAAAAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3R5cGVHdWFyZHMuanN7ImltcG9ydHMiOlsiQGVuZG8vZXJyb3JzIiwiLi9wYXNzU3R5bGVPZi5qcyJdLCJleHBvcnRzIjpbImFzc2VydENvcHlBcnJheSIsImFzc2VydFJlY29yZCIsImFzc2VydFJlbW90YWJsZSIsImlzQ29weUFycmF5IiwiaXNSZWNvcmQiLCJpc1JlbW90YWJsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IEZhaWwscSxwYXNzU3R5bGVPZjskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2Vycm9yc1wiLCBbW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXV1dLFtcIi4vcGFzc1N0eWxlT2YuanNcIiwgW1tcInBhc3NTdHlsZU9mXCIsIFskaM2PX2EgPT4gKHBhc3NTdHlsZU9mID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgaXNDb3B5QXJyYXk9KGFycik9PnBhc3NTdHlsZU9mKGFycik9PT0nY29weUFycmF5JzskaM2PX29uY2UuaXNDb3B5QXJyYXkoaXNDb3B5QXJyYXkpO1xuaGFyZGVuKGlzQ29weUFycmF5KTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVjb3JkPShyZWNvcmQpPT5wYXNzU3R5bGVPZihyZWNvcmQpPT09J2NvcHlSZWNvcmQnOyRozY9fb25jZS5pc1JlY29yZChpc1JlY29yZCk7XG5oYXJkZW4oaXNSZWNvcmQpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0IGlzUmVtb3RhYmxlPShyZW1vdGFibGUpPT5wYXNzU3R5bGVPZihyZW1vdGFibGUpPT09J3JlbW90YWJsZSc7JGjNj19vbmNlLmlzUmVtb3RhYmxlKGlzUmVtb3RhYmxlKTtcbmhhcmRlbihpc1JlbW90YWJsZSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydENvcHlBcnJheT0oYXJyLG9wdE5hbWVPZkFycmF5PSdBbGxlZ2VkIGFycmF5Jyk9PntcbmNvbnN0IHBhc3NTdHlsZT1wYXNzU3R5bGVPZihhcnIpO1xucGFzc1N0eWxlPT09J2NvcHlBcnJheSd8fFxuRmFpbCBgJHtxKG9wdE5hbWVPZkFycmF5KX0gJHthcnJ9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgYXJyYXksIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weUFycmF5KGFzc2VydENvcHlBcnJheSk7XG5oYXJkZW4oYXNzZXJ0Q29weUFycmF5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYXNzZXJ0UmVjb3JkPShyZWNvcmQsb3B0TmFtZU9mUmVjb3JkPSdBbGxlZ2VkIHJlY29yZCcpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmVjb3JkKTtcbnBhc3NTdHlsZT09PSdjb3B5UmVjb3JkJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVjb3JkKX0gJHtyZWNvcmR9IG11c3QgYmUgYSBwYXNzLWJ5LWNvcHkgcmVjb3JkLCBub3QgJHtxKFxucGFzc1N0eWxlKVxuIH1gO1xuIH07JGjNj19vbmNlLmFzc2VydFJlY29yZChhc3NlcnRSZWNvcmQpO1xuaGFyZGVuKGFzc2VydFJlY29yZCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGFzc2VydFJlbW90YWJsZT0oXG5yZW1vdGFibGUsXG5vcHROYW1lT2ZSZW1vdGFibGU9J0FsbGVnZWQgcmVtb3RhYmxlJyk9Plxue1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJlbW90YWJsZSk7XG5wYXNzU3R5bGU9PT0ncmVtb3RhYmxlJ3x8XG5GYWlsIGAke3Eob3B0TmFtZU9mUmVtb3RhYmxlKX0gJHtyZW1vdGFibGV9IG11c3QgYmUgYSByZW1vdGFibGUsIG5vdCAke3EoXG5wYXNzU3R5bGUpXG4gfWA7XG4gfTskaM2PX29uY2UuYXNzZXJ0UmVtb3RhYmxlKGFzc2VydFJlbW90YWJsZSk7XG5oYXJkZW4oYXNzZXJ0UmVtb3RhYmxlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImlzQ29weUFycmF5IjpbImlzQ29weUFycmF5Il0sImlzUmVjb3JkIjpbImlzUmVjb3JkIl0sImlzUmVtb3RhYmxlIjpbImlzUmVtb3RhYmxlIl0sImFzc2VydENvcHlBcnJheSI6WyJhc3NlcnRDb3B5QXJyYXkiXSwiYXNzZXJ0UmVjb3JkIjpbImFzc2VydFJlY29yZCJdLCJhc3NlcnRSZW1vdGFibGUiOlsiYXNzZXJ0UmVtb3RhYmxlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAVESyZ5AQAAeQEAACQAAABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAA8LU7RuYOAADmDgAAHgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuOC9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzIiwiLi9zcmMva2V5cy9jb3B5U2V0LmpzIiwiLi9zcmMva2V5cy9jb3B5QmFnLmpzIiwiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qcyIsIi4vc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qcyIsIi4vc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qcyIsIi4vc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qcyIsIi4vc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanMiLCIuL3NyYy90eXBlcy5qcyIsIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiLCJAZW5kby9jb21tb24vb2JqZWN0LW1hcC5qcyJdLCJleHBvcnRzIjpbImFzc2VydEtleSIsImFzc2VydEtleSIsImJhZ1VuaW9uIiwiYmFnVW5pb24iLCJlbGVtZW50c0lzRGlzam9pbnQiLCJlbGVtZW50c0lzRGlzam9pbnQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRSYW5rQ292ZXIiLCJnZXRSYW5rQ292ZXIiLCJzZXRDb21wYXJlIiwic2V0Q29tcGFyZSIsbnVsbCxudWxsLG51bGwsbnVsbF0sInJlZXhwb3J0cyI6WyIuL3NyYy90eXBlcy5qcyJdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtbXCIuL3NyYy9rZXlzL2NoZWNrS2V5LmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL2NvcHlTZXQuanNcIiwgW11dLFtcIi4vc3JjL2tleXMvY29weUJhZy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9jb21wYXJlS2V5cy5qc1wiLCBbXV0sW1wiLi9zcmMva2V5cy9tZXJnZS1zZXQtb3BlcmF0b3JzLmpzXCIsIFtdXSxbXCIuL3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanNcIiwgW11dLFtcIi4vc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qc1wiLCBbXV0sW1wiLi9zcmMvcGF0dGVybnMvZ2V0R3VhcmRQYXlsb2Fkcy5qc1wiLCBbXV0sW1wiLi9zcmMvdHlwZXMuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanNcIiwgW11dLFtcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtdXV0pOyAgIFxufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnsiLi9zcmMva2V5cy9jaGVja0tleS5qcyI6W1siaXNLZXkiLCJpc0tleSJdLFsiYXNzZXJ0S2V5IiwiYXNzZXJ0S2V5Il0sWyJhc3NlcnRTY2FsYXJLZXkiLCJhc3NlcnRTY2FsYXJLZXkiXSxbImlzQ29weVNldCIsImlzQ29weVNldCJdLFsiYXNzZXJ0Q29weVNldCIsImFzc2VydENvcHlTZXQiXSxbIm1ha2VDb3B5U2V0IiwibWFrZUNvcHlTZXQiXSxbImdldENvcHlTZXRLZXlzIiwiZ2V0Q29weVNldEtleXMiXSxbImlzQ29weUJhZyIsImlzQ29weUJhZyJdLFsiYXNzZXJ0Q29weUJhZyIsImFzc2VydENvcHlCYWciXSxbIm1ha2VDb3B5QmFnIiwibWFrZUNvcHlCYWciXSxbIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlCYWdGcm9tRWxlbWVudHMiXSxbImdldENvcHlCYWdFbnRyaWVzIiwiZ2V0Q29weUJhZ0VudHJpZXMiXSxbImlzQ29weU1hcCIsImlzQ29weU1hcCJdLFsiYXNzZXJ0Q29weU1hcCIsImFzc2VydENvcHlNYXAiXSxbIm1ha2VDb3B5TWFwIiwibWFrZUNvcHlNYXAiXSxbImdldENvcHlNYXBFbnRyaWVzIiwiZ2V0Q29weU1hcEVudHJpZXMiXV0sIi4vc3JjL2tleXMvY29weVNldC5qcyI6W1siY29lcmNlVG9FbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiXV0sIi4vc3JjL2tleXMvY29weUJhZy5qcyI6W1siY29lcmNlVG9CYWdFbnRyaWVzIiwiY29lcmNlVG9CYWdFbnRyaWVzIl1dLCIuL3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzIjpbWyJiYWdDb21wYXJlIiwiYmFnQ29tcGFyZSJdLFsic2V0Q29tcGFyZSIsInNldENvbXBhcmUiXSxbImNvbXBhcmVLZXlzIiwiY29tcGFyZUtleXMiXSxbImtleUxUIiwia2V5TFQiXSxbImtleUxURSIsImtleUxURSJdLFsia2V5RVEiLCJrZXlFUSJdLFsia2V5R1RFIiwia2V5R1RFIl0sWyJrZXlHVCIsImtleUdUIl1dLCIuL3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanMiOltbImVsZW1lbnRzSXNTdXBlcnNldCIsImVsZW1lbnRzSXNTdXBlcnNldCJdLFsiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc0Rpc2pvaW50Il0sWyJlbGVtZW50c0NvbXBhcmUiLCJlbGVtZW50c0NvbXBhcmUiXSxbImVsZW1lbnRzVW5pb24iLCJlbGVtZW50c1VuaW9uIl0sWyJlbGVtZW50c0Rpc2pvaW50VW5pb24iLCJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSxbImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSxbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLFsic2V0SXNTdXBlcnNldCIsInNldElzU3VwZXJzZXQiXSxbInNldElzRGlzam9pbnQiLCJzZXRJc0Rpc2pvaW50Il0sWyJzZXRVbmlvbiIsInNldFVuaW9uIl0sWyJzZXREaXNqb2ludFVuaW9uIiwic2V0RGlzam9pbnRVbmlvbiJdLFsic2V0SW50ZXJzZWN0aW9uIiwic2V0SW50ZXJzZWN0aW9uIl0sWyJzZXREaXNqb2ludFN1YnRyYWN0Iiwic2V0RGlzam9pbnRTdWJ0cmFjdCJdXSwiLi9zcmMva2V5cy9tZXJnZS1iYWctb3BlcmF0b3JzLmpzIjpbWyJiYWdJc1N1cGVyYmFnIiwiYmFnSXNTdXBlcmJhZyJdLFsiYmFnVW5pb24iLCJiYWdVbmlvbiJdLFsiYmFnSW50ZXJzZWN0aW9uIiwiYmFnSW50ZXJzZWN0aW9uIl0sWyJiYWdEaXNqb2ludFN1YnRyYWN0IiwiYmFnRGlzam9pbnRTdWJ0cmFjdCJdXSwiLi9zcmMvcGF0dGVybnMvcGF0dGVybk1hdGNoZXJzLmpzIjpbWyJNIiwiTSJdLFsiZ2V0UmFua0NvdmVyIiwiZ2V0UmFua0NvdmVyIl0sWyJpc1BhdHRlcm4iLCJpc1BhdHRlcm4iXSxbImFzc2VydFBhdHRlcm4iLCJhc3NlcnRQYXR0ZXJuIl0sWyJtYXRjaGVzIiwibWF0Y2hlcyJdLFsibXVzdE1hdGNoIiwibXVzdE1hdGNoIl0sWyJpc0F3YWl0QXJnR3VhcmQiLCJpc0F3YWl0QXJnR3VhcmQiXSxbImFzc2VydEF3YWl0QXJnR3VhcmQiLCJhc3NlcnRBd2FpdEFyZ0d1YXJkIl0sWyJpc1Jhd0d1YXJkIiwiaXNSYXdHdWFyZCJdLFsiYXNzZXJ0UmF3R3VhcmQiLCJhc3NlcnRSYXdHdWFyZCJdLFsiYXNzZXJ0TWV0aG9kR3VhcmQiLCJhc3NlcnRNZXRob2RHdWFyZCJdLFsiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiLCJhc3NlcnRJbnRlcmZhY2VHdWFyZCJdLFsia2luZE9mIiwia2luZE9mIl1dLCIuL3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzIjpbWyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCIsImdldEF3YWl0QXJnR3VhcmRQYXlsb2FkIl0sWyJnZXRNZXRob2RHdWFyZFBheWxvYWQiLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiXSxbImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCIsImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCJdLFsiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyIsImdldEludGVyZmFjZU1ldGhvZEtleXMiXV0sIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiOltbImxpc3REaWZmZXJlbmNlIiwibGlzdERpZmZlcmVuY2UiXV0sIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIjpbWyJvYmplY3RNYXAiLCJvYmplY3RNYXAiXV19LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnt9LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAMzG/TxoMgAAaDIAACoAAABAZW5kby9wYXR0ZXJucy12MS40Ljgvc3JjL2tleXMvY2hlY2tLZXkuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9pZGVudC1jaGVja2VyLmpzIiwiQGVuZG8vZXJyb3JzIiwiLi9jb3B5U2V0LmpzIiwiLi9jb3B5QmFnLmpzIl0sImV4cG9ydHMiOlsiYXNzZXJ0Q29weUJhZyIsImFzc2VydENvcHlNYXAiLCJhc3NlcnRDb3B5U2V0IiwiYXNzZXJ0S2V5IiwiYXNzZXJ0UHJpbWl0aXZlS2V5IiwiYXNzZXJ0U2NhbGFyS2V5IiwiY2hlY2tDb3B5QmFnIiwiY2hlY2tDb3B5TWFwIiwiY2hlY2tDb3B5U2V0IiwiY2hlY2tLZXkiLCJjaGVja1NjYWxhcktleSIsImNvcHlNYXBLZXlTZXQiLCJldmVyeUNvcHlCYWdFbnRyeSIsImV2ZXJ5Q29weU1hcEtleSIsImV2ZXJ5Q29weU1hcFZhbHVlIiwiZXZlcnlDb3B5U2V0S2V5IiwiZ2V0Q29weUJhZ0VudHJpZXMiLCJnZXRDb3B5TWFwRW50cmllcyIsImdldENvcHlNYXBFbnRyeUFycmF5IiwiZ2V0Q29weU1hcEtleXMiLCJnZXRDb3B5TWFwVmFsdWVzIiwiZ2V0Q29weVNldEtleXMiLCJpc0NvcHlCYWciLCJpc0NvcHlNYXAiLCJpc0NvcHlTZXQiLCJpc0tleSIsImlzUHJpbWl0aXZlS2V5IiwiaXNTY2FsYXJLZXkiLCJtYWtlQ29weUJhZyIsIm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzIiwibWFrZUNvcHlNYXAiLCJtYWtlQ29weVNldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsYXNzZXJ0UGFzc2FibGUsRmFyLGdldFRhZyxpc09iamVjdCxtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGNvbXBhcmVBbnRpUmFuayxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCxzb3J0QnlSYW5rLGlkZW50Q2hlY2tlcixYLHEsRmFpbCxjaGVja0VsZW1lbnRzLG1ha2VTZXRPZkVsZW1lbnRzLGNoZWNrQmFnRW50cmllcyxtYWtlQmFnT2ZFbnRyaWVzOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcImFzc2VydFBhc3NhYmxlXCIsIFskaM2PX2EgPT4gKGFzc2VydFBhc3NhYmxlID0gJGjNj19hKV1dLFtcIkZhclwiLCBbJGjNj19hID0+IChGYXIgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJpc09iamVjdFwiLCBbJGjNj19hID0+IChpc09iamVjdCA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vaWRlbnQtY2hlY2tlci5qc1wiLCBbW1wiaWRlbnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGlkZW50Q2hlY2tlciA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dLFtcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlTZXQuanNcIiwgW1tcImNoZWNrRWxlbWVudHNcIiwgWyRozY9fYSA9PiAoY2hlY2tFbGVtZW50cyA9ICRozY9fYSldXSxbXCJtYWtlU2V0T2ZFbGVtZW50c1wiLCBbJGjNj19hID0+IChtYWtlU2V0T2ZFbGVtZW50cyA9ICRozY9fYSldXV1dLFtcIi4vY29weUJhZy5qc1wiLCBbW1wiY2hlY2tCYWdFbnRyaWVzXCIsIFskaM2PX2EgPT4gKGNoZWNrQmFnRW50cmllcyA9ICRozY9fYSldXSxbXCJtYWtlQmFnT2ZFbnRyaWVzXCIsIFskaM2PX2EgPT4gKG1ha2VCYWdPZkVudHJpZXMgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5jb25zdHtvd25LZXlzfT1SZWZsZWN0O1xuXG4vKlxuXG5cblxuICovXG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrUHJpbWl0aXZlS2V5PSh2YWwsY2hlY2spPT57XG5pZihpc09iamVjdCh2YWwpKXtcbnJldHVybihcbmNoZWNrIT09aWRlbnRDaGVja2VyJiZcbmNoZWNrKGZhbHNlLFggYEEgJHtxKHR5cGVvZiB2YWwpfSBjYW5ub3QgYmUgYSBwcmltaXRpdmU6ICR7dmFsfWApKTtcblxuIH1cbi8vXG4vL1xuYXNzZXJ0UGFzc2FibGUodmFsKTtcbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNQcmltaXRpdmVLZXk9KHZhbCk9PmNoZWNrUHJpbWl0aXZlS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc1ByaW1pdGl2ZUtleShpc1ByaW1pdGl2ZUtleSk7XG5oYXJkZW4oaXNQcmltaXRpdmVLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFByaW1pdGl2ZUtleT0odmFsKT0+e1xuY2hlY2tQcmltaXRpdmVLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydFByaW1pdGl2ZUtleShhc3NlcnRQcmltaXRpdmVLZXkpO1xuaGFyZGVuKGFzc2VydFByaW1pdGl2ZUtleSk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja1NjYWxhcktleT0odmFsLGNoZWNrKT0+e1xuaWYoaXNQcmltaXRpdmVLZXkodmFsKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsKTtcbmlmKHBhc3NTdHlsZT09PSdyZW1vdGFibGUnKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybiBjaGVjayhmYWxzZSxYIGBBICR7cShwYXNzU3R5bGUpfSBjYW5ub3QgYmUgYSBzY2FsYXIga2V5OiAke3ZhbH1gKTtcbiB9O1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5jaGVja1NjYWxhcktleShjaGVja1NjYWxhcktleSk7XG5jb25zdCAgICAgICAgaXNTY2FsYXJLZXk9KHZhbCk9PmNoZWNrU2NhbGFyS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc1NjYWxhcktleShpc1NjYWxhcktleSk7XG5oYXJkZW4oaXNTY2FsYXJLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydFNjYWxhcktleT0odmFsKT0+e1xuY2hlY2tTY2FsYXJLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydFNjYWxhcktleShhc3NlcnRTY2FsYXJLZXkpO1xuaGFyZGVuKGFzc2VydFNjYWxhcktleSk7XG5cbi8vXG5cbi8vXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG5jb25zdCBrZXlNZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBjaGVja0tleT0odmFsLGNoZWNrKT0+e1xuaWYoIWlzT2JqZWN0KHZhbCkpe1xuLy9cbi8vXG5hc3NlcnRQYXNzYWJsZSh2YWwpO1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmlmKGtleU1lbW8uaGFzKHZhbCkpe1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmNvbnN0IHJlc3VsdD1jaGVja0tleUludGVybmFsKHZhbCxjaGVjayk7XG5pZihyZXN1bHQpe1xuLy9cbi8vXG4vL1xua2V5TWVtby5hZGQodmFsKTtcbiB9XG4vL1xuLy9cbnJldHVybiByZXN1bHQ7XG4gfTskaM2PX29uY2UuY2hlY2tLZXkoY2hlY2tLZXkpO1xuaGFyZGVuKGNoZWNrS2V5KTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgaXNLZXk9KHZhbCk9PmNoZWNrS2V5KHZhbCxpZGVudENoZWNrZXIpOyRozY9fb25jZS5pc0tleShpc0tleSk7XG5oYXJkZW4oaXNLZXkpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydEtleT0odmFsKT0+e1xuY2hlY2tLZXkodmFsLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydEtleShhc3NlcnRLZXkpO1xuaGFyZGVuKGFzc2VydEtleSk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5U2V0TWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5U2V0PShzLGNoZWNrKT0+e1xuaWYoY29weVNldE1lbW8uaGFzKHMpKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IHJlc3VsdD1cbihwYXNzU3R5bGVPZihzKT09PSd0YWdnZWQnJiZnZXRUYWcocyk9PT0nY29weVNldCd8fFxuY2hlY2soZmFsc2UsWCBgTm90IGEgY29weVNldDogJHtzfWApKSYmXG5jaGVja0VsZW1lbnRzKHMucGF5bG9hZCxjaGVjaykmJlxuY2hlY2tLZXkocy5wYXlsb2FkLGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5jb3B5U2V0TWVtby5hZGQocyk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9OyRozY9fb25jZS5jaGVja0NvcHlTZXQoY2hlY2tDb3B5U2V0KTtcbmhhcmRlbihjaGVja0NvcHlTZXQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGlzQ29weVNldD0ocyk9PmNoZWNrQ29weVNldChzLGlkZW50Q2hlY2tlcik7JGjNj19vbmNlLmlzQ29weVNldChpc0NvcHlTZXQpO1xuaGFyZGVuKGlzQ29weVNldCk7XG5cbi8qXG5cblxuXG4gKi9cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGFzc2VydENvcHlTZXQ9KHMpPT57XG5jaGVja0NvcHlTZXQocyxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRDb3B5U2V0KGFzc2VydENvcHlTZXQpO1xuaGFyZGVuKGFzc2VydENvcHlTZXQpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weVNldEtleXM9KHMpPT57XG5hc3NlcnRDb3B5U2V0KHMpO1xucmV0dXJuIHMucGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRDb3B5U2V0S2V5cyhnZXRDb3B5U2V0S2V5cyk7XG5oYXJkZW4oZ2V0Q29weVNldEtleXMpO1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBldmVyeUNvcHlTZXRLZXk9KHMsZm4pPT5cbmdldENvcHlTZXRLZXlzKHMpLmV2ZXJ5KChrZXksaW5kZXgpPT5mbihrZXksaW5kZXgpKTskaM2PX29uY2UuZXZlcnlDb3B5U2V0S2V5KGV2ZXJ5Q29weVNldEtleSk7XG5oYXJkZW4oZXZlcnlDb3B5U2V0S2V5KTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VDb3B5U2V0PShlbGVtZW50SXRlcik9PntcbmNvbnN0IHJlc3VsdD1tYWtlU2V0T2ZFbGVtZW50cyhlbGVtZW50SXRlcik7XG5hc3NlcnRDb3B5U2V0KHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5U2V0KG1ha2VDb3B5U2V0KTtcbmhhcmRlbihtYWtlQ29weVNldCk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5QmFnTWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5QmFnPShiLGNoZWNrKT0+e1xuaWYoY29weUJhZ01lbW8uaGFzKGIpKXtcbnJldHVybiB0cnVlO1xuIH1cbmNvbnN0IHJlc3VsdD1cbihwYXNzU3R5bGVPZihiKT09PSd0YWdnZWQnJiZnZXRUYWcoYik9PT0nY29weUJhZyd8fFxuY2hlY2soZmFsc2UsWCBgTm90IGEgY29weUJhZzogJHtifWApKSYmXG5jaGVja0JhZ0VudHJpZXMoYi5wYXlsb2FkLGNoZWNrKSYmXG5jaGVja0tleShiLnBheWxvYWQsY2hlY2spO1xuaWYocmVzdWx0KXtcbmNvcHlCYWdNZW1vLmFkZChiKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmNoZWNrQ29weUJhZyhjaGVja0NvcHlCYWcpO1xuaGFyZGVuKGNoZWNrQ29weUJhZyk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5QmFnPShiKT0+Y2hlY2tDb3B5QmFnKGIsaWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNDb3B5QmFnKGlzQ29weUJhZyk7XG5oYXJkZW4oaXNDb3B5QmFnKTtcblxuLypcblxuXG5cbiAqL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgYXNzZXJ0Q29weUJhZz0oYik9PntcbmNoZWNrQ29weUJhZyhiLGFzc2VydENoZWNrZXIpO1xuIH07JGjNj19vbmNlLmFzc2VydENvcHlCYWcoYXNzZXJ0Q29weUJhZyk7XG5oYXJkZW4oYXNzZXJ0Q29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRDb3B5QmFnRW50cmllcz0oYik9PntcbmFzc2VydENvcHlCYWcoYik7XG5yZXR1cm4gYi5wYXlsb2FkO1xuIH07JGjNj19vbmNlLmdldENvcHlCYWdFbnRyaWVzKGdldENvcHlCYWdFbnRyaWVzKTtcbmhhcmRlbihnZXRDb3B5QmFnRW50cmllcyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGV2ZXJ5Q29weUJhZ0VudHJ5PShiLGZuKT0+XG5nZXRDb3B5QmFnRW50cmllcyhiKS5ldmVyeSgoZW50cnksaW5kZXgpPT5mbihlbnRyeSxpbmRleCkpOyRozY9fb25jZS5ldmVyeUNvcHlCYWdFbnRyeShldmVyeUNvcHlCYWdFbnRyeSk7XG5oYXJkZW4oZXZlcnlDb3B5QmFnRW50cnkpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvcHlCYWc9KGJhZ0VudHJ5SXRlcik9PntcbmNvbnN0IHJlc3VsdD1tYWtlQmFnT2ZFbnRyaWVzKGJhZ0VudHJ5SXRlcik7XG5hc3NlcnRDb3B5QmFnKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5QmFnKG1ha2VDb3B5QmFnKTtcbmhhcmRlbihtYWtlQ29weUJhZyk7XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29weUJhZ0Zyb21FbGVtZW50cz0oZWxlbWVudEl0ZXIpPT57XG4vL1xuLy9cbmNvbnN0IGZ1bGxDb21wYXJlPW1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5jb25zdCBzb3J0ZWQ9c29ydEJ5UmFuayhlbGVtZW50SXRlcixmdWxsQ29tcGFyZSk7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGVudHJpZXM9W107XG5mb3IobGV0IGk9MDtpPHNvcnRlZC5sZW5ndGg7KXtcbmNvbnN0IGs9c29ydGVkW2ldO1xubGV0IGo9aSsxO1xud2hpbGUoajxzb3J0ZWQubGVuZ3RoJiZmdWxsQ29tcGFyZShrLHNvcnRlZFtqXSk9PT0wKXtcbmorPTE7XG4gfVxuZW50cmllcy5wdXNoKFtrLEJpZ0ludChqLWkpXSk7XG5pPWo7XG4gfVxucmV0dXJuIG1ha2VDb3B5QmFnKGVudHJpZXMpO1xuIH07JGjNj19vbmNlLm1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzKG1ha2VDb3B5QmFnRnJvbUVsZW1lbnRzKTtcbmhhcmRlbihtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyk7XG5cbi8vXG5cbi8vXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBjb3B5TWFwTWVtbz1uZXcgV2Vha1NldCgpO1xuXG4vKlxuXG5cblxuICovXG5jb25zdCAgICAgICAgY2hlY2tDb3B5TWFwPShtLGNoZWNrKT0+e1xuaWYoY29weU1hcE1lbW8uaGFzKG0pKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKCEocGFzc1N0eWxlT2YobSk9PT0ndGFnZ2VkJyYmZ2V0VGFnKG0pPT09J2NvcHlNYXAnKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgTm90IGEgY29weU1hcDogJHttfWApO1xuIH1cbmNvbnN0e3BheWxvYWR9PW07XG5pZihwYXNzU3R5bGVPZihwYXlsb2FkKSE9PSdjb3B5UmVjb3JkJyl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgQSBjb3B5TWFwJ3MgcGF5bG9hZCBtdXN0IGJlIGEgcmVjb3JkOiAke219YCk7XG4gfVxuY29uc3R7a2V5cyx2YWx1ZXMsLi4ucmVzdH09cGF5bG9hZDtcbmNvbnN0IHJlc3VsdD1cbihvd25LZXlzKHJlc3QpLmxlbmd0aD09PTB8fFxuY2hlY2soXG5mYWxzZSxcblggYEEgY29weU1hcCdzIHBheWxvYWQgbXVzdCBvbmx5IGhhdmUgLmtleXMgYW5kIC52YWx1ZXM6ICR7bX1gKSkmJlxuXG5jaGVja0VsZW1lbnRzKGtleXMsY2hlY2spJiZcbmNoZWNrS2V5KGtleXMsY2hlY2spJiYoXG5wYXNzU3R5bGVPZih2YWx1ZXMpPT09J2NvcHlBcnJheSd8fFxuY2hlY2soZmFsc2UsWCBgQSBjb3B5TWFwJ3MgLnZhbHVlcyBtdXN0IGJlIGEgY29weUFycmF5OiAke219YCkpJiYoXG5rZXlzLmxlbmd0aD09PXZhbHVlcy5sZW5ndGh8fFxuY2hlY2soXG5mYWxzZSxcblggYEEgY29weU1hcCBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGtleXMgYW5kIHZhbHVlczogJHttfWApKTtcblxuaWYocmVzdWx0KXtcbmNvcHlNYXBNZW1vLmFkZChtKTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLmNoZWNrQ29weU1hcChjaGVja0NvcHlNYXApO1xuaGFyZGVuKGNoZWNrQ29weU1hcCk7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgaXNDb3B5TWFwPShtKT0+Y2hlY2tDb3B5TWFwKG0saWRlbnRDaGVja2VyKTskaM2PX29uY2UuaXNDb3B5TWFwKGlzQ29weU1hcCk7XG5oYXJkZW4oaXNDb3B5TWFwKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRDb3B5TWFwPShtKT0+e1xuY2hlY2tDb3B5TWFwKG0sYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0Q29weU1hcChhc3NlcnRDb3B5TWFwKTtcbmhhcmRlbihhc3NlcnRDb3B5TWFwKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2V0Q29weU1hcEtleXM9KG0pPT57XG5hc3NlcnRDb3B5TWFwKG0pO1xucmV0dXJuIG0ucGF5bG9hZC5rZXlzO1xuIH07JGjNj19vbmNlLmdldENvcHlNYXBLZXlzKGdldENvcHlNYXBLZXlzKTtcbmhhcmRlbihnZXRDb3B5TWFwS2V5cyk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBWYWx1ZXM9KG0pPT57XG5hc3NlcnRDb3B5TWFwKG0pO1xucmV0dXJuIG0ucGF5bG9hZC52YWx1ZXM7XG4gfTskaM2PX29uY2UuZ2V0Q29weU1hcFZhbHVlcyhnZXRDb3B5TWFwVmFsdWVzKTtcbmhhcmRlbihnZXRDb3B5TWFwVmFsdWVzKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBFbnRyeUFycmF5PShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbmNvbnN0e1xucGF5bG9hZDp7a2V5cyx2YWx1ZXN9fT1cbm07XG5yZXR1cm4gaGFyZGVuKGtleXMubWFwKChrZXksaSk9PltrZXksdmFsdWVzW2ldXSkpO1xuIH07JGjNj19vbmNlLmdldENvcHlNYXBFbnRyeUFycmF5KGdldENvcHlNYXBFbnRyeUFycmF5KTtcbmhhcmRlbihnZXRDb3B5TWFwRW50cnlBcnJheSk7XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldENvcHlNYXBFbnRyaWVzPShtKT0+e1xuYXNzZXJ0Q29weU1hcChtKTtcbmNvbnN0e1xucGF5bG9hZDp7a2V5cyx2YWx1ZXN9fT1cbm07XG5jb25zdHtsZW5ndGh9PS8qICAgICAgICAgICAgICAgICova2V5cztcbnJldHVybiBGYXIoJ0NvcHlNYXAgZW50cmllcyBpdGVyYWJsZScse1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9PntcbmxldCBpPTA7XG5yZXR1cm4gRmFyKCdDb3B5TWFwIGVudHJpZXMgaXRlcmF0b3InLHtcbm5leHQ6KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgcmVzdWx0O1xuaWYoaTxsZW5ndGgpe1xucmVzdWx0PWhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTpba2V5c1tpXSx2YWx1ZXNbaV1dfSk7XG5pKz0xO1xucmV0dXJuIHJlc3VsdDtcbiB9ZWxzZXtcbnJlc3VsdD1oYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH19KTtcblxuIH19KTtcblxuIH07JGjNj19vbmNlLmdldENvcHlNYXBFbnRyaWVzKGdldENvcHlNYXBFbnRyaWVzKTtcbmhhcmRlbihnZXRDb3B5TWFwRW50cmllcyk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5TWFwS2V5PShtLGZuKT0+XG5nZXRDb3B5TWFwS2V5cyhtKS5ldmVyeSgoa2V5LGluZGV4KT0+Zm4oa2V5LGluZGV4KSk7JGjNj19vbmNlLmV2ZXJ5Q29weU1hcEtleShldmVyeUNvcHlNYXBLZXkpO1xuaGFyZGVuKGV2ZXJ5Q29weU1hcEtleSk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZXZlcnlDb3B5TWFwVmFsdWU9KG0sZm4pPT5cbmdldENvcHlNYXBWYWx1ZXMobSkuZXZlcnkoKHZhbHVlLGluZGV4KT0+Zm4odmFsdWUsaW5kZXgpKTskaM2PX29uY2UuZXZlcnlDb3B5TWFwVmFsdWUoZXZlcnlDb3B5TWFwVmFsdWUpO1xuaGFyZGVuKGV2ZXJ5Q29weU1hcFZhbHVlKTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgY29weU1hcEtleVNldD0obSk9PlxuLy9cbm1ha2VUYWdnZWQoJ2NvcHlTZXQnLG0ucGF5bG9hZC5rZXlzKTskaM2PX29uY2UuY29weU1hcEtleVNldChjb3B5TWFwS2V5U2V0KTtcbmhhcmRlbihjb3B5TWFwS2V5U2V0KTtcblxuLypcblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZUNvcHlNYXA9KGVudHJpZXMpPT57XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHNvcnRlZEVudHJpZXM9c29ydEJ5UmFuayhlbnRyaWVzLGNvbXBhcmVBbnRpUmFuayk7XG5jb25zdCBrZXlzPXNvcnRlZEVudHJpZXMubWFwKChbayxfdl0pPT5rKTtcbmNvbnN0IHZhbHVlcz1zb3J0ZWRFbnRyaWVzLm1hcCgoW19rLHZdKT0+dik7XG5jb25zdCByZXN1bHQ9bWFrZVRhZ2dlZCgnY29weU1hcCcse2tleXMsdmFsdWVzfSk7XG5hc3NlcnRDb3B5TWFwKHJlc3VsdCk7XG5yZXR1cm4gcmVzdWx0O1xuIH07JGjNj19vbmNlLm1ha2VDb3B5TWFwKG1ha2VDb3B5TWFwKTtcbmhhcmRlbihtYWtlQ29weU1hcCk7XG5cbi8vXG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrS2V5SW50ZXJuYWw9KHZhbCxjaGVjayk9PntcbmNvbnN0IGNoZWNrSXQ9KGNoaWxkKT0+Y2hlY2tLZXkoY2hpbGQsY2hlY2spO1xuXG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YodmFsKTtcbnN3aXRjaChwYXNzU3R5bGUpe1xuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xucmV0dXJuIE9iamVjdC52YWx1ZXModmFsKS5ldmVyeShjaGVja0l0KTtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbnJldHVybiB2YWwuZXZlcnkoY2hlY2tJdCk7XG4gfVxuY2FzZSd0YWdnZWQnOntcbmNvbnN0IHRhZz1nZXRUYWcodmFsKTtcbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG5yZXR1cm4gY2hlY2tDb3B5U2V0KHZhbCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG5yZXR1cm4gY2hlY2tDb3B5QmFnKHZhbCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5yZXR1cm4oXG5jaGVja0NvcHlNYXAodmFsLGNoZWNrKSYmXG4vL1xuLy9cbi8vXG5ldmVyeUNvcHlNYXBWYWx1ZSh2YWwsY2hlY2tJdCkpO1xuXG4gfVxuZGVmYXVsdDp7XG5yZXR1cm4oXG5jaGVjayE9PWlkZW50Q2hlY2tlciYmXG5jaGVjayhmYWxzZSxYIGBBIHBhc3NhYmxlIHRhZ2dlZCAke3EodGFnKX0gaXMgbm90IGEga2V5OiAke3ZhbH1gKSk7XG5cbiB9fVxuXG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5jYXNlJ2Vycm9yJzpcbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYEEgJHtxKHBhc3NTdHlsZSl9IGNhbm5vdCBiZSBhIGtleWApO1xuIH1cbmRlZmF1bHQ6e1xuLy9cbi8vXG50aHJvdyBGYWlsIGB1bmV4cGVjdGVkIHBhc3NTdHlsZSAke3EocGFzc1N0eWxlKX06ICR7dmFsfWA7XG4gfX1cblxuIH07XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1ByaW1pdGl2ZUtleSI6WyJpc1ByaW1pdGl2ZUtleSJdLCJhc3NlcnRQcmltaXRpdmVLZXkiOlsiYXNzZXJ0UHJpbWl0aXZlS2V5Il0sImNoZWNrU2NhbGFyS2V5IjpbImNoZWNrU2NhbGFyS2V5Il0sImlzU2NhbGFyS2V5IjpbImlzU2NhbGFyS2V5Il0sImFzc2VydFNjYWxhcktleSI6WyJhc3NlcnRTY2FsYXJLZXkiXSwiY2hlY2tLZXkiOlsiY2hlY2tLZXkiXSwiaXNLZXkiOlsiaXNLZXkiXSwiYXNzZXJ0S2V5IjpbImFzc2VydEtleSJdLCJjaGVja0NvcHlTZXQiOlsiY2hlY2tDb3B5U2V0Il0sImlzQ29weVNldCI6WyJpc0NvcHlTZXQiXSwiYXNzZXJ0Q29weVNldCI6WyJhc3NlcnRDb3B5U2V0Il0sImdldENvcHlTZXRLZXlzIjpbImdldENvcHlTZXRLZXlzIl0sImV2ZXJ5Q29weVNldEtleSI6WyJldmVyeUNvcHlTZXRLZXkiXSwibWFrZUNvcHlTZXQiOlsibWFrZUNvcHlTZXQiXSwiY2hlY2tDb3B5QmFnIjpbImNoZWNrQ29weUJhZyJdLCJpc0NvcHlCYWciOlsiaXNDb3B5QmFnIl0sImFzc2VydENvcHlCYWciOlsiYXNzZXJ0Q29weUJhZyJdLCJnZXRDb3B5QmFnRW50cmllcyI6WyJnZXRDb3B5QmFnRW50cmllcyJdLCJldmVyeUNvcHlCYWdFbnRyeSI6WyJldmVyeUNvcHlCYWdFbnRyeSJdLCJtYWtlQ29weUJhZyI6WyJtYWtlQ29weUJhZyJdLCJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyI6WyJtYWtlQ29weUJhZ0Zyb21FbGVtZW50cyJdLCJjaGVja0NvcHlNYXAiOlsiY2hlY2tDb3B5TWFwIl0sImlzQ29weU1hcCI6WyJpc0NvcHlNYXAiXSwiYXNzZXJ0Q29weU1hcCI6WyJhc3NlcnRDb3B5TWFwIl0sImdldENvcHlNYXBLZXlzIjpbImdldENvcHlNYXBLZXlzIl0sImdldENvcHlNYXBWYWx1ZXMiOlsiZ2V0Q29weU1hcFZhbHVlcyJdLCJnZXRDb3B5TWFwRW50cnlBcnJheSI6WyJnZXRDb3B5TWFwRW50cnlBcnJheSJdLCJnZXRDb3B5TWFwRW50cmllcyI6WyJnZXRDb3B5TWFwRW50cmllcyJdLCJldmVyeUNvcHlNYXBLZXkiOlsiZXZlcnlDb3B5TWFwS2V5Il0sImV2ZXJ5Q29weU1hcFZhbHVlIjpbImV2ZXJ5Q29weU1hcFZhbHVlIl0sImNvcHlNYXBLZXlTZXQiOlsiY29weU1hcEtleVNldCJdLCJtYWtlQ29weU1hcCI6WyJtYWtlQ29weU1hcCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAABkvkKTQhUAAEIVAAAtAAAAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL21hcnNoYWwiLCJAZW5kby9lcnJvcnMiLCIuL2NoZWNrS2V5LmpzIiwiLi9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qcyJdLCJleHBvcnRzIjpbImJhZ0NvbXBhcmUiLCJjb21wYXJlS2V5cyIsImtleUVRIiwia2V5R1QiLCJrZXlHVEUiLCJrZXlMVCIsImtleUxURSIsInNldENvbXBhcmUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBwYXNzU3R5bGVPZixnZXRUYWcsY29tcGFyZVJhbmsscmVjb3JkTmFtZXMscmVjb3JkVmFsdWVzLHRyaXZpYWxDb21wYXJhdG9yLHEsRmFpbCxhc3NlcnRLZXksZ2V0Q29weUJhZ0VudHJpZXMsZ2V0Q29weU1hcEVudHJ5QXJyYXksZ2V0Q29weVNldEtleXMsbWFrZUNvbXBhcmVDb2xsZWN0aW9uOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiZ2V0VGFnXCIsIFskaM2PX2EgPT4gKGdldFRhZyA9ICRozY9fYSldXSxbXCJjb21wYXJlUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlUmFuayA9ICRozY9fYSldXSxbXCJyZWNvcmROYW1lc1wiLCBbJGjNj19hID0+IChyZWNvcmROYW1lcyA9ICRozY9fYSldXSxbXCJyZWNvcmRWYWx1ZXNcIiwgWyRozY9fYSA9PiAocmVjb3JkVmFsdWVzID0gJGjNj19hKV1dLFtcInRyaXZpYWxDb21wYXJhdG9yXCIsIFskaM2PX2EgPT4gKHRyaXZpYWxDb21wYXJhdG9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV0sW1wiLi9jaGVja0tleS5qc1wiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJnZXRDb3B5QmFnRW50cmllc1wiLCBbJGjNj19hID0+IChnZXRDb3B5QmFnRW50cmllcyA9ICRozY9fYSldXSxbXCJnZXRDb3B5TWFwRW50cnlBcnJheVwiLCBbJGjNj19hID0+IChnZXRDb3B5TWFwRW50cnlBcnJheSA9ICRozY9fYSldXSxbXCJnZXRDb3B5U2V0S2V5c1wiLCBbJGjNj19hID0+IChnZXRDb3B5U2V0S2V5cyA9ICRozY9fYSldXV1dLFtcIi4va2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanNcIiwgW1tcIm1ha2VDb21wYXJlQ29sbGVjdGlvblwiLCBbJGjNj19hID0+IChtYWtlQ29tcGFyZUNvbGxlY3Rpb24gPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgc2V0Q29tcGFyZT1tYWtlQ29tcGFyZUNvbGxlY3Rpb24oXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuKHMpPT5oYXJkZW4oZ2V0Q29weVNldEtleXMocykubWFwKChrZXkpPT5ba2V5LDFdKSksXG5cbjAsXG50cml2aWFsQ29tcGFyYXRvcik7JGjNj19vbmNlLnNldENvbXBhcmUoc2V0Q29tcGFyZSk7XG5cbmhhcmRlbihzZXRDb21wYXJlKTtcblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGJhZ0NvbXBhcmU9bWFrZUNvbXBhcmVDb2xsZWN0aW9uKFxuZ2V0Q29weUJhZ0VudHJpZXMsXG4wbixcbnRyaXZpYWxDb21wYXJhdG9yKTskaM2PX29uY2UuYmFnQ29tcGFyZShiYWdDb21wYXJlKTtcblxuaGFyZGVuKGJhZ0NvbXBhcmUpO1xuXG4vL1xuLy9cbi8vXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0IEFCU0VOVD1TeW1ib2woJ2Fic2VudCcpO1xuLypcblxuXG5cblxuXG5cbiAqL1xuLy9cbmNvbnN0IF9tYXBDb21wYXJlPW1ha2VDb21wYXJlQ29sbGVjdGlvbihcbmdldENvcHlNYXBFbnRyeUFycmF5LFxuQUJTRU5ULFxuKGxlZnRWYWx1ZSxyaWdodFZhbHVlKT0+e1xuaWYobGVmdFZhbHVlPT09QUJTRU5UJiZyaWdodFZhbHVlPT09QUJTRU5UKXtcbnRocm93IEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGFic2VudCBlbnRyeSBwYWlyYDtcbiB9ZWxzZSBpZihsZWZ0VmFsdWU9PT1BQlNFTlQpe1xucmV0dXJuLTE7XG4gfWVsc2UgaWYocmlnaHRWYWx1ZT09PUFCU0VOVCl7XG5yZXR1cm4gMTtcbiB9ZWxzZXtcbi8vXG5yZXR1cm4gY29tcGFyZUtleXMobGVmdFZhbHVlLHJpZ2h0VmFsdWUpO1xuIH1cbiB9KTtcblxuaGFyZGVuKF9tYXBDb21wYXJlKTtcblxuLyogICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIGNvbXBhcmVLZXlzPShsZWZ0LHJpZ2h0KT0+e1xuYXNzZXJ0S2V5KGxlZnQpO1xuYXNzZXJ0S2V5KHJpZ2h0KTtcbmNvbnN0IGxlZnRTdHlsZT1wYXNzU3R5bGVPZihsZWZ0KTtcbmNvbnN0IHJpZ2h0U3R5bGU9cGFzc1N0eWxlT2YocmlnaHQpO1xuaWYobGVmdFN0eWxlIT09cmlnaHRTdHlsZSl7XG4vL1xucmV0dXJuIE5hTjtcbiB9XG5zd2l0Y2gobGVmdFN0eWxlKXtcbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOlxuY2FzZSdzeW1ib2wnOntcbi8vXG5yZXR1cm4gY29tcGFyZVJhbmsobGVmdCxyaWdodCk7XG4gfVxuY2FzZSdudW1iZXInOntcbmNvbnN0IHJhbmtDb21wPWNvbXBhcmVSYW5rKGxlZnQscmlnaHQpO1xuaWYocmFua0NvbXA9PT0wKXtcbnJldHVybiAwO1xuIH1cbmlmKE51bWJlci5pc05hTihsZWZ0KXx8TnVtYmVyLmlzTmFOKHJpZ2h0KSl7XG4vL1xuYXNzZXJ0KCFOdW1iZXIuaXNOYU4obGVmdCl8fCFOdW1iZXIuaXNOYU4ocmlnaHQpKTtcbnJldHVybiBOYU47XG4gfVxuLy9cbi8vXG5yZXR1cm4gcmFua0NvbXA7XG4gfVxuY2FzZSdyZW1vdGFibGUnOntcbmlmKGxlZnQ9PT1yaWdodCl7XG5yZXR1cm4gMDtcbiB9XG4vL1xuLy9cbnJldHVybiBOYU47XG4gfVxuY2FzZSdjb3B5QXJyYXknOntcbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgbGVuPU1hdGgubWluKGxlZnQubGVuZ3RoLHJpZ2h0Lmxlbmd0aCk7XG5mb3IobGV0IGk9MDtpPGxlbjtpKz0xKXtcbi8vXG5jb25zdCByZXN1bHQ9Y29tcGFyZUtleXMobGVmdFtpXSxyaWdodFtpXSk7XG5pZihyZXN1bHQhPT0wKXtcbnJldHVybiByZXN1bHQ7XG4gfVxuIH1cbi8vXG4vL1xuLy9cbnJldHVybiBjb21wYXJlUmFuayhsZWZ0Lmxlbmd0aCxyaWdodC5sZW5ndGgpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG5jb25zdCBsZWZ0TmFtZXM9cmVjb3JkTmFtZXMobGVmdCk7XG4vL1xuY29uc3QgcmlnaHROYW1lcz1yZWNvcmROYW1lcyhyaWdodCk7XG5cbi8vXG5pZigha2V5RVEobGVmdE5hbWVzLHJpZ2h0TmFtZXMpKXtcbi8vXG4vL1xuLy9cbi8vXG4vL1xucmV0dXJuIE5hTjtcbiB9XG4vL1xuY29uc3QgbGVmdFZhbHVlcz1yZWNvcmRWYWx1ZXMobGVmdCxsZWZ0TmFtZXMpO1xuLy9cbmNvbnN0IHJpZ2h0VmFsdWVzPXJlY29yZFZhbHVlcyhyaWdodCxyaWdodE5hbWVzKTtcbi8vXG4vL1xubGV0IHJlc3VsdD0wO1xuZm9yKGxldCBpPTA7aTxsZWZ0VmFsdWVzLmxlbmd0aDtpKz0xKXtcbmNvbnN0IGNvbXA9Y29tcGFyZUtleXMobGVmdFZhbHVlc1tpXSxyaWdodFZhbHVlc1tpXSk7XG5pZihOdW1iZXIuaXNOYU4oY29tcCkpe1xucmV0dXJuIE5hTjtcbiB9XG5pZihyZXN1bHQhPT1jb21wJiZjb21wIT09MCl7XG5pZihyZXN1bHQ9PT0wKXtcbnJlc3VsdD1jb21wO1xuIH1lbHNle1xuYXNzZXJ0KFxucmVzdWx0PT09LTEmJmNvbXA9PT0xfHxyZXN1bHQ9PT0xJiZjb21wPT09LTEpO1xuXG5yZXR1cm4gTmFOO1xuIH1cbiB9XG4gfVxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbnJldHVybiByZXN1bHQ7XG4gfVxuY2FzZSd0YWdnZWQnOntcbi8vXG5jb25zdCBsZWZ0VGFnPWdldFRhZyhsZWZ0KTtcbi8vXG5jb25zdCByaWdodFRhZz1nZXRUYWcocmlnaHQpO1xuaWYobGVmdFRhZyE9PXJpZ2h0VGFnKXtcbi8vXG5yZXR1cm4gTmFOO1xuIH1cbnN3aXRjaChsZWZ0VGFnKXtcbmNhc2UnY29weVNldCc6e1xuLy9cbnJldHVybiBzZXRDb21wYXJlKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UnY29weUJhZyc6e1xuLy9cbnJldHVybiBiYWdDb21wYXJlKGxlZnQscmlnaHQpO1xuIH1cbmNhc2UnY29weU1hcCc6e1xuLy9cbi8vXG50aHJvdyBGYWlsIGBNYXAgY29tcGFyaXNvbiBub3QgeWV0IGltcGxlbWVudGVkOiAke2xlZnR9IHZzICR7cmlnaHR9YDtcbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYHVuZXhwZWN0ZWQgdGFnICR7cShsZWZ0VGFnKX06ICR7bGVmdH1gO1xuIH19XG5cbiB9XG5kZWZhdWx0OntcbnRocm93IEZhaWwgYHVuZXhwZWN0ZWQgcGFzc1N0eWxlICR7cShsZWZ0U3R5bGUpfTogJHtsZWZ0fWA7XG4gfX1cblxuIH07JGjNj19vbmNlLmNvbXBhcmVLZXlzKGNvbXBhcmVLZXlzKTtcbmhhcmRlbihjb21wYXJlS2V5cyk7XG5cbmNvbnN0ICAgICAgICBrZXlMVD0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPDA7JGjNj19vbmNlLmtleUxUKGtleUxUKTtcbmhhcmRlbihrZXlMVCk7XG5cbmNvbnN0ICAgICAgICBrZXlMVEU9KGxlZnQscmlnaHQpPT5jb21wYXJlS2V5cyhsZWZ0LHJpZ2h0KTw9MDskaM2PX29uY2Uua2V5TFRFKGtleUxURSk7XG5oYXJkZW4oa2V5TFRFKTtcblxuY29uc3QgICAgICAgIGtleUVRPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk9PT0wOyRozY9fb25jZS5rZXlFUShrZXlFUSk7XG5oYXJkZW4oa2V5RVEpO1xuXG5jb25zdCAgICAgICAga2V5R1RFPShsZWZ0LHJpZ2h0KT0+Y29tcGFyZUtleXMobGVmdCxyaWdodCk+PTA7JGjNj19vbmNlLmtleUdURShrZXlHVEUpO1xuaGFyZGVuKGtleUdURSk7XG5cbmNvbnN0ICAgICAgICBrZXlHVD0obGVmdCxyaWdodCk9PmNvbXBhcmVLZXlzKGxlZnQscmlnaHQpPjA7JGjNj19vbmNlLmtleUdUKGtleUdUKTtcbmhhcmRlbihrZXlHVCk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJzZXRDb21wYXJlIjpbInNldENvbXBhcmUiXSwiYmFnQ29tcGFyZSI6WyJiYWdDb21wYXJlIl0sImNvbXBhcmVLZXlzIjpbImNvbXBhcmVLZXlzIl0sImtleUxUIjpbImtleUxUIl0sImtleUxURSI6WyJrZXlMVEUiXSwia2V5RVEiOlsia2V5RVEiXSwia2V5R1RFIjpbImtleUdURSJdLCJrZXlHVCI6WyJrZXlHVCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADAWLhF9g0AAPYNAAApAAAAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9rZXlzL2NvcHlCYWcuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydEJhZ0VudHJpZXMiLCJhc3NlcnROb0R1cGxpY2F0ZUtleXMiLCJjaGVja0JhZ0VudHJpZXMiLCJjb2VyY2VUb0JhZ0VudHJpZXMiLCJtYWtlQmFnT2ZFbnRyaWVzIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0Q2hlY2tlcixtYWtlVGFnZ2VkLHBhc3NTdHlsZU9mLGNvbXBhcmVBbnRpUmFuayxpc1JhbmtTb3J0ZWQsbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxYOyRozY9faW1wb3J0cyhbW1wiQGVuZG8vbWFyc2hhbFwiLCBbW1wiYXNzZXJ0Q2hlY2tlclwiLCBbJGjNj19hID0+IChhc3NlcnRDaGVja2VyID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcImlzUmFua1NvcnRlZFwiLCBbJGjNj19hID0+IChpc1JhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wibWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXRcIiwgWyRozY9fYSA9PiAobWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQgPSAkaM2PX2EpXV0sW1wic29ydEJ5UmFua1wiLCBbJGjNj19hID0+IChzb3J0QnlSYW5rID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrTm9EdXBsaWNhdGVLZXlzPShiYWdFbnRyaWVzLGZ1bGxDb21wYXJlLGNoZWNrKT0+e1xuLy9cbi8vXG4vL1xuLy9cbmZ1bGxDb21wYXJlPWZ1bGxDb21wYXJlfHxtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCgpLmFudGlDb21wYXJhdG9yO1xuXG4vL1xuLy9cbi8vXG5iYWdFbnRyaWVzPXNvcnRCeVJhbmsoYmFnRW50cmllcyxmdWxsQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWJhZ0VudHJpZXM7XG5mb3IobGV0IGk9MTtpPGxlbmd0aDtpKz0xKXtcbmNvbnN0IGswPWJhZ0VudHJpZXNbaS0xXVswXTtcbmNvbnN0IGsxPWJhZ0VudHJpZXNbaV1bMF07XG5pZihmdWxsQ29tcGFyZShrMCxrMSk9PT0wKXtcbnJldHVybiBjaGVjayhmYWxzZSxYIGB2YWx1ZSBoYXMgZHVwbGljYXRlIGtleXM6ICR7azB9YCk7XG4gfVxuIH1cbnJldHVybiB0cnVlO1xuIH07XG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydE5vRHVwbGljYXRlS2V5cz0oYmFnRW50cmllcyxmdWxsQ29tcGFyZT11bmRlZmluZWQpPT57XG5jaGVja05vRHVwbGljYXRlS2V5cyhiYWdFbnRyaWVzLGZ1bGxDb21wYXJlLGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzKGFzc2VydE5vRHVwbGljYXRlS2V5cyk7XG5jb25zdCAgICAgICAgY2hlY2tCYWdFbnRyaWVzPShiYWdFbnRyaWVzLGNoZWNrKT0+e1xuaWYocGFzc1N0eWxlT2YoYmFnRW50cmllcykhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBlbnRyaWVzIG9mIGEgY29weUJhZyBtdXN0IGJlIGEgY29weUFycmF5OiAke2JhZ0VudHJpZXN9YCk7XG5cbiB9XG5pZighaXNSYW5rU29ydGVkKGJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rKSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBlbnRyaWVzIG9mIGEgY29weUJhZyBtdXN0IGJlIHNvcnRlZCBpbiByZXZlcnNlIHJhbmsgb3JkZXI6ICR7YmFnRW50cmllc31gKTtcblxuIH1cbmZvcihjb25zdCBlbnRyeSBvZiBiYWdFbnRyaWVzKXtcbmlmKFxucGFzc1N0eWxlT2YoZW50cnkpIT09J2NvcHlBcnJheSd8fFxuZW50cnkubGVuZ3RoIT09Mnx8XG50eXBlb2YgZW50cnlbMV0hPT0nYmlnaW50JylcbntcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgRWFjaCBlbnRyeSBvZiBhIGNvcHlCYWcgbXVzdCBiZSBwYWlyIG9mIGEga2V5IGFuZCBhIGJpZ2ludCByZXByZXNlbnRpbmcgYSBjb3VudDogJHtlbnRyeX1gKTtcblxuIH1cbmlmKGVudHJ5WzFdPDEpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBFYWNoIGVudHJ5IG9mIGEgY29weUJhZyBtdXN0IGhhdmUgYSBwb3NpdGl2ZSBjb3VudDogJHtlbnRyeX1gKTtcblxuIH1cbiB9XG4vL1xucmV0dXJuIGNoZWNrTm9EdXBsaWNhdGVLZXlzKGJhZ0VudHJpZXMsdW5kZWZpbmVkLGNoZWNrKTtcbiB9OyRozY9fb25jZS5jaGVja0JhZ0VudHJpZXMoY2hlY2tCYWdFbnRyaWVzKTtcbmhhcmRlbihjaGVja0JhZ0VudHJpZXMpO1xuXG4vL1xuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnRCYWdFbnRyaWVzPShiYWdFbnRyaWVzKT0+e1xuY2hlY2tCYWdFbnRyaWVzKGJhZ0VudHJpZXMsYXNzZXJ0Q2hlY2tlcik7XG4gfTskaM2PX29uY2UuYXNzZXJ0QmFnRW50cmllcyhhc3NlcnRCYWdFbnRyaWVzKTtcbmhhcmRlbihhc3NlcnRCYWdFbnRyaWVzKTtcblxuLypcblxuXG4gKi9cbmNvbnN0ICAgICAgICBjb2VyY2VUb0JhZ0VudHJpZXM9KGJhZ0VudHJpZXNMaXN0KT0+e1xuY29uc3QgYmFnRW50cmllcz1zb3J0QnlSYW5rKGJhZ0VudHJpZXNMaXN0LGNvbXBhcmVBbnRpUmFuayk7XG5hc3NlcnRCYWdFbnRyaWVzKGJhZ0VudHJpZXMpO1xucmV0dXJuIGJhZ0VudHJpZXM7XG4gfTskaM2PX29uY2UuY29lcmNlVG9CYWdFbnRyaWVzKGNvZXJjZVRvQmFnRW50cmllcyk7XG5oYXJkZW4oY29lcmNlVG9CYWdFbnRyaWVzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VCYWdPZkVudHJpZXM9KGJhZ0VudHJ5SXRlcik9PlxubWFrZVRhZ2dlZCgnY29weUJhZycsY29lcmNlVG9CYWdFbnRyaWVzKGJhZ0VudHJ5SXRlcikpOyRozY9fb25jZS5tYWtlQmFnT2ZFbnRyaWVzKG1ha2VCYWdPZkVudHJpZXMpO1xuaGFyZGVuKG1ha2VCYWdPZkVudHJpZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzIjpbImFzc2VydE5vRHVwbGljYXRlS2V5cyJdLCJjaGVja0JhZ0VudHJpZXMiOlsiY2hlY2tCYWdFbnRyaWVzIl0sImFzc2VydEJhZ0VudHJpZXMiOlsiYXNzZXJ0QmFnRW50cmllcyJdLCJjb2VyY2VUb0JhZ0VudHJpZXMiOlsiY29lcmNlVG9CYWdFbnRyaWVzIl0sIm1ha2VCYWdPZkVudHJpZXMiOlsibWFrZUJhZ09mRW50cmllcyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB3nhOD/QsAAP0LAAApAAAAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9rZXlzL2NvcHlTZXQuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyJdLCJleHBvcnRzIjpbImFzc2VydEVsZW1lbnRzIiwiYXNzZXJ0Tm9EdXBsaWNhdGVzIiwiY2hlY2tFbGVtZW50cyIsImNvZXJjZVRvRWxlbWVudHMiLCJtYWtlU2V0T2ZFbGVtZW50cyJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydENoZWNrZXIsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixjb21wYXJlQW50aVJhbmssaXNSYW5rU29ydGVkLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmssWDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydENoZWNrZXJcIiwgWyRozY9fYSA9PiAoYXNzZXJ0Q2hlY2tlciA9ICRozY9fYSldXSxbXCJtYWtlVGFnZ2VkXCIsIFskaM2PX2EgPT4gKG1ha2VUYWdnZWQgPSAkaM2PX2EpXV0sW1wicGFzc1N0eWxlT2ZcIiwgWyRozY9fYSA9PiAocGFzc1N0eWxlT2YgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJpc1JhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoaXNSYW5rU29ydGVkID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wiWFwiLCBbJGjNj19hID0+IChYID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBjaGVja05vRHVwbGljYXRlcz0oZWxlbWVudHMsZnVsbENvbXBhcmUsY2hlY2spPT57XG4vL1xuLy9cbi8vXG4vL1xuZnVsbENvbXBhcmU9ZnVsbENvbXBhcmV8fG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0KCkuYW50aUNvbXBhcmF0b3I7XG5cbmVsZW1lbnRzPXNvcnRCeVJhbmsoZWxlbWVudHMsZnVsbENvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1lbGVtZW50cztcbmZvcihsZXQgaT0xO2k8bGVuZ3RoO2krPTEpe1xuY29uc3QgazA9ZWxlbWVudHNbaS0xXTtcbmNvbnN0IGsxPWVsZW1lbnRzW2ldO1xuaWYoZnVsbENvbXBhcmUoazAsazEpPT09MCl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgdmFsdWUgaGFzIGR1cGxpY2F0ZSBrZXlzOiAke2swfWApO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3NlcnROb0R1cGxpY2F0ZXM9KGVsZW1lbnRzLGZ1bGxDb21wYXJlPXVuZGVmaW5lZCk9PntcbmNoZWNrTm9EdXBsaWNhdGVzKGVsZW1lbnRzLGZ1bGxDb21wYXJlLGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8qXG5cblxuXG4gKi8kaM2PX29uY2UuYXNzZXJ0Tm9EdXBsaWNhdGVzKGFzc2VydE5vRHVwbGljYXRlcyk7XG5jb25zdCAgICAgICAgY2hlY2tFbGVtZW50cz0oZWxlbWVudHMsY2hlY2spPT57XG5pZihwYXNzU3R5bGVPZihlbGVtZW50cykhPT0nY29weUFycmF5Jyl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYFRoZSBrZXlzIG9mIGEgY29weVNldCBvciBjb3B5TWFwIG11c3QgYmUgYSBjb3B5QXJyYXk6ICR7ZWxlbWVudHN9YCk7XG5cbiB9XG5pZighaXNSYW5rU29ydGVkKGVsZW1lbnRzLGNvbXBhcmVBbnRpUmFuaykpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBUaGUga2V5cyBvZiBhIGNvcHlTZXQgb3IgY29weU1hcCBtdXN0IGJlIHNvcnRlZCBpbiByZXZlcnNlIHJhbmsgb3JkZXI6ICR7ZWxlbWVudHN9YCk7XG5cbiB9XG5yZXR1cm4gY2hlY2tOb0R1cGxpY2F0ZXMoZWxlbWVudHMsdW5kZWZpbmVkLGNoZWNrKTtcbiB9OyRozY9fb25jZS5jaGVja0VsZW1lbnRzKGNoZWNrRWxlbWVudHMpO1xuaGFyZGVuKGNoZWNrRWxlbWVudHMpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0RWxlbWVudHM9KGVsZW1lbnRzKT0+e1xuY2hlY2tFbGVtZW50cyhlbGVtZW50cyxhc3NlcnRDaGVja2VyKTtcbiB9OyRozY9fb25jZS5hc3NlcnRFbGVtZW50cyhhc3NlcnRFbGVtZW50cyk7XG5oYXJkZW4oYXNzZXJ0RWxlbWVudHMpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGNvZXJjZVRvRWxlbWVudHM9KGVsZW1lbnRzTGlzdCk9PntcbmNvbnN0IGVsZW1lbnRzPXNvcnRCeVJhbmsoZWxlbWVudHNMaXN0LGNvbXBhcmVBbnRpUmFuayk7XG5hc3NlcnRFbGVtZW50cyhlbGVtZW50cyk7XG5yZXR1cm4gZWxlbWVudHM7XG4gfTskaM2PX29uY2UuY29lcmNlVG9FbGVtZW50cyhjb2VyY2VUb0VsZW1lbnRzKTtcbmhhcmRlbihjb2VyY2VUb0VsZW1lbnRzKTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VTZXRPZkVsZW1lbnRzPShlbGVtZW50SXRlcik9PlxubWFrZVRhZ2dlZCgnY29weVNldCcsY29lcmNlVG9FbGVtZW50cyhlbGVtZW50SXRlcikpOyRozY9fb25jZS5tYWtlU2V0T2ZFbGVtZW50cyhtYWtlU2V0T2ZFbGVtZW50cyk7XG5oYXJkZW4obWFrZVNldE9mRWxlbWVudHMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYXNzZXJ0Tm9EdXBsaWNhdGVzIjpbImFzc2VydE5vRHVwbGljYXRlcyJdLCJjaGVja0VsZW1lbnRzIjpbImNoZWNrRWxlbWVudHMiXSwiYXNzZXJ0RWxlbWVudHMiOlsiYXNzZXJ0RWxlbWVudHMiXSwiY29lcmNlVG9FbGVtZW50cyI6WyJjb2VyY2VUb0VsZW1lbnRzIl0sIm1ha2VTZXRPZkVsZW1lbnRzIjpbIm1ha2VTZXRPZkVsZW1lbnRzIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAJNpZIUPEwAADxMAADkAAABAZW5kby9wYXR0ZXJucy12MS40Ljgvc3JjL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzIiwiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanMiLCJAZW5kby9lcnJvcnMiXSwiZXhwb3J0cyI6WyJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyIsIm1ha2VDb21wYXJlQ29sbGVjdGlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydFJhbmtTb3J0ZWQsY29tcGFyZUFudGlSYW5rLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmssbWFrZUl0ZXJhdG9yLG1ha2VBcnJheUl0ZXJhdG9yLHEsRmFpbDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2NvbW1vbi9tYWtlLWl0ZXJhdG9yLmpzXCIsIFtbXCJtYWtlSXRlcmF0b3JcIiwgWyRozY9fYSA9PiAobWFrZUl0ZXJhdG9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL21ha2UtYXJyYXktaXRlcmF0b3IuanNcIiwgW1tcIm1ha2VBcnJheUl0ZXJhdG9yXCIsIFskaM2PX2EgPT4gKG1ha2VBcnJheUl0ZXJhdG9yID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vZXJyb3JzXCIsIFtbXCJxXCIsIFskaM2PX2EgPT4gKHEgPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgZ2VuZXJhdGVGdWxsU29ydGVkRW50cmllcz0oZW50cmllcyxyYW5rQ29tcGFyZSxmdWxsQ29tcGFyZSk9Pntcbi8vXG5hc3NlcnRSYW5rU29ydGVkKGVudHJpZXMscmFua0NvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1lbnRyaWVzO1xubGV0IGk9MDtcbmxldCBzYW1lUmFua0l0ZXJhdG9yO1xucmV0dXJuIG1ha2VJdGVyYXRvcigoKT0+e1xuaWYoc2FtZVJhbmtJdGVyYXRvcil7XG5jb25zdCByZXN1bHQ9c2FtZVJhbmtJdGVyYXRvci5uZXh0KCk7XG5pZighcmVzdWx0LmRvbmUpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG5zYW1lUmFua0l0ZXJhdG9yPXVuZGVmaW5lZDtcbiB9XG5pZihpPGxlbmd0aCl7XG5jb25zdCBlbnRyeT1lbnRyaWVzW2ldO1xuLy9cbmxldCBqPWkrMTtcbndoaWxlKGo8bGVuZ3RoJiZyYW5rQ29tcGFyZShlbnRyeVswXSxlbnRyaWVzW2pdWzBdKT09PTApe1xuais9MTtcbiB9XG5pZihqPT09aSsxKXtcbi8vXG5pPWo7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlOmVudHJ5fSk7XG4gfVxuY29uc3QgdGllcz1lbnRyaWVzLnNsaWNlKGksaik7XG5pPWo7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IHNvcnRlZFRpZXM9c29ydEJ5UmFuayh0aWVzLGZ1bGxDb21wYXJlKTtcbmZvcihsZXQgaz0xO2s8c29ydGVkVGllcy5sZW5ndGg7ays9MSl7XG4vL1xuY29uc3Rba2V5MF09c29ydGVkVGllc1trLTFdO1xuY29uc3Rba2V5MV09c29ydGVkVGllc1trXTtcbk1hdGguc2lnbihmdWxsQ29tcGFyZShrZXkwLGtleTEpKXx8XG5GYWlsIGBEdXBsaWNhdGUgZW50cnkga2V5OiAke2tleTB9YDtcbiB9XG5zYW1lUmFua0l0ZXJhdG9yPW1ha2VBcnJheUl0ZXJhdG9yKHNvcnRlZFRpZXMpO1xucmV0dXJuIHNhbWVSYW5rSXRlcmF0b3IubmV4dCgpO1xuIH1cbnJldHVybiBoYXJkZW4oe2RvbmU6dHJ1ZSx2YWx1ZTp1bmRlZmluZWR9KTtcbiB9KTtcbiB9O1xuaGFyZGVuKGdlbmVyYXRlRnVsbFNvcnRlZEVudHJpZXMpO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXM9KFxuYzEsXG5jMixcbmdldEVudHJpZXMsXG5hYnNlbnRWYWx1ZSk9Plxue1xuY29uc3QgZTE9Z2V0RW50cmllcyhjMSk7XG5jb25zdCBlMj1nZXRFbnRyaWVzKGMyKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgZnVsbENvbXBhcmU9bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcbmNvbnN0IHg9Z2VuZXJhdGVGdWxsU29ydGVkRW50cmllcyhlMSxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xuY29uc3QgeT1nZW5lcmF0ZUZ1bGxTb3J0ZWRFbnRyaWVzKGUyLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5cbi8vXG4vL1xubGV0IHhEb25lO1xubGV0IHhLZXk7XG5sZXQgeFZhbHVlO1xubGV0IHlEb25lO1xubGV0IHlLZXk7XG5sZXQgeVZhbHVlO1xuY29uc3Qgbm9uRW50cnk9W3VuZGVmaW5lZCx1bmRlZmluZWRdO1xuY29uc3QgbmV4dFg9KCk9PntcbiF4RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRYIG11c3Qgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuY29uc3QgcmVzdWx0PXhWYWx1ZTtcbih7ZG9uZTp4RG9uZSx2YWx1ZTpbeEtleSx4VmFsdWVdPW5vbkVudHJ5fT14Lm5leHQoKSk7XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5uZXh0WCgpO1xuY29uc3QgbmV4dFk9KCk9PntcbiF5RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRZIG11c3Qgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuY29uc3QgcmVzdWx0PXlWYWx1ZTtcbih7ZG9uZTp5RG9uZSx2YWx1ZTpbeUtleSx5VmFsdWVdPW5vbkVudHJ5fT15Lm5leHQoKSk7XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5uZXh0WSgpO1xucmV0dXJuIG1ha2VJdGVyYXRvcigoKT0+e1xubGV0IGRvbmU9ZmFsc2U7XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB2YWx1ZTtcbmlmKHhEb25lJiZ5RG9uZSl7XG5kb25lPXRydWU7XG52YWx1ZT1bdW5kZWZpbmVkLGFic2VudFZhbHVlLGFic2VudFZhbHVlXTtcbiB9ZWxzZSBpZih4RG9uZSl7XG52YWx1ZT1beUtleSxhYnNlbnRWYWx1ZSxuZXh0WSgpXTtcbiB9ZWxzZSBpZih5RG9uZSl7XG52YWx1ZT1beEtleSxuZXh0WCgpLGFic2VudFZhbHVlXTtcbiB9ZWxzZXtcbi8vXG4vL1xuY29uc3QgY29tcD1mdWxsQ29tcGFyZSh4S2V5LHlLZXkpO1xuaWYoY29tcD09PTApe1xudmFsdWU9W3hLZXksbmV4dFgoKSxuZXh0WSgpXTtcbiB9ZWxzZSBpZihjb21wPDApe1xudmFsdWU9W3hLZXksbmV4dFgoKSxhYnNlbnRWYWx1ZV07XG4gfWVsc2UgaWYoY29tcD4wKXtcbnZhbHVlPVt5S2V5LGFic2VudFZhbHVlLG5leHRZKCldO1xuIH1lbHNle1xudGhyb3cgRmFpbCBgVW5leHBlY3RlZCBrZXkgY29tcGFyaXNvbiAke3EoY29tcCl9IGZvciAke3hLZXl9IHZzICR7eUtleX1gO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lLHZhbHVlfSk7XG4gfSk7XG4gfTskaM2PX29uY2UuZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMoZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMpO1xuaGFyZGVuKGdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzKTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBtYWtlQ29tcGFyZUNvbGxlY3Rpb249KGdldEVudHJpZXMsYWJzZW50VmFsdWUsY29tcGFyZVZhbHVlcyk9PlxuaGFyZGVuKChsZWZ0LHJpZ2h0KT0+e1xuY29uc3QgbWVyZ2VkPWdlbmVyYXRlQ29sbGVjdGlvblBhaXJFbnRyaWVzKFxubGVmdCxcbnJpZ2h0LFxuZ2V0RW50cmllcyxcbmFic2VudFZhbHVlKTtcblxubGV0IGxlZnRJc0JpZ2dlcj1mYWxzZTtcbmxldCByaWdodElzQmlnZ2VyPWZhbHNlO1xuZm9yKGNvbnN0W19rZXksbGVmdFZhbHVlLHJpZ2h0VmFsdWVdb2YgbWVyZ2VkKXtcbmNvbnN0IGNvbXA9Y29tcGFyZVZhbHVlcyhsZWZ0VmFsdWUscmlnaHRWYWx1ZSk7XG5pZihjb21wPT09MCl7XG4vL1xuY29udGludWU7XG4gfWVsc2UgaWYoY29tcDwwKXtcbi8vXG5yaWdodElzQmlnZ2VyPXRydWU7XG4gfWVsc2UgaWYoY29tcD4wKXtcbi8vXG5sZWZ0SXNCaWdnZXI9dHJ1ZTtcbiB9ZWxzZXtcbk51bWJlci5pc05hTihjb21wKXx8XG4vL1xuRmFpbCBgVW5leHBlY3RlZCB2YWx1ZSBjb21wYXJpc29uICR7cShjb21wKX0gZm9yICR7bGVmdFZhbHVlfSB2cyAke3JpZ2h0VmFsdWV9YDtcbnJldHVybiBOYU47XG4gfVxuaWYobGVmdElzQmlnZ2VyJiZyaWdodElzQmlnZ2VyKXtcbnJldHVybiBOYU47XG4gfVxuIH1cbi8vXG5yZXR1cm4gbGVmdElzQmlnZ2VyPzE6cmlnaHRJc0JpZ2dlcj8tMTowO1xuIH0pOyRozY9fb25jZS5tYWtlQ29tcGFyZUNvbGxlY3Rpb24obWFrZUNvbXBhcmVDb2xsZWN0aW9uKTtcbmhhcmRlbihtYWtlQ29tcGFyZUNvbGxlY3Rpb24pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMiOlsiZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMiXSwibWFrZUNvbXBhcmVDb2xsZWN0aW9uIjpbIm1ha2VDb21wYXJlQ29sbGVjdGlvbiJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACXGHwygRYAAIEWAAA1AAAAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9rZXlzL21lcmdlLWJhZy1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyIsIi4vY29weUJhZy5qcyJdLCJleHBvcnRzIjpbImJhZ0Rpc2pvaW50U3VidHJhY3QiLCJiYWdJbnRlcnNlY3Rpb24iLCJiYWdJc0Rpc2pvaW50IiwiYmFnSXNTdXBlcmJhZyIsImJhZ1VuaW9uIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgYXNzZXJ0UmFua1NvcnRlZCxjb21wYXJlQW50aVJhbmssbWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQsc29ydEJ5UmFuayxxLEZhaWwsYXNzZXJ0Tm9EdXBsaWNhdGVLZXlzLG1ha2VCYWdPZkVudHJpZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRSYW5rU29ydGVkXCIsIFskaM2PX2EgPT4gKGFzc2VydFJhbmtTb3J0ZWQgPSAkaM2PX2EpXV0sW1wiY29tcGFyZUFudGlSYW5rXCIsIFskaM2PX2EgPT4gKGNvbXBhcmVBbnRpUmFuayA9ICRozY9fYSldXSxbXCJtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdFwiLCBbJGjNj19hID0+IChtYWtlRnVsbE9yZGVyQ29tcGFyYXRvcktpdCA9ICRozY9fYSldXSxbXCJzb3J0QnlSYW5rXCIsIFskaM2PX2EgPT4gKHNvcnRCeVJhbmsgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9lcnJvcnNcIiwgW1tcInFcIiwgWyRozY9fYSA9PiAocSA9ICRozY9fYSldXSxbXCJGYWlsXCIsIFskaM2PX2EgPT4gKEZhaWwgPSAkaM2PX2EpXV1dXSxbXCIuL2NvcHlCYWcuanNcIiwgW1tcImFzc2VydE5vRHVwbGljYXRlS2V5c1wiLCBbJGjNj19hID0+IChhc3NlcnROb0R1cGxpY2F0ZUtleXMgPSAkaM2PX2EpXV0sW1wibWFrZUJhZ09mRW50cmllc1wiLCBbJGjNj19hID0+IChtYWtlQmFnT2ZFbnRyaWVzID0gJGjNj19hKV1dXV1dKTsgICBcblxuXG5cblxuXG5cblxuXG4vKlxuXG5cblxuICovXG5cbi8vXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBiYWdXaW5kb3dSZXNvcnQ9KGJhZ0VudHJpZXMscmFua0NvbXBhcmUsZnVsbENvbXBhcmUpPT57XG5hc3NlcnRSYW5rU29ydGVkKGJhZ0VudHJpZXMscmFua0NvbXBhcmUpO1xuY29uc3R7bGVuZ3RofT1iYWdFbnRyaWVzO1xubGV0IGk9MDtcbmxldCBvcHRJbm5lckl0ZXJhdG9yO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+XG5oYXJkZW4oe1xubmV4dDooKT0+e1xuaWYob3B0SW5uZXJJdGVyYXRvcil7XG5jb25zdCByZXN1bHQ9b3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG5pZihyZXN1bHQuZG9uZSl7XG5vcHRJbm5lckl0ZXJhdG9yPXVuZGVmaW5lZDtcbi8vXG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5pZihpPGxlbmd0aCl7XG5jb25zdCBlbnRyeT1iYWdFbnRyaWVzW2ldO1xubGV0IGo9aSsxO1xud2hpbGUoXG5qPGxlbmd0aCYmXG5yYW5rQ29tcGFyZShlbnRyeVswXSxiYWdFbnRyaWVzW2pdWzBdKT09PTApXG57XG5qKz0xO1xuIH1cbmlmKGo9PT1pKzEpe1xuaT1qO1xucmV0dXJuIGhhcmRlbih7ZG9uZTpmYWxzZSx2YWx1ZTplbnRyeX0pO1xuIH1cbmNvbnN0IHNpbWlsYXJSdW49YmFnRW50cmllcy5zbGljZShpLGopO1xuaT1qO1xuY29uc3QgcmVzb3J0ZWQ9c29ydEJ5UmFuayhzaW1pbGFyUnVuLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbmFzc2VydE5vRHVwbGljYXRlS2V5cyhyZXNvcnRlZCxmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbm9wdElubmVySXRlcmF0b3I9cmVzb3J0ZWRbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIG9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOltudWxsLDBuXX0pO1xuIH1cbiB9fSl9KTtcblxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0IG1lcmdlPSh4YmFnRW50cmllcyx5YmFnRW50cmllcyk9Pntcbi8vXG4vL1xuY29uc3QgZnVsbENvbXBhcmU9bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcblxuY29uc3QgeHM9YmFnV2luZG93UmVzb3J0KHhiYWdFbnRyaWVzLGNvbXBhcmVBbnRpUmFuayxmdWxsQ29tcGFyZSk7XG5jb25zdCB5cz1iYWdXaW5kb3dSZXNvcnQoeWJhZ0VudHJpZXMsY29tcGFyZUFudGlSYW5rLGZ1bGxDb21wYXJlKTtcbnJldHVybiBoYXJkZW4oe1xuW1N5bWJvbC5pdGVyYXRvcl06KCk9Pntcbi8vXG4vL1xuLy9cbi8qICAgICAgICAgICAgKi9cbmxldCB4O1xubGV0IHhjO1xubGV0IHhEb25lO1xuLyogICAgICAgICAgICAqL1xubGV0IHk7XG5sZXQgeWM7XG5sZXQgeURvbmU7XG5cbmNvbnN0IHhpPXhzW1N5bWJvbC5pdGVyYXRvcl0oKTtcbmNvbnN0IG5leHRYPSgpPT57XG4heERvbmV8fEZhaWwgYEludGVybmFsOiBuZXh0WCBzaG91bGQgbm90IGJlIGNhbGxlZCBvbmNlIGRvbmVgO1xuKHtcbmRvbmU6eERvbmUsXG52YWx1ZTpbeCx4Y119PVxueGkubmV4dCgpKTtcbiB9O1xubmV4dFgoKTtcblxuY29uc3QgeWk9eXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFk9KCk9PntcbiF5RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRZIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe1xuZG9uZTp5RG9uZSxcbnZhbHVlOlt5LHljXX09XG55aS5uZXh0KCkpO1xuIH07XG5uZXh0WSgpO1xuXG5yZXR1cm4gaGFyZGVuKHtcbm5leHQ6KCk9Pntcbi8qICAgICAgICAgICAgICAgICAgKi9cbmxldCBkb25lPWZhbHNlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCB2YWx1ZTtcbmlmKHhEb25lJiZ5RG9uZSl7XG5kb25lPXRydWU7XG4vL1xudmFsdWU9W251bGwsMG4sMG5dO1xuIH1lbHNlIGlmKHhEb25lKXtcbi8vXG52YWx1ZT1beSwwbix5Y107XG5uZXh0WSgpO1xuIH1lbHNlIGlmKHlEb25lKXtcbi8vXG52YWx1ZT1beCx4Yywwbl07XG5uZXh0WCgpO1xuIH1lbHNle1xuY29uc3QgY29tcD1mdWxsQ29tcGFyZSh4LHkpO1xuaWYoY29tcD09PTApe1xuLy9cbnZhbHVlPVt4LHhjLHljXTtcbm5leHRYKCk7XG5uZXh0WSgpO1xuIH1lbHNlIGlmKGNvbXA8MCl7XG4vL1xudmFsdWU9W3gseGMsMG5dO1xubmV4dFgoKTtcbiB9ZWxzZXtcbi8vXG5jb21wPjB8fEZhaWwgYEludGVybmFsOiBVbmV4cGVjdGVkIGNvbXAgJHtxKGNvbXApfWA7XG52YWx1ZT1beSwwbix5Y107XG5uZXh0WSgpO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtkb25lLHZhbHVlfSk7XG4gfX0pO1xuXG4gfX0pO1xuXG4gfTtcbmhhcmRlbihtZXJnZSk7XG5cbi8vXG4vL1xuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlcklzU3VwZXJiYWc9KHh5aSk9PntcbmZvcihjb25zdFtfbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM8eWMpe1xuLy9cbnJldHVybiBmYWxzZTtcbiB9XG4gfVxucmV0dXJuIHRydWU7XG4gfTtcblxuLy9cbi8vXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVySXNEaXNqb2ludD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MW4mJnljPj0xbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVyVW5pb249KHh5aSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnJlc3VsdC5wdXNoKFttLHhjK3ljXSk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBiYWdJdGVySW50ZXJzZWN0aW9uPSh4eWkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1bXTtcbmZvcihjb25zdFttLHhjLHljXW9mIHh5aSl7XG5jb25zdCBtYz14Yzw9eWM/eGM6eWM7XG5yZXN1bHQucHVzaChbbSxtY10pO1xuIH1cbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgYmFnSXRlckRpc2pvaW50U3VidHJhY3Q9KHh5aSk9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmNvbnN0IG1jPXhjLXljO1xubWM+PTBufHxGYWlsIGByaWdodCBlbGVtZW50ICR7bX0gd2FzIG5vdCBpbiBsZWZ0YDtcbmlmKG1jPj0xbil7XG4vL1xucmVzdWx0LnB1c2goW20sbWNdKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG5jb25zdCBtZXJnZWlmeT0oYmFnSXRlck9wKT0+KHhiYWdFbnRyaWVzLHliYWdFbnRyaWVzKT0+XG5iYWdJdGVyT3AobWVyZ2UoeGJhZ0VudHJpZXMseWJhZ0VudHJpZXMpKTtcblxuY29uc3QgYmFnRW50cmllc0lzU3VwZXJiYWc9bWVyZ2VpZnkoYmFnSXRlcklzU3VwZXJiYWcpO1xuY29uc3QgYmFnRW50cmllc0lzRGlzam9pbnQ9bWVyZ2VpZnkoYmFnSXRlcklzRGlzam9pbnQpO1xuY29uc3QgYmFnRW50cmllc1VuaW9uPW1lcmdlaWZ5KGJhZ0l0ZXJVbmlvbik7XG5jb25zdCBiYWdFbnRyaWVzSW50ZXJzZWN0aW9uPW1lcmdlaWZ5KGJhZ0l0ZXJJbnRlcnNlY3Rpb24pO1xuY29uc3QgYmFnRW50cmllc0Rpc2pvaW50U3VidHJhY3Q9bWVyZ2VpZnkoYmFnSXRlckRpc2pvaW50U3VidHJhY3QpO1xuXG5jb25zdCByYXdCYWdpZnk9KGJhZ0VudHJpZXNPcCk9Pih4YmFnLHliYWcpPT5cbmJhZ0VudHJpZXNPcCh4YmFnLnBheWxvYWQseWJhZy5wYXlsb2FkKTtcblxuY29uc3QgYmFnaWZ5PShiYWdFbnRyaWVzT3ApPT4oeGJhZyx5YmFnKT0+XG5tYWtlQmFnT2ZFbnRyaWVzKGJhZ0VudHJpZXNPcCh4YmFnLnBheWxvYWQseWJhZy5wYXlsb2FkKSk7XG5cbmNvbnN0ICAgICAgICBiYWdJc1N1cGVyYmFnPXJhd0JhZ2lmeShiYWdFbnRyaWVzSXNTdXBlcmJhZyk7JGjNj19vbmNlLmJhZ0lzU3VwZXJiYWcoYmFnSXNTdXBlcmJhZyk7XG5jb25zdCAgICAgICAgYmFnSXNEaXNqb2ludD1yYXdCYWdpZnkoYmFnRW50cmllc0lzRGlzam9pbnQpOyRozY9fb25jZS5iYWdJc0Rpc2pvaW50KGJhZ0lzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIGJhZ1VuaW9uPWJhZ2lmeShiYWdFbnRyaWVzVW5pb24pOyRozY9fb25jZS5iYWdVbmlvbihiYWdVbmlvbik7XG5jb25zdCAgICAgICAgYmFnSW50ZXJzZWN0aW9uPWJhZ2lmeShiYWdFbnRyaWVzSW50ZXJzZWN0aW9uKTskaM2PX29uY2UuYmFnSW50ZXJzZWN0aW9uKGJhZ0ludGVyc2VjdGlvbik7XG5jb25zdCAgICAgICAgYmFnRGlzam9pbnRTdWJ0cmFjdD1iYWdpZnkoYmFnRW50cmllc0Rpc2pvaW50U3VidHJhY3QpOyRozY9fb25jZS5iYWdEaXNqb2ludFN1YnRyYWN0KGJhZ0Rpc2pvaW50U3VidHJhY3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiYmFnSXNTdXBlcmJhZyI6WyJiYWdJc1N1cGVyYmFnIl0sImJhZ0lzRGlzam9pbnQiOlsiYmFnSXNEaXNqb2ludCJdLCJiYWdVbmlvbiI6WyJiYWdVbmlvbiJdLCJiYWdJbnRlcnNlY3Rpb24iOlsiYmFnSW50ZXJzZWN0aW9uIl0sImJhZ0Rpc2pvaW50U3VidHJhY3QiOlsiYmFnRGlzam9pbnRTdWJ0cmFjdCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAA2IGmluhwAALocAAA1AAAAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9rZXlzL21lcmdlLXNldC1vcGVyYXRvcnMuanN7ImltcG9ydHMiOlsiQGVuZG8vbWFyc2hhbCIsIkBlbmRvL2Vycm9ycyIsIi4vY29weVNldC5qcyJdLCJleHBvcnRzIjpbImVsZW1lbnRzQ29tcGFyZSIsImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCIsImVsZW1lbnRzRGlzam9pbnRVbmlvbiIsImVsZW1lbnRzSW50ZXJzZWN0aW9uIiwiZWxlbWVudHNJc0Rpc2pvaW50IiwiZWxlbWVudHNJc1N1cGVyc2V0IiwiZWxlbWVudHNVbmlvbiIsInNldERpc2pvaW50U3VidHJhY3QiLCJzZXREaXNqb2ludFVuaW9uIiwic2V0SW50ZXJzZWN0aW9uIiwic2V0SXNEaXNqb2ludCIsInNldElzU3VwZXJzZXQiLCJzZXRVbmlvbiJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IGFzc2VydFJhbmtTb3J0ZWQsY29tcGFyZUFudGlSYW5rLG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0LHNvcnRCeVJhbmsscSxGYWlsLGFzc2VydE5vRHVwbGljYXRlcyxtYWtlU2V0T2ZFbGVtZW50czskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL21hcnNoYWxcIiwgW1tcImFzc2VydFJhbmtTb3J0ZWRcIiwgWyRozY9fYSA9PiAoYXNzZXJ0UmFua1NvcnRlZCA9ICRozY9fYSldXSxbXCJjb21wYXJlQW50aVJhbmtcIiwgWyRozY9fYSA9PiAoY29tcGFyZUFudGlSYW5rID0gJGjNj19hKV1dLFtcIm1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VGdWxsT3JkZXJDb21wYXJhdG9yS2l0ID0gJGjNj19hKV1dLFtcInNvcnRCeVJhbmtcIiwgWyRozY9fYSA9PiAoc29ydEJ5UmFuayA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcIkZhaWxcIiwgWyRozY9fYSA9PiAoRmFpbCA9ICRozY9fYSldXV1dLFtcIi4vY29weVNldC5qc1wiLCBbW1wiYXNzZXJ0Tm9EdXBsaWNhdGVzXCIsIFskaM2PX2EgPT4gKGFzc2VydE5vRHVwbGljYXRlcyA9ICRozY9fYSldXSxbXCJtYWtlU2V0T2ZFbGVtZW50c1wiLCBbJGjNj19hID0+IChtYWtlU2V0T2ZFbGVtZW50cyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuLypcblxuXG5cbiAqL1xuXG4vL1xuXG4vKlxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCB3aW5kb3dSZXNvcnQ9KGVsZW1lbnRzLHJhbmtDb21wYXJlLGZ1bGxDb21wYXJlKT0+e1xuYXNzZXJ0UmFua1NvcnRlZChlbGVtZW50cyxyYW5rQ29tcGFyZSk7XG5jb25zdHtsZW5ndGh9PWVsZW1lbnRzO1xubGV0IGk9MDtcbmxldCBvcHRJbm5lckl0ZXJhdG9yO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+XG5oYXJkZW4oe1xubmV4dDooKT0+e1xuaWYob3B0SW5uZXJJdGVyYXRvcil7XG5jb25zdCByZXN1bHQ9b3B0SW5uZXJJdGVyYXRvci5uZXh0KCk7XG5pZihyZXN1bHQuZG9uZSl7XG5vcHRJbm5lckl0ZXJhdG9yPXVuZGVmaW5lZDtcbi8vXG4gfWVsc2V7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5pZihpPGxlbmd0aCl7XG5jb25zdCB2YWx1ZT1lbGVtZW50c1tpXTtcbmxldCBqPWkrMTtcbndoaWxlKGo8bGVuZ3RoJiZyYW5rQ29tcGFyZSh2YWx1ZSxlbGVtZW50c1tqXSk9PT0wKXtcbmorPTE7XG4gfVxuaWYoaj09PWkrMSl7XG5pPWo7XG5yZXR1cm4gaGFyZGVuKHtkb25lOmZhbHNlLHZhbHVlfSk7XG4gfVxuY29uc3Qgc2ltaWxhclJ1bj1lbGVtZW50cy5zbGljZShpLGopO1xuaT1qO1xuY29uc3QgcmVzb3J0ZWQ9c29ydEJ5UmFuayhzaW1pbGFyUnVuLGZ1bGxDb21wYXJlKTtcbi8vXG4vL1xuLy9cbmFzc2VydE5vRHVwbGljYXRlcyhyZXNvcnRlZCxmdWxsQ29tcGFyZSk7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbm9wdElubmVySXRlcmF0b3I9cmVzb3J0ZWRbU3ltYm9sLml0ZXJhdG9yXSgpO1xucmV0dXJuIG9wdElubmVySXRlcmF0b3IubmV4dCgpO1xuIH1lbHNle1xucmV0dXJuIGhhcmRlbih7ZG9uZTp0cnVlLHZhbHVlOm51bGx9KTtcbiB9XG4gfX0pfSk7XG5cblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICovXG5jb25zdCBtZXJnZT0oeGVsZW1lbnRzLHllbGVtZW50cyk9Pntcbi8vXG4vL1xuY29uc3QgZnVsbENvbXBhcmU9bWFrZUZ1bGxPcmRlckNvbXBhcmF0b3JLaXQoKS5hbnRpQ29tcGFyYXRvcjtcblxuY29uc3QgeHM9d2luZG93UmVzb3J0KHhlbGVtZW50cyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xuY29uc3QgeXM9d2luZG93UmVzb3J0KHllbGVtZW50cyxjb21wYXJlQW50aVJhbmssZnVsbENvbXBhcmUpO1xucmV0dXJuIGhhcmRlbih7XG5bU3ltYm9sLml0ZXJhdG9yXTooKT0+e1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAqL1xubGV0IHg7XG5sZXQgeERvbmU7XG4vKiAgICAgICAgICAgICovXG5sZXQgeTtcbmxldCB5RG9uZTtcblxuY29uc3QgeGk9eHNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFg9KCk9PntcbiF4RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRYIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe2RvbmU6eERvbmUsdmFsdWU6eH09eGkubmV4dCgpKTtcbiB9O1xubmV4dFgoKTtcblxuY29uc3QgeWk9eXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuY29uc3QgbmV4dFk9KCk9PntcbiF5RG9uZXx8RmFpbCBgSW50ZXJuYWw6IG5leHRZIHNob3VsZCBub3QgYmUgY2FsbGVkIG9uY2UgZG9uZWA7XG4oe2RvbmU6eURvbmUsdmFsdWU6eX09eWkubmV4dCgpKTtcbiB9O1xubmV4dFkoKTtcblxucmV0dXJuIGhhcmRlbih7XG5uZXh0OigpPT57XG4vKiAgICAgICAgICAgICAgICAgICovXG5sZXQgZG9uZT1mYWxzZTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgdmFsdWU7XG5pZih4RG9uZSYmeURvbmUpe1xuZG9uZT10cnVlO1xuLy9cbnZhbHVlPVtudWxsLDBuLDBuXTtcbiB9ZWxzZSBpZih4RG9uZSl7XG4vL1xudmFsdWU9W3ksMG4sMW5dO1xubmV4dFkoKTtcbiB9ZWxzZSBpZih5RG9uZSl7XG4vL1xudmFsdWU9W3gsMW4sMG5dO1xubmV4dFgoKTtcbiB9ZWxzZXtcbmNvbnN0IGNvbXA9ZnVsbENvbXBhcmUoeCx5KTtcbmlmKGNvbXA9PT0wKXtcbi8vXG52YWx1ZT1beCwxbiwxbl07XG5uZXh0WCgpO1xubmV4dFkoKTtcbiB9ZWxzZSBpZihjb21wPDApe1xuLy9cbnZhbHVlPVt4LDFuLDBuXTtcbm5leHRYKCk7XG4gfWVsc2V7XG4vL1xuY29tcD4wfHxGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBjb21wICR7cShjb21wKX1gO1xudmFsdWU9W3ksMG4sMW5dO1xubmV4dFkoKTtcbiB9XG4gfVxucmV0dXJuIGhhcmRlbih7ZG9uZSx2YWx1ZX0pO1xuIH19KTtcblxuIH19KTtcblxuIH07XG5oYXJkZW4obWVyZ2UpO1xuXG5jb25zdCBpdGVySXNTdXBlcnNldD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLF95Y11vZiB4eWkpe1xuaWYoeGM9PT0wbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVySXNEaXNqb2ludD0oeHlpKT0+e1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz49MW4mJnljPj0xbil7XG4vL1xucmV0dXJuIGZhbHNlO1xuIH1cbiB9XG5yZXR1cm4gdHJ1ZTtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyQ29tcGFyZT0oeHlpKT0+e1xubGV0IGxvbmVZPWZhbHNlO1xubGV0IGxvbmVYPWZhbHNlO1xuZm9yKGNvbnN0W19tLHhjLHljXW9mIHh5aSl7XG5pZih4Yz09PTBuKXtcbi8vXG5sb25lWT10cnVlO1xuIH1cbmlmKHljPT09MG4pe1xuLy9cbmxvbmVYPXRydWU7XG4gfVxuaWYobG9uZVgmJmxvbmVZKXtcbnJldHVybiBOYU47XG4gfVxuIH1cbmlmKGxvbmVYKXtcbnJldHVybiAxO1xuIH1lbHNlIGlmKGxvbmVZKXtcbnJldHVybi0xO1xuIH1lbHNle1xuIWxvbmVYJiYhbG9uZVl8fFxuRmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgbG9uZSBwYWlyICR7cShbbG9uZVgsbG9uZVldKX1gO1xucmV0dXJuIDA7XG4gfVxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGl0ZXJVbmlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbmlmKHhjPj0wbil7XG5yZXN1bHQucHVzaChtKTtcbiB9ZWxzZXtcbnljPj0wbnx8RmFpbCBgSW50ZXJuYWw6IFVuZXhwZWN0ZWQgY291bnQgJHtxKHljKX1gO1xuLy9cbi8vXG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVyRGlzam9pbnRVbmlvbj0oeHlpKT0+e1xuY29uc3QgcmVzdWx0PVtdO1xuZm9yKGNvbnN0W20seGMseWNdb2YgeHlpKXtcbnhjPT09MG58fHljPT09MG58fEZhaWwgYFNldHMgbXVzdCBub3QgaGF2ZSBjb21tb24gZWxlbWVudHM6ICR7bX1gO1xuaWYoeGM+PTFuKXtcbnJlc3VsdC5wdXNoKG0pO1xuIH1lbHNle1xueWM+PTFufHxGYWlsIGBJbnRlcm5hbDogVW5leHBlY3RlZCBjb3VudCAke3EoeWMpfWA7XG5yZXN1bHQucHVzaChtKTtcbiB9XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuICovXG5jb25zdCBpdGVySW50ZXJzZWN0aW9uPSh4eWkpPT57XG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xuaWYoeGM+PTFuJiZ5Yz49MW4pe1xuLy9cbnJlc3VsdC5wdXNoKG0pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGl0ZXJEaXNqb2ludFN1YnRyYWN0PSh4eWkpPT57XG5jb25zdCByZXN1bHQ9W107XG5mb3IoY29uc3RbbSx4Yyx5Y11vZiB4eWkpe1xueGM+PTFufHxGYWlsIGByaWdodCBlbGVtZW50ICR7bX0gd2FzIG5vdCBpbiBsZWZ0YDtcbmlmKHljPT09MG4pe1xuLy9cbnJlc3VsdC5wdXNoKG0pO1xuIH1cbiB9XG5yZXR1cm4gcmVzdWx0O1xuIH07XG5cbmNvbnN0IG1lcmdlaWZ5PShpdGVyT3ApPT4oeGVsZW1lbnRzLHllbGVtZW50cyk9PlxuaXRlck9wKG1lcmdlKHhlbGVtZW50cyx5ZWxlbWVudHMpKTtcblxuY29uc3QgICAgICAgIGVsZW1lbnRzSXNTdXBlcnNldD1tZXJnZWlmeShpdGVySXNTdXBlcnNldCk7JGjNj19vbmNlLmVsZW1lbnRzSXNTdXBlcnNldChlbGVtZW50c0lzU3VwZXJzZXQpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzSXNEaXNqb2ludD1tZXJnZWlmeShpdGVySXNEaXNqb2ludCk7JGjNj19vbmNlLmVsZW1lbnRzSXNEaXNqb2ludChlbGVtZW50c0lzRGlzam9pbnQpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzQ29tcGFyZT1tZXJnZWlmeShpdGVyQ29tcGFyZSk7JGjNj19vbmNlLmVsZW1lbnRzQ29tcGFyZShlbGVtZW50c0NvbXBhcmUpO1xuY29uc3QgICAgICAgIGVsZW1lbnRzVW5pb249bWVyZ2VpZnkoaXRlclVuaW9uKTskaM2PX29uY2UuZWxlbWVudHNVbmlvbihlbGVtZW50c1VuaW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0Rpc2pvaW50VW5pb249bWVyZ2VpZnkoaXRlckRpc2pvaW50VW5pb24pOyRozY9fb25jZS5lbGVtZW50c0Rpc2pvaW50VW5pb24oZWxlbWVudHNEaXNqb2ludFVuaW9uKTtcbmNvbnN0ICAgICAgICBlbGVtZW50c0ludGVyc2VjdGlvbj1tZXJnZWlmeShpdGVySW50ZXJzZWN0aW9uKTskaM2PX29uY2UuZWxlbWVudHNJbnRlcnNlY3Rpb24oZWxlbWVudHNJbnRlcnNlY3Rpb24pO1xuY29uc3QgICAgICAgIGVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdD1tZXJnZWlmeShpdGVyRGlzam9pbnRTdWJ0cmFjdCk7JGjNj19vbmNlLmVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdChlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QpO1xuXG5jb25zdCByYXdTZXRpZnk9KGVsZW1lbnRzT3ApPT4oeHNldCx5c2V0KT0+XG5lbGVtZW50c09wKHhzZXQucGF5bG9hZCx5c2V0LnBheWxvYWQpO1xuXG5jb25zdCBzZXRpZnk9KGVsZW1lbnRzT3ApPT4oeHNldCx5c2V0KT0+XG5tYWtlU2V0T2ZFbGVtZW50cyhlbGVtZW50c09wKHhzZXQucGF5bG9hZCx5c2V0LnBheWxvYWQpKTtcblxuY29uc3QgICAgICAgIHNldElzU3VwZXJzZXQ9cmF3U2V0aWZ5KGVsZW1lbnRzSXNTdXBlcnNldCk7JGjNj19vbmNlLnNldElzU3VwZXJzZXQoc2V0SXNTdXBlcnNldCk7XG5jb25zdCAgICAgICAgc2V0SXNEaXNqb2ludD1yYXdTZXRpZnkoZWxlbWVudHNJc0Rpc2pvaW50KTskaM2PX29uY2Uuc2V0SXNEaXNqb2ludChzZXRJc0Rpc2pvaW50KTtcbmNvbnN0ICAgICAgICBzZXRVbmlvbj1zZXRpZnkoZWxlbWVudHNVbmlvbik7JGjNj19vbmNlLnNldFVuaW9uKHNldFVuaW9uKTtcbmNvbnN0ICAgICAgICBzZXREaXNqb2ludFVuaW9uPXNldGlmeShlbGVtZW50c0Rpc2pvaW50VW5pb24pOyRozY9fb25jZS5zZXREaXNqb2ludFVuaW9uKHNldERpc2pvaW50VW5pb24pO1xuY29uc3QgICAgICAgIHNldEludGVyc2VjdGlvbj1zZXRpZnkoZWxlbWVudHNJbnRlcnNlY3Rpb24pOyRozY9fb25jZS5zZXRJbnRlcnNlY3Rpb24oc2V0SW50ZXJzZWN0aW9uKTtcbmNvbnN0ICAgICAgICBzZXREaXNqb2ludFN1YnRyYWN0PXNldGlmeShlbGVtZW50c0Rpc2pvaW50U3VidHJhY3QpOyRozY9fb25jZS5zZXREaXNqb2ludFN1YnRyYWN0KHNldERpc2pvaW50U3VidHJhY3QpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZWxlbWVudHNJc1N1cGVyc2V0IjpbImVsZW1lbnRzSXNTdXBlcnNldCJdLCJlbGVtZW50c0lzRGlzam9pbnQiOlsiZWxlbWVudHNJc0Rpc2pvaW50Il0sImVsZW1lbnRzQ29tcGFyZSI6WyJlbGVtZW50c0NvbXBhcmUiXSwiZWxlbWVudHNVbmlvbiI6WyJlbGVtZW50c1VuaW9uIl0sImVsZW1lbnRzRGlzam9pbnRVbmlvbiI6WyJlbGVtZW50c0Rpc2pvaW50VW5pb24iXSwiZWxlbWVudHNJbnRlcnNlY3Rpb24iOlsiZWxlbWVudHNJbnRlcnNlY3Rpb24iXSwiZWxlbWVudHNEaXNqb2ludFN1YnRyYWN0IjpbImVsZW1lbnRzRGlzam9pbnRTdWJ0cmFjdCJdLCJzZXRJc1N1cGVyc2V0IjpbInNldElzU3VwZXJzZXQiXSwic2V0SXNEaXNqb2ludCI6WyJzZXRJc0Rpc2pvaW50Il0sInNldFVuaW9uIjpbInNldFVuaW9uIl0sInNldERpc2pvaW50VW5pb24iOlsic2V0RGlzam9pbnRVbmlvbiJdLCJzZXRJbnRlcnNlY3Rpb24iOlsic2V0SW50ZXJzZWN0aW9uIl0sInNldERpc2pvaW50U3VidHJhY3QiOlsic2V0RGlzam9pbnRTdWJ0cmFjdCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADkIGUvHBkAABwZAAA2AAAAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9wYXR0ZXJucy9nZXRHdWFyZFBheWxvYWRzLmpzeyJpbXBvcnRzIjpbIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzIiwiLi9wYXR0ZXJuTWF0Y2hlcnMuanMiLCIuLi9rZXlzL2NoZWNrS2V5LmpzIl0sImV4cG9ydHMiOlsiZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQiLCJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQiLCJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIiwiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgb2JqZWN0TWFwLEFyZ0d1YXJkTGlzdFNoYXBlLEF3YWl0QXJnR3VhcmRTaGFwZSxJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSxJbnRlcmZhY2VHdWFyZFNoYXBlLE0sTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUsTWV0aG9kR3VhcmRTaGFwZSxSYXdHdWFyZFNoYXBlLFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlLFN5bmNWYWx1ZUd1YXJkU2hhcGUsYXNzZXJ0QXdhaXRBcmdHdWFyZCxtYXRjaGVzLG11c3RNYXRjaCxnZXRDb3B5TWFwS2V5cyxtYWtlQ29weU1hcDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2NvbW1vbi9vYmplY3QtbWFwLmpzXCIsIFtbXCJvYmplY3RNYXBcIiwgWyRozY9fYSA9PiAob2JqZWN0TWFwID0gJGjNj19hKV1dXV0sW1wiLi9wYXR0ZXJuTWF0Y2hlcnMuanNcIiwgW1tcIkFyZ0d1YXJkTGlzdFNoYXBlXCIsIFskaM2PX2EgPT4gKEFyZ0d1YXJkTGlzdFNoYXBlID0gJGjNj19hKV1dLFtcIkF3YWl0QXJnR3VhcmRTaGFwZVwiLCBbJGjNj19hID0+IChBd2FpdEFyZ0d1YXJkU2hhcGUgPSAkaM2PX2EpXV0sW1wiSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGVcIiwgWyRozY9fYSA9PiAoSW50ZXJmYWNlR3VhcmRQYXlsb2FkU2hhcGUgPSAkaM2PX2EpXV0sW1wiSW50ZXJmYWNlR3VhcmRTaGFwZVwiLCBbJGjNj19hID0+IChJbnRlcmZhY2VHdWFyZFNoYXBlID0gJGjNj19hKV1dLFtcIk1cIiwgWyRozY9fYSA9PiAoTSA9ICRozY9fYSldXSxbXCJNZXRob2RHdWFyZFBheWxvYWRTaGFwZVwiLCBbJGjNj19hID0+IChNZXRob2RHdWFyZFBheWxvYWRTaGFwZSA9ICRozY9fYSldXSxbXCJNZXRob2RHdWFyZFNoYXBlXCIsIFskaM2PX2EgPT4gKE1ldGhvZEd1YXJkU2hhcGUgPSAkaM2PX2EpXV0sW1wiUmF3R3VhcmRTaGFwZVwiLCBbJGjNj19hID0+IChSYXdHdWFyZFNoYXBlID0gJGjNj19hKV1dLFtcIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlXCIsIFskaM2PX2EgPT4gKFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlID0gJGjNj19hKV1dLFtcIlN5bmNWYWx1ZUd1YXJkU2hhcGVcIiwgWyRozY9fYSA9PiAoU3luY1ZhbHVlR3VhcmRTaGFwZSA9ICRozY9fYSldXSxbXCJhc3NlcnRBd2FpdEFyZ0d1YXJkXCIsIFskaM2PX2EgPT4gKGFzc2VydEF3YWl0QXJnR3VhcmQgPSAkaM2PX2EpXV0sW1wibWF0Y2hlc1wiLCBbJGjNj19hID0+IChtYXRjaGVzID0gJGjNj19hKV1dLFtcIm11c3RNYXRjaFwiLCBbJGjNj19hID0+IChtdXN0TWF0Y2ggPSAkaM2PX2EpXV1dXSxbXCIuLi9rZXlzL2NoZWNrS2V5LmpzXCIsIFtbXCJnZXRDb3B5TWFwS2V5c1wiLCBbJGjNj19hID0+IChnZXRDb3B5TWFwS2V5cyA9ICRozY9fYSldXSxbXCJtYWtlQ29weU1hcFwiLCBbJGjNj19hID0+IChtYWtlQ29weU1hcCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuLypcblxuICovXG5cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuLy9cbi8vXG4vL1xuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbi8vXG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUF3YWl0QXJnR3VhcmRTaGFwZT1oYXJkZW4oe1xua2xhc3M6J2F3YWl0QXJnJyxcbmFyZ0d1YXJkOk0ucGF0dGVybigpfSk7XG5cblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkPShhd2FpdEFyZ0d1YXJkKT0+e1xuaWYobWF0Y2hlcyhhd2FpdEFyZ0d1YXJkLExlZ2FjeUF3YWl0QXJnR3VhcmRTaGFwZSkpe1xuLy9cbmNvbnN0e2tsYXNzOl8sLi4ucGF5bG9hZH09YXdhaXRBcmdHdWFyZDtcbi8vXG5yZXR1cm4gcGF5bG9hZDtcbiB9XG5hc3NlcnRBd2FpdEFyZ0d1YXJkKGF3YWl0QXJnR3VhcmQpO1xucmV0dXJuIGF3YWl0QXJnR3VhcmQucGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZChnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCk7XG5oYXJkZW4oZ2V0QXdhaXRBcmdHdWFyZFBheWxvYWQpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lTeW5jTWV0aG9kR3VhcmRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xua2xhc3M6J21ldGhvZEd1YXJkJyxcbmNhbGxLaW5kOidzeW5jJyxcbmFyZ0d1YXJkczpTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9LFxuXG57XG5vcHRpb25hbEFyZ0d1YXJkczpTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSxcbnJlc3RBcmdHdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSk7XG5cblxuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lBcmdHdWFyZFNoYXBlPU0ub3IoXG5SYXdHdWFyZFNoYXBlLFxuQXdhaXRBcmdHdWFyZFNoYXBlLFxuTGVnYWN5QXdhaXRBcmdHdWFyZFNoYXBlLFxuTS5wYXR0ZXJuKCkpO1xuXG4vL1xuLy9cbi8vXG5jb25zdCBMZWdhY3lBcmdHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoTGVnYWN5QXJnR3VhcmRTaGFwZSk7XG5cbi8vXG4vL1xuLy9cbmNvbnN0IExlZ2FjeUFzeW5jTWV0aG9kR3VhcmRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xua2xhc3M6J21ldGhvZEd1YXJkJyxcbmNhbGxLaW5kOidhc3luYycsXG5hcmdHdWFyZHM6TGVnYWN5QXJnR3VhcmRMaXN0U2hhcGUsXG5yZXR1cm5HdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSxcblxue1xub3B0aW9uYWxBcmdHdWFyZHM6QXJnR3VhcmRMaXN0U2hhcGUsXG5yZXN0QXJnR3VhcmQ6U3luY1ZhbHVlR3VhcmRTaGFwZX0pO1xuXG5cblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5TWV0aG9kR3VhcmRTaGFwZT1NLm9yKFxuTGVnYWN5U3luY01ldGhvZEd1YXJkU2hhcGUsXG5MZWdhY3lBc3luY01ldGhvZEd1YXJkU2hhcGUpO1xuXG5cbmNvbnN0IGFkYXB0TGVnYWN5QXJnR3VhcmQ9KGFyZ0d1YXJkKT0+XG5tYXRjaGVzKGFyZ0d1YXJkLExlZ2FjeUF3YWl0QXJnR3VhcmRTaGFwZSk/XG5NLmF3YWl0KGdldEF3YWl0QXJnR3VhcmRQYXlsb2FkKGFyZ0d1YXJkKS5hcmdHdWFyZCk6XG5hcmdHdWFyZDtcblxuLypcblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRNZXRob2RHdWFyZFBheWxvYWQ9KG1ldGhvZEd1YXJkKT0+e1xuaWYobWF0Y2hlcyhtZXRob2RHdWFyZCxNZXRob2RHdWFyZFNoYXBlKSl7XG5yZXR1cm4gbWV0aG9kR3VhcmQucGF5bG9hZDtcbiB9XG5tdXN0TWF0Y2gobWV0aG9kR3VhcmQsTGVnYWN5TWV0aG9kR3VhcmRTaGFwZSwnbGVnYWN5TWV0aG9kR3VhcmQnKTtcbmNvbnN0e1xuLy9cbmtsYXNzOl8sXG4vL1xuY2FsbEtpbmQsXG4vL1xucmV0dXJuR3VhcmQsXG4vL1xucmVzdEFyZ0d1YXJkfT1cbm1ldGhvZEd1YXJkO1xubGV0e1xuLy9cbmFyZ0d1YXJkcyxcbi8vXG5vcHRpb25hbEFyZ0d1YXJkc309XG5tZXRob2RHdWFyZDtcbmlmKGNhbGxLaW5kPT09J2FzeW5jJyl7XG5hcmdHdWFyZHM9YXJnR3VhcmRzLm1hcChhZGFwdExlZ2FjeUFyZ0d1YXJkKTtcbm9wdGlvbmFsQXJnR3VhcmRzPVxub3B0aW9uYWxBcmdHdWFyZHMmJm9wdGlvbmFsQXJnR3VhcmRzLm1hcChhZGFwdExlZ2FjeUFyZ0d1YXJkKTtcbiB9XG5jb25zdCBwYXlsb2FkPWhhcmRlbih7XG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzLFxucmVzdEFyZ0d1YXJkLFxucmV0dXJuR3VhcmR9KTtcblxuLy9cbm11c3RNYXRjaChwYXlsb2FkLE1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLCdpbnRlcm5hbE1ldGhvZEd1YXJkQWRhcHRvcicpO1xucmV0dXJuIHBheWxvYWQ7XG4gfTskaM2PX29uY2UuZ2V0TWV0aG9kR3VhcmRQYXlsb2FkKGdldE1ldGhvZEd1YXJkUGF5bG9hZCk7XG5oYXJkZW4oZ2V0TWV0aG9kR3VhcmRQYXlsb2FkKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgTGVnYWN5SW50ZXJmYWNlR3VhcmRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xua2xhc3M6J0ludGVyZmFjZScsXG5pbnRlcmZhY2VOYW1lOk0uc3RyaW5nKCksXG5tZXRob2RHdWFyZHM6TS5yZWNvcmRPZihcbk0uc3RyaW5nKCksXG5NLm9yKE1ldGhvZEd1YXJkU2hhcGUsTGVnYWN5TWV0aG9kR3VhcmRTaGFwZSkpfSxcblxuXG57XG5kZWZhdWx0R3VhcmRzOk0ub3IoTS51bmRlZmluZWQoKSwncGFzc2FibGUnLCdyYXcnKSxcbnNsb3BweTpNLmJvb2xlYW4oKSxcbi8vXG4vL1xuLy9cbnN5bWJvbE1ldGhvZEd1YXJkczpNLm1hcE9mKE0uc3ltYm9sKCksTWV0aG9kR3VhcmRTaGFwZSl9KTtcblxuXG5cbmNvbnN0IGFkYXB0TWV0aG9kR3VhcmQ9KG1ldGhvZEd1YXJkKT0+e1xuaWYobWF0Y2hlcyhtZXRob2RHdWFyZCxMZWdhY3lNZXRob2RHdWFyZFNoYXBlKSl7XG5jb25zdHtcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHM9W10sXG5yZXN0QXJnR3VhcmQ9TS5hbnkoKSxcbnJldHVybkd1YXJkfT1cbmdldE1ldGhvZEd1YXJkUGF5bG9hZChtZXRob2RHdWFyZCk7XG5jb25zdCBtQ2FsbD1jYWxsS2luZD09PSdzeW5jJz9NLmNhbGw6TS5jYWxsV2hlbjtcbnJldHVybiBtQ2FsbCguLi5hcmdHdWFyZHMpLlxub3B0aW9uYWwoLi4ub3B0aW9uYWxBcmdHdWFyZHMpLlxucmVzdChyZXN0QXJnR3VhcmQpLlxucmV0dXJucyhyZXR1cm5HdWFyZCk7XG4gfVxucmV0dXJuIG1ldGhvZEd1YXJkO1xuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQ9KGludGVyZmFjZUd1YXJkKT0+e1xuaWYobWF0Y2hlcyhpbnRlcmZhY2VHdWFyZCxJbnRlcmZhY2VHdWFyZFNoYXBlKSl7XG5yZXR1cm4gaW50ZXJmYWNlR3VhcmQucGF5bG9hZDtcbiB9XG5tdXN0TWF0Y2goaW50ZXJmYWNlR3VhcmQsTGVnYWN5SW50ZXJmYWNlR3VhcmRTaGFwZSwnbGVnYWN5SW50ZXJmYWNlR3VhcmQnKTtcbi8vXG4vL1xubGV0e2tsYXNzOl8saW50ZXJmYWNlTmFtZSxtZXRob2RHdWFyZHMsLi4ucmVzdH09aW50ZXJmYWNlR3VhcmQ7XG5tZXRob2RHdWFyZHM9b2JqZWN0TWFwKG1ldGhvZEd1YXJkcyxhZGFwdE1ldGhvZEd1YXJkKTtcbmNvbnN0IHBheWxvYWQ9aGFyZGVuKHtcbmludGVyZmFjZU5hbWUsXG5tZXRob2RHdWFyZHMsXG4uLi5yZXN0fSk7XG5cbm11c3RNYXRjaChcbnBheWxvYWQsXG5JbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSxcbidpbnRlcm5hbEludGVyZmFjZUd1YXJkQWRhcHRvcicpO1xuXG5yZXR1cm4gcGF5bG9hZDtcbiB9OyRozY9fb25jZS5nZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQoZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKTtcbmhhcmRlbihnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQpO1xuXG5jb25zdCBlbXB0eUNvcHlNYXA9bWFrZUNvcHlNYXAoW10pO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGdldEludGVyZmFjZU1ldGhvZEtleXM9KGludGVyZmFjZUd1YXJkKT0+e1xuY29uc3R7bWV0aG9kR3VhcmRzLHN5bWJvbE1ldGhvZEd1YXJkcz1lbXB0eUNvcHlNYXB9PVxuZ2V0SW50ZXJmYWNlR3VhcmRQYXlsb2FkKGludGVyZmFjZUd1YXJkKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8vXG4vL1xucmV0dXJuIGhhcmRlbihbXG4uLi5SZWZsZWN0Lm93bktleXMobWV0aG9kR3VhcmRzKSxcbi4uLmdldENvcHlNYXBLZXlzKHN5bWJvbE1ldGhvZEd1YXJkcyldKTtcblxuIH07JGjNj19vbmNlLmdldEludGVyZmFjZU1ldGhvZEtleXMoZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyk7XG5oYXJkZW4oZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCI6WyJnZXRBd2FpdEFyZ0d1YXJkUGF5bG9hZCJdLCJnZXRNZXRob2RHdWFyZFBheWxvYWQiOlsiZ2V0TWV0aG9kR3VhcmRQYXlsb2FkIl0sImdldEludGVyZmFjZUd1YXJkUGF5bG9hZCI6WyJnZXRJbnRlcmZhY2VHdWFyZFBheWxvYWQiXSwiZ2V0SW50ZXJmYWNlTWV0aG9kS2V5cyI6WyJnZXRJbnRlcmZhY2VNZXRob2RLZXlzIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAKjet773rQAA960AADUAAABAZW5kby9wYXR0ZXJucy12MS40Ljgvc3JjL3BhdHRlcm5zL3BhdHRlcm5NYXRjaGVycy5qc3siaW1wb3J0cyI6WyJAZW5kby9tYXJzaGFsIiwiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanMiLCJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanMiLCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qcyIsIkBlbmRvL2NvbW1vbi9saXN0LWRpZmZlcmVuY2UuanMiLCJAZW5kby9lcnJvcnMiLCIuLi9rZXlzL2NvbXBhcmVLZXlzLmpzIiwiLi4va2V5cy9jaGVja0tleS5qcyIsIi4uL2tleXMva2V5Y29sbGVjdGlvbi1vcGVyYXRvcnMuanMiXSwiZXhwb3J0cyI6WyJBcmdHdWFyZExpc3RTaGFwZSIsIkF3YWl0QXJnR3VhcmRTaGFwZSIsIkludGVyZmFjZUd1YXJkUGF5bG9hZFNoYXBlIiwiSW50ZXJmYWNlR3VhcmRTaGFwZSIsIk0iLCJNZXRob2RHdWFyZFBheWxvYWRTaGFwZSIsIk1ldGhvZEd1YXJkU2hhcGUiLCJSYXdHdWFyZFNoYXBlIiwiU3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUiLCJTeW5jVmFsdWVHdWFyZFNoYXBlIiwiYXNzZXJ0QXdhaXRBcmdHdWFyZCIsImFzc2VydEludGVyZmFjZUd1YXJkIiwiYXNzZXJ0TWV0aG9kR3VhcmQiLCJhc3NlcnRQYXR0ZXJuIiwiYXNzZXJ0UmF3R3VhcmQiLCJjaGVja01hdGNoZXMiLCJkZWZhdWx0TGltaXRzIiwiZ2V0UmFua0NvdmVyIiwiaXNBd2FpdEFyZ0d1YXJkIiwiaXNQYXR0ZXJuIiwiaXNSYXdHdWFyZCIsImtpbmRPZiIsIm1hdGNoZXMiLCJtdXN0TWF0Y2giXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBhc3NlcnRDaGVja2VyLEZhcixnZXRUYWcsbWFrZVRhZ2dlZCxwYXNzU3R5bGVPZixoYXNPd25Qcm9wZXJ0eU9mLG5hbWVGb3JQYXNzYWJsZVN5bWJvbCxjb21wYXJlUmFuayxnZXRQYXNzU3R5bGVDb3ZlcixpbnRlcnNlY3RSYW5rQ292ZXJzLHVuaW9uUmFua0NvdmVycyxyZWNvcmROYW1lcyxyZWNvcmRWYWx1ZXMsaWRlbnRDaGVja2VyLGFwcGx5TGFiZWxpbmdFcnJvcixmcm9tVW5pcXVlRW50cmllcyxsaXN0RGlmZmVyZW5jZSxxLGIsWCxGYWlsLG1ha2VFcnJvcixhbm5vdGF0ZUVycm9yLGtleUVRLGtleUdULGtleUdURSxrZXlMVCxrZXlMVEUsYXNzZXJ0S2V5LGNoZWNrS2V5LGlzS2V5LGNoZWNrU2NhbGFyS2V5LGNoZWNrQ29weVNldCxjaGVja0NvcHlNYXAsY29weU1hcEtleVNldCxjaGVja0NvcHlCYWcsZ2V0Q29weU1hcEVudHJ5QXJyYXksbWFrZUNvcHlNYXAsZ2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXM7JGjNj19pbXBvcnRzKFtbXCJAZW5kby9tYXJzaGFsXCIsIFtbXCJhc3NlcnRDaGVja2VyXCIsIFskaM2PX2EgPT4gKGFzc2VydENoZWNrZXIgPSAkaM2PX2EpXV0sW1wiRmFyXCIsIFskaM2PX2EgPT4gKEZhciA9ICRozY9fYSldXSxbXCJnZXRUYWdcIiwgWyRozY9fYSA9PiAoZ2V0VGFnID0gJGjNj19hKV1dLFtcIm1ha2VUYWdnZWRcIiwgWyRozY9fYSA9PiAobWFrZVRhZ2dlZCA9ICRozY9fYSldXSxbXCJwYXNzU3R5bGVPZlwiLCBbJGjNj19hID0+IChwYXNzU3R5bGVPZiA9ICRozY9fYSldXSxbXCJoYXNPd25Qcm9wZXJ0eU9mXCIsIFskaM2PX2EgPT4gKGhhc093blByb3BlcnR5T2YgPSAkaM2PX2EpXV0sW1wibmFtZUZvclBhc3NhYmxlU3ltYm9sXCIsIFskaM2PX2EgPT4gKG5hbWVGb3JQYXNzYWJsZVN5bWJvbCA9ICRozY9fYSldXSxbXCJjb21wYXJlUmFua1wiLCBbJGjNj19hID0+IChjb21wYXJlUmFuayA9ICRozY9fYSldXSxbXCJnZXRQYXNzU3R5bGVDb3ZlclwiLCBbJGjNj19hID0+IChnZXRQYXNzU3R5bGVDb3ZlciA9ICRozY9fYSldXSxbXCJpbnRlcnNlY3RSYW5rQ292ZXJzXCIsIFskaM2PX2EgPT4gKGludGVyc2VjdFJhbmtDb3ZlcnMgPSAkaM2PX2EpXV0sW1widW5pb25SYW5rQ292ZXJzXCIsIFskaM2PX2EgPT4gKHVuaW9uUmFua0NvdmVycyA9ICRozY9fYSldXSxbXCJyZWNvcmROYW1lc1wiLCBbJGjNj19hID0+IChyZWNvcmROYW1lcyA9ICRozY9fYSldXSxbXCJyZWNvcmRWYWx1ZXNcIiwgWyRozY9fYSA9PiAocmVjb3JkVmFsdWVzID0gJGjNj19hKV1dXV0sW1wiQGVuZG8vY29tbW9uL2lkZW50LWNoZWNrZXIuanNcIiwgW1tcImlkZW50Q2hlY2tlclwiLCBbJGjNj19hID0+IChpZGVudENoZWNrZXIgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vYXBwbHktbGFiZWxpbmctZXJyb3IuanNcIiwgW1tcImFwcGx5TGFiZWxpbmdFcnJvclwiLCBbJGjNj19hID0+IChhcHBseUxhYmVsaW5nRXJyb3IgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vZnJvbS11bmlxdWUtZW50cmllcy5qc1wiLCBbW1wiZnJvbVVuaXF1ZUVudHJpZXNcIiwgWyRozY9fYSA9PiAoZnJvbVVuaXF1ZUVudHJpZXMgPSAkaM2PX2EpXV1dXSxbXCJAZW5kby9jb21tb24vbGlzdC1kaWZmZXJlbmNlLmpzXCIsIFtbXCJsaXN0RGlmZmVyZW5jZVwiLCBbJGjNj19hID0+IChsaXN0RGlmZmVyZW5jZSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL2Vycm9yc1wiLCBbW1wicVwiLCBbJGjNj19hID0+IChxID0gJGjNj19hKV1dLFtcImJcIiwgWyRozY9fYSA9PiAoYiA9ICRozY9fYSldXSxbXCJYXCIsIFskaM2PX2EgPT4gKFggPSAkaM2PX2EpXV0sW1wiRmFpbFwiLCBbJGjNj19hID0+IChGYWlsID0gJGjNj19hKV1dLFtcIm1ha2VFcnJvclwiLCBbJGjNj19hID0+IChtYWtlRXJyb3IgPSAkaM2PX2EpXV0sW1wiYW5ub3RhdGVFcnJvclwiLCBbJGjNj19hID0+IChhbm5vdGF0ZUVycm9yID0gJGjNj19hKV1dXV0sW1wiLi4va2V5cy9jb21wYXJlS2V5cy5qc1wiLCBbW1wia2V5RVFcIiwgWyRozY9fYSA9PiAoa2V5RVEgPSAkaM2PX2EpXV0sW1wia2V5R1RcIiwgWyRozY9fYSA9PiAoa2V5R1QgPSAkaM2PX2EpXV0sW1wia2V5R1RFXCIsIFskaM2PX2EgPT4gKGtleUdURSA9ICRozY9fYSldXSxbXCJrZXlMVFwiLCBbJGjNj19hID0+IChrZXlMVCA9ICRozY9fYSldXSxbXCJrZXlMVEVcIiwgWyRozY9fYSA9PiAoa2V5TFRFID0gJGjNj19hKV1dXV0sW1wiLi4va2V5cy9jaGVja0tleS5qc1wiLCBbW1wiYXNzZXJ0S2V5XCIsIFskaM2PX2EgPT4gKGFzc2VydEtleSA9ICRozY9fYSldXSxbXCJjaGVja0tleVwiLCBbJGjNj19hID0+IChjaGVja0tleSA9ICRozY9fYSldXSxbXCJpc0tleVwiLCBbJGjNj19hID0+IChpc0tleSA9ICRozY9fYSldXSxbXCJjaGVja1NjYWxhcktleVwiLCBbJGjNj19hID0+IChjaGVja1NjYWxhcktleSA9ICRozY9fYSldXSxbXCJjaGVja0NvcHlTZXRcIiwgWyRozY9fYSA9PiAoY2hlY2tDb3B5U2V0ID0gJGjNj19hKV1dLFtcImNoZWNrQ29weU1hcFwiLCBbJGjNj19hID0+IChjaGVja0NvcHlNYXAgPSAkaM2PX2EpXV0sW1wiY29weU1hcEtleVNldFwiLCBbJGjNj19hID0+IChjb3B5TWFwS2V5U2V0ID0gJGjNj19hKV1dLFtcImNoZWNrQ29weUJhZ1wiLCBbJGjNj19hID0+IChjaGVja0NvcHlCYWcgPSAkaM2PX2EpXV0sW1wiZ2V0Q29weU1hcEVudHJ5QXJyYXlcIiwgWyRozY9fYSA9PiAoZ2V0Q29weU1hcEVudHJ5QXJyYXkgPSAkaM2PX2EpXV0sW1wibWFrZUNvcHlNYXBcIiwgWyRozY9fYSA9PiAobWFrZUNvcHlNYXAgPSAkaM2PX2EpXV1dXSxbXCIuLi9rZXlzL2tleWNvbGxlY3Rpb24tb3BlcmF0b3JzLmpzXCIsIFtbXCJnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllc1wiLCBbJGjNj19hID0+IChnZW5lcmF0ZUNvbGxlY3Rpb25QYWlyRW50cmllcyA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbi8qXG5cblxuXG4gKi9cblxuY29uc3R7ZW50cmllcyx2YWx1ZXN9PU9iamVjdDtcbmNvbnN0e293bktleXN9PVJlZmxlY3Q7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHBhdHRlcm5NZW1vPW5ldyBXZWFrU2V0KCk7XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IE1NO1xuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGRlZmF1bHRMaW1pdHM9aGFyZGVuKHtcbmRlY2ltYWxEaWdpdHNMaW1pdDoxMDAsXG5zdHJpbmdMZW5ndGhMaW1pdDoxMDBfMDAwLFxuc3ltYm9sTmFtZUxlbmd0aExpbWl0OjEwMCxcbm51bVByb3BlcnRpZXNMaW1pdDo4MCxcbnByb3BlcnR5TmFtZUxlbmd0aExpbWl0OjEwMCxcbmFycmF5TGVuZ3RoTGltaXQ6MTBfMDAwLFxubnVtU2V0RWxlbWVudHNMaW1pdDoxMF8wMDAsXG5udW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0OjEwXzAwMCxcbm51bU1hcEVudHJpZXNMaW1pdDo1MDAwfSk7XG5cblxuLypcblxuXG5cblxuXG5cbiAqLyRozY9fb25jZS5kZWZhdWx0TGltaXRzKGRlZmF1bHRMaW1pdHMpO1xuY29uc3QgbGltaXQ9KGxpbWl0cz17fSk9PlxuLyogICAgICAgICAgICAgICAgICAgICovaGFyZGVuKHtfX3Byb3RvX186ZGVmYXVsdExpbWl0cywuLi5saW1pdHN9KTtcblxuY29uc3QgY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQ9KFxucGF5bG9hZCxcbm1haW5QYXlsb2FkU2hhcGUsXG5jaGVjayxcbmxhYmVsKT0+XG57XG5hc3NlcnQoQXJyYXkuaXNBcnJheShtYWluUGF5bG9hZFNoYXBlKSk7XG5pZighQXJyYXkuaXNBcnJheShwYXlsb2FkKSl7XG5yZXR1cm4gY2hlY2soZmFsc2UsWCBgJHtxKGxhYmVsKX0gcGF5bG9hZCBtdXN0IGJlIGFuIGFycmF5OiAke3BheWxvYWR9YCk7XG4gfVxuXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cblxuY29uc3QgbWFpbkxlbmd0aD1tYWluUGF5bG9hZFNoYXBlLmxlbmd0aDtcbmlmKCEocGF5bG9hZC5sZW5ndGg9PT1tYWluTGVuZ3RofHxwYXlsb2FkLmxlbmd0aD09PW1haW5MZW5ndGgrMSkpe1xucmV0dXJuIGNoZWNrKGZhbHNlLFggYCR7cShsYWJlbCl9IHBheWxvYWQgdW5leHBlY3RlZCBzaXplOiAke3BheWxvYWR9YCk7XG4gfVxuY29uc3QgbGltaXRzPXBheWxvYWRbbWFpbkxlbmd0aF07XG5wYXlsb2FkPWhhcmRlbihwYXlsb2FkLnNsaWNlKDAsbWFpbkxlbmd0aCkpO1xuLy9cbmlmKCFjaGVja01hdGNoZXMocGF5bG9hZCxtYWluUGF5bG9hZFNoYXBlLGNoZWNrLGxhYmVsKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuaWYobGltaXRzPT09dW5kZWZpbmVkKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybihcbihwYXNzU3R5bGVPZihsaW1pdHMpPT09J2NvcHlSZWNvcmQnfHxcbmNoZWNrKGZhbHNlLFggYExpbWl0cyBtdXN0IGJlIGEgcmVjb3JkOiAke3EobGltaXRzKX1gKSkmJlxuZW50cmllcyhsaW1pdHMpLmV2ZXJ5KFxuKFtrZXksdmFsdWVdKT0+XG5wYXNzU3R5bGVPZih2YWx1ZSk9PT0nbnVtYmVyJ3x8XG5jaGVjayhmYWxzZSxYIGBWYWx1ZSBvZiBsaW1pdCAke3Eoa2V5KX0gYnV0IGJlIGEgbnVtYmVyOiAke3EodmFsdWUpfWApKSk7XG5cblxuIH07XG5cbi8qXG5cblxuXG4gKi9cbmNvbnN0IGNoZWNrRGVjaW1hbERpZ2l0c0xpbWl0PShzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spPT57XG5pZihcbk1hdGguZmxvb3IoTWF0aC5sb2cxMChNYXRoLmFicyhOdW1iZXIoc3BlY2ltZW4pKSkpKzE8PVxuZGVjaW1hbERpZ2l0c0xpbWl0KVxue1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBiaWdpbnQgJHtzcGVjaW1lbn0gbXVzdCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtkZWNpbWFsRGlnaXRzTGltaXR9IGRpZ2l0c2ApO1xuXG4gfTtcblxuLypcblxuICovXG5jb25zdCBtYWtlUGF0dGVybktpdD0oKT0+e1xuLypcblxuXG5cblxuXG4gICAqL1xuY29uc3QgbWF5YmVNYXRjaEhlbHBlcj0odGFnKT0+XG4vL1xuSGVscGVyc0J5TWF0Y2hUYWdbdGFnXTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYXliZVBheWxvYWRTaGFwZT0odGFnKT0+XG4vL1xuR3VhcmRQYXlsb2FkU2hhcGVzW3RhZ107XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgc2luZ2xldG9uS2luZHM9bmV3IE1hcChbXG5bJ251bGwnLG51bGxdLFxuWyd1bmRlZmluZWQnLHVuZGVmaW5lZF1dKTtcblxuXG4vKlxuXG5cblxuICAgKi9cbmNvbnN0IHRhZ01lbW89bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrVGFnZ2VkPSh0YWdnZWQsdGFnLGNoZWNrKT0+e1xuY29uc3QgbWF0Y2hIZWxwZXI9bWF5YmVNYXRjaEhlbHBlcih0YWcpO1xuaWYobWF0Y2hIZWxwZXIpe1xuLy9cbi8vXG5yZXR1cm4gbWF0Y2hIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQodGFnZ2VkLnBheWxvYWQsY2hlY2spO1xuIH1lbHNle1xuY29uc3QgcGF5bG9hZFNoYXBlPW1heWJlUGF5bG9hZFNoYXBlKHRhZyk7XG5pZihwYXlsb2FkU2hhcGUhPT11bmRlZmluZWQpe1xuLy9cbnJldHVybiBjaGVja01hdGNoZXModGFnZ2VkLnBheWxvYWQscGF5bG9hZFNoYXBlLGNoZWNrLHRhZyk7XG4gfVxuIH1cbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG5yZXR1cm4gY2hlY2tDb3B5U2V0KHRhZ2dlZCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5QmFnJzp7XG5yZXR1cm4gY2hlY2tDb3B5QmFnKHRhZ2dlZCxjaGVjayk7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5yZXR1cm4gY2hlY2tDb3B5TWFwKHRhZ2dlZCxjaGVjayk7XG4gfVxuZGVmYXVsdDp7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYGNhbm5vdCBjaGVjayB1bnJlY29nbml6ZWQgdGFnICR7cSh0YWcpfTogJHt0YWdnZWR9YCk7XG5cbiB9fVxuXG4gfTtcblxuLypcblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGtpbmRPZj0oc3BlY2ltZW4sY2hlY2s9aWRlbnRDaGVja2VyKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHNwZWNpbWVuKTtcbmlmKHBhc3NTdHlsZSE9PSd0YWdnZWQnKXtcbnJldHVybiBwYXNzU3R5bGU7XG4gfVxuLy9cbi8vXG4vL1xuaWYodGFnTWVtby5oYXMoc3BlY2ltZW4pKXtcbnJldHVybiB0YWdNZW1vLmdldChzcGVjaW1lbik7XG4gfVxuY29uc3QgdGFnPWdldFRhZyhzcGVjaW1lbik7XG5pZihjaGVja1RhZ2dlZChzcGVjaW1lbix0YWcsY2hlY2spKXtcbnRhZ01lbW8uc2V0KHNwZWNpbWVuLHRhZyk7XG5yZXR1cm4gdGFnO1xuIH1cbmlmKGNoZWNrIT09aWRlbnRDaGVja2VyKXtcbmNoZWNrKGZhbHNlLFggYGNhbm5vdCBjaGVjayB1bnJlY29nbml6ZWQgdGFnICR7cSh0YWcpfWApO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfTtcbmhhcmRlbihraW5kT2YpO1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tLaW5kPShzcGVjaW1lbixraW5kLGNoZWNrKT0+e1xuLy9cbmlmKHNpbmdsZXRvbktpbmRzLmhhcyhraW5kKSl7XG4vL1xucmV0dXJuIGNoZWNrQXNLZXlQYXR0KHNwZWNpbWVuLHNpbmdsZXRvbktpbmRzLmdldChraW5kKSxjaGVjayk7XG4gfVxuXG5jb25zdCByZWFsS2luZD1raW5kT2Yoc3BlY2ltZW4sY2hlY2spO1xuaWYoa2luZD09PXJlYWxLaW5kKXtcbnJldHVybiB0cnVlO1xuIH1cbmlmKGNoZWNrIT09aWRlbnRDaGVja2VyKXtcbi8vXG4vL1xuY2hlY2soZmFsc2UsWCBgJHtiKHJlYWxLaW5kKX0gJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgJHtiKGtpbmQpfWApO1xuIH1cbnJldHVybiBmYWxzZTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGlzS2luZD0oc3BlY2ltZW4sa2luZCk9PmNoZWNrS2luZChzcGVjaW1lbixraW5kLGlkZW50Q2hlY2tlcik7XG5cbi8qXG5cblxuXG5cbiAgICovXG5jb25zdCBjaGVja0FzS2V5UGF0dD0oc3BlY2ltZW4sa2V5QXNQYXR0ZXJuLGNoZWNrKT0+e1xuaWYoaXNLZXkoc3BlY2ltZW4pJiZrZXlFUShzcGVjaW1lbixrZXlBc1BhdHRlcm4pKXtcbnJldHVybiB0cnVlO1xuIH1cbnJldHVybihcbmNoZWNrIT09aWRlbnRDaGVja2VyJiZcbi8vXG4vL1xuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlOiAke2tleUFzUGF0dGVybn1gKSk7XG5cbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGNoZWNrUGF0dGVybj0ocGF0dCxjaGVjayk9PntcbmlmKGlzS2V5KHBhdHQpKXtcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihwYXR0ZXJuTWVtby5oYXMocGF0dCkpe1xucmV0dXJuIHRydWU7XG4gfVxuLy9cbmNvbnN0IHJlc3VsdD1jaGVja1BhdHRlcm5JbnRlcm5hbChwYXR0LGNoZWNrKTtcbmlmKHJlc3VsdCl7XG5wYXR0ZXJuTWVtby5hZGQocGF0dCk7XG4gfVxucmV0dXJuIHJlc3VsdDtcbiB9O1xuXG4vKlxuXG5cblxuXG4gICAqL1xuY29uc3QgY2hlY2tQYXR0ZXJuSW50ZXJuYWw9KHBhdHQsY2hlY2spPT57XG4vL1xuLy9cbi8vXG5jb25zdCBjaGVja0l0PShjaGlsZCk9PmNoZWNrUGF0dGVybihjaGlsZCxjaGVjayk7XG5cbmNvbnN0IGtpbmQ9a2luZE9mKHBhdHQsY2hlY2spO1xuc3dpdGNoKGtpbmQpe1xuY2FzZSB1bmRlZmluZWQ6e1xucmV0dXJuIGZhbHNlO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuLy9cbi8vXG5yZXR1cm4gdmFsdWVzKHBhdHQpLmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UnY29weUFycmF5Jzp7XG4vL1xuLy9cbnJldHVybiBwYXR0LmV2ZXJ5KGNoZWNrSXQpO1xuIH1cbmNhc2UnY29weU1hcCc6e1xuLy9cbi8vXG4vL1xucmV0dXJuIGNoZWNrUGF0dGVybihwYXR0LnZhbHVlcyxjaGVjayk7XG4gfVxuY2FzZSdlcnJvcic6XG5jYXNlJ3Byb21pc2UnOntcbnJldHVybiBjaGVjayhmYWxzZSxYIGBBICR7cShraW5kKX0gY2Fubm90IGJlIGEgcGF0dGVybmApO1xuIH1cbmRlZmF1bHQ6e1xuaWYobWF5YmVNYXRjaEhlbHBlcihraW5kKSE9PXVuZGVmaW5lZCl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYEEgcGFzc2FibGUgb2Yga2luZCAke3Eoa2luZCl9IGlzIG5vdCBhIHBhdHRlcm46ICR7cGF0dH1gKTtcblxuIH19XG5cbiB9O1xuXG4vKlxuXG5cbiAgICovXG5jb25zdCBpc1BhdHRlcm49KHBhdHQpPT5jaGVja1BhdHRlcm4ocGF0dCxpZGVudENoZWNrZXIpO1xuXG4vKlxuXG4gICAqL1xuY29uc3QgYXNzZXJ0UGF0dGVybj0ocGF0dCk9PntcbmNoZWNrUGF0dGVybihwYXR0LGFzc2VydENoZWNrZXIpO1xuIH07XG5cbi8vXG5cbi8qXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrTWF0Y2hlcz0oc3BlY2ltZW4scGF0dGVybixjaGVjayxsYWJlbD11bmRlZmluZWQpPT5cbi8vXG5hcHBseUxhYmVsaW5nRXJyb3IoY2hlY2tNYXRjaGVzSW50ZXJuYWwsW3NwZWNpbWVuLHBhdHRlcm4sY2hlY2tdLGxhYmVsKTtcblxuLypcblxuXG5cblxuICAgKi9cbmNvbnN0IGNoZWNrTWF0Y2hlc0ludGVybmFsPShzcGVjaW1lbixwYXR0LGNoZWNrKT0+e1xuLy9cbmNvbnN0IHBhdHRlcm5LaW5kPWtpbmRPZihwYXR0LGNoZWNrKTtcbmNvbnN0IHNwZWNpbWVuS2luZD1raW5kT2Yoc3BlY2ltZW4pOy8vXG5zd2l0Y2gocGF0dGVybktpbmQpe1xuY2FzZSB1bmRlZmluZWQ6e1xucmV0dXJuIEZhaWwgYHBhdHRlcm4gZXhwZWN0ZWQ6ICR7cGF0dH1gO1xuIH1cbmNhc2UncHJvbWlzZSc6e1xucmV0dXJuIEZhaWwgYHByb21pc2VzIGNhbm5vdCBiZSBwYXR0ZXJuczogJHtwYXR0fWA7XG4gfVxuY2FzZSdlcnJvcic6e1xucmV0dXJuIEZhaWwgYGVycm9ycyBjYW5ub3QgYmUgcGF0dGVybnM6ICR7cGF0dH1gO1xuIH1cbmNhc2UndW5kZWZpbmVkJzpcbmNhc2UnbnVsbCc6XG5jYXNlJ2Jvb2xlYW4nOlxuY2FzZSdudW1iZXInOlxuY2FzZSdiaWdpbnQnOlxuY2FzZSdzdHJpbmcnOlxuY2FzZSdzeW1ib2wnOlxuY2FzZSdjb3B5U2V0JzpcbmNhc2UnY29weUJhZyc6XG5jYXNlJ3JlbW90YWJsZSc6e1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5jYXNlJ2NvcHlBcnJheSc6e1xuaWYoaXNLZXkocGF0dCkpe1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4scGF0dCxjaGVjayk7XG4gfVxuaWYoc3BlY2ltZW5LaW5kIT09J2NvcHlBcnJheScpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSBjb3B5QXJyYXkgdG8gbWF0Y2ggYSBjb3B5QXJyYXkgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG5jb25zdHtsZW5ndGh9PXBhdHQ7XG5pZihzcGVjaW1lbi5sZW5ndGghPT1sZW5ndGgpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBBcnJheSAke3NwZWNpbWVufSAtIE11c3QgYmUgYXMgbG9uZyBhcyBjb3B5QXJyYXkgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG5yZXR1cm4gcGF0dC5ldmVyeSgocCxpKT0+Y2hlY2tNYXRjaGVzKHNwZWNpbWVuW2ldLHAsY2hlY2ssaSkpO1xuIH1cbmNhc2UnY29weVJlY29yZCc6e1xuaWYoaXNLZXkocGF0dCkpe1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tBc0tleVBhdHQoc3BlY2ltZW4scGF0dCxjaGVjayk7XG4gfVxuaWYoc3BlY2ltZW5LaW5kIT09J2NvcHlSZWNvcmQnKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgY29weVJlY29yZCB0byBtYXRjaCBhIGNvcHlSZWNvcmQgcGF0dGVybjogJHtxKFxucGF0dClcbiB9YCk7XG5cbiB9XG4vL1xuLy9cbi8vXG4vL1xuLy9cbmNvbnN0IHNwZWNpbWVuTmFtZXM9cmVjb3JkTmFtZXMoc3BlY2ltZW4pO1xuY29uc3QgcGF0dE5hbWVzPXJlY29yZE5hbWVzKHBhdHQpO1xuY29uc3QgbWlzc2luZz1saXN0RGlmZmVyZW5jZShwYXR0TmFtZXMsc3BlY2ltZW5OYW1lcyk7XG5pZihtaXNzaW5nLmxlbmd0aD49MSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBoYXZlIG1pc3NpbmcgcHJvcGVydGllcyAke3EobWlzc2luZyl9YCk7XG5cbiB9XG5jb25zdCB1bmV4cGVjdGVkPWxpc3REaWZmZXJlbmNlKHNwZWNpbWVuTmFtZXMscGF0dE5hbWVzKTtcbmlmKHVuZXhwZWN0ZWQubGVuZ3RoPj0xKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IG5vdCBoYXZlIHVuZXhwZWN0ZWQgcHJvcGVydGllczogJHtxKFxudW5leHBlY3RlZClcbiB9YCk7XG5cbiB9XG5jb25zdCBzcGVjaW1lblZhbHVlcz1yZWNvcmRWYWx1ZXMoc3BlY2ltZW4sc3BlY2ltZW5OYW1lcyk7XG5jb25zdCBwYXR0VmFsdWVzPXJlY29yZFZhbHVlcyhwYXR0LHBhdHROYW1lcyk7XG5yZXR1cm4gcGF0dE5hbWVzLmV2ZXJ5KChsYWJlbCxpKT0+XG5jaGVja01hdGNoZXMoc3BlY2ltZW5WYWx1ZXNbaV0scGF0dFZhbHVlc1tpXSxjaGVjayxsYWJlbCkpO1xuXG4gfVxuY2FzZSdjb3B5TWFwJzp7XG5pZihpc0tleShwYXR0KSl7XG4vL1xuLy9cbnJldHVybiBjaGVja0FzS2V5UGF0dChzcGVjaW1lbixwYXR0LGNoZWNrKTtcbiB9XG5pZihzcGVjaW1lbktpbmQhPT0nY29weU1hcCcpe1xucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgYSBjb3B5TWFwIHRvIG1hdGNoIGEgY29weU1hcCBwYXR0ZXJuOiAke3EoXG5wYXR0KVxuIH1gKTtcblxuIH1cbi8vXG5jb25zdCBwYXR0S2V5U2V0PWNvcHlNYXBLZXlTZXQocGF0dCk7XG5jb25zdCBzcGVjaW1lbktleVNldD1jb3B5TWFwS2V5U2V0KHNwZWNpbWVuKTtcbmlmKCFjaGVja01hdGNoZXMoc3BlY2ltZW5LZXlTZXQscGF0dEtleVNldCxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbi8vXG4vL1xuLy9cbmNvbnN0IHBhdHRWYWx1ZXM9W107XG5jb25zdCBzcGVjaW1lblZhbHVlcz1bXTtcbmNvbnN0IGVudHJ5UGFpcnM9Z2VuZXJhdGVDb2xsZWN0aW9uUGFpckVudHJpZXMoXG5wYXR0LFxuc3BlY2ltZW4sXG5nZXRDb3B5TWFwRW50cnlBcnJheSxcbnVuZGVmaW5lZCk7XG5cbmZvcihjb25zdFtfa2V5LHBhdHRWYWx1ZSxzcGVjaW1lblZhbHVlXW9mIGVudHJ5UGFpcnMpe1xucGF0dFZhbHVlcy5wdXNoKHBhdHRWYWx1ZSk7XG5zcGVjaW1lblZhbHVlcy5wdXNoKHNwZWNpbWVuVmFsdWUpO1xuIH1cbnJldHVybiBjaGVja01hdGNoZXMoaGFyZGVuKHNwZWNpbWVuVmFsdWVzKSxoYXJkZW4ocGF0dFZhbHVlcyksY2hlY2spO1xuIH1cbmRlZmF1bHQ6e1xuY29uc3QgbWF0Y2hIZWxwZXI9bWF5YmVNYXRjaEhlbHBlcihwYXR0ZXJuS2luZCk7XG5pZihtYXRjaEhlbHBlcil7XG5yZXR1cm4gbWF0Y2hIZWxwZXIuY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQucGF5bG9hZCxjaGVjayk7XG4gfVxudGhyb3cgRmFpbCBgaW50ZXJuYWw6IHNob3VsZCBoYXZlIHJlY29nbml6ZWQgJHtxKHBhdHRlcm5LaW5kKX0gYDtcbiB9fVxuXG4gfTtcblxuLypcblxuXG5cbiAgICovXG5jb25zdCBtYXRjaGVzPShzcGVjaW1lbixwYXR0KT0+XG5jaGVja01hdGNoZXMoc3BlY2ltZW4scGF0dCxpZGVudENoZWNrZXIpO1xuXG4vKlxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IG11c3RNYXRjaD0oc3BlY2ltZW4scGF0dCxsYWJlbD11bmRlZmluZWQpPT57XG5sZXQgaW5uZXJFcnJvcjtcbnRyeXtcbmlmKGNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LGlkZW50Q2hlY2tlcix1bmRlZmluZWQpKXtcbnJldHVybjtcbiB9XG4gfWNhdGNoKGVyKXtcbmlubmVyRXJyb3I9ZXI7XG4gfVxuLy9cbmNoZWNrTWF0Y2hlcyhzcGVjaW1lbixwYXR0LGFzc2VydENoZWNrZXIsbGFiZWwpO1xuY29uc3Qgb3V0ZXJFcnJvcj1tYWtlRXJyb3IoXG5YIGBpbnRlcm5hbDogJHtsYWJlbH06IGluY29uc2lzdGVudCBwYXR0ZXJuIG1hdGNoOiAke3EocGF0dCl9YCk7XG5cbmlmKGlubmVyRXJyb3IhPT11bmRlZmluZWQpe1xuYW5ub3RhdGVFcnJvcihvdXRlckVycm9yLFggYGNhdXNlZCBieSAke2lubmVyRXJyb3J9YCk7XG4gfVxudGhyb3cgb3V0ZXJFcnJvcjtcbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGdldFJhbmtDb3Zlcj0ocGF0dCxlbmNvZGVQYXNzYWJsZSk9PntcbmlmKGlzS2V5KHBhdHQpKXtcbmNvbnN0IGVuY29kZWQ9ZW5jb2RlUGFzc2FibGUocGF0dCk7XG5pZihlbmNvZGVkIT09dW5kZWZpbmVkKXtcbnJldHVybltlbmNvZGVkLCBgJHtlbmNvZGVkfX5gXTtcbiB9XG4gfVxuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHBhdHQpO1xuc3dpdGNoKHBhc3NTdHlsZSl7XG5jYXNlJ2NvcHlBcnJheSc6e1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYnJlYWs7XG4gfVxuY2FzZSdjb3B5UmVjb3JkJzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG5icmVhaztcbiB9XG5jYXNlJ3RhZ2dlZCc6e1xuY29uc3QgdGFnPWdldFRhZyhwYXR0KTtcbmNvbnN0IG1hdGNoSGVscGVyPW1heWJlTWF0Y2hIZWxwZXIodGFnKTtcbmlmKG1hdGNoSGVscGVyKXtcbi8vXG4vL1xucmV0dXJuIG1hdGNoSGVscGVyLmdldFJhbmtDb3ZlcihwYXR0LnBheWxvYWQsZW5jb2RlUGFzc2FibGUpO1xuIH1cbnN3aXRjaCh0YWcpe1xuY2FzZSdjb3B5U2V0Jzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuYnJlYWs7XG4gfVxuY2FzZSdjb3B5TWFwJzp7XG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmJyZWFrO1xuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7Ly9cbiB9fVxuXG5icmVhazsvL1xuIH1cbmRlZmF1bHQ6e1xuYnJlYWs7Ly9cbiB9fVxuXG5yZXR1cm4gZ2V0UGFzc1N0eWxlQ292ZXIocGFzc1N0eWxlKTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhcnJheUV2ZXJ5TWF0Y2hQYXR0ZXJuPShhcnJheSxwYXR0LGNoZWNrLGxhYmVsUHJlZml4PScnKT0+e1xuaWYoaXNLaW5kKHBhdHQsJ21hdGNoOmFueScpKXtcbi8vXG5yZXR1cm4gdHJ1ZTtcbiB9XG5yZXR1cm4gYXJyYXkuZXZlcnkoKGVsLGkpPT5cbmNoZWNrTWF0Y2hlcyhlbCxwYXR0LGNoZWNrLCBgJHtsYWJlbFByZWZpeH1bJHtpfV1gKSk7XG5cbiB9O1xuXG4vL1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hBbnlIZWxwZXI9RmFyKCdtYXRjaDphbnkgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KF9zcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsX2NoZWNrKT0+dHJ1ZSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KG1hdGNoZXJQYXlsb2FkLGNoZWNrKT0+XG5tYXRjaGVyUGF5bG9hZD09PXVuZGVmaW5lZHx8XG5jaGVjayhmYWxzZSxYIGBtYXRjaDphbnkgcGF5bG9hZDogJHttYXRjaGVyUGF5bG9hZH0gLSBNdXN0IGJlIHVuZGVmaW5lZGApLFxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+WycnLCd7J119KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hBbmRIZWxwZXI9RmFyKCdtYXRjaDphbmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHBhdHRzLGNoZWNrKT0+e1xucmV0dXJuIHBhdHRzLmV2ZXJ5KChwYXR0KT0+Y2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHQsY2hlY2spKTtcbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDooYWxsZWdlZFBhdHRzLGNoZWNrKT0+e1xuY29uc3QgY2hlY2tJdD0ocGF0dCk9PmNoZWNrUGF0dGVybihwYXR0LGNoZWNrKTtcbnJldHVybihcbihwYXNzU3R5bGVPZihhbGxlZ2VkUGF0dHMpPT09J2NvcHlBcnJheSd8fFxuY2hlY2soZmFsc2UsWCBgTmVlZHMgYXJyYXkgb2Ygc3ViLXBhdHRlcm5zOiAke3EoYWxsZWdlZFBhdHRzKX1gKSkmJlxuYWxsZWdlZFBhdHRzLmV2ZXJ5KGNoZWNrSXQpKTtcblxuIH0sXG5cbmdldFJhbmtDb3ZlcjoocGF0dHMsZW5jb2RlUGFzc2FibGUpPT5cbmludGVyc2VjdFJhbmtDb3ZlcnMoXG5jb21wYXJlUmFuayxcbnBhdHRzLm1hcCgocCk9PmdldFJhbmtDb3ZlcihwLGVuY29kZVBhc3NhYmxlKSkpfSk7XG5cblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hPckhlbHBlcj1GYXIoJ21hdGNoOm9yIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixwYXR0cyxjaGVjayk9PntcbmNvbnN0e2xlbmd0aH09cGF0dHM7XG5pZihsZW5ndGg9PT0wKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgJHtzcGVjaW1lbn0gLSBubyBwYXR0ZXJuIGRpc2p1bmN0cyB0byBtYXRjaDogJHtxKHBhdHRzKX1gKTtcblxuIH1cbmlmKFxucGF0dHMubGVuZ3RoPT09MiYmXG4hbWF0Y2hlcyhzcGVjaW1lbixwYXR0c1swXSkmJlxuaXNLaW5kKHBhdHRzWzBdLCdtYXRjaDpraW5kJykmJlxucGF0dHNbMF0ucGF5bG9hZD09PSd1bmRlZmluZWQnKVxue1xuLy9cbi8vXG5yZXR1cm4gY2hlY2tNYXRjaGVzKHNwZWNpbWVuLHBhdHRzWzFdLGNoZWNrKTtcbiB9XG5pZihwYXR0cy5zb21lKChwYXR0KT0+bWF0Y2hlcyhzcGVjaW1lbixwYXR0KSkpe1xucmV0dXJuIHRydWU7XG4gfVxucmV0dXJuIGNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBtYXRjaCBvbmUgb2YgJHtxKHBhdHRzKX1gKTtcbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDptYXRjaEFuZEhlbHBlci5jaGVja0lzV2VsbEZvcm1lZCxcblxuZ2V0UmFua0NvdmVyOihwYXR0cyxlbmNvZGVQYXNzYWJsZSk9PlxudW5pb25SYW5rQ292ZXJzKFxuY29tcGFyZVJhbmssXG5wYXR0cy5tYXAoKHApPT5nZXRSYW5rQ292ZXIocCxlbmNvZGVQYXNzYWJsZSkpKX0pO1xuXG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoTm90SGVscGVyPUZhcignbWF0Y2g6bm90IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixwYXR0LGNoZWNrKT0+e1xuaWYobWF0Y2hlcyhzcGVjaW1lbixwYXR0KSl7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYCR7c3BlY2ltZW59IC0gTXVzdCBmYWlsIG5lZ2F0ZWQgcGF0dGVybjogJHtxKHBhdHQpfWApO1xuXG4gfWVsc2V7XG5yZXR1cm4gdHJ1ZTtcbiB9XG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tQYXR0ZXJuLFxuXG5nZXRSYW5rQ292ZXI6KF9wYXR0LF9lbmNvZGVQYXNzYWJsZSk9PlsnJywneyddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU2NhbGFySGVscGVyPUZhcignbWF0Y2g6c2NhbGFyIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsY2hlY2spPT5cbmNoZWNrU2NhbGFyS2V5KHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoS2V5SGVscGVyPUZhcignbWF0Y2g6a2V5IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixfbWF0Y2hlclBheWxvYWQsY2hlY2spPT5cbmNoZWNrS2V5KHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoUGF0dGVybkhlbHBlcj1GYXIoJ21hdGNoOnBhdHRlcm4gaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLF9tYXRjaGVyUGF5bG9hZCxjaGVjayk9PlxuY2hlY2tQYXR0ZXJuKHNwZWNpbWVuLGNoZWNrKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6bWF0Y2hBbnlIZWxwZXIuY2hlY2tJc1dlbGxGb3JtZWQsXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5bJ2EnLCd6fiddfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoS2luZEhlbHBlcj1GYXIoJ21hdGNoOmtpbmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6Y2hlY2tLaW5kLFxuXG5jaGVja0lzV2VsbEZvcm1lZDooYWxsZWdlZEtleUtpbmQsY2hlY2spPT5cbnR5cGVvZiBhbGxlZ2VkS2V5S2luZD09PSdzdHJpbmcnfHxcbmNoZWNrKFxuZmFsc2UsXG5YIGBtYXRjaDpraW5kOiBwYXlsb2FkOiAke2FsbGVnZWRLZXlLaW5kfSAtIEEga2luZCBuYW1lIG11c3QgYmUgYSBzdHJpbmdgKSxcblxuXG5nZXRSYW5rQ292ZXI6KGtpbmQsX2VuY29kZVBhc3NhYmxlKT0+e1xubGV0IHN0eWxlO1xuc3dpdGNoKGtpbmQpe1xuY2FzZSdjb3B5U2V0JzpcbmNhc2UnY29weU1hcCc6e1xuc3R5bGU9J3RhZ2dlZCc7XG5icmVhaztcbiB9XG5kZWZhdWx0OntcbnN0eWxlPWtpbmQ7XG5icmVhaztcbiB9fVxuXG5yZXR1cm4gZ2V0UGFzc1N0eWxlQ292ZXIoc3R5bGUpO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hUYWdnZWRIZWxwZXI9RmFyKCdtYXRjaDp0YWdnZWQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFt0YWdQYXR0LHBheWxvYWRQYXR0XSxjaGVjayk9PntcbmlmKHBhc3NTdHlsZU9mKHNwZWNpbWVuKSE9PSd0YWdnZWQnKXtcbnJldHVybiBjaGVjayhcbmZhbHNlLFxuWCBgRXhwZWN0ZWQgdGFnZ2VkIG9iamVjdCwgbm90ICR7cShcbnBhc3NTdHlsZU9mKHNwZWNpbWVuKSlcbiB9OiAke3NwZWNpbWVufWApO1xuXG4gfVxucmV0dXJuKFxuY2hlY2tNYXRjaGVzKGdldFRhZyhzcGVjaW1lbiksdGFnUGF0dCxjaGVjaywndGFnJykmJlxuY2hlY2tNYXRjaGVzKHNwZWNpbWVuLnBheWxvYWQscGF5bG9hZFBhdHQsY2hlY2ssJ3BheWxvYWQnKSk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tNYXRjaGVzKFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpLE1NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6dGFnZ2VkIHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9raW5kLF9lbmNvZGVQYXNzYWJsZSk9PmdldFBhc3NTdHlsZUNvdmVyKCd0YWdnZWQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEJpZ2ludEhlbHBlcj1GYXIoJ21hdGNoOmJpZ2ludCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2xpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7ZGVjaW1hbERpZ2l0c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdiaWdpbnQnLGNoZWNrKSYmXG5jaGVja0RlY2ltYWxEaWdpdHNMaW1pdChzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW10pLFxuY2hlY2ssXG4nbWF0Y2g6YmlnaW50IHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcignYmlnaW50Jyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hOYXRIZWxwZXI9RmFyKCdtYXRjaDpuYXQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLFtsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e2RlY2ltYWxEaWdpdHNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnYmlnaW50JyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAgKi9zcGVjaW1lbj49MG4sXG5YIGAke3NwZWNpbWVufSAtIE11c3QgYmUgbm9uLW5lZ2F0aXZlYCkmJlxuXG5jaGVja0RlY2ltYWxEaWdpdHNMaW1pdChzcGVjaW1lbixkZWNpbWFsRGlnaXRzTGltaXQsY2hlY2spKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW10pLFxuY2hlY2ssXG4nbWF0Y2g6bmF0IHBheWxvYWQnKSxcblxuXG5nZXRSYW5rQ292ZXI6KF9tYXRjaFBheWxvYWQsX2VuY29kZVBhc3NhYmxlKT0+XG4vL1xuZ2V0UGFzc1N0eWxlQ292ZXIoJ2JpZ2ludCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU3RyaW5nSGVscGVyPUZhcignbWF0Y2g6c3RyaW5nIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtzdHJpbmdMZW5ndGhMaW1pdH09bGltaXQobGltaXRzKTtcbi8vXG5yZXR1cm4oXG5jaGVja0tpbmQoc3BlY2ltZW4sJ3N0cmluZycsY2hlY2spJiYoXG4vL1xuLyogICAgICAgICAgICAgICAgICovc3BlY2ltZW4ubGVuZ3RoPD1zdHJpbmdMZW5ndGhMaW1pdHx8XG5jaGVjayhcbmZhbHNlLFxuWCBgc3RyaW5nICR7c3BlY2ltZW59IG11c3Qgbm90IGJlIGJpZ2dlciB0aGFuICR7c3RyaW5nTGVuZ3RoTGltaXR9YCkpKTtcblxuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbXSksXG5jaGVjayxcbidtYXRjaDpzdHJpbmcgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX21hdGNoUGF5bG9hZCxfZW5jb2RlUGFzc2FibGUpPT5cbmdldFBhc3NTdHlsZUNvdmVyKCdzdHJpbmcnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFN5bWJvbEhlbHBlcj1GYXIoJ21hdGNoOnN5bWJvbCBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2xpbWl0cz11bmRlZmluZWRdLGNoZWNrKT0+e1xuY29uc3R7c3ltYm9sTmFtZUxlbmd0aExpbWl0fT1saW1pdChsaW1pdHMpO1xuaWYoIWNoZWNrS2luZChzcGVjaW1lbiwnc3ltYm9sJyxjaGVjaykpe1xucmV0dXJuIGZhbHNlO1xuIH1cbmNvbnN0IHN5bWJvbE5hbWU9bmFtZUZvclBhc3NhYmxlU3ltYm9sKHNwZWNpbWVuKTtcblxuaWYodHlwZW9mIHN5bWJvbE5hbWUhPT0nc3RyaW5nJyl7XG50aHJvdyBGYWlsIGBpbnRlcm5hbDogUGFzc2FibGUgc3ltYm9sICR7c3BlY2ltZW59IG11c3QgaGF2ZSBhIHBhc3NhYmxlIG5hbWVgO1xuIH1cbnJldHVybiBjaGVjayhcbnN5bWJvbE5hbWUubGVuZ3RoPD1zeW1ib2xOYW1lTGVuZ3RoTGltaXQsXG5YIGBTeW1ib2wgbmFtZSAke3EoXG5zeW1ib2xOYW1lKVxuIH0gbXVzdCBub3QgYmUgYmlnZ2VyIHRoYW4gJHtzeW1ib2xOYW1lTGVuZ3RoTGltaXR9YCk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtdKSxcbmNoZWNrLFxuJ21hdGNoOnN5bWJvbCBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfbWF0Y2hQYXlsb2FkLF9lbmNvZGVQYXNzYWJsZSk9PlxuZ2V0UGFzc1N0eWxlQ292ZXIoJ3N5bWJvbCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoUmVtb3RhYmxlSGVscGVyPUZhcignbWF0Y2g6cmVtb3RhYmxlIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyZW1vdGFibGVEZXNjLGNoZWNrKT0+e1xuaWYoaXNLaW5kKHNwZWNpbWVuLCdyZW1vdGFibGUnKSl7XG5yZXR1cm4gdHJ1ZTtcbiB9XG5pZihjaGVjaz09PWlkZW50Q2hlY2tlcil7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7bGFiZWx9PXJlbW90YWJsZURlc2M7XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2Yoc3BlY2ltZW4pO1xuY29uc3Qga2luZERldGFpbHM9XG5wYXNzU3R5bGUhPT0ndGFnZ2VkJz9cbi8vXG5iKHBhc3NTdHlsZSk6XG4vL1xuLy9cbnEoZ2V0VGFnKHNwZWNpbWVuKSk7XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcbi8vXG4vL1xuWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIGEgcmVtb3RhYmxlICR7YihsYWJlbCl9LCBub3QgJHtraW5kRGV0YWlsc31gKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihhbGxlZ2VkUmVtb3RhYmxlRGVzYyxjaGVjayk9PlxuY2hlY2tNYXRjaGVzKFxuYWxsZWdlZFJlbW90YWJsZURlc2MsXG5oYXJkZW4oe2xhYmVsOk1NLnN0cmluZygpfSksXG5jaGVjayxcbidtYXRjaDpyZW1vdGFibGUgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX3JlbW90YWJsZURlc2MsX2VuY29kZVBhc3NhYmxlKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcigncmVtb3RhYmxlJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hMVEVIZWxwZXI9RmFyKCdtYXRjaDpsdGUgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5TFRFKHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCl8fFxuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIDw9ICR7cmlnaHRPcGVyYW5kfWApLFxuXG5jaGVja0lzV2VsbEZvcm1lZDpjaGVja0tleSxcblxuZ2V0UmFua0NvdmVyOihyaWdodE9wZXJhbmQsZW5jb2RlUGFzc2FibGUpPT57XG5jb25zdCBwYXNzU3R5bGU9cGFzc1N0eWxlT2YocmlnaHRPcGVyYW5kKTtcbi8vXG4vL1xuLy9cbmxldFtsZWZ0Qm91bmQscmlnaHRCb3VuZF09Z2V0UGFzc1N0eWxlQ292ZXIocGFzc1N0eWxlKTtcbmNvbnN0IG5ld1JpZ2h0Qm91bmQ9IGAke2VuY29kZVBhc3NhYmxlKHJpZ2h0T3BlcmFuZCl9fmA7XG5pZihuZXdSaWdodEJvdW5kIT09dW5kZWZpbmVkKXtcbnJpZ2h0Qm91bmQ9bmV3UmlnaHRCb3VuZDtcbiB9XG5yZXR1cm5bbGVmdEJvdW5kLHJpZ2h0Qm91bmRdO1xuIH19KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hMVEhlbHBlcj1GYXIoJ21hdGNoOmx0IGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyaWdodE9wZXJhbmQsY2hlY2spPT5cbmtleUxUKHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCl8fFxuY2hlY2soZmFsc2UsWCBgJHtzcGVjaW1lbn0gLSBNdXN0IGJlIDwgJHtyaWdodE9wZXJhbmR9YCksXG5cbmNoZWNrSXNXZWxsRm9ybWVkOmNoZWNrS2V5LFxuXG5nZXRSYW5rQ292ZXI6bWF0Y2hMVEVIZWxwZXIuZ2V0UmFua0NvdmVyfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoR1RFSGVscGVyPUZhcignbWF0Y2g6Z3RlIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixyaWdodE9wZXJhbmQsY2hlY2spPT5cbmtleUdURShzcGVjaW1lbixyaWdodE9wZXJhbmQpfHxcbmNoZWNrKGZhbHNlLFggYCR7c3BlY2ltZW59IC0gTXVzdCBiZSA+PSAke3JpZ2h0T3BlcmFuZH1gKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tLZXksXG5cbmdldFJhbmtDb3ZlcjoocmlnaHRPcGVyYW5kLGVuY29kZVBhc3NhYmxlKT0+e1xuY29uc3QgcGFzc1N0eWxlPXBhc3NTdHlsZU9mKHJpZ2h0T3BlcmFuZCk7XG4vL1xuLy9cbi8vXG5sZXRbbGVmdEJvdW5kLHJpZ2h0Qm91bmRdPWdldFBhc3NTdHlsZUNvdmVyKHBhc3NTdHlsZSk7XG5jb25zdCBuZXdMZWZ0Qm91bmQ9ZW5jb2RlUGFzc2FibGUocmlnaHRPcGVyYW5kKTtcbmlmKG5ld0xlZnRCb3VuZCE9PXVuZGVmaW5lZCl7XG5sZWZ0Qm91bmQ9bmV3TGVmdEJvdW5kO1xuIH1cbnJldHVybltsZWZ0Qm91bmQscmlnaHRCb3VuZF07XG4gfX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEdUSGVscGVyPUZhcignbWF0Y2g6Z3QgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KHNwZWNpbWVuLHJpZ2h0T3BlcmFuZCxjaGVjayk9Plxua2V5R1Qoc3BlY2ltZW4scmlnaHRPcGVyYW5kKXx8XG5jaGVjayhmYWxzZSxYIGAke3NwZWNpbWVufSAtIE11c3QgYmUgPiAke3JpZ2h0T3BlcmFuZH1gKSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6Y2hlY2tLZXksXG5cbmdldFJhbmtDb3ZlcjptYXRjaEdURUhlbHBlci5nZXRSYW5rQ292ZXJ9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hSZWNvcmRPZkhlbHBlcj1GYXIoJ21hdGNoOnJlY29yZE9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW2tleVBhdHQsdmFsdWVQYXR0LGxpbWl0cz11bmRlZmluZWRdLFxuY2hlY2spPT5cbntcbmNvbnN0e251bVByb3BlcnRpZXNMaW1pdCxwcm9wZXJ0eU5hbWVMZW5ndGhMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weVJlY29yZCcsY2hlY2spJiZcbmNoZWNrKFxub3duS2V5cyhzcGVjaW1lbikubGVuZ3RoPD1udW1Qcm9wZXJ0aWVzTGltaXQsXG5YIGBNdXN0IG5vdCBoYXZlIG1vcmUgdGhhbiAke3EoXG5udW1Qcm9wZXJ0aWVzTGltaXQpXG4gfSBwcm9wZXJ0aWVzOiAke3NwZWNpbWVufWApJiZcblxuZW50cmllcyhzcGVjaW1lbikuZXZlcnkoXG4oW2tleSx2YWx1ZV0pPT5cbmFwcGx5TGFiZWxpbmdFcnJvcihcbmNoZWNrLFxuW1xua2V5Lmxlbmd0aDw9cHJvcGVydHlOYW1lTGVuZ3RoTGltaXQsXG5YIGBQcm9wZXJ0eSBuYW1lIG11c3Qgbm90IGJlIGxvbmdlciB0aGFuICR7cShcbnByb3BlcnR5TmFtZUxlbmd0aExpbWl0KVxuIH1gXSxcblxua2V5KSYmXG5cbmNoZWNrTWF0Y2hlcyhcbmhhcmRlbihba2V5LHZhbHVlXSksXG5oYXJkZW4oW2tleVBhdHQsdmFsdWVQYXR0XSksXG5jaGVjayxcbmtleSkpKTtcblxuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDpyZWNvcmRPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOihfZW50cnlQYXR0KT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ2NvcHlSZWNvcmQnKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaEFycmF5T2ZIZWxwZXI9RmFyKCdtYXRjaDphcnJheU9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihzcGVjaW1lbixbc3ViUGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxjaGVjayk9PntcbmNvbnN0e2FycmF5TGVuZ3RoTGltaXR9PWxpbWl0KGxpbWl0cyk7XG4vL1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5QXJyYXknLGNoZWNrKSYmKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5sZW5ndGg8PWFycmF5TGVuZ3RoTGltaXR8fFxuY2hlY2soXG5mYWxzZSxcblggYEFycmF5IGxlbmd0aCAke3NwZWNpbWVuLmxlbmd0aH0gbXVzdCBiZSA8PSBsaW1pdCAke2FycmF5TGVuZ3RoTGltaXR9YCkpJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihzcGVjaW1lbixzdWJQYXR0LGNoZWNrKSk7XG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCldKSxcbmNoZWNrLFxuJ21hdGNoOmFycmF5T2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooKT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ2NvcHlBcnJheScpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoU2V0T2ZIZWxwZXI9RmFyKCdtYXRjaDpzZXRPZiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooc3BlY2ltZW4sW2tleVBhdHQsbGltaXRzPXVuZGVmaW5lZF0sY2hlY2spPT57XG5jb25zdHtudW1TZXRFbGVtZW50c0xpbWl0fT1saW1pdChsaW1pdHMpO1xucmV0dXJuKFxuY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5U2V0JyxjaGVjaykmJlxuY2hlY2soXG4vKiAgICAgICAgICAgICAgICAqL3NwZWNpbWVuLnBheWxvYWQubGVuZ3RoPG51bVNldEVsZW1lbnRzTGltaXQsXG5YIGBTZXQgbXVzdCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtxKG51bVNldEVsZW1lbnRzTGltaXQpfSBlbGVtZW50czogJHtcbnNwZWNpbWVuLnBheWxvYWQubGVuZ3RoXG4gfWApJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihzcGVjaW1lbi5wYXlsb2FkLGtleVBhdHQsY2hlY2ssJ3NldCBlbGVtZW50cycpKTtcblxuIH0sXG5cbmNoZWNrSXNXZWxsRm9ybWVkOihwYXlsb2FkLGNoZWNrKT0+XG5jaGVja0lzV2VsbEZvcm1lZFdpdGhMaW1pdChcbnBheWxvYWQsXG5oYXJkZW4oW01NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6c2V0T2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooKT0+Z2V0UGFzc1N0eWxlQ292ZXIoJ3RhZ2dlZCcpfSk7XG5cblxuLyogICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IG1hdGNoQmFnT2ZIZWxwZXI9RmFyKCdtYXRjaDpiYWdPZiBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltrZXlQYXR0LGNvdW50UGF0dCxsaW1pdHM9dW5kZWZpbmVkXSxcbmNoZWNrKT0+XG57XG5jb25zdHtudW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0LGRlY2ltYWxEaWdpdHNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weUJhZycsY2hlY2spJiZcbmNoZWNrKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5wYXlsb2FkLmxlbmd0aDw9XG5udW1VbmlxdWVCYWdFbGVtZW50c0xpbWl0LFxuWCBgQmFnIG11c3Qgbm90IGhhdmUgbW9yZSB0aGFuICR7cShcbm51bVVuaXF1ZUJhZ0VsZW1lbnRzTGltaXQpXG4gfSB1bmlxdWUgZWxlbWVudHM6ICR7c3BlY2ltZW59YCkmJlxuXG5zcGVjaW1lbi5wYXlsb2FkLmV2ZXJ5KFxuKFtrZXksY291bnRdLGkpPT5cbmNoZWNrTWF0Y2hlcyhrZXksa2V5UGF0dCxjaGVjaywgYGJhZyBrZXlzWyR7aX1dYCkmJlxuYXBwbHlMYWJlbGluZ0Vycm9yKFxuY2hlY2tEZWNpbWFsRGlnaXRzTGltaXQsXG5bY291bnQsZGVjaW1hbERpZ2l0c0xpbWl0LGNoZWNrXSxcbiBgYmFnIGNvdW50c1ske2l9XWApJiZcblxuY2hlY2tNYXRjaGVzKGNvdW50LGNvdW50UGF0dCxjaGVjaywgYGJhZyBjb3VudHNbJHtpfV1gKSkpO1xuXG5cbiB9LFxuXG5jaGVja0lzV2VsbEZvcm1lZDoocGF5bG9hZCxjaGVjayk9PlxuY2hlY2tJc1dlbGxGb3JtZWRXaXRoTGltaXQoXG5wYXlsb2FkLFxuaGFyZGVuKFtNTS5wYXR0ZXJuKCksTU0ucGF0dGVybigpXSksXG5jaGVjayxcbidtYXRjaDpiYWdPZiBwYXlsb2FkJyksXG5cblxuZ2V0UmFua0NvdmVyOigpPT5nZXRQYXNzU3R5bGVDb3ZlcigndGFnZ2VkJyl9KTtcblxuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hNYXBPZkhlbHBlcj1GYXIoJ21hdGNoOm1hcE9mIGhlbHBlcicse1xuY2hlY2tNYXRjaGVzOihcbnNwZWNpbWVuLFxuW2tleVBhdHQsdmFsdWVQYXR0LGxpbWl0cz11bmRlZmluZWRdLFxuY2hlY2spPT5cbntcbmNvbnN0e251bU1hcEVudHJpZXNMaW1pdH09bGltaXQobGltaXRzKTtcbnJldHVybihcbmNoZWNrS2luZChzcGVjaW1lbiwnY29weU1hcCcsY2hlY2spJiZcbmNoZWNrKFxuLyogICAgICAgICAgICAgICAgKi9zcGVjaW1lbi5wYXlsb2FkLmtleXMubGVuZ3RoPD1cbm51bU1hcEVudHJpZXNMaW1pdCxcblggYENvcHlNYXAgbXVzdCBoYXZlIG5vIG1vcmUgdGhhbiAke3EoXG5udW1NYXBFbnRyaWVzTGltaXQpXG4gfSBlbnRyaWVzOiAke3NwZWNpbWVufWApJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihcbnNwZWNpbWVuLnBheWxvYWQua2V5cyxcbmtleVBhdHQsXG5jaGVjayxcbidtYXAga2V5cycpJiZcblxuYXJyYXlFdmVyeU1hdGNoUGF0dGVybihcbnNwZWNpbWVuLnBheWxvYWQudmFsdWVzLFxudmFsdWVQYXR0LFxuY2hlY2ssXG4nbWFwIHZhbHVlcycpKTtcblxuXG4gfSxcblxuY2hlY2tJc1dlbGxGb3JtZWQ6KHBheWxvYWQsY2hlY2spPT5cbmNoZWNrSXNXZWxsRm9ybWVkV2l0aExpbWl0KFxucGF5bG9hZCxcbmhhcmRlbihbTU0ucGF0dGVybigpLE1NLnBhdHRlcm4oKV0pLFxuY2hlY2ssXG4nbWF0Y2g6bWFwT2YgcGF5bG9hZCcpLFxuXG5cbmdldFJhbmtDb3ZlcjooX2VudHJ5UGF0dCk9PmdldFBhc3NTdHlsZUNvdmVyKCd0YWdnZWQnKX0pO1xuXG5cbi8qXG5cblxuXG5cblxuXG5cblxuICAgKi9cbmNvbnN0IHNwbGl0QXJyYXlQYXJ0cz0oc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk9PntcbmNvbnN0IG51bVJlcXVpcmVkPXJlcXVpcmVkUGF0dC5sZW5ndGg7XG5jb25zdCBudW1PcHRpb25hbD1vcHRpb25hbFBhdHQubGVuZ3RoO1xuY29uc3QgcmVxdWlyZWRTcGVjaW1lbj1zcGVjaW1lbi5zbGljZSgwLG51bVJlcXVpcmVkKTtcbmNvbnN0IG9wdGlvbmFsU3BlY2ltZW49c3BlY2ltZW4uc2xpY2UoXG5udW1SZXF1aXJlZCxcbm51bVJlcXVpcmVkK251bU9wdGlvbmFsKTtcblxuY29uc3QgcmVzdFNwZWNpbWVuPXNwZWNpbWVuLnNsaWNlKG51bVJlcXVpcmVkK251bU9wdGlvbmFsKTtcbnJldHVybiBoYXJkZW4oe3JlcXVpcmVkU3BlY2ltZW4sb3B0aW9uYWxTcGVjaW1lbixyZXN0U3BlY2ltZW59KTtcbiB9O1xuXG4vKlxuXG5cblxuXG5cblxuXG4gICAqL1xuY29uc3QgYWRhcHRBcnJheVBhdHRlcm49KG9wdGlvbmFsUGF0dCxsZW5ndGgpPT5cbmhhcmRlbihvcHRpb25hbFBhdHQuc2xpY2UoMCxsZW5ndGgpLm1hcCgocGF0dCk9Pk1NLm9wdChwYXR0KSkpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgbWF0Y2hTcGxpdEFycmF5SGVscGVyPUZhcignbWF0Y2g6c3BsaXRBcnJheSBoZWxwZXInLHtcbmNoZWNrTWF0Y2hlczooXG5zcGVjaW1lbixcbltyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0PVtdLHJlc3RQYXR0PU1NLmFueSgpXSxcbmNoZWNrKT0+XG57XG5pZighY2hlY2tLaW5kKHNwZWNpbWVuLCdjb3B5QXJyYXknLGNoZWNrKSl7XG5yZXR1cm4gZmFsc2U7XG4gfVxuY29uc3R7cmVxdWlyZWRTcGVjaW1lbixvcHRpb25hbFNwZWNpbWVuLHJlc3RTcGVjaW1lbn09XG5zcGxpdEFycmF5UGFydHMoc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk7XG5jb25zdCBwYXJ0aWFsUGF0dD1hZGFwdEFycmF5UGF0dGVybihcbm9wdGlvbmFsUGF0dCxcbm9wdGlvbmFsU3BlY2ltZW4ubGVuZ3RoKTtcblxubGV0IGFyZ051bT0wO1xucmV0dXJuKFxuKHJlcXVpcmVkU3BlY2ltZW4ubGVuZ3RoPT09cmVxdWlyZWRQYXR0Lmxlbmd0aHx8XG5jaGVjayhcbmZhbHNlLFxuWCBgRXhwZWN0ZWQgYXQgbGVhc3QgJHtxKFxucmVxdWlyZWRQYXR0Lmxlbmd0aClcbiB9IGFyZ3VtZW50czogJHtzcGVjaW1lbn1gKSkmJlxuXG5yZXF1aXJlZFBhdHQuZXZlcnkoKHAsaSk9PlxuLy9cbmNoZWNrTWF0Y2hlcyhyZXF1aXJlZFNwZWNpbWVuW2ldLHAsY2hlY2ssIGBhcmcgJHthcmdOdW0rK31gKSkmJlxuXG5wYXJ0aWFsUGF0dC5ldmVyeSgocCxpKT0+XG4vL1xuY2hlY2tNYXRjaGVzKG9wdGlvbmFsU3BlY2ltZW5baV0scCxjaGVjaywgYGFyZyAke2FyZ051bSsrfT9gKSkmJlxuXG5jaGVja01hdGNoZXMocmVzdFNwZWNpbWVuLHJlc3RQYXR0LGNoZWNrLCcuLi5yZXN0JykpO1xuXG4gfSxcblxuLypcblxuXG4gICAgICovXG5jaGVja0lzV2VsbEZvcm1lZDooc3BsaXRBcnJheSxjaGVjayk9PntcbmlmKFxucGFzc1N0eWxlT2Yoc3BsaXRBcnJheSk9PT0nY29weUFycmF5JyYmKFxuc3BsaXRBcnJheS5sZW5ndGg+PTF8fHNwbGl0QXJyYXkubGVuZ3RoPD0zKSlcbntcbmNvbnN0W3JlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQ9dW5kZWZpbmVkLHJlc3RQYXR0PXVuZGVmaW5lZF09XG5zcGxpdEFycmF5O1xuaWYoXG5pc1BhdHRlcm4ocmVxdWlyZWRQYXR0KSYmXG5wYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpPT09J2NvcHlBcnJheScmJihcbm9wdGlvbmFsUGF0dD09PXVuZGVmaW5lZHx8XG5pc1BhdHRlcm4ob3B0aW9uYWxQYXR0KSYmXG5wYXNzU3R5bGVPZihvcHRpb25hbFBhdHQpPT09J2NvcHlBcnJheScpJiYoXG5yZXN0UGF0dD09PXVuZGVmaW5lZHx8aXNQYXR0ZXJuKHJlc3RQYXR0KSkpXG57XG5yZXR1cm4gdHJ1ZTtcbiB9XG4gfVxucmV0dXJuIGNoZWNrKFxuZmFsc2UsXG5YIGBNdXN0IGJlIGFuIGFycmF5IG9mIGEgcmVxdWlyZWRQYXR0IGFycmF5LCBhbiBvcHRpb25hbCBvcHRpb25hbFBhdHQgYXJyYXksIGFuZCBhbiBvcHRpb25hbCByZXN0UGF0dDogJHtxKFxuc3BsaXRBcnJheSlcbiB9YCk7XG5cbiB9LFxuXG5nZXRSYW5rQ292ZXI6KFtcbl9yZXF1aXJlZFBhdHQsXG5fb3B0aW9uYWxQYXR0PXVuZGVmaW5lZCxcbl9yZXN0UGF0dD11bmRlZmluZWRdKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcignY29weUFycmF5Jyl9KTtcblxuXG4vKlxuXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBzcGxpdFJlY29yZFBhcnRzPShzcGVjaW1lbixyZXF1aXJlZFBhdHQsb3B0aW9uYWxQYXR0KT0+e1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZXF1aXJlZEVudHJpZXM9W107XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3Qgb3B0aW9uYWxFbnRyaWVzPVtdO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3RFbnRyaWVzPVtdO1xuZm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgZW50cmllcyhzcGVjaW1lbikpe1xuaWYoaGFzT3duUHJvcGVydHlPZihyZXF1aXJlZFBhdHQsbmFtZSkpe1xucmVxdWlyZWRFbnRyaWVzLnB1c2goW25hbWUsdmFsdWVdKTtcbiB9ZWxzZSBpZihoYXNPd25Qcm9wZXJ0eU9mKG9wdGlvbmFsUGF0dCxuYW1lKSl7XG5vcHRpb25hbEVudHJpZXMucHVzaChbbmFtZSx2YWx1ZV0pO1xuIH1lbHNle1xucmVzdEVudHJpZXMucHVzaChbbmFtZSx2YWx1ZV0pO1xuIH1cbiB9XG5yZXR1cm4gaGFyZGVuKHtcbnJlcXVpcmVkU3BlY2ltZW46ZnJvbVVuaXF1ZUVudHJpZXMocmVxdWlyZWRFbnRyaWVzKSxcbm9wdGlvbmFsU3BlY2ltZW46ZnJvbVVuaXF1ZUVudHJpZXMob3B0aW9uYWxFbnRyaWVzKSxcbnJlc3RTcGVjaW1lbjpmcm9tVW5pcXVlRW50cmllcyhyZXN0RW50cmllcyl9KTtcblxuIH07XG5cbi8qXG5cblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBhZGFwdFJlY29yZFBhdHRlcm49KG9wdGlvbmFsUGF0dCxuYW1lcyk9PlxuZnJvbVVuaXF1ZUVudHJpZXMobmFtZXMubWFwKChuYW1lKT0+W25hbWUsTU0ub3B0KG9wdGlvbmFsUGF0dFtuYW1lXSldKSk7XG5cbi8qICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBtYXRjaFNwbGl0UmVjb3JkSGVscGVyPUZhcignbWF0Y2g6c3BsaXRSZWNvcmQgaGVscGVyJyx7XG5jaGVja01hdGNoZXM6KFxuc3BlY2ltZW4sXG5bcmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dD17fSxyZXN0UGF0dD1NTS5hbnkoKV0sXG5jaGVjayk9Plxue1xuaWYoIWNoZWNrS2luZChzcGVjaW1lbiwnY29weVJlY29yZCcsY2hlY2spKXtcbnJldHVybiBmYWxzZTtcbiB9XG5jb25zdHtyZXF1aXJlZFNwZWNpbWVuLG9wdGlvbmFsU3BlY2ltZW4scmVzdFNwZWNpbWVufT1cbnNwbGl0UmVjb3JkUGFydHMoc3BlY2ltZW4scmVxdWlyZWRQYXR0LG9wdGlvbmFsUGF0dCk7XG5cbmNvbnN0IHBhcnRpYWxOYW1lcz0vKiAgICAgICAgICAgICAgICAgICAqL293bktleXMob3B0aW9uYWxTcGVjaW1lbik7XG5jb25zdCBwYXJ0aWFsUGF0dD1hZGFwdFJlY29yZFBhdHRlcm4ob3B0aW9uYWxQYXR0LHBhcnRpYWxOYW1lcyk7XG5yZXR1cm4oXG5jaGVja01hdGNoZXMocmVxdWlyZWRTcGVjaW1lbixyZXF1aXJlZFBhdHQsY2hlY2spJiZcbnBhcnRpYWxOYW1lcy5ldmVyeSgobmFtZSk9PlxuY2hlY2tNYXRjaGVzKFxub3B0aW9uYWxTcGVjaW1lbltuYW1lXSxcbnBhcnRpYWxQYXR0W25hbWVdLFxuY2hlY2ssXG4gYCR7bmFtZX0/YCkpJiZcblxuXG5jaGVja01hdGNoZXMocmVzdFNwZWNpbWVuLHJlc3RQYXR0LGNoZWNrLCcuLi5yZXN0JykpO1xuXG4gfSxcblxuLypcblxuXG4gICAgICovXG5jaGVja0lzV2VsbEZvcm1lZDooc3BsaXRBcnJheSxjaGVjayk9PntcbmlmKFxucGFzc1N0eWxlT2Yoc3BsaXRBcnJheSk9PT0nY29weUFycmF5JyYmKFxuc3BsaXRBcnJheS5sZW5ndGg+PTF8fHNwbGl0QXJyYXkubGVuZ3RoPD0zKSlcbntcbmNvbnN0W3JlcXVpcmVkUGF0dCxvcHRpb25hbFBhdHQ9dW5kZWZpbmVkLHJlc3RQYXR0PXVuZGVmaW5lZF09XG5zcGxpdEFycmF5O1xuaWYoXG5pc1BhdHRlcm4ocmVxdWlyZWRQYXR0KSYmXG5wYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpPT09J2NvcHlSZWNvcmQnJiYoXG5vcHRpb25hbFBhdHQ9PT11bmRlZmluZWR8fFxuaXNQYXR0ZXJuKG9wdGlvbmFsUGF0dCkmJlxucGFzc1N0eWxlT2Yob3B0aW9uYWxQYXR0KT09PSdjb3B5UmVjb3JkJykmJihcbnJlc3RQYXR0PT09dW5kZWZpbmVkfHxpc1BhdHRlcm4ocmVzdFBhdHQpKSlcbntcbnJldHVybiB0cnVlO1xuIH1cbiB9XG5yZXR1cm4gY2hlY2soXG5mYWxzZSxcblggYE11c3QgYmUgYW4gYXJyYXkgb2YgYSByZXF1aXJlZFBhdHQgcmVjb3JkLCBhbiBvcHRpb25hbCBvcHRpb25hbFBhdHQgcmVjb3JkLCBhbmQgYW4gb3B0aW9uYWwgcmVzdFBhdHQ6ICR7cShcbnNwbGl0QXJyYXkpXG4gfWApO1xuXG4gfSxcblxuZ2V0UmFua0NvdmVyOihbXG5yZXF1aXJlZFBhdHQsXG5fb3B0aW9uYWxQYXR0PXVuZGVmaW5lZCxcbl9yZXN0UGF0dD11bmRlZmluZWRdKT0+XG5nZXRQYXNzU3R5bGVDb3ZlcihwYXNzU3R5bGVPZihyZXF1aXJlZFBhdHQpKX0pO1xuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgSGVscGVyc0J5TWF0Y2hUYWc9aGFyZGVuKHtcbidtYXRjaDphbnknOm1hdGNoQW55SGVscGVyLFxuJ21hdGNoOmFuZCc6bWF0Y2hBbmRIZWxwZXIsXG4nbWF0Y2g6b3InOm1hdGNoT3JIZWxwZXIsXG4nbWF0Y2g6bm90JzptYXRjaE5vdEhlbHBlcixcblxuJ21hdGNoOnNjYWxhcic6bWF0Y2hTY2FsYXJIZWxwZXIsXG4nbWF0Y2g6a2V5JzptYXRjaEtleUhlbHBlcixcbidtYXRjaDpwYXR0ZXJuJzptYXRjaFBhdHRlcm5IZWxwZXIsXG4nbWF0Y2g6a2luZCc6bWF0Y2hLaW5kSGVscGVyLFxuJ21hdGNoOnRhZ2dlZCc6bWF0Y2hUYWdnZWRIZWxwZXIsXG4nbWF0Y2g6YmlnaW50JzptYXRjaEJpZ2ludEhlbHBlcixcbidtYXRjaDpuYXQnOm1hdGNoTmF0SGVscGVyLFxuJ21hdGNoOnN0cmluZyc6bWF0Y2hTdHJpbmdIZWxwZXIsXG4nbWF0Y2g6c3ltYm9sJzptYXRjaFN5bWJvbEhlbHBlcixcbidtYXRjaDpyZW1vdGFibGUnOm1hdGNoUmVtb3RhYmxlSGVscGVyLFxuXG4nbWF0Y2g6bHQnOm1hdGNoTFRIZWxwZXIsXG4nbWF0Y2g6bHRlJzptYXRjaExURUhlbHBlcixcbidtYXRjaDpndGUnOm1hdGNoR1RFSGVscGVyLFxuJ21hdGNoOmd0JzptYXRjaEdUSGVscGVyLFxuXG4nbWF0Y2g6YXJyYXlPZic6bWF0Y2hBcnJheU9mSGVscGVyLFxuJ21hdGNoOnJlY29yZE9mJzptYXRjaFJlY29yZE9mSGVscGVyLFxuJ21hdGNoOnNldE9mJzptYXRjaFNldE9mSGVscGVyLFxuJ21hdGNoOmJhZ09mJzptYXRjaEJhZ09mSGVscGVyLFxuJ21hdGNoOm1hcE9mJzptYXRjaE1hcE9mSGVscGVyLFxuJ21hdGNoOnNwbGl0QXJyYXknOm1hdGNoU3BsaXRBcnJheUhlbHBlcixcbidtYXRjaDpzcGxpdFJlY29yZCc6bWF0Y2hTcGxpdFJlY29yZEhlbHBlcn0pO1xuXG5cbmNvbnN0IG1ha2VNYXRjaGVyPSh0YWcscGF5bG9hZCk9PntcbmNvbnN0IG1hdGNoZXI9bWFrZVRhZ2dlZCh0YWcscGF5bG9hZCk7XG5hc3NlcnRQYXR0ZXJuKG1hdGNoZXIpO1xucmV0dXJuIG1hdGNoZXI7XG4gfTtcblxuY29uc3QgbWFrZUtpbmRNYXRjaGVyPShraW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmtpbmQnLGtpbmQpO1xuXG5jb25zdCBBbnlTaGFwZT1tYWtlTWF0Y2hlcignbWF0Y2g6YW55Jyx1bmRlZmluZWQpO1xuY29uc3QgU2NhbGFyU2hhcGU9bWFrZU1hdGNoZXIoJ21hdGNoOnNjYWxhcicsdW5kZWZpbmVkKTtcbmNvbnN0IEtleVNoYXBlPW1ha2VNYXRjaGVyKCdtYXRjaDprZXknLHVuZGVmaW5lZCk7XG5jb25zdCBQYXR0ZXJuU2hhcGU9bWFrZU1hdGNoZXIoJ21hdGNoOnBhdHRlcm4nLHVuZGVmaW5lZCk7XG5jb25zdCBCb29sZWFuU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdib29sZWFuJyk7XG5jb25zdCBOdW1iZXJTaGFwZT1tYWtlS2luZE1hdGNoZXIoJ251bWJlcicpO1xuY29uc3QgQmlnSW50U2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6YmlnaW50JyxbXSk7XG5jb25zdCBOYXRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpuYXQnLFtdKTtcbmNvbnN0IFN0cmluZ1NoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOnN0cmluZycsW10pO1xuY29uc3QgU3ltYm9sU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6c3ltYm9sJyxbXSk7XG5jb25zdCBSZWNvcmRTaGFwZT1tYWtlVGFnZ2VkKCdtYXRjaDpyZWNvcmRPZicsW0FueVNoYXBlLEFueVNoYXBlXSk7XG5jb25zdCBBcnJheVNoYXBlPW1ha2VUYWdnZWQoJ21hdGNoOmFycmF5T2YnLFtBbnlTaGFwZV0pO1xuY29uc3QgU2V0U2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6c2V0T2YnLFtBbnlTaGFwZV0pO1xuY29uc3QgQmFnU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6YmFnT2YnLFtBbnlTaGFwZSxBbnlTaGFwZV0pO1xuY29uc3QgTWFwU2hhcGU9bWFrZVRhZ2dlZCgnbWF0Y2g6bWFwT2YnLFtBbnlTaGFwZSxBbnlTaGFwZV0pO1xuY29uc3QgUmVtb3RhYmxlU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdyZW1vdGFibGUnKTtcbmNvbnN0IEVycm9yU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCdlcnJvcicpO1xuY29uc3QgUHJvbWlzZVNoYXBlPW1ha2VLaW5kTWF0Y2hlcigncHJvbWlzZScpO1xuY29uc3QgVW5kZWZpbmVkU2hhcGU9bWFrZUtpbmRNYXRjaGVyKCd1bmRlZmluZWQnKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlTGltaXRzTWF0Y2hlcj0odGFnLHBheWxvYWQpPT57XG5pZihwYXlsb2FkW3BheWxvYWQubGVuZ3RoLTFdPT09dW5kZWZpbmVkKXtcbnBheWxvYWQ9aGFyZGVuKHBheWxvYWQuc2xpY2UoMCxwYXlsb2FkLmxlbmd0aC0xKSk7XG4gfVxucmV0dXJuIG1ha2VNYXRjaGVyKHRhZyxwYXlsb2FkKTtcbiB9O1xuXG5jb25zdCBtYWtlUmVtb3RhYmxlTWF0Y2hlcj0obGFiZWw9dW5kZWZpbmVkKT0+XG5sYWJlbD09PXVuZGVmaW5lZD9cblJlbW90YWJsZVNoYXBlOlxubWFrZU1hdGNoZXIoJ21hdGNoOnJlbW90YWJsZScsaGFyZGVuKHtsYWJlbH0pKTtcblxuLypcblxuXG5cblxuXG5cbiAgICovXG5jb25zdCBtYWtlU3BsaXRQYXlsb2FkPShcbmVtcHR5LFxuYmFzZSxcbm9wdGlvbmFsPXVuZGVmaW5lZCxcbnJlc3Q9dW5kZWZpbmVkKT0+XG57XG5pZihyZXN0KXtcbnJldHVybltiYXNlLG9wdGlvbmFsfHxlbXB0eSxyZXN0XTtcbiB9XG5pZihvcHRpb25hbCl7XG5yZXR1cm5bYmFzZSxvcHRpb25hbF07XG4gfVxucmV0dXJuW2Jhc2VdO1xuIH07XG5cbi8vXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IE09aGFyZGVuKHtcbmFueTooKT0+QW55U2hhcGUsXG5hbmQ6KC4uLnBhdHRzKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmFuZCcscGF0dHMpLFxub3I6KC4uLnBhdHRzKT0+bWFrZU1hdGNoZXIoJ21hdGNoOm9yJyxwYXR0cyksXG5ub3Q6KHN1YlBhdHQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6bm90JyxzdWJQYXR0KSxcblxuc2NhbGFyOigpPT5TY2FsYXJTaGFwZSxcbmtleTooKT0+S2V5U2hhcGUsXG5wYXR0ZXJuOigpPT5QYXR0ZXJuU2hhcGUsXG5raW5kOm1ha2VLaW5kTWF0Y2hlcixcbnRhZ2dlZDoodGFnUGF0dD1NLnN0cmluZygpLHBheWxvYWRQYXR0PU0uYW55KCkpPT5cbm1ha2VNYXRjaGVyKCdtYXRjaDp0YWdnZWQnLGhhcmRlbihbdGFnUGF0dCxwYXlsb2FkUGF0dF0pKSxcbmJvb2xlYW46KCk9PkJvb2xlYW5TaGFwZSxcbm51bWJlcjooKT0+TnVtYmVyU2hhcGUsXG5iaWdpbnQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6YmlnaW50JyxbbGltaXRzXSk6QmlnSW50U2hhcGUsXG5uYXQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6bmF0JyxbbGltaXRzXSk6TmF0U2hhcGUsXG5zdHJpbmc6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c3RyaW5nJyxbbGltaXRzXSk6U3RyaW5nU2hhcGUsXG5zeW1ib2w6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c3ltYm9sJyxbbGltaXRzXSk6U3ltYm9sU2hhcGUsXG5yZWNvcmQ6KGxpbWl0cz11bmRlZmluZWQpPT5cbmxpbWl0cz9NLnJlY29yZE9mKE0uYW55KCksTS5hbnkoKSxsaW1pdHMpOlJlY29yZFNoYXBlLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuLy9cbmFycmF5OihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/TS5hcnJheU9mKE0uYW55KCksbGltaXRzKTpBcnJheVNoYXBlLFxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuc2V0OihsaW1pdHM9dW5kZWZpbmVkKT0+bGltaXRzP00uc2V0T2YoTS5hbnkoKSxsaW1pdHMpOlNldFNoYXBlLFxuYmFnOihsaW1pdHM9dW5kZWZpbmVkKT0+XG5saW1pdHM/TS5iYWdPZihNLmFueSgpLE0uYW55KCksbGltaXRzKTpCYWdTaGFwZSxcbm1hcDoobGltaXRzPXVuZGVmaW5lZCk9PlxubGltaXRzP00ubWFwT2YoTS5hbnkoKSxNLmFueSgpLGxpbWl0cyk6TWFwU2hhcGUsXG4vL1xuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xucmVtb3RhYmxlOm1ha2VSZW1vdGFibGVNYXRjaGVyLFxuZXJyb3I6KCk9PkVycm9yU2hhcGUsXG5wcm9taXNlOigpPT5Qcm9taXNlU2hhcGUsXG51bmRlZmluZWQ6KCk9PlVuZGVmaW5lZFNoYXBlLFxubnVsbDooKT0+bnVsbCxcblxubHQ6KHJpZ2h0T3BlcmFuZCk9Pm1ha2VNYXRjaGVyKCdtYXRjaDpsdCcscmlnaHRPcGVyYW5kKSxcbmx0ZToocmlnaHRPcGVyYW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmx0ZScscmlnaHRPcGVyYW5kKSxcbmVxOihrZXkpPT57XG5hc3NlcnRLZXkoa2V5KTtcbnJldHVybiBrZXk9PT11bmRlZmluZWQ/TS51bmRlZmluZWQoKTprZXk7XG4gfSxcbm5lcTooa2V5KT0+TS5ub3QoTS5lcShrZXkpKSxcbmd0ZToocmlnaHRPcGVyYW5kKT0+bWFrZU1hdGNoZXIoJ21hdGNoOmd0ZScscmlnaHRPcGVyYW5kKSxcbmd0OihyaWdodE9wZXJhbmQpPT5tYWtlTWF0Y2hlcignbWF0Y2g6Z3QnLHJpZ2h0T3BlcmFuZCksXG5cbnJlY29yZE9mOihrZXlQYXR0PU0uYW55KCksdmFsdWVQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOnJlY29yZE9mJyxba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzXSksXG5hcnJheU9mOihzdWJQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOmFycmF5T2YnLFtzdWJQYXR0LGxpbWl0c10pLFxuc2V0T2Y6KGtleVBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6c2V0T2YnLFtrZXlQYXR0LGxpbWl0c10pLFxuYmFnT2Y6KGtleVBhdHQ9TS5hbnkoKSxjb3VudFBhdHQ9TS5hbnkoKSxsaW1pdHM9dW5kZWZpbmVkKT0+XG5tYWtlTGltaXRzTWF0Y2hlcignbWF0Y2g6YmFnT2YnLFtrZXlQYXR0LGNvdW50UGF0dCxsaW1pdHNdKSxcbm1hcE9mOihrZXlQYXR0PU0uYW55KCksdmFsdWVQYXR0PU0uYW55KCksbGltaXRzPXVuZGVmaW5lZCk9PlxubWFrZUxpbWl0c01hdGNoZXIoJ21hdGNoOm1hcE9mJyxba2V5UGF0dCx2YWx1ZVBhdHQsbGltaXRzXSksXG5zcGxpdEFycmF5OihiYXNlLG9wdGlvbmFsPXVuZGVmaW5lZCxyZXN0PXVuZGVmaW5lZCk9PlxubWFrZU1hdGNoZXIoXG4nbWF0Y2g6c3BsaXRBcnJheScsXG5tYWtlU3BsaXRQYXlsb2FkKFtdLGJhc2Usb3B0aW9uYWwscmVzdCkpLFxuXG5zcGxpdFJlY29yZDooYmFzZSxvcHRpb25hbD11bmRlZmluZWQscmVzdD11bmRlZmluZWQpPT5cbm1ha2VNYXRjaGVyKFxuJ21hdGNoOnNwbGl0UmVjb3JkJyxcbm1ha2VTcGxpdFBheWxvYWQoe30sYmFzZSxvcHRpb25hbCxyZXN0KSksXG5cbnNwbGl0OihiYXNlLHJlc3Q9dW5kZWZpbmVkKT0+e1xuaWYocGFzc1N0eWxlT2YoaGFyZGVuKGJhc2UpKT09PSdjb3B5QXJyYXknKXtcbi8vXG4vL1xucmV0dXJuIE0uc3BsaXRBcnJheShiYXNlLHJlc3QmJltdLHJlc3QpO1xuIH1lbHNle1xucmV0dXJuIE0uc3BsaXRSZWNvcmQoYmFzZSxyZXN0JiZ7fSxyZXN0KTtcbiB9XG4gfSxcbnBhcnRpYWw6KGJhc2UscmVzdD11bmRlZmluZWQpPT57XG5pZihwYXNzU3R5bGVPZihoYXJkZW4oYmFzZSkpPT09J2NvcHlBcnJheScpe1xuLy9cbi8vXG5yZXR1cm4gTS5zcGxpdEFycmF5KFtdLGJhc2UscmVzdCk7XG4gfWVsc2V7XG5yZXR1cm4gTS5zcGxpdFJlY29yZCh7fSxiYXNlLHJlc3QpO1xuIH1cbiB9LFxuXG5lcmVmOih0KT0+TS5vcih0LE0ucHJvbWlzZSgpKSxcbm9wdDoodCk9Pk0ub3IoTS51bmRlZmluZWQoKSx0KSxcblxuaW50ZXJmYWNlOihpbnRlcmZhY2VOYW1lLG1ldGhvZEd1YXJkcyxvcHRpb25zKT0+XG4vL1xubWFrZUludGVyZmFjZUd1YXJkKGludGVyZmFjZU5hbWUsbWV0aG9kR3VhcmRzLG9wdGlvbnMpLFxuY2FsbDooLi4uYXJnUGF0dGVybnMpPT5cbi8vXG5tYWtlTWV0aG9kR3VhcmRNYWtlcignc3luYycsYXJnUGF0dGVybnMpLFxuY2FsbFdoZW46KC4uLmFyZ0d1YXJkcyk9PlxuLy9cbm1ha2VNZXRob2RHdWFyZE1ha2VyKCdhc3luYycsYXJnR3VhcmRzKSxcblxuYXdhaXQ6KGFyZ1BhdHRlcm4pPT5cbi8vXG5tYWtlQXdhaXRBcmdHdWFyZChhcmdQYXR0ZXJuKSxcbnJhdzooKT0+XG4vL1xubWFrZVJhd0d1YXJkKCl9KTtcblxuXG5yZXR1cm4gaGFyZGVuKHtcbmNoZWNrTWF0Y2hlcyxcbm1hdGNoZXMsXG5tdXN0TWF0Y2gsXG5hc3NlcnRQYXR0ZXJuLFxuaXNQYXR0ZXJuLFxuZ2V0UmFua0NvdmVyLFxuTSxcbmtpbmRPZn0pO1xuXG4gfTtcblxuLy9cbi8vXG4vL1xuLy9cbi8vXG4vL1xuY29uc3QgICAgICAge1xuY2hlY2tNYXRjaGVzLFxubWF0Y2hlcyxcbm11c3RNYXRjaCxcbmFzc2VydFBhdHRlcm4sXG5pc1BhdHRlcm4sXG5nZXRSYW5rQ292ZXIsXG5NLFxua2luZE9mfT1cbm1ha2VQYXR0ZXJuS2l0KCk7JGjNj19vbmNlLmNoZWNrTWF0Y2hlcyhjaGVja01hdGNoZXMpOyRozY9fb25jZS5tYXRjaGVzKG1hdGNoZXMpOyRozY9fb25jZS5tdXN0TWF0Y2gobXVzdE1hdGNoKTskaM2PX29uY2UuYXNzZXJ0UGF0dGVybihhc3NlcnRQYXR0ZXJuKTskaM2PX29uY2UuaXNQYXR0ZXJuKGlzUGF0dGVybik7JGjNj19vbmNlLmdldFJhbmtDb3ZlcihnZXRSYW5rQ292ZXIpOyRozY9fb25jZS5NKE0pOyRozY9fb25jZS5raW5kT2Yoa2luZE9mKTtcblxuTU09TTtcblxuLy9cblxuLy9cbmNvbnN0IEF3YWl0QXJnR3VhcmRQYXlsb2FkU2hhcGU9aGFyZGVuKHtcbmFyZ0d1YXJkOk0ucGF0dGVybigpfSk7XG5cblxuY29uc3QgICAgICAgIEF3YWl0QXJnR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOmF3YWl0QXJnR3VhcmQnKTtcblxuLypcblxuXG4gKi8kaM2PX29uY2UuQXdhaXRBcmdHdWFyZFNoYXBlKEF3YWl0QXJnR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgaXNBd2FpdEFyZ0d1YXJkPShzcGVjaW1lbik9PlxubWF0Y2hlcyhzcGVjaW1lbixBd2FpdEFyZ0d1YXJkU2hhcGUpOyRozY9fb25jZS5pc0F3YWl0QXJnR3VhcmQoaXNBd2FpdEFyZ0d1YXJkKTtcbmhhcmRlbihpc0F3YWl0QXJnR3VhcmQpO1xuXG4vKlxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzc2VydEF3YWl0QXJnR3VhcmQ9KHNwZWNpbWVuKT0+e1xubXVzdE1hdGNoKHNwZWNpbWVuLEF3YWl0QXJnR3VhcmRTaGFwZSwnYXdhaXRBcmdHdWFyZCcpO1xuIH07JGjNj19vbmNlLmFzc2VydEF3YWl0QXJnR3VhcmQoYXNzZXJ0QXdhaXRBcmdHdWFyZCk7XG5oYXJkZW4oYXNzZXJ0QXdhaXRBcmdHdWFyZCk7XG5cbi8qXG5cblxuICovXG5jb25zdCBtYWtlQXdhaXRBcmdHdWFyZD0oYXJnUGF0dGVybik9Pntcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IHJlc3VsdD1tYWtlVGFnZ2VkKCdndWFyZDphd2FpdEFyZ0d1YXJkJyx7XG5hcmdHdWFyZDphcmdQYXR0ZXJufSk7XG5cbmFzc2VydEF3YWl0QXJnR3VhcmQocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfTtcblxuLy9cblxuY29uc3QgUmF3R3VhcmRQYXlsb2FkU2hhcGU9TS5yZWNvcmQoKTtcblxuY29uc3QgICAgICAgIFJhd0d1YXJkU2hhcGU9TS5raW5kKCdndWFyZDpyYXdHdWFyZCcpOyRozY9fb25jZS5SYXdHdWFyZFNoYXBlKFJhd0d1YXJkU2hhcGUpO1xuXG5jb25zdCAgICAgICAgaXNSYXdHdWFyZD0oc3BlY2ltZW4pPT5tYXRjaGVzKHNwZWNpbWVuLFJhd0d1YXJkU2hhcGUpOyRozY9fb25jZS5pc1Jhd0d1YXJkKGlzUmF3R3VhcmQpO1xuXG5jb25zdCAgICAgICAgYXNzZXJ0UmF3R3VhcmQ9KHNwZWNpbWVuKT0+XG5tdXN0TWF0Y2goc3BlY2ltZW4sUmF3R3VhcmRTaGFwZSwncmF3R3VhcmQnKTtcblxuLypcblxuICovJGjNj19vbmNlLmFzc2VydFJhd0d1YXJkKGFzc2VydFJhd0d1YXJkKTtcbmNvbnN0IG1ha2VSYXdHdWFyZD0oKT0+bWFrZVRhZ2dlZCgnZ3VhcmQ6cmF3R3VhcmQnLHt9KTtcblxuLy9cbi8vXG5cbmNvbnN0ICAgICAgICBTeW5jVmFsdWVHdWFyZFNoYXBlPU0ub3IoUmF3R3VhcmRTaGFwZSxNLnBhdHRlcm4oKSk7JGjNj19vbmNlLlN5bmNWYWx1ZUd1YXJkU2hhcGUoU3luY1ZhbHVlR3VhcmRTaGFwZSk7XG5cbmNvbnN0ICAgICAgICBTeW5jVmFsdWVHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoU3luY1ZhbHVlR3VhcmRTaGFwZSk7JGjNj19vbmNlLlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKFN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlKTtcblxuY29uc3QgQXJnR3VhcmRTaGFwZT1NLm9yKFJhd0d1YXJkU2hhcGUsQXdhaXRBcmdHdWFyZFNoYXBlLE0ucGF0dGVybigpKTtcbmNvbnN0ICAgICAgICBBcmdHdWFyZExpc3RTaGFwZT1NLmFycmF5T2YoQXJnR3VhcmRTaGFwZSk7JGjNj19vbmNlLkFyZ0d1YXJkTGlzdFNoYXBlKEFyZ0d1YXJkTGlzdFNoYXBlKTtcblxuY29uc3QgU3luY01ldGhvZEd1YXJkUGF5bG9hZFNoYXBlPWhhcmRlbih7XG5jYWxsS2luZDonc3luYycsXG5hcmdHdWFyZHM6U3luY1ZhbHVlR3VhcmRMaXN0U2hhcGUsXG5vcHRpb25hbEFyZ0d1YXJkczpNLm9wdChTeW5jVmFsdWVHdWFyZExpc3RTaGFwZSksXG5yZXN0QXJnR3VhcmQ6TS5vcHQoU3luY1ZhbHVlR3VhcmRTaGFwZSksXG5yZXR1cm5HdWFyZDpTeW5jVmFsdWVHdWFyZFNoYXBlfSk7XG5cblxuY29uc3QgQXN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZT1oYXJkZW4oe1xuY2FsbEtpbmQ6J2FzeW5jJyxcbmFyZ0d1YXJkczpBcmdHdWFyZExpc3RTaGFwZSxcbm9wdGlvbmFsQXJnR3VhcmRzOk0ub3B0KEFyZ0d1YXJkTGlzdFNoYXBlKSxcbnJlc3RBcmdHdWFyZDpNLm9wdChTeW5jVmFsdWVHdWFyZFNoYXBlKSxcbnJldHVybkd1YXJkOlN5bmNWYWx1ZUd1YXJkU2hhcGV9KTtcblxuXG5jb25zdCAgICAgICAgTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGU9TS5vcihcblN5bmNNZXRob2RHdWFyZFBheWxvYWRTaGFwZSxcbkFzeW5jTWV0aG9kR3VhcmRQYXlsb2FkU2hhcGUpOyRozY9fb25jZS5NZXRob2RHdWFyZFBheWxvYWRTaGFwZShNZXRob2RHdWFyZFBheWxvYWRTaGFwZSk7XG5cblxuY29uc3QgICAgICAgIE1ldGhvZEd1YXJkU2hhcGU9TS5raW5kKCdndWFyZDptZXRob2RHdWFyZCcpO1xuXG4vKlxuXG5cbiAqLyRozY9fb25jZS5NZXRob2RHdWFyZFNoYXBlKE1ldGhvZEd1YXJkU2hhcGUpO1xuY29uc3QgICAgICAgIGFzc2VydE1ldGhvZEd1YXJkPShzcGVjaW1lbik9Pntcbm11c3RNYXRjaChzcGVjaW1lbixNZXRob2RHdWFyZFNoYXBlLCdtZXRob2RHdWFyZCcpO1xuIH07JGjNj19vbmNlLmFzc2VydE1ldGhvZEd1YXJkKGFzc2VydE1ldGhvZEd1YXJkKTtcbmhhcmRlbihhc3NlcnRNZXRob2RHdWFyZCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCBtYWtlTWV0aG9kR3VhcmRNYWtlcj0oXG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzPXVuZGVmaW5lZCxcbnJlc3RBcmdHdWFyZD11bmRlZmluZWQpPT5cblxuaGFyZGVuKHtcbm9wdGlvbmFsOiguLi5vcHRBcmdHdWFyZHMpPT57XG5vcHRpb25hbEFyZ0d1YXJkcz09PXVuZGVmaW5lZHx8XG5GYWlsIGBDYW4gb25seSBoYXZlIG9uZSBzZXQgb2Ygb3B0aW9uYWwgZ3VhcmRzYDtcbnJlc3RBcmdHdWFyZD09PXVuZGVmaW5lZHx8XG5GYWlsIGBvcHRpb25hbCBhcmcgZ3VhcmRzIG11c3QgY29tZSBiZWZvcmUgcmVzdCBhcmdgO1xucmV0dXJuIG1ha2VNZXRob2RHdWFyZE1ha2VyKGNhbGxLaW5kLGFyZ0d1YXJkcyxvcHRBcmdHdWFyZHMpO1xuIH0sXG5yZXN0OihyQXJnR3VhcmQpPT57XG5yZXN0QXJnR3VhcmQ9PT11bmRlZmluZWR8fEZhaWwgYENhbiBvbmx5IGhhdmUgb25lIHJlc3QgYXJnYDtcbnJldHVybiBtYWtlTWV0aG9kR3VhcmRNYWtlcihcbmNhbGxLaW5kLFxuYXJnR3VhcmRzLFxub3B0aW9uYWxBcmdHdWFyZHMsXG5yQXJnR3VhcmQpO1xuXG4gfSxcbnJldHVybnM6KHJldHVybkd1YXJkPU0udW5kZWZpbmVkKCkpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOm1ldGhvZEd1YXJkJyx7XG5jYWxsS2luZCxcbmFyZ0d1YXJkcyxcbm9wdGlvbmFsQXJnR3VhcmRzLFxucmVzdEFyZ0d1YXJkLFxucmV0dXJuR3VhcmR9KTtcblxuYXNzZXJ0TWV0aG9kR3VhcmQocmVzdWx0KTtcbnJldHVybiByZXN1bHQ7XG4gfX0pO1xuXG5cbmNvbnN0ICAgICAgICBJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZT1NLnNwbGl0UmVjb3JkKFxue1xuaW50ZXJmYWNlTmFtZTpNLnN0cmluZygpLFxubWV0aG9kR3VhcmRzOk0ucmVjb3JkT2YoTS5zdHJpbmcoKSxNZXRob2RHdWFyZFNoYXBlKX0sXG5cbntcbmRlZmF1bHRHdWFyZHM6TS5vcihNLnVuZGVmaW5lZCgpLCdwYXNzYWJsZScsJ3JhdycpLFxuc2xvcHB5Ok0uYm9vbGVhbigpLFxuc3ltYm9sTWV0aG9kR3VhcmRzOk0ubWFwT2YoTS5zeW1ib2woKSxNZXRob2RHdWFyZFNoYXBlKX0pOyRozY9fb25jZS5JbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZShJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSk7XG5cblxuXG5jb25zdCAgICAgICAgSW50ZXJmYWNlR3VhcmRTaGFwZT1NLmtpbmQoJ2d1YXJkOmludGVyZmFjZUd1YXJkJyk7XG5cbi8qXG5cblxuICovJGjNj19vbmNlLkludGVyZmFjZUd1YXJkU2hhcGUoSW50ZXJmYWNlR3VhcmRTaGFwZSk7XG5jb25zdCAgICAgICAgYXNzZXJ0SW50ZXJmYWNlR3VhcmQ9KHNwZWNpbWVuKT0+e1xubXVzdE1hdGNoKHNwZWNpbWVuLEludGVyZmFjZUd1YXJkU2hhcGUsJ2ludGVyZmFjZUd1YXJkJyk7XG4gfTskaM2PX29uY2UuYXNzZXJ0SW50ZXJmYWNlR3VhcmQoYXNzZXJ0SW50ZXJmYWNlR3VhcmQpO1xuaGFyZGVuKGFzc2VydEludGVyZmFjZUd1YXJkKTtcblxuLypcblxuXG5cblxuXG4gKi9cbmNvbnN0IG1ha2VJbnRlcmZhY2VHdWFyZD0oaW50ZXJmYWNlTmFtZSxtZXRob2RHdWFyZHMsb3B0aW9ucz17fSk9PntcbmNvbnN0e3Nsb3BweT1mYWxzZSxkZWZhdWx0R3VhcmRzPXNsb3BweT8ncGFzc2FibGUnOnVuZGVmaW5lZH09XG5vcHRpb25zO1xuLy9cbi8vXG4vL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzdHJpbmdNZXRob2RHdWFyZHM9e307XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCBzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzPVtdO1xuZm9yKGNvbnN0IGtleSBvZiBvd25LZXlzKG1ldGhvZEd1YXJkcykpe1xuY29uc3QgdmFsdWU9bWV0aG9kR3VhcmRzWy8qICAgICAgICAgICAgICAgICAqL2tleV07XG5pZih0eXBlb2Yga2V5PT09J3N5bWJvbCcpe1xuc3ltYm9sTWV0aG9kR3VhcmRzRW50cmllcy5wdXNoKFtrZXksdmFsdWVdKTtcbiB9ZWxzZXtcbnN0cmluZ01ldGhvZEd1YXJkc1trZXldPXZhbHVlO1xuIH1cbiB9XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzdWx0PW1ha2VUYWdnZWQoJ2d1YXJkOmludGVyZmFjZUd1YXJkJyx7XG5pbnRlcmZhY2VOYW1lLFxubWV0aG9kR3VhcmRzOnN0cmluZ01ldGhvZEd1YXJkcyxcbi4uLihzeW1ib2xNZXRob2RHdWFyZHNFbnRyaWVzLmxlbmd0aD9cbntzeW1ib2xNZXRob2RHdWFyZHM6bWFrZUNvcHlNYXAoc3ltYm9sTWV0aG9kR3VhcmRzRW50cmllcyl9Olxue30pLFxuZGVmYXVsdEd1YXJkc30pO1xuXG5hc3NlcnRJbnRlcmZhY2VHdWFyZChyZXN1bHQpO1xucmV0dXJuICgvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL3Jlc3VsdCk7XG4gfTtcblxuY29uc3QgR3VhcmRQYXlsb2FkU2hhcGVzPWhhcmRlbih7XG4nZ3VhcmQ6YXdhaXRBcmdHdWFyZCc6QXdhaXRBcmdHdWFyZFBheWxvYWRTaGFwZSxcbidndWFyZDpyYXdHdWFyZCc6UmF3R3VhcmRQYXlsb2FkU2hhcGUsXG4nZ3VhcmQ6bWV0aG9kR3VhcmQnOk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlLFxuJ2d1YXJkOmludGVyZmFjZUd1YXJkJzpJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZX0pO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsiZGVmYXVsdExpbWl0cyI6WyJkZWZhdWx0TGltaXRzIl0sImNoZWNrTWF0Y2hlcyI6WyJjaGVja01hdGNoZXMiXSwibWF0Y2hlcyI6WyJtYXRjaGVzIl0sIm11c3RNYXRjaCI6WyJtdXN0TWF0Y2giXSwiYXNzZXJ0UGF0dGVybiI6WyJhc3NlcnRQYXR0ZXJuIl0sImlzUGF0dGVybiI6WyJpc1BhdHRlcm4iXSwiZ2V0UmFua0NvdmVyIjpbImdldFJhbmtDb3ZlciJdLCJNIjpbIk0iXSwia2luZE9mIjpbImtpbmRPZiJdLCJBd2FpdEFyZ0d1YXJkU2hhcGUiOlsiQXdhaXRBcmdHdWFyZFNoYXBlIl0sImlzQXdhaXRBcmdHdWFyZCI6WyJpc0F3YWl0QXJnR3VhcmQiXSwiYXNzZXJ0QXdhaXRBcmdHdWFyZCI6WyJhc3NlcnRBd2FpdEFyZ0d1YXJkIl0sIlJhd0d1YXJkU2hhcGUiOlsiUmF3R3VhcmRTaGFwZSJdLCJpc1Jhd0d1YXJkIjpbImlzUmF3R3VhcmQiXSwiYXNzZXJ0UmF3R3VhcmQiOlsiYXNzZXJ0UmF3R3VhcmQiXSwiU3luY1ZhbHVlR3VhcmRTaGFwZSI6WyJTeW5jVmFsdWVHdWFyZFNoYXBlIl0sIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIjpbIlN5bmNWYWx1ZUd1YXJkTGlzdFNoYXBlIl0sIkFyZ0d1YXJkTGlzdFNoYXBlIjpbIkFyZ0d1YXJkTGlzdFNoYXBlIl0sIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIjpbIk1ldGhvZEd1YXJkUGF5bG9hZFNoYXBlIl0sIk1ldGhvZEd1YXJkU2hhcGUiOlsiTWV0aG9kR3VhcmRTaGFwZSJdLCJhc3NlcnRNZXRob2RHdWFyZCI6WyJhc3NlcnRNZXRob2RHdWFyZCJdLCJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSI6WyJJbnRlcmZhY2VHdWFyZFBheWxvYWRTaGFwZSJdLCJJbnRlcmZhY2VHdWFyZFNoYXBlIjpbIkludGVyZmFjZUd1YXJkU2hhcGUiXSwiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiOlsiYXNzZXJ0SW50ZXJmYWNlR3VhcmQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABURLJnkBAAB5AQAAIgAAAEBlbmRvL3BhdHRlcm5zLXYxLjQuOC9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAI/L0fHEGAABxBgAAIQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOS9pbmRleC5qc3siaW1wb3J0cyI6WyIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qcyIsIi4vc3JjL21lbW8tcmFjZS5qcyIsIi4vc3JjL2lzLXByb21pc2UuanMiLCIuL3NyYy90eXBlcy5qcyJdLCJleHBvcnRzIjpbIm1ha2VQcm9taXNlS2l0IiwicmFjZVByb21pc2VzIl0sInJlZXhwb3J0cyI6WyIuL3NyYy9pcy1wcm9taXNlLmpzIiwiLi9zcmMvdHlwZXMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgIGxldCBtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQsbWVtb1JhY2U7JGjNj19pbXBvcnRzKFtbXCIuL3NyYy9wcm9taXNlLWV4ZWN1dG9yLWtpdC5qc1wiLCBbW1wibWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0XCIsIFskaM2PX2EgPT4gKG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCA9ICRozY9fYSldXV1dLFtcIi4vc3JjL21lbW8tcmFjZS5qc1wiLCBbW1wibWVtb1JhY2VcIiwgWyRozY9fYSA9PiAobWVtb1JhY2UgPSAkaM2PX2EpXV1dXSxbXCIuL3NyYy9pcy1wcm9taXNlLmpzXCIsIFtdXSxbXCIuL3NyYy90eXBlcy5qc1wiLCBbXV1dKTtPYmplY3QuZGVmaW5lUHJvcGVydHkobWFrZVByb21pc2VLaXQsICduYW1lJywge3ZhbHVlOiBcIm1ha2VQcm9taXNlS2l0XCJ9KTskaM2PX29uY2UubWFrZVByb21pc2VLaXQobWFrZVByb21pc2VLaXQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShyYWNlUHJvbWlzZXMsICduYW1lJywge3ZhbHVlOiBcInJhY2VQcm9taXNlc1wifSk7JGjNj19vbmNlLnJhY2VQcm9taXNlcyhyYWNlUHJvbWlzZXMpOyAgIFxuXG5cblxuXG5cblxuXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZT1nbG9iYWxUaGlzLkhhbmRsZWRQcm9taXNlfHxQcm9taXNlO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgbWFrZVByb21pc2VLaXQoKXtcbmNvbnN0e3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfT1tYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQoKTtcblxuY29uc3QgcHJvbWlzZT1uZXcgQmVzdFBpcGVsaW5hYmxlUHJvbWlzZShleGVjdXRvcik7XG5cbnJldHVybiBoYXJkZW4oe3Byb21pc2UscmVzb2x2ZSxyZWplY3R9KTtcbiB9XG5oYXJkZW4obWFrZVByb21pc2VLaXQpO1xuXG4vL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cblxuXG5cblxuXG4gKi9cbmZ1bmN0aW9uICAgICAgICByYWNlUHJvbWlzZXModmFsdWVzKXtcbnJldHVybiBoYXJkZW4obWVtb1JhY2UuY2FsbChCZXN0UGlwZWxpbmFibGVQcm9taXNlLHZhbHVlcykpO1xuIH1cbmhhcmRlbihyYWNlUHJvbWlzZXMpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVByb21pc2VLaXQiOlsibWFrZVByb21pc2VLaXQiXSwicmFjZVByb21pc2VzIjpbInJhY2VQcm9taXNlcyJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACGOdRfhAIAAIQCAAAqAAAAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS45L3NyYy9pcy1wcm9taXNlLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJpc1Byb21pc2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGlzUHJvbWlzZSwgJ25hbWUnLCB7dmFsdWU6IFwiaXNQcm9taXNlXCJ9KTskaM2PX29uY2UuaXNQcm9taXNlKGlzUHJvbWlzZSk7ICAgLypcblxuXG5cblxuICovXG5mdW5jdGlvbiAgICAgICAgaXNQcm9taXNlKG1heWJlUHJvbWlzZSl7XG5yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1heWJlUHJvbWlzZSk9PT1tYXliZVByb21pc2U7XG4gfVxuaGFyZGVuKGlzUHJvbWlzZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJpc1Byb21pc2UiOlsiaXNQcm9taXNlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAPjKfDrLBwAAywcAACkAAABAZW5kby9wcm9taXNlLWtpdC12MS4xLjkvc3JjL21lbW8tcmFjZS5qc3siaW1wb3J0cyI6W10sImV4cG9ydHMiOlsibWVtb1JhY2UiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLypcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cbiovXG5cbmNvbnN0IGlzT2JqZWN0PSh2YWx1ZSk9Pk9iamVjdCh2YWx1ZSk9PT12YWx1ZTtcblxuLypcblxuXG5cblxuICovXG5cbi8qXG5cblxuXG5cbiAqL1xuXG4vL1xuLy9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0IGtub3duUHJvbWlzZXM9bmV3IFdlYWtNYXAoKTtcblxuLypcblxuXG4gKi9cbmNvbnN0IG1hcmtTZXR0bGVkPShyZWNvcmQpPT57XG5pZighcmVjb3JkfHxyZWNvcmQuc2V0dGxlZCl7XG5yZXR1cm4gbmV3IFNldCgpO1xuIH1cblxuY29uc3R7ZGVmZXJyZWRzfT1yZWNvcmQ7XG5PYmplY3QuYXNzaWduKHJlY29yZCx7XG5kZWZlcnJlZHM6dW5kZWZpbmVkLFxuc2V0dGxlZDp0cnVlfSk7XG5cbk9iamVjdC5mcmVlemUocmVjb3JkKTtcbnJldHVybiBkZWZlcnJlZHM7XG4gfTtcblxuLypcblxuXG5cbiAqL1xuY29uc3QgZ2V0TWVtb1JlY29yZD0odmFsdWUpPT57XG5pZighaXNPYmplY3QodmFsdWUpKXtcbi8vXG4vL1xuLy9cbi8vXG5yZXR1cm4gaGFyZGVuKHtzZXR0bGVkOnRydWV9KTtcbiB9XG5cbmxldCByZWNvcmQ9a25vd25Qcm9taXNlcy5nZXQodmFsdWUpO1xuXG5pZighcmVjb3JkKXtcbnJlY29yZD17ZGVmZXJyZWRzOm5ldyBTZXQoKSxzZXR0bGVkOmZhbHNlfTtcbmtub3duUHJvbWlzZXMuc2V0KHZhbHVlLHJlY29yZCk7XG4vL1xuUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKFxuKHZhbCk9PntcbmZvcihjb25zdHtyZXNvbHZlfW9mIG1hcmtTZXR0bGVkKHJlY29yZCkpe1xucmVzb2x2ZSh2YWwpO1xuIH1cbiB9LFxuKGVycik9PntcbmZvcihjb25zdHtyZWplY3R9b2YgbWFya1NldHRsZWQocmVjb3JkKSl7XG5yZWplY3QoZXJyKTtcbiB9XG4gfSk7XG5cbiB9XG5yZXR1cm4gcmVjb3JkO1xuIH07XG5cbmNvbnN0e3JhY2V9PXtcbi8qXG5cblxuXG5cblxuXG5cblxuXG5cblxuICAgKi9cbnJhY2UodmFsdWVzKXtcbmxldCBkZWZlcnJlZDtcbi8qICAgICAgICAgICAgICAgICAqL1xuLy9cbmNvbnN0IGNhY2hlZFZhbHVlcz1bXTtcbmNvbnN0IEM9dGhpcztcbmNvbnN0IHJlc3VsdD1uZXcgQygocmVzb2x2ZSxyZWplY3QpPT57XG5kZWZlcnJlZD17cmVzb2x2ZSxyZWplY3R9O1xuZm9yKGNvbnN0IHZhbHVlIG9mIHZhbHVlcyl7XG5jYWNoZWRWYWx1ZXMucHVzaCh2YWx1ZSk7XG5jb25zdHtzZXR0bGVkLGRlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihzZXR0bGVkKXtcbi8vXG4vL1xuQy5yZXNvbHZlKHZhbHVlKS50aGVuKHJlc29sdmUscmVqZWN0KTtcbiB9ZWxzZXtcbmRlZmVycmVkcy5hZGQoZGVmZXJyZWQpO1xuIH1cbiB9XG4gfSk7XG5cbi8vXG4vL1xucmV0dXJuIHJlc3VsdC5maW5hbGx5KCgpPT57XG5mb3IoY29uc3QgdmFsdWUgb2YgY2FjaGVkVmFsdWVzKXtcbmNvbnN0e2RlZmVycmVkc309Z2V0TWVtb1JlY29yZCh2YWx1ZSk7XG5pZihkZWZlcnJlZHMpe1xuZGVmZXJyZWRzLmRlbGV0ZShkZWZlcnJlZCk7XG4gfVxuIH1cbiB9KTtcbiB9fTskaM2PX29uY2UucmFjZShyYWNlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1lbW9SYWNlIjpbInJhY2UiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAPBQ37qsFAACrBQAANAAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOS9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbIm1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuXG4vKlxuXG5cblxuXG4gKi9cblxuLypcblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdD0oKT0+e1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5sZXQgaW50ZXJuYWxSZXNvbHZlO1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xubGV0IGludGVybmFsUmVqZWN0O1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgcmVzb2x2ZT0odmFsdWUpPT57XG5pZihpbnRlcm5hbFJlc29sdmUpe1xuaW50ZXJuYWxSZXNvbHZlKHZhbHVlKTtcbmludGVybmFsUmVzb2x2ZT1udWxsO1xuaW50ZXJuYWxSZWplY3Q9bnVsbDtcbiB9ZWxzZXtcbmFzc2VydChpbnRlcm5hbFJlc29sdmU9PT1udWxsKTtcbiB9XG4gfTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCByZWplY3Q9KHJlYXNvbik9PntcbmlmKGludGVybmFsUmVqZWN0KXtcbmludGVybmFsUmVqZWN0KHJlYXNvbik7XG5pbnRlcm5hbFJlc29sdmU9bnVsbDtcbmludGVybmFsUmVqZWN0PW51bGw7XG4gfWVsc2V7XG5hc3NlcnQoaW50ZXJuYWxSZWplY3Q9PT1udWxsKTtcbiB9XG4gfTtcblxuY29uc3QgZXhlY3V0b3I9KHJlcyxyZWopPT57XG5hc3NlcnQoaW50ZXJuYWxSZXNvbHZlPT09dW5kZWZpbmVkJiZpbnRlcm5hbFJlamVjdD09PXVuZGVmaW5lZCk7XG5pbnRlcm5hbFJlc29sdmU9cmVzO1xuaW50ZXJuYWxSZWplY3Q9cmVqO1xuIH07XG5cbnJldHVybiBoYXJkZW4oe3Jlc29sdmUscmVqZWN0LGV4ZWN1dG9yfSk7XG4gfTskaM2PX29uY2UubWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KG1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCk7XG5oYXJkZW4obWFrZVJlbGVhc2luZ0V4ZWN1dG9yS2l0KTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7Im1ha2VSZWxlYXNpbmdFeGVjdXRvcktpdCI6WyJtYWtlUmVsZWFzaW5nRXhlY3V0b3JLaXQiXX0sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAABURLJnkBAAB5AQAAJQAAAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOS9zcmMvdHlwZXMuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAAbfFr78RAAC/EQAAHAAAAEBlbmRvL3N0cmVhbS12MS4yLjkvaW5kZXguanN7ImltcG9ydHMiOlsiQGVuZG8vZXZlbnR1YWwtc2VuZCIsIkBlbmRvL3Byb21pc2Uta2l0Il0sImV4cG9ydHMiOlsibWFrZVBpcGUiLCJtYWtlUXVldWUiLCJtYWtlU3RyZWFtIiwibWFwUmVhZGVyIiwibWFwV3JpdGVyIiwicHJpbWUiLCJwdW1wIl0sInJlZXhwb3J0cyI6W10sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICBsZXQgRSxtYWtlUHJvbWlzZUtpdDskaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2V2ZW50dWFsLXNlbmRcIiwgW1tcIkVcIiwgWyRozY9fYSA9PiAoRSA9ICRozY9fYSldXV1dLFtcIkBlbmRvL3Byb21pc2Uta2l0XCIsIFtbXCJtYWtlUHJvbWlzZUtpdFwiLCBbJGjNj19hID0+IChtYWtlUHJvbWlzZUtpdCA9ICRozY9fYSldXV1dXSk7ICAgXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4vL1xuLy9cbi8vXG5jb25zdCBmcmVlemU9LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL09iamVjdC5mcmVlemU7XG5cbi8qXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVF1ZXVlPSgpPT57XG5sZXR7cHJvbWlzZTp0YWlsUHJvbWlzZSxyZXNvbHZlOnRhaWxSZXNvbHZlfT1tYWtlUHJvbWlzZUtpdCgpO1xucmV0dXJue1xucHV0KHZhbHVlKXtcbmNvbnN0e3Jlc29sdmUscHJvbWlzZX09bWFrZVByb21pc2VLaXQoKTtcbnRhaWxSZXNvbHZlKGZyZWV6ZSh7dmFsdWUscHJvbWlzZX0pKTtcbnRhaWxSZXNvbHZlPXJlc29sdmU7XG4gfSxcbmdldCgpe1xuY29uc3QgcHJvbWlzZT10YWlsUHJvbWlzZS50aGVuKChuZXh0KT0+bmV4dC52YWx1ZSk7XG50YWlsUHJvbWlzZT10YWlsUHJvbWlzZS50aGVuKChuZXh0KT0+bmV4dC5wcm9taXNlKTtcbnJldHVybiBoYXJkZW4ocHJvbWlzZSk7XG4gfX07XG5cbiB9OyRozY9fb25jZS5tYWtlUXVldWUobWFrZVF1ZXVlKTtcbmhhcmRlbihtYWtlUXVldWUpO1xuXG4vKlxuXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgbWFrZVN0cmVhbT0oYWNrcyxkYXRhKT0+e1xuY29uc3Qgc3RyZWFtPWhhcmRlbih7XG4vKlxuXG4gICAgICovXG5uZXh0KHZhbHVlKXtcbi8vXG4vL1xuZGF0YS5wdXQoZnJlZXplKHt2YWx1ZSxkb25lOmZhbHNlfSkpO1xucmV0dXJuIGFja3MuZ2V0KCk7XG4gfSxcbi8qXG5cbiAgICAgKi9cbnJldHVybih2YWx1ZSl7XG5kYXRhLnB1dChmcmVlemUoe3ZhbHVlLGRvbmU6dHJ1ZX0pKTtcbnJldHVybiBhY2tzLmdldCgpO1xuIH0sXG4vKlxuXG4gICAgICovXG50aHJvdyhlcnJvcil7XG5kYXRhLnB1dChoYXJkZW4oUHJvbWlzZS5yZWplY3QoZXJyb3IpKSk7XG5yZXR1cm4gYWNrcy5nZXQoKTtcbiB9LFxuW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpe1xucmV0dXJuIHN0cmVhbTtcbiB9fSk7XG5cbnJldHVybiBzdHJlYW07XG4gfTskaM2PX29uY2UubWFrZVN0cmVhbShtYWtlU3RyZWFtKTtcbmhhcmRlbihtYWtlU3RyZWFtKTtcblxuLy9cbi8vXG4vL1xuY29uc3QgICAgICAgIG1ha2VQaXBlPSgpPT57XG5jb25zdCBkYXRhPW1ha2VRdWV1ZSgpO1xuY29uc3QgYWNrcz1tYWtlUXVldWUoKTtcbmNvbnN0IHJlYWRlcj1tYWtlU3RyZWFtKGFja3MsZGF0YSk7XG5jb25zdCB3cml0ZXI9bWFrZVN0cmVhbShkYXRhLGFja3MpO1xucmV0dXJuIGhhcmRlbihbd3JpdGVyLHJlYWRlcl0pO1xuIH07JGjNj19vbmNlLm1ha2VQaXBlKG1ha2VQaXBlKTtcbmhhcmRlbihtYWtlUGlwZSk7XG5cbi8qXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIHB1bXA9YXN5bmMod3JpdGVyLHJlYWRlcixwcmltZXIpPT57XG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0aWNrPShwcm9taXNlKT0+XG5FLndoZW4oXG5wcm9taXNlLFxuKHJlc3VsdCk9PntcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiB3cml0ZXIucmV0dXJuKHJlc3VsdC52YWx1ZSk7XG4gfWVsc2V7XG4vL1xuLy9cbnJldHVybiB0b2NrKHdyaXRlci5uZXh0KHJlc3VsdC52YWx1ZSkpO1xuIH1cbiB9LFxuKC8qICAgICAgICAgICAgICAgICovZXJyb3IpPT57XG5yZXR1cm4gd3JpdGVyLnRocm93KGVycm9yKTtcbiB9KTtcblxuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCB0b2NrPShwcm9taXNlKT0+XG5FLndoZW4oXG5wcm9taXNlLFxuKHJlc3VsdCk9PntcbmlmKHJlc3VsdC5kb25lKXtcbnJldHVybiByZWFkZXIucmV0dXJuKHJlc3VsdC52YWx1ZSk7XG4gfWVsc2V7XG5yZXR1cm4gdGljayhyZWFkZXIubmV4dChyZXN1bHQudmFsdWUpKTtcbiB9XG4gfSxcbigvKiAgICAgICAgICAgICAgICAqL2Vycm9yKT0+e1xucmV0dXJuIHJlYWRlci50aHJvdyhlcnJvcik7XG4gfSk7XG5cbmF3YWl0IHRpY2socmVhZGVyLm5leHQocHJpbWVyKSk7XG5yZXR1cm4gdW5kZWZpbmVkO1xuIH07JGjNj19vbmNlLnB1bXAocHVtcCk7XG5oYXJkZW4ocHVtcCk7XG5cbi8qXG5cblxuXG5cblxuICovXG5jb25zdCAgICAgICAgcHJpbWU9KGdlbmVyYXRvcixwcmltZXIpPT57XG4vL1xuY29uc3QgZmlyc3Q9Z2VuZXJhdG9yLm5leHQocHJpbWVyKTtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmxldCByZXN1bHQ7XG5jb25zdCBwcmltZWQ9aGFyZGVuKHtcbi8qICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIG5leHQodmFsdWUpe1xuaWYocmVzdWx0PT09dW5kZWZpbmVkKXtcbi8vXG5yZXN1bHQ9YXdhaXQgZmlyc3Q7XG5pZihyZXN1bHQuZG9uZSl7XG5yZXR1cm4gcmVzdWx0O1xuIH1cbiB9XG5yZXR1cm4gZ2VuZXJhdG9yLm5leHQodmFsdWUpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgYXN5bmMgcmV0dXJuKHZhbHVlKXtcbmlmKHJlc3VsdD09PXVuZGVmaW5lZCl7XG4vL1xucmVzdWx0PWF3YWl0IGZpcnN0O1xuaWYocmVzdWx0LmRvbmUpe1xucmV0dXJuIHJlc3VsdDtcbiB9XG4gfVxucmV0dXJuIGdlbmVyYXRvci5yZXR1cm4odmFsdWUpO1xuIH0sXG4vKiAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgIGFzeW5jIHRocm93KGVycm9yKXtcbmlmKHJlc3VsdD09PXVuZGVmaW5lZCl7XG4vL1xucmVzdWx0PWF3YWl0IGZpcnN0O1xuaWYocmVzdWx0LmRvbmUpe1xudGhyb3cgZXJyb3I7XG4gfVxuIH1cbnJldHVybiBnZW5lcmF0b3IudGhyb3coZXJyb3IpO1xuIH19KTtcblxucmV0dXJuIHByaW1lZDtcbiB9OyRozY9fb25jZS5wcmltZShwcmltZSk7XG5oYXJkZW4ocHJpbWUpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcFJlYWRlcj0ocmVhZGVyLHRyYW5zZm9ybSk9PntcbmFzeW5jIGZ1bmN0aW9uKnRyYW5zZm9ybUdlbmVyYXRvcigpe1xuZm9yIGF3YWl0KGNvbnN0IHZhbHVlIG9mIHJlYWRlcil7XG55aWVsZCB0cmFuc2Zvcm0odmFsdWUpO1xuIH1cbnJldHVybiB1bmRlZmluZWQ7XG4gfVxuaGFyZGVuKHRyYW5zZm9ybUdlbmVyYXRvcik7XG5yZXR1cm4gaGFyZGVuKHRyYW5zZm9ybUdlbmVyYXRvcigpKTtcbiB9OyRozY9fb25jZS5tYXBSZWFkZXIobWFwUmVhZGVyKTtcbmhhcmRlbihtYXBSZWFkZXIpO1xuXG4vKlxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1hcFdyaXRlcj0od3JpdGVyLHRyYW5zZm9ybSk9PntcbmNvbnN0IHRyYW5zZm9ybWVkV3JpdGVyPWhhcmRlbih7XG4vKlxuXG4gICAgICovXG4gICAgICBhc3luYyBuZXh0KHZhbHVlKXtcbnJldHVybiB3cml0ZXIubmV4dCh0cmFuc2Zvcm0odmFsdWUpKTtcbiB9LFxuLypcblxuICAgICAqL1xuICAgICAgYXN5bmMgdGhyb3coZXJyb3Ipe1xucmV0dXJuIHdyaXRlci50aHJvdyhlcnJvcik7XG4gfSxcbi8qXG5cbiAgICAgKi9cbiAgICAgIGFzeW5jIHJldHVybih2YWx1ZSl7XG5yZXR1cm4gd3JpdGVyLnJldHVybih2YWx1ZSk7XG4gfSxcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKXtcbnJldHVybiB0cmFuc2Zvcm1lZFdyaXRlcjtcbiB9fSk7XG5cbnJldHVybiB0cmFuc2Zvcm1lZFdyaXRlcjtcbiB9OyRozY9fb25jZS5tYXBXcml0ZXIobWFwV3JpdGVyKTtcbmhhcmRlbihtYXBXcml0ZXIpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVF1ZXVlIjpbIm1ha2VRdWV1ZSJdLCJtYWtlU3RyZWFtIjpbIm1ha2VTdHJlYW0iXSwibWFrZVBpcGUiOlsibWFrZVBpcGUiXSwicHVtcCI6WyJwdW1wIl0sInByaW1lIjpbInByaW1lIl0sIm1hcFJlYWRlciI6WyJtYXBSZWFkZXIiXSwibWFwV3JpdGVyIjpbIm1hcFdyaXRlciJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAD0DM7f8gEAAPIBAAAcAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvbWFpbi5qc3siaW1wb3J0cyI6WyIuL3JpbmcwL21haW4uanMiLCIuL3JpbmcxL21haW4uanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL3JpbmcwL21haW4uanMiLCIuL3JpbmcxL21haW4uanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9yaW5nMC9tYWluLmpzXCIsIFtdXSxbXCIuL3JpbmcxL21haW4uanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAwQKAAAAAAAAAAAAVse9b6IBAACiAQAAHwAAAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL0UuanN7ImltcG9ydHMiOlsiQGVuZG8vZmFyIl0sImV4cG9ydHMiOltdLCJyZWV4cG9ydHMiOlsiQGVuZG8vZmFyIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIkBlbmRvL2ZhclwiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAAB8vcxPngIAAJ4CAAAsAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvYXN5bmMtZ2VuZXJhdGUuanN7ImltcG9ydHMiOltdLCJleHBvcnRzIjpbImFzeW5jR2VuZXJhdGUiXSwicmVleHBvcnRzIjpbXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbXSk7ICAgLy9cblxuLypcblxuXG5cblxuXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIGFzeW5jR2VuZXJhdGU9KG5leHQpPT57XG5yZXR1cm4gaGFyZGVuKHtcbltTeW1ib2wuYXN5bmNJdGVyYXRvcl06KCk9PntcbnJldHVybiBoYXJkZW4oe1xubmV4dDphc3luYygpPT5oYXJkZW4obmV4dCgpKX0pO1xuXG4gfX0pO1xuXG4gfTskaM2PX29uY2UuYXN5bmNHZW5lcmF0ZShhc3luY0dlbmVyYXRlKTtcbmhhcmRlbihhc3luY0dlbmVyYXRlKTtcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7ImFzeW5jR2VuZXJhdGUiOlsiYXN5bmNHZW5lcmF0ZSJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACbSC63FQIAABUCAAAiAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFpbi5qc3siaW1wb3J0cyI6WyIuL0UuanMiLCIuL21ha2Vycy5qcyIsIi4vYXN5bmMtZ2VuZXJhdGUuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL0UuanMiLCIuL2FzeW5jLWdlbmVyYXRlLmpzIiwiLi9tYWtlcnMuanMiXSwiX19zeW5jTW9kdWxlUHJvZ3JhbV9fIjoiKHsgICBpbXBvcnRzOiAkaM2PX2ltcG9ydHMsICAgbGl2ZVZhcjogJGjNj19saXZlLCAgIG9uY2VWYXI6ICRozY9fb25jZSwgICBpbXBvcnQ6ICRozY9faW1wb3J0LCAgIGltcG9ydE1ldGE6ICRozY9fX19fbWV0YSwgfSkgPT4gKGZ1bmN0aW9uICgpIHsgJ3VzZSBzdHJpY3QnOyAgICRozY9faW1wb3J0cyhbW1wiLi9FLmpzXCIsIFtdXSxbXCIuL21ha2Vycy5qc1wiLCBbXV0sW1wiLi9hc3luYy1nZW5lcmF0ZS5qc1wiLCBbXV1dKTsgICBcbn0pKClcbiIsIl9fbGl2ZUV4cG9ydE1hcF9fIjp7fSwiX19yZWV4cG9ydE1hcF9fIjp7fSwiX19maXhlZEV4cG9ydE1hcF9fIjp7fSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAADb5r8/+wcAAPsHAAAkAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvbWFrZXJzLmpzeyJpbXBvcnRzIjpbXSwiZXhwb3J0cyI6WyJtYWtlTWFwIiwibWFrZVByb21pc2UiLCJtYWtlU2V0IiwibWFrZVdlYWtNYXAiLCJtYWtlV2Vha1NldCJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgJGjNj19pbXBvcnRzKFtdKTsgICAvL1xuLy9cbi8vXG5cbi8qXG5cblxuXG5cbiAqL1xuY29uc3QgICAgICAgIG1ha2VQcm9taXNlPShleGVjdXRvcik9PmhhcmRlbihuZXcgUHJvbWlzZShleGVjdXRvcikpOyRozY9fb25jZS5tYWtlUHJvbWlzZShtYWtlUHJvbWlzZSk7XG5oYXJkZW4obWFrZVByb21pc2UpO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZU1hcD0oZW50cmllc09ySXRlcmFibGUpPT5oYXJkZW4obmV3IE1hcChlbnRyaWVzT3JJdGVyYWJsZSkpOyRozY9fb25jZS5tYWtlTWFwKG1ha2VNYXApO1xuaGFyZGVuKG1ha2VNYXApO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuY29uc3QgICAgICAgIG1ha2VTZXQ9KHZhbHVlcyk9PmhhcmRlbihuZXcgU2V0KHZhbHVlcykpOyRozY9fb25jZS5tYWtlU2V0KG1ha2VTZXQpO1xuaGFyZGVuKG1ha2VTZXQpO1xuXG4vKlxuXG5cblxuICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG5jb25zdCAgICAgICAgbWFrZVdlYWtNYXA9KGVudHJpZXMpPT5oYXJkZW4obmV3IFdlYWtNYXAoZW50cmllcykpOyRozY9fb25jZS5tYWtlV2Vha01hcChtYWtlV2Vha01hcCk7XG5oYXJkZW4obWFrZVdlYWtNYXApO1xuXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbmNvbnN0ICAgICAgICBtYWtlV2Vha1NldD0odmFsdWVzKT0+aGFyZGVuKG5ldyBXZWFrU2V0KHZhbHVlcykpOyRozY9fb25jZS5tYWtlV2Vha1NldChtYWtlV2Vha1NldCk7XG5oYXJkZW4obWFrZVdlYWtTZXQpO1xufSkoKVxuIiwiX19saXZlRXhwb3J0TWFwX18iOnt9LCJfX3JlZXhwb3J0TWFwX18iOnt9LCJfX2ZpeGVkRXhwb3J0TWFwX18iOnsibWFrZVByb21pc2UiOlsibWFrZVByb21pc2UiXSwibWFrZU1hcCI6WyJtYWtlTWFwIl0sIm1ha2VTZXQiOlsibWFrZVNldCJdLCJtYWtlV2Vha01hcCI6WyJtYWtlV2Vha01hcCJdLCJtYWtlV2Vha1NldCI6WyJtYWtlV2Vha1NldCJdfSwiX19uZWVkc0ltcG9ydF9fIjpmYWxzZSwiX19uZWVkc0ltcG9ydE1ldGFfXyI6ZmFsc2V9UEsDBAoAAAAAAAAAAACv0+vqeAMAAHgDAAApAAAAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzEvYXN5bmMtdG9vbHMuanN7ImltcG9ydHMiOlsiLi4vcmluZzAvbWFpbi5qcyJdLCJleHBvcnRzIjpbImFzeW5jRG9XaGlsZSJdLCJyZWV4cG9ydHMiOltdLCJfX3N5bmNNb2R1bGVQcm9ncmFtX18iOiIoeyAgIGltcG9ydHM6ICRozY9faW1wb3J0cywgICBsaXZlVmFyOiAkaM2PX2xpdmUsICAgb25jZVZhcjogJGjNj19vbmNlLCAgIGltcG9ydDogJGjNj19pbXBvcnQsICAgaW1wb3J0TWV0YTogJGjNj19fX19tZXRhLCB9KSA9PiAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7ICAgbGV0IG1ha2VQcm9taXNlOyRozY9faW1wb3J0cyhbW1wiLi4vcmluZzAvbWFpbi5qc1wiLCBbW1wibWFrZVByb21pc2VcIiwgWyRozY9fYSA9PiAobWFrZVByb21pc2UgPSAkaM2PX2EpXV1dXV0pOyAgIFxuXG5cblxuLypcblxuXG5cblxuXG5cblxuXG4gKi9cbmNvbnN0ICAgICAgICBhc3luY0RvV2hpbGU9KGJvZHkpPT57XG5yZXR1cm4gbWFrZVByb21pc2UoKHJlc29sdmUscmVqZWN0KT0+e1xuY29uc3QgbG9vcD1hc3luYygpPT57XG5jb25zdCBkb0NvbnRpbnVlPWF3YWl0IGJvZHkoKTtcbmlmKCFkb0NvbnRpbnVlKXtcbi8vXG5yZXNvbHZlKHVuZGVmaW5lZCk7XG5yZXR1cm47XG4gfVxuXG4vL1xuLy9cbmxvb3AoKS5jYXRjaChyZWplY3QpO1xuIH07XG5cbmxvb3AoKS5jYXRjaChyZWplY3QpO1xuIH0pO1xuIH07JGjNj19vbmNlLmFzeW5jRG9XaGlsZShhc3luY0RvV2hpbGUpO1xuaGFyZGVuKGFzeW5jRG9XaGlsZSk7XG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6eyJhc3luY0RvV2hpbGUiOlsiYXN5bmNEb1doaWxlIl19LCJfX25lZWRzSW1wb3J0X18iOmZhbHNlLCJfX25lZWRzSW1wb3J0TWV0YV9fIjpmYWxzZX1QSwMECgAAAAAAAAAAAAZfiv+3AQAAtwEAACIAAABqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9tYWluLmpzeyJpbXBvcnRzIjpbIi4vYXN5bmMtdG9vbHMuanMiXSwiZXhwb3J0cyI6W10sInJlZXhwb3J0cyI6WyIuL2FzeW5jLXRvb2xzLmpzIl0sIl9fc3luY01vZHVsZVByb2dyYW1fXyI6Iih7ICAgaW1wb3J0czogJGjNj19pbXBvcnRzLCAgIGxpdmVWYXI6ICRozY9fbGl2ZSwgICBvbmNlVmFyOiAkaM2PX29uY2UsICAgaW1wb3J0OiAkaM2PX2ltcG9ydCwgICBpbXBvcnRNZXRhOiAkaM2PX19fX21ldGEsIH0pID0+IChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JzsgICAkaM2PX2ltcG9ydHMoW1tcIi4vYXN5bmMtdG9vbHMuanNcIiwgW11dXSk7ICAgXG59KSgpXG4iLCJfX2xpdmVFeHBvcnRNYXBfXyI6e30sIl9fcmVleHBvcnRNYXBfXyI6e30sIl9fZml4ZWRFeHBvcnRNYXBfXyI6e30sIl9fbmVlZHNJbXBvcnRfXyI6ZmFsc2UsIl9fbmVlZHNJbXBvcnRNZXRhX18iOmZhbHNlfVBLAQIeAwoAAAAAAAAAAAAqQucUZfoAAGX6AAAUAAAAAAAAAAAAAACkgQAAAABjb21wYXJ0bWVudC1tYXAuanNvblBLAQIeAwoAAAAAAAAAAADoKLsorgEAAK4BAAAgAAAAAAAAAAAAAACkgZf6AABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvaGVhcC5qc1BLAQIeAwoAAAAAAAAAAAAFREsmeQEAAHkBAAAnAAAAAAAAAAAAAACkgYP8AABAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2V4cG9ydHMuanNQSwECHgMKAAAAAAAAAAAAWxIkmYgKAACICgAAJAAAAAAAAAAAAAAApIFB/gAAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9oZWFwLmpzUEsBAh4DCgAAAAAAAAAAAMzs0QuaAgAAmgIAACUAAAAAAAAAAAAAAKSBCwkBAEBhZ29yaWMvYmFzZS16b25lLXYwLjEuMC9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAUdiVg4cCAACHAgAAKwAAAAAAAAAAAAAApIHoCwEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9pcy1wYXNzYWJsZS5qc1BLAQIeAwoAAAAAAAAAAAB+5BUkpAMAAKQDAAAkAAAAAAAAAAAAAACkgbgOAQBAYWdvcmljL2Jhc2Utem9uZS12MC4xLjAvc3JjL2tleXMuanNQSwECHgMKAAAAAAAAAAAACZbmPREHAAARBwAAKQAAAAAAAAAAAAAApIGeEgEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy9tYWtlLW9uY2UuanNQSwECHgMKAAAAAAAAAAAAAXSK+44JAACOCQAALQAAAAAAAAAAAAAApIH2GQEAQGFnb3JpYy9iYXNlLXpvbmUtdjAuMS4wL3NyYy93YXRjaC1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAEjyudUoBQAAKAUAACEAAAAAAAAAAAAAAKSBzyMBAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy9jYWNoZS5qc1BLAQIeAwoAAAAAAAAAAAASnwuxMgIAADICAAAgAAAAAAAAAAAAAACkgTYpAQBAYWdvcmljL2NhY2hlLXYwLjMuMi9zcmMvbWFpbi5qc1BLAQIeAwoAAAAAAAAAAACMvBfLOwQAADsEAAAhAAAAAAAAAAAAAACkgaYrAQBAYWdvcmljL2NhY2hlLXYwLjMuMi9zcmMvc3RhdGUuanNQSwECHgMKAAAAAAAAAAAAZRew0LEXAACxFwAAIQAAAAAAAAAAAAAApIEgMAEAQGFnb3JpYy9jYWNoZS12MC4zLjIvc3JjL3N0b3JlLmpzUEsBAh4DCgAAAAAAAAAAAAVESyZ5AQAAeQEAACEAAAAAAAAAAAAAAKSBEEgBAEBhZ29yaWMvY2FjaGUtdjAuMy4yL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAABHUexiLx0AAC8dAAAmAAAAAAAAAAAAAACkgchJAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvYW1vdW50TWF0aC5qc1BLAQIeAwoAAAAAAAAAAABKkNB8AwQAAAMEAAAnAAAAAAAAAAAAAACkgTtnAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvYW1vdW50U3RvcmUuanNQSwECHgMKAAAAAAAAAAAARbUcGvYFAAD2BQAAJwAAAAAAAAAAAAAApIGDawEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL2Rpc3BsYXlJbmZvLmpzUEsBAh4DCgAAAAAAAAAAAF+WkLZuAgAAbgIAACEAAAAAAAAAAAAAAKSBvnEBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADwAy3lFBYAABQWAAAlAAAAAAAAAAAAAACkgWt0AQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvaXNzdWVyS2l0LmpzUEsBAh4DCgAAAAAAAAAAAN/GbqcQBgAAEAYAADoAAAAAAAAAAAAAAKSBwooBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9tYXRoSGVscGVycy9jb3B5QmFnTWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAXsFLb84FAADOBQAAOgAAAAAAAAAAAAAApIEqkQEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL2NvcHlTZXRNYXRoSGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAACZhaAmlgQAAJYEAAA2AAAAAAAAAAAAAACkgVCXAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvbWF0aEhlbHBlcnMvbmF0TWF0aEhlbHBlcnMuanNQSwECHgMKAAAAAAAAAAAAVgsI8XcGAAB3BgAANgAAAAAAAAAAAAAApIE6nAEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL21hdGhIZWxwZXJzL3NldE1hdGhIZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAI2/ad6yAwAAsgMAACMAAAAAAAAAAAAAAKSBBaMBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50LmpzUEsBAh4DCgAAAAAAAAAAAJIp6jsaIAAAGiAAACkAAAAAAAAAAAAAAKSB+KYBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wYXltZW50TGVkZ2VyLmpzUEsBAh4DCgAAAAAAAAAAAHow94npEAAA6RAAACEAAAAAAAAAAAAAAKSBWccBAEBhZ29yaWMvZXJ0cC12MC4xNi4yL3NyYy9wdXJzZS5qc1BLAQIeAwoAAAAAAAAAAAAxw5crBQYAAAUGAAAtAAAAAAAAAAAAAACkgYHYAQBAYWdvcmljL2VydHAtdjAuMTYuMi9zcmMvdHJhbnNpZW50Tm90aWZpZXIuanNQSwECHgMKAAAAAAAAAAAAwd6/mPsYAAD7GAAAJgAAAAAAAAAAAAAApIHR3gEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAABURLJnkBAAB5AQAAJwAAAAAAAAAAAAAApIEQ+AEAQGFnb3JpYy9lcnRwLXYwLjE2LjIvc3JjL3R5cGVzLWluZGV4LmpzUEsBAh4DCgAAAAAAAAAAAJ2t3N8YGgAAGBoAACcAAAAAAAAAAAAAAKSBzvkBAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9jYWxsYmFjay5qc1BLAQIeAwoAAAAAAAAAAABz0F7h/AUAAPwFAAAlAAAAAAAAAAAAAACkgSsUAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvY29uZmlnLmpzUEsBAh4DCgAAAAAAAAAAAF+DFqp3BAAAdwQAACQAAAAAAAAAAAAAAKSBahoCAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9kZWJ1Zy5qc1BLAQIeAwoAAAAAAAAAAADTiaG/vQIAAL0CAAAlAAAAAAAAAAAAAACkgSMfAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvZXJyb3JzLmpzUEsBAh4DCgAAAAAAAAAAACHQpXKiBQAAogUAACQAAAAAAAAAAAAAAKSBIyICAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADojmdATgcAAE4HAAAnAAAAAAAAAAAAAACkgQcoAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvanMtdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAHwlK4QIWAAACFgAALwAAAAAAAAAAAAAApIGaLwIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL2xpYi1jaGFpblN0b3JhZ2UuanNQSwECHgMKAAAAAAAAAAAAwmKKfUAQAABAEAAAJgAAAAAAAAAAAAAApIHpRQIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL21hcnNoYWwuanNQSwECHgMKAAAAAAAAAAAA12mQKZoIAACaCAAAKwAAAAAAAAAAAAAApIFtVgIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL21ldGhvZC10b29scy5qc1BLAQIeAwoAAAAAAAAAAAANUHkNtR0AALUdAAAoAAAAAAAAAAAAAACkgVBfAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvc2VzLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAANEcd+m6IgAAuiIAADEAAAAAAAAAAAAAAKSBS30CAEBhZ29yaWMvaW50ZXJuYWwtdjAuMy4yL3NyYy9zdG9yYWdlLXRlc3QtdXRpbHMuanNQSwECHgMKAAAAAAAAAAAA6xiOAVAGAABQBgAALAAAAAAAAAAAAAAApIFUoAIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3Rlc3RpbmctdXRpbHMuanNQSwECHgMKAAAAAAAAAAAAGERIDiwDAAAsAwAAKAAAAAAAAAAAAAAApIHupgIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3R5cGVDaGVjay5qc1BLAQIeAwoAAAAAAAAAAACQ+4b/SQQAAEkEAAApAAAAAAAAAAAAAACkgWCqAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdHlwZUd1YXJkcy5qc1BLAQIeAwoAAAAAAAAAAAAFREsmeQEAAHkBAAAqAAAAAAAAAAAAAACkgfCuAgBAYWdvcmljL2ludGVybmFsLXYwLjMuMi9zcmMvdHlwZXMtaW5kZXguanNQSwECHgMKAAAAAAAAAAAA03qr5UEHAABBBwAAKgAAAAAAAAAAAAAApIGxsAIAQGFnb3JpYy9pbnRlcm5hbC12MC4zLjIvc3JjL3VwZ3JhZGUtYXBpLmpzUEsBAh4DCgAAAAAAAAAAABKO4l82CAAANggAADMAAAAAAAAAAAAAAKSBOrgCAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9hc3luY0l0ZXJhYmxlQWRhcHRvci5qc1BLAQIeAwoAAAAAAAAAAACgC8uyDAgAAAwIAAAkAAAAAAAAAAAAAACkgcHAAgBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAA855uW6AQAACgEAAAJwAAAAAAAAAAAAAApIEPyQIAQGFnb3JpYy9ub3RpZmllci12MC42LjIvc3JjL25vdGlmaWVyLmpzUEsBAh4DCgAAAAAAAAAAAAwUbIhcKwAAXCsAACoAAAAAAAAAAAAAAKSB9NkCAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9wdWJsaXNoLWtpdC5qc1BLAQIeAwoAAAAAAAAAAAAxrk4KQAgAAEAIAAAuAAAAAAAAAAAAAACkgZgFAwBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3RvcmVkLW5vdGlmaWVyLmpzUEsBAh4DCgAAAAAAAAAAACqIP9wcFgAAHBYAACcAAAAAAAAAAAAAAKSBJA4DAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdG9yZXN1Yi5qc1BLAQIeAwoAAAAAAAAAAACpV3xwUBIAAFASAAAoAAAAAAAAAAAAAACkgYUkAwBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvc3Vic2NyaWJlLmpzUEsBAh4DCgAAAAAAAAAAAJfiv+IACAAAAAgAACkAAAAAAAAAAAAAAKSBGzcDAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy9zdWJzY3JpYmVyLmpzUEsBAh4DCgAAAAAAAAAAAC7X44scBAAAHAQAACQAAAAAAAAAAAAAAKSBYj8DAEBhZ29yaWMvbm90aWZpZXItdjAuNi4yL3NyYy90b3BpYy5qc1BLAQIeAwoAAAAAAAAAAAAFREsmeQEAAHkBAAAqAAAAAAAAAAAAAACkgcBDAwBAYWdvcmljL25vdGlmaWVyLXYwLjYuMi9zcmMvdHlwZXMtaW5kZXguanNQSwECHgMKAAAAAAAAAAAA0yzIgLEGAACxBgAALQAAAAAAAAAAAAAApIGBRQMAQGFnb3JpYy9ub3RpZmllci12MC42LjIvdG9vbHMvdGVzdFN1cHBvcnRzLmpzUEsBAh4DCgAAAAAAAAAAAAKr88m8HQAAvB0AADMAAAAAAAAAAAAAAKSBfUwDAEBhZ29yaWMvc21hcnQtd2FsbGV0LXYwLjUuMy9zcmMvbWFyc2hhbC1jb250ZXh0cy5qc1BLAQIeAwoAAAAAAAAAAAChqv0vww0AAMMNAAAhAAAAAAAAAAAAAACkgYpqAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAzuWXSGQFAABkBQAALAAAAAAAAAAAAAAApIGMeAMAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL2xlZ2FjeS9sZWdhY3lNYXAuanNQSwECHgMKAAAAAAAAAAAAbfFZIyYFAAAmBQAAMAAAAAAAAAAAAAAApIE6fgMAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL2xlZ2FjeS9sZWdhY3lXZWFrTWFwLmpzUEsBAh4DCgAAAAAAAAAAAIWebmbLEAAAyxAAADEAAAAAAAAAAAAAAKSBroMDAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy9zdG9yZXMvc2NhbGFyTWFwU3RvcmUuanNQSwECHgMKAAAAAAAAAAAAQkx9HvwLAAD8CwAAMQAAAAAAAAAAAAAApIHIlAMAQGFnb3JpYy9zdG9yZS12MC45LjIvc3JjL3N0b3Jlcy9zY2FsYXJTZXRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAADG/C1l3w0AAN8NAAA1AAAAAAAAAAAAAACkgROhAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhcldlYWtNYXBTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAACGL77EogoAAKIKAAA1AAAAAAAAAAAAAACkgUWvAwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3NjYWxhcldlYWtTZXRTdG9yZS5qc1BLAQIeAwoAAAAAAAAAAADFAowz2g4AANoOAAAuAAAAAAAAAAAAAACkgTq6AwBAYWdvcmljL3N0b3JlLXYwLjkuMi9zcmMvc3RvcmVzL3N0b3JlLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAAVESyZ5AQAAeQEAACEAAAAAAAAAAAAAAKSBYMkDAEBhZ29yaWMvc3RvcmUtdjAuOS4yL3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAABvG5SMzxYAAM8WAAAoAAAAAAAAAAAAAACkgRjLAwBAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvZXhvLXV0aWxzLmpzUEsBAh4DCgAAAAAAAAAAAOco1IzXCAAA1wgAACQAAAAAAAAAAAAAAKSBLeIDAEBhZ29yaWMvdmF0LWRhdGEtdjAuNS4yL3NyYy9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADeGWoD2xYAANsWAAAwAAAAAAAAAAAAAACkgUbrAwBAYWdvcmljL3ZhdC1kYXRhLXYwLjUuMi9zcmMvdmF0LWRhdGEtYmluZGluZ3MuanNQSwECHgMKAAAAAAAAAAAAc3i9rmURAABlEQAAHwAAAAAAAAAAAAAApIFvAgQAQGFnb3JpYy92YXRzLXYwLjE1LjEvc3JjL2NyYy5qc1BLAQIeAwoAAAAAAAAAAACSC1tuYyEAAGMhAAAlAAAAAAAAAAAAAACkgREUBABAYWdvcmljL3ZhdHMtdjAuMTUuMS9zcmMvbGliLWJvYXJkLmpzUEsBAh4DCgAAAAAAAAAAAB9PqMLlCwAA5QsAAC0AAAAAAAAAAAAAAKSBtzUEAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvYWN0aW9ucy5qc1BLAQIeAwoAAAAAAAAAAABTChau1wIAANcCAAA1AAAAAAAAAAAAAACkgedBBABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2JpZ2ludFN0cmluZ2lmeS5qc1BLAQIeAwoAAAAAAAAAAABZFOv2iQkAAIkJAAAuAAAAAAAAAAAAAACkgRFFBABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2RhdGUtbm93LmpzUEsBAh4DCgAAAAAAAAAAAMCv6nUJEwAACRMAADoAAAAAAAAAAAAAAKSB5k4EAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvZmluZE9yTWFrZUludml0YXRpb24uanNQSwECHgMKAAAAAAAAAAAAVGqlKXoCAAB6AgAANAAAAAAAAAAAAAAApIFHYgQAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9pbnRlcm5hbC10eXBlcy5qc1BLAQIeAwoAAAAAAAAAAADxmAgEywgAAMsIAAAxAAAAAAAAAAAAAACkgRNlBABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2lzc3VlclRhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAIBsAWQ0HgAANB4AADMAAAAAAAAAAAAAAKSBLW4EAEBhZ29yaWMvd2FsbGV0LWJhY2tlbmQtdjAuMTQuMy9zcmMvbGliLWRlaHlkcmF0ZS5qc1BLAQIeAwoAAAAAAAAAAADvP+roXqUAAF6lAAAwAAAAAAAAAAAAAACkgbKMBABAYWdvcmljL3dhbGxldC1iYWNrZW5kLXYwLjE0LjMvc3JjL2xpYi13YWxsZXQuanNQSwECHgMKAAAAAAAAAAAAv+TdXugCAADoAgAALAAAAAAAAAAAAAAApIFeMgUAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy9wdWJzdWIuanNQSwECHgMKAAAAAAAAAAAApcHj38A1AADANQAALAAAAAAAAAAAAAAApIGQNQUAQGFnb3JpYy93YWxsZXQtYmFja2VuZC12MC4xNC4zL3NyYy93YWxsZXQuanNQSwECHgMKAAAAAAAAAAAAcHmrRl0ZAABdGQAAMwAAAAAAAAAAAAAApIGaawUAQGFnb3JpYy96b2UtdjAuMjYuMi9zcmMvY29udHJhY3RTdXBwb3J0L3JlY29yZGVyLmpzUEsBAh4DCgAAAAAAAAAAAP3jOXG3AQAAtwEAAB4AAAAAAAAAAAAAAKSBSIUFAEBhZ29yaWMvem9uZS12MC4yLjIvZHVyYWJsZS5qc1BLAQIeAwoAAAAAAAAAAAC9HnJ6OREAADkRAAAiAAAAAAAAAAAAAACkgTuHBQBAYWdvcmljL3pvbmUtdjAuMi4yL3NyYy9kdXJhYmxlLmpzUEsBAh4DCgAAAAAAAAAAACoyYzj2BAAA9gQAACsAAAAAAAAAAAAAAKSBtJgFAEBlbmRvL2NvbW1vbi12MS4yLjkvYXBwbHktbGFiZWxpbmctZXJyb3IuanNQSwECHgMKAAAAAAAAAAAACX+gTIsEAACLBAAAKgAAAAAAAAAAAAAApIHznQUAQGVuZG8vY29tbW9uLXYxLjIuOS9mcm9tLXVuaXF1ZS1lbnRyaWVzLmpzUEsBAh4DCgAAAAAAAAAAAL0YEu1mAgAAZgIAACQAAAAAAAAAAAAAAKSBxqIFAEBlbmRvL2NvbW1vbi12MS4yLjkvaWRlbnQtY2hlY2tlci5qc1BLAQIeAwoAAAAAAAAAAAAk9mwRpwIAAKcCAAAmAAAAAAAAAAAAAACkgW6lBQBAZW5kby9jb21tb24tdjEuMi45L2xpc3QtZGlmZmVyZW5jZS5qc1BLAQIeAwoAAAAAAAAAAADJ0zLIjAMAAIwDAAAqAAAAAAAAAAAAAACkgVmoBQBAZW5kby9jb21tb24tdjEuMi45L21ha2UtYXJyYXktaXRlcmF0b3IuanNQSwECHgMKAAAAAAAAAAAALXItnGgCAABoAgAAJAAAAAAAAAAAAAAApIEtrAUAQGVuZG8vY29tbW9uLXYxLjIuOS9tYWtlLWl0ZXJhdG9yLmpzUEsBAh4DCgAAAAAAAAAAAArPU6wxAwAAMQMAACEAAAAAAAAAAAAAAKSB164FAEBlbmRvL2NvbW1vbi12MS4yLjkvb2JqZWN0LW1hcC5qc1BLAQIeAwoAAAAAAAAAAACGSuucEAQAABAEAAAmAAAAAAAAAAAAAACkgUeyBQBAZW5kby9jb21tb24tdjEuMi45L29iamVjdC1tZXRhLW1hcC5qc1BLAQIeAwoAAAAAAAAAAAC7uRglEAQAABAEAAAkAAAAAAAAAAAAAACkgZu2BQBAZW5kby9jb21tb24tdjEuMi45L3Rocm93LWxhYmVsZWQuanNQSwECHgMKAAAAAAAAAAAA6eutgcMBAADDAQAAIQAAAAAAAAAAAAAApIHtugUAQGVuZG8vZW52LW9wdGlvbnMtdjEuMS44L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAABWcaJAbDgAAGw4AACsAAAAAAAAAAAAAAKSB77wFAEBlbmRvL2Vudi1vcHRpb25zLXYxLjEuOC9zcmMvZW52LW9wdGlvbnMuanNQSwECHgMKAAAAAAAAAAAAWrW6gA4IAAAOCAAAHAAAAAAAAAAAAAAApIFTywUAQGVuZG8vZXJyb3JzLXYxLjIuOS9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADMGR2ETBEAAEwRAAAjAAAAAAAAAAAAAACkgZvTBQBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjMuMC9zcmMvRS5qc1BLAQIeAwoAAAAAAAAAAAAFREsmeQEAAHkBAAApAAAAAAAAAAAAAACkgSjlBQBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjMuMC9zcmMvZXhwb3J0cy5qc1BLAQIeAwoAAAAAAAAAAAC21bu22QwAANkMAAAnAAAAAAAAAAAAAACkgejmBQBAZW5kby9ldmVudHVhbC1zZW5kLXYxLjMuMC9zcmMvbG9jYWwuanNQSwECHgMKAAAAAAAAAAAAbAyYzhgNAAAYDQAANQAAAAAAAAAAAAAApIEG9AUAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAvc3JjL21lc3NhZ2UtYnJlYWtwb2ludHMuanNQSwECHgMKAAAAAAAAAAAAvTu/JWIDAABiAwAAKQAAAAAAAAAAAAAApIFxAQYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAvc3JjL25vLXNoaW0uanNQSwECHgMKAAAAAAAAAAAApJpQMo4JAACOCQAALQAAAAAAAAAAAAAApIEaBQYAQGVuZG8vZXZlbnR1YWwtc2VuZC12MS4zLjAvc3JjL3RyYWNrLXR1cm5zLmpzUEsBAh4DCgAAAAAAAAAAAH+mlRyFAgAAhQIAACMAAAAAAAAAAAAAAKSB8w4GAEBlbmRvL2V2ZW50dWFsLXNlbmQtdjEuMy4wL3V0aWxzLmpzUEsBAh4DCgAAAAAAAAAAABi5hL6BAgAAgQIAABkAAAAAAAAAAAAAAKSBuREGAEBlbmRvL2V4by12MS41LjgvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAdkoX8AYVAAAGFQAAIgAAAAAAAAAAAAAApIFxFAYAQGVuZG8vZXhvLXYxLjUuOC9zcmMvZXhvLW1ha2Vycy5qc1BLAQIeAwoAAAAAAAAAAAAjBf3IFTAAABUwAAAhAAAAAAAAAAAAAACkgbcpBgBAZW5kby9leG8tdjEuNS44L3NyYy9leG8tdG9vbHMuanNQSwECHgMKAAAAAAAAAAAA15ZQ/mUCAABlAgAAJQAAAAAAAAAAAAAApIELWgYAQGVuZG8vZXhvLXYxLjUuOC9zcmMvZ2V0LWludGVyZmFjZS5qc1BLAQIeAwoAAAAAAAAAAAAFREsmeQEAAHkBAAAdAAAAAAAAAAAAAACkgbNcBgBAZW5kby9leG8tdjEuNS44L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAAFREsmeQEAAHkBAAAgAAAAAAAAAAAAAACkgWdeBgBAZW5kby9mYXItdjEuMS4xMC9zcmMvZXhwb3J0cy5qc1BLAQIeAwoAAAAAAAAAAABSckKpuQIAALkCAAAeAAAAAAAAAAAAAACkgR5gBgBAZW5kby9mYXItdjEuMS4xMC9zcmMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAWX9kFqMHAACjBwAAHQAAAAAAAAAAAAAApIETYwYAQGVuZG8vbWFyc2hhbC12MS42LjMvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAql0NqYhDAACIQwAAKgAAAAAAAAAAAAAApIHxagYAQGVuZG8vbWFyc2hhbC12MS42LjMvc3JjL2VuY29kZVBhc3NhYmxlLmpzUEsBAh4DCgAAAAAAAAAAANm6fDOBIgAAgSIAACsAAAAAAAAAAAAAAKSBwa4GAEBlbmRvL21hcnNoYWwtdjEuNi4zL3NyYy9lbmNvZGVUb0NhcERhdGEuanNQSwECHgMKAAAAAAAAAAAA+4mezV0iAABdIgAALQAAAAAAAAAAAAAApIGL0QYAQGVuZG8vbWFyc2hhbC12MS42LjMvc3JjL2VuY29kZVRvU21hbGxjYXBzLmpzUEsBAh4DCgAAAAAAAAAAADLFCCU/IwAAPyMAACoAAAAAAAAAAAAAAKSBM/QGAEBlbmRvL21hcnNoYWwtdjEuNi4zL3NyYy9tYXJzaGFsLWp1c3Rpbi5qc1BLAQIeAwoAAAAAAAAAAAATlrJl7QYAAO0GAAAtAAAAAAAAAAAAAACkgboXBwBAZW5kby9tYXJzaGFsLXYxLjYuMy9zcmMvbWFyc2hhbC1zdHJpbmdpZnkuanNQSwECHgMKAAAAAAAAAAAAlYANwlknAABZJwAAIwAAAAAAAAAAAAAApIHyHgcAQGVuZG8vbWFyc2hhbC12MS42LjMvc3JjL21hcnNoYWwuanNQSwECHgMKAAAAAAAAAAAAyA8wyssnAADLJwAAJQAAAAAAAAAAAAAApIGMRgcAQGVuZG8vbWFyc2hhbC12MS42LjMvc3JjL3JhbmtPcmRlci5qc1BLAQIeAwoAAAAAAAAAAAAFREsmeQEAAHkBAAAhAAAAAAAAAAAAAACkgZpuBwBAZW5kby9tYXJzaGFsLXYxLjYuMy9zcmMvdHlwZXMuanNQSwECHgMKAAAAAAAAAAAAZVGWYogFAACIBQAAHgAAAAAAAAAAAAAApIFScAcAQGVuZG8vbmF0LXY1LjAuMTQvc3JjL2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAGCFhwhuCgAAbgoAACAAAAAAAAAAAAAAAKSBFnYHAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAJqP4mGDBgAAgwYAACgAAAAAAAAAAAAAAKSBwoAHAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9jb3B5QXJyYXkuanNQSwECHgMKAAAAAAAAAAAAtjvGvFgIAABYCAAAKQAAAAAAAAAAAAAApIGLhwcAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL2NvcHlSZWNvcmQuanNQSwECHgMKAAAAAAAAAAAAR4T6L4UKAACFCgAALgAAAAAAAAAAAAAApIEqkAcAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL2RlZXBseUZ1bGZpbGxlZC5qc1BLAQIeAwoAAAAAAAAAAAC+YONjYxIAAGMSAAAkAAAAAAAAAAAAAACkgfuaBwBAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvZXJyb3IuanNQSwECHgMKAAAAAAAAAAAAJuaYAb4FAAC+BQAAKwAAAAAAAAAAAAAApIGgrQcAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL2l0ZXItaGVscGVycy5qc1BLAQIeAwoAAAAAAAAAAAAJVM1gcBEAAHARAAAnAAAAAAAAAAAAAACkgaezBwBAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvbWFrZS1mYXIuanNQSwECHgMKAAAAAAAAAAAASM2xMK8EAACvBAAAKQAAAAAAAAAAAAAApIFcxQcAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL21ha2VUYWdnZWQuanNQSwECHgMKAAAAAAAAAAAAR6bO6kMVAABDFQAAMAAAAAAAAAAAAAAApIFSygcAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3Bhc3NTdHlsZS1oZWxwZXJzLmpzUEsBAh4DCgAAAAAAAAAAAENt1cnfJAAA3yQAACoAAAAAAAAAAAAAAKSB498HAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9wYXNzU3R5bGVPZi5qc1BLAQIeAwoAAAAAAAAAAAD2aIte1RcAANUXAAAoAAAAAAAAAAAAAACkgQoFCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvcmVtb3RhYmxlLmpzUEsBAh4DCgAAAAAAAAAAAAfx1kK1DAAAtQwAACsAAAAAAAAAAAAAAKSBJR0IAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy9zYWZlLXByb21pc2UuanNQSwECHgMKAAAAAAAAAAAALmnjqOEHAADhBwAAJQAAAAAAAAAAAAAApIEjKggAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3N0cmluZy5qc1BLAQIeAwoAAAAAAAAAAAAFz1lyKwoAACsKAAAlAAAAAAAAAAAAAACkgUcyCABAZW5kby9wYXNzLXN0eWxlLXYxLjQuOC9zcmMvc3ltYm9sLmpzUEsBAh4DCgAAAAAAAAAAAOL4+0tDBwAAQwcAACUAAAAAAAAAAAAAAKSBtTwIAEBlbmRvL3Bhc3Mtc3R5bGUtdjEuNC44L3NyYy90YWdnZWQuanNQSwECHgMKAAAAAAAAAAAAikvENicJAAAnCQAAKQAAAAAAAAAAAAAApIE7RAgAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3R5cGVHdWFyZHMuanNQSwECHgMKAAAAAAAAAAAABURLJnkBAAB5AQAAJAAAAAAAAAAAAAAApIGpTQgAQGVuZG8vcGFzcy1zdHlsZS12MS40Ljgvc3JjL3R5cGVzLmpzUEsBAh4DCgAAAAAAAAAAAPC1O0bmDgAA5g4AAB4AAAAAAAAAAAAAAKSBZE8IAEBlbmRvL3BhdHRlcm5zLXYxLjQuOC9pbmRleC5qc1BLAQIeAwoAAAAAAAAAAADMxv08aDIAAGgyAAAqAAAAAAAAAAAAAACkgYZeCABAZW5kby9wYXR0ZXJucy12MS40Ljgvc3JjL2tleXMvY2hlY2tLZXkuanNQSwECHgMKAAAAAAAAAAAAZL5Ck0IVAABCFQAALQAAAAAAAAAAAAAApIE2kQgAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9rZXlzL2NvbXBhcmVLZXlzLmpzUEsBAh4DCgAAAAAAAAAAAMBYuEX2DQAA9g0AACkAAAAAAAAAAAAAAKSBw6YIAEBlbmRvL3BhdHRlcm5zLXYxLjQuOC9zcmMva2V5cy9jb3B5QmFnLmpzUEsBAh4DCgAAAAAAAAAAAHeeE4P9CwAA/QsAACkAAAAAAAAAAAAAAKSBALUIAEBlbmRvL3BhdHRlcm5zLXYxLjQuOC9zcmMva2V5cy9jb3B5U2V0LmpzUEsBAh4DCgAAAAAAAAAAAJNpZIUPEwAADxMAADkAAAAAAAAAAAAAAKSBRMEIAEBlbmRvL3BhdHRlcm5zLXYxLjQuOC9zcmMva2V5cy9rZXljb2xsZWN0aW9uLW9wZXJhdG9ycy5qc1BLAQIeAwoAAAAAAAAAAACXGHwygRYAAIEWAAA1AAAAAAAAAAAAAACkgarUCABAZW5kby9wYXR0ZXJucy12MS40Ljgvc3JjL2tleXMvbWVyZ2UtYmFnLW9wZXJhdG9ycy5qc1BLAQIeAwoAAAAAAAAAAAA2IGmluhwAALocAAA1AAAAAAAAAAAAAACkgX7rCABAZW5kby9wYXR0ZXJucy12MS40Ljgvc3JjL2tleXMvbWVyZ2Utc2V0LW9wZXJhdG9ycy5qc1BLAQIeAwoAAAAAAAAAAADkIGUvHBkAABwZAAA2AAAAAAAAAAAAAACkgYsICQBAZW5kby9wYXR0ZXJucy12MS40Ljgvc3JjL3BhdHRlcm5zL2dldEd1YXJkUGF5bG9hZHMuanNQSwECHgMKAAAAAAAAAAAAqN63vvetAAD3rQAANQAAAAAAAAAAAAAApIH7IQkAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy9wYXR0ZXJucy9wYXR0ZXJuTWF0Y2hlcnMuanNQSwECHgMKAAAAAAAAAAAABURLJnkBAAB5AQAAIgAAAAAAAAAAAAAApIFF0AkAQGVuZG8vcGF0dGVybnMtdjEuNC44L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAAj8vR8cQYAAHEGAAAhAAAAAAAAAAAAAACkgf7RCQBAZW5kby9wcm9taXNlLWtpdC12MS4xLjkvaW5kZXguanNQSwECHgMKAAAAAAAAAAAAhjnUX4QCAACEAgAAKgAAAAAAAAAAAAAApIGu2AkAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS45L3NyYy9pcy1wcm9taXNlLmpzUEsBAh4DCgAAAAAAAAAAAPjKfDrLBwAAywcAACkAAAAAAAAAAAAAAKSBetsJAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOS9zcmMvbWVtby1yYWNlLmpzUEsBAh4DCgAAAAAAAAAAADwUN+6rBQAAqwUAADQAAAAAAAAAAAAAAKSBjOMJAEBlbmRvL3Byb21pc2Uta2l0LXYxLjEuOS9zcmMvcHJvbWlzZS1leGVjdXRvci1raXQuanNQSwECHgMKAAAAAAAAAAAABURLJnkBAAB5AQAAJQAAAAAAAAAAAAAApIGJ6QkAQGVuZG8vcHJvbWlzZS1raXQtdjEuMS45L3NyYy90eXBlcy5qc1BLAQIeAwoAAAAAAAAAAAABt8WvvxEAAL8RAAAcAAAAAAAAAAAAAACkgUXrCQBAZW5kby9zdHJlYW0tdjEuMi45L2luZGV4LmpzUEsBAh4DCgAAAAAAAAAAAPQMzt/yAQAA8gEAABwAAAAAAAAAAAAAAKSBPv0JAGplc3NpZS5qcy12MC4zLjQvc3JjL21haW4uanNQSwECHgMKAAAAAAAAAAAAVse9b6IBAACiAQAAHwAAAAAAAAAAAAAApIFq/wkAamVzc2llLmpzLXYwLjMuNC9zcmMvcmluZzAvRS5qc1BLAQIeAwoAAAAAAAAAAAB8vcxPngIAAJ4CAAAsAAAAAAAAAAAAAACkgUkBCgBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9hc3luYy1nZW5lcmF0ZS5qc1BLAQIeAwoAAAAAAAAAAACbSC63FQIAABUCAAAiAAAAAAAAAAAAAACkgTEECgBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMC9tYWluLmpzUEsBAh4DCgAAAAAAAAAAANvmvz/7BwAA+wcAACQAAAAAAAAAAAAAAKSBhgYKAGplc3NpZS5qcy12MC4zLjQvc3JjL3JpbmcwL21ha2Vycy5qc1BLAQIeAwoAAAAAAAAAAACv0+vqeAMAAHgDAAApAAAAAAAAAAAAAACkgcMOCgBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9hc3luYy10b29scy5qc1BLAQIeAwoAAAAAAAAAAAAGX4r/twEAALcBAAAiAAAAAAAAAAAAAACkgYISCgBqZXNzaWUuanMtdjAuMy40L3NyYy9yaW5nMS9tYWluLmpzUEsFBgAAAAChAKEAUDYAAHkUCgAAAA==","endoZipBase64Sha512":"e99deacf3d44ce30a379c3cd38d7b32c88f3ccf971a8d9e271f164bb79700a4463d6109f81aa31da16890456aaf879c15b6114717008def4bd82c5fad2c35e9e"};